diff --git a/README.md b/README.md index 0b9b5f4aa3..08140e93fe 100644 --- a/README.md +++ b/README.md @@ -131,11 +131,11 @@ regression. Currently only the single variable IV estimators are polished. ### Running -- Python 3.9+ +- Python 3.10+ - NumPy (1.22+) - SciPy (1.8+) - pandas (1.4+) -- statsmodels (0.12+) +- statsmodels (0.13.1+) - formulaic (1.0.0+) - xarray (0.16+, optional) - Cython (3.0.10+, optional) diff --git a/ci/azure_template_posix.yml b/ci/azure_template_posix.yml index b77cc3600e..8b1b01d099 100644 --- a/ci/azure_template_posix.yml +++ b/ci/azure_template_posix.yml @@ -16,37 +16,25 @@ jobs: vmImage: ${{ parameters.vmImage }} strategy: matrix: - python39_minimums: - python.version: '3.9' + python310_minimums: + python.version: '3.10' NUMPY: 1.22.3 SCIPY: 1.8.0 PANDAS: 1.3.0 - STATSMODELS: 0.12.0 + STATSMODELS: 0.13.1 XARRAY: 0.21.0 - FORMULAIC: 0.6.5 + FORMULAIC: 1.0.2 test.install: true - python39_mid: - python.version: '3.9' + python310_mid: + python.version: '3.10' NUMPY: 1.23.0 SCIPY: 1.9.0 PANDAS: 1.4.0 - STATSMODELS: 0.13.0 + STATSMODELS: 0.13.1 XARRAY: 2022.6.0 XXHASH: true - FORMULAIC: 0.6.5 - test.install: true - python39_recent: - python.version: '3.9' - NUMPY: 1.24.0 - SCIPY: 1.10.0 - PANDAS: 1.5.0 - STATSMODELS: 0.13.0 - XARRAY: 2022.12.0 - FORMULAIC: 0.6.5 + FORMULAIC: 1.0.2 test.install: true - python310_no_cython: - python.version: '3.10' - LM_NO_BINARY: 1 python310_recent: python.version: '3.10' NUMPY: 1.24.0 @@ -54,11 +42,16 @@ jobs: PANDAS: 2.0.0 STATSMODELS: 0.14.0 XARRAY: 2023.4.0 + FORMULAIC: 1.1.0 + test.install: true python310_latest: python.version: '3.10' - FORMULAIC: 1.0.1 + FORMULAIC: 1.2.0 XXHASH: true PYARROW: true + python310_no_cython: + python.version: '3.10' + LM_NO_BINARY: 1 python311_latest: python.version: '3.11' XXHASH: true @@ -71,7 +64,7 @@ jobs: python.version: '3.13' XXHASH: true PYARROW: true - python312_copy_on_write: + python313_copy_on_write: python.version: '3.12' XXHASH: true LM_TEST_COPY_ON_WRITE: 1 diff --git a/ci/azure_template_windows.yml b/ci/azure_template_windows.yml index e802f1718d..23cc63dd73 100644 --- a/ci/azure_template_windows.yml +++ b/ci/azure_template_windows.yml @@ -16,8 +16,6 @@ jobs: vmImage: ${{ parameters.vmImage }} strategy: matrix: - python39_win_latest: - python.version: '3.9' python310_win_latest: python.version: '3.10' python311_win_latest: @@ -45,7 +43,7 @@ jobs: python -m pip install -r requirements-dev.txt jupyter kernelspec list displayName: 'Install complete dependencies' - condition: ne(variables['python.version'], '3.9') + condition: ne(variables['python.version'], '3.10') - script: | python -m pip list diff --git a/doc/source/changes.rst b/doc/source/changes.rst index b3ff375990..ada38ec10f 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -1,7 +1,7 @@ Change Log ========== -.. include:: changes/6.0.rst +.. include:: changes/7.0.rst ============= Past Releases @@ -10,6 +10,7 @@ Past Releases .. toctree:: :maxdepth: 1 + changes/6.0 changes/5.0 changes/4.0 changes/3.0-2.0-1.0 diff --git a/doc/source/changes/6.0.rst b/doc/source/changes/6.0.rst index 49410427d2..570f3d2239 100644 --- a/doc/source/changes/6.0.rst +++ b/doc/source/changes/6.0.rst @@ -4,7 +4,7 @@ Version 6.0 * Small doc fixes * Support Python 3.13 -Version 6.0 +Version 6.1 ----------- * Increased minimums: diff --git a/doc/source/changes/7.0.rst b/doc/source/changes/7.0.rst new file mode 100644 index 0000000000..01df6e2f71 --- /dev/null +++ b/doc/source/changes/7.0.rst @@ -0,0 +1,11 @@ +Version 7.0 +----------- + +* Increased minimums: + + - Python: 3.10 + - formulaic: 1.0.0 + - NumPy: 1.22.3 + - SciPy: 1.8.0 + - pandas: 1.4.0 + - statsmodels: 0.13.0 diff --git a/linearmodels/asset_pricing/model.py b/linearmodels/asset_pricing/model.py index 19a59b20cc..7a639af4ec 100644 --- a/linearmodels/asset_pricing/model.py +++ b/linearmodels/asset_pricing/model.py @@ -4,7 +4,8 @@ from __future__ import annotations -from typing import Any, Callable, cast +from collections.abc import Callable +from typing import Any, cast from formulaic import model_matrix from formulaic.materializers.types import NAAction diff --git a/linearmodels/iv/covariance.py b/linearmodels/iv/covariance.py index 96216c17a6..07b9d20ee0 100644 --- a/linearmodels/iv/covariance.py +++ b/linearmodels/iv/covariance.py @@ -4,7 +4,8 @@ from __future__ import annotations -from typing import Any, Callable, Union, cast +from collections.abc import Callable +from typing import Any, Union, cast from mypy_extensions import VarArg from numpy import ( diff --git a/linearmodels/iv/model.py b/linearmodels/iv/model.py index 692ad90c16..c1bc27bdec 100644 --- a/linearmodels/iv/model.py +++ b/linearmodels/iv/model.py @@ -4,7 +4,8 @@ from __future__ import annotations -from typing import Any, Callable, TypeVar, Union, cast +from collections.abc import Callable +from typing import Any, TypeVar, Union, cast import warnings from numpy import ( diff --git a/linearmodels/shared/utility.py b/linearmodels/shared/utility.py index be087042bc..d8375ef8d4 100644 --- a/linearmodels/shared/utility.py +++ b/linearmodels/shared/utility.py @@ -1,6 +1,7 @@ from __future__ import annotations from collections.abc import ( + Callable, ItemsView, Iterable, Iterator, @@ -10,7 +11,7 @@ Sequence, ValuesView, ) -from typing import Any, Callable, Protocol, TypeVar, cast +from typing import Any, Protocol, TypeVar, cast import numpy as np import pandas diff --git a/linearmodels/tests/iv/test_absorbing.py b/linearmodels/tests/iv/test_absorbing.py index eecc78e583..99814ee83a 100644 --- a/linearmodels/tests/iv/test_absorbing.py +++ b/linearmodels/tests/iv/test_absorbing.py @@ -2,7 +2,6 @@ from itertools import product import struct -from typing import Optional import numpy as np from numpy.testing import assert_allclose, assert_array_equal @@ -597,7 +596,7 @@ def test_instrments(): def assert_results_equal( - o_res: OLSResults, a_res: AbsorbingLSResults, k: Optional[int] = None + o_res: OLSResults, a_res: AbsorbingLSResults, k: int | None = None ) -> None: if k is None: k = a_res.params.shape[0] diff --git a/setup.cfg b/setup.cfg index 4e3f3a12e5..348a128811 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,3 +1,6 @@ +[project] +license = "NCSA" + [flake8] max-line-length = 99 ignore = E203,W503,BLK100 diff --git a/setup.py b/setup.py index 76ad98dac5..73672ccc29 100644 --- a/setup.py +++ b/setup.py @@ -112,11 +112,10 @@ def run_setup(binary: bool = True) -> None: "Intended Audience :: End Users/Desktop", "Intended Audience :: Financial and Insurance Industry", "Intended Audience :: Science/Research", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", - "License :: OSI Approved :: University of Illinois/NCSA Open Source License", + "Programming Language :: Python :: 3.13", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", @@ -124,7 +123,7 @@ def run_setup(binary: bool = True) -> None: "Topic :: Scientific/Engineering", ], ext_modules=extensions, - python_requires=">=3.9", + python_requires=">=3.10", distclass=BinaryDistribution, )