From e1461f8b4c05a96579086ca451e428dc7abd8b4c Mon Sep 17 00:00:00 2001 From: Michael Ekstrand Date: Fri, 10 Apr 2026 17:51:19 -0400 Subject: [PATCH 1/3] rename logging modules to be private --- src/lenskit/data/_container.py | 3 +-- src/lenskit/knn/item.py | 2 +- src/lenskit/logging/__init__.py | 10 ++++++---- src/lenskit/logging/{config.py => _config.py} | 4 ++-- src/lenskit/logging/{formats.py => _formats.py} | 0 src/lenskit/logging/{monitor.py => _monitor.py} | 0 .../logging/{processors.py => _processors.py} | 0 .../logging/{resource.py => _resource.py} | 0 .../logging/{stopwatch.py => _stopwatch.py} | 2 +- src/lenskit/logging/{tracing.py => _tracing.py} | 0 src/lenskit/logging/multiprocess/__init__.py | 8 ++++++++ src/lenskit/logging/multiprocess/_worker.py | 8 ++++---- src/lenskit/logging/tasks.py | 10 +++++----- src/lenskit/logging/worker.py | 16 ---------------- 14 files changed, 28 insertions(+), 35 deletions(-) rename src/lenskit/logging/{config.py => _config.py} (98%) rename src/lenskit/logging/{formats.py => _formats.py} (100%) rename src/lenskit/logging/{monitor.py => _monitor.py} (100%) rename src/lenskit/logging/{processors.py => _processors.py} (100%) rename src/lenskit/logging/{resource.py => _resource.py} (100%) rename src/lenskit/logging/{stopwatch.py => _stopwatch.py} (98%) rename src/lenskit/logging/{tracing.py => _tracing.py} (100%) delete mode 100644 src/lenskit/logging/worker.py diff --git a/src/lenskit/data/_container.py b/src/lenskit/data/_container.py index 87379156c..5c23dd0ce 100644 --- a/src/lenskit/data/_container.py +++ b/src/lenskit/data/_container.py @@ -17,8 +17,7 @@ from pyarrow.parquet import read_table, write_table from lenskit._accel import data as _data_accel -from lenskit.logging import get_logger -from lenskit.logging.stopwatch import Stopwatch +from lenskit.logging import Stopwatch, get_logger from .schema import DataSchema diff --git a/src/lenskit/knn/item.py b/src/lenskit/knn/item.py index b97b37e30..d87ca2caa 100644 --- a/src/lenskit/knn/item.py +++ b/src/lenskit/knn/item.py @@ -26,7 +26,7 @@ from lenskit.data.matrix import SparseRowArray from lenskit.diagnostics import DataWarning from lenskit.logging import Stopwatch, get_logger, item_progress, trace -from lenskit.logging.resource import cur_memory, max_memory +from lenskit.logging._resource import cur_memory, max_memory from lenskit.parallel import ensure_parallel_init from lenskit.pipeline import Component from lenskit.training import Trainable, TrainingOptions diff --git a/src/lenskit/logging/__init__.py b/src/lenskit/logging/__init__.py index a838109ae..ba393987b 100644 --- a/src/lenskit/logging/__init__.py +++ b/src/lenskit/logging/__init__.py @@ -8,14 +8,15 @@ Logging, progress, and resource records. """ +from ._config import LoggingConfig, basic_logging, notebook_logging from ._console import console, stdout_console +from ._formats import friendly_duration from ._proxy import get_logger -from .config import LoggingConfig, basic_logging, notebook_logging -from .formats import friendly_duration +from ._resource import ResourceMeasurement +from ._stopwatch import Stopwatch +from ._tracing import Tracer, get_tracer, trace from .progress import Progress, item_progress, set_progress_impl -from .stopwatch import Stopwatch from .tasks import Task -from .tracing import Tracer, get_tracer, trace __all__ = [ "LoggingConfig", @@ -25,6 +26,7 @@ "item_progress", "set_progress_impl", "Task", + "ResourceMeasurement", "get_logger", "get_tracer", "trace", diff --git a/src/lenskit/logging/config.py b/src/lenskit/logging/_config.py similarity index 98% rename from src/lenskit/logging/config.py rename to src/lenskit/logging/_config.py index 0eb2be8fe..db3f4d340 100644 --- a/src/lenskit/logging/config.py +++ b/src/lenskit/logging/_config.py @@ -23,8 +23,8 @@ from ._accel import update_log_level from ._console import ConsoleHandler, console, setup_console -from .processors import filter_exceptions, format_timestamp, log_warning, remove_internal -from .tracing import activate_tracing, lenskit_filtering_logger +from ._processors import filter_exceptions, format_timestamp, log_warning, remove_internal +from ._tracing import activate_tracing, lenskit_filtering_logger LVL_TRACE = 5 CORE_PROCESSORS = [ diff --git a/src/lenskit/logging/formats.py b/src/lenskit/logging/_formats.py similarity index 100% rename from src/lenskit/logging/formats.py rename to src/lenskit/logging/_formats.py diff --git a/src/lenskit/logging/monitor.py b/src/lenskit/logging/_monitor.py similarity index 100% rename from src/lenskit/logging/monitor.py rename to src/lenskit/logging/_monitor.py diff --git a/src/lenskit/logging/processors.py b/src/lenskit/logging/_processors.py similarity index 100% rename from src/lenskit/logging/processors.py rename to src/lenskit/logging/_processors.py diff --git a/src/lenskit/logging/resource.py b/src/lenskit/logging/_resource.py similarity index 100% rename from src/lenskit/logging/resource.py rename to src/lenskit/logging/_resource.py diff --git a/src/lenskit/logging/stopwatch.py b/src/lenskit/logging/_stopwatch.py similarity index 98% rename from src/lenskit/logging/stopwatch.py rename to src/lenskit/logging/_stopwatch.py index 43b8fc54e..5c155ff38 100644 --- a/src/lenskit/logging/stopwatch.py +++ b/src/lenskit/logging/_stopwatch.py @@ -13,7 +13,7 @@ import time from contextlib import contextmanager -from .formats import friendly_duration +from ._formats import friendly_duration class Stopwatch: diff --git a/src/lenskit/logging/tracing.py b/src/lenskit/logging/_tracing.py similarity index 100% rename from src/lenskit/logging/tracing.py rename to src/lenskit/logging/_tracing.py diff --git a/src/lenskit/logging/multiprocess/__init__.py b/src/lenskit/logging/multiprocess/__init__.py index 4403c83a2..2190059f0 100644 --- a/src/lenskit/logging/multiprocess/__init__.py +++ b/src/lenskit/logging/multiprocess/__init__.py @@ -4,6 +4,14 @@ # Licensed under the MIT license, see LICENSE.md for details. # SPDX-License-Identifier: MIT +""" +Multiprocess logging support for Ray integration. Most code doesn't need to +touch this. + +Stability: + Internal +""" + from ._monitor import Monitor, get_monitor from ._records import RecordSink from ._worker import WorkerContext, WorkerLogConfig, send_task diff --git a/src/lenskit/logging/multiprocess/_worker.py b/src/lenskit/logging/multiprocess/_worker.py index 00eca5f70..b0802f193 100644 --- a/src/lenskit/logging/multiprocess/_worker.py +++ b/src/lenskit/logging/multiprocess/_worker.py @@ -31,15 +31,15 @@ from lenskit.logging.progress._base import Progress +from .._config import CORE_PROCESSORS, active_logging_config, log_warning from .._limit import RateLimit +from .._processors import add_process_info from .._proxy import get_logger -from ..config import CORE_PROCESSORS, active_logging_config, log_warning -from ..processors import add_process_info +from .._tracing import lenskit_filtering_logger from ..progress import set_progress_impl # from ..progress._worker import ProgressMessage from ..tasks import Task -from ..tracing import lenskit_filtering_logger from ._protocol import ( LogChannel, MsgAuthenticator, @@ -76,7 +76,7 @@ def current(cls, *, from_monitor: bool = True): if _active_context is not None: return _active_context.config elif from_monitor: - from ..monitor import get_monitor + from .._monitor import get_monitor mon = get_monitor() if mon.log_address is None: diff --git a/src/lenskit/logging/tasks.py b/src/lenskit/logging/tasks.py index 5ac45c090..79bafe814 100644 --- a/src/lenskit/logging/tasks.py +++ b/src/lenskit/logging/tasks.py @@ -23,9 +23,9 @@ from pydantic import AliasChoices, BaseModel, BeforeValidator, Field, SerializeAsAny from typing_extensions import Literal +from ._formats import friendly_duration from ._proxy import get_logger -from .formats import friendly_duration -from .resource import ResourceMeasurement, reset_linux_hwm +from ._resource import ResourceMeasurement, reset_linux_hwm _log = get_logger(__name__) _active_tasks: list[Task] = [] @@ -254,7 +254,7 @@ def save_to_file(self, path: PathLike[str], monitor: bool = True): and self._refresh_id is None and self._final_meter is None ): - from lenskit.logging.monitor import get_monitor + from lenskit.logging._monitor import get_monitor mon = get_monitor() self._refresh_id = mon.add_refreshable(self) @@ -285,7 +285,7 @@ def start(self): _active_tasks.append(self) if self._save_file: - from lenskit.logging.monitor import get_monitor + from lenskit.logging._monitor import get_monitor mon = get_monitor() self._refresh_id = mon.add_refreshable(self) @@ -303,7 +303,7 @@ def finish(self, status: TaskStatus = TaskStatus.FINISHED): with self._lock: if self._refresh_id is not None: - from lenskit.logging.monitor import get_monitor + from lenskit.logging._monitor import get_monitor mon = get_monitor() mon.remove_refreshable(self._refresh_id) diff --git a/src/lenskit/logging/worker.py b/src/lenskit/logging/worker.py deleted file mode 100644 index aac040f6f..000000000 --- a/src/lenskit/logging/worker.py +++ /dev/null @@ -1,16 +0,0 @@ -# This file is part of LensKit. -# Copyright (C) 2018-2023 Boise State University. -# Copyright (C) 2023-2026 Drexel University. -# Licensed under the MIT license, see LICENSE.md for details. -# SPDX-License-Identifier: MIT - -""" -Old home of the LensKit logging worker logic. - -.. deprecated:: 2025.3 - This module is deprecated. Import from :mod:`lenskit.logging.multiprocess`. -""" - -from .multiprocess import WorkerContext, WorkerLogConfig, send_task - -__all__ = ["WorkerContext", "WorkerLogConfig", "send_task"] From a68ff6f9a64436a46b6ffd0a1b5bb637a78b75ef Mon Sep 17 00:00:00 2001 From: Michael Ekstrand Date: Fri, 10 Apr 2026 17:53:35 -0400 Subject: [PATCH 2/3] remove deprecated util module --- src/lenskit/util.py | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 src/lenskit/util.py diff --git a/src/lenskit/util.py b/src/lenskit/util.py deleted file mode 100644 index 6aed5d9f9..000000000 --- a/src/lenskit/util.py +++ /dev/null @@ -1,19 +0,0 @@ -# This file is part of LensKit. -# Copyright (C) 2018-2023 Boise State University. -# Copyright (C) 2023-2026 Drexel University. -# Licensed under the MIT license, see LICENSE.md for details. -# SPDX-License-Identifier: MIT - -import warnings - -from lenskit.logging import Stopwatch -from lenskit.random import derivable_rng, random_generator, set_global_rng - -warnings.warn("lenskit.util is deprecated, import from original modules", DeprecationWarning) - -__all__ = [ - "Stopwatch", - "derivable_rng", - "random_generator", - "set_global_rng", -] From ea719392614dad51ebd4089b38982bd9562288fc Mon Sep 17 00:00:00 2001 From: Michael Ekstrand Date: Fri, 10 Apr 2026 18:08:07 -0400 Subject: [PATCH 3/3] remove stray imports from .worker --- src/lenskit/parallel/ray.py | 2 +- src/lenskit/tuning/_iterative.py | 2 +- src/lenskit/tuning/_simple.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lenskit/parallel/ray.py b/src/lenskit/parallel/ray.py index 129027498..96d21cf95 100644 --- a/src/lenskit/parallel/ray.py +++ b/src/lenskit/parallel/ray.py @@ -20,7 +20,7 @@ import torch from lenskit.logging import get_logger -from lenskit.logging.worker import WorkerContext, WorkerLogConfig +from lenskit.logging.multiprocess import WorkerContext, WorkerLogConfig from .config import ( effective_cpu_count, diff --git a/src/lenskit/tuning/_iterative.py b/src/lenskit/tuning/_iterative.py index 7b313dcb5..e0181717b 100644 --- a/src/lenskit/tuning/_iterative.py +++ b/src/lenskit/tuning/_iterative.py @@ -21,7 +21,7 @@ from lenskit.batch import BatchPipelineRunner from lenskit.logging import Task, get_logger -from lenskit.logging.worker import send_task +from lenskit.logging.multiprocess import send_task from lenskit.pipeline import Component, Pipeline, PipelineBuilder from lenskit.pipeline.components import Placeholder from lenskit.pipeline.nodes import ComponentConstructorNode, ComponentInstanceNode diff --git a/src/lenskit/tuning/_simple.py b/src/lenskit/tuning/_simple.py index 33d55cbfe..4de49c6d2 100644 --- a/src/lenskit/tuning/_simple.py +++ b/src/lenskit/tuning/_simple.py @@ -13,7 +13,7 @@ from pydantic_core import to_json from lenskit.logging import Task, get_logger -from lenskit.logging.worker import send_task +from lenskit.logging.multiprocess import send_task from lenskit.pipeline import Pipeline from lenskit.random import make_seed from lenskit.training import TrainingOptions