From bc0328f87c254c3047b342d879fee5607b827258 Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Sat, 25 Oct 2025 19:19:33 -0500 Subject: [PATCH 1/7] add py3.14 and drop py3.8 --- .github/workflows/ci.yml | 8 ++++---- .pre-commit-config.yaml | 2 +- .readthedocs.yml | 2 +- pyproject.toml | 23 +++++++++++++---------- setup.cfg | 2 +- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3209426e..853b0781 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,15 +33,15 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.12", "3.13"] + python-version: ["3.13","3.14"] runs-on: [ubuntu-latest, macos-latest, windows-latest] include: - - python-version: "3.8" + - python-version: "3.9" runs-on: ubuntu-latest - - python-version: "3.8" + - python-version: "3.9" runs-on: macos-13 - - python-version: "3.8" + - python-version: "3.9" runs-on: windows-latest steps: - uses: actions/checkout@v4 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0f9c30a4..78c7644d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: rev: v2.31.0 hooks: - id: pyupgrade - args: ["--py38-plus"] + args: ["--py39-plus"] - repo: https://github.com/pycqa/flake8 rev: 7.0.0 diff --git a/.readthedocs.yml b/.readthedocs.yml index 6ea8bfa9..e6fb9e94 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -13,7 +13,7 @@ sphinx: formats: all python: - version: 3.8 + version: 3.9 install: - method: pip path: . diff --git a/pyproject.toml b/pyproject.toml index 3618e9bb..5fd356fc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,25 +27,29 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Development Status :: 5 - Production/Stable", ] -requires-python = ">=3.8" +requires-python = ">=3.9" dependencies = [ "numpy >=1.13.3", "pydantic >=2", "rich", "packaging", - "setuptools;python_version<'3.9'" ] [project.optional-dependencies] test = [ "pytest >=4.6", "scipy", - "awkward >=2.2.2;python_version>'3.7'", - "awkward <2;python_version<='3.7'", - "dask-awkward >=2024.1.1;python_version>'3.7'", - "dask <2025.4.0;python_version>'3.7'", + "awkward >=2.2.2", + "dask-awkward >=2024.1.1", + "dask <2025.4.0", ] dev = [ "pytest >=4.6", @@ -53,7 +57,7 @@ dev = [ "mypy", "uhi", "awkward >=2", - "dask-awkward;python_version>'3.7'", + "dask-awkward", ] docs = [ "recommonmark >=0.5.0", @@ -92,11 +96,10 @@ BUILD_DEMO = "OFF" write_to = "src/correctionlib/version.py" [tool.cibuildwheel] -skip = ["pp*-*", "cp314*"] +skip = ["pp*-*"] test-extras = "test" test-command = "python -m pytest {package}/tests" -# When cpython 3.7 is dropped we can ignore i686 (numpy not built) -test-skip = ["*-musllinux_*", "cp3{10,11,12}-win32", "cp3{8,9,10,11,12}-manylinux_i686"] +test-skip = ["*-musllinux_*", "cp3{10,11,12,13,19}-win32"] [tool.cibuildwheel.environment] # this makes sure that we build only on platforms that have a corresponding numpy wheel diff --git a/setup.cfg b/setup.cfg index cf8a47e7..830b4e6d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,7 +32,7 @@ line_length = 88 [mypy] files = src -python_version = 3.8 +python_version = 3.9 [mypy-numpy] ignore_missing_imports = True From 8d2ac27546ac0b409aa4f1138e54d002d8213c77 Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Sat, 25 Oct 2025 19:24:19 -0500 Subject: [PATCH 2/7] typos --- .github/workflows/ci.yml | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 853b0781..47929b9e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.13","3.14"] + python-version: ["3.13", "3.14"] runs-on: [ubuntu-latest, macos-latest, windows-latest] include: diff --git a/pyproject.toml b/pyproject.toml index 5fd356fc..f58b0bcc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,7 +99,7 @@ write_to = "src/correctionlib/version.py" skip = ["pp*-*"] test-extras = "test" test-command = "python -m pytest {package}/tests" -test-skip = ["*-musllinux_*", "cp3{10,11,12,13,19}-win32"] +test-skip = ["*-musllinux_*", "cp3{10,11,12,13}-win32"] [tool.cibuildwheel.environment] # this makes sure that we build only on platforms that have a corresponding numpy wheel From 639de86e5b6e51f336e996cd604f081c3bf548f9 Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Mon, 27 Oct 2025 13:23:17 -0500 Subject: [PATCH 3/7] satisfy pre-commit --- docs/conf.py | 2 +- src/correctionlib/convert.py | 30 +++++-------- src/correctionlib/highlevel.py | 20 ++++----- src/correctionlib/schemav1.py | 20 ++++----- src/correctionlib/schemav2.py | 81 +++++++++++++++------------------- 5 files changed, 67 insertions(+), 86 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 26e48934..b9399839 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -50,4 +50,4 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path: List[str] = [] +html_static_path: list[str] = [] diff --git a/src/correctionlib/convert.py b/src/correctionlib/convert.py index ad18194e..b581c487 100644 --- a/src/correctionlib/convert.py +++ b/src/correctionlib/convert.py @@ -2,17 +2,7 @@ """ from numbers import Real -from typing import ( - TYPE_CHECKING, - Any, - Iterable, - List, - Optional, - Sequence, - Tuple, - Union, - cast, -) +from typing import TYPE_CHECKING, Any, Iterable, Optional, Sequence, Union, cast import numpy @@ -40,7 +30,7 @@ def from_uproot_THx( path: str, - axis_names: Optional[List[str]] = None, + axis_names: Optional[list[str]] = None, flow: Literal["clamp", "error"] = "error", ) -> Correction: """Convert a ROOT histogram @@ -62,7 +52,7 @@ def from_uproot_THx( def from_histogram( hist: "PlottableHistogram", - axis_names: Optional[List[str]] = None, + axis_names: Optional[list[str]] = None, flow: Optional[Union[Content, Literal["clamp", "error"]]] = "error", ) -> Correction: """Read any object with PlottableHistogram interface protocol @@ -93,14 +83,14 @@ def read_axis(axis: "PlottableAxis", pos: int) -> Variable: variables = [read_axis(ax, i) for i, ax in enumerate(hist.axes)] # Here we could try to optimize the ordering - def edges(axis: "PlottableAxis") -> List[float]: + def edges(axis: "PlottableAxis") -> list[float]: out = [] for i, b in enumerate(axis): if isinstance(b, (str, int)): raise ValueError( "cannot auto-convert string or integer category axes (yet)" ) - b = cast(Tuple[float, float], b) + b = cast(tuple[float, float], b) out.append(b[0]) if i == len(axis) - 1: out.append(b[1]) @@ -116,7 +106,7 @@ def flatten_to(values: "ndarray[Any, Any]", depth: int) -> Iterable[Any]: def build_data( values: "ndarray[Any, Any]", axes: Sequence["PlottableAxis"], - variables: List[Variable], + variables: list[Variable], ) -> Content: vartype = variables[0].type if vartype in {"string", "int"}: @@ -183,12 +173,12 @@ def build_data( def ndpolyfit( - points: List["ndarray[Any, Any]"], + points: list["ndarray[Any, Any]"], values: "ndarray[Any, Any]", weights: "ndarray[Any, Any]", - varnames: List[str], - degree: Tuple[int], -) -> Tuple[Correction, Any]: + varnames: list[str], + degree: tuple[int], +) -> tuple[Correction, Any]: """Fit an n-dimensional polynomial to data points with weight Example:: diff --git a/src/correctionlib/highlevel.py b/src/correctionlib/highlevel.py index 0e2c875f..7645cf73 100644 --- a/src/correctionlib/highlevel.py +++ b/src/correctionlib/highlevel.py @@ -3,7 +3,7 @@ """ import json from numbers import Integral -from typing import Any, Callable, Dict, Iterator, List, Mapping, Union +from typing import Any, Callable, Iterator, Mapping, Union import numpy from packaging import version @@ -186,10 +186,10 @@ def __init__(self, base: correctionlib._core.Correction, context: "CorrectionSet self._name = base.name self._context = context - def __getstate__(self) -> Dict[str, Any]: + def __getstate__(self) -> dict[str, Any]: return {"_context": self._context, "_name": self._name} - def __setstate__(self, state: Dict[str, Any]) -> None: + def __setstate__(self, state: dict[str, Any]) -> None: self._context = state["_context"] self._name = state["_name"] self._base = self._context[self._name]._base @@ -207,7 +207,7 @@ def version(self) -> int: return self._base.version @property - def inputs(self) -> List[correctionlib._core.Variable]: + def inputs(self) -> list[correctionlib._core.Variable]: return self._base.inputs @property @@ -268,10 +268,10 @@ def __init__( self._name = base.name self._context = context - def __getstate__(self) -> Dict[str, Any]: + def __getstate__(self) -> dict[str, Any]: return {"_context": self._context, "_name": self._name} - def __setstate__(self, state: Dict[str, Any]) -> None: + def __setstate__(self, state: dict[str, Any]) -> None: self._context = state["_context"] self._name = state["_name"] self._base = self._context.compound[self._name]._base @@ -285,7 +285,7 @@ def description(self) -> str: return self._base.description @property - def inputs(self) -> List[correctionlib._core.Variable]: + def inputs(self) -> list[correctionlib._core.Variable]: return self._base.inputs @property @@ -376,14 +376,14 @@ def from_file(cls, filename: str) -> "CorrectionSet": def from_string(cls, data: str) -> "CorrectionSet": return cls(data) - def __getstate__(self) -> Dict[str, Any]: + def __getstate__(self) -> dict[str, Any]: return {"_data": self._data} - def __setstate__(self, state: Dict[str, Any]) -> None: + def __setstate__(self, state: dict[str, Any]) -> None: self._data = state["_data"] self._base = correctionlib._core.CorrectionSet.from_string(self._data) - def _ipython_key_completions_(self) -> List[str]: + def _ipython_key_completions_(self) -> list[str]: return list(self.keys()) @property diff --git a/src/correctionlib/schemav1.py b/src/correctionlib/schemav1.py index a9e9388c..9ad80699 100644 --- a/src/correctionlib/schemav1.py +++ b/src/correctionlib/schemav1.py @@ -1,4 +1,4 @@ -from typing import List, Literal, Optional, Union +from typing import Literal, Optional, Union from pydantic import BaseModel, ConfigDict @@ -21,7 +21,7 @@ class Formula(Model): # TODO: nodetype: Literal["formula"] expression: str parser: Literal["TFormula", "numexpr"] - parameters: List[int] + parameters: list[int] "Index to Correction.inputs[]" @@ -31,29 +31,29 @@ class Formula(Model): class Binning(Model): nodetype: Literal["binning"] - edges: List[float] + edges: list[float] "Edges of the binning, where edges[i] <= x < edges[i+1] => f(x, ...) = content[i](...)" - content: List[Content] + content: list[Content] class MultiBinning(Model): """N-dimensional rectangular binning""" nodetype: Literal["multibinning"] - edges: List[List[float]] + edges: list[list[float]] """Bin edges for each input C-ordered array, e.g. content[d1*d2*d3*i0 + d2*d3*i1 + d3*i2 + i3] corresponds to the element at i0 in dimension 0, i1 in dimension 1, etc. and d0 = len(edges[0])-1, etc. """ - content: List[Content] + content: list[Content] class Category(Model): nodetype: Literal["category"] # TODO: should be Union[List[str], List[int]] - keys: List[Union[str, int]] - content: List[Content] + keys: list[Union[str, int]] + content: list[Content] Binning.update_forward_refs() @@ -68,7 +68,7 @@ class Correction(Model): "Detailed description of the correction" version: int "Version" - inputs: List[Variable] + inputs: list[Variable] output: Variable data: Content @@ -76,7 +76,7 @@ class Correction(Model): class CorrectionSet(Model): schema_version: Literal[1] "Schema version" - corrections: List[Correction] + corrections: list[Correction] if __name__ == "__main__": diff --git a/src/correctionlib/schemav2.py b/src/correctionlib/schemav2.py index 6dc4fe23..31c716c3 100644 --- a/src/correctionlib/schemav2.py +++ b/src/correctionlib/schemav2.py @@ -1,7 +1,6 @@ import math -import sys from collections import Counter -from typing import Dict, List, Optional, Set, Tuple, Union +from typing import Annotated, Literal, Optional, Union from pydantic import ( AfterValidator, @@ -20,14 +19,6 @@ import correctionlib.highlevel -if sys.version_info >= (3, 9): - from typing import Annotated, Literal -else: - from typing import Literal - - from typing_extensions import Annotated - - VERSION = 2 # See https://github.com/cms-nanoAOD/correctionlib/issues/255 @@ -40,7 +31,7 @@ class Model(BaseModel): class _SummaryInfo: def __init__(self) -> None: - self.values: Set[Union[str, int]] = set() + self.values: set[Union[str, int]] = set() self.default: bool = False self.overflow: bool = True self.transform: bool = False @@ -90,16 +81,16 @@ class Formula(Model): nodetype: Literal["formula"] expression: str parser: Literal["TFormula"] - variables: List[str] = Field( + variables: list[str] = Field( description="The names of the correction input variables this formula applies to" ) - parameters: Optional[List[float]] = Field( + parameters: Optional[list[float]] = Field( description="Parameters, if the parser supports them (e.g. [0] for TFormula)", default=None, ) def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["Formula"] += 1 for input in self.variables: @@ -114,12 +105,12 @@ class FormulaRef(Model): index: int = Field( description="Index into the Correction.generic_formulas list", ge=0 ) - parameters: List[float] = Field( + parameters: list[float] = Field( description="Same interpretation as Formula.parameters" ) def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["FormulaRef"] += 1 @@ -141,7 +132,7 @@ class Transform(Model): ) def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["Transform"] += 1 inputstats[self.input].transform = True @@ -157,7 +148,7 @@ class HashPRNG(Model): """ nodetype: Literal["hashprng"] - inputs: List[str] = Field( + inputs: list[str] = Field( description="The names of the input variables to use as entropy sources", min_length=1, ) @@ -166,7 +157,7 @@ class HashPRNG(Model): ) def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["HashPRNG"] += 1 @@ -197,7 +188,7 @@ def validate_edges(cls, high: float, info: ValidationInfo) -> float: Infinity = Literal["inf", "+inf", "-inf"] -Edges = List[Union[float, Infinity]] +Edges = list[Union[float, Infinity]] def validate_nonuniform_edges(edges: Edges) -> Edges: @@ -229,7 +220,7 @@ class Binning(Model): edges: Union[NonUniformBinning, UniformBinning] = Field( description="Edges of the binning, either as a list of monotonically increasing floats or as an instance of UniformBinning. edges[i] <= x < edges[i+1] => f(x, ...) = content[i](...)" ) - content: List[Content] + content: list[Content] flow: Union[Content, Literal["clamp", "error", "wrap"]] = Field( description="Overflow behavior for out-of-bounds values" ) @@ -237,8 +228,8 @@ class Binning(Model): @field_validator("content") @classmethod def validate_content( - cls, content: List[Content], info: ValidationInfo - ) -> List[Content]: + cls, content: list[Content], info: ValidationInfo + ) -> list[Content]: assert "edges" in info.data if isinstance(info.data["edges"], list): nbins = len(info.data["edges"]) - 1 @@ -251,7 +242,7 @@ def validate_content( return content def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["Binning"] += 1 inputstats[self.input].overflow &= self.flow != "error" @@ -272,14 +263,14 @@ class MultiBinning(Model): """N-dimensional rectangular binning""" nodetype: Literal["multibinning"] - inputs: List[str] = Field( + inputs: list[str] = Field( description="The names of the correction input variables this binning applies to", min_length=1, ) - edges: List[Union[NonUniformBinning, UniformBinning]] = Field( + edges: list[Union[NonUniformBinning, UniformBinning]] = Field( description="Bin edges for each input" ) - content: List[Content] = Field( + content: list[Content] = Field( description="""Bin contents as a flattened array This is a C-ordered array, i.e. content[d1*d2*d3*i0 + d2*d3*i1 + d3*i2 + i3] corresponds to the element at i0 in dimension 0, i1 in dimension 1, etc. and d0 = len(edges[0])-1, etc. @@ -292,8 +283,8 @@ class MultiBinning(Model): @field_validator("content") @classmethod def validate_content( - cls, content: List[Content], info: ValidationInfo - ) -> List[Content]: + cls, content: list[Content], info: ValidationInfo + ) -> list[Content]: assert "edges" in info.data nbins = 1 for dim in info.data["edges"]: @@ -308,7 +299,7 @@ def validate_content( return content def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["MultiBinning"] += 1 for input, edges in zip(self.inputs, self.edges): @@ -341,12 +332,12 @@ class Category(Model): input: str = Field( description="The name of the correction input variable this category node applies to" ) - content: List[CategoryItem] + content: list[CategoryItem] default: Optional[Content] = None @field_validator("content") @classmethod - def validate_content(cls, content: List[CategoryItem]) -> List[CategoryItem]: + def validate_content(cls, content: list[CategoryItem]) -> list[CategoryItem]: if len(content): keytype = type(content[0].key) if not all(isinstance(item.key, keytype) for item in content): @@ -360,7 +351,7 @@ def validate_content(cls, content: List[CategoryItem]) -> List[CategoryItem]: return content def summarize( - self, nodecount: Dict[str, int], inputstats: Dict[str, _SummaryInfo] + self, nodecount: dict[str, int], inputstats: dict[str, _SummaryInfo] ) -> None: nodecount["Category"] += 1 if self.input not in inputstats: @@ -393,11 +384,11 @@ class Correction(Model): version: int = Field( description="Some value that may increase over time due to bugfixes" ) - inputs: List[Variable] = Field( + inputs: list[Variable] = Field( description="The function signature of the correction" ) output: Variable = Field(description="Output type for this correction") - generic_formulas: Optional[List[Formula]] = Field( + generic_formulas: Optional[list[Formula]] = Field( description="""A list of common formulas that may be used For corrections with many parameterized formulas that follow a regular pattern, @@ -418,8 +409,8 @@ def validate_output(cls, output: Variable) -> Variable: ) return output - def summary(self) -> Tuple[Dict[str, int], Dict[str, _SummaryInfo]]: - nodecount: Dict[str, int] = Counter() + def summary(self) -> tuple[dict[str, int], dict[str, _SummaryInfo]]: + nodecount: dict[str, int] = Counter() inputstats = {var.name: _SummaryInfo() for var in self.inputs} if not isinstance(self.data, float): self.data.summarize(nodecount, inputstats) @@ -491,11 +482,11 @@ class CompoundCorrection(Model): description="Detailed description of the correction stack", default=None, ) - inputs: List[Variable] = Field( + inputs: list[Variable] = Field( description="The function signature of the correction" ) output: Variable = Field(description="Output type for this correction") - inputs_update: List[str] = Field( + inputs_update: list[str] = Field( description="Names of the input variables to update with the output of the previous correction" ) input_op: Literal["+", "*", "/"] = Field( @@ -504,7 +495,7 @@ class CompoundCorrection(Model): output_op: Literal["+", "*", "/", "last"] = Field( description="How to accumulate changes in the output variable" ) - stack: List[str] = Field( + stack: list[str] = Field( description="Names of the component corrections. Each component should have a subset of the inputs listed in this object." ) @@ -542,12 +533,12 @@ class CorrectionSet(Model): description="A nice description of what is in this CorrectionSet means", default=None, ) - corrections: List[Correction] - compound_corrections: Optional[List[CompoundCorrection]] = None + corrections: list[Correction] + compound_corrections: Optional[list[CompoundCorrection]] = None @field_validator("corrections") @classmethod - def validate_corrections(cls, items: List[Correction]) -> List[Correction]: + def validate_corrections(cls, items: list[Correction]) -> list[Correction]: seen = set() dupe = set() for item in items: @@ -563,8 +554,8 @@ def validate_corrections(cls, items: List[Correction]) -> List[Correction]: @field_validator("compound_corrections") @classmethod def validate_compound( - cls, items: Optional[List[CompoundCorrection]] - ) -> Optional[List[CompoundCorrection]]: + cls, items: Optional[list[CompoundCorrection]] + ) -> Optional[list[CompoundCorrection]]: if items is None: return items seen = set() From 0a3f145b895cdceab355c2ca2f33dca17d8ab2aa Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Mon, 27 Oct 2025 13:37:42 -0500 Subject: [PATCH 4/7] use the matrix for 3.9 --- .github/workflows/ci.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 47929b9e..9ada0072 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,16 +33,9 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.13", "3.14"] + python-version: ["3.9", "3.13", "3.14"] runs-on: [ubuntu-latest, macos-latest, windows-latest] - include: - - python-version: "3.9" - runs-on: ubuntu-latest - - python-version: "3.9" - runs-on: macos-13 - - python-version: "3.9" - runs-on: windows-latest steps: - uses: actions/checkout@v4 with: From 46ed58e0672cba0dfc53521d58907c5381c2b8fc Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Mon, 27 Oct 2025 13:42:19 -0500 Subject: [PATCH 5/7] run wheels ci on pyproject.toml modifications --- .github/workflows/wheels.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 1d5ef561..e694ea31 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -8,6 +8,7 @@ on: pull_request: paths: - ".github/workflows/wheels.yml" + - "pyproject.toml" jobs: make_sdist: From 62deba19b806130711558ee353838ee676ac196c Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Mon, 27 Oct 2025 14:38:36 -0500 Subject: [PATCH 6/7] no free-threaded wheels for now --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f58b0bcc..e84c809e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -96,7 +96,7 @@ BUILD_DEMO = "OFF" write_to = "src/correctionlib/version.py" [tool.cibuildwheel] -skip = ["pp*-*"] +skip = ["pp*-*", "cp313t-*", "cp314t-*"] test-extras = "test" test-command = "python -m pytest {package}/tests" test-skip = ["*-musllinux_*", "cp3{10,11,12,13}-win32"] From 706d3a2f773a6cb767fc132d070414f17300b58d Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Mon, 27 Oct 2025 15:33:24 -0500 Subject: [PATCH 7/7] remove py313 windows from test-skip --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e84c809e..35ac40dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,7 +99,7 @@ write_to = "src/correctionlib/version.py" skip = ["pp*-*", "cp313t-*", "cp314t-*"] test-extras = "test" test-command = "python -m pytest {package}/tests" -test-skip = ["*-musllinux_*", "cp3{10,11,12,13}-win32"] +test-skip = ["*-musllinux_*", "cp3{10,11,12}-win32"] [tool.cibuildwheel.environment] # this makes sure that we build only on platforms that have a corresponding numpy wheel