René's URL Explorer Experiment


Title: Backend switching by anntzer · Pull Request #9795 · matplotlib/matplotlib · GitHub

Open Graph Title: Backend switching by anntzer · Pull Request #9795 · matplotlib/matplotlib

X Title: Backend switching by anntzer · Pull Request #9795 · matplotlib/matplotlib

Description: This is the followup to #9551 (backend loading refactor), and includes it (so it would make sense for #9551 to be merged first). This PR removes the ambiguous behavior of matplotlib.use, which was, up to now, documented as follows: This function must be called before importing pyplot for the first time; or, if you are not using pyplot, it must be called before importing matplotlib.backends. If warn is True, a warning is issued if you try and call this after pylab or pyplot have been loaded. "In certain black magic use cases, e.g. pyplot.switch_backend, we are doing the reloading necessary to make the backend switch work (in some cases, e.g., pure image backends) so one can set warn=False to suppress the warnings.) Instead, matplotlib.use now works just fine as long as an event loop has not started yet (i.e. an interactive window popped up), or when switching to a noninteractive backend, or to an interactive backend compatible with the current event loop (e.g. gtk3agg -> gtk3cairo); in all other cases, an exception is raised. This means, for example, that one can write from matplotlib import pyplot as plt; plt.rcParams["backend"] = "foo"; ... instead of having to do a separate import of matplotlib. Moreover, it is now possible to set rcParams["backend"] to a list of candidate backends; they will simply be tested one at a time until one succeeds. If pyplot is already loaded, the value in rcParams["backend"] is immediately replaced by the successful candidate. If pyplot is not loaded yet, rcParams["backend"] will keep hold of the list of candidates until pyplot is loaded. This is a documented change of behavior (users should import pyplot to force backend resolution). (Alternatively the list could be shoved into a new, separate rcParam, but little would be gained because rcParams["backend"] would then hold an incorrect value until backend resolution). Another change of behavior is that the matplotlib.backends.backend global variable has been removed, again in favor of rcParams["backend"] as single truth point: it was too difficult to properly keep matplotlib.backends.backend in sync, especially at import time when that module may not have been imported yet. (Exception: I don't have a Mac available to figure out the relevant fixes for the OSX backend, but hopefully another contributor can help here. See _get_current_event_loop.) Edit: Now also working on OSX, see comment below. A major advantage of such a scheme is that we can now just ship a default matplotlibrc which lists all buitin backends in preference order (backend: osx, qt5agg, qt4agg, gtk3agg, ...). Currently, this list is evaluated at build time (by testing which GUI toolkit is importable), which causes two major problems: 1) the import of the GUI toolkits need to happen in separate processes, which means that setup.py relies on multiprocessing(!); for example, this appears to confuse conda-build (see comment in ci/conda_recipe/meta.yaml); 2) the built list is useless anyways unless 1) the end user is doing the build, rather than a central packager (the end user may have a different list of installed GUI toolkits...) and 2) the end user never adds or removes a new GUI toolkit. Here, I can instead completely strip out the relevant part of setupext.py, greatly simplifying it. The backend_fallback rcParam likewise becomes obsolete, although this PR does not remove it (this rcParam can easily go through a normal deprecation route). I also removed the interactive backends API docs because the shimming (to allow them to be imported in a headless buildbot) was insufficient to support this PR's implementation. Proposed fix at #9708 (comment). (But note that they were incomplete anyways...) Closes #3679, #6739, #8613, #9017 (comment); sort-of #3466 (which is perhaps more a doc issue...). Some comments to try clarifying the implementation: matplotlib.use only supports a single argument (not a list of candidate backends) because we want to keep use(...); rcdefaults() working: this implies that use(...) must overwrite the default backend (in rcParamsDefault, and likewise rcParamsOrig), to a single fixed value. setting multiple entries in rcParams["setup"] defers to pyplot.switch_backends, which itself defers to backends.pylab_setup. Once the correct candidate is found, backends.pylab_setup sets the single entry in rcParams["setup"].

Open Graph Description: This is the followup to #9551 (backend loading refactor), and includes it (so it would make sense for #9551 to be merged first). This PR removes the ambiguous behavior of matplotlib.use, which was,...

X Description: This is the followup to #9551 (backend loading refactor), and includes it (so it would make sense for #9551 to be merged first). This PR removes the ambiguous behavior of matplotlib.use, which was,...

