From c5d84b3ec5bcfc972afe7ada562072a5dc9e2094 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Sun, 11 Oct 2026 19:10:23 +0100 Subject: [PATCH 1/6] MAINT: Fix packaging metadata and align the dependency files Correct the metadata that is published to PyPI, and make pyproject.toml, requirements*.txt and meson.build agree for the 7.1 release. No minimum version rises, except that statsmodels 0.13.1 replaces 0.13.0. pyproject.toml - Fix the dev extra, which listed "pandas-stubsl". That name does not exist on PyPI, so "pip install linearmodels[dev]" failed. - Add Python 3.14 and 3.15 to the classifiers. requires-python is unchanged. - Require statsmodels>=0.13.1. 0.13.0 has no wheel for Python 3.10, and 0.13.1 is the version that the CI job for the minimum versions tests. - Add packaging to the dependencies. linearmodels.compat imports it at run time, and it only arrived through statsmodels. - Use pytest>=9,<10 in the test and dev extras, as requirements-test.txt already does, and set minversion to 9.0. pyproject.toml is installed with the package, so this also applies to linearmodels.test(), which now stops with an error that asks for pytest 9.0 when it is run with pytest 8. - Use --strict-markers in addopts, and drop the filterwarnings entry for the warning that --strict raised in pytest 8. In pytest 9, --strict is no longer an alias: it enables strict_config, strict_markers, strict_xfail and strict_parametrization_ids. Markers and xfail are still checked (xfail_strict is set), but unknown configuration options and duplicate parametrization ids no longer fail the tests. - Clean up the doc extra. setuptools_scm is >=9.2.0,<10 as in the build system. Remove oldest-supported-numpy, patsy, which linearmodels does not use, and the stale pandas~=2.3.3 pin. Remove the second entries for ipython, sphinx-immaterial and sphinx-autodoc-typehints. - Remove [tool.setuptools_scm]. It was copied from arch and named arch/_version.py. Nothing reads it: meson.build gets the version from linearmodels/_build/git_version.py, which calls setuptools_scm.get_version with explicit arguments, and that function does not read pyproject.toml. git_version.py returns the same version with and without the table. - Turn the mypy tables for linearmodels.conftest and linearmodels._version into [[tool.mypy.overrides]]. pyproject.toml ignores them as written, since they use INI syntax. Change the module of the override for the tests from "mypy-linearmodels.tests.", which is not a valid pattern, to "linearmodels.tests.*". mypy reports the same 65 errors in the same 10 files as before. Other files - requirements.txt: match pyproject.toml, with formulaic>=1.2.1 (not 1.0.2), statsmodels>=0.13.1 and packaging. Remove wrapt!=2.0.0rc3. It excluded a release candidate of wrapt, which formulaic depends on and linearmodels does not import, in a commit that gave no reason (5497ecedd3). wrapt 2.0.0rc4 and 2.0.0 have been released since. - meson.build, requirements-dev.txt, the dev extra: use the Cython minimum of the build system, 3.0.13, instead of 3.0.10. There is no Cython 3.0.13: 3.0.12 is followed by 3.1.0. In practice, this means Cython 3.1 or later. - requirements-dev.txt: use setuptools_scm>=9.2.0,<10, as the build system does (it had <9), and pytest>=9,<10. --- meson.build | 4 ++-- pyproject.toml | 45 ++++++++++++++++++++------------------------ requirements-dev.txt | 6 +++--- requirements.txt | 6 +++--- 4 files changed, 28 insertions(+), 33 deletions(-) diff --git a/meson.build b/meson.build index e671988bd8..ad4f74d176 100644 --- a/meson.build +++ b/meson.build @@ -11,8 +11,8 @@ cc = meson.get_compiler('c') cy = meson.get_compiler('cython') cython = find_program(cy.cmd_array()[0]) -if not cy.version().version_compare('>=3.0.10') - error('linearmodels requires Cython >= 3.0.10') +if not cy.version().version_compare('>=3.0.13') + error('linearmodels requires Cython >= 3.0.13') endif py = import('python').find_installation(pure: false) diff --git a/pyproject.toml b/pyproject.toml index f7b95e7f42..6cfceefcbd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,22 +2,23 @@ build-backend = 'mesonpy' requires = [ 'meson-python', - "cython>=3.0.13,<4", # Sync with CYTHON_MIN_VER in setup + "cython>=3.0.13,<4", # Sync with the Cython check in meson.build "numpy>=2.0.0,<3", "setuptools_scm>=9.2.0,<10", ] [project] name = "linearmodels" -# Keep syned with requirements.txt +# Keep in sync with requirements.txt dependencies = [ "numpy>=1.22.3,<3", "pandas>=1.4.0", "scipy>=1.8.0", - "statsmodels>=0.13.0", + "statsmodels>=0.13.1", # The first release with a wheel for Python 3.10 "mypy_extensions>=0.4", "pyhdfe>=0.1", "formulaic>=1.2.1", + "packaging", ] authors = [{ name = "Kevin Sheppard", email = "kevin.k.sheppard@gmail.com" }] classifiers = [ @@ -29,6 +30,8 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", @@ -37,6 +40,7 @@ classifiers = [ "Topic :: Scientific/Engineering", ] description = "Linear Panel, Instrumental Variable, Asset Pricing, and System Regression models for Python" +# The version is set in meson.build, which runs linearmodels/_build/git_version.py dynamic = [ 'version' ] @@ -66,7 +70,7 @@ requires-python = ">=3.10" [project.optional-dependencies] test = [ # test - "pytest>=8.4.1,<9", + "pytest>=9,<10", "pytest-randomly", "pytest-xdist", "pytest-cov", @@ -78,14 +82,12 @@ doc = [ # Documentation "setuptools>=61", "wheel", - "setuptools_scm[toml]>=8.0.3,<9", - "oldest-supported-numpy", - "cython>=3.0.13,<4", # Sync with CYTHON_MIN_VER in setup + "setuptools_scm[toml]>=9.2.0,<10", + "cython>=3.0.13,<4", # Sync with the Cython check in meson.build "numpy >=1.22", "scipy >=1.5.0", "ipython >=8.0.1", "matplotlib >=3.0", - "patsy >=0.5.3", "statsmodels >=0.13.5", "jinja2", "sphinx>=7", @@ -98,30 +100,25 @@ doc = [ "sphinx-autodoc-typehints", "fonttools>=4.43.0", # not directly required, pinned by Snyk to avoid a vulnerability "jupyterlab>=4.4.8", # not directly required, pinned by Snyk to avoid a vulnerability - "ipython>=7", - "sphinx_immaterial", "nbconvert", "pickleshare", - # Requirements for doc build, in addition to requirements.txt - "pandas~=2.3.3", "sphinxcontrib-spelling", - "sphinx_autodoc_typehints", ] dev = [ "xarray>=0.16", - "pandas-stubsl", + "pandas-stubs", "wheel", # versioning "setuptools_scm[toml]>=9.2.0,<10", "packaging", # Performance - "cython>=3.0.10", + "cython>=3.0.13,<4", "numba>=0.55", # Graphics "matplotlib>=3", "seaborn", # Tests - "pytest>=8.4.1,<9", + "pytest>=9,<10", "pytest-randomly", "pytest-xdist", "pytest-cov", @@ -149,9 +146,6 @@ changelog = "https://bashtage.github.io/linearmodels/changes.html" [tool.meson-python.args] setup = ['--vsenv'] -[tool.setuptools_scm] -version_file = "arch/_version.py" - [tool.black] target-version = ['py310', 'py311', 'py312', 'py313', 'py314'] exclude = ''' @@ -270,10 +264,10 @@ ignore = [ "linearmodels/iv/results.py" = ["PERF203", "PLC0415"] [tool.pytest.ini_options] -minversion = "8.4.1" +minversion = "9.0" testpaths = "linearmodels" xfail_strict = true -addopts = "--strict" +addopts = "--strict-markers" empty_parameter_set_mark = "xfail" filterwarnings = [ "ignore:`formatargspec`:DeprecationWarning:statsmodels", @@ -289,7 +283,6 @@ filterwarnings = [ "error:Support for multi-dimensional indexing:DeprecationWarning", "error:multivariate_ls is deprecated:FutureWarning", "error:invalid value encountered in true_divide:RuntimeWarning", - "ignore:The --strict option is deprecated, use --strict-markers instead:pytest.PytestDeprecationWarning", "ignore:`np.bool` is a deprecated alias:DeprecationWarning:pyhdfe", "ignore:defusedxml.cElementTree:DeprecationWarning:nbconvert", "ignore:the imp module is deprecated in favour of importlib:DeprecationWarning:pywintypes", @@ -389,17 +382,19 @@ disallow_untyped_defs=true disallow_incomplete_defs=true show_error_context=true -[mypy-linearmodels.conftest] +[[tool.mypy.overrides]] +module = "linearmodels.conftest" check_untyped_defs=false disallow_untyped_defs=false -[mypy-linearmodels._version] +[[tool.mypy.overrides]] +module = "linearmodels._version" check_untyped_defs=false disallow_untyped_defs=false disallow_incomplete_defs=false [[tool.mypy.overrides]] -module = "mypy-linearmodels.tests." +module = "linearmodels.tests.*" check_untyped_defs=false disallow_untyped_defs=false disallow_incomplete_defs=false diff --git a/requirements-dev.txt b/requirements-dev.txt index ef8620faba..f2d4e9267c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,15 +2,15 @@ meson-python>=0.18.0 meson ninja -setuptools_scm[toml]>=8.0.3,<9 +setuptools_scm[toml]>=9.2.0,<10 packaging wheel # Performance -cython>=3.0.10 +cython>=3.0.13,<4 # Testing -pytest>=8.4.1,<9 +pytest>=9,<10 pytest-xdist pytest-cov pytest-randomly diff --git a/requirements.txt b/requirements.txt index 01274e83b4..467e8d0ed7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ numpy>=1.22.3,<3 pandas>=1.4.0 scipy>=1.8.0 -statsmodels>=0.13.0 +statsmodels>=0.13.1 mypy_extensions>=0.4 pyhdfe>=0.1 -formulaic>=1.0.2 -wrapt!=2.0.0rc3 \ No newline at end of file +formulaic>=1.2.1 +packaging From 07e6d2310a13d1045ee81a3210c3dff2e5169fe2 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Sun, 11 Oct 2026 19:10:23 +0100 Subject: [PATCH 2/6] DOC: Update the README for 7.1 - List JIVE, the first-stage rank tests (Cragg-Donald and Kleibergen-Paap), the Hausman test and the Pesaran CD test in the feature list. Also list random effects, which was missing. - Say that 7.1 is the last release that supports Python 3.10 and NumPy < 2. - Make the requirements match pyproject.toml: NumPy 1.22.3, formulaic 1.2.1 (the README said 1.0.0), pyhdfe, mypy_extensions and packaging. Cython 3.0.13 (the README said 3.0.10) moves to a new list of the requirements to build from source, and the tests need pytest 9. - Rename "Installing" to "Installation". It said to run setup, which no longer exists. Describe the build with meson-python and the editable install used for development instead. - Say that GitHub Actions builds the documentation, not doctr. - Remove the sentence in "Plan and status" that said that the package should eventually add panel regression and that only the single variable IV estimators are polished. - Write pytest instead of py.test. --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 1092dca627..96686bdba8 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,13 @@ estimating asset prices: - **Panel models**: - Fixed effects (maximum two-way) + - Random effects - First difference regression - Between estimator for panel data - Pooled regression for panel data - Fama-MacBeth estimation of panel models + - Specification tests: the Hausman test of random effects against + fixed effects and the Pesaran CD test of cross-sectional dependence - **High-dimensional Regression**: - Absorbing Least Squares @@ -28,6 +31,9 @@ estimating asset prices: - Limited Information Maximum Likelihood - k-class Estimators - Generalized Method of Moments, also with continuously updating + - Jackknife IV (JIVE) + - Specification tests: the Cragg-Donald and Kleibergen-Paap rank tests + of the first stage (underidentification) - **Factor Asset Pricing Models**: - 2- and 3-step estimation @@ -89,7 +95,7 @@ mod = IV2SLS.from_formula('np.log(wage) ~ 1 + exper + exper ** 2 + [educ ~ mothe The expressions in the `[ ]` indicate endogenous regressors (before `~`) and the instruments. -## Installing +## Installation The latest release can be installed using pip @@ -97,7 +103,13 @@ The latest release can be installed using pip pip install linearmodels ``` -The main branch can be installed by cloning the repo and running setup +Binary wheels are available for Windows, macOS and Linux. Without a wheel, pip +builds linearmodels from source, which requires a C compiler. + +The main branch can be installed by cloning the repo and building it with pip. +The build uses [meson-python](https://mesonbuild.com/meson-python/), and pip +installs the other build requirements (Cython, NumPy and setuptools_scm) +automatically. ```bash git clone https://github.com/bashtage/linearmodels @@ -105,19 +117,24 @@ cd linearmodels pip install . ``` +To work on linearmodels, install the requirements and then build an editable +install + +```bash +python -m pip install -r requirements.txt -r requirements-dev.txt +python -m pip install -e . --no-build-isolation +``` + ## Documentation [Stable Documentation](https://bashtage.github.io/linearmodels/) is -built on every tagged version using -[doctr](https://github.com/drdoctr/doctr). +built by [GitHub Actions](https://github.com/bashtage/linearmodels/blob/main/.github/workflows/generate-documentation.yml) +when a release is published. [Development Documentation](https://bashtage.github.io/linearmodels/devel) -is automatically built on every successful build of main. +is built by the same workflow on every push to main. ## Plan and status -Should eventually add some useful linear model estimators such as panel -regression. Currently only the single variable IV estimators are polished. - - Linear Instrumental variable estimation - **complete** - Linear Panel model estimation - **complete** - Fama-MacBeth regression - **complete** @@ -128,21 +145,34 @@ regression. Currently only the single variable IV estimators are polished. ## Requirements +**linearmodels 7.1 is the last release that supports Python 3.10 and NumPy 1.x +(NumPy < 2).** Later releases will raise the minimum supported versions of +Python, NumPy and the other dependencies. + ### Running - Python 3.10+ -- NumPy (1.22+) +- NumPy (1.22.3+) - SciPy (1.8+) - pandas (1.4+) - statsmodels (0.13.1+) -- formulaic (1.0.0+) +- formulaic (1.2.1+) +- pyhdfe (0.1+) +- mypy_extensions (0.4+) +- packaging - xarray (0.16+, optional) -- Cython (3.0.10+, optional) +### Building from source + +- A C compiler +- Cython (3.0.13+) +- meson-python +- NumPy (2.0+) +- setuptools_scm (9.2+) ### Testing -- py.test +- pytest (9.0+) ### Documentation From b108478744b9839b271ec17463295d4663b84d82 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Sun, 11 Oct 2026 19:10:23 +0100 Subject: [PATCH 3/6] DOC: Add a security policy Add SECURITY.md: - Only the latest release (7.1.x) is supported. - Vulnerabilities are reported privately through GitHub private vulnerability reporting. If that cannot be used, they are reported by email to the maintainer, using the address in pyproject.toml. They are never reported in a public issue. - What a report should contain. - Responses are best effort, since linearmodels is a volunteer project. Private vulnerability reporting must be enabled in the repository settings (Settings, Code security) for the link to work. See #693, where a researcher asked for a private channel to report a vulnerability. --- SECURITY.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..f436157150 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,44 @@ +# Security Policy + +## Supported versions + +Only the latest release of linearmodels is supported. This is currently the +7.1.x series. Security fixes are not backported to earlier releases, so please +upgrade before reporting a problem that you found in an older release. + +## Reporting a vulnerability + +Please report suspected security vulnerabilities **privately**. Do not report +them in a public issue, pull request or discussion, since that tells everyone +about the problem before a fix is available. + +The preferred way to report a vulnerability is GitHub private vulnerability +reporting: + + + +If you cannot use GitHub, email the maintainer, Kevin Sheppard, at +, which is the address listed in `pyproject.toml`. +Use a subject line that makes clear that this is a security report, for example +"linearmodels security vulnerability". + +## What to include + +A report is easiest to act on if it contains: + +- A description of the vulnerability and its impact: what an attacker can do, + and what they need in order to do it. +- The affected function, class or module, and the version of linearmodels where + you found the problem. +- Steps to reproduce the problem, ideally as a short, self-contained script. +- The versions of Python, NumPy, SciPy, pandas and statsmodels, and your + operating system. +- A suggested fix or mitigation, if you have one. +- Whether the problem has been disclosed elsewhere, any disclosure deadline that + you plan to follow, and whether and how you would like to be credited. + +## What to expect + +linearmodels is a volunteer project, so responses are best effort. There is no +guaranteed response time or fix date. For a confirmed vulnerability, the +maintainer will work with you on a fix and on the timing of its disclosure. From 8973c2bb0b642c285012a7906f0d71c7b6798dd0 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Sun, 11 Oct 2026 19:10:24 +0100 Subject: [PATCH 4/6] MAINT: Add xarray to the test extra linearmodels.test() cannot collect 12 test modules (11 of the panel tests and iv/test_results.py) without xarray, since they import linearmodels/tests/panel/_utility.py, which imports it unconditionally. Installing the sdist in a clean environment with "pip install linearmodels[test]" and running linearmodels.test() ended with 12 collection errors, "No module named 'xarray'". CI does not show this because it installs requirements-test.txt, which includes xarray. Use xarray>=0.16, the minimum of the dev extra and the README. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 6cfceefcbd..3aa914dc95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,6 +75,7 @@ test = [ "pytest-xdist", "pytest-cov", "coverage[toml]", + "xarray>=0.16", # The tests import xarray "meson", "ninja", ] From a4ec042f17550d69ce6ca6dfdd6a42f782878bf0 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Sun, 11 Oct 2026 19:19:26 +0100 Subject: [PATCH 5/6] MAINT: Use the pytest strict option and name the real Cython minimum Two corrections to the previous packaging commits. pytest - Replace addopts = "--strict-markers" with strict = true. In pytest 9 (minversion is 9.0), strict enables strict_config, strict_markers, strict_xfail and strict_parametrization_ids. That is what --strict did with pytest 9, and the tests comply with it (656d1e752c made the parametrization ids unique), so this keeps the checks. An unknown configuration option, a duplicate parametrization id, an unregistered marker and an xfail test that passes are all errors again. --strict-markers only checked the markers. xfail_strict stays as it is. Cython - There is no Cython 3.0.13: 3.0.12 is followed by 3.1.0. A requirement of cython>=3.0.13 already meant Cython 3.1.0 or later, so name that minimum in [build-system], the doc and dev extras, requirements-dev.txt, the check in meson.build and its error message, and the README. Cython 3.0.12 is rejected by meson.build, and Cython 3.1.0 builds linearmodels (checked with numpy 2.0.0 and setuptools_scm 9.2.0 on Python 3.10). --- README.md | 2 +- meson.build | 4 ++-- pyproject.toml | 8 ++++---- requirements-dev.txt | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 96686bdba8..b1cca01d37 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ Python, NumPy and the other dependencies. ### Building from source - A C compiler -- Cython (3.0.13+) +- Cython (3.1.0+) - meson-python - NumPy (2.0+) - setuptools_scm (9.2+) diff --git a/meson.build b/meson.build index ad4f74d176..ead2e46b2e 100644 --- a/meson.build +++ b/meson.build @@ -11,8 +11,8 @@ cc = meson.get_compiler('c') cy = meson.get_compiler('cython') cython = find_program(cy.cmd_array()[0]) -if not cy.version().version_compare('>=3.0.13') - error('linearmodels requires Cython >= 3.0.13') +if not cy.version().version_compare('>=3.1.0') + error('linearmodels requires Cython >= 3.1.0') endif py = import('python').find_installation(pure: false) diff --git a/pyproject.toml b/pyproject.toml index 3aa914dc95..01a9715768 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ build-backend = 'mesonpy' requires = [ 'meson-python', - "cython>=3.0.13,<4", # Sync with the Cython check in meson.build + "cython>=3.1.0,<4", # Sync with the Cython check in meson.build "numpy>=2.0.0,<3", "setuptools_scm>=9.2.0,<10", ] @@ -84,7 +84,7 @@ doc = [ "setuptools>=61", "wheel", "setuptools_scm[toml]>=9.2.0,<10", - "cython>=3.0.13,<4", # Sync with the Cython check in meson.build + "cython>=3.1.0,<4", # Sync with the Cython check in meson.build "numpy >=1.22", "scipy >=1.5.0", "ipython >=8.0.1", @@ -113,7 +113,7 @@ dev = [ "setuptools_scm[toml]>=9.2.0,<10", "packaging", # Performance - "cython>=3.0.13,<4", + "cython>=3.1.0,<4", "numba>=0.55", # Graphics "matplotlib>=3", @@ -268,7 +268,7 @@ ignore = [ minversion = "9.0" testpaths = "linearmodels" xfail_strict = true -addopts = "--strict-markers" +strict = true empty_parameter_set_mark = "xfail" filterwarnings = [ "ignore:`formatargspec`:DeprecationWarning:statsmodels", diff --git a/requirements-dev.txt b/requirements-dev.txt index f2d4e9267c..99c6239505 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,7 +7,7 @@ packaging wheel # Performance -cython>=3.0.13,<4 +cython>=3.1.0,<4 # Testing pytest>=9,<10 From 3f82f71c1f62f3a69b14aa2939c05d21611cc30a Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Sun, 11 Oct 2026 20:38:25 +0100 Subject: [PATCH 6/6] MAINT: Require numpydoc 1.10 in the doc and dev requirements The numpydoc lint reads its configuration from [tool.numpydoc_validation]. Its exclude_files setting, which is used to skip files such as the tests, was added in numpydoc 1.10. Older releases do not support it (it is not in numpydoc 1.8 or 1.9), so the setting would have no effect with them. - doc extra: numpydoc>=1.10 (it was >=1.0.0). - dev extra: add numpydoc>=1.10. - requirements-dev.txt: numpydoc>=1.10 (it was not pinned). numpydoc 1.10 requires Python 3.10 or later, the minimum of linearmodels. "pip install --dry-run" resolves ".[doc]" and ".[dev]" to numpydoc 1.11.0 on Python 3.10 and 3.14. --- pyproject.toml | 3 ++- requirements-dev.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 01a9715768..fbab4e4a4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,7 +93,7 @@ doc = [ "jinja2", "sphinx>=7", "seaborn", - "numpydoc>=1.0.0", + "numpydoc>=1.10", "nbsphinx", "sphinx-immaterial", "jupyter", @@ -132,6 +132,7 @@ dev = [ "mypy>=1.3", "ruff>=0.16.0", "pyupgrade>=3.4.0", + "numpydoc>=1.10", # The exclude_files setting of numpydoc lint needs 1.10 "jupyterlab-code-formatter", "jupyterlab>=4.4.8", # not directly required, pinned by Snyk to avoid a vulnerability "zipp>=3.19.1", # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/requirements-dev.txt b/requirements-dev.txt index 99c6239505..4ce8fcfd88 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -35,7 +35,7 @@ jupyterlab-code-formatter nbconvert nbformat nbsphinx -numpydoc +numpydoc>=1.10 seaborn sphinx sphinx-immaterial