GitHub PullRequestReviewCommentEvent at 2014-07-22 01:19:25
Repository: bokeh
Actor: damianavila
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/comments/15206674","id":15206674,"diff_hunk":"@@ -9,248 +9,290 @@\n \n \n def _loadAR():\n-  \"\"\"Utility to load abstract rendering.  Keeps the import from occuring\n-     unless you actually try to use AR.\n-\n-     This is more complex than just an import because\n-     AR is exposed as several backbone modules.  If the AR modules\n-     were directly imported, then errors would occur whenever ar_downsample\n-     is imported.  This casues error messages on python client side (where AR isn't\n-     actually needed) and on the server side even when AR isn't used.\n-     Since the AR modules are used throughout this module, just importing at\n-     use point inside this module is cumbersome.  Using 'globals()' and\n-     importlib allows this method to be called before any AR proper itmes are used\n-     but still have the imports appear at the module level.\n-  \"\"\"\n-  try:\n-    from importlib import import_module\n-\n-    globals()[\"numeric\"] = import_module(\"abstract_rendering.numeric\")\n-    globals()[\"general\"] = import_module(\"abstract_rendering.general\")\n-    globals()[\"infos\"] = import_module(\"abstract_rendering.infos\")\n-    globals()[\"ar\"] = import_module(\"abstract_rendering.core\")\n-    globals()[\"glyphset\"] = import_module(\"abstract_rendering.glyphset\")\n-\n-  except:\n-    print(\"\\n\\n-----------------------------------------------------------------------\")\n-    print(\"Error loading the abstract_rendering package.\\n\")\n-    print(\"To use the ar_downsample module, you must install the abstract rendering framework.\")\n-    print(\"This can be installed with conda, pip or by\")\n-    print(\"cloning from https://github.com/JosephCottam/AbstractRendering\")\n-    print(\"Questions and feedback can be directed to Joseph Cottam (jcottam@indiana.edu)\")\n-    print(\"-----------------------------------------------------------------------\\n\\n\")\n-    raise\n+    \"\"\"\n+    Utility to load abstract rendering.  Keeps the import from occuring\n+    unless you actually try to use AR.\n+\n+    This is more complex than just an import because\n+    AR is exposed as several backbone modules.  If the AR modules\n+    were directly imported, then errors would occur whenever ar_downsample\n+    is imported.  This casues error messages on python client side (where\n+    AR isn't actually needed) and on the server side even when AR isn't used.\n+    Since the AR modules are used throughout this module, just importing at\n+    use point inside this module is cumbersome.  Using 'globals()' and\n+    importlib allows this method to be called before any AR proper items\n+    are used but still have the imports appear at the module level.\n+    \"\"\"\n+    try:\n+        from importlib import import_module\n+        globals()[\"numeric\"] = import_module(\"abstract_rendering.numeric\")\n+        globals()[\"general\"] = import_module(\"abstract_rendering.general\")\n+        globals()[\"infos\"] = import_module(\"abstract_rendering.infos\")\n+        globals()[\"ar\"] = import_module(\"abstract_rendering.core\")\n+        globals()[\"glyphset\"] = import_module(\"abstract_rendering.glyphset\")\n+    except:\n+        print(\"\\n\\n----------------------------------------------------------\")\n+        print(\"Error loading the abstract_rendering package.\\n\")\n+        print(\"To use the ar_downsample module, you must install the\")\n+        print(\"abstract rendering framework.\")\n+        print(\"This can be installed with conda, pip or by\")\n+        print(\"cloning from https://github.com/JosephCottam/AbstractRendering\")\n+        print(\"Questions and feedback can be directed to\")\n+        print(\"Joseph Cottam (jcottam@indiana.edu)\")\n+        print(\"----------------------------------------------------------\\n\\n\")\n+        raise\n \n \n class Proxy(PlotObject):\n-  \"\"\"Proxy objects stand in for the abstract rendering (AR) configuration classes.\n-     Basically, the AR implementation doesn't rely on Bokeh, so\n-     it doesn't know about the properties BUT the Bokeh needs be able to\n-     construct/modify/inspect AR configurations.  Proxy classes hold the relevant\n-     parameters for constructing AR classes in a way that Bokeh can inspect.\n-     Furthermore, 'reify' produces an AR class from a proxy instance.\n-  \"\"\"\n-  def reify(self, **kwargs):\n-    raise NotImplementedError(\"Unipmlemented\")\n-\n-\n-#### Aggregators -------------\n-class Sum(Proxy): \n-  def reify(self, **kwargs):\n-    return numeric.Sum()\n-\n-class Count(Proxy): \n-  def reify(self, **kwargs):\n-    return numeric.Count()\n-\n-### Infos ---------\n+    \"\"\"\n+    Proxy objects stand in for the abstract rendering (AR) config classes.\n+    Basically, the AR implementation doesn't rely on Bokeh, so\n+    it doesn't know about the properties BUT the Bokeh needs be able to\n+    construct/modify/inspect AR configurations.  Proxy classes hold the\n+    relevant parameters for constructing AR classes in a way that Bokeh\n+    can inspect. Furthermore, 'reify' produces an AR class from a\n+    proxy instance.\n+    \"\"\"\n+    def reify(self, **kwargs):\n+        raise NotImplementedError(\"Unipmlemented\")\n+\n+\n+# ------ Aggregators -------------\n+class Sum(Proxy):\n+    def reify(self, **kwargs):\n+        return numeric.Sum()\n+\n+\n+class Count(Proxy):\n+    def reify(self, **kwargs):\n+        return numeric.Count()\n+\n+\n+# ------ Infos ---------\n class Const(Proxy):\n-  val = Any()\n-  def reify(self, **kwargs):\n-    return infos.const(self.val)\n+    val = Any()\n+\n+    def reify(self, **kwargs):\n+        return infos.const(self.val)\n \n-#### Transfers ---------\n \n-#Out types to support ---\n-# image -- grid of values\n-# rgb_image -- grid of colors\n-# poly_line -- multi-segment lines (for ISO contours...)\n+# ----- Transfers ---------\n+# Out types to support:\n+#   image -- grid of values\n+#   rgb_image -- grid of colors\n+#   poly_line -- multi-segment lines (for ISO contours...)\n \n class Transfer(Proxy):\n-  def __add__(self, other): \n-    return Seq(first=self, second=other)\n+    def __add__(self, other):\n+        return Seq(first=self, second=other)\n+\n \n class Seq(Transfer):\n-  first = Instance(Transfer)\n-  second = Instance(Transfer)\n+    first = Instance(Transfer)\n+    second = Instance(Transfer)\n \n-  def reify(self, **kwargs):\n-    return self.first.reify(**kwargs) + self.second.reify(**kwargs)\n+    def reify(self, **kwargs):\n+        return self.first.reify(**kwargs) + self.second.reify(**kwargs)\n+\n+    def __getattr__(self, name):\n+        if (name == 'out'):\n+            self.out = self.second.out\n+            return self.out\n+        else:\n+            raise AttributeError(name)\n \n-  def __getattr__(self, name):\n-    if (name == 'out'):\n-      self.out = self.second.out\n-      return self.out\n-    else:\n-      raise AttributeError(name)\n \n+class BinarySegment(Transfer):\n+    out = \"image\"\n+    high = Any\n+    low = Any\n+    divider = Any   # TODO: Restrict to numbers...\n \n+    def reify(self, **kwargs):\n+        return numeric.BinarySegment(self.low, self.high, self.divider)\n+\n+\n+class Id(Transfer):\n+    out = \"image\"\n+\n+    def reify(self, **kwargs):\n+        return general.Id()\n \n-class Id(Transfer): \n-  out = \"image\"\n-  def reify(self, **kwargs):\n-    return general.Id()\n \n class Interpolate(Transfer):\n-  out = \"image\"\n-  high = Any ##TODO: Restrict to numbers... \n-  low = Any \n-  def reify(self, **kwargs):\n-    return numeric.Interpolate(self.low, self.high)\n+    out = \"image\"\n+    high = Any     # TODO: Restrict to numbers...\n+    low = Any\n+\n+    def reify(self, **kwargs):\n+        return numeric.Interpolate(self.low, self.high)\n+\n \n class Sqrt(Transfer):\n-  out = \"image\"\n-  def reify(self, **kwargs):\n-    return numeric.Sqrt()\n+    out = \"image\"\n+\n+    def reify(self, **kwargs):\n+        return numeric.Sqrt()\n+\n \n class Cuberoot(Transfer):\n-  out = \"image\"\n-  def reify(self, **kwargs):\n-    return numeric.Cuberoot()\n+    out = \"image\"\n+\n+    def reify(self, **kwargs):\n+        return numeric.Cuberoot()\n+\n \n class Spread(Transfer):\n-  out = \"image\"\n-  factor = Any #TODO: Restrict to numbers; Add shape parameter\n-  def reify(self, **kwargs):\n-    return numeric.Spread(self.factor)\n-\n-\n-#TODO: Pass the 'rend' definition through (minus the data_source references), unpack in 'downsample' instead of here...\n-#TODO: Move reserve control up here or palette control down.  Probably related to refactoring palette into a model-backed type\n-def source(plot, agg=Count(), info=Const(val=1), shader=Id(), remove_original=True, palette=[\"Spectral-11\"], **kwargs):\n-  #Acquire information from renderer...\n-  rend = [r for r in plot.renderers if isinstance(r, Glyph)][0]\n-  datasource = rend.server_data_source\n-  kwargs['data_url'] = datasource.data_url\n-  kwargs['owner_username'] = datasource.owner_username\n-  \n-  spec = rend.vm_serialize()['glyphspec']\n-\n-  if (shader.out == \"image\"): \n-    kwargs['data'] = {'image': [],\n-                      'x': [0], \n-                      'y': [0],\n-                      'global_x_range' : [0, 50],\n-                      'global_y_range' : [0, 50],\n-                      'global_offset_x' : [0],\n-                      'global_offset_y' : [0],\n-                      'dw' : [1], \n-                      'dh' : [1], \n-                      'palette': palette\n-                    }\n-  else: \n-    raise ValueError(\"Can only work with image-shaders...for now\")\n-  \n-  ##Remove the base plot (if requested)\n-  if remove_original and plot in curdoc()._plotcontext.children: \n-    curdoc()._plotcontext.children.remove(plot)  \n-\n-  kwargs['transform'] = {'resample':\"abstract rendering\", 'agg':agg, 'info':info, 'shader':shader, 'glyphspec': spec}\n-  return ServerDataSource(**kwargs)\n+    out = \"image\"\n+    factor = Any    # TODO: Restrict to numbers; Add shape parameter\n+\n+    def reify(self, **kwargs):\n+        return numeric.Spread(self.factor)\n+\n+\n+# TODO: Pass the 'rend' definition through (minus the data_source references), unpack in 'downsample' instead of here...\n+# TODO: Move reserve control up here or palette control down.  Probably related to refactoring palette into a model-backed type\n+def source(plot, agg=Count(), info=Const(val=1), shader=Id(),\n+           remove_original=True, palette=[\"Spectral-11\"],\n+           points=False, **kwargs):\n+    # Acquire information from renderer...\n+    rend = [r for r in plot.renderers if isinstance(r, Glyph)][0]\n+    datasource = rend.server_data_source\n+    kwargs['data_url'] = datasource.data_url\n+    kwargs['owner_username'] = datasource.owner_username\n+\n+    spec = rend.vm_serialize()['glyphspec']\n+\n+    if (shader.out == \"image\"):\n+        kwargs['data'] = {'image': [],\n+                          'x': [0],\n+                          'y': [0],\n+                          'global_x_range': [0, 50],\n+                          'global_y_range': [0, 50],\n+                          'global_offset_x': [0],\n+                          'global_offset_y': [0],\n+                          'dw': [1],\n+                          'dh': [1],\n+                          'palette': palette}\n+    else:\n+        raise ValueError(\"Can only work with image-shaders...for now\")\n+\n+    # Remove the base plot (if requested)\n+    if remove_original and plot in curdoc()._plotcontext.children:\n+        curdoc()._plotcontext.children.remove(plot)\n+\n+    kwargs['transform'] = {\n+        'resample': \"abstract rendering\",\n+        'agg': agg,\n+        'info': info,\n+        'shader': shader,\n+        'glyphspec': spec,\n+        'points': points}\n+    return ServerDataSource(**kwargs)\n \n-def mapping(source):\n-  \"\"\"Setup property mapping dictionary from source to output glyph type.\n-  \"\"\"\n \n-  trans = source.transform\n-  out = trans['shader'].out\n+def mapping(source):\n+    \"\"\"Setup property mapping dictionary from source to output glyph type.\n+    \"\"\"\n+\n+    trans = source.transform\n+    out = trans['shader'].out\n+\n+    if (out == 'image'):","path":"bokeh/transforms/ar_downsample.py","position":332,"original_position":332,"commit_id":"eae28c8b7fc2f5cbc9f9a6a42c01ceed3c6a06c2","original_commit_id":"eae28c8b7fc2f5cbc9f9a6a42c01ceed3c6a06c2","user":{"login":"damianavila","id":1640669,"avatar_url":"https://avatars.githubusercontent.com/u/1640669?","gravatar_id":"4e38c658571b67282fda714dfea98843","url":"https://api.github.com/users/damianavila","html_url":"https://github.com/damianavila","followers_url":"https://api.github.com/users/damianavila/followers","following_url":"https://api.github.com/users/damianavila/following{/other_user}","gists_url":"https://api.github.com/users/damianavila/gists{/gist_id}","starred_url":"https://api.github.com/users/damianavila/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damianavila/subscriptions","organizations_url":"https://api.github.com/users/damianavila/orgs","repos_url":"https://api.github.com/users/damianavila/repos","events_url":"https://api.github.com/users/damianavila/events{/privacy}","received_events_url":"https://api.github.com/users/damianavila/received_events","type":"User","site_admin":false},"body":"redundant parenthesis here","created_at":"2014-07-22T01:19:25Z","updated_at":"2014-07-22T01:19:25Z","html_url":"https://github.com/ContinuumIO/bokeh/pull/872#discussion_r15206674","pull_request_url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872","_links":{"self":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/comments/15206674"},"html":{"href":"https://github.com/ContinuumIO/bokeh/pull/872#discussion_r15206674"},"pull_request":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872"}}},"pull_request":{"url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872","id":18612861,"html_url":"https://github.com/ContinuumIO/bokeh/pull/872","diff_url":"https://github.com/ContinuumIO/bokeh/pull/872.diff","patch_url":"https://github.com/ContinuumIO/bokeh/pull/872.patch","issue_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues/872","number":872,"state":"open","title":"Fixes the abstract rendering transpose error","user":{"login":"JosephCottam","id":2963989,"avatar_url":"https://avatars.githubusercontent.com/u/2963989?","gravatar_id":"4db0228c7f643a2a5d44e7709edf4073","url":"https://api.github.com/users/JosephCottam","html_url":"https://github.com/JosephCottam","followers_url":"https://api.github.com/users/JosephCottam/followers","following_url":"https://api.github.com/users/JosephCottam/following{/other_user}","gists_url":"https://api.github.com/users/JosephCottam/gists{/gist_id}","starred_url":"https://api.github.com/users/JosephCottam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JosephCottam/subscriptions","organizations_url":"https://api.github.com/users/JosephCottam/orgs","repos_url":"https://api.github.com/users/JosephCottam/repos","events_url":"https://api.github.com/users/JosephCottam/events{/privacy}","received_events_url":"https://api.github.com/users/JosephCottam/received_events","type":"User","site_admin":false},"body":"* Fixes on old line 256 to new line 296 repair the transpose\r\n* Fixes on 229 and 230 make the guides more accurate\r\n* Example classes: abstractrender.py is now correct;  census plot is now in census.py by itself \r\n* Change in abstract_render in 0.1.1 drove a small interface change (BinarySegment class)\r\n* Lots of formatting changes (because I only recently heard of pep8...)","created_at":"2014-07-18T22:46:45Z","updated_at":"2014-07-22T01:19:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d0039ec431c58b54ace5dbbd879a8dbd66d5c806","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872/commits","review_comments_url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872/comments","review_comment_url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/comments/{number}","comments_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues/872/comments","statuses_url":"https://api.github.com/repos/ContinuumIO/bokeh/statuses/eae28c8b7fc2f5cbc9f9a6a42c01ceed3c6a06c2","head":{"label":"ContinuumIO:bugfix/ar_transpose","ref":"bugfix/ar_transpose","sha":"eae28c8b7fc2f5cbc9f9a6a42c01ceed3c6a06c2","user":{"login":"ContinuumIO","id":1158637,"avatar_url":"https://avatars.githubusercontent.com/u/1158637?","gravatar_id":"d3e1fbcfffa00b955ee75f4e4324d6e6","url":"https://api.github.com/users/ContinuumIO","html_url":"https://github.com/ContinuumIO","followers_url":"https://api.github.com/users/ContinuumIO/followers","following_url":"https://api.github.com/users/ContinuumIO/following{/other_user}","gists_url":"https://api.github.com/users/ContinuumIO/gists{/gist_id}","starred_url":"https://api.github.com/users/ContinuumIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ContinuumIO/subscriptions","organizations_url":"https://api.github.com/users/ContinuumIO/orgs","repos_url":"https://api.github.com/users/ContinuumIO/repos","events_url":"https://api.github.com/users/ContinuumIO/events{/privacy}","received_events_url":"https://api.github.com/users/ContinuumIO/received_events","type":"Organization","site_admin":false},"repo":{"id":3834332,"name":"bokeh","full_name":"ContinuumIO/bokeh","owner":{"login":"ContinuumIO","id":1158637,"avatar_url":"https://avatars.githubusercontent.com/u/1158637?","gravatar_id":"d3e1fbcfffa00b955ee75f4e4324d6e6","url":"https://api.github.com/users/ContinuumIO","html_url":"https://github.com/ContinuumIO","followers_url":"https://api.github.com/users/ContinuumIO/followers","following_url":"https://api.github.com/users/ContinuumIO/following{/other_user}","gists_url":"https://api.github.com/users/ContinuumIO/gists{/gist_id}","starred_url":"https://api.github.com/users/ContinuumIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ContinuumIO/subscriptions","organizations_url":"https://api.github.com/users/ContinuumIO/orgs","repos_url":"https://api.github.com/users/ContinuumIO/repos","events_url":"https://api.github.com/users/ContinuumIO/events{/privacy}","received_events_url":"https://api.github.com/users/ContinuumIO/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ContinuumIO/bokeh","description":"Interactive Web Plotting for Python","fork":false,"url":"https://api.github.com/repos/ContinuumIO/bokeh","forks_url":"https://api.github.com/repos/ContinuumIO/bokeh/forks","keys_url":"https://api.github.com/repos/ContinuumIO/bokeh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ContinuumIO/bokeh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ContinuumIO/bokeh/teams","hooks_url":"https://api.github.com/repos/ContinuumIO/bokeh/hooks","issue_events_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues/events{/number}","events_url":"https://api.github.com/repos/ContinuumIO/bokeh/events","assignees_url":"https://api.github.com/repos/ContinuumIO/bokeh/assignees{/user}","branches_url":"https://api.github.com/repos/ContinuumIO/bokeh/branches{/branch}","tags_url":"https://api.github.com/repos/ContinuumIO/bokeh/tags","blobs_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/refs{/sha}","trees_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ContinuumIO/bokeh/statuses/{sha}","languages_url":"https://api.github.com/repos/ContinuumIO/bokeh/languages","stargazers_url":"https://api.github.com/repos/ContinuumIO/bokeh/stargazers","contributors_url":"https://api.github.com/repos/ContinuumIO/bokeh/contributors","subscribers_url":"https://api.github.com/repos/ContinuumIO/bokeh/subscribers","subscription_url":"https://api.github.com/repos/ContinuumIO/bokeh/subscription","commits_url":"https://api.github.com/repos/ContinuumIO/bokeh/commits{/sha}","git_commits_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/commits{/sha}","comments_url":"https://api.github.com/repos/ContinuumIO/bokeh/comments{/number}","issue_comment_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues/comments/{number}","contents_url":"https://api.github.com/repos/ContinuumIO/bokeh/contents/{+path}","compare_url":"https://api.github.com/repos/ContinuumIO/bokeh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ContinuumIO/bokeh/merges","archive_url":"https://api.github.com/repos/ContinuumIO/bokeh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ContinuumIO/bokeh/downloads","issues_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues{/number}","pulls_url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls{/number}","milestones_url":"https://api.github.com/repos/ContinuumIO/bokeh/milestones{/number}","notifications_url":"https://api.github.com/repos/ContinuumIO/bokeh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ContinuumIO/bokeh/labels{/name}","releases_url":"https://api.github.com/repos/ContinuumIO/bokeh/releases{/id}","created_at":"2012-03-26T15:40:01Z","updated_at":"2014-07-21T11:13:35Z","pushed_at":"2014-07-21T18:40:33Z","git_url":"git://github.com/ContinuumIO/bokeh.git","ssh_url":"git@github.com:ContinuumIO/bokeh.git","clone_url":"https://github.com/ContinuumIO/bokeh.git","svn_url":"https://github.com/ContinuumIO/bokeh","homepage":"","size":121438,"stargazers_count":1899,"watchers_count":1899,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":228,"mirror_url":null,"open_issues_count":215,"forks":228,"open_issues":215,"watchers":1899,"default_branch":"master"}},"base":{"label":"ContinuumIO:master","ref":"master","sha":"4106d27a53cb85a735577e1cff08d6801eef0118","user":{"login":"ContinuumIO","id":1158637,"avatar_url":"https://avatars.githubusercontent.com/u/1158637?","gravatar_id":"d3e1fbcfffa00b955ee75f4e4324d6e6","url":"https://api.github.com/users/ContinuumIO","html_url":"https://github.com/ContinuumIO","followers_url":"https://api.github.com/users/ContinuumIO/followers","following_url":"https://api.github.com/users/ContinuumIO/following{/other_user}","gists_url":"https://api.github.com/users/ContinuumIO/gists{/gist_id}","starred_url":"https://api.github.com/users/ContinuumIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ContinuumIO/subscriptions","organizations_url":"https://api.github.com/users/ContinuumIO/orgs","repos_url":"https://api.github.com/users/ContinuumIO/repos","events_url":"https://api.github.com/users/ContinuumIO/events{/privacy}","received_events_url":"https://api.github.com/users/ContinuumIO/received_events","type":"Organization","site_admin":false},"repo":{"id":3834332,"name":"bokeh","full_name":"ContinuumIO/bokeh","owner":{"login":"ContinuumIO","id":1158637,"avatar_url":"https://avatars.githubusercontent.com/u/1158637?","gravatar_id":"d3e1fbcfffa00b955ee75f4e4324d6e6","url":"https://api.github.com/users/ContinuumIO","html_url":"https://github.com/ContinuumIO","followers_url":"https://api.github.com/users/ContinuumIO/followers","following_url":"https://api.github.com/users/ContinuumIO/following{/other_user}","gists_url":"https://api.github.com/users/ContinuumIO/gists{/gist_id}","starred_url":"https://api.github.com/users/ContinuumIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ContinuumIO/subscriptions","organizations_url":"https://api.github.com/users/ContinuumIO/orgs","repos_url":"https://api.github.com/users/ContinuumIO/repos","events_url":"https://api.github.com/users/ContinuumIO/events{/privacy}","received_events_url":"https://api.github.com/users/ContinuumIO/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ContinuumIO/bokeh","description":"Interactive Web Plotting for Python","fork":false,"url":"https://api.github.com/repos/ContinuumIO/bokeh","forks_url":"https://api.github.com/repos/ContinuumIO/bokeh/forks","keys_url":"https://api.github.com/repos/ContinuumIO/bokeh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ContinuumIO/bokeh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ContinuumIO/bokeh/teams","hooks_url":"https://api.github.com/repos/ContinuumIO/bokeh/hooks","issue_events_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues/events{/number}","events_url":"https://api.github.com/repos/ContinuumIO/bokeh/events","assignees_url":"https://api.github.com/repos/ContinuumIO/bokeh/assignees{/user}","branches_url":"https://api.github.com/repos/ContinuumIO/bokeh/branches{/branch}","tags_url":"https://api.github.com/repos/ContinuumIO/bokeh/tags","blobs_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/refs{/sha}","trees_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ContinuumIO/bokeh/statuses/{sha}","languages_url":"https://api.github.com/repos/ContinuumIO/bokeh/languages","stargazers_url":"https://api.github.com/repos/ContinuumIO/bokeh/stargazers","contributors_url":"https://api.github.com/repos/ContinuumIO/bokeh/contributors","subscribers_url":"https://api.github.com/repos/ContinuumIO/bokeh/subscribers","subscription_url":"https://api.github.com/repos/ContinuumIO/bokeh/subscription","commits_url":"https://api.github.com/repos/ContinuumIO/bokeh/commits{/sha}","git_commits_url":"https://api.github.com/repos/ContinuumIO/bokeh/git/commits{/sha}","comments_url":"https://api.github.com/repos/ContinuumIO/bokeh/comments{/number}","issue_comment_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues/comments/{number}","contents_url":"https://api.github.com/repos/ContinuumIO/bokeh/contents/{+path}","compare_url":"https://api.github.com/repos/ContinuumIO/bokeh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ContinuumIO/bokeh/merges","archive_url":"https://api.github.com/repos/ContinuumIO/bokeh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ContinuumIO/bokeh/downloads","issues_url":"https://api.github.com/repos/ContinuumIO/bokeh/issues{/number}","pulls_url":"https://api.github.com/repos/ContinuumIO/bokeh/pulls{/number}","milestones_url":"https://api.github.com/repos/ContinuumIO/bokeh/milestones{/number}","notifications_url":"https://api.github.com/repos/ContinuumIO/bokeh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ContinuumIO/bokeh/labels{/name}","releases_url":"https://api.github.com/repos/ContinuumIO/bokeh/releases{/id}","created_at":"2012-03-26T15:40:01Z","updated_at":"2014-07-21T11:13:35Z","pushed_at":"2014-07-21T18:40:33Z","git_url":"git://github.com/ContinuumIO/bokeh.git","ssh_url":"git@github.com:ContinuumIO/bokeh.git","clone_url":"https://github.com/ContinuumIO/bokeh.git","svn_url":"https://github.com/ContinuumIO/bokeh","homepage":"","size":121438,"stargazers_count":1899,"watchers_count":1899,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":228,"mirror_url":null,"open_issues_count":215,"forks":228,"open_issues":215,"watchers":1899,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872"},"html":{"href":"https://github.com/ContinuumIO/bokeh/pull/872"},"issue":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/issues/872"},"comments":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/issues/872/comments"},"review_comments":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872/comments"},"review_comment":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/pulls/872/commits"},"statuses":{"href":"https://api.github.com/repos/ContinuumIO/bokeh/statuses/eae28c8b7fc2f5cbc9f9a6a42c01ceed3c6a06c2"}}}}