From 8bdd86aa70021636feaa471c0a1165dcfb1a2093 Mon Sep 17 00:00:00 2001
From: andyrids <52859097+andyrids@users.noreply.github.com>
Date: Sat, 26 Sep 2026 21:04:23 +0100
Subject: [PATCH 1/4] chore: update dependencies
---
CHANGELOG.md | 9 +++++++++
prek.toml | 4 +---
pyproject.toml | 24 ++++++++++++++++++++++--
uv.lock | 32 ++++++++++++++++----------------
4 files changed, 48 insertions(+), 21 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 24031b0..1a65165 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
> - `Fixed` for any bug fixes.
> - `Security` in case of vulnerabilities.
+## [Unreleased]
+
+### Changed
+
+- Package metadata improved for discoverability: a more descriptive summary, expanded
+ keywords (e.g. `radial-heatmap`, `time-series`, `visualization`) and the
+ `Topic :: Scientific/Engineering :: Visualization`,
+ `Topic :: Scientific/Engineering :: Information Analysis` and `Typing :: Typed` classifiers.
+
## [0.3.0] - 2026-09-26
### Breaking changes
diff --git a/prek.toml b/prek.toml
index dfe5160..b943aa0 100644
--- a/prek.toml
+++ b/prek.toml
@@ -2,7 +2,7 @@
[[repos]]
repo = "https://gitlab.com/andyrids/pkgdx"
-rev = "v0.3.0"
+rev = "v0.4.0"
[[repos.hooks]]
id = "pkgdx-lint"
@@ -27,8 +27,6 @@ repo = "local"
id = "pkgdx-typing"
name = "Typing [Mypy]"
entry = "uv run pkgdx-typing-hook"
-# workaround: pkgdx v0.3.0 ships this hook with no target (args = [])
-args = ["src"]
language = "system"
types_or = ["python", "pyi"]
exclude = "tests/"
diff --git a/pyproject.toml b/pyproject.toml
index 0d51a55..6937348 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "dataclocklib"
-description = "Dataclock charts using matplotlib."
+description = "Data clock charts (radial temporal heatmaps) for pandas time series, built on matplotlib."
authors = [{name = "Andrew Ridyard", email = "developer.surface832@passmail.com"}]
maintainers = [{name = "Andrew Ridyard", email = "developer.surface832@passmail.com"}]
dynamic = ["version"]
@@ -21,9 +21,29 @@ classifiers=[
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
+ "Topic :: Scientific/Engineering :: Information Analysis",
+ "Topic :: Scientific/Engineering :: Visualization",
"Topic :: Software Development :: Libraries :: Python Modules",
+ "Typing :: Typed",
+]
+keywords = [
+ "dataclock",
+ "data-clock",
+ "data clock",
+ "matplotlib",
+ "pandas",
+ "visualisation",
+ "visualization",
+ "temporal",
+ "time-series",
+ "timeseries",
+ "polar-chart",
+ "radial-heatmap",
+ "circular-heatmap",
+ "calendar-heatmap",
+ "seasonality",
+ "cyclical-patterns",
]
-keywords = ["matplotlib", "dataclock", "visualisation", "analysis"]
dependencies = [
"matplotlib>=3.10",
"pandas[parquet]>=3.0",
diff --git a/uv.lock b/uv.lock
index 8941ef5..74b3498 100644
--- a/uv.lock
+++ b/uv.lock
@@ -3,16 +3,16 @@ revision = 3
requires-python = ">=3.11"
resolution-markers = [
"python_full_version >= '3.15' and sys_platform == 'win32'",
- "python_full_version >= '3.15' and sys_platform == 'emscripten'",
- "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.15' and sys_platform == 'emscripten'",
"python_full_version == '3.14.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
- "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
- "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version < '3.12' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
"python_full_version < '3.12' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'",
]
@@ -591,10 +591,10 @@ version = "1.4.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
"python_full_version >= '3.15' and sys_platform == 'win32'",
- "python_full_version >= '3.15' and sys_platform == 'emscripten'",
- "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.15' and sys_platform == 'emscripten'",
"python_full_version == '3.14.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
@@ -1909,10 +1909,10 @@ version = "2.5.3"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
"python_full_version >= '3.15' and sys_platform == 'win32'",
- "python_full_version >= '3.15' and sys_platform == 'emscripten'",
- "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.15' and sys_platform == 'emscripten'",
"python_full_version == '3.14.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
@@ -2202,7 +2202,7 @@ wheels = [
[[package]]
name = "pkgdx"
-version = "0.3.0"
+version = "0.4.0"
source = { registry = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/simple" }
dependencies = [
{ name = "detect-secrets" },
@@ -2213,18 +2213,18 @@ dependencies = [
{ name = "ruff" },
{ name = "tomlkit" },
]
-sdist = { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/989b8fdea213febc14d3c3d3c9ffde6295f8375338dcea97beb8f23fbd04217e/pkgdx-0.3.0.tar.gz", hash = "sha256:989b8fdea213febc14d3c3d3c9ffde6295f8375338dcea97beb8f23fbd04217e" }
+sdist = { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/cfc88ee952bb778fa2bbb266aed25c6a681862b69b0d865b37212f95a5bad352/pkgdx-0.4.0.tar.gz", hash = "sha256:cfc88ee952bb778fa2bbb266aed25c6a681862b69b0d865b37212f95a5bad352" }
wheels = [
- { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/898dc0007897f476ae037922c08d5ac96213bacdc8a52c333f9f9b47982f6c24/pkgdx-0.3.0-py3-none-any.whl", hash = "sha256:898dc0007897f476ae037922c08d5ac96213bacdc8a52c333f9f9b47982f6c24" },
+ { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/61a78d6b0eb64d9aae6bac41633f51909800a210800e9c5c2908729b00853546/pkgdx-0.4.0-py3-none-any.whl", hash = "sha256:61a78d6b0eb64d9aae6bac41633f51909800a210800e9c5c2908729b00853546" },
]
[[package]]
name = "platformdirs"
-version = "4.11.13"
+version = "4.12.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/53/0e/7be2983c52622d6c0899300f760e31ba143355cedf1afcb3e65689d5ca85/platformdirs-4.11.13.tar.gz", hash = "sha256:6985eefdc2298693e4ce1fe124645524cb967428eb6384e0ce5b49767e7ea8ba", size = 40415, upload-time = "2026-09-25T04:44:25.484Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/23/4d/e78afe1b449720c481884ca0a2f960f85f9ffdaa34b2d127b5427422c564/platformdirs-4.12.0.tar.gz", hash = "sha256:095be5c143382b1bee917c4f3e9987a0d8d6a582261f1d061ad0c403b7695b5b", size = 58964, upload-time = "2026-09-26T15:26:00.937Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/29/a6/76a492f6a937e196641b3abd1588c504c71438e243daf1bebde4d3bb8ee9/platformdirs-4.11.13-py3-none-any.whl", hash = "sha256:228b2283af5c1f32673cdf55271216a52bbd8258cb31374e302ad7bd26cd7513", size = 25054, upload-time = "2026-09-25T04:44:23.975Z" },
+ { url = "https://files.pythonhosted.org/packages/60/3a/723ad221b7fef91ccd947f9fddbe84d38fa573e2723317aaa67bfde41015/platformdirs-4.12.0-py3-none-any.whl", hash = "sha256:f6fb2960f2f2eb0870f820f7e49e49e6c0f0589c637f34d33b260b07591327c9", size = 32965, upload-time = "2026-09-26T15:25:59.496Z" },
]
[[package]]
@@ -3161,10 +3161,10 @@ version = "9.1.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
"python_full_version >= '3.15' and sys_platform == 'win32'",
- "python_full_version >= '3.15' and sys_platform == 'emscripten'",
- "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform == 'win32'",
+ "python_full_version >= '3.15' and sys_platform == 'emscripten'",
"python_full_version == '3.14.*' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
From fbda23f68d8ab1253bf6c16c05789da943e4803a Mon Sep 17 00:00:00 2001
From: andyrids <52859097+andyrids@users.noreply.github.com>
Date: Sat, 26 Sep 2026 21:11:29 +0100
Subject: [PATCH 2/4] fix: add type to exclude_patterns in docs/source/conf.py
---
docs/source/conf.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 325737a..f05fa35 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -34,7 +34,7 @@
# List of patterns, relative to source directory, that match files and
# exclude_patterns; "_build", "Thumbs.db", ".DS_Store"
-exclude_patterns = []
+exclude_patterns: list[str] = []
# autodoc: types are rendered in the parameter descriptions, not the signature
autodoc_typehints = "description"
From 85f4467a405887dce31c35e439d53221a02366f2 Mon Sep 17 00:00:00 2001
From: andyrids <52859097+andyrids@users.noreply.github.com>
Date: Sat, 26 Sep 2026 21:36:59 +0100
Subject: [PATCH 3/4] feat: release 0.3.1 changes
---
CHANGELOG.md | 10 +++++++---
docs/source/_templates/layout.html | 14 ++++++++++++++
docs/source/conf.py | 4 +++-
3 files changed, 24 insertions(+), 4 deletions(-)
create mode 100644 docs/source/_templates/layout.html
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1a65165..4f0d3ab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,14 +16,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
> - `Fixed` for any bug fixes.
> - `Security` in case of vulnerabilities.
-## [Unreleased]
+## [0.3.1]
### Changed
- Package metadata improved for discoverability: a more descriptive summary, expanded
- keywords (e.g. `radial-heatmap`, `time-series`, `visualization`) and the
+ keywords (e.g. `radial-heatmap`, `time-series`, `visualization`) and the classifiers;
`Topic :: Scientific/Engineering :: Visualization`,
- `Topic :: Scientific/Engineering :: Information Analysis` and `Typing :: Typed` classifiers.
+ `Topic :: Scientific/Engineering :: Information Analysis` and `Typing :: Typed`.
+
+### Fixed
+
+- The documentation sidebar shows the package version again, below the project name.
## [0.3.0] - 2026-09-26
diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html
new file mode 100644
index 0000000..136ec29
--- /dev/null
+++ b/docs/source/_templates/layout.html
@@ -0,0 +1,14 @@
+{% extends "!layout.html" %}
+
+{% block sidebartitle %}
+ {%- set _logo_url = logo_url|default(pathto('_static/' + (logo or ""), 1)) %}
+ {%- set _root_doc = root_doc|default(master_doc) %}
+
+ {% if not theme_logo_only %}{{ project }}{% endif %}
+ {%- if logo or logo_url %}
+
+ {%- endif %}
+
+