Skip to content

Commit 5e6b9ae

Browse files
authored
Merge branch 'master' into optimize_3d
2 parents 2059a55 + c1d086f commit 5e6b9ae

File tree

287 files changed

+58007
-61264
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

287 files changed

+58007
-61264
lines changed

.circleci/config.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ fonts-run: &fonts-install
4747
echo "Not downloading Humor-Sans; file already exists."
4848
fi
4949
fc-cache -f -v
50+
save_cache:
51+
key: fonts-1
52+
paths:
53+
- ~/.local/share/fonts/
54+
restore_cache:
55+
key: fonts-1
5056

5157
pip-run: &pip-install
5258
# Upgrade pip and setuptools and wheel to get as clean an install as possible

.flake8

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
[flake8]
2+
ignore =
3+
# Normal default
4+
E121,E123,E126,E226,E24,E704,W503,W504,
5+
# Additional ignores:
6+
E111, E114, E115, E116, E122, E124, E125, E127, E128, E129, E131,
7+
E265, E266,
8+
E305, E306,
9+
E722, E741,
10+
F401, F403, F811, F841,
11+
# Some new flake8 ignores:
12+
N801, N802, N803, N806, N812,
13+
14+
exclude =
15+
.git
16+
build
17+
# External files.
18+
versioneer.py
19+
tools/gh_api.py
20+
tools/github_stats.py
21+
.tox
22+
.eggs
23+
24+
per-file-ignores =
25+
setup.py: E402
26+
setupext.py: E302, E501
27+
28+
tools/compare_backend_driver_results.py: E501
29+
tools/subset.py: E221, E231, E251, E261, E302, E501, E701
30+
31+
matplotlib/_cm.py: E202, E203
32+
matplotlib/_mathtext_data.py: E203, E261
33+
matplotlib/backend_bases.py: E225
34+
matplotlib/backends/_backend_tk.py: E203, E222, E225, E231, E271, E301, E303, E401, E501, E701
35+
matplotlib/backends/backend_agg.py: E261, E302, E303, E701
36+
matplotlib/backends/backend_cairo.py: E203, E221, E261, E303, E402, E711
37+
matplotlib/backends/backend_gtk3.py: E203, E221, E222, E225, E251, E261, E501
38+
matplotlib/backends/backend_macosx.py: E231, E261
39+
matplotlib/backends/backend_pgf.py: E303, E731
40+
matplotlib/backends/backend_ps.py: E203, E225, E228, E231, E261, E262, E302, E303, E501, E701
41+
matplotlib/backends/backend_svg.py: E203, E225, E228, E231, E261, E302, E501
42+
matplotlib/backends/qt_editor/formlayout.py: E301, E501
43+
matplotlib/backends/tkagg.py: E231, E302, E701
44+
matplotlib/backends/windowing.py: E301, E302
45+
matplotlib/font_manager.py: E203, E221, E251, E261, E262, E302, E501
46+
matplotlib/fontconfig_pattern.py: E201, E203, E221, E222, E225, E302
47+
matplotlib/legend_handler.py: E201, E501
48+
matplotlib/mathtext.py: E201, E202, E203, E211, E221, E222, E225, E231, E251, E261, E301, E302, E303, E402, E501
49+
matplotlib/patheffects.py: E231
50+
matplotlib/projections/geo.py: E203, E221, E231, E261, E502
51+
matplotlib/pylab.py: E501
52+
matplotlib/pyplot.py: E201, E202, E221, E222, E225, E231, E251, E261, E302, E501, E701
53+
matplotlib/rcsetup.py: E203, E225, E261, E302, E501
54+
matplotlib/sphinxext/mathmpl.py: E302
55+
matplotlib/sphinxext/only_directives.py: E302
56+
matplotlib/sphinxext/plot_directive.py: E261, E302, E402
57+
matplotlib/tests/test_image.py: E225, E231, E251, E302, E501
58+
matplotlib/tests/test_lines.py: E231, E261
59+
matplotlib/tests/test_mathtext.py: E261, E501
60+
matplotlib/transforms.py: E201, E202, E203, E501
61+
matplotlib/tri/triinterpolate.py: E201, E221
62+
matplotlib/type1font.py: E731
63+
64+
mpl_toolkits/__init__.py: E261
65+
mpl_toolkits/axes_grid/axes_divider.py: E501
66+
mpl_toolkits/axes_grid/axes_rgb.py: E302, E501
67+
mpl_toolkits/axes_grid1/axes_divider.py: E402, E501
68+
mpl_toolkits/axes_grid1/axes_grid.py: E225
69+
mpl_toolkits/axes_grid1/axes_rgb.py: E231
70+
mpl_toolkits/axes_grid1/axes_size.py: E261, E501
71+
mpl_toolkits/axes_grid1/colorbar.py: E225, E231, E261, E262, E302, E303, E501, E701
72+
mpl_toolkits/axes_grid1/inset_locator.py: E501
73+
mpl_toolkits/axes_grid1/mpl_axes.py: E303, E501
74+
mpl_toolkits/axes_grid1/parasite_axes.py: E225, E231, E302, E303, E501
75+
mpl_toolkits/axisartist/angle_helper.py: E201, E203, E221, E222, E225, E231, E251, E261, E262, E302, E303, E501
76+
mpl_toolkits/axisartist/axis_artist.py: E201, E202, E221, E225, E228, E231, E251, E261, E262, E302, E303, E402, E501, E701, E711
77+
mpl_toolkits/axisartist/axisline_style.py: E231, E261, E262, E302, E303
78+
mpl_toolkits/axisartist/axislines.py: E225, E231, E261, E303, E501
79+
mpl_toolkits/axisartist/clip_path.py: E225, E302, E303, E501
80+
mpl_toolkits/axisartist/floating_axes.py: E225, E231, E261, E262, E302, E303, E402, E501
81+
mpl_toolkits/axisartist/grid_finder.py: E231, E261, E302, E303, E402
82+
mpl_toolkits/axisartist/grid_helper_curvelinear.py: E225, E231, E261, E262, E271, E302, E303, E501
83+
mpl_toolkits/mplot3d/art3d.py: E203, E222, E225, E231
84+
mpl_toolkits/mplot3d/axes3d.py: E203, E231, E402, E501, E701
85+
mpl_toolkits/mplot3d/axis3d.py: E231, E302
86+
mpl_toolkits/mplot3d/proj3d.py: E231, E302, E303
87+
mpl_toolkits/tests/test_axes_grid1.py: E201, E202
88+
mpl_toolkits/tests/test_mplot3d.py: E231, E302
89+
90+
doc/conf.py: E402, E501
91+
doc/sphinxext/github.py: E302, E501
92+
doc/sphinxext/math_symbol_table.py: E302, E501
93+
doc/sphinxext/skip_deprecated.py: E302
94+
doc/users/generate_credits.py: E302, E501
95+
tutorials/advanced/path_tutorial.py: E402, E501
96+
tutorials/advanced/patheffects_guide.py: E402, E501
97+
tutorials/advanced/transforms_tutorial.py: E402, E501
98+
tutorials/colors/colormaps.py: E501
99+
tutorials/colors/colors.py: E402
100+
tutorials/intermediate/artists.py: E402, E501
101+
tutorials/intermediate/constrainedlayout_guide.py: E402, E501
102+
tutorials/intermediate/gridspec.py: E402, E501
103+
tutorials/intermediate/legend_guide.py: E402, E501
104+
tutorials/intermediate/tight_layout_guide.py: E402, E501
105+
tutorials/introductory/customizing.py: E501
106+
tutorials/introductory/images.py: E402, E501
107+
tutorials/introductory/pyplot.py: E402, E501
108+
tutorials/introductory/sample_plots.py: E501
109+
tutorials/introductory/usage.py: E402, E501
110+
tutorials/text/annotations.py: E501
111+
tutorials/text/mathtext.py: E501
112+
tutorials/text/pgf.py: E501
113+
tutorials/text/text_intro.py: E402
114+
tutorials/text/text_props.py: E501
115+
tutorials/text/usetex.py: E501
116+
tutorials/toolkits/axes_grid.py: E501
117+
tutorials/toolkits/axisartist.py: E501
118+
119+
examples/animation/frame_grabbing_sgskip.py: E402
120+
examples/axes_grid1/inset_locator_demo.py: E402
121+
examples/axisartist/demo_curvelinear_grid.py: E402
122+
examples/color/color_by_yvalue.py: E402
123+
examples/color/color_cycle_default.py: E402
124+
examples/color/color_cycler.py: E402
125+
examples/color/color_demo.py: E402
126+
examples/color/colorbar_basics.py: E402
127+
examples/color/colormap_reference.py: E402
128+
examples/color/named_colors.py: E402
129+
examples/event_handling/data_browser.py: E501
130+
examples/event_handling/path_editor.py: E501
131+
examples/event_handling/pick_event_demo.py: E501
132+
examples/event_handling/poly_editor.py: E501
133+
examples/event_handling/viewlims.py: E501
134+
examples/images_contours_and_fields/affine_image.py: E402
135+
examples/images_contours_and_fields/barb_demo.py: E402, E501
136+
examples/images_contours_and_fields/barcode_demo.py: E402
137+
examples/images_contours_and_fields/contour_corner_mask.py: E402
138+
examples/images_contours_and_fields/contour_demo.py: E402, E501
139+
examples/images_contours_and_fields/contour_image.py: E402
140+
examples/images_contours_and_fields/contourf_demo.py: E402, E501
141+
examples/images_contours_and_fields/contourf_hatching.py: E402
142+
examples/images_contours_and_fields/contourf_log.py: E402
143+
examples/images_contours_and_fields/custom_cmap.py: E402
144+
examples/images_contours_and_fields/demo_bboximage.py: E402
145+
examples/images_contours_and_fields/image_clip_path.py: E402
146+
examples/images_contours_and_fields/image_demo.py: E402
147+
examples/images_contours_and_fields/image_masked.py: E402
148+
examples/images_contours_and_fields/image_transparency_blend.py: E402
149+
examples/images_contours_and_fields/image_zcoord.py: E402
150+
examples/images_contours_and_fields/interpolation_methods.py: E402
151+
examples/images_contours_and_fields/irregulardatagrid.py: E402
152+
examples/images_contours_and_fields/layer_images.py: E402
153+
examples/images_contours_and_fields/matshow.py: E402
154+
examples/images_contours_and_fields/multi_image.py: E402
155+
examples/images_contours_and_fields/pcolor_demo.py: E402
156+
examples/images_contours_and_fields/plot_streamplot.py: E402
157+
examples/images_contours_and_fields/quadmesh_demo.py: E402
158+
examples/images_contours_and_fields/quiver_demo.py: E402
159+
examples/images_contours_and_fields/quiver_simple_demo.py: E402
160+
examples/images_contours_and_fields/shading_example.py: E402, E501
161+
examples/images_contours_and_fields/specgram_demo.py: E402, E501
162+
examples/images_contours_and_fields/spy_demos.py: E402
163+
examples/images_contours_and_fields/tricontour_demo.py: E201, E402
164+
examples/images_contours_and_fields/tricontour_smooth_delaunay.py: E402
165+
examples/images_contours_and_fields/tricontour_smooth_user.py: E402
166+
examples/images_contours_and_fields/trigradient_demo.py: E402
167+
examples/images_contours_and_fields/triinterp_demo.py: E402
168+
examples/images_contours_and_fields/tripcolor_demo.py: E201, E402
169+
examples/images_contours_and_fields/triplot_demo.py: E201, E402
170+
examples/images_contours_and_fields/watermark_image.py: E402
171+
examples/lines_bars_and_markers/fill_between_demo.py: E402
172+
examples/lines_bars_and_markers/filled_step.py: E402
173+
examples/lines_bars_and_markers/joinstyle.py: E402
174+
examples/lines_bars_and_markers/scatter_piecharts.py: E402
175+
examples/lines_bars_and_markers/span_regions.py: E402
176+
examples/misc/agg_oo_sgskip.py: E402
177+
examples/misc/anchored_artists.py: E501
178+
examples/misc/contour_manual.py: E501
179+
examples/misc/font_indexing.py: E501
180+
examples/misc/ftface_props.py: E501
181+
examples/misc/histogram_path.py: E402
182+
examples/misc/print_stdout_sgskip.py: E402
183+
examples/misc/svg_filter_line.py: E402, E501
184+
examples/misc/svg_filter_pie.py: E402, E501
185+
examples/misc/table_demo.py: E201
186+
examples/mplot3d/voxels.py: E501
187+
examples/mplot3d/wire3d_zero_stride.py: E501
188+
examples/pie_and_polar_charts/nested_pie.py: E402
189+
examples/pie_and_polar_charts/pie_and_donut_labels.py: E402
190+
examples/pie_and_polar_charts/pie_demo2.py: E402
191+
examples/pie_and_polar_charts/pie_features.py: E402
192+
examples/pie_and_polar_charts/polar_bar.py: E402
193+
examples/pie_and_polar_charts/polar_demo.py: E402
194+
examples/pie_and_polar_charts/polar_legend.py: E402
195+
examples/pie_and_polar_charts/polar_scatter.py: E402
196+
examples/pyplots/align_ylabels.py: E402
197+
examples/pyplots/annotate_transform.py: E228, E251, E402, E501
198+
examples/pyplots/annotation_basic.py: E402
199+
examples/pyplots/annotation_polar.py: E231, E402
200+
examples/pyplots/auto_subplots_adjust.py: E231, E261, E302, E402
201+
examples/pyplots/boxplot_demo_pyplot.py: E231, E402
202+
examples/pyplots/compound_path_demo.py: E231
203+
examples/pyplots/dollar_ticks.py: E402
204+
examples/pyplots/fig_axes_customize_simple.py: E261, E402
205+
examples/pyplots/fig_axes_labels_simple.py: E402
206+
examples/pyplots/fig_x.py: E402
207+
examples/pyplots/pyplot_formatstr.py: E231, E402
208+
examples/pyplots/pyplot_mathtext.py: E231, E402
209+
examples/pyplots/pyplot_scales.py: E402
210+
examples/pyplots/pyplot_simple.py: E231
211+
examples/pyplots/pyplot_simple.py: E402
212+
examples/pyplots/pyplot_text.py: E402
213+
examples/pyplots/pyplot_three.py: E402
214+
examples/pyplots/pyplot_two_subplots.py: E302, E402
215+
examples/pyplots/text_commands.py: E231, E402
216+
examples/pyplots/text_layout.py: E231, E402
217+
examples/pyplots/whats_new_1_subplot3d.py: E402
218+
examples/pyplots/whats_new_98_4_fancy.py: E225, E261, E302, E402
219+
examples/pyplots/whats_new_98_4_fill_between.py: E225, E402
220+
examples/pyplots/whats_new_98_4_legend.py: E228, E402
221+
examples/pyplots/whats_new_99_axes_grid.py: E402
222+
examples/pyplots/whats_new_99_mplot3d.py: E402
223+
examples/pyplots/whats_new_99_spines.py: E231, E261, E402
224+
examples/recipes/placing_text_boxes.py: E501
225+
examples/scales/power_norm.py: E402
226+
examples/shapes_and_collections/artist_reference.py: E402
227+
examples/shapes_and_collections/collections.py: E402
228+
examples/shapes_and_collections/compound_path.py: E402
229+
examples/shapes_and_collections/dolphin.py: E402, E501
230+
examples/shapes_and_collections/donut.py: E402
231+
examples/shapes_and_collections/ellipse_collection.py: E402
232+
examples/shapes_and_collections/ellipse_demo.py: E402
233+
examples/shapes_and_collections/fancybox_demo.py: E402
234+
examples/shapes_and_collections/hatch_demo.py: E402
235+
examples/shapes_and_collections/line_collection.py: E402
236+
examples/shapes_and_collections/marker_path.py: E402
237+
examples/shapes_and_collections/patch_collection.py: E402
238+
examples/shapes_and_collections/path_patch.py: E402, E501
239+
examples/shapes_and_collections/quad_bezier.py: E402
240+
examples/shapes_and_collections/scatter.py: E402
241+
examples/showcase/firefox.py: E501
242+
examples/specialty_plots/anscombe.py: E402, E501
243+
examples/specialty_plots/radar_chart.py: E402
244+
examples/specialty_plots/sankey_basics.py: E402, E501
245+
examples/specialty_plots/sankey_links.py: E402
246+
examples/specialty_plots/sankey_rankine.py: E402
247+
examples/specialty_plots/skewt.py: E402
248+
examples/statistics/boxplot_demo.py: E501
249+
examples/style_sheets/bmh.py: E501
250+
examples/style_sheets/ggplot.py: E501
251+
examples/style_sheets/plot_solarizedlight2.py: E501
252+
examples/subplots_axes_and_figures/axes_margins.py: E402
253+
examples/subplots_axes_and_figures/axes_zoom_effect.py: E402
254+
examples/subplots_axes_and_figures/demo_constrained_layout.py: E402
255+
examples/subplots_axes_and_figures/demo_tight_layout.py: E402
256+
examples/subplots_axes_and_figures/two_scales.py: E402
257+
examples/tests/backend_driver_sgskip.py: E402, E501
258+
examples/text_labels_and_annotations/annotation_demo.py: E501
259+
examples/text_labels_and_annotations/custom_legends.py: E402
260+
examples/text_labels_and_annotations/font_family_rc_sgskip.py: E402
261+
examples/text_labels_and_annotations/font_file.py: E402
262+
examples/text_labels_and_annotations/legend.py: E402
263+
examples/text_labels_and_annotations/line_with_text.py: E402
264+
examples/text_labels_and_annotations/mathtext_asarray.py: E402
265+
examples/text_labels_and_annotations/tex_demo.py: E402
266+
examples/text_labels_and_annotations/watermark_text.py: E402
267+
examples/ticks_and_spines/auto_ticks.py: E501
268+
examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py: E402
269+
examples/user_interfaces/embedding_in_gtk3_sgskip.py: E402
270+
examples/user_interfaces/embedding_in_qt_sgskip.py: E402
271+
examples/user_interfaces/embedding_in_wx2_sgskip.py: E501
272+
examples/user_interfaces/embedding_in_wx3_sgskip.py: E501
273+
examples/user_interfaces/embedding_in_wx4_sgskip.py: E501
274+
examples/user_interfaces/embedding_in_wx5_sgskip.py: E501
275+
examples/user_interfaces/embedding_webagg_sgskip.py: E501
276+
examples/user_interfaces/gtk_spreadsheet_sgskip.py: E402
277+
examples/user_interfaces/mathtext_wx_sgskip.py: E402, E501
278+
examples/user_interfaces/mpl_with_glade3_sgskip.py: E402
279+
examples/user_interfaces/pylab_with_gtk_sgskip.py: E402, E501
280+
examples/user_interfaces/toolmanager_sgskip.py: E402
281+
examples/userdemo/custom_boxstyle01.py: E402
282+
examples/userdemo/pgf_preamble_sgskip.py: E402
283+
examples/userdemo/simple_annotate01.py: E501
284+
examples/widgets/rectangle_selector.py: E501

