From f84b73f0bb4a5bc4cac10dde9dc394b3cd6af7a2 Mon Sep 17 00:00:00 2001 From: Nandan Tumu Date: Wed, 28 Feb 2024 18:42:17 -0500 Subject: [PATCH 1/4] Changed gym directory to src --- pyproject.toml | 2 +- {gym => src}/f110_gym/__init__.py | 0 {gym => src}/f110_gym/envs/__init__.py | 0 {gym => src}/f110_gym/envs/action.py | 0 {gym => src}/f110_gym/envs/base_classes.py | 0 {gym => src}/f110_gym/envs/collision_models.py | 0 {gym => src}/f110_gym/envs/dynamic_models.py | 0 {gym => src}/f110_gym/envs/f110_env.py | 0 {gym => src}/f110_gym/envs/f110_env_backup.py | 0 {gym => src}/f110_gym/envs/integrator.py | 0 {gym => src}/f110_gym/envs/laser_models.py | 0 {gym => src}/f110_gym/envs/observation.py | 0 {gym => src}/f110_gym/envs/rendering/__init__.py | 0 {gym => src}/f110_gym/envs/rendering/objects.py | 0 {gym => src}/f110_gym/envs/rendering/renderer.py | 0 {gym => src}/f110_gym/envs/rendering/rendering.yaml | 0 {gym => src}/f110_gym/envs/rendering/rendering_pygame.py | 0 {gym => src}/f110_gym/envs/reset/__init__.py | 0 {gym => src}/f110_gym/envs/reset/masked_reset.py | 0 {gym => src}/f110_gym/envs/reset/reset_fn.py | 0 {gym => src}/f110_gym/envs/reset/utils.py | 0 {gym => src}/f110_gym/envs/track/__init__.py | 0 {gym => src}/f110_gym/envs/track/cubic_spline.py | 0 {gym => src}/f110_gym/envs/track/raceline.py | 0 {gym => src}/f110_gym/envs/track/track.py | 0 {gym => src}/f110_gym/envs/track/utils.py | 0 {gym => src}/f110_gym/envs/utils.py | 0 27 files changed, 1 insertion(+), 1 deletion(-) rename {gym => src}/f110_gym/__init__.py (100%) rename {gym => src}/f110_gym/envs/__init__.py (100%) rename {gym => src}/f110_gym/envs/action.py (100%) rename {gym => src}/f110_gym/envs/base_classes.py (100%) rename {gym => src}/f110_gym/envs/collision_models.py (100%) rename {gym => src}/f110_gym/envs/dynamic_models.py (100%) rename {gym => src}/f110_gym/envs/f110_env.py (100%) rename {gym => src}/f110_gym/envs/f110_env_backup.py (100%) rename {gym => src}/f110_gym/envs/integrator.py (100%) rename {gym => src}/f110_gym/envs/laser_models.py (100%) rename {gym => src}/f110_gym/envs/observation.py (100%) rename {gym => src}/f110_gym/envs/rendering/__init__.py (100%) rename {gym => src}/f110_gym/envs/rendering/objects.py (100%) rename {gym => src}/f110_gym/envs/rendering/renderer.py (100%) rename {gym => src}/f110_gym/envs/rendering/rendering.yaml (100%) rename {gym => src}/f110_gym/envs/rendering/rendering_pygame.py (100%) rename {gym => src}/f110_gym/envs/reset/__init__.py (100%) rename {gym => src}/f110_gym/envs/reset/masked_reset.py (100%) rename {gym => src}/f110_gym/envs/reset/reset_fn.py (100%) rename {gym => src}/f110_gym/envs/reset/utils.py (100%) rename {gym => src}/f110_gym/envs/track/__init__.py (100%) rename {gym => src}/f110_gym/envs/track/cubic_spline.py (100%) rename {gym => src}/f110_gym/envs/track/raceline.py (100%) rename {gym => src}/f110_gym/envs/track/track.py (100%) rename {gym => src}/f110_gym/envs/track/utils.py (100%) rename {gym => src}/f110_gym/envs/utils.py (100%) diff --git a/pyproject.toml b/pyproject.toml index d505e15f..4751ff52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ homepage = "https://f1tenth.org" repository = "https://github.com/f1tenth/f1tenth_gym" documentation = "https://f1tenth-gym.readthedocs.io/en/latest/" packages = [ - { include = "f110_gym", from = "gym"}, + { include = "f110_gym", from = "src"}, ] [tool.poetry.dependencies] diff --git a/gym/f110_gym/__init__.py b/src/f110_gym/__init__.py similarity index 100% rename from gym/f110_gym/__init__.py rename to src/f110_gym/__init__.py diff --git a/gym/f110_gym/envs/__init__.py b/src/f110_gym/envs/__init__.py similarity index 100% rename from gym/f110_gym/envs/__init__.py rename to src/f110_gym/envs/__init__.py diff --git a/gym/f110_gym/envs/action.py b/src/f110_gym/envs/action.py similarity index 100% rename from gym/f110_gym/envs/action.py rename to src/f110_gym/envs/action.py diff --git a/gym/f110_gym/envs/base_classes.py b/src/f110_gym/envs/base_classes.py similarity index 100% rename from gym/f110_gym/envs/base_classes.py rename to src/f110_gym/envs/base_classes.py diff --git a/gym/f110_gym/envs/collision_models.py b/src/f110_gym/envs/collision_models.py similarity index 100% rename from gym/f110_gym/envs/collision_models.py rename to src/f110_gym/envs/collision_models.py diff --git a/gym/f110_gym/envs/dynamic_models.py b/src/f110_gym/envs/dynamic_models.py similarity index 100% rename from gym/f110_gym/envs/dynamic_models.py rename to src/f110_gym/envs/dynamic_models.py diff --git a/gym/f110_gym/envs/f110_env.py b/src/f110_gym/envs/f110_env.py similarity index 100% rename from gym/f110_gym/envs/f110_env.py rename to src/f110_gym/envs/f110_env.py diff --git a/gym/f110_gym/envs/f110_env_backup.py b/src/f110_gym/envs/f110_env_backup.py similarity index 100% rename from gym/f110_gym/envs/f110_env_backup.py rename to src/f110_gym/envs/f110_env_backup.py diff --git a/gym/f110_gym/envs/integrator.py b/src/f110_gym/envs/integrator.py similarity index 100% rename from gym/f110_gym/envs/integrator.py rename to src/f110_gym/envs/integrator.py diff --git a/gym/f110_gym/envs/laser_models.py b/src/f110_gym/envs/laser_models.py similarity index 100% rename from gym/f110_gym/envs/laser_models.py rename to src/f110_gym/envs/laser_models.py diff --git a/gym/f110_gym/envs/observation.py b/src/f110_gym/envs/observation.py similarity index 100% rename from gym/f110_gym/envs/observation.py rename to src/f110_gym/envs/observation.py diff --git a/gym/f110_gym/envs/rendering/__init__.py b/src/f110_gym/envs/rendering/__init__.py similarity index 100% rename from gym/f110_gym/envs/rendering/__init__.py rename to src/f110_gym/envs/rendering/__init__.py diff --git a/gym/f110_gym/envs/rendering/objects.py b/src/f110_gym/envs/rendering/objects.py similarity index 100% rename from gym/f110_gym/envs/rendering/objects.py rename to src/f110_gym/envs/rendering/objects.py diff --git a/gym/f110_gym/envs/rendering/renderer.py b/src/f110_gym/envs/rendering/renderer.py similarity index 100% rename from gym/f110_gym/envs/rendering/renderer.py rename to src/f110_gym/envs/rendering/renderer.py diff --git a/gym/f110_gym/envs/rendering/rendering.yaml b/src/f110_gym/envs/rendering/rendering.yaml similarity index 100% rename from gym/f110_gym/envs/rendering/rendering.yaml rename to src/f110_gym/envs/rendering/rendering.yaml diff --git a/gym/f110_gym/envs/rendering/rendering_pygame.py b/src/f110_gym/envs/rendering/rendering_pygame.py similarity index 100% rename from gym/f110_gym/envs/rendering/rendering_pygame.py rename to src/f110_gym/envs/rendering/rendering_pygame.py diff --git a/gym/f110_gym/envs/reset/__init__.py b/src/f110_gym/envs/reset/__init__.py similarity index 100% rename from gym/f110_gym/envs/reset/__init__.py rename to src/f110_gym/envs/reset/__init__.py diff --git a/gym/f110_gym/envs/reset/masked_reset.py b/src/f110_gym/envs/reset/masked_reset.py similarity index 100% rename from gym/f110_gym/envs/reset/masked_reset.py rename to src/f110_gym/envs/reset/masked_reset.py diff --git a/gym/f110_gym/envs/reset/reset_fn.py b/src/f110_gym/envs/reset/reset_fn.py similarity index 100% rename from gym/f110_gym/envs/reset/reset_fn.py rename to src/f110_gym/envs/reset/reset_fn.py diff --git a/gym/f110_gym/envs/reset/utils.py b/src/f110_gym/envs/reset/utils.py similarity index 100% rename from gym/f110_gym/envs/reset/utils.py rename to src/f110_gym/envs/reset/utils.py diff --git a/gym/f110_gym/envs/track/__init__.py b/src/f110_gym/envs/track/__init__.py similarity index 100% rename from gym/f110_gym/envs/track/__init__.py rename to src/f110_gym/envs/track/__init__.py diff --git a/gym/f110_gym/envs/track/cubic_spline.py b/src/f110_gym/envs/track/cubic_spline.py similarity index 100% rename from gym/f110_gym/envs/track/cubic_spline.py rename to src/f110_gym/envs/track/cubic_spline.py diff --git a/gym/f110_gym/envs/track/raceline.py b/src/f110_gym/envs/track/raceline.py similarity index 100% rename from gym/f110_gym/envs/track/raceline.py rename to src/f110_gym/envs/track/raceline.py diff --git a/gym/f110_gym/envs/track/track.py b/src/f110_gym/envs/track/track.py similarity index 100% rename from gym/f110_gym/envs/track/track.py rename to src/f110_gym/envs/track/track.py diff --git a/gym/f110_gym/envs/track/utils.py b/src/f110_gym/envs/track/utils.py similarity index 100% rename from gym/f110_gym/envs/track/utils.py rename to src/f110_gym/envs/track/utils.py diff --git a/gym/f110_gym/envs/utils.py b/src/f110_gym/envs/utils.py similarity index 100% rename from gym/f110_gym/envs/utils.py rename to src/f110_gym/envs/utils.py From 935cb2798fbc0836436f72ea154f010f605d04d2 Mon Sep 17 00:00:00 2001 From: Nandan Tumu Date: Fri, 1 Mar 2024 19:29:58 -0500 Subject: [PATCH 2/4] Refactored library name - Fixed bug that prevented test running --- examples/run_in_empty_track.py | 2 +- f1tenth_gym/__init__.py | 6 + .../f110_gym => f1tenth_gym}/envs/__init__.py | 0 {src/f110_gym => f1tenth_gym}/envs/action.py | 2 +- .../envs/base_classes.py | 12 +- .../envs/collision_models.py | 0 .../envs/dynamic_models.py | 0 .../f110_gym => f1tenth_gym}/envs/f110_env.py | 18 +- .../envs/integrator.py | 0 .../envs/laser_models.py | 2 +- .../envs/observation.py | 0 .../envs/rendering/__init__.py | 6 +- .../envs/rendering/objects.py | 4 +- .../envs/rendering/renderer.py | 0 .../envs/rendering/rendering.yaml | 0 .../envs/rendering/rendering_pygame.py | 6 +- .../envs/reset/__init__.py | 6 +- .../envs/reset/masked_reset.py | 6 +- .../envs/reset/reset_fn.py | 0 .../envs/reset/utils.py | 2 +- .../envs/track/__init__.py | 0 .../envs/track/cubic_spline.py | 0 .../envs/track/raceline.py | 4 +- .../envs/track/track.py | 6 +- .../envs/track/utils.py | 0 {src/f110_gym => f1tenth_gym}/envs/utils.py | 0 poetry.lock | 468 ++++++------- pyproject.toml | 8 +- src/f110_gym/__init__.py | 6 - src/f110_gym/envs/f110_env_backup.py | 624 ------------------ tests/test_collision_checks.py | 2 +- tests/test_dynamics.py | 2 +- tests/test_f110_env.py | 10 +- tests/test_observation.py | 8 +- tests/test_renderer.py | 26 +- tests/test_scan_sim.py | 2 +- tests/test_track.py | 2 +- tests/test_utils.py | 4 +- 38 files changed, 311 insertions(+), 933 deletions(-) create mode 100644 f1tenth_gym/__init__.py rename {src/f110_gym => f1tenth_gym}/envs/__init__.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/action.py (99%) rename {src/f110_gym => f1tenth_gym}/envs/base_classes.py (98%) rename {src/f110_gym => f1tenth_gym}/envs/collision_models.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/dynamic_models.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/f110_env.py (97%) rename {src/f110_gym => f1tenth_gym}/envs/integrator.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/laser_models.py (99%) rename {src/f110_gym => f1tenth_gym}/envs/observation.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/rendering/__init__.py (86%) rename {src/f110_gym => f1tenth_gym}/envs/rendering/objects.py (98%) rename {src/f110_gym => f1tenth_gym}/envs/rendering/renderer.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/rendering/rendering.yaml (100%) rename {src/f110_gym => f1tenth_gym}/envs/rendering/rendering_pygame.py (98%) rename {src/f110_gym => f1tenth_gym}/envs/reset/__init__.py (83%) rename {src/f110_gym => f1tenth_gym}/envs/reset/masked_reset.py (94%) rename {src/f110_gym => f1tenth_gym}/envs/reset/reset_fn.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/reset/utils.py (98%) rename {src/f110_gym => f1tenth_gym}/envs/track/__init__.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/track/cubic_spline.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/track/raceline.py (97%) rename {src/f110_gym => f1tenth_gym}/envs/track/track.py (97%) rename {src/f110_gym => f1tenth_gym}/envs/track/utils.py (100%) rename {src/f110_gym => f1tenth_gym}/envs/utils.py (100%) delete mode 100644 src/f110_gym/__init__.py delete mode 100644 src/f110_gym/envs/f110_env_backup.py diff --git a/examples/run_in_empty_track.py b/examples/run_in_empty_track.py index 3c924e3e..e156f244 100644 --- a/examples/run_in_empty_track.py +++ b/examples/run_in_empty_track.py @@ -1,7 +1,7 @@ import numpy as np from waypoint_follow import PurePursuitPlanner -from f110_gym.envs.track import Track +from f1tenth_gym.envs.track import Track import gymnasium as gym diff --git a/f1tenth_gym/__init__.py b/f1tenth_gym/__init__.py new file mode 100644 index 00000000..f5e6334c --- /dev/null +++ b/f1tenth_gym/__init__.py @@ -0,0 +1,6 @@ +import gymnasium as gym + +gym.register( + id="f1tenth-v0", + entry_point="f1tenth_gym.envs:F110Env", +) diff --git a/src/f110_gym/envs/__init__.py b/f1tenth_gym/envs/__init__.py similarity index 100% rename from src/f110_gym/envs/__init__.py rename to f1tenth_gym/envs/__init__.py diff --git a/src/f110_gym/envs/action.py b/f1tenth_gym/envs/action.py similarity index 99% rename from src/f110_gym/envs/action.py rename to f1tenth_gym/envs/action.py index 93658462..c9eb7a6f 100644 --- a/src/f110_gym/envs/action.py +++ b/f1tenth_gym/envs/action.py @@ -5,7 +5,7 @@ import warnings import gymnasium as gym import numpy as np -from f110_gym.envs.dynamic_models import pid_steer, pid_accl +from .dynamic_models import pid_steer, pid_accl class LongitudinalActionEnum(Enum): diff --git a/src/f110_gym/envs/base_classes.py b/f1tenth_gym/envs/base_classes.py similarity index 98% rename from src/f110_gym/envs/base_classes.py rename to f1tenth_gym/envs/base_classes.py index b1e28483..f5990dc6 100644 --- a/src/f110_gym/envs/base_classes.py +++ b/f1tenth_gym/envs/base_classes.py @@ -28,12 +28,12 @@ """ from __future__ import annotations import numpy as np -from f110_gym.envs.dynamic_models import DynamicModel -from f110_gym.envs.action import CarAction -from f110_gym.envs.collision_models import collision_multiple, get_vertices -from f110_gym.envs.integrator import EulerIntegrator, IntegratorType -from f110_gym.envs.laser_models import ScanSimulator2D, check_ttc_jit, ray_cast -from f110_gym.envs.track import Track +from .dynamic_models import DynamicModel +from .action import CarAction +from .collision_models import collision_multiple, get_vertices +from .integrator import EulerIntegrator, IntegratorType +from .laser_models import ScanSimulator2D, check_ttc_jit, ray_cast +from .track import Track class RaceCar(object): diff --git a/src/f110_gym/envs/collision_models.py b/f1tenth_gym/envs/collision_models.py similarity index 100% rename from src/f110_gym/envs/collision_models.py rename to f1tenth_gym/envs/collision_models.py diff --git a/src/f110_gym/envs/dynamic_models.py b/f1tenth_gym/envs/dynamic_models.py similarity index 100% rename from src/f110_gym/envs/dynamic_models.py rename to f1tenth_gym/envs/dynamic_models.py diff --git a/src/f110_gym/envs/f110_env.py b/f1tenth_gym/envs/f110_env.py similarity index 97% rename from src/f110_gym/envs/f110_env.py rename to f1tenth_gym/envs/f110_env.py index ba3458f9..89a8064b 100644 --- a/src/f110_gym/envs/f110_env.py +++ b/f1tenth_gym/envs/f110_env.py @@ -27,19 +27,19 @@ # gym imports import gymnasium as gym -from f110_gym.envs.action import (CarAction, +from .action import (CarAction, from_single_to_multi_action_space) -from f110_gym.envs.integrator import IntegratorType -from f110_gym.envs.rendering import make_renderer +from .integrator import IntegratorType +from .rendering import make_renderer -from f110_gym.envs.track import Track +from .track import Track # base classes -from f110_gym.envs.base_classes import Simulator, DynamicModel -from f110_gym.envs.observation import observation_factory -from f110_gym.envs.reset import make_reset_fn -from f110_gym.envs.track import Track -from f110_gym.envs.utils import deep_update +from .base_classes import Simulator, DynamicModel +from .observation import observation_factory +from .reset import make_reset_fn +from .track import Track +from .utils import deep_update # others diff --git a/src/f110_gym/envs/integrator.py b/f1tenth_gym/envs/integrator.py similarity index 100% rename from src/f110_gym/envs/integrator.py rename to f1tenth_gym/envs/integrator.py diff --git a/src/f110_gym/envs/laser_models.py b/f1tenth_gym/envs/laser_models.py similarity index 99% rename from src/f110_gym/envs/laser_models.py rename to f1tenth_gym/envs/laser_models.py index d23a3bee..8d3c2e9b 100644 --- a/src/f110_gym/envs/laser_models.py +++ b/f1tenth_gym/envs/laser_models.py @@ -29,7 +29,7 @@ import unittest import numpy as np -from f110_gym.envs.track import Track +from .track import Track from numba import njit from scipy.ndimage import distance_transform_edt as edt diff --git a/src/f110_gym/envs/observation.py b/f1tenth_gym/envs/observation.py similarity index 100% rename from src/f110_gym/envs/observation.py rename to f1tenth_gym/envs/observation.py diff --git a/src/f110_gym/envs/rendering/__init__.py b/f1tenth_gym/envs/rendering/__init__.py similarity index 86% rename from src/f110_gym/envs/rendering/__init__.py rename to f1tenth_gym/envs/rendering/__init__.py index d66d2a25..9a56bd22 100644 --- a/src/f110_gym/envs/rendering/__init__.py +++ b/f1tenth_gym/envs/rendering/__init__.py @@ -1,8 +1,8 @@ import pathlib from typing import Any, Optional -from f110_gym.envs.rendering.renderer import RenderSpec, EnvRenderer -from f110_gym.envs.track import Track +from .renderer import RenderSpec, EnvRenderer +from ..track import Track def make_renderer( @@ -28,7 +28,7 @@ def make_renderer( render_fps : int, optional rendering frames per second, by default 100 """ - from f110_gym.envs.rendering.rendering_pygame import PygameEnvRenderer + from .rendering_pygame import PygameEnvRenderer cfg_file = pathlib.Path(__file__).parent.absolute() / "rendering.yaml" render_spec = RenderSpec.from_yaml(cfg_file) diff --git a/src/f110_gym/envs/rendering/objects.py b/f1tenth_gym/envs/rendering/objects.py similarity index 98% rename from src/f110_gym/envs/rendering/objects.py rename to f1tenth_gym/envs/rendering/objects.py index 26ad3d0a..57f156d9 100644 --- a/src/f110_gym/envs/rendering/objects.py +++ b/f1tenth_gym/envs/rendering/objects.py @@ -3,8 +3,8 @@ import numpy as np import pygame -from f110_gym.envs.collision_models import get_vertices -from f110_gym.envs.rendering import RenderSpec +from ..collision_models import get_vertices +from . import RenderSpec class TextObject: diff --git a/src/f110_gym/envs/rendering/renderer.py b/f1tenth_gym/envs/rendering/renderer.py similarity index 100% rename from src/f110_gym/envs/rendering/renderer.py rename to f1tenth_gym/envs/rendering/renderer.py diff --git a/src/f110_gym/envs/rendering/rendering.yaml b/f1tenth_gym/envs/rendering/rendering.yaml similarity index 100% rename from src/f110_gym/envs/rendering/rendering.yaml rename to f1tenth_gym/envs/rendering/rendering.yaml diff --git a/src/f110_gym/envs/rendering/rendering_pygame.py b/f1tenth_gym/envs/rendering/rendering_pygame.py similarity index 98% rename from src/f110_gym/envs/rendering/rendering_pygame.py rename to f1tenth_gym/envs/rendering/rendering_pygame.py index e1b57777..e443b2d0 100644 --- a/src/f110_gym/envs/rendering/rendering_pygame.py +++ b/f1tenth_gym/envs/rendering/rendering_pygame.py @@ -8,13 +8,13 @@ import pygame from PIL import ImageColor -from f110_gym.envs.rendering.objects import ( +from .objects import ( Map, Car, TextObject, ) -from f110_gym.envs.track import Track -from f110_gym.envs.rendering.renderer import EnvRenderer, RenderSpec +from ..track import Track +from .renderer import EnvRenderer, RenderSpec # one-line instructions visualized at the top of the screen (if show_info=True) INSTRUCTION_TEXT = "Mouse click (L/M/R): Change POV - 'S' key: On/Off" diff --git a/src/f110_gym/envs/reset/__init__.py b/f1tenth_gym/envs/reset/__init__.py similarity index 83% rename from src/f110_gym/envs/reset/__init__.py rename to f1tenth_gym/envs/reset/__init__.py index d5f56ea1..bae55b2f 100644 --- a/src/f110_gym/envs/reset/__init__.py +++ b/f1tenth_gym/envs/reset/__init__.py @@ -1,7 +1,7 @@ from __future__ import annotations -from f110_gym.envs.reset.masked_reset import GridResetFn, AllTrackResetFn -from f110_gym.envs.reset.reset_fn import ResetFn -from f110_gym.envs.track import Track +from .masked_reset import GridResetFn, AllTrackResetFn +from .reset_fn import ResetFn +from ..track import Track def make_reset_fn(type: str | None, track: Track, num_agents: int, **kwargs) -> ResetFn: diff --git a/src/f110_gym/envs/reset/masked_reset.py b/f1tenth_gym/envs/reset/masked_reset.py similarity index 94% rename from src/f110_gym/envs/reset/masked_reset.py rename to f1tenth_gym/envs/reset/masked_reset.py index 1f4e6983..16f7785c 100644 --- a/src/f110_gym/envs/reset/masked_reset.py +++ b/f1tenth_gym/envs/reset/masked_reset.py @@ -2,9 +2,9 @@ import numpy as np -from f110_gym.envs.reset.reset_fn import ResetFn -from f110_gym.envs.reset.utils import sample_around_waypoint -from f110_gym.envs.track import Track, Raceline +from .reset_fn import ResetFn +from .utils import sample_around_waypoint +from ..track import Track, Raceline class MaskedResetFn(ResetFn): diff --git a/src/f110_gym/envs/reset/reset_fn.py b/f1tenth_gym/envs/reset/reset_fn.py similarity index 100% rename from src/f110_gym/envs/reset/reset_fn.py rename to f1tenth_gym/envs/reset/reset_fn.py diff --git a/src/f110_gym/envs/reset/utils.py b/f1tenth_gym/envs/reset/utils.py similarity index 98% rename from src/f110_gym/envs/reset/utils.py rename to f1tenth_gym/envs/reset/utils.py index c677572f..74846cf8 100644 --- a/src/f110_gym/envs/reset/utils.py +++ b/f1tenth_gym/envs/reset/utils.py @@ -1,6 +1,6 @@ import numpy as np -from f110_gym.envs.track import Raceline +from ..track import Raceline def sample_around_waypoint( diff --git a/src/f110_gym/envs/track/__init__.py b/f1tenth_gym/envs/track/__init__.py similarity index 100% rename from src/f110_gym/envs/track/__init__.py rename to f1tenth_gym/envs/track/__init__.py diff --git a/src/f110_gym/envs/track/cubic_spline.py b/f1tenth_gym/envs/track/cubic_spline.py similarity index 100% rename from src/f110_gym/envs/track/cubic_spline.py rename to f1tenth_gym/envs/track/cubic_spline.py diff --git a/src/f110_gym/envs/track/raceline.py b/f1tenth_gym/envs/track/raceline.py similarity index 97% rename from src/f110_gym/envs/track/raceline.py rename to f1tenth_gym/envs/track/raceline.py index e1420b24..9215596f 100644 --- a/src/f110_gym/envs/track/raceline.py +++ b/f1tenth_gym/envs/track/raceline.py @@ -4,8 +4,8 @@ import numpy as np -from f110_gym.envs.rendering import EnvRenderer -from f110_gym.envs.track.cubic_spline import CubicSpline2D +from ..rendering import EnvRenderer +from .cubic_spline import CubicSpline2D class Raceline: diff --git a/src/f110_gym/envs/track/track.py b/f1tenth_gym/envs/track/track.py similarity index 97% rename from src/f110_gym/envs/track/track.py rename to f1tenth_gym/envs/track/track.py index 9163b67a..d0bd6585 100644 --- a/src/f110_gym/envs/track/track.py +++ b/f1tenth_gym/envs/track/track.py @@ -9,9 +9,9 @@ from PIL.Image import Transpose from yamldataclassconfig.config import YamlDataClassConfig -from f110_gym.envs.track import Raceline -from f110_gym.envs.track.cubic_spline import CubicSpline2D -from f110_gym.envs.track.utils import find_track_dir +from . import Raceline +from .cubic_spline import CubicSpline2D +from .utils import find_track_dir @dataclass diff --git a/src/f110_gym/envs/track/utils.py b/f1tenth_gym/envs/track/utils.py similarity index 100% rename from src/f110_gym/envs/track/utils.py rename to f1tenth_gym/envs/track/utils.py diff --git a/src/f110_gym/envs/utils.py b/f1tenth_gym/envs/utils.py similarity index 100% rename from src/f110_gym/envs/utils.py rename to f1tenth_gym/envs/utils.py diff --git a/poetry.lock b/poetry.lock index 45837d5f..c6f66176 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand. [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] [[package]] @@ -31,13 +31,13 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "autoflake" -version = "2.2.1" +version = "2.3.0" description = "Removes unused imports and unused variables" optional = false python-versions = ">=3.8" files = [ - {file = "autoflake-2.2.1-py3-none-any.whl", hash = "sha256:265cde0a43c1f44ecfb4f30d95b0437796759d07be7706a2f70e4719234c0f79"}, - {file = "autoflake-2.2.1.tar.gz", hash = "sha256:62b7b6449a692c3c9b0c916919bbc21648da7281e8506bcf8d3f8280e431ebc1"}, + {file = "autoflake-2.3.0-py3-none-any.whl", hash = "sha256:79a51eb8c0744759d2efe052455ab20aa6a314763510c3fd897499a402126327"}, + {file = "autoflake-2.3.0.tar.gz", hash = "sha256:8c2011fa34701b9d7dcf05b9873bc4859d4fce4e62dfea90dffefd1576f5f01d"}, ] [package.dependencies] @@ -92,13 +92,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -397,13 +397,13 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "dataclasses-json" -version = "0.6.3" +version = "0.6.4" description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = ">=3.7,<4.0" files = [ - {file = "dataclasses_json-0.6.3-py3-none-any.whl", hash = "sha256:4aeb343357997396f6bca1acae64e486c3a723d8f5c76301888abeccf0c45176"}, - {file = "dataclasses_json-0.6.3.tar.gz", hash = "sha256:35cb40aae824736fdf959801356641836365219cfe14caeb115c39136f775d2a"}, + {file = "dataclasses_json-0.6.4-py3-none-any.whl", hash = "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2"}, + {file = "dataclasses_json-0.6.4.tar.gz", hash = "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377"}, ] [package.dependencies] @@ -412,29 +412,33 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "debugpy" -version = "1.8.0" +version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, - {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, - {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, - {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, - {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, - {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, - {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, - {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, - {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, - {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, - {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, - {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, - {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, - {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, - {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, - {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, - {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, - {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, + {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, + {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, + {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, + {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, + {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, + {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, + {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, + {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, + {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, + {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, + {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, + {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, + {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, + {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, + {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, + {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, + {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, + {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, + {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, + {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, + {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, + {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, ] [[package]] @@ -505,60 +509,60 @@ pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "fonttools" -version = "4.47.2" +version = "4.49.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, - {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, - {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, - {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, - {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, - {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, - {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, - {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, - {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, - {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, - {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, - {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, - {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, + {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, + {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, + {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, + {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, + {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, + {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, + {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, + {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, + {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, + {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, + {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, + {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] @@ -631,13 +635,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.1.1" +version = "6.1.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, + {file = "importlib_resources-6.1.2-py3-none-any.whl", hash = "sha256:9a0a862501dc38b68adebc82970140c9e4209fc99601782925178f8386339938"}, + {file = "importlib_resources-6.1.2.tar.gz", hash = "sha256:308abf8474e2dba5f867d279237cd4076482c3de7104a40b41426370e891549b"}, ] [package.dependencies] @@ -645,7 +649,7 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -660,13 +664,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.0" +version = "6.29.3" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.0-py3-none-any.whl", hash = "sha256:076663ca68492576f051e4af7720d33f34383e655f2be0d544c8b1c9de915b2f"}, - {file = "ipykernel-6.29.0.tar.gz", hash = "sha256:b5dd3013cab7b330df712891c96cd1ab868c27a7159e606f762015e9bf8ceb3f"}, + {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, + {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, ] [package.dependencies] @@ -689,7 +693,7 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.2)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -919,92 +923,88 @@ files = [ [[package]] name = "llvmlite" -version = "0.41.1" +version = "0.42.0" description = "lightweight wrapper around basic LLVM functionality" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "llvmlite-0.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1e1029d47ee66d3a0c4d6088641882f75b93db82bd0e6178f7bd744ebce42b9"}, - {file = "llvmlite-0.41.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:150d0bc275a8ac664a705135e639178883293cf08c1a38de3bbaa2f693a0a867"}, - {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eee5cf17ec2b4198b509272cf300ee6577229d237c98cc6e63861b08463ddc6"}, - {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd0338da625346538f1173a17cabf21d1e315cf387ca21b294ff209d176e244"}, - {file = "llvmlite-0.41.1-cp310-cp310-win32.whl", hash = "sha256:fa1469901a2e100c17eb8fe2678e34bd4255a3576d1a543421356e9c14d6e2ae"}, - {file = "llvmlite-0.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:2b76acee82ea0e9304be6be9d4b3840208d050ea0dcad75b1635fa06e949a0ae"}, - {file = "llvmlite-0.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:210e458723436b2469d61b54b453474e09e12a94453c97ea3fbb0742ba5a83d8"}, - {file = "llvmlite-0.41.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:855f280e781d49e0640aef4c4af586831ade8f1a6c4df483fb901cbe1a48d127"}, - {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67340c62c93a11fae482910dc29163a50dff3dfa88bc874872d28ee604a83be"}, - {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2181bb63ef3c607e6403813421b46982c3ac6bfc1f11fa16a13eaafb46f578e6"}, - {file = "llvmlite-0.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:9564c19b31a0434f01d2025b06b44c7ed422f51e719ab5d24ff03b7560066c9a"}, - {file = "llvmlite-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5940bc901fb0325970415dbede82c0b7f3e35c2d5fd1d5e0047134c2c46b3281"}, - {file = "llvmlite-0.41.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b0a9a47c28f67a269bb62f6256e63cef28d3c5f13cbae4fab587c3ad506778b"}, - {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8afdfa6da33f0b4226af8e64cfc2b28986e005528fbf944d0a24a72acfc9432"}, - {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8454c1133ef701e8c050a59edd85d238ee18bb9a0eb95faf2fca8b909ee3c89a"}, - {file = "llvmlite-0.41.1-cp38-cp38-win32.whl", hash = "sha256:2d92c51e6e9394d503033ffe3292f5bef1566ab73029ec853861f60ad5c925d0"}, - {file = "llvmlite-0.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:df75594e5a4702b032684d5481db3af990b69c249ccb1d32687b8501f0689432"}, - {file = "llvmlite-0.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04725975e5b2af416d685ea0769f4ecc33f97be541e301054c9f741003085802"}, - {file = "llvmlite-0.41.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf14aa0eb22b58c231243dccf7e7f42f7beec48970f2549b3a6acc737d1a4ba4"}, - {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c32356f669e036eb01016e883b22add883c60739bc1ebee3a1cc0249a50828"}, - {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24091a6b31242bcdd56ae2dbea40007f462260bc9bdf947953acc39dffd54f8f"}, - {file = "llvmlite-0.41.1-cp39-cp39-win32.whl", hash = "sha256:880cb57ca49e862e1cd077104375b9d1dfdc0622596dfa22105f470d7bacb309"}, - {file = "llvmlite-0.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:92f093986ab92e71c9ffe334c002f96defc7986efda18397d0f08534f3ebdc4d"}, - {file = "llvmlite-0.41.1.tar.gz", hash = "sha256:f19f767a018e6ec89608e1f6b13348fa2fcde657151137cb64e56d48598a92db"}, + {file = "llvmlite-0.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3366938e1bf63d26c34fbfb4c8e8d2ded57d11e0567d5bb243d89aab1eb56098"}, + {file = "llvmlite-0.42.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c35da49666a21185d21b551fc3caf46a935d54d66969d32d72af109b5e7d2b6f"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70f44ccc3c6220bd23e0ba698a63ec2a7d3205da0d848804807f37fc243e3f77"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f8d8717a9073b9e0246998de89929071d15b47f254c10eef2310b9aac033d"}, + {file = "llvmlite-0.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d90edf400b4ceb3a0e776b6c6e4656d05c7187c439587e06f86afceb66d2be5"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ae511caed28beaf1252dbaf5f40e663f533b79ceb408c874c01754cafabb9cbf"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81e674c2fe85576e6c4474e8c7e7aba7901ac0196e864fe7985492b737dbab65"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb3975787f13eb97629052edb5017f6c170eebc1c14a0433e8089e5db43bcce6"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5bece0cdf77f22379f19b1959ccd7aee518afa4afbd3656c6365865f84903f9"}, + {file = "llvmlite-0.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e0c4c11c8c2aa9b0701f91b799cb9134a6a6de51444eff5a9087fc7c1384275"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:08fa9ab02b0d0179c688a4216b8939138266519aaa0aa94f1195a8542faedb56"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b2fce7d355068494d1e42202c7aff25d50c462584233013eb4470c33b995e3ee"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebe66a86dc44634b59a3bc860c7b20d26d9aaffcd30364ebe8ba79161a9121f4"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d47494552559e00d81bfb836cf1c4d5a5062e54102cc5767d5aa1e77ccd2505c"}, + {file = "llvmlite-0.42.0-cp312-cp312-win_amd64.whl", hash = "sha256:05cb7e9b6ce69165ce4d1b994fbdedca0c62492e537b0cc86141b6e2c78d5888"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdd3888544538a94d7ec99e7c62a0cdd8833609c85f0c23fcb6c5c591aec60ad"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0936c2067a67fb8816c908d5457d63eba3e2b17e515c5fe00e5ee2bace06040"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a78ab89f1924fc11482209f6799a7a3fc74ddc80425a7a3e0e8174af0e9e2301"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7599b65c7af7abbc978dbf345712c60fd596aa5670496561cc10e8a71cebfb2"}, + {file = "llvmlite-0.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:43d65cc4e206c2e902c1004dd5418417c4efa6c1d04df05c6c5675a27e8ca90e"}, + {file = "llvmlite-0.42.0.tar.gz", hash = "sha256:f92b09243c0cc3f457da8b983f67bd8e1295d0f5b3746c7a1861d7a99403854a"}, ] [[package]] name = "marshmallow" -version = "3.20.2" +version = "3.21.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.8" files = [ - {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, - {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, + {file = "marshmallow-3.21.0-py3-none-any.whl", hash = "sha256:e7997f83571c7fd476042c2c188e4ee8a78900ca5e74bd9c8097afa56624e9bd"}, + {file = "marshmallow-3.21.0.tar.gz", hash = "sha256:20f53be28c6e374a711a16165fb22a8dc6003e3f7cda1285e3ca777b9193885b"}, ] [package.dependencies] packaging = ">=17.0" [package.extras] -dev = ["pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] -docs = ["alabaster (==0.7.15)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] -lint = ["pre-commit (>=2.4,<4.0)"] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==4.0.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "pytz", "simplejson"] [[package]] name = "matplotlib" -version = "3.8.2" +version = "3.8.3" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, + {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, + {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, + {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, + {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, + {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, + {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, + {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, + {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, + {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, ] [package.dependencies] @@ -1068,36 +1068,36 @@ files = [ [[package]] name = "numba" -version = "0.58.1" +version = "0.59.0" description = "compiling Python code using LLVM" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "numba-0.58.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07f2fa7e7144aa6f275f27260e73ce0d808d3c62b30cff8906ad1dec12d87bbe"}, - {file = "numba-0.58.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bf1ddd4f7b9c2306de0384bf3854cac3edd7b4d8dffae2ec1b925e4c436233f"}, - {file = "numba-0.58.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bc2d904d0319d7a5857bd65062340bed627f5bfe9ae4a495aef342f072880d50"}, - {file = "numba-0.58.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e79b6cc0d2bf064a955934a2e02bf676bc7995ab2db929dbbc62e4c16551be6"}, - {file = "numba-0.58.1-cp310-cp310-win_amd64.whl", hash = "sha256:81fe5b51532478149b5081311b0fd4206959174e660c372b94ed5364cfb37c82"}, - {file = "numba-0.58.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bcecd3fb9df36554b342140a4d77d938a549be635d64caf8bd9ef6c47a47f8aa"}, - {file = "numba-0.58.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1eaa744f518bbd60e1f7ccddfb8002b3d06bd865b94a5d7eac25028efe0e0ff"}, - {file = "numba-0.58.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bf68df9c307fb0aa81cacd33faccd6e419496fdc621e83f1efce35cdc5e79cac"}, - {file = "numba-0.58.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:55a01e1881120e86d54efdff1be08381886fe9f04fc3006af309c602a72bc44d"}, - {file = "numba-0.58.1-cp311-cp311-win_amd64.whl", hash = "sha256:811305d5dc40ae43c3ace5b192c670c358a89a4d2ae4f86d1665003798ea7a1a"}, - {file = "numba-0.58.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea5bfcf7d641d351c6a80e8e1826eb4a145d619870016eeaf20bbd71ef5caa22"}, - {file = "numba-0.58.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e63d6aacaae1ba4ef3695f1c2122b30fa3d8ba039c8f517784668075856d79e2"}, - {file = "numba-0.58.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6fe7a9d8e3bd996fbe5eac0683227ccef26cba98dae6e5cee2c1894d4b9f16c1"}, - {file = "numba-0.58.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:898af055b03f09d33a587e9425500e5be84fc90cd2f80b3fb71c6a4a17a7e354"}, - {file = "numba-0.58.1-cp38-cp38-win_amd64.whl", hash = "sha256:d3e2fe81fe9a59fcd99cc572002101119059d64d31eb6324995ee8b0f144a306"}, - {file = "numba-0.58.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c765aef472a9406a97ea9782116335ad4f9ef5c9f93fc05fd44aab0db486954"}, - {file = "numba-0.58.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9356e943617f5e35a74bf56ff6e7cc83e6b1865d5e13cee535d79bf2cae954"}, - {file = "numba-0.58.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:240e7a1ae80eb6b14061dc91263b99dc8d6af9ea45d310751b780888097c1aaa"}, - {file = "numba-0.58.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:45698b995914003f890ad839cfc909eeb9c74921849c712a05405d1a79c50f68"}, - {file = "numba-0.58.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd3dda77955be03ff366eebbfdb39919ce7c2620d86c906203bed92124989032"}, - {file = "numba-0.58.1.tar.gz", hash = "sha256:487ded0633efccd9ca3a46364b40006dbdaca0f95e99b8b83e778d1195ebcbaa"}, + {file = "numba-0.59.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d061d800473fb8fef76a455221f4ad649a53f5e0f96e3f6c8b8553ee6fa98fa"}, + {file = "numba-0.59.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c086a434e7d3891ce5dfd3d1e7ee8102ac1e733962098578b507864120559ceb"}, + {file = "numba-0.59.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9e20736bf62e61f8353fb71b0d3a1efba636c7a303d511600fc57648b55823ed"}, + {file = "numba-0.59.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e86e6786aec31d2002122199486e10bbc0dc40f78d76364cded375912b13614c"}, + {file = "numba-0.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:0307ee91b24500bb7e64d8a109848baf3a3905df48ce142b8ac60aaa406a0400"}, + {file = "numba-0.59.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d540f69a8245fb714419c2209e9af6104e568eb97623adc8943642e61f5d6d8e"}, + {file = "numba-0.59.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1192d6b2906bf3ff72b1d97458724d98860ab86a91abdd4cfd9328432b661e31"}, + {file = "numba-0.59.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90efb436d3413809fcd15298c6d395cb7d98184350472588356ccf19db9e37c8"}, + {file = "numba-0.59.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cd3dac45e25d927dcb65d44fb3a973994f5add2b15add13337844afe669dd1ba"}, + {file = "numba-0.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:753dc601a159861808cc3207bad5c17724d3b69552fd22768fddbf302a817a4c"}, + {file = "numba-0.59.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ce62bc0e6dd5264e7ff7f34f41786889fa81a6b860662f824aa7532537a7bee0"}, + {file = "numba-0.59.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8cbef55b73741b5eea2dbaf1b0590b14977ca95a13a07d200b794f8f6833a01c"}, + {file = "numba-0.59.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:70d26ba589f764be45ea8c272caa467dbe882b9676f6749fe6f42678091f5f21"}, + {file = "numba-0.59.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e125f7d69968118c28ec0eed9fbedd75440e64214b8d2eac033c22c04db48492"}, + {file = "numba-0.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:4981659220b61a03c1e557654027d271f56f3087448967a55c79a0e5f926de62"}, + {file = "numba-0.59.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe4d7562d1eed754a7511ed7ba962067f198f86909741c5c6e18c4f1819b1f47"}, + {file = "numba-0.59.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6feb1504bb432280f900deaf4b1dadcee68812209500ed3f81c375cbceab24dc"}, + {file = "numba-0.59.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:944faad25ee23ea9dda582bfb0189fb9f4fc232359a80ab2a028b94c14ce2b1d"}, + {file = "numba-0.59.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5516a469514bfae52a9d7989db4940653a5cbfac106f44cb9c50133b7ad6224b"}, + {file = "numba-0.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:32bd0a41525ec0b1b853da244808f4e5333867df3c43c30c33f89cf20b9c2b63"}, + {file = "numba-0.59.0.tar.gz", hash = "sha256:12b9b064a3e4ad00e2371fc5212ef0396c80f41caec9b5ec391c8b04b6eaf2a8"}, ] [package.dependencies] -llvmlite = "==0.41.*" +llvmlite = "==0.42.*" numpy = ">=1.22,<1.27" [[package]] @@ -1297,28 +1297,28 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -1544,13 +1544,13 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -1604,6 +1604,7 @@ files = [ {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_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {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"}, @@ -1808,56 +1809,56 @@ test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", [[package]] name = "shapely" -version = "2.0.2" +version = "2.0.3" description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.7" files = [ - {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6ca8cffbe84ddde8f52b297b53f8e0687bd31141abb2c373fd8a9f032df415d6"}, - {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:baa14fc27771e180c06b499a0a7ba697c7988c7b2b6cba9a929a19a4d2762de3"}, - {file = "shapely-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:36480e32c434d168cdf2f5e9862c84aaf4d714a43a8465ae3ce8ff327f0affb7"}, - {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef753200cbffd4f652efb2c528c5474e5a14341a473994d90ad0606522a46a2"}, - {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9a41ff4323fc9d6257759c26eb1cf3a61ebc7e611e024e6091f42977303fd3a"}, - {file = "shapely-2.0.2-cp310-cp310-win32.whl", hash = "sha256:72b5997272ae8c25f0fd5b3b967b3237e87fab7978b8d6cd5fa748770f0c5d68"}, - {file = "shapely-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:34eac2337cbd67650248761b140d2535855d21b969d76d76123317882d3a0c1a"}, - {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b0c052709c8a257c93b0d4943b0b7a3035f87e2d6a8ac9407b6a992d206422f"}, - {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d217e56ae067e87b4e1731d0dc62eebe887ced729ba5c2d4590e9e3e9fdbd88"}, - {file = "shapely-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94ac128ae2ab4edd0bffcd4e566411ea7bdc738aeaf92c32a8a836abad725f9f"}, - {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3ee28f5e63a130ec5af4dc3c4cb9c21c5788bb13c15e89190d163b14f9fb89"}, - {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:737dba15011e5a9b54a8302f1748b62daa207c9bc06f820cd0ad32a041f1c6f2"}, - {file = "shapely-2.0.2-cp311-cp311-win32.whl", hash = "sha256:45ac6906cff0765455a7b49c1670af6e230c419507c13e2f75db638c8fc6f3bd"}, - {file = "shapely-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:dc9342fc82e374130db86a955c3c4525bfbf315a248af8277a913f30911bed9e"}, - {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:06f193091a7c6112fc08dfd195a1e3846a64306f890b151fa8c63b3e3624202c"}, - {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eebe544df5c018134f3c23b6515877f7e4cd72851f88a8d0c18464f414d141a2"}, - {file = "shapely-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e92e7c255f89f5cdf777690313311f422aa8ada9a3205b187113274e0135cd8"}, - {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be46d5509b9251dd9087768eaf35a71360de6afac82ce87c636990a0871aa18b"}, - {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5533a925d8e211d07636ffc2fdd9a7f9f13d54686d00577eeb11d16f00be9c4"}, - {file = "shapely-2.0.2-cp312-cp312-win32.whl", hash = "sha256:084b023dae8ad3d5b98acee9d3bf098fdf688eb0bb9b1401e8b075f6a627b611"}, - {file = "shapely-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:ea84d1cdbcf31e619d672b53c4532f06253894185ee7acb8ceb78f5f33cbe033"}, - {file = "shapely-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed1e99702125e7baccf401830a3b94d810d5c70b329b765fe93451fe14cf565b"}, - {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7d897e6bdc6bc64f7f65155dbbb30e49acaabbd0d9266b9b4041f87d6e52b3a"}, - {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0521d76d1e8af01e712db71da9096b484f081e539d4f4a8c97342e7971d5e1b4"}, - {file = "shapely-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:5324be299d4c533ecfcfd43424dfd12f9428fd6f12cda38a4316da001d6ef0ea"}, - {file = "shapely-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:78128357a0cee573257a0c2c388d4b7bf13cb7dbe5b3fe5d26d45ebbe2a39e25"}, - {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87dc2be34ac3a3a4a319b963c507ac06682978a5e6c93d71917618b14f13066e"}, - {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:42997ac806e4583dad51c80a32d38570fd9a3d4778f5e2c98f9090aa7db0fe91"}, - {file = "shapely-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ccfd5fa10a37e67dbafc601c1ddbcbbfef70d34c3f6b0efc866ddbdb55893a6c"}, - {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7c95d3379ae3abb74058938a9fcbc478c6b2e28d20dace38f8b5c587dde90aa"}, - {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a21353d28209fb0d8cc083e08ca53c52666e0d8a1f9bbe23b6063967d89ed24"}, - {file = "shapely-2.0.2-cp38-cp38-win32.whl", hash = "sha256:03e63a99dfe6bd3beb8d5f41ec2086585bb969991d603f9aeac335ad396a06d4"}, - {file = "shapely-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:c6fd29fbd9cd76350bd5cc14c49de394a31770aed02d74203e23b928f3d2f1aa"}, - {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f217d28ecb48e593beae20a0082a95bd9898d82d14b8fcb497edf6bff9a44d7"}, - {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:394e5085b49334fd5b94fa89c086edfb39c3ecab7f669e8b2a4298b9d523b3a5"}, - {file = "shapely-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd3ad17b64466a033848c26cb5b509625c87d07dcf39a1541461cacdb8f7e91c"}, - {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d41a116fcad58048d7143ddb01285e1a8780df6dc1f56c3b1e1b7f12ed296651"}, - {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dea9a0651333cf96ef5bb2035044e3ad6a54f87d90e50fe4c2636debf1b77abc"}, - {file = "shapely-2.0.2-cp39-cp39-win32.whl", hash = "sha256:b8eb0a92f7b8c74f9d8fdd1b40d395113f59bd8132ca1348ebcc1f5aece94b96"}, - {file = "shapely-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:794affd80ca0f2c536fc948a3afa90bd8fb61ebe37fe873483ae818e7f21def4"}, - {file = "shapely-2.0.2.tar.gz", hash = "sha256:1713cc04c171baffc5b259ba8531c58acc2a301707b7f021d88a15ed090649e7"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:af7e9abe180b189431b0f490638281b43b84a33a960620e6b2e8d3e3458b61a1"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98040462b36ced9671e266b95c326b97f41290d9d17504a1ee4dc313a7667b9c"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71eb736ef2843f23473c6e37f6180f90f0a35d740ab284321548edf4e55d9a52"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:881eb9dbbb4a6419667e91fcb20313bfc1e67f53dbb392c6840ff04793571ed1"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10d2ccf0554fc0e39fad5886c839e47e207f99fdf09547bc687a2330efda35b"}, + {file = "shapely-2.0.3-cp310-cp310-win32.whl", hash = "sha256:6dfdc077a6fcaf74d3eab23a1ace5abc50c8bce56ac7747d25eab582c5a2990e"}, + {file = "shapely-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:64c5013dacd2d81b3bb12672098a0b2795c1bf8190cfc2980e380f5ef9d9e4d9"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56cee3e4e8159d6f2ce32e421445b8e23154fd02a0ac271d6a6c0b266a8e3cce"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:619232c8276fded09527d2a9fd91a7885ff95c0ff9ecd5e3cb1e34fbb676e2ae"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2a7d256db6f5b4b407dc0c98dd1b2fcf1c9c5814af9416e5498d0a2e4307a4b"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45f0c8cd4583647db3216d965d49363e6548c300c23fd7e57ce17a03f824034"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13cb37d3826972a82748a450328fe02a931dcaed10e69a4d83cc20ba021bc85f"}, + {file = "shapely-2.0.3-cp311-cp311-win32.whl", hash = "sha256:9302d7011e3e376d25acd30d2d9e70d315d93f03cc748784af19b00988fc30b1"}, + {file = "shapely-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6b464f2666b13902835f201f50e835f2f153f37741db88f68c7f3b932d3505fa"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e86e7cb8e331a4850e0c2a8b2d66dc08d7a7b301b8d1d34a13060e3a5b4b3b55"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c91981c99ade980fc49e41a544629751a0ccd769f39794ae913e53b07b2f78b9"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd45d456983dc60a42c4db437496d3f08a4201fbf662b69779f535eb969660af"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:882fb1ffc7577e88c1194f4f1757e277dc484ba096a3b94844319873d14b0f2d"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f2d93bff2ea52fa93245798cddb479766a18510ea9b93a4fb9755c79474889"}, + {file = "shapely-2.0.3-cp312-cp312-win32.whl", hash = "sha256:99abad1fd1303b35d991703432c9481e3242b7b3a393c186cfb02373bf604004"}, + {file = "shapely-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6f555fe3304a1f40398977789bc4fe3c28a11173196df9ece1e15c5bc75a48db"}, + {file = "shapely-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983cc418c1fa160b7d797cfef0e0c9f8c6d5871e83eae2c5793fce6a837fad9"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18bddb8c327f392189a8d5d6b9a858945722d0bb95ccbd6a077b8e8fc4c7890d"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442f4dcf1eb58c5a4e3428d88e988ae153f97ab69a9f24e07bf4af8038536325"}, + {file = "shapely-2.0.3-cp37-cp37m-win32.whl", hash = "sha256:31a40b6e3ab00a4fd3a1d44efb2482278642572b8e0451abdc8e0634b787173e"}, + {file = "shapely-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:59b16976c2473fec85ce65cc9239bef97d4205ab3acead4e6cdcc72aee535679"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:705efbce1950a31a55b1daa9c6ae1c34f1296de71ca8427974ec2f27d57554e3"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:601c5c0058a6192df704cb889439f64994708563f57f99574798721e9777a44b"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f24ecbb90a45c962b3b60d8d9a387272ed50dc010bfe605f1d16dfc94772d8a1"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c2a2989222c6062f7a0656e16276c01bb308bc7e5d999e54bf4e294ce62e76"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42bceb9bceb3710a774ce04908fda0f28b291323da2688f928b3f213373b5aee"}, + {file = "shapely-2.0.3-cp38-cp38-win32.whl", hash = "sha256:54d925c9a311e4d109ec25f6a54a8bd92cc03481a34ae1a6a92c1fe6729b7e01"}, + {file = "shapely-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:300d203b480a4589adefff4c4af0b13919cd6d760ba3cbb1e56275210f96f654"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:083d026e97b6c1f4a9bd2a9171c7692461092ed5375218170d91705550eecfd5"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27b6e1910094d93e9627f2664121e0e35613262fc037051680a08270f6058daf"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71b2de56a9e8c0e5920ae5ddb23b923490557ac50cb0b7fa752761bf4851acde"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d279e56bbb68d218d63f3efc80c819cedcceef0e64efbf058a1df89dc57201b"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88566d01a30f0453f7d038db46bc83ce125e38e47c5f6bfd4c9c287010e9bf74"}, + {file = "shapely-2.0.3-cp39-cp39-win32.whl", hash = "sha256:58afbba12c42c6ed44c4270bc0e22f3dadff5656d711b0ad335c315e02d04707"}, + {file = "shapely-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5026b30433a70911979d390009261b8c4021ff87c7c3cbd825e62bb2ffa181bc"}, + {file = "shapely-2.0.3.tar.gz", hash = "sha256:4d65d0aa7910af71efa72fd6447e02a8e5dd44da81a983de9d736d6e6ccbe674"}, ] [package.dependencies] -numpy = ">=1.14" +numpy = ">=1.14,<2" [package.extras] docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] @@ -1941,13 +1942,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] @@ -1967,17 +1968,18 @@ typing-extensions = ">=3.7.4" [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2024,5 +2026,5 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" -python-versions = ">=3.9,<=3.11" -content-hash = "6e6d27dd3ae39a4b959e1ecbf0e8355662aa34e478db6762064c16ea1a8aa99c" +python-versions = ">=3.9,<3.12" +content-hash = "a6ab3acc3be9323829288c857b92ba3250cc36343f487ea2a0950ecb41a46bc1" diff --git a/pyproject.toml b/pyproject.toml index 4751ff52..6263a8a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.pytest.ini_options] minversion = 6.0 -addopts = "-ra -q" +addopts = "-ra" testpaths =[ "tests", "integration", @@ -8,8 +8,8 @@ testpaths =[ [tool.poetry] -name = "f1tenth-gym" -version = "0.2.1" +name = "f1tenth_gym" +version = "1.0.0dev" description = "Gym environment for F1TENTH" license = "MIT" authors = [ @@ -29,7 +29,7 @@ homepage = "https://f1tenth.org" repository = "https://github.com/f1tenth/f1tenth_gym" documentation = "https://f1tenth-gym.readthedocs.io/en/latest/" packages = [ - { include = "f110_gym", from = "src"}, + {include = "f1tenth_gym"}, ] [tool.poetry.dependencies] diff --git a/src/f110_gym/__init__.py b/src/f110_gym/__init__.py deleted file mode 100644 index 20052799..00000000 --- a/src/f110_gym/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -import gymnasium as gym - -gym.register( - id="f110-v0", - entry_point="f110_gym.envs:F110Env", -) diff --git a/src/f110_gym/envs/f110_env_backup.py b/src/f110_gym/envs/f110_env_backup.py deleted file mode 100644 index b488492d..00000000 --- a/src/f110_gym/envs/f110_env_backup.py +++ /dev/null @@ -1,624 +0,0 @@ -# MIT License - -# Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -""" -Author: Hongrui Zheng -""" - -import os -import signal -import subprocess -import sys - -# others -import numpy as np - -# protobuf import -import sim_requests_pb2 -import yaml - -# zmq imports -import zmq -from PIL import Image - -# gym imports -import gym -from gym import utils - -# from matplotlib.pyplot import imshow -# import matplotlib.pyplot as plt - - -class F110Env(gym.Env, utils.EzPickle): - """ - OpenAI gym environment for F1/10 simulator - Use 0mq's REQ-REP pattern to communicate to the C++ simulator - ONE env has ONE corresponding C++ instance - Need to create env with map input, full path to map yaml file, map pgm image and yaml should be in same directory - - should be initialized with a map, a timestep, and number of agents - """ - - metadata = {"render.modes": []} - - def __init__(self): - # simualtor params - self.params_set = False - self.map_inited = False - # params list is [mu, h_cg, l_r, cs_f, cs_r, I_z, mass] - self.params = [] - # TODO: add multi agent stuff, need a _add_agent function of sth - self.num_agents = 2 - self.timestep = 0.01 - - # TODO: clean up the map path stuff, right now it's a init_map function - self.map_path = None - self.map_img = None - - # current_dir = os.path.dirname(os.path.abspath(__file__)) - # map_path = current_dir + '/../../../maps/Levine_map.yaml' - - # default - self.ego_idx = 0 - - # TODO: also set these things in init function? - self.timeout = 120.0 - # radius to consider done - self.start_thresh = 0.5 # 10cm - - # env states - # more accurate description should be ego car state - # might not need to keep scan - self.x = None - self.y = None - self.theta = None - - self.in_collision = False - self.collision_angle = None - - # loop completion - self.near_start = True - self.num_toggles = 0 - - # race info - self.lap_times = [0.0, 0.0] - self.lap_counts = [0, 0] - - # TODO: load the map (same as ROS .yaml format) - # if not map_path.endswith('.yaml'): - # print('Gym env - Please use a yaml file for map input.') - # sys.exit() - # load map img - # map_img_path = 'levine.png' - # self.map_img = cv2.imread(map_img_path, 0) - # self.map_img = cv2.flip(self.map_img, 0) - # self.map_img = np.array(Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM)) - # self.map_img = self.map_img.astype(np.float64) - # self.map_img = self.map_img[::-1] - # self.map_img = np.dot(self.map_img[..., :3], [0.29, 0.57, 0.14]) - # plt.imshow(self.map_img) - # plt.show() - - # map metadata - # self.map_height = self.map_img.shape[0] - # self.map_width = self.map_img.shape[1] - self.map_height = 0.0 - self.map_width = 0.0 - self.map_resolution = 0.0 - self.free_thresh = 0.0 - self.origin = [] - # load map metadata - # with open(map_path, 'r') as yaml_stream: - # try: - # map_metadata = yaml.safe_load(yaml_stream) - # self.map_resolution = map_metadata['resolution'] - # self.origin = map_metadata['origin'] - # # print(self.origin) - # # self.free_thresh????? - # except yaml.YAMLError as ex: - # print(ex) - - # create zmq stuff - # port number range from 6666 - 6766 - # max 100 tries to connect/bind - tries = 0 - max_tries = 100 - min_port = 6666 - self.port = min_port - self.context = zmq.Context() - self.socket = self.context.socket(zmq.PAIR) - while tries < max_tries: - try: - self.socket.bind("tcp://*:%s" % str(min_port + tries)) - # self.socket.connect('tcp://localhost:6666') - self.port = min_port + tries - break - except Exception as _: # noqa: F841 - tries = tries + 1 - # print('Gym env - retrying for ' + str(tries) + ' times') - - print("Gym env - Connected env to port: " + str(self.port)) - - # create cpp instance if create then need to pass port number - # subprocess call assumes directory structure - # init sim with arguments: [ex timestep num_agents port_num] - # TODO: include other car params in argument - # args = ['../build/sim_server', str(self.timestep), str(self.num_agents), str(self.port)] - # self.sim_p = subprocess.Popen(args) - self.sim_p = None - - # print('Gym env - env created, waiting for params...') - - def __del__(self): - """ - Finalizer, does cleanup - """ - if self.sim_p is None: - pass - else: - os.kill(self.sim_p.pid, signal.SIGTERM) - # print('Gym env - Sim child process killed.') - - def _start_executable(self, path): - mu = self.params[0] - h_cg = self.params[1] - l_r = self.params[2] - cs_f = self.params[3] - cs_r = self.params[4] - I_z = self.params[5] - mass = self.params[6] - args = [ - path + "sim_server", - str(self.timestep), - str(self.num_agents), - str(self.port), - str(mu), - str(h_cg), - str(l_r), - str(cs_f), - str(cs_r), - str(I_z), - str(mass), - ] - self.sim_p = subprocess.Popen(args) - - def _set_map(self): - """ - Sets the map for the simulator instance - """ - if not self.map_inited: - print("Gym env - Sim map not initialized, call env.init_map() to init map.") - # create and fill in protobuf - map_request_proto = sim_requests_pb2.SimRequest() - map_request_proto.type = 1 - map_request_proto.map_request.map.extend( - (1.0 - self.map_img / 255.0).flatten().tolist() - ) - map_request_proto.map_request.origin_x = self.origin[0] - map_request_proto.map_request.origin_y = self.origin[1] - map_request_proto.map_request.map_resolution = self.map_resolution - # TODO: double check if this value is valid - map_request_proto.map_request.free_threshold = self.free_thresh - map_request_proto.map_request.map_height = self.map_height - map_request_proto.map_request.map_width = self.map_width - # serialization - map_request_string = map_request_proto.SerializeToString() - # send set map request - # print('Gym env - Sending set map request...') - self.socket.send(map_request_string) - # print('Gym env - Map request sent.') - # receive response from sim instance - sim_response_string = self.socket.recv() - # parse map response proto - sim_response_proto = sim_requests_pb2.SimResponse() - sim_response_proto.ParseFromString(sim_response_string) - # get results - set_map_result = sim_response_proto.map_result.result - if set_map_result == 1: - print("Gym env - Set map failed, exiting...") - sys.exit() - - def _check_done(self): - """ - Check if the episode is done - This is in terms of the ego car - For our case, whether the car ends up close enough to the starting point - And if accumulated time is over the timeout - return true if done, false if not - This assumes start is always (0, 0) - - """ - # TODO: start not always 0, 0 - # dist_to_start = math.sqrt((self.x-self.start_x) ** 2 + (self.y-self.start_y) ** 2) - left_t = 2 - right_t = 2 - timeout = self.current_time >= self.timeout - if self.double_finish: - poses_x = np.array(self.all_x) - self.start_xs - poses_y = np.array(self.all_y) - self.start_ys - delta_pt = np.dot(self.start_rot, np.stack((poses_x, poses_y), axis=0)) - temp_y = delta_pt[1, :] - idx1 = temp_y > left_t - idx2 = temp_y < -right_t - temp_y[idx1] -= left_t - temp_y[idx2] = -right_t - temp_y[idx2] - temp_y[np.invert(np.logical_or(idx1, idx2))] = 0 - - dist2 = delta_pt[0, :] ** 2 + temp_y**2 - closes = dist2 <= 0.1 - for i in range(self.num_agents): - if closes[i] and not self.near_starts[i]: - self.near_starts[i] = True - self.toggle_list[i] += 1 - elif not closes[i] and self.near_starts[i]: - self.near_starts[i] = False - self.toggle_list[i] += 1 - done = self.in_collision | (timeout) | np.all(self.toggle_list >= 4) - # only for two cars atm - self.lap_counts[0] = np.floor(self.toggle_list[0] / 2) - self.lap_counts[1] = np.floor(self.toggle_list[1] / 2) - if self.toggle_list[0] < 4: - self.lap_times[0] = self.current_time - if self.toggle_list[1] < 4: - self.lap_times[1] = self.current_time - return done, self.toggle_list >= 4 - - delta_pt = np.dot( - self.start_rot, np.array([self.x - self.start_x, self.y - self.start_y]) - ) - if delta_pt[1] > left_t: # left - temp_y = delta_pt[1] - left_t - elif delta_pt[1] < -right_t: # right - temp_y = -right_t - delta_pt[1] - else: - temp_y = 0 - dist2 = delta_pt[0] ** 2 + temp_y**2 - close = dist2 <= 0.1 - # close = dist_to_start <= self.start_thresh - if close and not self.near_start: - self.near_start = True - self.num_toggles += 1 - elif not close and self.near_start: - self.near_start = False - self.num_toggles += 1 - done = self.in_collision | (timeout) | (self.num_toggles >= 4) - return done - - def _check_passed(self): - """ - Returns the times that the ego car overtook the other car - """ - return 0 - - def _update_state(self, obs_dict): - """ - Update the env's states according to observations - obs is observation dictionary - """ - self.x = obs_dict["poses_x"][obs_dict["ego_idx"]] - self.y = obs_dict["poses_y"][obs_dict["ego_idx"]] - if self.double_finish: - self.all_x = obs_dict["poses_x"] - self.all_y = obs_dict["poses_y"] - - self.theta = obs_dict["poses_theta"][obs_dict["ego_idx"]] - self.in_collision = obs_dict["collisions"][obs_dict["ego_idx"]] - self.collision_angle = obs_dict["collision_angles"][obs_dict["ego_idx"]] - - # TODO: do we do the ray casting here or in C++? - # if speed is a concern do it in C++? - # numba shouldn't be a dependency of gym env - def _raycast_opponents(self, obs_dict): - # find the angle of beam of each car in each other's fov - - # set range of beams to raycast, ego and op - - # raycast beams, two set - new_obs = {} - return new_obs - - def step(self, action): - # can't step if params not set - if not self.params_set: - print( - "ERROR - Gym Env - Params not set, call update params before stepping." - ) - sys.exit() - # action is a list of steering angles + command velocities - # also a ego car index - # action should a DICT with {'ego_idx': int, 'speed':[], 'steer':[]} - step_request_proto = sim_requests_pb2.SimRequest() - step_request_proto.type = 0 - step_request_proto.step_request.ego_idx = action["ego_idx"] - step_request_proto.step_request.requested_vel.extend(action["speed"]) - step_request_proto.step_request.requested_ang.extend(action["steer"]) - # serialization - step_request_string = step_request_proto.SerializeToString() - # send step request - self.socket.send(step_request_string) - # receive response from sim instance - sim_response_string = self.socket.recv() - # print('Gym env - Received response for step request.') - # parse map response proto - sim_response_proto = sim_requests_pb2.SimResponse() - sim_response_proto.ParseFromString(sim_response_string) - # get results - # make sure we have the right type of response - response_type = sim_response_proto.type - # TODO: also check for stepping fail - if not response_type == 0: - print("Gym env - Wrong response type for stepping, exiting...") - sys.exit() - observations_proto = sim_response_proto.sim_obs - # make sure the ego idx matches - if not observations_proto.ego_idx == action["ego_idx"]: - print("Gym env - Ego index mismatch, exiting...") - sys.exit() - # get observations - carobs_list = observations_proto.observations - # construct observation dict - # Observation DICT, assume indices consistent: {'ego_idx':int, 'scans':[[]], 'poses_x':[], 'poses_y':[], 'poses_theta':[], 'linear_vels_x':[], 'linear_vels_y':[], 'ang_vels_z':[], 'collisions':[], 'collision_angles':[]} - obs = { - "ego_idx": observations_proto.ego_idx, - "scans": [], - "poses_x": [], - "poses_y": [], - "poses_theta": [], - "linear_vels_x": [], - "linear_vels_y": [], - "ang_vels_z": [], - "collisions": [], - "collision_angles": [], - "lap_times": [], - "lap_counts": [], - } - for car_obs in carobs_list: - obs["scans"].append(car_obs.scan) - obs["poses_x"].append(car_obs.pose_x) - obs["poses_y"].append(car_obs.pose_y) - if abs(car_obs.theta) < np.pi: - obs["poses_theta"].append(car_obs.theta) - else: - obs["poses_theta"].append(-((2 * np.pi) - car_obs.theta)) - obs["linear_vels_x"].append(car_obs.linear_vel_x) - obs["linear_vels_y"].append(car_obs.linear_vel_y) - obs["ang_vels_z"].append(car_obs.ang_vel_z) - obs["collisions"].append(car_obs.collision) - obs["collision_angles"].append(car_obs.collision_angle) - - obs["lap_times"] = self.lap_times - obs["lap_counts"] = self.lap_counts - - # TODO: do we need step reward? - reward = self.timestep - # update accumulated time in env - self.current_time = self.current_time + self.timestep - # TODO: donezo should be done in simulator? could be done here as well - self._update_state(obs) - if self.double_finish: - done, temp = self._check_done() - info = {"checkpoint_done": temp} - else: - done = self._check_done() - info = {} - - # TODO: return obs, reward, done, info - return obs, reward, done, info - - def reset(self, poses=None): - self.current_time = 0.0 - self.in_collision = False - self.collision_angles = None - self.num_toggles = 0 - self.near_start = True - self.near_starts = np.array([True] * self.num_agents) - self.toggle_list = np.zeros((self.num_agents,)) - if poses: - pose_x = poses["x"] - pose_y = poses["y"] - pose_theta = poses["theta"] - self.start_x = pose_x[0] - self.start_y = pose_y[0] - self.start_theta = pose_theta[0] - self.start_xs = np.array(pose_x) - self.start_ys = np.array(pose_y) - self.start_thetas = np.array(pose_theta) - self.start_rot = np.array( - [ - [np.cos(-self.start_theta), -np.sin(-self.start_theta)], - [np.sin(-self.start_theta), np.cos(-self.start_theta)], - ] - ) - # create reset by pose proto - reset_request_proto = sim_requests_pb2.SimRequest() - reset_request_proto.type = 4 - reset_request_proto.reset_bypose_request.num_cars = self.num_agents - reset_request_proto.reset_bypose_request.ego_idx = 0 - reset_request_proto.reset_bypose_request.car_x.extend(pose_x) - reset_request_proto.reset_bypose_request.car_y.extend(pose_y) - reset_request_proto.reset_bypose_request.car_theta.extend(pose_theta) - reset_request_string = reset_request_proto.SerializeToString() - self.socket.send(reset_request_string) - else: - # create reset proto - self.start_x = 0.0 - self.start_y = 0.0 - self.start_theta = 0.0 - self.start_rot = np.array( - [ - [np.cos(-self.start_theta), -np.sin(-self.start_theta)], - [np.sin(-self.start_theta), np.cos(-self.start_theta)], - ] - ) - reset_request_proto = sim_requests_pb2.SimRequest() - reset_request_proto.type = 2 - reset_request_proto.reset_request.num_cars = self.num_agents - reset_request_proto.reset_request.ego_idx = 0 - # serialize reset proto - reset_request_string = reset_request_proto.SerializeToString() - # send reset proto string - self.socket.send(reset_request_string) - # receive response from sim - reset_response_string = self.socket.recv() - reset_response_proto = sim_requests_pb2.SimResponse() - reset_response_proto.ParseFromString(reset_response_string) - if reset_response_proto.reset_resp.result: - print("Gym env - Reset failed") - # TODO: failure handling - return None - # TODO: return with gym convention, one step? - vels = [0.0] * self.num_agents - angs = [0.0] * self.num_agents - action = {"ego_idx": self.ego_idx, "speed": vels, "steer": angs} - # print('Gym env - Reset done') - obs, reward, done, info = self.step(action) - # print('Gym env - step done for reset') - return obs, reward, done, info - - def init_map(self, map_path, img_ext, rgb, flip): - """ - init a map for the gym env - map_path: full path for the yaml, same as ROS, img and yaml in same dir - rgb: map grayscale or rgb - flip: if map needs flipping - """ - - self.map_path = map_path - if not map_path.endswith(".yaml"): - print("Gym env - Please use a yaml file for map initialization.") - print("Exiting...") - sys.exit() - - # split yaml ext name - map_img_path = os.path.splitext(self.map_path)[0] + img_ext - self.map_img = np.array( - Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM) - ) - self.map_img = self.map_img.astype(np.float64) - if flip: - self.map_img = self.map_img[::-1] - - if rgb: - self.map_img = np.dot(self.map_img[..., :3], [0.29, 0.57, 0.14]) - - # update map metadata - self.map_height = self.map_img.shape[0] - self.map_width = self.map_img.shape[1] - self.free_thresh = 0.6 # TODO: double check - with open(self.map_path, "r") as yaml_stream: - try: - map_metadata = yaml.safe_load(yaml_stream) - self.map_resolution = map_metadata["resolution"] - self.origin = map_metadata["origin"] - except yaml.YAMLError as ex: - print(ex) - self.map_inited = True - - # load waypoints - # self.csv_path = os.path.splitext(self.map_path)[0] + '.csv' - # with open(self.csv_path) as f: - # self.waypoints = [tuple(line) for line in csv.reader(f)] - # # waypoints are [x, y, speed, theta] - # self.waypoints = np.array([(float(pt[0]), float(pt[1]), float(pt[2]), float(pt[3])) for pt in self.waypoints]) - - def render(self, mode="human", close=False): - return - - # def get_min_dist(self, position): - # wpts = self.waypoints[:, 0:2] - # # = position[0:2] - # nearest_point, nearest_dist, t, i = self.nearest_point_on_trajectory(position, wpts) - # # speed = self.waypoints[i, 2] - # return nearest_dist - - # def nearest_point_on_trajectory(self, point, trajectory): - # ''' - # Return the nearest point along the given piecewise linear trajectory. - - # Same as nearest_point_on_line_segment, but vectorized. This method is quite fast, time constraints should - # not be an issue so long as trajectories are not insanely long. - - # Order of magnitude: trajectory length: 1000 --> 0.0002 second computation (5000fps) - - # point: size 2 numpy array - # trajectory: Nx2 matrix of (x,y) trajectory waypoints - # - these must be unique. If they are not unique, a divide by 0 error will destroy the world - # ''' - # diffs = trajectory[1:,:] - trajectory[:-1,:] - # l2s = diffs[:,0]**2 + diffs[:,1]**2 - # # this is equivalent to the elementwise dot product - # dots = np.sum((point - trajectory[:-1,:]) * diffs[:,:], axis=1) - # t = np.clip(dots / l2s, 0.0, 1.0) - # projections = trajectory[:-1,:] + (t*diffs.T).T - # dists = np.linalg.norm(point - projections,axis=1) - # min_dist_segment = np.argmin(dists) - # return projections[min_dist_segment], dists[min_dist_segment], t[min_dist_segment], min_dist_segment - - def update_params( - self, mu, h_cg, l_r, cs_f, cs_r, I_z, mass, exe_path, double_finish=False - ): - # if not self.sim_p is None: - # print('Gym env - Sim server exists, killing...') - # self.socket.send(b'dead') - # self.sim_p.kill() - # os.kill(self.sim_p.pid, signal.SIGINT) - # self.sim_p = None - # print('in update params') - - self.params = [mu, h_cg, l_r, cs_f, cs_r, I_z, mass] - self.params_set = True - if self.sim_p is None: - # print('starting ex and setting map') - self._start_executable(exe_path) - self._set_map() - self.double_finish = double_finish - # print('before creating proto') - - # create update proto - update_param_proto = sim_requests_pb2.SimRequest() - update_param_proto.type = 3 - update_param_proto.update_request.mu = mu - update_param_proto.update_request.h_cg = h_cg - update_param_proto.update_request.l_r = l_r - update_param_proto.update_request.cs_f = cs_f - update_param_proto.update_request.cs_r = cs_r - update_param_proto.update_request.I_z = I_z - update_param_proto.update_request.mass = mass - # serialize reset proto - update_param_string = update_param_proto.SerializeToString() - # print('proto serialized') - # send update param request - self.socket.send(update_param_string) - # print('Gym env - Update param request sent.') - # receive response - update_response_string = self.socket.recv() - update_response_proto = sim_requests_pb2.SimResponse() - update_response_proto.ParseFromString(update_response_string) - if update_response_proto.update_resp.result: - print("Gym env - Update param failed") - return None - - # print('Gym env - params updated.') - # start executable - # self._start_executable() - # call set map - # self._set_map() diff --git a/tests/test_collision_checks.py b/tests/test_collision_checks.py index 2608d2c1..9932c162 100644 --- a/tests/test_collision_checks.py +++ b/tests/test_collision_checks.py @@ -3,7 +3,7 @@ import unittest import numpy as np -from f110_gym.envs.collision_models import get_vertices, collision +from f1tenth_gym.envs.collision_models import get_vertices, collision # Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng diff --git a/tests/test_dynamics.py b/tests/test_dynamics.py index 3a910165..598cb0e4 100644 --- a/tests/test_dynamics.py +++ b/tests/test_dynamics.py @@ -23,7 +23,7 @@ import unittest import numpy as np -from f110_gym.envs.dynamic_models import ( +from f1tenth_gym.envs.dynamic_models import ( vehicle_dynamics_ks, vehicle_dynamics_st, func_KS, diff --git a/tests/test_f110_env.py b/tests/test_f110_env.py index 0a2f5e9b..bd1888c5 100644 --- a/tests/test_f110_env.py +++ b/tests/test_f110_env.py @@ -2,7 +2,7 @@ import gymnasium as gym import numpy as np -from f110_gym.envs.utils import deep_update +from f1tenth_gym.envs.utils import deep_update class TestEnvInterface(unittest.TestCase): @@ -18,7 +18,7 @@ def _make_env(self, config={}): conf = deep_update(conf, config) env = gym.make( - "f110_gym:f110-v0", + "f1tenth_gym:f1tenth-v0", config=conf, ) return env @@ -157,7 +157,7 @@ def test_manual_reset_options_in_synch_vec_env(self): "observation_config": {"type": "kinematic_state"}, } vec_env = gym.vector.make( - "f110_gym:f110-v0", asynchronous=False, config=config, num_envs=num_envs + "f1tenth_gym:f1tenth-v0", asynchronous=False, config=config, num_envs=num_envs ) rnd_poses = np.random.random((2, 3)) @@ -188,7 +188,7 @@ def test_manual_reset_options_in_asynch_vec_env(self): "observation_config": {"type": "kinematic_state"}, } vec_env = gym.make_vec( - "f110_gym:f110-v0", vectorization_mode="async", config=config, num_envs=num_envs + "f1tenth_gym:f1tenth-v0", vectorization_mode="async", config=config, num_envs=num_envs ) rnd_poses = np.random.random((2, 3)) @@ -220,7 +220,7 @@ def test_auto_reset_options_in_synch_vec_env(self): "reset_config": {"type": "rl_random_random"}, } vec_env = gym.make_vec( - "f110_gym:f110-v0", vectorization_mode="sync", config=config, num_envs=num_envs, + "f1tenth_gym:f1tenth-v0", vectorization_mode="sync", config=config, num_envs=num_envs, ) obss, infos = vec_env.reset() diff --git a/tests/test_observation.py b/tests/test_observation.py index a80dbcdb..23633012 100644 --- a/tests/test_observation.py +++ b/tests/test_observation.py @@ -2,9 +2,9 @@ import gymnasium as gym import numpy as np -from f110_gym.envs import F110Env -from f110_gym.envs.observation import observation_factory -from f110_gym.envs.utils import deep_update +from f1tenth_gym.envs import F110Env +from f1tenth_gym.envs.observation import observation_factory +from f1tenth_gym.envs.utils import deep_update from gymnasium.spaces import Box @@ -21,7 +21,7 @@ def _make_env(config={}) -> F110Env: } conf = deep_update(conf, config) - env = gym.make("f110_gym:f110-v0", config=conf) + env = gym.make("f1tenth_gym:f1tenth-v0", config=conf) return env def test_original_obs_space(self): diff --git a/tests/test_renderer.py b/tests/test_renderer.py index 80f98600..7e7247f1 100644 --- a/tests/test_renderer.py +++ b/tests/test_renderer.py @@ -2,15 +2,15 @@ import numpy as np -from f110_gym.envs import F110Env -from f110_gym.envs.utils import deep_update +from f1tenth_gym.envs import F110Env +from f1tenth_gym.envs.utils import deep_update class TestRenderer(unittest.TestCase): @staticmethod def _make_env(config={}, render_mode=None) -> F110Env: import gymnasium as gym - import f110_gym + import f1tenth_gym base_config = { "map": "Spielberg", @@ -24,20 +24,20 @@ def _make_env(config={}, render_mode=None) -> F110Env: } config = deep_update(base_config, config) - env = gym.make("f110_gym:f110-v0", config=config, render_mode=render_mode,) + env = gym.make("f1tenth_gym:f1tenth-v0", config=config, render_mode=render_mode,) return env - def test_human_render(self): - env = self._make_env(render_mode="human") - env.reset() - for _ in range(100): - action = env.action_space.sample() - env.step(action) - env.render() - env.close() + # def test_human_render(self): + # env = self._make_env(render_mode="human") + # env.reset() + # for _ in range(100): + # action = env.action_space.sample() + # env.step(action) + # env.render() + # env.close() - self.assertTrue(True, "Human render test failed") + # self.assertTrue(True, "Human render test failed") def test_rgb_array_render(self): env = self._make_env(render_mode="rgb_array") diff --git a/tests/test_scan_sim.py b/tests/test_scan_sim.py index d4d37756..7cdd7be6 100644 --- a/tests/test_scan_sim.py +++ b/tests/test_scan_sim.py @@ -29,7 +29,7 @@ import unittest import numpy as np -from f110_gym.envs.laser_models import ScanSimulator2D +from f1tenth_gym.envs.laser_models import ScanSimulator2D class ScanTests(unittest.TestCase): diff --git a/tests/test_track.py b/tests/test_track.py index e896757f..98ff7bbb 100644 --- a/tests/test_track.py +++ b/tests/test_track.py @@ -3,7 +3,7 @@ import unittest import numpy as np -from f110_gym.envs.track import Raceline, Track, find_track_dir +from f1tenth_gym.envs.track import Raceline, Track, find_track_dir class TestTrack(unittest.TestCase): diff --git a/tests/test_utils.py b/tests/test_utils.py index c2fefbe5..8929db0d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -9,8 +9,8 @@ def test_deep_update(self): """ import gymnasium as gym - default_env = gym.make("f110_gym:f110-v0") - custom_env = gym.make("f110_gym:f110-v0", config={"params": {"mu": 1.0}}) + default_env = gym.make("f1tenth_gym:f1tenth-v0") + custom_env = gym.make("f1tenth_gym:f1tenth-v0", config={"params": {"mu": 1.0}}) # check all parameters are the same except for mu for par in default_env.sim.params: From ac119ad608a9dceda0e38d6780c9220e6b9fa850 Mon Sep 17 00:00:00 2001 From: Luigi Berducci Date: Fri, 15 Mar 2024 15:19:44 +0100 Subject: [PATCH 3/4] bugfix: generation random track, no skip counting when generation fail --- examples/random_trackgen.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/examples/random_trackgen.py b/examples/random_trackgen.py index 6179492a..ee24f959 100644 --- a/examples/random_trackgen.py +++ b/examples/random_trackgen.py @@ -49,15 +49,17 @@ def main(args): outdir.mkdir(parents=True, exist_ok=True) for i in range(n_maps): - try: - print(f"[info] creating track {i}") - track, track_int, track_ext = create_track() - convert_track(track, track_int, track_ext, i, outdir) - print(f"[info] saved track {i} in {outdir}/") - except Exception as _: # noqa: F841 - print("[error] failed to create track. Retrying...") - continue - print() + while True: + try: + print(f"[info] creating track {i}") + track, track_int, track_ext = create_track() + convert_track(track, track_int, track_ext, i, outdir) + print(f"[info] saved track {i} in {outdir}/") + break + except Exception as _: # noqa: F841 + print("[error] failed to create track. Retrying...") + continue + print() def create_track(): @@ -250,7 +252,7 @@ def convert_track(track, track_int, track_ext, track_id, outdir): "--seed", type=int, default=123, help="The seed for the numpy rng" ) parser.add_argument( - "--n_maps", type=int, default=3, help="Number of maps to create" + "--n-maps", type=int, default=3, help="Number of maps to create" ) parser.add_argument( "--outdir", type=pathlib.Path, default="./maps", help="Out directory" From 5dbba8528db604fe57b39176fb5e6827d2e9fa4b Mon Sep 17 00:00:00 2001 From: Nandan Tumu Date: Tue, 19 Mar 2024 16:51:00 -0400 Subject: [PATCH 4/4] Fixed gym.make command --- examples/run_in_empty_track.py | 2 +- examples/video_recording.py | 2 +- examples/waypoint_follow.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/run_in_empty_track.py b/examples/run_in_empty_track.py index e156f244..ad3d203f 100644 --- a/examples/run_in_empty_track.py +++ b/examples/run_in_empty_track.py @@ -20,7 +20,7 @@ def main(): # env and planner env = gym.make( - "f110_gym:f110-v0", + "f1tenth_gym:f1tenth-v0", config={ "map": track, "num_agents": 1, diff --git a/examples/video_recording.py b/examples/video_recording.py index 3c593fbe..f384b979 100644 --- a/examples/video_recording.py +++ b/examples/video_recording.py @@ -15,7 +15,7 @@ def main(): } env = gym.make( - "f110_gym:f110-v0", + "f1tenth_gym:f1tenth-v0, config={ "map": "Spielberg", "num_agents": 1, diff --git a/examples/waypoint_follow.py b/examples/waypoint_follow.py index 0056cb47..f5527472 100644 --- a/examples/waypoint_follow.py +++ b/examples/waypoint_follow.py @@ -293,7 +293,7 @@ def main(): num_agents = 3 env = gym.make( - "f110_gym:f110-v0", + "f1tenth_gym:f1tenth-v0", config={ "map": "Spielberg", "num_agents": num_agents,