Skip to content

Commit 5e29a2a

Browse files
committed
Use pybind11 for tri module
1 parent 8a7a53a commit 5e29a2a

File tree

7 files changed

+260
-669
lines changed

7 files changed

+260
-669
lines changed

lib/matplotlib/tests/test_triangulation.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,43 +1166,43 @@ def test_internal_cpp_api():
11661166
# C++ Triangulation.
11671167
with pytest.raises(
11681168
TypeError,
1169-
match=r'function takes exactly 7 arguments \(0 given\)'):
1169+
match=r'__init__\(\): incompatible constructor arguments.'):
11701170
mpl._tri.Triangulation()
11711171

11721172
with pytest.raises(
11731173
ValueError, match=r'x and y must be 1D arrays of the same length'):
1174-
mpl._tri.Triangulation([], [1], [[]], None, None, None, False)
1174+
mpl._tri.Triangulation([], [1], [[]], (), (), (), False)
11751175

11761176
x = [0, 1, 1]
11771177
y = [0, 0, 1]
11781178
with pytest.raises(
11791179
ValueError,
11801180
match=r'triangles must be a 2D array of shape \(\?,3\)'):
1181-
mpl._tri.Triangulation(x, y, [[0, 1]], None, None, None, False)
1181+
mpl._tri.Triangulation(x, y, [[0, 1]], (), (), (), False)
11821182

11831183
tris = [[0, 1, 2]]
11841184
with pytest.raises(
11851185
ValueError,
11861186
match=r'mask must be a 1D array with the same length as the '
11871187
r'triangles array'):
1188-
mpl._tri.Triangulation(x, y, tris, [0, 1], None, None, False)
1188+
mpl._tri.Triangulation(x, y, tris, [0, 1], (), (), False)
11891189

11901190
with pytest.raises(
11911191
ValueError, match=r'edges must be a 2D array with shape \(\?,2\)'):
1192-
mpl._tri.Triangulation(x, y, tris, None, [[1]], None, False)
1192+
mpl._tri.Triangulation(x, y, tris, (), [[1]], (), False)
11931193

11941194
with pytest.raises(
11951195
ValueError,
11961196
match=r'neighbors must be a 2D array with the same shape as the '
11971197
r'triangles array'):
1198-
mpl._tri.Triangulation(x, y, tris, None, None, [[-1]], False)
1198+
mpl._tri.Triangulation(x, y, tris, (), (), [[-1]], False)
11991199

1200-
triang = mpl._tri.Triangulation(x, y, tris, None, None, None, False)
1200+
triang = mpl._tri.Triangulation(x, y, tris, (), (), (), False)
12011201

12021202
with pytest.raises(
12031203
ValueError,
1204-
match=r'z array must have same length as triangulation x and y '
1205-
r'array'):
1204+
match=r'z must be a 1D array with the same length as the '
1205+
r'triangulation x and y arrays'):
12061206
triang.calculate_plane_coefficients([])
12071207

12081208
with pytest.raises(
@@ -1214,7 +1214,7 @@ def test_internal_cpp_api():
12141214
# C++ TriContourGenerator.
12151215
with pytest.raises(
12161216
TypeError,
1217-
match=r'function takes exactly 2 arguments \(0 given\)'):
1217+
match=r'__init__\(\): incompatible constructor arguments.'):
12181218
mpl._tri.TriContourGenerator()
12191219

12201220
with pytest.raises(
@@ -1232,7 +1232,8 @@ def test_internal_cpp_api():
12321232

12331233
# C++ TrapezoidMapTriFinder.
12341234
with pytest.raises(
1235-
TypeError, match=r'function takes exactly 1 argument \(0 given\)'):
1235+
TypeError,
1236+
match=r'__init__\(\): incompatible constructor arguments.'):
12361237
mpl._tri.TrapezoidMapTriFinder()
12371238

12381239
trifinder = mpl._tri.TrapezoidMapTriFinder(triang)

lib/matplotlib/tri/_triangulation.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,12 @@ def get_cpp_triangulation(self):
120120
from matplotlib import _tri
121121
if self._cpp_triangulation is None:
122122
self._cpp_triangulation = _tri.Triangulation(
123-
self.x, self.y, self.triangles, self.mask, self._edges,
124-
self._neighbors, not self.is_delaunay)
123+
# For unset arrays use empty tuple which has size of zero.
124+
self.x, self.y, self.triangles,
125+
self.mask if self.mask is not None else (),
126+
self._edges if self._edges is not None else (),
127+
self._neighbors if self._neighbors is not None else (),
128+
not self.is_delaunay)
125129
return self._cpp_triangulation
126130

127131
def get_masked_triangles(self):

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ build-backend = "setuptools.build_meta"
33
requires = [
44
"certifi>=2020.06.20",
55
"oldest-supported-numpy",
6+
"pybind11>=2.6",
67
"setuptools_scm>=7",
78
]

setupext.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import textwrap
1717
import urllib.request
1818

19+
from pybind11.setup_helpers import Pybind11Extension
1920
from setuptools import Distribution, Extension
2021

2122
_log = logging.getLogger(__name__)
@@ -459,12 +460,12 @@ def get_extensions(self):
459460
add_libagg_flags(ext)
460461
yield ext
461462
# tri
462-
ext = Extension(
463+
ext = Pybind11Extension(
463464
"matplotlib._tri", [
464465
"src/tri/_tri.cpp",
465466
"src/tri/_tri_wrapper.cpp",
466-
])
467-
add_numpy_flags(ext)
467+
],
468+
cxx_std=11)
468469
yield ext
469470
# ttconv
470471
ext = Extension(

0 commit comments

Comments
 (0)