From 8db05779913e774a2f13112d2cc1dee7e4e5108a Mon Sep 17 00:00:00 2001 From: Marc-Antoine BERTIN <78208091+bertinma@users.noreply.github.com> Date: Thu, 19 Mar 2026 01:41:44 +0100 Subject: [PATCH] feat: Add Python 3.14 support (#95) - Relax requires-python upper bound from <3.14 to <3.15 - Add Python 3.14 classifier to pyproject.toml - Add Python 3.14 to CI test matrix (ubuntu-latest) - Fix SimilarityTransform.estimate() deprecation warning (scikit-image >=0.26) by switching to SimilarityTransform.from_estimate() class constructor All 147 tests pass on Python 3.14.3 with no warnings. Co-authored-by: marc-antoine --- .github/workflows/ci.yml | 2 ++ pyproject.toml | 3 ++- uniface/face_utils.py | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c6c2b9..7143d02 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,8 @@ jobs: python-version: "3.10" - os: ubuntu-latest python-version: "3.13" + - os: ubuntu-latest + python-version: "3.14" - os: macos-latest python-version: "3.13" - os: windows-latest diff --git a/pyproject.toml b/pyproject.toml index 26f0181..d4f2bff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ maintainers = [ { name = "Yakhyokhuja Valikhujaev", email = "yakhyo9696@gmail.com" }, ] -requires-python = ">=3.10,<3.14" +requires-python = ">=3.10,<3.15" keywords = [ "face-detection", "face-recognition", @@ -38,6 +38,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] dependencies = [ diff --git a/uniface/face_utils.py b/uniface/face_utils.py index be08775..f22babd 100644 --- a/uniface/face_utils.py +++ b/uniface/face_utils.py @@ -71,8 +71,7 @@ def estimate_norm( alignment[:, 0] += diff_x # Compute the transformation matrix - transform = SimilarityTransform() - transform.estimate(landmark, alignment) + transform = SimilarityTransform.from_estimate(landmark, alignment) matrix = transform.params[0:2, :] inverse_matrix = np.linalg.inv(transform.params)[0:2, :]