1
1
import numpy as np
2
2
from io import BytesIO
3
3
import os
4
+ import re
4
5
import tempfile
5
6
import warnings
6
7
import xml .parsers .expat
7
8
8
9
import pytest
9
10
11
+ import matplotlib as mpl
12
+ from matplotlib import dviread
13
+ from matplotlib .figure import Figure
10
14
import matplotlib .pyplot as plt
11
15
from matplotlib .testing .decorators import image_comparison
12
- import matplotlib
13
- from matplotlib import dviread
14
16
15
17
16
18
with warnings .catch_warnings ():
17
19
warnings .simplefilter ('ignore' )
18
20
needs_usetex = pytest .mark .skipif (
19
- not matplotlib .checkdep_usetex (True ),
21
+ not mpl .checkdep_usetex (True ),
20
22
reason = "This test needs a TeX installation" )
21
23
22
24
@@ -107,15 +109,10 @@ def test_bold_font_output_with_none_fonttype():
107
109
108
110
def _test_determinism_save (filename , usetex ):
109
111
# This function is mostly copy&paste from "def test_visibility"
110
- # To require no GUI, we use Figure and FigureCanvasSVG
111
- # instead of plt.figure and fig.savefig
112
- from matplotlib .figure import Figure
113
- from matplotlib .backends .backend_svg import FigureCanvasSVG
114
- from matplotlib import rc
115
- rc ('svg' , hashsalt = 'asdf' )
116
- rc ('text' , usetex = usetex )
112
+ mpl .rc ('svg' , hashsalt = 'asdf' )
113
+ mpl .rc ('text' , usetex = usetex )
117
114
118
- fig = Figure ()
115
+ fig = Figure () # Require no GUI.
119
116
ax = fig .add_subplot (111 )
120
117
121
118
x = np .linspace (0 , 4 * np .pi , 50 )
@@ -129,7 +126,7 @@ def _test_determinism_save(filename, usetex):
129
126
ax .set_xlabel ('A string $1+2+\\ sigma$' )
130
127
ax .set_ylabel ('A string $1+2+\\ sigma$' )
131
128
132
- FigureCanvasSVG ( fig ). print_svg (filename )
129
+ fig . savefig (filename , format = "svg" )
133
130
134
131
135
132
@pytest .mark .parametrize (
@@ -172,36 +169,30 @@ def test_determinism(filename, usetex):
172
169
@needs_usetex
173
170
def test_missing_psfont (monkeypatch ):
174
171
"""An error is raised if a TeX font lacks a Type-1 equivalent"""
175
- from matplotlib import rc
176
172
177
173
def psfont (* args , ** kwargs ):
178
174
return dviread .PsFont (texname = 'texfont' , psname = 'Some Font' ,
179
175
effects = None , encoding = None , filename = None )
180
176
181
177
monkeypatch .setattr (dviread .PsfontsMap , '__getitem__' , psfont )
182
- rc ('text' , usetex = True )
178
+ mpl . rc ('text' , usetex = True )
183
179
fig , ax = plt .subplots ()
184
180
ax .text (0.5 , 0.5 , 'hello' )
185
181
with tempfile .TemporaryFile () as tmpfile , pytest .raises (ValueError ):
186
182
fig .savefig (tmpfile , format = 'svg' )
187
183
188
184
189
- @needs_tex
185
+ # Use Computer Modern Sans Serif, not Helvetica (which has no \textwon).
186
+ @pytest .mark .style ('default' )
187
+ @needs_usetex
190
188
def test_unicode_won ():
191
- from pylab import rcParams , plot , ylabel , savefig
192
- rcParams .update ({'text.usetex' : True , 'text.latex.unicode' : True })
193
-
194
- plot (1 , 1 )
195
- ylabel (r'\textwon' )
189
+ fig = Figure ()
190
+ fig .text (.5 , .5 , r'\textwon' , usetex = True )
196
191
197
- fd = BytesIO ()
198
- savefig (fd , format = 'svg' )
199
- fd .seek (0 )
200
- buf = fd .read ().decode ()
201
- fd .close ()
192
+ with BytesIO () as fd :
193
+ fig .savefig (fd , format = 'svg' )
194
+ buf = fd .getvalue ().decode ('ascii' )
202
195
203
196
won_id = 'Computer_Modern_Sans_Serif-142'
204
- def_regex = re .compile (r'<path d=(.|\s)*?id="{0}"/>' .format (won_id ))
205
- use_regex = re .compile (r'<use[^/>]*? xlink:href="#{0}"/>' .format (won_id ))
206
- assertTrue (bool (def_regex .search (buf )))
207
- assertTrue (bool (use_regex .search (buf )))
197
+ assert re .search (r'<path d=(.|\s)*?id="{0}"/>' .format (won_id ), buf )
198
+ assert re .search (r'<use[^/>]*? xlink:href="#{0}"/>' .format (won_id ), buf )