diff --git a/.github/workflows/reusable_build.yml b/.github/workflows/reusable_build.yml index f1db037..3e7fdf4 100644 --- a/.github/workflows/reusable_build.yml +++ b/.github/workflows/reusable_build.yml @@ -25,7 +25,7 @@ jobs: AWS_REQUEST_CHECKSUM_CALCULATION: when_required AWS_RESPONSE_CHECKSUM_VALIDATION: when_required steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 name: Checkout # Do all the building @@ -50,7 +50,7 @@ jobs: CIBW_ENVIRONMENT_PASS_LINUX: VCPKG_BINARY_SOURCES AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_ENDPOINT_URL AWS_REQUEST_CHECKSUM_CALCULATION AWS_RESPONSE_CHECKSUM_VALIDATION # save artifacts for testing - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl diff --git a/.github/workflows/reusable_checks.yml b/.github/workflows/reusable_checks.yml index d35ace7..c5b3d8d 100644 --- a/.github/workflows/reusable_checks.yml +++ b/.github/workflows/reusable_checks.yml @@ -8,33 +8,34 @@ jobs: ruff: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 name: Checkout - - uses: astral-sh/ruff-action@v3 + - uses: astral-sh/ruff-action@v4.1.0 name: Ruff # check python typing types: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 name: Checkout - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v9.0.0 with: enable-cache: true - name: Install the project run: uv sync --dev --verbose --all-extras - name: Copy stubs into place run: cp -r .venv/lib/python$(cat .python-version)/site-packages/evalio/_cpp python/evalio - - name: Run basedpyright - run: uv run basedpyright + - name: Run pyrefly + uses: facebook/pyrefly@main + # check cpp formatting clang-format: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 name: Checkout - uses: jidicula/clang-format-action@v4.14.0 name: Clang-Format @@ -58,10 +59,10 @@ jobs: - "3.13" - "3.14" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 name: Checkout - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v9.0.0 with: python-version: ${{ matrix.python-version }} enable-cache: true diff --git a/.github/workflows/reusable_docs.yml b/.github/workflows/reusable_docs.yml index 1ec087d..a1907aa 100644 --- a/.github/workflows/reusable_docs.yml +++ b/.github/workflows/reusable_docs.yml @@ -31,7 +31,7 @@ jobs: AWS_REQUEST_CHECKSUM_CALCULATION: when_required AWS_RESPONSE_CHECKSUM_VALIDATION: when_required steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 name: Checkout with: fetch-depth: 0 @@ -42,7 +42,7 @@ jobs: # Setup Python dependencies - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v9.0.0 - name: Install the project run: uv sync --dev --verbose diff --git a/pyproject.toml b/pyproject.toml index c39a6af..93ac77e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,18 +7,18 @@ description = "Evaluate Lidar-Inertial Odometry on public datasets" readme = "README.md" requires-python = ">=3.11" dependencies = [ - "asteval>=1.0.6", - "awscli>=1.44.58", + "asteval>=1.0.8", + "awscli>=1.46.0", "distinctipy>=1.3.4", - "gdown>=5.2.0", + "gdown>=6.1.0", "joblib>=1.5.2", "numpy", - "polars>=1.33.1", + "polars>=1.43.2", "pyyaml>=6.0", "rapidfuzz>=3.12.2", - "rosbags>=0.11.0", - "tqdm>=4.66", - "typer>=0.15.3", + "rosbags>=0.11.3", + "tqdm>=4.67", + "typer>=0.24.0", ] keywords = [ "lidar", @@ -31,10 +31,10 @@ keywords = [ license = { file = "LICENSE.txt" } [project.optional-dependencies] -vis = ["rerun-sdk>=0.31"] +vis = ["rerun-sdk>=0.35"] [build-system] -requires = ["scikit-build-core>=0.12", "nanobind>=2.13", "numpy"] +requires = ["scikit-build-core>=1.0", "nanobind==2.13.0", "numpy"] build-backend = "scikit_build_core.build" [project.scripts] @@ -82,7 +82,7 @@ MACOSX_DEPLOYMENT_TARGET = "11" dev = [ "cmake<4.0.0", "compdb>=0.2.0", - "ruff>=0.6.8", + "ruff>=0.16", "types-pyyaml>=6.0.12.20240917", "types-tabulate>=0.9.0.20240106", "types-tqdm>=4.66.0.20240417", @@ -91,12 +91,11 @@ dev = [ "mkdocstrings[python]>=0.29.1", "mkdocs-material>=9.6.11", "mkdocs-gen-files>=0.5.0", - "nanobind>=2.13", "mike>=2.1.3", - "basedpyright>=1.31.4", "joblib-stubs>=1.5.2.0.20250831", "scipy>=1.16.2", "scipy-stubs>=1.16.2.4", + "pyrefly>=1.2.0", ] [tool.ruff] diff --git a/python/evalio/cli/run.py b/python/evalio/cli/run.py index ffdb40b..d2d1abc 100644 --- a/python/evalio/cli/run.py +++ b/python/evalio/cli/run.py @@ -346,7 +346,8 @@ def run_single( print_warning(f"Error setting up experiment {exp.name}: {output}") return pipe, dataset = output - pipe.set_visualizing(vis.args) + if vis.args is not None: + pipe.set_visualizing(vis.args) exp.status = ty.ExperimentStatus.Started traj = ty.Trajectory(metadata=exp) traj.open() diff --git a/python/evalio/rerun.py b/python/evalio/rerun.py index 4360d4a..e0a2187 100644 --- a/python/evalio/rerun.py +++ b/python/evalio/rerun.py @@ -285,7 +285,6 @@ def convert( rr.Points3D: LidarMeasurement converted to rerun Points3D. """ - @overload def convert( obj: list[Point], @@ -471,6 +470,7 @@ class RerunVis: def __init__( self, args: Optional[set[VisOption]], pipeline_names: list[str] ) -> None: + self.args = args if args is not None: print_warning("Rerun not found, visualization disabled") diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_csv_loading.py b/tests/test_csv_loading.py index 137da69..5a28a5d 100644 --- a/tests/test_csv_loading.py +++ b/tests/test_csv_loading.py @@ -13,7 +13,8 @@ Stamp, Trajectory, ) -from utils import check_lidar_eq, isclose_se3, rand_se3 + +from tests.utils import check_lidar_eq, isclose_se3, rand_se3 # ------------------------- Loading imu & lidar ------------------------- # data_dir = Path("tests/data") diff --git a/tests/test_iteration.py b/tests/test_iteration.py index fc3521e..72c4787 100644 --- a/tests/test_iteration.py +++ b/tests/test_iteration.py @@ -3,7 +3,8 @@ import numpy as np from evalio.datasets.loaders import RawDataIter, RosbagIter from evalio.types import ImuMeasurement, LidarMeasurement, LidarParams, Point, Stamp -from utils import rosbag_saver + +from tests.utils import rosbag_saver def make_imus(num: int = 200) -> list[ImuMeasurement]: diff --git a/tests/test_parsing.py b/tests/test_parsing.py index 3b58487..00c11f8 100644 --- a/tests/test_parsing.py +++ b/tests/test_parsing.py @@ -12,7 +12,8 @@ name = seq.full_name # fmt: off -DATASETS: list[tuple[str | DatasetConfig | Sequence[str | DatasetConfig], DatasetConfigError | list[tuple[ds.Dataset, int]]]] = [ +# pyrefly: ignore [bad-assignment] +DATASETS: list[tuple[str | DatasetConfig | Sequence[str | DatasetConfig], DatasetConfigError | list[tuple[ds.Dataset, int | None]]]] = [ # good ones (name, [(seq, None)]), ({"name": name}, [(seq, None)]), @@ -23,7 +24,7 @@ ("newer_college_123/*", ds.DatasetNotFound(name="newer_college_123")), ("newer_college_123/*", ds.DatasetNotFound(name="newer_college_123")), ({"name": "newer_college_2020/bad"}, ds.SequenceNotFound("newer_college_2020/bad")), - ({"length": 100}, ds.InvalidDatasetConfig("Missing 'name' in dataset config")), # type: ignore + ({"length": 100}, ds.InvalidDatasetConfig("Missing 'name' in dataset config")), ] # fmt: on diff --git a/tests/test_rosbag_conversion.py b/tests/test_rosbag_conversion.py index 6ba9ee1..49b8c72 100644 --- a/tests/test_rosbag_conversion.py +++ b/tests/test_rosbag_conversion.py @@ -18,7 +18,8 @@ Point, Stamp, ) -from utils import check_lidar_eq, rosbag_saver + +from tests.utils import check_lidar_eq, rosbag_saver # Create a row major point cloud WIDTH = 256 diff --git a/tests/test_stats.py b/tests/test_stats.py index 346b5b4..354b056 100644 --- a/tests/test_stats.py +++ b/tests/test_stats.py @@ -3,7 +3,8 @@ import numpy as np from evalio import stats from evalio.types import SE3, Stamp, Trajectory -from utils import isclose_se3, rand_se3 + +from tests.utils import isclose_se3, rand_se3 ID = SE3.identity() diff --git a/uv.lock b/uv.lock index 5861d95..657a231 100644 --- a/uv.lock +++ b/uv.lock @@ -148,18 +148,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1c/cf/e5f9b68a5b0e939a2fb933a66c20180d0c9241bf8927f7a47fa48c1675e9/backrefs-8.0-py314-none-any.whl", hash = "sha256:9ec96efa080938be92323e8e730e57718c9c88eb15ad70bbef4e1766df591408", size = 411903, upload-time = "2026-07-26T19:54:23.221Z" }, ] -[[package]] -name = "basedpyright" -version = "1.39.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nodejs-wheel-binaries" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/4b/c1f4e211e50389304d6af32b9280e026a7133e3ad59bbdf8f7a3250f8bee/basedpyright-1.39.9.tar.gz", hash = "sha256:32cbea5fc8273e89df3db20daea56cb7286e419ccdfdc479c64759d2dc071901", size = 24412216, upload-time = "2026-06-27T02:19:49.834Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/d4/e1fa108710d0498a18c77b1e13897f31eab47c69aa8cfe2d2a4df746541e/basedpyright-1.39.9-py3-none-any.whl", hash = "sha256:6b0837b9eba972c71895167ab9b127e6afdbc17abc92312e3f8d15ca82a5611c", size = 13374276, upload-time = "2026-06-27T02:19:54.431Z" }, -] - [[package]] name = "beautifulsoup4" version = "4.15.0" @@ -361,7 +349,6 @@ vis = [ [package.dev-dependencies] dev = [ - { name = "basedpyright" }, { name = "cmake" }, { name = "compdb" }, { name = "joblib-stubs" }, @@ -370,7 +357,7 @@ dev = [ { name = "mkdocs-gen-files" }, { name = "mkdocs-material" }, { name = "mkdocstrings", extra = ["python"] }, - { name = "nanobind" }, + { name = "pyrefly" }, { name = "pytest" }, { name = "ruff" }, { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, @@ -384,25 +371,24 @@ dev = [ [package.metadata] requires-dist = [ - { name = "asteval", specifier = ">=1.0.6" }, - { name = "awscli", specifier = ">=1.44.58" }, + { name = "asteval", specifier = ">=1.0.8" }, + { name = "awscli", specifier = ">=1.46.0" }, { name = "distinctipy", specifier = ">=1.3.4" }, - { name = "gdown", specifier = ">=5.2.0" }, + { name = "gdown", specifier = ">=6.1.0" }, { name = "joblib", specifier = ">=1.5.2" }, { name = "numpy" }, - { name = "polars", specifier = ">=1.33.1" }, + { name = "polars", specifier = ">=1.43.2" }, { name = "pyyaml", specifier = ">=6.0" }, { name = "rapidfuzz", specifier = ">=3.12.2" }, - { name = "rerun-sdk", marker = "extra == 'vis'", specifier = ">=0.31" }, - { name = "rosbags", specifier = ">=0.11.0" }, - { name = "tqdm", specifier = ">=4.66" }, - { name = "typer", specifier = ">=0.15.3" }, + { name = "rerun-sdk", marker = "extra == 'vis'", specifier = ">=0.35" }, + { name = "rosbags", specifier = ">=0.11.3" }, + { name = "tqdm", specifier = ">=4.67" }, + { name = "typer", specifier = ">=0.24.0" }, ] provides-extras = ["vis"] [package.metadata.requires-dev] dev = [ - { name = "basedpyright", specifier = ">=1.31.4" }, { name = "cmake", specifier = "<4.0.0" }, { name = "compdb", specifier = ">=0.2.0" }, { name = "joblib-stubs", specifier = ">=1.5.2.0.20250831" }, @@ -411,9 +397,9 @@ dev = [ { name = "mkdocs-gen-files", specifier = ">=0.5.0" }, { name = "mkdocs-material", specifier = ">=9.6.11" }, { name = "mkdocstrings", extras = ["python"], specifier = ">=0.29.1" }, - { name = "nanobind", specifier = ">=2.13" }, + { name = "pyrefly", specifier = ">=1.2.0" }, { name = "pytest", specifier = ">=8.3.5" }, - { name = "ruff", specifier = ">=0.6.8" }, + { name = "ruff", specifier = ">=0.16" }, { name = "scipy", specifier = ">=1.16.2" }, { name = "scipy-stubs", specifier = ">=1.16.2.4" }, { name = "types-pyyaml", specifier = ">=6.0.12.20240917" }, @@ -837,31 +823,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/fc/10ab7e80650a9c9e8f4f1105f8c8e73567f88ed0c06ada589ab81d38687c/mkdocstrings_python-2.0.5-py3-none-any.whl", hash = "sha256:30c837bbff016549f659fcba6539ac351303f0fd7e713c89a040611072236e9d", size = 104951, upload-time = "2026-06-19T10:41:07.378Z" }, ] -[[package]] -name = "nanobind" -version = "2.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/e5/a6fc2f024eaef17c68b94b5f8f56098d31859a7840a11a3dd45da2d3908a/nanobind-2.13.0.tar.gz", hash = "sha256:c7b04d6a6a4cd57985571e605539399b51331ae455d7fce576a5e2fcb89b1dcf", size = 1052101, upload-time = "2026-06-18T06:03:49.491Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/8d/cec69a0a804711fd89f47fad92cd2a438a1ceaafd9dabaf3b8b403b5cbba/nanobind-2.13.0-py3-none-any.whl", hash = "sha256:9268d7201eaf5519ae61b7a83175f2af77088cb4b99dd3ce5b00550f697da7b7", size = 269387, upload-time = "2026-06-18T06:03:47.508Z" }, -] - -[[package]] -name = "nodejs-wheel-binaries" -version = "24.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/22/2a5beb4e21417c73233d9f65cf6f3e96e891b80d2f550a8f630ebc6b88c6/nodejs_wheel_binaries-24.16.0.tar.gz", hash = "sha256:c973cb69dc5fd16e6f6dc6e579e2c3d5534e2a1f57619dddf5ba070efa7dde37", size = 8056, upload-time = "2026-05-30T16:52:09.807Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/d1/68b43b53cd0fa83ae6fd406705023ca988d9e0ca41c724d82e66fbeb2ef6/nodejs_wheel_binaries-24.16.0-py2.py3-none-macosx_13_0_arm64.whl", hash = "sha256:d9f8f677dcf30e37ac244f07869726abe043f01eb0f45722b1df31cc2af7093c", size = 55666374, upload-time = "2026-05-30T16:51:39.588Z" }, - { url = "https://files.pythonhosted.org/packages/e9/b2/40a989159599080da485de966c4c2d207e852ac7aa7864702626d96c8bf5/nodejs_wheel_binaries-24.16.0-py2.py3-none-macosx_13_0_x86_64.whl", hash = "sha256:3d0370fe7120ce9697a4f60d40480d2bd8808d9f30131458d5afc0040d4e5a51", size = 55838487, upload-time = "2026-05-30T16:51:43.383Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a7/cd42174fb5ff6faff7fa8d326a18914d8f232098ab5de055b57c16fa13ca/nodejs_wheel_binaries-24.16.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:85dc92bbb79c851569c5925dcc2a4c915a034efab375f99e4e7e6bbe9cca8342", size = 60179540, upload-time = "2026-05-30T16:51:47.036Z" }, - { url = "https://files.pythonhosted.org/packages/2b/95/c8a1f9ae140aa28df8744d984d01d4b3af7cdd6555af12127f40ceb45a7d/nodejs_wheel_binaries-24.16.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:2f3036292811514ba847b3708492644764f88a833ac425c5f55007014308ddfd", size = 60716262, upload-time = "2026-05-30T16:51:50.711Z" }, - { url = "https://files.pythonhosted.org/packages/64/c9/7c35b3737f59e36d0249c265397b7bff570519b95301d6e16ea361e904ad/nodejs_wheel_binaries-24.16.0-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:db8a8a76ebd2b28ecbfc9ad464baa3707241b9e050a30e2efdf6f60c0f886502", size = 62230592, upload-time = "2026-05-30T16:51:55Z" }, - { url = "https://files.pythonhosted.org/packages/04/96/d931255cf9d11a84d6b54d882dba7434646467d568ccf070ea3418638df3/nodejs_wheel_binaries-24.16.0-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f1a3d8f7b4491cbbd023ba3fc4e901fcca2d9fb80d57f24ba3890de8b1dbac03", size = 62841759, upload-time = "2026-05-30T16:51:59.407Z" }, - { url = "https://files.pythonhosted.org/packages/a2/7b/8b7a3f41bc255411be30b6d7d288aab8ffd9ea2055db8555ced3548007b9/nodejs_wheel_binaries-24.16.0-py2.py3-none-win_amd64.whl", hash = "sha256:bb136be9944f0662dcf1120f45193a6b75b13fac378971a95cc42c9f879a81aa", size = 42027734, upload-time = "2026-05-30T16:52:03.348Z" }, - { url = "https://files.pythonhosted.org/packages/17/66/1ed71f1f529b8ca727d42c7ceb9db0bef145ce4a13dfc86fb50aa44f3be6/nodejs_wheel_binaries-24.16.0-py2.py3-none-win_arm64.whl", hash = "sha256:8308940b5edd0a50dc5267ea36ba21c9f668e83fe0d9f293937174d3a7e31c36", size = 39714528, upload-time = "2026-05-30T16:52:06.421Z" }, -] - [[package]] name = "numpy" version = "2.4.6" @@ -1362,6 +1323,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] +[[package]] +name = "pyrefly" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/01/a86e9f24722b095c3f88e3616132b75a21b0df53804bdc6a45314dd4d93c/pyrefly-1.2.0.tar.gz", hash = "sha256:5485f960fc2481617068c918335c39ab1507ef90b6b5bd35bf57726e60e73185", size = 6243654, upload-time = "2026-08-01T02:56:27.592Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/9d/3c0ef1d4843987b22f996ed381ec9cf5a3b1273e29804db276252e4c95eb/pyrefly-1.2.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7f46d983ac49ddd2b043694960a01dc6a19a5cfd8eec609d6bd9c42866f91b4e", size = 14026305, upload-time = "2026-08-01T02:56:02.611Z" }, + { url = "https://files.pythonhosted.org/packages/0a/06/03bbb78fbea54cdc65b626619f3597d5611aca4fdef11e72a4e8360e7e63/pyrefly-1.2.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:756f669b5555090f5c1a4fef30db1785fabe657764f7e4e6dc88994dfb8ca82d", size = 13463880, upload-time = "2026-08-01T02:56:04.93Z" }, + { url = "https://files.pythonhosted.org/packages/13/5a/7d8bc00a38e93bbc9c3e7bd14d305f7948717e667c9bcddeab9dd42fd255/pyrefly-1.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3465812ce5ef4781fb592edbf2724547296f0a3124be115d73c7e8b2401862d", size = 13907329, upload-time = "2026-08-01T02:56:07.104Z" }, + { url = "https://files.pythonhosted.org/packages/be/94/9e08b4bf799d0b8f36b55a2783c7ba5f51730cf0632a85a67b5b5ed876cd/pyrefly-1.2.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5de7b2ad2bba5c8055181681a84b74143eac2234a48ba5d1b7ed7e7a722b02bd", size = 15039020, upload-time = "2026-08-01T02:56:09.208Z" }, + { url = "https://files.pythonhosted.org/packages/5b/bd/bca5fd0c80f4daf8ee6903a29df9f3de1feb05ff0946b8f35ec8c5096b13/pyrefly-1.2.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25822ea9505f589ea8a725e4268b475132fb89e038fbf092e446510443ac142a", size = 14986199, upload-time = "2026-08-01T02:56:11.924Z" }, + { url = "https://files.pythonhosted.org/packages/97/f7/f07087f3d185ad2eced0c56cef89ca5474dfb4ff25f146cd50a861c97553/pyrefly-1.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90efe75e17491ef5d636e10469e9278d7d0256b3b4c5e1f4750069bf3ae0f5d1", size = 14393715, upload-time = "2026-08-01T02:56:14.143Z" }, + { url = "https://files.pythonhosted.org/packages/d3/70/0d142c320e284b9e3ce35e9b1e58b8ce2ee1f578f2a7234bc30e5022b94f/pyrefly-1.2.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:368aaf7eee4f511ddc0f8e564cf14e01ab2f10b0db9105c6d5b153bf498d07bf", size = 13933008, upload-time = "2026-08-01T02:56:16.525Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e8/e84f11b6e1f63fd453ad3654213b9a0f6f4de8cef6b58038eef2d0d5955d/pyrefly-1.2.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d52d5da7bc65fb7675fbaa80eda879d4f8787c494f04cac21603330d3abbdbbe", size = 14431827, upload-time = "2026-08-01T02:56:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/0f/06/810d31380f66c75e1c0779a408d3b16117b1b368b57894f6aa66bef21686/pyrefly-1.2.0-py3-none-win32.whl", hash = "sha256:8c90751de8506d938e8f802659c74cf35bd7a0036510ee6c634a38eebb280bfa", size = 13229447, upload-time = "2026-08-01T02:56:20.921Z" }, + { url = "https://files.pythonhosted.org/packages/ed/98/4dafa3c7a1caed2dc8cc708dde09ba27963c7736508f55b626fff3024113/pyrefly-1.2.0-py3-none-win_amd64.whl", hash = "sha256:8a8964c224ccc4882730130955815de21ff443c1ac3f0b90685b19bf63848170", size = 14087387, upload-time = "2026-08-01T02:56:23.188Z" }, + { url = "https://files.pythonhosted.org/packages/1b/1c/df3cb0a2e5591660ded7a1836cd2f29dc48c91adb1c0a3a700a96f6d09e1/pyrefly-1.2.0-py3-none-win_arm64.whl", hash = "sha256:3a90bb8df39dfbac74b1f3b2e9d7c526b8f80568884c3944d955023a73ebf61e", size = 13430873, upload-time = "2026-08-01T02:56:25.425Z" }, +] + [[package]] name = "pysocks" version = "1.7.1"