Merge branch 'master' into fastfail-intersection
commit
31b6f3dd90
|
@ -0,0 +1,34 @@
|
||||||
|
name: Github CI Unit Testing for Legacy Environments
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
continue-on-error: true
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-18.04, macos-10.15, windows-2019]
|
||||||
|
python-version: [2.7, 3.5, 3.6]
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# configure python
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
# install deps
|
||||||
|
- name: Install dependencies for ${{ matrix.os }} Python ${{ matrix.python-version }}
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt
|
||||||
|
pip install scipy
|
||||||
|
|
||||||
|
# find and run all unit tests
|
||||||
|
- name: Run unit tests
|
||||||
|
run: python -m unittest discover test
|
|
@ -12,7 +12,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, "3.10"]
|
python-version: [3.7, 3.8, 3.9, "3.10", "3.11"]
|
||||||
steps:
|
steps:
|
||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
|
@ -8,7 +8,7 @@ Note: The relevant matrix transformation for quadratics can be found in the
|
||||||
svgpathtools.bezier module."""
|
svgpathtools.bezier module."""
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from svgpathtools import *
|
from svgpathtools import bezier_point, Path, bpoints2bezier, polynomial2bezier
|
||||||
|
|
||||||
|
|
||||||
class HigherOrderBezier:
|
class HigherOrderBezier:
|
||||||
|
|
|
@ -7,7 +7,8 @@ Path.continuous_subpaths() method to split a paths into a list of its
|
||||||
continuous subpaths.
|
continuous subpaths.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from svgpathtools import *
|
from svgpathtools import Path, Line
|
||||||
|
|
||||||
|
|
||||||
def path1_is_contained_in_path2(path1, path2):
|
def path1_is_contained_in_path2(path1, path2):
|
||||||
assert path2.isclosed() # This question isn't well-defined otherwise
|
assert path2.isclosed() # This question isn't well-defined otherwise
|
||||||
|
@ -16,11 +17,11 @@ def path1_is_contained_in_path2(path1, path2):
|
||||||
|
|
||||||
# find a point that's definitely outside path2
|
# find a point that's definitely outside path2
|
||||||
xmin, xmax, ymin, ymax = path2.bbox()
|
xmin, xmax, ymin, ymax = path2.bbox()
|
||||||
B = (xmin + 1) + 1j*(ymax + 1)
|
b = (xmin + 1) + 1j*(ymax + 1)
|
||||||
|
|
||||||
A = path1.start # pick an arbitrary point in path1
|
a = path1.start # pick an arbitrary point in path1
|
||||||
AB_line = Path(Line(A, B))
|
ab_line = Path(Line(a, b))
|
||||||
number_of_intersections = len(AB_line.intersect(path2))
|
number_of_intersections = len(ab_line.intersect(path2))
|
||||||
if number_of_intersections % 2: # if number of intersections is odd
|
if number_of_intersections % 2: # if number of intersections is odd
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
from svgpathtools import *
|
from svgpathtools import disvg, Line, CubicBezier
|
||||||
|
from scipy.optimize import fminbound
|
||||||
|
|
||||||
# create some example paths
|
# create some example paths
|
||||||
path1 = CubicBezier(1,2+3j,3-5j,4+1j)
|
path1 = CubicBezier(1,2+3j,3-5j,4+1j)
|
||||||
path2 = path1.rotated(60).translated(3)
|
path2 = path1.rotated(60).translated(3)
|
||||||
|
|
||||||
# find minimizer
|
|
||||||
from scipy.optimize import fminbound
|
|
||||||
def dist(t):
|
def dist(t):
|
||||||
return path1.radialrange(path2.point(t))[0][0]
|
return path1.radialrange(path2.point(t))[0][0]
|
||||||
|
|
||||||
|
|
||||||
|
# find minimizer
|
||||||
T2 = fminbound(dist, 0, 1)
|
T2 = fminbound(dist, 0, 1)
|
||||||
|
|
||||||
# Let's do a visual check
|
# Let's do a visual check
|
||||||
|
|
|
@ -13,7 +13,7 @@ An Historic Note:
|
||||||
Example:
|
Example:
|
||||||
Typical usage looks something like the following.
|
Typical usage looks something like the following.
|
||||||
|
|
||||||
>> from svgpathtools import *
|
>> from svgpathtools import Document
|
||||||
>> doc = Document('my_file.html')
|
>> doc = Document('my_file.html')
|
||||||
>> for path in doc.paths():
|
>> for path in doc.paths():
|
||||||
>> # Do something with the transformed Path object.
|
>> # Do something with the transformed Path object.
|
||||||
|
@ -44,6 +44,7 @@ import warnings
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from tempfile import gettempdir
|
from tempfile import gettempdir
|
||||||
from time import time
|
from time import time
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
# Internal dependencies
|
# Internal dependencies
|
||||||
from .parser import parse_path
|
from .parser import parse_path
|
||||||
|
@ -51,7 +52,7 @@ from .parser import parse_transform
|
||||||
from .svg_to_paths import (path2pathd, ellipse2pathd, line2pathd,
|
from .svg_to_paths import (path2pathd, ellipse2pathd, line2pathd,
|
||||||
polyline2pathd, polygon2pathd, rect2pathd)
|
polyline2pathd, polygon2pathd, rect2pathd)
|
||||||
from .misctools import open_in_browser
|
from .misctools import open_in_browser
|
||||||
from .path import *
|
from .path import transform, Path, is_path_segment
|
||||||
|
|
||||||
# To maintain forward/backward compatibility
|
# To maintain forward/backward compatibility
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import os
|
import os
|
||||||
from xml.etree.ElementTree import iterparse, Element, ElementTree, SubElement
|
from xml.etree.ElementTree import iterparse, Element, ElementTree, SubElement
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
# Internal dependencies
|
# Internal dependencies
|
||||||
from .parser import parse_path
|
from .parser import parse_path
|
||||||
|
@ -13,13 +14,13 @@ from .parser import parse_transform
|
||||||
from .svg_to_paths import (path2pathd, ellipse2pathd, line2pathd,
|
from .svg_to_paths import (path2pathd, ellipse2pathd, line2pathd,
|
||||||
polyline2pathd, polygon2pathd, rect2pathd)
|
polyline2pathd, polygon2pathd, rect2pathd)
|
||||||
from .misctools import open_in_browser
|
from .misctools import open_in_browser
|
||||||
from .path import *
|
from .path import transform
|
||||||
|
|
||||||
# To maintain forward/backward compatibility
|
# To maintain forward/backward compatibility
|
||||||
try:
|
try:
|
||||||
str = basestring
|
string = basestring
|
||||||
except NameError:
|
except NameError:
|
||||||
pass
|
string = str
|
||||||
|
|
||||||
NAME_SVG = "svg"
|
NAME_SVG = "svg"
|
||||||
ATTR_VERSION = "version"
|
ATTR_VERSION = "version"
|
||||||
|
@ -164,17 +165,17 @@ class SaxDocument:
|
||||||
if matrix is not None and not np.all(np.equal(matrix, identity)):
|
if matrix is not None and not np.all(np.equal(matrix, identity)):
|
||||||
matrix_string = "matrix("
|
matrix_string = "matrix("
|
||||||
matrix_string += " "
|
matrix_string += " "
|
||||||
matrix_string += str(matrix[0][0])
|
matrix_string += string(matrix[0][0])
|
||||||
matrix_string += " "
|
matrix_string += " "
|
||||||
matrix_string += str(matrix[1][0])
|
matrix_string += string(matrix[1][0])
|
||||||
matrix_string += " "
|
matrix_string += " "
|
||||||
matrix_string += str(matrix[0][1])
|
matrix_string += string(matrix[0][1])
|
||||||
matrix_string += " "
|
matrix_string += " "
|
||||||
matrix_string += str(matrix[1][1])
|
matrix_string += string(matrix[1][1])
|
||||||
matrix_string += " "
|
matrix_string += " "
|
||||||
matrix_string += str(matrix[0][2])
|
matrix_string += string(matrix[0][2])
|
||||||
matrix_string += " "
|
matrix_string += " "
|
||||||
matrix_string += str(matrix[1][2])
|
matrix_string += string(matrix[1][2])
|
||||||
matrix_string += ")"
|
matrix_string += ")"
|
||||||
path.set(ATTR_TRANSFORM, matrix_string)
|
path.set(ATTR_TRANSFORM, matrix_string)
|
||||||
if ATTR_DATA in values:
|
if ATTR_DATA in values:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools.bezier import *
|
from svgpathtools.bezier import bezier_point, bezier2polynomial, polynomial2bezier
|
||||||
from svgpathtools.path import bpoints2bezier
|
from svgpathtools.path import bpoints2bezier
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools import *
|
from svgpathtools import Document
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from io import open # overrides build-in open for compatibility with python2
|
from io import open # overrides build-in open for compatibility with python2
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools import *
|
from svgpathtools import parse_path
|
||||||
|
|
||||||
|
|
||||||
class TestGeneration(unittest.TestCase):
|
class TestGeneration(unittest.TestCase):
|
||||||
|
|
|
@ -5,7 +5,7 @@ $ python -m unittest test.test_groups.TestGroups.test_group_flatten
|
||||||
"""
|
"""
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools import *
|
from svgpathtools import Document, SVG_NAMESPACE, parse_path
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
# Note: This file was taken mostly as is from the svg.path module (v 2.0)
|
# Note: This file was taken mostly as is from the svg.path module (v 2.0)
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools import *
|
from svgpathtools import Path, Line, QuadraticBezier, CubicBezier, Arc, parse_path
|
||||||
import svgpathtools
|
import svgpathtools
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,12 @@ import random
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
# Internal dependencies
|
# Internal dependencies
|
||||||
from svgpathtools import *
|
from svgpathtools import (
|
||||||
from svgpathtools.path import _NotImplemented4ArcException, bezier_radialrange
|
Line, QuadraticBezier, CubicBezier, Arc, Path, poly2bez, path_encloses_pt,
|
||||||
|
bpoints2bezier, closest_point_in_path, farthest_point_in_path,
|
||||||
|
is_bezier_segment, is_bezier_path, parse_path
|
||||||
|
)
|
||||||
|
from svgpathtools.path import bezier_radialrange
|
||||||
|
|
||||||
# An important note for those doing any debugging:
|
# An important note for those doing any debugging:
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
|
|
@ -4,7 +4,7 @@ import unittest
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
# Internal dependencies
|
# Internal dependencies
|
||||||
from svgpathtools import *
|
from svgpathtools import rational_limit
|
||||||
|
|
||||||
|
|
||||||
class Test_polytools(unittest.TestCase):
|
class Test_polytools(unittest.TestCase):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools import *
|
from svgpathtools import SaxDocument
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
import unittest
|
import unittest
|
||||||
from svgpathtools import *
|
from svgpathtools import Path, Line, Arc, svg2paths, svgstr2paths
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from io import open # overrides build-in open for compatibility with python2
|
from io import open # overrides build-in open for compatibility with python2
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
|
|
Loading…
Reference in New Issue