Opengraph URL: https://github.com/matplotlib/matplotlib/pull/9795

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:f17b675c-b0d2-8da2-7c19-2d8e4cf5975b
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idE45A:39F98C:C19E5C:11950E2:6A54B9A3
html-safe-nonceb7e926a079d497a7c52898e40eb78e77d56592803346b80d98b5ed6ddf609534
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFNDVBOjM5Rjk4QzpDMTlFNUM6MTE5NTBFMjo2QTU0QjlBMyIsInZpc2l0b3JfaWQiOiI1NjM4MTQ5NTg3MjQ2Mjk5NTU1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmacd91bdf58e556483e6cf21ff280f2e475989edaff30996f4a86b67a5089cb283c
hovercard-subject-tagpull_request:152960954
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/matplotlib/matplotlib/pull/9795/files
twitter:imagehttps://avatars.githubusercontent.com/u/1322974?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/1322974?s=400&v=4
og:image:altThis is the followup to #9551 (backend loading refactor), and includes it (so it would make sense for #9551 to be merged first). This PR removes the ambiguous behavior of matplotlib.use, which was,...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git
octolytics-dimension-user_id215947
octolytics-dimension-user_loginmatplotlib
octolytics-dimension-repository_id1385122
octolytics-dimension-repository_nwomatplotlib/matplotlib
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1385122
octolytics-dimension-repository_network_root_nwomatplotlib/matplotlib
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release5d343e1152573ef294b28f54e4a14fb5fdb3a5a1
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/matplotlib/matplotlib/pull/9795/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fpull%2F9795%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fpull%2F9795%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=matplotlib%2Fmatplotlib
Reloadhttps://github.com/matplotlib/matplotlib/pull/9795/files
Reloadhttps://github.com/matplotlib/matplotlib/pull/9795/files
Reloadhttps://github.com/matplotlib/matplotlib/pull/9795/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/9795/files
matplotlib https://github.com/matplotlib
matplotlibhttps://github.com/matplotlib/matplotlib
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/9795/files
Notifications https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Fork 8.4k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Star 23k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Code https://github.com/matplotlib/matplotlib
Issues 1.1k https://github.com/matplotlib/matplotlib/issues
Pull requests 408 https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality 0 https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
Code https://github.com/matplotlib/matplotlib
Issues https://github.com/matplotlib/matplotlib/issues
Pull requests https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fmatplotlib%2Fmatplotlib%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib%2Fissues%2Fnew%2Fchoose
anntzerhttps://github.com/anntzer
matplotlib:masterhttps://github.com/matplotlib/matplotlib/tree/master
anntzer:backend-switchinghttps://github.com/anntzer/matplotlib/tree/backend-switching
Conversation 15 https://github.com/matplotlib/matplotlib/pull/9795
Commits 9 https://github.com/matplotlib/matplotlib/pull/9795/commits
Checks 0 https://github.com/matplotlib/matplotlib/pull/9795/checks
Files changed https://github.com/matplotlib/matplotlib/pull/9795/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/9795/files
Backend switching https://github.com/matplotlib/matplotlib/pull/9795/files#top
Show all changes 9 commits https://github.com/matplotlib/matplotlib/pull/9795/files
181cb70 Rework backend loading. anntzer Oct 23, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/181cb7001032d956d5ca251241f9f9a2a8df025c
5013d92 Backend switching "just works". anntzer Oct 24, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/5013d9204dd7827140fcac6352beaec4f2e9da4e
e840be5 Setting multiple candidate backends in rcParams. anntzer Oct 25, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/e840be54423ae6569fea6891fb24644b370452bc
75856e3 Don't bother with checking backends at setup time. anntzer Oct 25, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/75856e36cdb137225216c06b6d4b687b0276b1e8
2cdcc05 Fix backend detection in headless mode. anntzer Nov 17, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/2cdcc05b4f9b00e99b1653117de801fcdc2062c6
4542ebf Various test fixes. anntzer Nov 17, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/4542ebf3c2bbb9768e8d13ab5734ef0aef14d788
b8b826e Investigate test failures. anntzer Nov 18, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/b8b826e9126b977c18123ce98ee348ff8966d56c
fe82135 Also update the backend when doing rcParams["backend"] = "foo". anntzer Nov 21, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/fe82135a2df7e818ebf1bc62f0a24ab24e77dae5
1083c3c Add detection of OSX NSApp event loop. anntzer Dec 29, 2017 https://github.com/matplotlib/matplotlib/pull/9795/commits/1083c3c079048e5679536c3c0e50081f9af60045
Clear filters https://github.com/matplotlib/matplotlib/pull/9795/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/9795/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/9795/files
.gitignore https://github.com/matplotlib/matplotlib/pull/9795/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
20171025-AL-rcParams-backend.rst https://github.com/matplotlib/matplotlib/pull/9795/files#diff-76a41ab815ad0d7275b4dbe69a908933301d04ec6760754bdd19d5bb1059e58c
__init__.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
backend_bases.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-c21fb96269cbb9b214edf0c22981b347d8b710abaad167da678242ce8a539bb2
__init__.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-559b8efb2ddf4dbd1a00d6ecf535943f23a0e404239690c42a5e2dcfab83e8af
backend_gdk.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-a3fe203100b30e65b9296dc4d32863984e0112ca166d37ce5d8c0e4b962cf0f7
backend_gtk.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-bbfc56b758cef5337f5e60a8e23a173a95e38c8bd00af9b39743113260c0cfb6
backend_gtk3.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-b82974fdd131ae34e8637914da0f13f02f0ea4b5c57b7a8a5789a6faad7ebb5a
backend_macosx.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-fa0b9840f8945ba1ad40628be14617bd8d2f06a3e8c1e2791e5d8e60799488e0
backend_pdf.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-a81af365fe6fc7525d863103afd81bb197d895d19f9f9fb9814a0594fbeda75c
backend_ps.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-af28be596077d9f4ceda7df2faa04acb7a8e26e40f8f12adc0f04dede0493659
backend_qt4.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-53fcbee5462dd9858be4acd6e73579099ff6ff5d4b68544a31a8487c79867999
backend_qt5.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-b0827e7f471b84f27f061df2949c5a99e9acc4d9ae33384dd48c480ace7ec34c
backend_svg.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-3f7115dd582045209a3ca182f43c29176d759914b187efec3991883c2487009e
backend_tkagg.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-97c15ffa059168d74860fb4cdf2b6df74cd4f57fa11ddc3598e5148b22d51f46
backend_wx.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-30d70e32e6418d40a97e2afc459a0a2d55bc4f8905c6420c88ddb22478047523
qt_compat.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-1d841020f609631b01840aa0a48acaf3a90b9e0b06e4d868f02fed652291eabb
matplotlibrc https://github.com/matplotlib/matplotlib/pull/9795/files#diff-a0a69cd98f33d9fb3baf223328f438ec91c6e3051737cafe2afc85cf20268c79
pyplot.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-d1edb5a528e7423f485b24cac2083d05d365a19352f886bf15af3ef442bdda92
rcsetup.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-cbdeb0e4217c66c0eab3ff5027da14906cb705419722f8269bc9ccaadd2422b1
plot_directive.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-1565d78306cf72de5a28f4e2b196ee2cb09026d1f8aa2dc26178c3a47f3347b8
__init__.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-dff5590a4cf0f221159c2e5534cf8f989b5fa3204590c72fe3e38ec57501ac2e
test_backend_qt4.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-65789a66e2d6944c0a14e544d6dac7b2e23d33e58520a963e4cd62b4ce73bba0
test_backend_qt5.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-4821f948385fab7bda69fbd79678046ef51cfe497422fceb64afaa55cfd52de7
test_rcparams.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-35afbf0e26422afdfbd0c9f7c7d30f8a4d4e30072785b33e2914f08c7e3315bc
matplotlibrc.template https://github.com/matplotlib/matplotlib/pull/9795/files#diff-9eaf38a8a7b9d20d5719447762f60b98c69bb8503da6bfa40df69bd2844458cf
setup.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-60f61ab7a8d1910d86d9fda2261620314edcae5894d5aaa236b821c7256badd7
setupext.py https://github.com/matplotlib/matplotlib/pull/9795/files#diff-113dbd0ff67f6e8e817884a3e98962eec6856df1fb826932442487e374b827f0
_macosx.m https://github.com/matplotlib/matplotlib/pull/9795/files#diff-f8af2176752b51c29acf55ec5cc5d912f5459e19ed40559edcd78aaf7a6f6863
.gitignorehttps://github.com/matplotlib/matplotlib/pull/9795/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
View file https://github.com/anntzer/matplotlib/blob/1083c3c079048e5679536c3c0e50081f9af60045/.gitignore
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/matplotlib/matplotlib/pull/9795/{{ revealButtonHref }}
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
doc/api/api_changes/20171025-AL-rcParams-backend.rsthttps://github.com/matplotlib/matplotlib/pull/9795/files#diff-76a41ab815ad0d7275b4dbe69a908933301d04ec6760754bdd19d5bb1059e58c
View file https://github.com/anntzer/matplotlib/blob/1083c3c079048e5679536c3c0e50081f9af60045/doc/api/api_changes/20171025-AL-rcParams-backend.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/matplotlib/matplotlib/pull/9795/{{ revealButtonHref }}
lib/matplotlib/__init__.pyhttps://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
View file https://github.com/anntzer/matplotlib/blob/1083c3c079048e5679536c3c0e50081f9af60045/lib/matplotlib/__init__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/matplotlib/matplotlib/pull/9795/{{ revealButtonHref }}
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
https://github.com/matplotlib/matplotlib/pull/9795/files#diff-47339c58ad4d3bf37dfc5302e1c27245645ed38258d9b146a3f4d47274ef054d
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/9795/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.