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):
 

Reply via email to