Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-svgpathtools for
openSUSE:Factory checked in at 2025-12-05 16:53:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-svgpathtools (Old)
and /work/SRC/openSUSE:Factory/.python-svgpathtools.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-svgpathtools"
Fri Dec 5 16:53:34 2025 rev:10 rq:1321070 version:1.7.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-svgpathtools/python-svgpathtools.changes
2025-06-10 09:10:31.284422460 +0200
+++
/work/SRC/openSUSE:Factory/.python-svgpathtools.new.1939/python-svgpathtools.changes
2025-12-05 16:54:34.035193860 +0100
@@ -1,0 +2,8 @@
+Thu Dec 4 06:52:18 UTC 2025 - Mia Herkt <[email protected]>
+
+- Update to 1.7.2
+ * Fix for arc transforms -- use eigh instead of eig
+ #gh/mathandy/svgpathtools#238
+ * Fixed wrong length of flat quadratic bezier
+
+-------------------------------------------------------------------
Old:
----
svgpathtools-1.7.1.tar.gz
New:
----
svgpathtools-1.7.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-svgpathtools.spec ++++++
--- /var/tmp/diff_new_pack.rBCHXQ/_old 2025-12-05 16:54:35.471253900 +0100
+++ /var/tmp/diff_new_pack.rBCHXQ/_new 2025-12-05 16:54:35.475254067 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-svgpathtools
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-svgpathtools
-Version: 1.7.1
+Version: 1.7.2
Release: 0
Summary: Tools for manipulating and analyzing SVG Path objects and
Bézier curves
License: MIT
++++++ svgpathtools-1.7.1.tar.gz -> svgpathtools-1.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/svgpathtools-1.7.1/PKG-INFO
new/svgpathtools-1.7.2/PKG-INFO
--- old/svgpathtools-1.7.1/PKG-INFO 2025-05-28 01:31:28.195323500 +0200
+++ new/svgpathtools-1.7.2/PKG-INFO 2025-11-30 20:14:48.031777600 +0100
@@ -1,9 +1,9 @@
Metadata-Version: 2.1
Name: svgpathtools
-Version: 1.7.1
+Version: 1.7.2
Summary: A collection of tools for manipulating and analyzing SVG Path objects
and Bezier curves.
Home-page: https://github.com/mathandy/svgpathtools
-Download-URL:
https://github.com/mathandy/svgpathtools/releases/download/1.7.1/svgpathtools-1.7.1-py3-none-any.whl
+Download-URL:
https://github.com/mathandy/svgpathtools/releases/download/1.7.2/svgpathtools-1.7.2-py3-none-any.whl
Author: Andy Port
Author-email: [email protected]
License: MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/svgpathtools-1.7.1/setup.py
new/svgpathtools-1.7.2/setup.py
--- old/svgpathtools-1.7.1/setup.py 2025-05-28 01:31:17.000000000 +0200
+++ new/svgpathtools-1.7.2/setup.py 2025-11-30 20:14:37.000000000 +0100
@@ -3,7 +3,7 @@
import os
-VERSION = '1.7.1'
+VERSION = '1.7.2'
AUTHOR_NAME = 'Andy Port'
AUTHOR_EMAIL = '[email protected]'
GITHUB = 'https://github.com/mathandy/svgpathtools'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/svgpathtools-1.7.1/svgpathtools/path.py
new/svgpathtools-1.7.2/svgpathtools/path.py
--- old/svgpathtools-1.7.1/svgpathtools/path.py 2025-05-28 01:31:17.000000000
+0200
+++ new/svgpathtools-1.7.2/svgpathtools/path.py 2025-11-30 20:14:37.000000000
+0100
@@ -327,7 +327,7 @@
invT = np.linalg.inv(tf[:2,:2])
D = reduce(np.matmul, [invT.T, Q, invT])
- eigvals, eigvecs = np.linalg.eig(D)
+ eigvals, eigvecs = np.linalg.eigh(0.5*(D+D.T)) # symmetrized in case
of floating point error; D already symmetric
rx = 1 / np.sqrt(eigvals[0])
ry = 1 / np.sqrt(eigvals[1])
@@ -957,10 +957,11 @@
dq1_mag = sqrt(c2 * t1 ** 2 + c1 * t1 + c0)
dq0_mag = sqrt(c2 * t0 ** 2 + c1 * t0 + c0)
- logarand = (sqrt(c2) * (t1 + beta) + dq1_mag) / \
- (sqrt(c2) * (t0 + beta) + dq0_mag)
+ rand_num = sqrt(c2) * (t1 + beta) + dq1_mag
+ rand_den = sqrt(c2) * (t0 + beta) + dq0_mag
+ logarand = log(rand_num / rand_den) if rand_den != 0 else 0
s = (t1 + beta) * dq1_mag - (t0 + beta) * dq0_mag + \
- gamma * sqrt(c2) * log(logarand)
+ gamma * sqrt(c2) * logarand
s /= 2
if isnan(s):
tstar = abs(b) / (2 * abs(a))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/svgpathtools-1.7.1/svgpathtools.egg-info/PKG-INFO
new/svgpathtools-1.7.2/svgpathtools.egg-info/PKG-INFO
--- old/svgpathtools-1.7.1/svgpathtools.egg-info/PKG-INFO 2025-05-28
01:31:28.000000000 +0200
+++ new/svgpathtools-1.7.2/svgpathtools.egg-info/PKG-INFO 2025-11-30
20:14:48.000000000 +0100
@@ -1,9 +1,9 @@
Metadata-Version: 2.1
Name: svgpathtools
-Version: 1.7.1
+Version: 1.7.2
Summary: A collection of tools for manipulating and analyzing SVG Path objects
and Bezier curves.
Home-page: https://github.com/mathandy/svgpathtools
-Download-URL:
https://github.com/mathandy/svgpathtools/releases/download/1.7.1/svgpathtools-1.7.1-py3-none-any.whl
+Download-URL:
https://github.com/mathandy/svgpathtools/releases/download/1.7.2/svgpathtools-1.7.2-py3-none-any.whl
Author: Andy Port
Author-email: [email protected]
License: MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/svgpathtools-1.7.1/test/test_path.py
new/svgpathtools-1.7.2/test/test_path.py
--- old/svgpathtools-1.7.1/test/test_path.py 2025-05-28 01:31:17.000000000
+0200
+++ new/svgpathtools-1.7.2/test/test_path.py 2025-11-30 20:14:37.000000000
+0100
@@ -15,7 +15,7 @@
bpoints2bezier, closest_point_in_path, farthest_point_in_path,
is_bezier_segment, is_bezier_path, parse_path
)
-from svgpathtools.path import bezier_radialrange
+from svgpathtools.path import bezier_radialrange, transform
# An important note for those doing any debugging:
# ------------------------------------------------
@@ -500,6 +500,11 @@
for t0, t1, exp_s in tests:
self.assertAlmostEqual(linq2.length(t0=t0, t1=t1), exp_s,
delta=TOL)
+ # flat quadratic bezier curve should be almost as long as a straight
line
+ flat_quad_bez = QuadraticBezier(start=46 + 125j, control=45.8 +
124.6j, end=45.7 + 124.4j)
+ line = Line(start=46 + 125j, end=45.7 + 124.4j)
+ self.assertAlmostEqual(flat_quad_bez.length(), line.length(),
delta=TOL)
+
def test_equality(self):
# This is to test the __eq__ and __ne__ methods, so we can't use
# assertEqual and assertNotEqual
@@ -724,6 +729,56 @@
# Error less than 0.1% typically less than 0.001%
self.assertAlmostEqual(d, 0.0, delta=2)
+ def test_transform(self):
+ TOL = 1e-6
+
+ # Returns a 3x3 homogeneous rotation matrix of `angle_deg` degrees
about the provided `center`
+ def R(angle_deg, center=(0, 0)):
+ radians = angle_deg * pi / 180
+ cos_a, sin_a = np.cos(radians), np.sin(radians)
+ x, y = center
+ print(angle_deg)
+
+ return np.array([
+ [cos_a, -sin_a, x - x * cos_a + y * sin_a],
+ [sin_a, cos_a, y - x * sin_a - y * cos_a],
+ [0, 0, 1]
+ ])
+
+ # Define some vertices derived from a rounded rect
+ # <rect x="116.40955" y="202.60011"
+ # width="32" height="10"
+ # rx="5" ry="5"
+ # transform="rotate(-8)" />
+ rect_top_left = 116.40955+207.60011j
+ rect_top_right = 148.40955+207.60011j
+ rect_bottom_left = 121.40955+202.60011j
+ rect_bottom_right = 143.40955+212.60011j
+ radius = 5+5j
+
+ # Test Arcs w/ endpoints from the rectangle
+ test_paths = [
+ Arc(start=rect_bottom_right, radius=radius, rotation=0.0,
large_arc=False, sweep=True, end=rect_top_right),
+ Arc(start=rect_top_right, radius=radius, rotation=0.0,
large_arc=False, sweep=True, end=rect_bottom_right),
+ Arc(start=rect_bottom_left, radius=radius, rotation=0.0,
large_arc=False, sweep=True, end=rect_top_left),
+ Arc(start=rect_top_left, radius=radius, rotation=0.0,
large_arc=False, sweep=True, end=rect_bottom_left)
+ ]
+
+ # Define several rotation matrices to transform these arcs (some with
explicit centers)
+ xforms = [R(-152.62813), R(-48.851395), R(-45.851395), R(-40.851395),
+ R(-40.5511), R(-36.5511), R(-30), R(-26.5511), R(-25.851395),
+ R(-25),R(-23.5511), R(-20), R(-18), R(-15), R(-14), R(-12),
+ R(-8), R(-6), R(-5.8513953), R(0), R(5), R(10), R(12),
+ R(15), R(16.31965), R(18), R(20), R(25),
+ R(53.961757), R(60.737255), R(61.722145)]
+ xforms.extend([R(-20,(256,175)), R(12,(216,185)), R(15,(216,185))])
+
+ # Test transform function; rotation matrices should not affect lengths
+ for path in test_paths:
+ for tf in xforms:
+ transformed = transform(path, tf)
+ self.assertAlmostEqual(transformed.length(), path.length(),
delta=TOL)
+
class TestPath(unittest.TestCase):