Skip to content

Commit 86e9d54

Browse files
TheBBVikingScientist
authored andcommitted
Miscellaneous changes for CI
- Use Extension class in setup.py - Use only relative imports within splipy itself - Do not import from the splipy root module, only from the source files - Module names that are different from the root module re-exports - Some cleanup of imports
1 parent 0f0bd46 commit 86e9d54

35 files changed

+369
-330
lines changed

.github/workflows/python-package.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
pip install -r requirements.dev.txt
3131
- name: Install package
3232
run: |
33-
pip install .
33+
pip install -vvv .
3434
- name: Test with pytest
3535
run: |
3636
pytest --benchmark-skip

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ doc/_templates
77
/doc/html/
88
/doc/latex/
99
.dir-locals.el
10+
/dist

setup.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env python3
22

3-
from setuptools import setup
3+
from distutils.extension import Extension
4+
from setuptools import setup, find_packages
45
from Cython.Build import cythonize
56
import numpy as np
67

@@ -18,7 +19,7 @@
1819
maintainer='Kjetil Andre Johannessen',
1920
maintainer_email='kjetijo@gmail.com',
2021
license='GNU public license v3',
21-
packages=['splipy', 'splipy.utils', 'splipy.io'],
22+
packages=find_packages(),
2223
package_data={
2324
'splipy': ['templates/*.bpt'],
2425
},
@@ -30,8 +31,15 @@
3031
'FiniteElement': ["nutils>=4.0"],
3132
'Images': ["opencv-python>=4.0"],
3233
},
33-
ext_modules=cythonize("splipy/basis_eval.pyx"),
34-
include_dirs=[np.get_include()],
34+
# ext_modules=cythonize("splipy/basis_eval.pyx"),
35+
ext_modules=cythonize([
36+
Extension(
37+
'splipy.basis_eval',
38+
['splipy/basis_eval.pyx'],
39+
include_dirs=[np.get_include()],
40+
)
41+
]),
42+
# include_dirs=[np.get_include()],
3543
classifiers=[
3644
'Development Status :: 4 - Beta',
3745
'Topic :: Multimedia :: Graphics :: 3D Modeling',

splipy/__init__.py

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,9 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from splipy.BSplineBasis import BSplineBasis
4-
from splipy.SplineObject import SplineObject
5-
from splipy.Curve import Curve
6-
from splipy.Surface import Surface
7-
from splipy.Volume import Volume
8-
from splipy.TrimmedSurface import TrimmedSurface
9-
10-
# SplineModel imports io.G2 which imports TrimmedSurface,
11-
# so we must import SplineModel after TrimmedSurface
12-
from splipy.SplineModel import SplineModel
1+
from .basis import BSplineBasis
2+
from .splineobject import SplineObject
3+
from .curve import Curve
4+
from .surface import Surface
5+
from .volume import Volume
6+
from .trimmedsurface import TrimmedSurface
7+
from .splinemodel import SplineModel
138

149
__version__ = '1.4.0'
15-
__all__ = ['BSplineBasis',
16-
'SplineObject',
17-
'Curve',
18-
'Surface',
19-
'Volume',
20-
'SplineModel',
21-
'TrimmedSurface',
22-
'curve_factory',
23-
'surface_factory',
24-
'volume_factory',
25-
'utils',
26-
'io']

splipy/BSplineBasis.py renamed to splipy/basis.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# -*- coding: utf-8 -*-
22

3-
from splipy.utils import ensure_listlike
4-
import splipy.state as state
53
from bisect import bisect_right, bisect_left
6-
import numpy as np
74
import copy
8-
from splipy import basis_eval
5+
6+
import numpy as np
97
from scipy.sparse import csr_matrix
108

9+
from .utils import ensure_listlike
10+
from . import basis_eval, state
11+
1112
__all__ = ['BSplineBasis']
1213

1314

@@ -118,6 +119,7 @@ def evaluate(self, t, d=0, from_right=True, sparse=False):
118119
points *i*
119120
:rtype: numpy.array
120121
"""
122+
121123
# for single-value input, wrap it into a list so it don't crash on the loop below
122124
t = ensure_listlike(t)
123125
t = np.array(t, dtype=np.float64)

splipy/bench_evaluation_test.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

splipy/Curve.py renamed to splipy/curve.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# -*- coding: utf-8 -*-
22

3-
from splipy import BSplineBasis
4-
from splipy import SplineObject
5-
from splipy.utils import ensure_listlike, is_singleton
63
from itertools import chain
74
from bisect import bisect_left, bisect_right
5+
86
import numpy as np
97
import scipy.sparse.linalg as splinalg
108

9+
from .basis import BSplineBasis
10+
from .splineobject import SplineObject
11+
from .utils import ensure_listlike, is_singleton
12+
1113
__all__ = ['Curve']
1214

1315

@@ -414,9 +416,9 @@ def error(self, target):
414416
this curve and a target curve
415417
416418
.. math:: ||\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)||_{L^2(t_1,t_2)}^2 = \\int_{t_1}^{t_2}
417-
|\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)|^2 dt, \\quad \\forall \;\\text{knots}\;t_1 < t_2
419+
|\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)|^2 dt, \\quad \\forall \\;\\text{knots}\\;t_1 < t_2
418420
419-
.. math:: ||\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)||_{L^\infty} = \\max_t |\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)|
421+
.. math:: ||\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)||_{L^\\infty} = \\max_t |\\boldsymbol{x_h}(t)-\\boldsymbol{x}(t)|
420422
421423
:param function target: callable function which takes as input a vector
422424
of evaluation points t and gives as output a matrix x where

splipy/curve_factory.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,19 @@
33
"""Handy utilities for creating curves."""
44

55
from math import pi, cos, sin, sqrt, ceil, atan2
6-
from splipy import Curve, BSplineBasis
7-
from splipy.utils import flip_and_move_plane_geometry, rotate_local_x_axis
8-
from numpy.linalg import norm
9-
import splipy.state as state
10-
import scipy.sparse.linalg as splinalg
11-
import numpy as np
12-
import scipy.sparse as sp
136
import copy
147
import inspect
158

9+
import numpy as np
10+
from numpy.linalg import norm
11+
import scipy.sparse as sp
12+
import scipy.sparse.linalg as splinalg
13+
14+
from .curve import Curve
15+
from .basis import BSplineBasis
16+
from .utils import flip_and_move_plane_geometry, rotate_local_x_axis
17+
from . import state
18+
1619
__all__ = ['Boundary', 'line', 'polygon', 'n_gon', 'circle', 'ellipse',
1720
'circle_segment_from_three_points', 'circle_segment', 'interpolate',
1821
'least_square_fit', 'cubic_curve', 'bezier', 'manipulate', 'fit']

splipy/io/g2.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
import numpy as np
21
from itertools import chain, product
3-
from splipy import Curve, Surface, Volume, SplineObject, BSplineBasis, TrimmedSurface
4-
from splipy.utils import flip_and_move_plane_geometry, rotate_local_x_axis
5-
from .master import MasterIO
6-
import splipy.surface_factory as SurfaceFactory
7-
import splipy.curve_factory as CurveFactory
8-
import splipy.state as state
2+
3+
import numpy as np
94
from numpy import sqrt, pi, savetxt
105

6+
from ..curve import Curve
7+
from ..surface import Surface
8+
from ..volume import Volume
9+
from ..splineobject import SplineObject
10+
from ..basis import BSplineBasis
11+
from ..trimmedsurface import TrimmedSurface
12+
from ..utils import flip_and_move_plane_geometry, rotate_local_x_axis
13+
from .. import surface_factory, curve_factory, state
14+
15+
from .master import MasterIO
16+
1117

1218
class G2(MasterIO):
1319

@@ -26,7 +32,7 @@ def circle(self):
2632
param = np.array(next(self.fstream).split(), dtype=float)
2733
reverse = next(self.fstream).strip() != '0'
2834

29-
result = CurveFactory.circle(r=r, center=center, normal=normal, xaxis=xaxis)
35+
result = curve_factory.circle(r=r, center=center, normal=normal, xaxis=xaxis)
3036
result.reparam(param)
3137
if reverse:
3238
result.reverse()
@@ -42,7 +48,7 @@ def ellipse(self):
4248
param = np.array(next(self.fstream).split(), dtype=float)
4349
reverse = next(self.fstream).strip() != '0'
4450

45-
result = CurveFactory.ellipse(r1=r1, r2=r2, center=center, normal=normal, xaxis=xaxis)
51+
result = curve_factory.ellipse(r1=r1, r2=r2, center=center, normal=normal, xaxis=xaxis)
4652
result.reparam(param)
4753
if reverse:
4854
result.reverse()
@@ -61,7 +67,7 @@ def line(self):
6167
if not finite:
6268
param = [-state.unlimited, +state.unlimited]
6369

64-
result = CurveFactory.line(s+d*param[0], s+d*param[1])
70+
result = curve_factory.line(s+d*param[0], s+d*param[1])
6571
if reverse:
6672
result.reverse()
6773
return result
@@ -96,7 +102,7 @@ def cylinder(self):
96102

97103
center = center + z_axis*param_v[0]
98104
h = param_v[1] - param_v[0]
99-
result = SurfaceFactory.cylinder(r=r, center=center, xaxis=x_axis, axis=z_axis, h=h)
105+
result = surface_factory.cylinder(r=r, center=center, xaxis=x_axis, axis=z_axis, h=h)
100106
result.reparam(param_u, param_v)
101107
if swap:
102108
result.swap()
@@ -115,11 +121,11 @@ def disc(self):
115121
swap = next(self.fstream).strip() != '0'
116122

117123
if degen:
118-
result = SurfaceFactory.disc(r=r, center=center, xaxis=x_axis, normal=z_axis, type='radial')
124+
result = surface_factory.disc(r=r, center=center, xaxis=x_axis, normal=z_axis, type='radial')
119125
else:
120126
if not(np.allclose(np.diff(angles), pi/2, atol=1e-10)):
121127
raise RuntimeError('Unknown square parametrization of disc elementary surface')
122-
result = SurfaceFactory.disc(r=r, center=center, xaxis=x_axis, normal=z_axis, type='square')
128+
result = surface_factory.disc(r=r, center=center, xaxis=x_axis, normal=z_axis, type='square')
123129
result.reparam(param_u, param_v)
124130
if swap:
125131
result.swap()
@@ -159,7 +165,7 @@ def torus(self):
159165
param_v = np.array(next(self.fstream).split(), dtype=float)
160166
swap = next(self.fstream).strip() != '0'
161167

162-
result = SurfaceFactory.torus(minor_r=r1, major_r=r2, center=center, normal=z_axis, xaxis=x_axis)
168+
result = surface_factory.torus(minor_r=r1, major_r=r2, center=center, normal=z_axis, xaxis=x_axis)
163169
result.reparam(param_u, param_v)
164170
if(swap):
165171
result.swap()
@@ -175,7 +181,7 @@ def sphere(self):
175181
param_v = np.array(next(self.fstream).split(), dtype=float)
176182
swap = next(self.fstream).strip() != '0'
177183

178-
result = SurfaceFactory.sphere(r=r, center=center, xaxis=x_axis, zaxis=z_axis).swap()
184+
result = surface_factory.sphere(r=r, center=center, xaxis=x_axis, zaxis=z_axis).swap()
179185
if swap:
180186
result.swap()
181187
result.reparam(param_u, param_v)
@@ -210,7 +216,7 @@ def surface_of_linear_extrusion(self):
210216
param_v=[-state.unlimited, +state.unlimited]
211217
swap = next(self.fstream).strip() != '0'
212218

213-
result = SurfaceFactory.extrude(crv + normal*param_v[0], normal*(param_v[1]-param_v[0]))
219+
result = surface_factory.extrude(crv + normal*param_v[0], normal*(param_v[1]-param_v[0]))
214220
result.reparam(param_u, param_v)
215221

216222
if swap:

splipy/io/grdecl.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
1-
import numpy as np
21
from itertools import product, chain
3-
from splipy import Surface, Volume, SplineObject, BSplineBasis
4-
from splipy import surface_factory, volume_factory, curve_factory
5-
from splipy.io import G2
6-
from splipy.utils import ensure_listlike
7-
from .master import MasterIO
82
import re
93
import warnings
10-
from scipy.spatial import Delaunay
11-
from scipy.spatial.qhull import QhullError
4+
5+
import numpy as np
126
from tqdm import tqdm
137
import cv2
148
import h5py
9+
from scipy.spatial import Delaunay
10+
from scipy.spatial.qhull import QhullError
11+
12+
from ..surface import Surface
13+
from ..volume import Volume
14+
from ..splineobject import SplineObject
15+
from ..basis import BSplineBasis
16+
from ..utils import ensure_listlike
17+
from .. import surface_factory, curve_factory, volume_factory
18+
19+
from .master import MasterIO
20+
from .g2 import G2
1521

1622

1723
class Box(object):

splipy/io/ofoam.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
from itertools import groupby
2-
import numpy as np
32
from operator import itemgetter
43
from os.path import exists, isdir, join
54
from os import makedirs
65

7-
from splipy import SplineModel
6+
import numpy as np
7+
8+
from ..splinemodel import SplineModel
89

910

1011
class OpenFOAM(object):

splipy/io/spl.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
import numpy as np
21
from itertools import islice
3-
from splipy import Curve, Surface, Volume, SplineObject, BSplineBasis
2+
3+
import numpy as np
4+
5+
from ..curve import Curve
6+
from ..surface import Surface
7+
from ..volume import Volume
8+
from ..splineobject import SplineObject
9+
from ..basis import BSplineBasis
10+
411
from .master import MasterIO
512

613

0 commit comments

Comments
 (0)