.travis.yml

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ env:
6464
- OPENBLAS_NUM_THREADS=1
6565
- PYTHONFAULTHANDLER=1
6666
- PYTEST_ADDOPTS="-rawR --maxfail=50 --timeout=300 --durations=25 --cov-report= --cov=lib -n $NPROC"
67-
- RUN_PEP8=
67+
- RUN_FLAKE8=
6868

6969
matrix:
7070
include:
@@ -78,8 +78,8 @@ matrix:
7878
- python: 3.6
7979
env:
8080
- DELETE_FONT_CACHE=1
81-
- PYTEST_ADDOPTS="$PYTEST_ADDOPTS --pep8"
8281
- EXTRAREQS='-r requirements/testing/travis36.txt'
82+
- RUN_FLAKE8=1
8383
- python: "nightly"
8484
env: PRE=--pre
8585
- os: osx
@@ -129,15 +129,15 @@ install:
129129
# install was successful by trying to import the toolkit (sometimes, the
130130
# install appears to be successful but shared libraries cannot be loaded at
131131
# runtime, so an actual import is a better check).
132-
python -mpip install cairocffi pgi &&
132+
python -mpip install --upgrade cairocffi>=0.8 pgi>=0.0.11.2 &&
133133
python -c 'import pgi as gi; gi.require_version("Gtk", "3.0"); from pgi.repository import Gtk' &&
134134
echo 'pgi is available' ||
135135
echo 'pgi is not available'
136-
python -mpip install pyqt5 &&
136+
python -mpip install --upgrade pyqt5 &&
137137
python -c 'import PyQt5.QtCore' &&
138138
echo 'PyQt5 is available' ||
139139
echo 'PyQt5 is not available'
140-
python -mpip install -U \
140+
python -mpip install --upgrade \
141141
-f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-14.04 \
142142
wxPython &&
143143
python -c 'import wx' &&
@@ -157,9 +157,17 @@ before_script: |
157157
rm -rf ~/.cache/matplotlib
158158
fi
159159
160-
script: |
161-
echo "Calling pytest with the following arguments: $PYTEST_ADDOPTS"
162-
python -mpytest
160+
script:
161+
# each script we want to run need to go in it's own section and the program you want
162+
# to fail travis need to be the last thing called
163+
- |
164+
echo "Calling pytest with the following arguments: $PYTEST_ADDOPTS"
165+
python -mpytest
166+
- |
167+
if [[ $RUN_FLAKE8 == 1 ]]; then
168+
flake8 --statistics && echo "Flake8 passed without any issues!"
169+
fi
170+
163171
164172
before_cache: |
165173
rm -rf $HOME/.cache/matplotlib/tex.cache

