From 0c87da6806e771e05535228cfcc0776f513580ee Mon Sep 17 00:00:00 2001 From: awaelchli Date: Sat, 6 Jul 2024 02:53:00 +0200 Subject: [PATCH 1/9] remove support for python 3.8 --- .github/checkgroup.yml | 48 +++++++++---------- .github/workflows/ci-pkg-install.yml | 2 +- .github/workflows/ci-tests-fabric.yml | 12 ++--- .github/workflows/ci-tests-pytorch.yml | 12 ++--- .github/workflows/release-pkg.yml | 2 +- docs/source-pytorch/versioning.rst | 12 +++++ src/lightning/__setup__.py | 4 +- src/lightning/fabric/utilities/imports.py | 1 - src/lightning/fabric/utilities/registry.py | 16 ++----- .../trainer/connectors/signal_connector.py | 24 ++-------- tests/tests_fabric/utilities/test_registry.py | 8 ++-- .../connectors/test_callback_connector.py | 7 +-- .../logging_/test_eval_loop_logging.py | 7 +-- 13 files changed, 67 insertions(+), 88 deletions(-) diff --git a/.github/checkgroup.yml b/.github/checkgroup.yml index 3774a56e2f480..75df5e2c0ee13 100644 --- a/.github/checkgroup.yml +++ b/.github/checkgroup.yml @@ -19,21 +19,21 @@ subprojects: - "!*.md" - "!**/*.md" checks: - - "pl-cpu (macOS-13, lightning, 3.8, 2.1, oldest)" + - "pl-cpu (macOS-13, lightning, 3.9, 2.1, oldest)" - "pl-cpu (macOS-14, lightning, 3.10, 2.1)" - "pl-cpu (macOS-14, lightning, 3.10, 2.2)" - "pl-cpu (macOS-14, lightning, 3.10, 2.3)" - - "pl-cpu (ubuntu-20.04, lightning, 3.8, 2.1, oldest)" + - "pl-cpu (ubuntu-20.04, lightning, 3.9, 2.1, oldest)" - "pl-cpu (ubuntu-20.04, lightning, 3.10, 2.1)" - "pl-cpu (ubuntu-20.04, lightning, 3.10, 2.2)" - "pl-cpu (ubuntu-20.04, lightning, 3.10, 2.3)" - - "pl-cpu (windows-2022, lightning, 3.8, 2.1, oldest)" + - "pl-cpu (windows-2022, lightning, 3.9, 2.1, oldest)" - "pl-cpu (windows-2022, lightning, 3.10, 2.1)" - "pl-cpu (windows-2022, lightning, 3.10, 2.2)" - "pl-cpu (windows-2022, lightning, 3.10, 2.3)" - - "pl-cpu (macOS-14, pytorch, 3.8, 2.1)" - - "pl-cpu (ubuntu-20.04, pytorch, 3.8, 2.1)" - - "pl-cpu (windows-2022, pytorch, 3.8, 2.1)" + - "pl-cpu (macOS-14, pytorch, 3.9, 2.1)" + - "pl-cpu (ubuntu-20.04, pytorch, 3.9, 2.1)" + - "pl-cpu (windows-2022, pytorch, 3.9, 2.1)" - "pl-cpu (macOS-12, pytorch, 3.11, 2.1)" - "pl-cpu (ubuntu-22.04, pytorch, 3.11, 2.1)" - "pl-cpu (windows-2022, pytorch, 3.11, 2.1)" @@ -163,21 +163,21 @@ subprojects: - "!*.md" - "!**/*.md" checks: - - "fabric-cpu (macOS-13, lightning, 3.8, 2.1, oldest)" + - "fabric-cpu (macOS-13, lightning, 3.9, 2.1, oldest)" - "fabric-cpu (macOS-14, lightning, 3.11, 2.1)" - "fabric-cpu (macOS-14, lightning, 3.11, 2.2)" - "fabric-cpu (macOS-14, lightning, 3.10, 2.3)" - - "fabric-cpu (ubuntu-20.04, lightning, 3.8, 2.1, oldest)" + - "fabric-cpu (ubuntu-20.04, lightning, 3.9, 2.1, oldest)" - "fabric-cpu (ubuntu-20.04, lightning, 3.11, 2.1)" - "fabric-cpu (ubuntu-20.04, lightning, 3.11, 2.2)" - "fabric-cpu (ubuntu-20.04, lightning, 3.11, 2.3)" - - "fabric-cpu (windows-2022, lightning, 3.8, 2.1, oldest)" + - "fabric-cpu (windows-2022, lightning, 3.9, 2.1, oldest)" - "fabric-cpu (windows-2022, lightning, 3.11, 2.1)" - "fabric-cpu (windows-2022, lightning, 3.11, 2.2)" - "fabric-cpu (windows-2022, lightning, 3.11, 2.3)" - - "fabric-cpu (macOS-14, fabric, 3.8, 2.1)" - - "fabric-cpu (ubuntu-20.04, fabric, 3.8, 2.1)" - - "fabric-cpu (windows-2022, fabric, 3.8, 2.1)" + - "fabric-cpu (macOS-14, fabric, 3.9, 2.1)" + - "fabric-cpu (ubuntu-20.04, fabric, 3.9, 2.1)" + - "fabric-cpu (windows-2022, fabric, 3.9, 2.1)" - "fabric-cpu (macOS-12, fabric, 3.11, 2.1)" - "fabric-cpu (ubuntu-22.04, fabric, 3.11, 2.1)" - "fabric-cpu (windows-2022, fabric, 3.11, 2.1)" @@ -244,27 +244,27 @@ subprojects: - "!*.md" - "!**/*.md" checks: - - "install-pkg (ubuntu-22.04, fabric, 3.8)" + - "install-pkg (ubuntu-22.04, fabric, 3.9)" - "install-pkg (ubuntu-22.04, fabric, 3.11)" - - "install-pkg (ubuntu-22.04, pytorch, 3.8)" + - "install-pkg (ubuntu-22.04, pytorch, 3.9)" - "install-pkg (ubuntu-22.04, pytorch, 3.11)" - - "install-pkg (ubuntu-22.04, lightning, 3.8)" + - "install-pkg (ubuntu-22.04, lightning, 3.9)" - "install-pkg (ubuntu-22.04, lightning, 3.11)" - - "install-pkg (ubuntu-22.04, notset, 3.8)" + - "install-pkg (ubuntu-22.04, notset, 3.9)" - "install-pkg (ubuntu-22.04, notset, 3.11)" - - "install-pkg (macOS-12, fabric, 3.8)" + - "install-pkg (macOS-12, fabric, 3.9)" - "install-pkg (macOS-12, fabric, 3.11)" - - "install-pkg (macOS-12, pytorch, 3.8)" + - "install-pkg (macOS-12, pytorch, 3.9)" - "install-pkg (macOS-12, pytorch, 3.11)" - - "install-pkg (macOS-12, lightning, 3.8)" + - "install-pkg (macOS-12, lightning, 3.9)" - "install-pkg (macOS-12, lightning, 3.11)" - - "install-pkg (macOS-12, notset, 3.8)" + - "install-pkg (macOS-12, notset, 3.9)" - "install-pkg (macOS-12, notset, 3.11)" - - "install-pkg (windows-2022, fabric, 3.8)" + - "install-pkg (windows-2022, fabric, 3.9)" - "install-pkg (windows-2022, fabric, 3.11)" - - "install-pkg (windows-2022, pytorch, 3.8)" + - "install-pkg (windows-2022, pytorch, 3.9)" - "install-pkg (windows-2022, pytorch, 3.11)" - - "install-pkg (windows-2022, lightning, 3.8)" + - "install-pkg (windows-2022, lightning, 3.9)" - "install-pkg (windows-2022, lightning, 3.11)" - - "install-pkg (windows-2022, notset, 3.8)" + - "install-pkg (windows-2022, notset, 3.9)" - "install-pkg (windows-2022, notset, 3.11)" diff --git a/.github/workflows/ci-pkg-install.yml b/.github/workflows/ci-pkg-install.yml index 6e82167410ec3..d22a8d3ace1e2 100644 --- a/.github/workflows/ci-pkg-install.yml +++ b/.github/workflows/ci-pkg-install.yml @@ -44,7 +44,7 @@ jobs: matrix: os: ["ubuntu-22.04", "macOS-12", "windows-2022"] pkg-name: ["fabric", "pytorch", "lightning", "notset"] - python-version: ["3.8", "3.11"] + python-version: ["3.9", "3.11"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/.github/workflows/ci-tests-fabric.yml b/.github/workflows/ci-tests-fabric.yml index 8d5ed3e9e7fa4..e961de773c939 100644 --- a/.github/workflows/ci-tests-fabric.yml +++ b/.github/workflows/ci-tests-fabric.yml @@ -58,25 +58,25 @@ jobs: - { os: "ubuntu-22.04", pkg-name: "fabric", python-version: "3.11", pytorch-version: "2.1" } - { os: "windows-2022", pkg-name: "fabric", python-version: "3.11", pytorch-version: "2.1" } # "oldest" versions tests, only on minimum Python - - { os: "macOS-13", pkg-name: "lightning", python-version: "3.8", pytorch-version: "2.1", requires: "oldest" } + - { os: "macOS-13", pkg-name: "lightning", python-version: "3.9", pytorch-version: "2.1", requires: "oldest" } - { os: "ubuntu-20.04", pkg-name: "lightning", - python-version: "3.8", + python-version: "3.9", pytorch-version: "2.1", requires: "oldest", } - { os: "windows-2022", pkg-name: "lightning", - python-version: "3.8", + python-version: "3.9", pytorch-version: "2.1", requires: "oldest", } # "fabric" installs the standalone package - - { os: "macOS-14", pkg-name: "fabric", python-version: "3.8", pytorch-version: "2.1" } - - { os: "ubuntu-20.04", pkg-name: "fabric", python-version: "3.8", pytorch-version: "2.1" } - - { os: "windows-2022", pkg-name: "fabric", python-version: "3.8", pytorch-version: "2.1" } + - { os: "macOS-14", pkg-name: "fabric", python-version: "3.9", pytorch-version: "2.1" } + - { os: "ubuntu-20.04", pkg-name: "fabric", python-version: "3.9", pytorch-version: "2.1" } + - { os: "windows-2022", pkg-name: "fabric", python-version: "3.9", pytorch-version: "2.1" } timeout-minutes: 25 # because of building grpcio on Mac env: PACKAGE_NAME: ${{ matrix.pkg-name }} diff --git a/.github/workflows/ci-tests-pytorch.yml b/.github/workflows/ci-tests-pytorch.yml index b75b6e73d987f..4a427a9b42d87 100644 --- a/.github/workflows/ci-tests-pytorch.yml +++ b/.github/workflows/ci-tests-pytorch.yml @@ -58,25 +58,25 @@ jobs: - { os: "ubuntu-22.04", pkg-name: "pytorch", python-version: "3.11", pytorch-version: "2.1" } - { os: "windows-2022", pkg-name: "pytorch", python-version: "3.11", pytorch-version: "2.1" } # "oldest" versions tests, only on minimum Python - - { os: "macOS-13", pkg-name: "lightning", python-version: "3.8", pytorch-version: "2.1", requires: "oldest" } + - { os: "macOS-13", pkg-name: "lightning", python-version: "3.9", pytorch-version: "2.1", requires: "oldest" } - { os: "ubuntu-20.04", pkg-name: "lightning", - python-version: "3.8", + python-version: "3.9", pytorch-version: "2.1", requires: "oldest", } - { os: "windows-2022", pkg-name: "lightning", - python-version: "3.8", + python-version: "3.9", pytorch-version: "2.1", requires: "oldest", } # "pytorch" installs the standalone package - - { os: "macOS-14", pkg-name: "pytorch", python-version: "3.8", pytorch-version: "2.1" } - - { os: "ubuntu-20.04", pkg-name: "pytorch", python-version: "3.8", pytorch-version: "2.1" } - - { os: "windows-2022", pkg-name: "pytorch", python-version: "3.8", pytorch-version: "2.1" } + - { os: "macOS-14", pkg-name: "pytorch", python-version: "3.9", pytorch-version: "2.1" } + - { os: "ubuntu-20.04", pkg-name: "pytorch", python-version: "3.9", pytorch-version: "2.1" } + - { os: "windows-2022", pkg-name: "pytorch", python-version: "3.9", pytorch-version: "2.1" } timeout-minutes: 50 env: PACKAGE_NAME: ${{ matrix.pkg-name }} diff --git a/.github/workflows/release-pkg.yml b/.github/workflows/release-pkg.yml index 968e27e773bfd..a11751c13790e 100644 --- a/.github/workflows/release-pkg.yml +++ b/.github/workflows/release-pkg.yml @@ -24,7 +24,7 @@ defaults: env: FREEZE_REQUIREMENTS: 1 TORCH_URL: "https://download.pytorch.org/whl/cpu/torch_stable.html" - PYTHON_VER: "3.8" + PYTHON_VER: "3.9" jobs: build-packages: diff --git a/docs/source-pytorch/versioning.rst b/docs/source-pytorch/versioning.rst index ebae1f920a5a6..d923b01c7edb3 100644 --- a/docs/source-pytorch/versioning.rst +++ b/docs/source-pytorch/versioning.rst @@ -79,6 +79,18 @@ The table below indicates the coverage of tested versions in our CI. Versions ou - ``torch`` - ``torchmetrics`` - Python + * - 2.4 + - 2.4 + - 2.4 + - ≥2.1, ≤2.4 + - ≥0.7.0 + - ≥3.9, ≤3.12 + * - 2.3 + - 2.3 + - 2.3 + - ≥2.0, ≤2.3 + - ≥0.7.0 + - ≥3.8, ≤3.11 * - 2.2 - 2.2 - 2.2 diff --git a/src/lightning/__setup__.py b/src/lightning/__setup__.py index 4bc4dff23be50..8d4f21435488e 100644 --- a/src/lightning/__setup__.py +++ b/src/lightning/__setup__.py @@ -93,8 +93,8 @@ def _setup_args() -> Dict[str, Any]: "long_description_content_type": "text/markdown", "include_package_data": True, "zip_safe": False, - "keywords": ["deep learning", "pytorch", "AI"], # todo: aggregate tags from all packages - "python_requires": ">=3.8", # todo: take the lowes based on all packages + "keywords": ["deep learning", "pytorch", "AI"], + "python_requires": ">=3.9", "entry_points": { "console_scripts": [ "fabric = lightning.fabric.cli:_main", diff --git a/src/lightning/fabric/utilities/imports.py b/src/lightning/fabric/utilities/imports.py index c8fa1ddf1e083..f180d40d2c4ba 100644 --- a/src/lightning/fabric/utilities/imports.py +++ b/src/lightning/fabric/utilities/imports.py @@ -30,7 +30,6 @@ _TORCH_GREATER_EQUAL_2_3 = compare_version("torch", operator.ge, "2.3.0") _TORCH_GREATER_EQUAL_2_4 = compare_version("torch", operator.ge, "2.4.0") -_PYTHON_GREATER_EQUAL_3_8_0 = (sys.version_info.major, sys.version_info.minor) >= (3, 8) _PYTHON_GREATER_EQUAL_3_10_0 = (sys.version_info.major, sys.version_info.minor) >= (3, 10) _UTILITIES_GREATER_EQUAL_0_10 = compare_version("lightning_utilities", operator.ge, "0.10.0") diff --git a/src/lightning/fabric/utilities/registry.py b/src/lightning/fabric/utilities/registry.py index a3b2ac442b46b..f8804f4745474 100644 --- a/src/lightning/fabric/utilities/registry.py +++ b/src/lightning/fabric/utilities/registry.py @@ -15,10 +15,11 @@ from inspect import getmembers, isclass from types import ModuleType from typing import Any, List, Type, Union +from importlib.metadata import entry_points from lightning_utilities import is_overridden -from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_8_0, _PYTHON_GREATER_EQUAL_3_10_0 +from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_10_0 _log = logging.getLogger(__name__) @@ -35,16 +36,9 @@ def _load_external_callbacks(group: str) -> List[Any]: A list of all callbacks collected from external factories. """ - if _PYTHON_GREATER_EQUAL_3_8_0: - from importlib.metadata import entry_points - - factories = ( - entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points().get(group, {}) # type: ignore[arg-type] - ) - else: - from pkg_resources import iter_entry_points - - factories = iter_entry_points(group) # type: ignore[assignment] + factories = ( + entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points().get(group, {}) # type: ignore[arg-type] + ) external_callbacks: List[Any] = [] for factory in factories: diff --git a/src/lightning/pytorch/trainer/connectors/signal_connector.py b/src/lightning/pytorch/trainer/connectors/signal_connector.py index ca9e3eb249474..05a975326005f 100644 --- a/src/lightning/pytorch/trainer/connectors/signal_connector.py +++ b/src/lightning/pytorch/trainer/connectors/signal_connector.py @@ -9,7 +9,7 @@ import lightning.pytorch as pl from lightning.fabric.plugins.environments import SLURMEnvironment -from lightning.fabric.utilities.imports import _IS_WINDOWS, _PYTHON_GREATER_EQUAL_3_8_0 +from lightning.fabric.utilities.imports import _IS_WINDOWS from lightning.pytorch.utilities.rank_zero import rank_prefixed_message, rank_zero_info # copied from signal.pyi @@ -133,26 +133,8 @@ def _get_current_signal_handlers() -> Dict[_SIGNUM, _HANDLER]: @staticmethod def _valid_signals() -> Set[signal.Signals]: - """Returns all valid signals supported on the current platform. - - Behaves identically to :func:`signals.valid_signals` in Python 3.8+ and implements the equivalent behavior for - older Python versions. - - """ - if _PYTHON_GREATER_EQUAL_3_8_0: - return signal.valid_signals() - if _IS_WINDOWS: - # supported signals on Windows: https://docs.python.org/3/library/signal.html#signal.signal - return { - signal.SIGABRT, - signal.SIGFPE, - signal.SIGILL, - signal.SIGINT, - signal.SIGSEGV, - signal.SIGTERM, - signal.SIGBREAK, - } - return set(signal.Signals) + """Returns all valid signals supported on the current platform.""" + return signal.valid_signals() @staticmethod def _has_already_handler(signum: _SIGNUM) -> bool: diff --git a/tests/tests_fabric/utilities/test_registry.py b/tests/tests_fabric/utilities/test_registry.py index 75e6e12f5abff..451b3f541f4a2 100644 --- a/tests/tests_fabric/utilities/test_registry.py +++ b/tests/tests_fabric/utilities/test_registry.py @@ -2,7 +2,7 @@ from unittest import mock from unittest.mock import Mock -from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_8_0, _PYTHON_GREATER_EQUAL_3_10_0 +from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_10_0 from lightning.fabric.utilities.registry import _load_external_callbacks @@ -54,11 +54,9 @@ def _make_entry_point_query_mock(callback_factory): if _PYTHON_GREATER_EQUAL_3_10_0: query_mock.return_value = [entry_point] import_path = "importlib.metadata.entry_points" - elif _PYTHON_GREATER_EQUAL_3_8_0: + else: query_mock().get.return_value = [entry_point] import_path = "importlib.metadata.entry_points" - else: - query_mock.return_value = [entry_point] - import_path = "pkg_resources.iter_entry_points" + with mock.patch(import_path, query_mock): yield diff --git a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py index 440400357101f..3ffdb703c3f42 100644 --- a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py +++ b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py @@ -18,7 +18,7 @@ import pytest import torch -from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_8_0, _PYTHON_GREATER_EQUAL_3_10_0 +from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_10_0 from lightning.pytorch import Callback, LightningModule, Trainer from lightning.pytorch.callbacks import ( EarlyStopping, @@ -300,12 +300,9 @@ def _make_entry_point_query_mock(callback_factory): if _PYTHON_GREATER_EQUAL_3_10_0: query_mock.return_value = [entry_point] import_path = "importlib.metadata.entry_points" - elif _PYTHON_GREATER_EQUAL_3_8_0: + else: query_mock().get.return_value = [entry_point] import_path = "importlib.metadata.entry_points" - else: - query_mock.return_value = [entry_point] - import_path = "pkg_resources.iter_entry_points" with mock.patch(import_path, query_mock): yield diff --git a/tests/tests_pytorch/trainer/logging_/test_eval_loop_logging.py b/tests/tests_pytorch/trainer/logging_/test_eval_loop_logging.py index f005a41e0d75c..b90d767a23caf 100644 --- a/tests/tests_pytorch/trainer/logging_/test_eval_loop_logging.py +++ b/tests/tests_pytorch/trainer/logging_/test_eval_loop_logging.py @@ -24,7 +24,6 @@ import numpy as np import pytest import torch -from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_8_0 from lightning.pytorch import Trainer, callbacks from lightning.pytorch.callbacks.progress.rich_progress import _RICH_AVAILABLE from lightning.pytorch.demos.boring_classes import BoringModel, RandomDataset @@ -557,8 +556,7 @@ def test_step(self, batch, batch_idx): ] def get_metrics_at_idx(idx): - mock_call = mock_log_metrics.mock_calls[idx] - return mock_call.kwargs["metrics"] if _PYTHON_GREATER_EQUAL_3_8_0 else mock_call[2]["metrics"] + return mock_log_metrics.mock_calls[idx].kwargs["metrics"] assert get_metrics_at_idx(2)["valid_loss_0_step"] == model.val_losses[2] assert get_metrics_at_idx(3)["valid_loss_0_step"] == model.val_losses[3] @@ -736,8 +734,7 @@ def test_dataloader(self): cb_metrics = set(trainer.callback_metrics) assert cb_metrics == {"foo/dataloader_idx_0", "foo/dataloader_idx_1", "foobar"} - mock_call = mock_log_metrics.mock_calls[0] - logged_metrics = mock_call.kwargs["metrics"] if _PYTHON_GREATER_EQUAL_3_8_0 else mock_call[2]["metrics"] + logged_metrics = mock_log_metrics.mock_calls[0].kwargs["metrics"] cb_metrics.add("epoch") assert set(logged_metrics) == cb_metrics From e227704e4f8620dd2c1349b8a0e95866a48a03d1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:39:19 +0000 Subject: [PATCH 2/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/lightning/fabric/utilities/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lightning/fabric/utilities/registry.py b/src/lightning/fabric/utilities/registry.py index f8804f4745474..9ad0f90221429 100644 --- a/src/lightning/fabric/utilities/registry.py +++ b/src/lightning/fabric/utilities/registry.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. import logging +from importlib.metadata import entry_points from inspect import getmembers, isclass from types import ModuleType from typing import Any, List, Type, Union -from importlib.metadata import entry_points from lightning_utilities import is_overridden From d8b5391b7636ff7f7405c009c06b03d317e67d81 Mon Sep 17 00:00:00 2001 From: awaelchli Date: Thu, 11 Jul 2024 19:39:35 +0200 Subject: [PATCH 3/9] chlog --- src/lightning/fabric/CHANGELOG.md | 2 +- src/lightning/pytorch/CHANGELOG.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lightning/fabric/CHANGELOG.md b/src/lightning/fabric/CHANGELOG.md index 985759830769d..993df019fc3bd 100644 --- a/src/lightning/fabric/CHANGELOG.md +++ b/src/lightning/fabric/CHANGELOG.md @@ -30,7 +30,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Removed support for PyTorch 2.1 ([#20009](https://github.com/Lightning-AI/lightning/pull/20009)) -- +- Removed support for Python 3.8 ([#20071](https://github.com/Lightning-AI/lightning/pull/20071)) ### Fixed diff --git a/src/lightning/pytorch/CHANGELOG.md b/src/lightning/pytorch/CHANGELOG.md index 4f8c32bcf8434..d9eea0b147dc2 100644 --- a/src/lightning/pytorch/CHANGELOG.md +++ b/src/lightning/pytorch/CHANGELOG.md @@ -30,7 +30,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Removed support for PyTorch 2.1 ([#20009](https://github.com/Lightning-AI/lightning/pull/20009)) -- +- Removed support for Python 3.8 ([#20071](https://github.com/Lightning-AI/lightning/pull/20071)) + ### Fixed From c33b508b8bc1dd0d127e60f4cf1ca7e6444585cc Mon Sep 17 00:00:00 2001 From: awaelchli Date: Thu, 11 Jul 2024 23:27:43 +0200 Subject: [PATCH 4/9] fix entry point --- src/lightning/fabric/utilities/registry.py | 4 +--- tests/tests_fabric/utilities/test_registry.py | 10 ++++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/lightning/fabric/utilities/registry.py b/src/lightning/fabric/utilities/registry.py index 9ad0f90221429..98a73b247557f 100644 --- a/src/lightning/fabric/utilities/registry.py +++ b/src/lightning/fabric/utilities/registry.py @@ -36,9 +36,7 @@ def _load_external_callbacks(group: str) -> List[Any]: A list of all callbacks collected from external factories. """ - factories = ( - entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points().get(group, {}) # type: ignore[arg-type] - ) + factories = entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points()[group] external_callbacks: List[Any] = [] for factory in factories: diff --git a/tests/tests_fabric/utilities/test_registry.py b/tests/tests_fabric/utilities/test_registry.py index 451b3f541f4a2..bb687d6330197 100644 --- a/tests/tests_fabric/utilities/test_registry.py +++ b/tests/tests_fabric/utilities/test_registry.py @@ -1,6 +1,6 @@ import contextlib from unittest import mock -from unittest.mock import Mock +from unittest.mock import Mock, MagicMock from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_10_0 from lightning.fabric.utilities.registry import _load_external_callbacks @@ -47,16 +47,14 @@ def factory_multiple_callbacks_list(): @contextlib.contextmanager def _make_entry_point_query_mock(callback_factory): - query_mock = Mock() + query_mock = MagicMock() entry_point = Mock() entry_point.name = "mocked" entry_point.load.return_value = callback_factory if _PYTHON_GREATER_EQUAL_3_10_0: query_mock.return_value = [entry_point] - import_path = "importlib.metadata.entry_points" else: - query_mock().get.return_value = [entry_point] - import_path = "importlib.metadata.entry_points" + query_mock().__getitem__.return_value = [entry_point] - with mock.patch(import_path, query_mock): + with mock.patch("lightning.fabric.utilities.registry.entry_points", query_mock): yield From 13034b40fb9ef54560feb3919b9d2ae74319892c Mon Sep 17 00:00:00 2001 From: awaelchli Date: Thu, 11 Jul 2024 23:29:44 +0200 Subject: [PATCH 5/9] fix entry point test --- .../trainer/connectors/test_callback_connector.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py index e5406fd921b34..c2b566111483b 100644 --- a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py +++ b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py @@ -14,7 +14,7 @@ import contextlib import logging from unittest import mock -from unittest.mock import Mock +from unittest.mock import Mock, MagicMock import pytest import torch @@ -293,17 +293,16 @@ def factory_multiple_callbacks_list(): @contextlib.contextmanager def _make_entry_point_query_mock(callback_factory): - query_mock = Mock() + query_mock = MagicMock() entry_point = Mock() entry_point.name = "mocked" entry_point.load.return_value = callback_factory if _PYTHON_GREATER_EQUAL_3_10_0: query_mock.return_value = [entry_point] - import_path = "importlib.metadata.entry_points" else: - query_mock().get.return_value = [entry_point] - import_path = "importlib.metadata.entry_points" - with mock.patch(import_path, query_mock): + query_mock().__getitem__.return_value = [entry_point] + + with mock.patch("lightning.fabric.utilities.registry.entry_points", query_mock): yield From 6fb2764d999a3759d05ba70cf9eac3fe4525a374 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 21:34:16 +0000 Subject: [PATCH 6/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/tests_fabric/utilities/test_registry.py | 2 +- .../tests_pytorch/trainer/connectors/test_callback_connector.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests_fabric/utilities/test_registry.py b/tests/tests_fabric/utilities/test_registry.py index bb687d6330197..3b4f42818b220 100644 --- a/tests/tests_fabric/utilities/test_registry.py +++ b/tests/tests_fabric/utilities/test_registry.py @@ -1,6 +1,6 @@ import contextlib from unittest import mock -from unittest.mock import Mock, MagicMock +from unittest.mock import MagicMock, Mock from lightning.fabric.utilities.imports import _PYTHON_GREATER_EQUAL_3_10_0 from lightning.fabric.utilities.registry import _load_external_callbacks diff --git a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py index c2b566111483b..d7109d0ec5bde 100644 --- a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py +++ b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py @@ -14,7 +14,7 @@ import contextlib import logging from unittest import mock -from unittest.mock import Mock, MagicMock +from unittest.mock import MagicMock, Mock import pytest import torch From 9dda6aa97ba17d8b79bc509f407826853835008a Mon Sep 17 00:00:00 2001 From: awaelchli Date: Thu, 11 Jul 2024 23:49:23 +0200 Subject: [PATCH 7/9] Fix --- src/lightning/fabric/utilities/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lightning/fabric/utilities/registry.py b/src/lightning/fabric/utilities/registry.py index 98a73b247557f..e7418f66ed9e1 100644 --- a/src/lightning/fabric/utilities/registry.py +++ b/src/lightning/fabric/utilities/registry.py @@ -36,7 +36,7 @@ def _load_external_callbacks(group: str) -> List[Any]: A list of all callbacks collected from external factories. """ - factories = entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points()[group] + factories = entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points().get(group, {}) external_callbacks: List[Any] = [] for factory in factories: From 24f758cf9a15205d2e2d4c1a2f4328806b70d554 Mon Sep 17 00:00:00 2001 From: awaelchli Date: Thu, 11 Jul 2024 23:59:25 +0200 Subject: [PATCH 8/9] fix --- tests/tests_fabric/utilities/test_registry.py | 2 +- .../tests_pytorch/trainer/connectors/test_callback_connector.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests_fabric/utilities/test_registry.py b/tests/tests_fabric/utilities/test_registry.py index 3b4f42818b220..a06e5c8e82615 100644 --- a/tests/tests_fabric/utilities/test_registry.py +++ b/tests/tests_fabric/utilities/test_registry.py @@ -54,7 +54,7 @@ def _make_entry_point_query_mock(callback_factory): if _PYTHON_GREATER_EQUAL_3_10_0: query_mock.return_value = [entry_point] else: - query_mock().__getitem__.return_value = [entry_point] + query_mock().get.return_value = [entry_point] with mock.patch("lightning.fabric.utilities.registry.entry_points", query_mock): yield diff --git a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py index d7109d0ec5bde..eb09413cafcce 100644 --- a/tests/tests_pytorch/trainer/connectors/test_callback_connector.py +++ b/tests/tests_pytorch/trainer/connectors/test_callback_connector.py @@ -300,7 +300,7 @@ def _make_entry_point_query_mock(callback_factory): if _PYTHON_GREATER_EQUAL_3_10_0: query_mock.return_value = [entry_point] else: - query_mock().__getitem__.return_value = [entry_point] + query_mock().get.return_value = [entry_point] with mock.patch("lightning.fabric.utilities.registry.entry_points", query_mock): yield From 3c4454f99986e85ea20d2a3ae6089397f1bb8344 Mon Sep 17 00:00:00 2001 From: awaelchli Date: Fri, 12 Jul 2024 00:05:54 +0200 Subject: [PATCH 9/9] mypy --- src/lightning/fabric/utilities/registry.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lightning/fabric/utilities/registry.py b/src/lightning/fabric/utilities/registry.py index e7418f66ed9e1..9ad0f90221429 100644 --- a/src/lightning/fabric/utilities/registry.py +++ b/src/lightning/fabric/utilities/registry.py @@ -36,7 +36,9 @@ def _load_external_callbacks(group: str) -> List[Any]: A list of all callbacks collected from external factories. """ - factories = entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points().get(group, {}) + factories = ( + entry_points(group=group) if _PYTHON_GREATER_EQUAL_3_10_0 else entry_points().get(group, {}) # type: ignore[arg-type] + ) external_callbacks: List[Any] = [] for factory in factories: