From e65e8a48be0ebd9a7c3216f543304209c0135b2e Mon Sep 17 00:00:00 2001 From: Avasam Date: Fri, 23 May 2025 22:24:13 -0400 Subject: [PATCH 1/2] Test types across environments, remove inexistant setup.pyi, fix all issues on Python 3.13 --- .github/workflows/test.yml | 19 ++++++++++++++----- .gitignore | 3 +++ pyproject.toml | 4 ++-- stubs/matplotlib/_mathtext.pyi | 10 +++++++++- stubs/skimage/_shared/setup.pyi | 7 ------- stubs/skimage/draw/setup.pyi | 7 ------- stubs/skimage/future/graph/setup.pyi | 7 ------- stubs/skimage/future/setup.pyi | 1 - stubs/skimage/measure/setup.pyi | 7 ------- stubs/skimage/morphology/setup.pyi | 7 ------- stubs/skimage/setup.pyi | 1 - stubs/skimage/transform/setup.pyi | 7 ------- stubs/sklearn/__check_build/setup.pyi | 8 -------- stubs/sklearn/_loss/setup.pyi | 7 ------- stubs/sklearn/cluster/setup.pyi | 9 --------- stubs/sklearn/datasets/setup.pyi | 8 -------- stubs/sklearn/decomposition/setup.pyi | 7 ------- stubs/sklearn/ensemble/setup.pyi | 5 ----- stubs/sklearn/feature_extraction/setup.pyi | 5 ----- stubs/sklearn/inspection/setup.pyi | 4 ---- stubs/sklearn/linear_model/setup.pyi | 9 --------- stubs/sklearn/manifold/setup.pyi | 7 ------- stubs/sklearn/metrics/cluster/setup.pyi | 7 ------- stubs/sklearn/metrics/setup.pyi | 7 ------- stubs/sklearn/neighbors/setup.pyi | 5 ----- stubs/sklearn/preprocessing/setup.pyi | 5 ----- stubs/sklearn/setup.pyi | 9 --------- stubs/sklearn/svm/setup.pyi | 8 -------- stubs/sklearn/tree/setup.pyi | 7 ------- stubs/sklearn/utils/setup.pyi | 9 --------- stubs/vispy/gloo/glir.pyi | 18 ------------------ stubs/vispy/util/check_environment.pyi | 5 ----- 32 files changed, 28 insertions(+), 201 deletions(-) delete mode 100644 stubs/skimage/_shared/setup.pyi delete mode 100644 stubs/skimage/draw/setup.pyi delete mode 100644 stubs/skimage/future/graph/setup.pyi delete mode 100644 stubs/skimage/future/setup.pyi delete mode 100644 stubs/skimage/measure/setup.pyi delete mode 100644 stubs/skimage/morphology/setup.pyi delete mode 100644 stubs/skimage/setup.pyi delete mode 100644 stubs/skimage/transform/setup.pyi delete mode 100644 stubs/sklearn/__check_build/setup.pyi delete mode 100644 stubs/sklearn/_loss/setup.pyi delete mode 100644 stubs/sklearn/cluster/setup.pyi delete mode 100644 stubs/sklearn/datasets/setup.pyi delete mode 100644 stubs/sklearn/decomposition/setup.pyi delete mode 100644 stubs/sklearn/ensemble/setup.pyi delete mode 100644 stubs/sklearn/feature_extraction/setup.pyi delete mode 100644 stubs/sklearn/inspection/setup.pyi delete mode 100644 stubs/sklearn/linear_model/setup.pyi delete mode 100644 stubs/sklearn/manifold/setup.pyi delete mode 100644 stubs/sklearn/metrics/cluster/setup.pyi delete mode 100644 stubs/sklearn/metrics/setup.pyi delete mode 100644 stubs/sklearn/neighbors/setup.pyi delete mode 100644 stubs/sklearn/preprocessing/setup.pyi delete mode 100644 stubs/sklearn/setup.pyi delete mode 100644 stubs/sklearn/svm/setup.pyi delete mode 100644 stubs/sklearn/tree/setup.pyi delete mode 100644 stubs/sklearn/utils/setup.pyi diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 112f0928..d210a6a1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,17 +4,24 @@ on: [push, pull_request, workflow_dispatch] jobs: test: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} timeout-minutes: 10 + strategy: + matrix: + # Oldest non-EOL and newest released + python-version: ["3.9", "3.13"] + # Tier 1 OSes + os: ["ubuntu-latest", "windows-latest", "macos-latest"] + fail-fast: false steps: - name: Check out code uses: actions/checkout@v2 - - name: Setup Python + - name: Setup Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: - python-version: "3.11" + python-version: ${{ matrix.python-version }} - name: Cache pip uses: actions/cache@v4 @@ -31,9 +38,10 @@ jobs: uses: jakebailey/pyright-action@v2 with: pylance-version: latest-prerelease + python-version: ${{ matrix.python-version }} - name: Run mypy tests - run: python -m mypy . + run: python -m mypy . --python-version=${{ matrix.python-version }} hygiene: runs-on: ubuntu-latest @@ -45,4 +53,5 @@ jobs: - name: Run Ruff Linter uses: astral-sh/ruff-action@v3 - - run: ruff format --check + - name: Run Ruff Formatter + run: ruff format --check diff --git a/.gitignore b/.gitignore index df9a0eda..a8baadfa 100644 --- a/.gitignore +++ b/.gitignore @@ -357,6 +357,9 @@ MigrationBackup/ # Python virtual environment .venv +# Lock files (like uv.lock) +*.lock + # Build files from utils .eggs *.egg-info diff --git a/pyproject.toml b/pyproject.toml index a68a00ae..932e3c55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ hygiene = ["ruff ==0.11.*"] tests = [ # Tools used for testing "docopt-ng", - "mypy ==1.13.*", + "mypy ==1.15.*", "pyright", # Typed libraries and stubs @@ -112,7 +112,7 @@ extra-standard-library = [ ] [tool.pyright] -exclude = ["build", ".git"] +exclude = ["build", ".git", ".venv*"] stubPath = "./stubs" pythonversion = "3.9" # Target oldest supported Python version typeCheckingMode = "standard" diff --git a/stubs/matplotlib/_mathtext.pyi b/stubs/matplotlib/_mathtext.pyi index 11fdbd59..8ff9651a 100644 --- a/stubs/matplotlib/_mathtext.pyi +++ b/stubs/matplotlib/_mathtext.pyi @@ -1,11 +1,19 @@ import enum import functools -from tkinter.tix import HList +import sys +from _typeshed import Incomplete from typing import Literal from .font_manager import FontProperties from .mathtext import MathtextBackend +# tkinter.tix was removed from Python 3.13 +# Recent matplotlib versions define HList in this module +if sys.version_info >= (3, 13): + HList: Incomplete +else: + from tkinter.tix import HList + def get_unicode_index(symbol: str, math: bool = True) -> int: ... class Fonts: diff --git a/stubs/skimage/_shared/setup.pyi b/stubs/skimage/_shared/setup.pyi deleted file mode 100644 index ae1561c5..00000000 --- a/stubs/skimage/_shared/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import os - -base_path = ... - -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/skimage/draw/setup.pyi b/stubs/skimage/draw/setup.pyi deleted file mode 100644 index ae1561c5..00000000 --- a/stubs/skimage/draw/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import os - -base_path = ... - -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/skimage/future/graph/setup.pyi b/stubs/skimage/future/graph/setup.pyi deleted file mode 100644 index d2a4c90d..00000000 --- a/stubs/skimage/future/graph/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import os.path - -base_path = ... - -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/skimage/future/setup.pyi b/stubs/skimage/future/setup.pyi deleted file mode 100644 index 6aec2280..00000000 --- a/stubs/skimage/future/setup.pyi +++ /dev/null @@ -1 +0,0 @@ -def configuration(parent_package="skimage", top_path=None): ... diff --git a/stubs/skimage/measure/setup.pyi b/stubs/skimage/measure/setup.pyi deleted file mode 100644 index ae1561c5..00000000 --- a/stubs/skimage/measure/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import os - -base_path = ... - -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/skimage/morphology/setup.pyi b/stubs/skimage/morphology/setup.pyi deleted file mode 100644 index ae1561c5..00000000 --- a/stubs/skimage/morphology/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import os - -base_path = ... - -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/skimage/setup.pyi b/stubs/skimage/setup.pyi deleted file mode 100644 index 9973bffa..00000000 --- a/stubs/skimage/setup.pyi +++ /dev/null @@ -1 +0,0 @@ -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/skimage/transform/setup.pyi b/stubs/skimage/transform/setup.pyi deleted file mode 100644 index ae1561c5..00000000 --- a/stubs/skimage/transform/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import os - -base_path = ... - -def configuration(parent_package="", top_path=None): ... diff --git a/stubs/sklearn/__check_build/setup.pyi b/stubs/sklearn/__check_build/setup.pyi deleted file mode 100644 index 44de5687..00000000 --- a/stubs/sklearn/__check_build/setup.pyi +++ /dev/null @@ -1,8 +0,0 @@ -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -# Author: Virgile Fritsch -# License: BSD 3 clause - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/_loss/setup.pyi b/stubs/sklearn/_loss/setup.pyi deleted file mode 100644 index 5e4f0fc9..00000000 --- a/stubs/sklearn/_loss/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -from .._build_utils import gen_from_templates - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/cluster/setup.pyi b/stubs/sklearn/cluster/setup.pyi deleted file mode 100644 index 669ef9b2..00000000 --- a/stubs/sklearn/cluster/setup.pyi +++ /dev/null @@ -1,9 +0,0 @@ -# Author: Alexandre Gramfort -# License: BSD 3 clause -import os - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/datasets/setup.pyi b/stubs/sklearn/datasets/setup.pyi deleted file mode 100644 index d04223c2..00000000 --- a/stubs/sklearn/datasets/setup.pyi +++ /dev/null @@ -1,8 +0,0 @@ -import os -import platform - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/decomposition/setup.pyi b/stubs/sklearn/decomposition/setup.pyi deleted file mode 100644 index 30795b9f..00000000 --- a/stubs/sklearn/decomposition/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -import os - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/ensemble/setup.pyi b/stubs/sklearn/ensemble/setup.pyi deleted file mode 100644 index f10f2e92..00000000 --- a/stubs/sklearn/ensemble/setup.pyi +++ /dev/null @@ -1,5 +0,0 @@ -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/feature_extraction/setup.pyi b/stubs/sklearn/feature_extraction/setup.pyi deleted file mode 100644 index ba0b204e..00000000 --- a/stubs/sklearn/feature_extraction/setup.pyi +++ /dev/null @@ -1,5 +0,0 @@ -import os - -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/inspection/setup.pyi b/stubs/sklearn/inspection/setup.pyi deleted file mode 100644 index 436f4022..00000000 --- a/stubs/sklearn/inspection/setup.pyi +++ /dev/null @@ -1,4 +0,0 @@ -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/linear_model/setup.pyi b/stubs/sklearn/linear_model/setup.pyi deleted file mode 100644 index d8c0a0b9..00000000 --- a/stubs/sklearn/linear_model/setup.pyi +++ /dev/null @@ -1,9 +0,0 @@ -import os - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -from .._build_utils import gen_from_templates - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/manifold/setup.pyi b/stubs/sklearn/manifold/setup.pyi deleted file mode 100644 index 30795b9f..00000000 --- a/stubs/sklearn/manifold/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -import os - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/metrics/cluster/setup.pyi b/stubs/sklearn/metrics/cluster/setup.pyi deleted file mode 100644 index 30795b9f..00000000 --- a/stubs/sklearn/metrics/cluster/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -import os - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/metrics/setup.pyi b/stubs/sklearn/metrics/setup.pyi deleted file mode 100644 index e0d3e53f..00000000 --- a/stubs/sklearn/metrics/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -import os - -import numpy as np -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/neighbors/setup.pyi b/stubs/sklearn/neighbors/setup.pyi deleted file mode 100644 index ba0b204e..00000000 --- a/stubs/sklearn/neighbors/setup.pyi +++ /dev/null @@ -1,5 +0,0 @@ -import os - -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/preprocessing/setup.pyi b/stubs/sklearn/preprocessing/setup.pyi deleted file mode 100644 index ba0b204e..00000000 --- a/stubs/sklearn/preprocessing/setup.pyi +++ /dev/null @@ -1,5 +0,0 @@ -import os - -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/setup.pyi b/stubs/sklearn/setup.pyi deleted file mode 100644 index 140bf54d..00000000 --- a/stubs/sklearn/setup.pyi +++ /dev/null @@ -1,9 +0,0 @@ -import os -import sys - -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -from ._build_utils import cythonize_extensions - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/svm/setup.pyi b/stubs/sklearn/svm/setup.pyi deleted file mode 100644 index e77d7e96..00000000 --- a/stubs/sklearn/svm/setup.pyi +++ /dev/null @@ -1,8 +0,0 @@ -import os -from os.path import join - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/tree/setup.pyi b/stubs/sklearn/tree/setup.pyi deleted file mode 100644 index 30795b9f..00000000 --- a/stubs/sklearn/tree/setup.pyi +++ /dev/null @@ -1,7 +0,0 @@ -import os - -import numpy -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/sklearn/utils/setup.pyi b/stubs/sklearn/utils/setup.pyi deleted file mode 100644 index a2112baa..00000000 --- a/stubs/sklearn/utils/setup.pyi +++ /dev/null @@ -1,9 +0,0 @@ -import os -from os.path import join - -from numpy.distutils.core import setup -from numpy.distutils.misc_util import Configuration - -from .._build_utils import gen_from_templates - -def configuration(parent_package: str = "", top_path=None): ... diff --git a/stubs/vispy/gloo/glir.pyi b/stubs/vispy/gloo/glir.pyi index 4833a2e8..9b5b36d4 100644 --- a/stubs/vispy/gloo/glir.pyi +++ b/stubs/vispy/gloo/glir.pyi @@ -1,21 +1,3 @@ -# ----------------------------------------------------------------------------- -# Copyright (c) Vispy Development Team. All Rights Reserved. -# Distributed under the (new) BSD License. See LICENSE.txt for more info. -# ----------------------------------------------------------------------------- - -import json -import os -import re -import sys -import weakref -from distutils.version import LooseVersion - -import numpy as np - -from ..util import logger -from . import gl - -# TODO: expose these via an extension space in .gl? _internalformats: list = ... _internalformats = ... diff --git a/stubs/vispy/util/check_environment.pyi b/stubs/vispy/util/check_environment.pyi index a91aa01c..7255293d 100644 --- a/stubs/vispy/util/check_environment.pyi +++ b/stubs/vispy/util/check_environment.pyi @@ -1,8 +1,3 @@ -# Copyright (c) Vispy Development Team. All Rights Reserved. -# Distributed under the (new) BSD License. See LICENSE.txt for more info. -import os -from distutils.version import LooseVersion - def has_matplotlib(version="1.2"): ... def has_skimage(version="0.11"): ... def has_backend(backend, has=..., capable=..., out=...): ... From 7d01245b271b345206b8530a890e7ffb63da3553 Mon Sep 17 00:00:00 2001 From: Avasam Date: Fri, 23 May 2025 23:45:11 -0400 Subject: [PATCH 2/2] Fix scipy-stubs issue --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d210a6a1..1b6a4234 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,7 +9,8 @@ jobs: strategy: matrix: # Oldest non-EOL and newest released - python-version: ["3.9", "3.13"] + # scipy-stubs does not support Python 3.9 + python-version: ["3.10", "3.13"] # Tier 1 OSes os: ["ubuntu-latest", "windows-latest", "macos-latest"] fail-fast: false