{"action":"created","comment":{"url":"https://api.github.com/repos/matplotlib/matplotlib/pulls/comments/26892283","id":26892283,"diff_hunk":"@@ -0,0 +1,927 @@\n+\"\"\"\n+Abstract base classes define the primitives for Tools.\n+These tools are used by `NavigationBase`\n+\n+:class:`ToolBase`\n+    Simple stateless tool\n+\n+:class:`ToolToggleBase`\n+    Tool that has two states, only one Toggle tool can be\n+    active at any given time for the same `Navigation`\n+\"\"\"\n+\n+\n+from matplotlib import rcParams\n+from matplotlib._pylab_helpers import Gcf\n+import matplotlib.cbook as cbook\n+from weakref import WeakKeyDictionary\n+import numpy as np\n+\n+\n+class Cursors(object):\n+    \"\"\"Simple namespace for cursor reference\"\"\"\n+    HAND, POINTER, SELECT_REGION, MOVE = list(range(4))\n+cursors = Cursors()\n+\n+\n+class ToolBase(object):\n+    \"\"\"Base tool class\n+\n+    A base tool, only implements `trigger` method or not method at all.\n+    The tool is instantiated by `matplotlib.backend_bases.NavigationBase`\n+\n+    Attributes\n+    ----------\n+    navigation: `matplotlib.backend_bases.NavigationBase`\n+        Navigation that controls this Tool\n+    figure: `FigureCanvas`\n+        Figure instance that is affected by this Tool\n+    name: String\n+        Used as **Id** of the tool, has to be unique among tools of the same\n+        Navigation\n+    \"\"\"\n+\n+    keymap = None\n+    \"\"\"Keymap to associate with this tool\n+\n+    **String**: List of comma separated keys that will be used to call this\n+    tool when the keypress event of *self.figure.canvas* is emited\n+    \"\"\"\n+\n+    description = None\n+    \"\"\"Description of the Tool\n+\n+    **String**: If the Tool is included in the Toolbar this text is used\n+    as a Tooltip\n+    \"\"\"\n+\n+    image = None\n+    \"\"\"Filename of the image\n+\n+    **String**: Filename of the image to use in the toolbar. If None, the\n+    `name` is used as a label in the toolbar button\n+    \"\"\"\n+\n+    def __init__(self, navigation, name):\n+        self._name = name\n+        self.figure = None\n+        self.navigation = navigation\n+        self.set_figure(navigation.canvas.figure)\n+\n+    def trigger(self, sender, event, data=None):\n+        \"\"\"Called when this tool gets used\n+\n+        This method is called by\n+        `matplotlib.backend_bases.NavigationBase.tool_trigger_event`\n+\n+        Parameters\n+        ----------\n+        event : `Event`\n+            The Canvas event that caused this tool to be called\n+        sender: object\n+            Object that requested the tool to be triggered\n+        data: object\n+            Extra data\n+        \"\"\"\n+\n+        pass\n+\n+    def set_figure(self, figure):\n+        \"\"\"Set the figure\n+\n+        Set the figure to be affected by this tool\n+\n+        Parameters\n+        ----------\n+        figure : `Figure`\n+        \"\"\"\n+\n+        self.figure = figure\n+\n+    @property\n+    def name(self):\n+        \"\"\"Tool Id\"\"\"\n+        return self._name\n+\n+    def destroy(self):\n+        \"\"\"Destroy the tool\n+\n+        This method is called when the tool is removed by\n+        `matplotlib.backend_bases.NavigationBase.remove_tool`\n+        \"\"\"\n+        pass\n+\n+\n+class ToolToggleBase(ToolBase):\n+    \"\"\"Toggleable tool\n+\n+    Every time it is triggered, it switches between enable and disable\n+    \"\"\"\n+\n+    radio_group = None\n+    \"\"\"Attribute to group 'radio' like tools (mutually exclusive)\n+\n+    **String** that identifies the group or **None** if not belonging to a\n+    group\n+    \"\"\"\n+\n+    cursor = None\n+    \"\"\"Cursor to use when the tool is active\"\"\"\n+\n+    def __init__(self, *args, **kwargs):\n+        ToolBase.__init__(self, *args, **kwargs)\n+        self._toggled = False\n+\n+    def trigger(self, sender, event, data=None):\n+        \"\"\"Calls `enable` or `disable` based on `toggled` value\"\"\"\n+        if self._toggled:\n+            self.disable(event)\n+        else:\n+            self.enable(event)\n+        self._toggled = not self._toggled\n+\n+    def enable(self, event=None):\n+        \"\"\"Enable the toggle tool\n+\n+        `trigger` calls this method when `toggled` is False\n+        \"\"\"\n+\n+        pass\n+\n+    def disable(self, event=None):\n+        \"\"\"Disable the toggle tool\n+\n+        `trigger` call this methond when `toggled` is True.\n+\n+        This can happen in different circumstances\n+\n+        * Click on the toolbar tool button\n+        * Call to `matplotlib.backend_bases.NavigationBase.tool_trigger_event`\n+        * Another `ToolToggleBase` derived tool is triggered\n+          (from the same `Navigation`)\n+        \"\"\"\n+\n+        pass\n+\n+    @property\n+    def toggled(self):\n+        \"\"\"State of the toggled tool\"\"\"\n+\n+        return self._toggled\n+\n+\n+class SetCursorBase(ToolBase):\n+    \"\"\"Change to the current cursor while inaxes\n+\n+    This tool, keeps track of all `ToolToggleBase` derived tools, and calls\n+    set_cursor when a tool gets triggered\n+    \"\"\"\n+    def __init__(self, *args, **kwargs):\n+        ToolBase.__init__(self, *args, **kwargs)\n+        self._idDrag = self.figure.canvas.mpl_connect(\n+            'motion_notify_event', self._set_cursor_cbk)\n+        self._cursor = None\n+        self._default_cursor = cursors.POINTER\n+        self._last_cursor = self._default_cursor\n+        self.navigation.nav_connect('tool_added_event', self._add_tool_cbk)\n+\n+        # process current tools\n+        for tool in self.navigation.tools.values():\n+            self._add_tool(tool)\n+\n+    def _tool_trigger_cbk(self, event):\n+        if event.tool.toggled:\n+            self._cursor = event.tool.cursor\n+        else:\n+            self._cursor = None\n+\n+        self._set_cursor_cbk(event.canvasevent)\n+\n+    # If the tool is toggleable, set the cursor when the tool is triggered","path":"lib/matplotlib/backend_tools.py","position":200,"original_position":200,"commit_id":"a8608d954c853ab60b0ab731ed2e695a0694c569","original_commit_id":"a8608d954c853ab60b0ab731ed2e695a0694c569","user":{"login":"WeatherGod","id":291576,"avatar_url":"https://avatars.githubusercontent.com/u/291576?v=3","gravatar_id":"","url":"https://api.github.com/users/WeatherGod","html_url":"https://github.com/WeatherGod","followers_url":"https://api.github.com/users/WeatherGod/followers","following_url":"https://api.github.com/users/WeatherGod/following{/other_user}","gists_url":"https://api.github.com/users/WeatherGod/gists{/gist_id}","starred_url":"https://api.github.com/users/WeatherGod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WeatherGod/subscriptions","organizations_url":"https://api.github.com/users/WeatherGod/orgs","repos_url":"https://api.github.com/users/WeatherGod/repos","events_url":"https://api.github.com/users/WeatherGod/events{/privacy}","received_events_url":"https://api.github.com/users/WeatherGod/received_events","type":"User","site_admin":false},"body":"These comments above the methods should be docstrings","created_at":"2015-03-21T14:31:47Z","updated_at":"2015-03-21T14:31:47Z","html_url":"https://github.com/matplotlib/matplotlib/pull/3652#discussion_r26892283","pull_request_url":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652","_links":{"self":{"href":"https://api.github.com/repos/matplotlib/matplotlib/pulls/comments/26892283"},"html":{"href":"https://github.com/matplotlib/matplotlib/pull/3652#discussion_r26892283"},"pull_request":{"href":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652"}}},"pull_request":{"url":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652","id":22889335,"html_url":"https://github.com/matplotlib/matplotlib/pull/3652","diff_url":"https://github.com/matplotlib/matplotlib/pull/3652.diff","patch_url":"https://github.com/matplotlib/matplotlib/pull/3652.patch","issue_url":"https://api.github.com/repos/matplotlib/matplotlib/issues/3652","number":3652,"state":"open","locked":false,"title":"MEP22: Navigation by events","user":{"login":"fariza","id":1490153,"avatar_url":"https://avatars.githubusercontent.com/u/1490153?v=3","gravatar_id":"","url":"https://api.github.com/users/fariza","html_url":"https://github.com/fariza","followers_url":"https://api.github.com/users/fariza/followers","following_url":"https://api.github.com/users/fariza/following{/other_user}","gists_url":"https://api.github.com/users/fariza/gists{/gist_id}","starred_url":"https://api.github.com/users/fariza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fariza/subscriptions","organizations_url":"https://api.github.com/users/fariza/orgs","repos_url":"https://api.github.com/users/fariza/repos","events_url":"https://api.github.com/users/fariza/events{/privacy}","received_events_url":"https://api.github.com/users/fariza/received_events","type":"User","site_admin":false},"body":"This PR is the implementation of MEP22, https://github.com/matplotlib/matplotlib/wiki/Mep22#implementation \r\n\r\nThis it supersedes the https://github.com/matplotlib/matplotlib/pull/2759\r\n\r\n`Toolbar` has been relegated as `listener/emiter` of events that get dispatched to the `Tools` by `Navigation`.\r\n\r\nThe `toolbar` is easily reconfigurable at running time. new tools can be `created/added/removed` without modificaion of the backend code.\r\n\r\n\r\n**Example**\r\n` examples/user_interfaces/navigation.py`\r\n","created_at":"2014-10-16T21:45:29Z","updated_at":"2015-03-21T14:31:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cfcd285e444b7a51c74e8c0a6ecacbd6b2a4847b","assignee":null,"milestone":{"url":"https://api.github.com/repos/matplotlib/matplotlib/milestones/18","html_url":"https://github.com/matplotlib/matplotlib/milestones/next%20point%20release","labels_url":"https://api.github.com/repos/matplotlib/matplotlib/milestones/18/labels","id":970105,"number":18,"title":"next point release","description":"Next minor release.","creator":{"login":"tacaswell","id":199813,"avatar_url":"https://avatars.githubusercontent.com/u/199813?v=3","gravatar_id":"","url":"https://api.github.com/users/tacaswell","html_url":"https://github.com/tacaswell","followers_url":"https://api.github.com/users/tacaswell/followers","following_url":"https://api.github.com/users/tacaswell/following{/other_user}","gists_url":"https://api.github.com/users/tacaswell/gists{/gist_id}","starred_url":"https://api.github.com/users/tacaswell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tacaswell/subscriptions","organizations_url":"https://api.github.com/users/tacaswell/orgs","repos_url":"https://api.github.com/users/tacaswell/repos","events_url":"https://api.github.com/users/tacaswell/events{/privacy}","received_events_url":"https://api.github.com/users/tacaswell/received_events","type":"User","site_admin":false},"open_issues":173,"closed_issues":75,"state":"open","created_at":"2015-02-07T21:22:30Z","updated_at":"2015-03-21T05:06:44Z","due_on":"2015-07-06T04:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652/commits","review_comments_url":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652/comments","review_comment_url":"https://api.github.com/repos/matplotlib/matplotlib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/matplotlib/matplotlib/issues/3652/comments","statuses_url":"https://api.github.com/repos/matplotlib/matplotlib/statuses/a8608d954c853ab60b0ab731ed2e695a0694c569","head":{"label":"fariza:navigation-by-events","ref":"navigation-by-events","sha":"a8608d954c853ab60b0ab731ed2e695a0694c569","user":{"login":"fariza","id":1490153,"avatar_url":"https://avatars.githubusercontent.com/u/1490153?v=3","gravatar_id":"","url":"https://api.github.com/users/fariza","html_url":"https://github.com/fariza","followers_url":"https://api.github.com/users/fariza/followers","following_url":"https://api.github.com/users/fariza/following{/other_user}","gists_url":"https://api.github.com/users/fariza/gists{/gist_id}","starred_url":"https://api.github.com/users/fariza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fariza/subscriptions","organizations_url":"https://api.github.com/users/fariza/orgs","repos_url":"https://api.github.com/users/fariza/repos","events_url":"https://api.github.com/users/fariza/events{/privacy}","received_events_url":"https://api.github.com/users/fariza/received_events","type":"User","site_admin":false},"repo":{"id":12761338,"name":"matplotlib","full_name":"fariza/matplotlib","owner":{"login":"fariza","id":1490153,"avatar_url":"https://avatars.githubusercontent.com/u/1490153?v=3","gravatar_id":"","url":"https://api.github.com/users/fariza","html_url":"https://github.com/fariza","followers_url":"https://api.github.com/users/fariza/followers","following_url":"https://api.github.com/users/fariza/following{/other_user}","gists_url":"https://api.github.com/users/fariza/gists{/gist_id}","starred_url":"https://api.github.com/users/fariza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fariza/subscriptions","organizations_url":"https://api.github.com/users/fariza/orgs","repos_url":"https://api.github.com/users/fariza/repos","events_url":"https://api.github.com/users/fariza/events{/privacy}","received_events_url":"https://api.github.com/users/fariza/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fariza/matplotlib","description":"matplotlib: plotting with Python","fork":true,"url":"https://api.github.com/repos/fariza/matplotlib","forks_url":"https://api.github.com/repos/fariza/matplotlib/forks","keys_url":"https://api.github.com/repos/fariza/matplotlib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fariza/matplotlib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fariza/matplotlib/teams","hooks_url":"https://api.github.com/repos/fariza/matplotlib/hooks","issue_events_url":"https://api.github.com/repos/fariza/matplotlib/issues/events{/number}","events_url":"https://api.github.com/repos/fariza/matplotlib/events","assignees_url":"https://api.github.com/repos/fariza/matplotlib/assignees{/user}","branches_url":"https://api.github.com/repos/fariza/matplotlib/branches{/branch}","tags_url":"https://api.github.com/repos/fariza/matplotlib/tags","blobs_url":"https://api.github.com/repos/fariza/matplotlib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fariza/matplotlib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fariza/matplotlib/git/refs{/sha}","trees_url":"https://api.github.com/repos/fariza/matplotlib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fariza/matplotlib/statuses/{sha}","languages_url":"https://api.github.com/repos/fariza/matplotlib/languages","stargazers_url":"https://api.github.com/repos/fariza/matplotlib/stargazers","contributors_url":"https://api.github.com/repos/fariza/matplotlib/contributors","subscribers_url":"https://api.github.com/repos/fariza/matplotlib/subscribers","subscription_url":"https://api.github.com/repos/fariza/matplotlib/subscription","commits_url":"https://api.github.com/repos/fariza/matplotlib/commits{/sha}","git_commits_url":"https://api.github.com/repos/fariza/matplotlib/git/commits{/sha}","comments_url":"https://api.github.com/repos/fariza/matplotlib/comments{/number}","issue_comment_url":"https://api.github.com/repos/fariza/matplotlib/issues/comments{/number}","contents_url":"https://api.github.com/repos/fariza/matplotlib/contents/{+path}","compare_url":"https://api.github.com/repos/fariza/matplotlib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fariza/matplotlib/merges","archive_url":"https://api.github.com/repos/fariza/matplotlib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fariza/matplotlib/downloads","issues_url":"https://api.github.com/repos/fariza/matplotlib/issues{/number}","pulls_url":"https://api.github.com/repos/fariza/matplotlib/pulls{/number}","milestones_url":"https://api.github.com/repos/fariza/matplotlib/milestones{/number}","notifications_url":"https://api.github.com/repos/fariza/matplotlib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fariza/matplotlib/labels{/name}","releases_url":"https://api.github.com/repos/fariza/matplotlib/releases{/id}","created_at":"2013-09-11T16:28:02Z","updated_at":"2015-02-13T19:38:54Z","pushed_at":"2015-02-26T19:59:23Z","git_url":"git://github.com/fariza/matplotlib.git","ssh_url":"git@github.com:fariza/matplotlib.git","clone_url":"https://github.com/fariza/matplotlib.git","svn_url":"https://github.com/fariza/matplotlib","homepage":"http://matplotlib.org/","size":201870,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":6,"forks":1,"open_issues":6,"watchers":1,"default_branch":"master"}},"base":{"label":"matplotlib:master","ref":"master","sha":"8f104704f2ead0d5dc2d150deffc85287697280a","user":{"login":"matplotlib","id":215947,"avatar_url":"https://avatars.githubusercontent.com/u/215947?v=3","gravatar_id":"","url":"https://api.github.com/users/matplotlib","html_url":"https://github.com/matplotlib","followers_url":"https://api.github.com/users/matplotlib/followers","following_url":"https://api.github.com/users/matplotlib/following{/other_user}","gists_url":"https://api.github.com/users/matplotlib/gists{/gist_id}","starred_url":"https://api.github.com/users/matplotlib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matplotlib/subscriptions","organizations_url":"https://api.github.com/users/matplotlib/orgs","repos_url":"https://api.github.com/users/matplotlib/repos","events_url":"https://api.github.com/users/matplotlib/events{/privacy}","received_events_url":"https://api.github.com/users/matplotlib/received_events","type":"Organization","site_admin":false},"repo":{"id":1385122,"name":"matplotlib","full_name":"matplotlib/matplotlib","owner":{"login":"matplotlib","id":215947,"avatar_url":"https://avatars.githubusercontent.com/u/215947?v=3","gravatar_id":"","url":"https://api.github.com/users/matplotlib","html_url":"https://github.com/matplotlib","followers_url":"https://api.github.com/users/matplotlib/followers","following_url":"https://api.github.com/users/matplotlib/following{/other_user}","gists_url":"https://api.github.com/users/matplotlib/gists{/gist_id}","starred_url":"https://api.github.com/users/matplotlib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matplotlib/subscriptions","organizations_url":"https://api.github.com/users/matplotlib/orgs","repos_url":"https://api.github.com/users/matplotlib/repos","events_url":"https://api.github.com/users/matplotlib/events{/privacy}","received_events_url":"https://api.github.com/users/matplotlib/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/matplotlib/matplotlib","description":"matplotlib: plotting with Python","fork":false,"url":"https://api.github.com/repos/matplotlib/matplotlib","forks_url":"https://api.github.com/repos/matplotlib/matplotlib/forks","keys_url":"https://api.github.com/repos/matplotlib/matplotlib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matplotlib/matplotlib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matplotlib/matplotlib/teams","hooks_url":"https://api.github.com/repos/matplotlib/matplotlib/hooks","issue_events_url":"https://api.github.com/repos/matplotlib/matplotlib/issues/events{/number}","events_url":"https://api.github.com/repos/matplotlib/matplotlib/events","assignees_url":"https://api.github.com/repos/matplotlib/matplotlib/assignees{/user}","branches_url":"https://api.github.com/repos/matplotlib/matplotlib/branches{/branch}","tags_url":"https://api.github.com/repos/matplotlib/matplotlib/tags","blobs_url":"https://api.github.com/repos/matplotlib/matplotlib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matplotlib/matplotlib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matplotlib/matplotlib/git/refs{/sha}","trees_url":"https://api.github.com/repos/matplotlib/matplotlib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matplotlib/matplotlib/statuses/{sha}","languages_url":"https://api.github.com/repos/matplotlib/matplotlib/languages","stargazers_url":"https://api.github.com/repos/matplotlib/matplotlib/stargazers","contributors_url":"https://api.github.com/repos/matplotlib/matplotlib/contributors","subscribers_url":"https://api.github.com/repos/matplotlib/matplotlib/subscribers","subscription_url":"https://api.github.com/repos/matplotlib/matplotlib/subscription","commits_url":"https://api.github.com/repos/matplotlib/matplotlib/commits{/sha}","git_commits_url":"https://api.github.com/repos/matplotlib/matplotlib/git/commits{/sha}","comments_url":"https://api.github.com/repos/matplotlib/matplotlib/comments{/number}","issue_comment_url":"https://api.github.com/repos/matplotlib/matplotlib/issues/comments{/number}","contents_url":"https://api.github.com/repos/matplotlib/matplotlib/contents/{+path}","compare_url":"https://api.github.com/repos/matplotlib/matplotlib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matplotlib/matplotlib/merges","archive_url":"https://api.github.com/repos/matplotlib/matplotlib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matplotlib/matplotlib/downloads","issues_url":"https://api.github.com/repos/matplotlib/matplotlib/issues{/number}","pulls_url":"https://api.github.com/repos/matplotlib/matplotlib/pulls{/number}","milestones_url":"https://api.github.com/repos/matplotlib/matplotlib/milestones{/number}","notifications_url":"https://api.github.com/repos/matplotlib/matplotlib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matplotlib/matplotlib/labels{/name}","releases_url":"https://api.github.com/repos/matplotlib/matplotlib/releases{/id}","created_at":"2011-02-19T03:17:12Z","updated_at":"2015-03-21T08:21:29Z","pushed_at":"2015-03-21T04:36:30Z","git_url":"git://github.com/matplotlib/matplotlib.git","ssh_url":"git@github.com:matplotlib/matplotlib.git","clone_url":"https://github.com/matplotlib/matplotlib.git","svn_url":"https://github.com/matplotlib/matplotlib","homepage":"http://matplotlib.org/","size":262963,"stargazers_count":2350,"watchers_count":2350,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1183,"mirror_url":null,"open_issues_count":467,"forks":1183,"open_issues":467,"watchers":2350,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652"},"html":{"href":"https://github.com/matplotlib/matplotlib/pull/3652"},"issue":{"href":"https://api.github.com/repos/matplotlib/matplotlib/issues/3652"},"comments":{"href":"https://api.github.com/repos/matplotlib/matplotlib/issues/3652/comments"},"review_comments":{"href":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652/comments"},"review_comment":{"href":"https://api.github.com/repos/matplotlib/matplotlib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/matplotlib/matplotlib/pulls/3652/commits"},"statuses":{"href":"https://api.github.com/repos/matplotlib/matplotlib/statuses/a8608d954c853ab60b0ab731ed2e695a0694c569"}}}}