Title: Investigate alternative svg renderers for the test suite · Issue #8242 · matplotlib/matplotlib · GitHub
Open Graph Title: Investigate alternative svg renderers for the test suite · Issue #8242 · matplotlib/matplotlib
X Title: Investigate alternative svg renderers for the test suite · Issue #8242 · matplotlib/matplotlib
Description: Using rsvg as SVG renderer in the tests is much faster than using inkscape: with the following simple patch: diff --git a/lib/matplotlib/testing/compare.py b/lib/matplotlib/testing/compare.py index ab2f26fc0..a90a75901 100644 --- a/lib/m...
Open Graph Description: Using rsvg as SVG renderer in the tests is much faster than using inkscape: with the following simple patch: diff --git a/lib/matplotlib/testing/compare.py b/lib/matplotlib/testing/compare.py index...
X Description: Using rsvg as SVG renderer in the tests is much faster than using inkscape: with the following simple patch: diff --git a/lib/matplotlib/testing/compare.py b/lib/matplotlib/testing/compare.py index...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/8242
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Investigate alternative svg renderers for the test suite","articleBody":"Using rsvg as SVG renderer in the tests is *much* faster than using inkscape: with the following simple patch:\r\n```\r\ndiff --git a/lib/matplotlib/testing/compare.py b/lib/matplotlib/testing/compare.py\r\nindex ab2f26fc0..a90a75901 100644\r\n--- a/lib/matplotlib/testing/compare.py\r\n+++ b/lib/matplotlib/testing/compare.py\r\n@@ -138,9 +138,16 @@ def _update_converter():\r\n converter['eps'] = make_external_conversion_command(cmd)\r\n \r\n if matplotlib.checkdep_inkscape() is not None:\r\n- def cmd(old, new):\r\n- return [str('inkscape'), '-z', old, '--export-png', new]\r\n- converter['svg'] = make_external_conversion_command(cmd)\r\n+ import cairo\r\n+ from gi.repository import Rsvg\r\n+ def convert(old, new):\r\n+ svg = Rsvg.Handle().new_from_file(old)\r\n+ svg.set_dpi(96)\r\n+ surf = cairo.ImageSurface(\r\n+ cairo.FORMAT_ARGB32, svg.props.width, svg.props.height)\r\n+ svg.render_cairo(cairo.Context(surf))\r\n+ surf.write_to_png(new)\r\n+ converter['svg'] = convert\r\n \r\n \r\n #: A dictionary that maps filename extensions to functions which\r\n```\r\nthe entire test suite runs in 594s instead of 787s on my laptop. (There's also a ton of image comparison failures, but that's because my cache (which I did not regenerate in either case) is generated by inkscape and there seems to be pixel-level differences between the two renderers -- but that won't be a problem in practice as all we'll want to do is to compare svgs rendered by the same engine.)\r\n\r\nThere are also a few constructs that are not correctly rendered by rsvg but perhaps it's a good opportunity to try to generate slightly less demanding svgs... and again in any case we're still comparing the same misrendering by the same engine :-)\r\n\r\nThe real problem right now is whether there is an easy way to install rsvg on Windows. There is an official .exe installer on Windows (https://wiki.gnome.org/action/show/Projects/PyGObject?action=show\u0026redirect=PyGObject) which I haven't tried; I haven't found a pip package; there are a few user-submitted conda packages (search for pygobject/pygobject3) but none of them seem to work on Py3.\r\n\r\nAlternatively, I have tried two other renderers: QtSVG (http://doc.qt.io/qt-5/qtsvg-index.html) and cairosvg (http://cairosvg.org/, which only supports Py3, but could be used as a standalone script that lives in its own environment, similarly to inkscape). QtSVG is a very, very limited SVG renderer so I'd rather not use it (unless we can make our svg output compatible with it); cairosvg seems to freeze(?) on at least one of our constructs.","author":{"url":"https://github.com/anntzer","@type":"Person","name":"anntzer"},"datePublished":"2017-03-08T20:39:36.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":8},"url":"https://github.com/8242/matplotlib/issues/8242"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:00d89f40-2a9d-5c90-b32a-4ba864217343 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B34E:360352:49D924:64A2E8:6A555453 |
| html-safe-nonce | c36d1c4196fa552f55745f7a514c49f5ec285cf1fd08e19d79fe94b5e93e4cef |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMzRFOjM2MDM1Mjo0OUQ5MjQ6NjRBMkU4OjZBNTU1NDUzIiwidmlzaXRvcl9pZCI6IjEzMDcyNTQ4Mjk2ODU3NTcwMTEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 1a08dd701adedf854751fcf742af3dc617a03d1310214c8cef4d0854f3d8250b |
| hovercard-subject-tag | issue:212849992 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/8242/issue_layout |
| twitter:image | https://opengraph.githubassets.com/0ecede27e08caf14ad87fee07300f0023c832b4b335de2971bcc25136ec66c89/matplotlib/matplotlib/issues/8242 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/0ecede27e08caf14ad87fee07300f0023c832b4b335de2971bcc25136ec66c89/matplotlib/matplotlib/issues/8242 |
| og:image:alt | Using rsvg as SVG renderer in the tests is much faster than using inkscape: with the following simple patch: diff --git a/lib/matplotlib/testing/compare.py b/lib/matplotlib/testing/compare.py index... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | anntzer |
| hostname | github.com |
| expected-hostname | github.com |
| None | cd9eea424140838b22e9eabd53d92b5702617ddd6d76efcd3a37f08d44309ca5 |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 3084b9f587e8f1e19803bbe0c77ac77ce3c99c5c |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width