|
7 | 7 |
|
8 | 8 |
|
9 | 9 | from matplotlib import (
|
10 |
| - collections, path, patheffects, pyplot as plt, transforms as mtransforms, |
| 10 | + collections, patheffects, pyplot as plt, transforms as mtransforms, |
11 | 11 | rcParams, rc_context)
|
12 | 12 | from matplotlib.backends.backend_agg import RendererAgg
|
13 | 13 | from matplotlib.figure import Figure
|
@@ -56,7 +56,7 @@ def test_large_single_path_collection():
|
56 | 56 | # applied.
|
57 | 57 | f, ax = plt.subplots()
|
58 | 58 | collection = collections.PathCollection(
|
59 |
| - [path.Path([[-10, 5], [10, 5], [10, -5], [-10, -5], [-10, 5]])]) |
| 59 | + [Path([[-10, 5], [10, 5], [10, -5], [-10, -5], [-10, 5]])]) |
60 | 60 | ax.add_artist(collection)
|
61 | 61 | ax.set_xlim(10**-3, 1)
|
62 | 62 | plt.savefig(buff)
|
@@ -270,61 +270,62 @@ def test_webp_alpha():
|
270 | 270 |
|
271 | 271 | def test_draw_path_collection_error_handling():
|
272 | 272 |
10000
fig, ax = plt.subplots()
|
273 |
| - ax.scatter([1], [1]).set_paths(path.Path([(0, 1), (2, 3)])) |
| 273 | + ax.scatter([1], [1]).set_paths(Path([(0, 1), (2, 3)])) |
274 | 274 | with pytest.raises(TypeError):
|
275 | 275 | fig.canvas.draw()
|
276 | 276 |
|
277 | 277 |
|
278 | 278 | def test_chunksize_fails():
|
| 279 | + # NOTE: This test covers multiple independent test scenarios in a single |
| 280 | + # function, because each scenario uses ~2GB of memory and we don't |
| 281 | + # want parallel test executors to accidentally run multiple of these |
| 282 | + # at the same time. |
| 283 | + |
279 | 284 | N = 100_000
|
280 | 285 | dpi = 500
|
281 | 286 | w = 5*dpi
|
282 | 287 | h = 6*dpi
|
283 | 288 |
|
284 |
| - # just fit in the width |
| 289 | + # make a Path that spans the whole w-h rectangle |
285 | 290 | x = np.linspace(0, w, N)
|
286 |
| - # and go top-to-bottom |
287 | 291 | y = np.ones(N) * h
|
288 | 292 | y[::2] = 0
|
| 293 | + path = Path(np.vstack((x, y)).T) |
| 294 | + # effectively disable path simplification (but leaving it "on") |
| 295 | + path.simplify_threshold = 0 |
289 | 296 |
|
290 |
| - idt = IdentityTransform() |
291 |
| - # make a renderer |
| 297 | + # setup the minimal GraphicsContext to draw a Path |
292 | 298 | ra = RendererAgg(w, h, dpi)
|
293 |
| - # setup the minimal gc to draw a line |
294 | 299 | gc = ra.new_gc()
|
295 | 300 | gc.set_linewidth(1)
|
296 | 301 | gc.set_foreground('r')
|
297 |
| - # make a Path |
298 |
| - p = Path(np.vstack((x, y)).T) |
299 |
| - # effectively disable path simplification (but leaving it "on") |
300 |
| - p.simplify_threshold = 0 |
301 | 302 |
|
302 | 303 | gc.set_hatch('/')
|
303 |
| - with pytest.raises(OverflowError, match='hatched path'): |
304 |
| - ra.draw_path(gc, p, idt) |
| 304 | + with pytest.raises(OverflowError, match='can not split hatched path'): |
| 305 | + ra.draw_path(gc, path, IdentityTransform()) |
305 | 306 | gc.set_hatch(None)
|
306 | 307 |
|
307 |
| - with pytest.raises(OverflowError, match='filled path'): |
308 |
| - ra.draw_path(gc, p, idt, (1, 0, 0)) |
| 308 | + with pytest.raises(OverflowError, match='can not split filled path'): |
| 309 | + ra.draw_path(gc, path, IdentityTransform(), (1, 0, 0)) |
309 | 310 |
|
310 | 311 | # Set to zero to disable, currently defaults to 0, but let's be sure.
|
311 | 312 | with rc_context({'agg.path.chunksize': 0}):
|
312 | 313 | with pytest.raises(OverflowError, match='Please set'):
|
313 |
| - ra.draw_path(gc, p, idt) |
| 314 | + ra.draw_path(gc, path, IdentityTransform()) |
314 | 315 |
|
315 | 316 | # Set big enough that we do not try to chunk.
|
316 | 317 | with rc_context({'agg.path.chunksize': 1_000_000}):
|
317 | 318 | with pytest.raises(OverflowError, match='Please reduce'):
|
318 |
| - ra.draw_path(gc, p, idt) |
| 319 | + ra.draw_path(gc, path, IdentityTransform()) |
319 | 320 |
|
320 | 321 | # Small enough we will try to chunk, but big enough we will fail to render.
|
321 | 322 | with rc_context({'agg.path.chunksize': 90_000}):
|
322 | 323 | with pytest.raises(OverflowError, match='Please reduce'):
|
323 |
| - ra.draw_path(gc, p, idt) |
| 324 | + ra.draw_path(gc, path, IdentityTransform()) |
324 | 325 |
|
325 |
| - p.should_simplify = False |
| 326 | + path.should_simplify = False |
326 | 327 | with pytest.raises(OverflowError, match="should_simplify is False"):
|
327 |
| - ra.draw_path(gc, p, idt) |
| 328 | + ra.draw_path(gc, path, IdentityTransform()) |
328 | 329 |
|
329 | 330 |
|
330 | 331 | def test_non_tuple_rgbaface():
|
|
0 commit comments