{"action":"created","comment":{"url":"https://api.github.com/repos/ContinuumIO/blaze/pulls/comments/22563126","id":22563126,"diff_hunk":"@@ -0,0 +1,203 @@\n+from __future__ import absolute_import, division, print_function\n+\n+import numpy as np\n+\n+from .core import compute\n+from ..expr import Broadcast, symbol, Expr, Arithmetic, Math, Map, Field\n+from ..expr.broadcast import broadcast_collect\n+from ..dispatch import dispatch\n+from toolz import memoize\n+import datashape\n+import numba\n+from .pyfunc import funcstr\n+\n+\n+@dispatch(Expr, np.ndarray)\n+def optimize(expr, data, **kwargs):\n+    Broadcastable = Arithmetic, Math, Map, Field\n+    return broadcast_collect(expr, Broadcastable=Broadcastable,\n+                             WantToBroadcast=Broadcastable)\n+\n+\n+def get_numba_type(dshape):\n+    \"\"\"Get the ``numba`` type corresponding to the ``datashape.Mono`` instance\n+    `dshape`\n+\n+    Parameters\n+    ----------\n+    dshape : datashape.Mono\n+\n+    Returns\n+    -------\n+    restype : numba.types.Type\n+\n+    Examples\n+    --------\n+    >>> import datashape\n+    >>> import numba\n+\n+    >>> get_numba_type(datashape.bool_)\n+    bool\n+\n+    >>> get_numba_type(datashape.date_)\n+    datetime64(D)\n+\n+    >>> get_numba_type(datashape.datetime_)\n+    datetime64(us)\n+\n+    >>> get_numba_type(datashape.timedelta_)  # default unit is microseconds\n+    timedelta64(us)\n+\n+    >>> get_numba_type(datashape.TimeDelta('D'))\n+    timedelta64(D)\n+\n+    >>> get_numba_type(datashape.int64)\n+    int64\n+\n+    >>> get_numba_type(datashape.String(7, \"A\"))\n+    [char x 7]\n+\n+    >>> get_numba_type(datashape.String(None, \"A\"))\n+    str\n+\n+    >>> get_numba_type(datashape.String(7))\n+    [unichr x 7]\n+\n+    >>> get_numba_type(datashape.string)\n+    Traceback (most recent call last):\n+      ...\n+    TypeError: Numba cannot handle variable length strings\n+\n+    >>> get_numba_type(datashape.object_)\n+    Traceback (most recent call last):\n+      ...\n+    TypeError: Numba cannot handle object datashape\n+\n+    See Also\n+    --------\n+    compute_signature\n+    \"\"\"\n+    measure = dshape.measure\n+    if measure == datashape.bool_:\n+        restype = numba.bool_  # str(bool_) == 'bool' so we can't use getattr\n+    elif measure == datashape.date_:\n+        restype = numba.types.NPDatetime('D')\n+    elif measure == datashape.datetime_:\n+        restype = numba.types.NPDatetime('us')\n+    elif isinstance(measure, datashape.TimeDelta):  # isinstance for diff freqs\n+        restype = numba.types.NPTimedelta(measure.unit)\n+    elif isinstance(measure, datashape.String):\n+        encoding = measure.encoding\n+        fixlen = measure.fixlen\n+        if fixlen is None:\n+            if encoding == 'A':\n+                return numba.types.string\n+            raise TypeError(\"Numba cannot handle variable length strings\")\n+        typ = (numba.types.CharSeq\n+               if encoding == 'A' else numba.types.UnicodeCharSeq)\n+        return typ(fixlen or 0)\n+    elif measure == datashape.object_:\n+        raise TypeError(\"Numba cannot handle object datashape\")\n+    else:\n+        restype = getattr(numba, str(measure))\n+    return restype\n+\n+\n+def compute_signature(expr):\n+    \"\"\"Get the ``numba`` *function signature* corresponding to ``DataShape``\n+\n+    Examples\n+    --------\n+    >>> from blaze import symbol\n+    >>> s = symbol('s', 'int64')\n+    >>> t = symbol('t', 'float32')\n+    >>> d = symbol('d', 'datetime')\n+\n+    >>> expr = s + t\n+    >>> compute_signature(expr)\n+    float64(int64, float32)\n+\n+    >>> expr = d.truncate(days=1)\n+    >>> compute_signature(expr)\n+    datetime64(D)(datetime64(us))\n+\n+    >>> expr = d.day + 1\n+    >>> compute_signature(expr)  # only looks at leaf nodes\n+    int64(datetime64(us))\n+\n+    Notes\n+    -----\n+    * This could potentially be adapted/refactored to deal with\n+      ``datashape.Function`` types.\n+    * Cannot handle ``datashape.Record`` types.\n+    \"\"\"\n+    assert datashape.isscalar(expr.schema)\n+    restype = get_numba_type(expr.schema)\n+    argtypes = [get_numba_type(e.schema) for e in expr._leaves()]\n+    return restype(*argtypes)\n+\n+\n+def _get_numba_ufunc(expr):\n+    \"\"\"Construct a numba ufunc from a blaze expression\n+\n+    Parameters\n+    ----------\n+    expr : blaze.expr.Expr\n+\n+    Returns\n+    -------\n+    f : function\n+        A numba vectorized function\n+\n+    Examples\n+    --------\n+    >>> from blaze import symbol\n+    >>> import numpy as np\n+\n+    >>> s = symbol('s', 'float64')\n+    >>> t = symbol('t', 'float64')\n+\n+    >>> x = np.array([1.0, 2.0, 3.0])\n+    >>> y = np.array([2.0, 3.0, 4.0])\n+\n+    >>> f = get_numba_ufunc(s + t)\n+\n+    >>> f(x, y)\n+    array([ 3.,  5.,  7.])\n+\n+    See Also\n+    --------\n+    get_numba_type\n+    compute_signature\n+    \"\"\"\n+    leaves = expr._leaves()\n+    s, scope = funcstr(leaves, expr)\n+    scope = dict((k, numba.jit(nopython=True)(v) if callable(v) else v)\n+                 for k, v in scope.items())\n+    func = eval(s, scope)\n+    sig = compute_signature(expr)\n+    return numba.vectorize([sig], nopython=True)(func)\n+\n+\n+# do this here so we can run our doctest\n+get_numba_ufunc = memoize(_get_numba_ufunc)\n+\n+\n+@dispatch(Broadcast, np.ndarray)\n+def compute_up(t, x, **kwargs):\n+    assert len(t._scalars) == 1\n+    scalar = t._scalars[0]\n+    fields = scalar.fields","path":"blaze/compute/numba.py","position":190,"original_position":190,"commit_id":"6735bf679e0bde186a84630fc2c32b79bf53c312","original_commit_id":"6735bf679e0bde186a84630fc2c32b79bf53c312","user":{"login":"mrocklin","id":306380,"avatar_url":"https://avatars.githubusercontent.com/u/306380?v=3","gravatar_id":"","url":"https://api.github.com/users/mrocklin","html_url":"https://github.com/mrocklin","followers_url":"https://api.github.com/users/mrocklin/followers","following_url":"https://api.github.com/users/mrocklin/following{/other_user}","gists_url":"https://api.github.com/users/mrocklin/gists{/gist_id}","starred_url":"https://api.github.com/users/mrocklin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mrocklin/subscriptions","organizations_url":"https://api.github.com/users/mrocklin/orgs","repos_url":"https://api.github.com/users/mrocklin/repos","events_url":"https://api.github.com/users/mrocklin/events{/privacy}","received_events_url":"https://api.github.com/users/mrocklin/received_events","type":"User","site_admin":false},"body":"Hrm, we should also test this with non-record arrays.  Datashapes like `10 * 10 * int` will also be a common use case.","created_at":"2015-01-07T00:18:00Z","updated_at":"2015-01-07T00:18:00Z","html_url":"https://github.com/ContinuumIO/blaze/pull/909#discussion_r22563126","pull_request_url":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909","_links":{"self":{"href":"https://api.github.com/repos/ContinuumIO/blaze/pulls/comments/22563126"},"html":{"href":"https://github.com/ContinuumIO/blaze/pull/909#discussion_r22563126"},"pull_request":{"href":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909"}}},"pull_request":{"url":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909","id":26727460,"html_url":"https://github.com/ContinuumIO/blaze/pull/909","diff_url":"https://github.com/ContinuumIO/blaze/pull/909.diff","patch_url":"https://github.com/ContinuumIO/blaze/pull/909.patch","issue_url":"https://api.github.com/repos/ContinuumIO/blaze/issues/909","number":909,"state":"open","locked":false,"title":"Implement numba ufunc via pyfunc","user":{"login":"cpcloud","id":417981,"avatar_url":"https://avatars.githubusercontent.com/u/417981?v=3","gravatar_id":"","url":"https://api.github.com/users/cpcloud","html_url":"https://github.com/cpcloud","followers_url":"https://api.github.com/users/cpcloud/followers","following_url":"https://api.github.com/users/cpcloud/following{/other_user}","gists_url":"https://api.github.com/users/cpcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/cpcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cpcloud/subscriptions","organizations_url":"https://api.github.com/users/cpcloud/orgs","repos_url":"https://api.github.com/users/cpcloud/repos","events_url":"https://api.github.com/users/cpcloud/events{/privacy}","received_events_url":"https://api.github.com/users/cpcloud/received_events","type":"User","site_admin":false},"body":"This is a proof of concept, and isn't necessarily meant to be integrated into core blaze.","created_at":"2014-12-31T15:52:57Z","updated_at":"2015-01-07T00:18:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d6cedb8f52d9f98aa624342cdcc94e97afc841b8","assignee":{"login":"cpcloud","id":417981,"avatar_url":"https://avatars.githubusercontent.com/u/417981?v=3","gravatar_id":"","url":"https://api.github.com/users/cpcloud","html_url":"https://github.com/cpcloud","followers_url":"https://api.github.com/users/cpcloud/followers","following_url":"https://api.github.com/users/cpcloud/following{/other_user}","gists_url":"https://api.github.com/users/cpcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/cpcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cpcloud/subscriptions","organizations_url":"https://api.github.com/users/cpcloud/orgs","repos_url":"https://api.github.com/users/cpcloud/repos","events_url":"https://api.github.com/users/cpcloud/events{/privacy}","received_events_url":"https://api.github.com/users/cpcloud/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/ContinuumIO/blaze/milestones/4","labels_url":"https://api.github.com/repos/ContinuumIO/blaze/milestones/4/labels","id":674663,"number":4,"title":"Release 0.7","description":"Feature Release\r\n* Expansion of Expr\r\n  * Arrays\r\n  * General datashape objs in Table\r\n  * More Panda ops\r\n* OOC table operations\r\n* Numba apply operators\r\n* HDFS support ","creator":{"login":"aterrel","id":30583,"avatar_url":"https://avatars.githubusercontent.com/u/30583?v=3","gravatar_id":"","url":"https://api.github.com/users/aterrel","html_url":"https://github.com/aterrel","followers_url":"https://api.github.com/users/aterrel/followers","following_url":"https://api.github.com/users/aterrel/following{/other_user}","gists_url":"https://api.github.com/users/aterrel/gists{/gist_id}","starred_url":"https://api.github.com/users/aterrel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aterrel/subscriptions","organizations_url":"https://api.github.com/users/aterrel/orgs","repos_url":"https://api.github.com/users/aterrel/repos","events_url":"https://api.github.com/users/aterrel/events{/privacy}","received_events_url":"https://api.github.com/users/aterrel/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":72,"state":"open","created_at":"2014-05-29T20:53:09Z","updated_at":"2015-01-06T01:02:48Z","due_on":"2014-12-22T05:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909/commits","review_comments_url":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909/comments","review_comment_url":"https://api.github.com/repos/ContinuumIO/blaze/pulls/comments/{number}","comments_url":"https://api.github.com/repos/ContinuumIO/blaze/issues/909/comments","statuses_url":"https://api.github.com/repos/ContinuumIO/blaze/statuses/6735bf679e0bde186a84630fc2c32b79bf53c312","head":{"label":"cpcloud:numba-str","ref":"numba-str","sha":"6735bf679e0bde186a84630fc2c32b79bf53c312","user":{"login":"cpcloud","id":417981,"avatar_url":"https://avatars.githubusercontent.com/u/417981?v=3","gravatar_id":"","url":"https://api.github.com/users/cpcloud","html_url":"https://github.com/cpcloud","followers_url":"https://api.github.com/users/cpcloud/followers","following_url":"https://api.github.com/users/cpcloud/following{/other_user}","gists_url":"https://api.github.com/users/cpcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/cpcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cpcloud/subscriptions","organizations_url":"https://api.github.com/users/cpcloud/orgs","repos_url":"https://api.github.com/users/cpcloud/repos","events_url":"https://api.github.com/users/cpcloud/events{/privacy}","received_events_url":"https://api.github.com/users/cpcloud/received_events","type":"User","site_admin":false},"repo":{"id":21789010,"name":"blaze","full_name":"cpcloud/blaze","owner":{"login":"cpcloud","id":417981,"avatar_url":"https://avatars.githubusercontent.com/u/417981?v=3","gravatar_id":"","url":"https://api.github.com/users/cpcloud","html_url":"https://github.com/cpcloud","followers_url":"https://api.github.com/users/cpcloud/followers","following_url":"https://api.github.com/users/cpcloud/following{/other_user}","gists_url":"https://api.github.com/users/cpcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/cpcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cpcloud/subscriptions","organizations_url":"https://api.github.com/users/cpcloud/orgs","repos_url":"https://api.github.com/users/cpcloud/repos","events_url":"https://api.github.com/users/cpcloud/events{/privacy}","received_events_url":"https://api.github.com/users/cpcloud/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/cpcloud/blaze","description":"Blaze is NumPy and Pandas for Big Data","fork":true,"url":"https://api.github.com/repos/cpcloud/blaze","forks_url":"https://api.github.com/repos/cpcloud/blaze/forks","keys_url":"https://api.github.com/repos/cpcloud/blaze/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cpcloud/blaze/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cpcloud/blaze/teams","hooks_url":"https://api.github.com/repos/cpcloud/blaze/hooks","issue_events_url":"https://api.github.com/repos/cpcloud/blaze/issues/events{/number}","events_url":"https://api.github.com/repos/cpcloud/blaze/events","assignees_url":"https://api.github.com/repos/cpcloud/blaze/assignees{/user}","branches_url":"https://api.github.com/repos/cpcloud/blaze/branches{/branch}","tags_url":"https://api.github.com/repos/cpcloud/blaze/tags","blobs_url":"https://api.github.com/repos/cpcloud/blaze/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cpcloud/blaze/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cpcloud/blaze/git/refs{/sha}","trees_url":"https://api.github.com/repos/cpcloud/blaze/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cpcloud/blaze/statuses/{sha}","languages_url":"https://api.github.com/repos/cpcloud/blaze/languages","stargazers_url":"https://api.github.com/repos/cpcloud/blaze/stargazers","contributors_url":"https://api.github.com/repos/cpcloud/blaze/contributors","subscribers_url":"https://api.github.com/repos/cpcloud/blaze/subscribers","subscription_url":"https://api.github.com/repos/cpcloud/blaze/subscription","commits_url":"https://api.github.com/repos/cpcloud/blaze/commits{/sha}","git_commits_url":"https://api.github.com/repos/cpcloud/blaze/git/commits{/sha}","comments_url":"https://api.github.com/repos/cpcloud/blaze/comments{/number}","issue_comment_url":"https://api.github.com/repos/cpcloud/blaze/issues/comments/{number}","contents_url":"https://api.github.com/repos/cpcloud/blaze/contents/{+path}","compare_url":"https://api.github.com/repos/cpcloud/blaze/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cpcloud/blaze/merges","archive_url":"https://api.github.com/repos/cpcloud/blaze/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cpcloud/blaze/downloads","issues_url":"https://api.github.com/repos/cpcloud/blaze/issues{/number}","pulls_url":"https://api.github.com/repos/cpcloud/blaze/pulls{/number}","milestones_url":"https://api.github.com/repos/cpcloud/blaze/milestones{/number}","notifications_url":"https://api.github.com/repos/cpcloud/blaze/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cpcloud/blaze/labels{/name}","releases_url":"https://api.github.com/repos/cpcloud/blaze/releases{/id}","created_at":"2014-07-13T11:40:34Z","updated_at":"2014-12-31T02:39:18Z","pushed_at":"2015-01-07T00:10:42Z","git_url":"git://github.com/cpcloud/blaze.git","ssh_url":"git@github.com:cpcloud/blaze.git","clone_url":"https://github.com/cpcloud/blaze.git","svn_url":"https://github.com/cpcloud/blaze","homepage":"blaze.pydata.org","size":12317,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"ContinuumIO:master","ref":"master","sha":"b31b8ad7d97ddf35beef8eb2e9715fa685cb8b97","user":{"login":"ContinuumIO","id":1158637,"avatar_url":"https://avatars.githubusercontent.com/u/1158637?v=3","gravatar_id":"","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":6404963,"name":"blaze","full_name":"ContinuumIO/blaze","owner":{"login":"ContinuumIO","id":1158637,"avatar_url":"https://avatars.githubusercontent.com/u/1158637?v=3","gravatar_id":"","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/blaze","description":"NumPy and Pandas interface to Big Data","fork":false,"url":"https://api.github.com/repos/ContinuumIO/blaze","forks_url":"https://api.github.com/repos/ContinuumIO/blaze/forks","keys_url":"https://api.github.com/repos/ContinuumIO/blaze/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ContinuumIO/blaze/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ContinuumIO/blaze/teams","hooks_url":"https://api.github.com/repos/ContinuumIO/blaze/hooks","issue_events_url":"https://api.github.com/repos/ContinuumIO/blaze/issues/events{/number}","events_url":"https://api.github.com/repos/ContinuumIO/blaze/events","assignees_url":"https://api.github.com/repos/ContinuumIO/blaze/assignees{/user}","branches_url":"https://api.github.com/repos/ContinuumIO/blaze/branches{/branch}","tags_url":"https://api.github.com/repos/ContinuumIO/blaze/tags","blobs_url":"https://api.github.com/repos/ContinuumIO/blaze/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ContinuumIO/blaze/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ContinuumIO/blaze/git/refs{/sha}","trees_url":"https://api.github.com/repos/ContinuumIO/blaze/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ContinuumIO/blaze/statuses/{sha}","languages_url":"https://api.github.com/repos/ContinuumIO/blaze/languages","stargazers_url":"https://api.github.com/repos/ContinuumIO/blaze/stargazers","contributors_url":"https://api.github.com/repos/ContinuumIO/blaze/contributors","subscribers_url":"https://api.github.com/repos/ContinuumIO/blaze/subscribers","subscription_url":"https://api.github.com/repos/ContinuumIO/blaze/subscription","commits_url":"https://api.github.com/repos/ContinuumIO/blaze/commits{/sha}","git_commits_url":"https://api.github.com/repos/ContinuumIO/blaze/git/commits{/sha}","comments_url":"https://api.github.com/repos/ContinuumIO/blaze/comments{/number}","issue_comment_url":"https://api.github.com/repos/ContinuumIO/blaze/issues/comments/{number}","contents_url":"https://api.github.com/repos/ContinuumIO/blaze/contents/{+path}","compare_url":"https://api.github.com/repos/ContinuumIO/blaze/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ContinuumIO/blaze/merges","archive_url":"https://api.github.com/repos/ContinuumIO/blaze/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ContinuumIO/blaze/downloads","issues_url":"https://api.github.com/repos/ContinuumIO/blaze/issues{/number}","pulls_url":"https://api.github.com/repos/ContinuumIO/blaze/pulls{/number}","milestones_url":"https://api.github.com/repos/ContinuumIO/blaze/milestones{/number}","notifications_url":"https://api.github.com/repos/ContinuumIO/blaze/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ContinuumIO/blaze/labels{/name}","releases_url":"https://api.github.com/repos/ContinuumIO/blaze/releases{/id}","created_at":"2012-10-26T14:25:22Z","updated_at":"2015-01-06T19:58:01Z","pushed_at":"2015-01-06T19:58:01Z","git_url":"git://github.com/ContinuumIO/blaze.git","ssh_url":"git@github.com:ContinuumIO/blaze.git","clone_url":"https://github.com/ContinuumIO/blaze.git","svn_url":"https://github.com/ContinuumIO/blaze","homepage":"blaze.pydata.org","size":22654,"stargazers_count":992,"watchers_count":992,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":117,"mirror_url":null,"open_issues_count":89,"forks":117,"open_issues":89,"watchers":992,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909"},"html":{"href":"https://github.com/ContinuumIO/blaze/pull/909"},"issue":{"href":"https://api.github.com/repos/ContinuumIO/blaze/issues/909"},"comments":{"href":"https://api.github.com/repos/ContinuumIO/blaze/issues/909/comments"},"review_comments":{"href":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909/comments"},"review_comment":{"href":"https://api.github.com/repos/ContinuumIO/blaze/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/ContinuumIO/blaze/pulls/909/commits"},"statuses":{"href":"https://api.github.com/repos/ContinuumIO/blaze/statuses/6735bf679e0bde186a84630fc2c32b79bf53c312"}}}}