INSTALL.rst

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,20 +144,22 @@ Matplotlib requires the following dependencies:
144144
* `dateutil <https://pypi.python.org/pypi/python-dateutil>`_ (>= 2.1)
145145
* `kiwisolver <https://github.com/nucleic/kiwi>`_ (>= 1.0.0)
146146
* `pyparsing <https://pyparsing.wikispaces.com/>`_
147-
* `pytz <http://pytz.sourceforge.net/>`_
148147

149148
Optionally, you can also install a number of packages to enable better user
150149
interface toolkits. See :ref:`what-is-a-backend` for more details on the
151150
optional Matplotlib backends and the capabilities they provide.
152151

153-
* :term:`tk` (>= 8.3, != 8.6.0 or 8.6.1): for the TkAgg backend;
152+
* :term:`tk` (>= 8.3, != 8.6.0 or 8.6.1): for the Tk-based backends;
154153
* `PyQt4 <https://pypi.python.org/pypi/PyQt4>`_ (>= 4.4) or
155-
`PySide <https://pypi.python.org/pypi/PySide>`_: for the Qt4Agg backend;
156-
* `PyQt5 <https://pypi.python.org/pypi/PyQt5>`_: for the Qt5Agg backend;
157-
* :term:`wxpython` (>= 4): for the WX or WXAgg backend;
158-
* `cairocffi <https://cairocffi.readthedocs.io/en/latest/>`_ (>=0.8) or
154+
`PySide <https://pypi.python.org/pypi/PySide>`_: for the Qt4-based backends;
155+
* `PyQt5 <https://pypi.python.org/pypi/PyQt5>`_: for the Qt5-based backends;
156+
* `PyGObject <https://pypi.org/project/PyGObject/>`_ or
157+
`pgi <https://pypi.org/project/pgi/>`_ (>= 0.0.11.2): for the GTK3-based
158+
backends;
159+
* :term:`wxpython` (>= 4): for the WX-based backends;
160+
* `cairocffi <https://cairocffi.readthedocs.io/en/latest/>`_ (>= 0.8) or
159161
`pycairo <https://pypi.python.org/pypi/pycairo>`_: for the cairo-based
160-
backends (the latter is required for GTK3Cairo);
162+
backends;
161163
* `Tornado <https://pypi.python.org/pypi/tornado>`_: for the WebAgg backend;
162164

163165
For better support of animation output format and image file formats, LaTeX,
@@ -167,7 +169,7 @@ etc., you can install the following:
167169
<https://libav.org/avconv.html>`_: for saving movies;
168170
* `ImageMagick <https://www.imagemagick.org/script/index.php>`_: for saving
169171
animated gifs;
170-
* `Pillow <https://pillow.readthedocs.io/en/latest/>`_ (>=3.4): for a larger
172+
* `Pillow <https://pillow.readthedocs.io/en/latest/>`_ (>= 3.4): for a larger
171173
selection of image file formats: JPEG, BMP, and TIFF image files;
172174
* `LaTeX <https://miktex.org/>`_ and `GhostScript
173175
<https://ghostscript.com/download/>`_ (for rendering text with LaTeX).

0 commit comments

Comments
 (0)