{"action":"created","comment":{"url":"https://api.github.com/repos/scipy/scipy/pulls/comments/25989874","id":25989874,"diff_hunk":"@@ -0,0 +1,122 @@\n+\"\"\"\n+A script that uses f2py to generate the signature files used to make\n+the Cython BLAS and LAPACK wrappers from the fortran source code for\n+LAPACK and the reference BLAS.\n+\n+To generate the BLAS wrapper signatures call:\n+python _cython_signature_generator.py blas <blas_directory> <out_file>\n+\n+To generate the LAPACK wrapper signatures call:\n+python _cython_signature_generator.py lapack <lapack_src_directory> <out_file>\n+\"\"\"\n+\n+import glob\n+from numpy.f2py import crackfortran\n+\n+sig_types = {'integer':'int',\n+             'complex':'c',\n+             'double precision':'d',\n+             'real':'s',\n+             'complex*16':'z',\n+             'double complex':'z',\n+             'character':'char',\n+             'logical':'bint'}\n+\n+def get_type(info, arg):\n+    argtype = sig_types[info['vars'][arg]['typespec']]\n+    if argtype == 'c' and info['vars'][arg].get('kindselector') is not None:\n+        argtype = 'z'\n+    return argtype\n+\n+def make_signature(filename):\n+    info = crackfortran.crackfortran(filename)[0]\n+    name = info['name']\n+    if '_' in name:\n+        info = info['body']\n+        name = info['name']\n+    if info['block'] == 'subroutine':\n+        return_type = 'void'\n+    else:\n+        return_type = get_type(info, name)\n+    arglist = [' *'.join([get_type(info, arg), arg]) for arg in info['args']]\n+    args = ', '.join(arglist)\n+    # Eliminate strange variable naming that replaces rank with rank_bn.\n+    args = args.replace('rank_bn', 'rank')\n+    return '{} {}({})\\n'.format(return_type, name, args)\n+\n+def get_sig_name(line):\n+    return line.split('(')[0].split(' ')[-1]\n+\n+def sigs_from_dir(directory, outfile, manual_wrappers=None, exclusions=None,\n+                  auxiliaries=None):\n+    if directory[-1] in ['/', '\\\\']:\n+        directory = directory[:-1]\n+    files = glob.glob(directory + '/*.f*')\n+    if exclusions is None:\n+        exclusions = []\n+    if auxiliaries is None:\n+        auxiliaries = []\n+    if manual_wrappers is not None:\n+        exclusions += [get_sig_name(l) for l in manual_wrappers.split('\\n')]\n+    signatures = []\n+    for filename in files:\n+        name = filename.split('\\\\')[-1][:-2]\n+        if name in exclusions:\n+            continue\n+        # Exclude auxiliary routines that are not explicitly included.\n+        if name[1:3] == 'la' and name[1:] not in auxiliaries:\n+            continue\n+        signatures.append(make_signature(filename))\n+    if manual_wrappers is not None:\n+        signatures += [l + '\\n' for l in manual_wrappers.split('\\n')]\n+    signatures.sort(key=get_sig_name)\n+    comment = [\"# This file was generated by _cython_wrapper_generators.py.\\n\",\n+               \"# Do not edit this file directly.\\n\\n\"]\n+    with open(outfile, 'w') as f:\n+        f.writelines(comment)\n+        f.writelines(signatures)\n+\n+# The signature that is used for zcgesv in lapack 3.1.0 and 3.1.1 changed\n+# in version 3.2.0. The version included in the clapack on OSX has the\n+# more recent signature though.\n+# slamch and dlamch are not in the lapack src directory, but,since they\n+# already have Python wrappers, we'll wrap them as well.\n+# The other manual signatures are used because the signature generating\n+# functions don't work when function pointer arguments are used.\n+\n+lapack_manual_wrappers = '''void cgees(char *jobvs, char *sort, cselect1 *select, int *n, c *a, int *lda, int *sdim, c *w, c *vs, int *ldvs, c *work, int *lwork, s *rwork, bint *bwork, int *info)\n+void cgeesx(char *jobvs, char *sort, cselect1 *select, char *sense, int *n, c *a, int *lda, int *sdim, c *w, c *vs, int *ldvs, s *rconde, s *rcondv, c *work, int *lwork, s *rwork, bint *bwork, int *info)\n+void cgges(char *jobvsl, char *jobvsr, char *sort, cselect2 *selctg, int *n, c *a, int *lda, c *b, int *ldb, int *sdim, c *alpha, c *beta, c *vsl, int *ldvsl, c *vsr, int *ldvsr, c *work, int *lwork, s *rwork, bint *bwork, int *info)\n+void cggesx(char *jobvsl, char *jobvsr, char *sort, cselect2 *selctg, char *sense, int *n, c *a, int *lda, c *b, int *ldb, int *sdim, c *alpha, c *beta, c *vsl, int *ldvsl, c *vsr, int *ldvsr, s *rconde, s *rcondv, c *work, int *lwork, s *rwork, int *iwork, int *liwork, bint *bwork, int *info)\n+void dgees(char *jobvs, char *sort, dselect2 *select, int *n, d *a, int *lda, int *sdim, d *wr, d *wi, d *vs, int *ldvs, d *work, int *lwork, bint *bwork, int *info)\n+void dgeesx(char *jobvs, char *sort, dselect2 *select, char *sense, int *n, d *a, int *lda, int *sdim, d *wr, d *wi, d *vs, int *ldvs, d *rconde, d *rcondv, d *work, int *lwork, int *iwork, int *liwork, bint *bwork, int *info)\n+void dgges(char *jobvsl, char *jobvsr, char *sort, dselect3 *selctg, int *n, d *a, int *lda, d *b, int *ldb, int *sdim, d *alphar, d *alphai, d *beta, d *vsl, int *ldvsl, d *vsr, int *ldvsr, d *work, int *lwork, bint *bwork, int *info)\n+void dggesx(char *jobvsl, char *jobvsr, char *sort, dselect3 *selctg, char *sense, int *n, d *a, int *lda, d *b, int *ldb, int *sdim, d *alphar, d *alphai, d *beta, d *vsl, int *ldvsl, d *vsr, int *ldvsr, d *rconde, d *rcondv, d *work, int *lwork, int *iwork, int *liwork, bint *bwork, int *info)\n+d dlamch(char *cmach)\n+void sgees(char *jobvs, char *sort, sselect2 *select, int *n, s *a, int *lda, int *sdim, s *wr, s *wi, s *vs, int *ldvs, s *work, int *lwork, bint *bwork, int *info)\n+void sgeesx(char *jobvs, char *sort, sselect2 *select, char *sense, int *n, s *a, int *lda, int *sdim, s *wr, s *wi, s *vs, int *ldvs, s *rconde, s *rcondv, s *work, int *lwork, int *iwork, int *liwork, bint *bwork, int *info)\n+void sgges(char *jobvsl, char *jobvsr, char *sort, sselect3 *selctg, int *n, s *a, int *lda, s *b, int *ldb, int *sdim, s *alphar, s *alphai, s *beta, s *vsl, int *ldvsl, s *vsr, int *ldvsr, s *work, int *lwork, bint *bwork, int *info)\n+void sggesx(char *jobvsl, char *jobvsr, char *sort, sselect3 *selctg, char *sense, int *n, s *a, int *lda, s *b, int *ldb, int *sdim, s *alphar, s *alphai, s *beta, s *vsl, int *ldvsl, s *vsr, int *ldvsr, s *rconde, s *rcondv, s *work, int *lwork, int *iwork, int *liwork, bint *bwork, int *info)\n+s slamch(char *cmach)\n+void zcgesv(int *n, int *nrhs, z *a, int *lda, int *ipiv, z *b, int *ldb, z *x, int *ldx, z *work, c *swork, d *rwork, int *iter, int *info)\n+void zgees(char *jobvs, char *sort, zselect1 *select, int *n, z *a, int *lda, int *sdim, z *w, z *vs, int *ldvs, z *work, int *lwork, d *rwork, bint *bwork, int *info)\n+void zgeesx(char *jobvs, char *sort, zselect1 *select, char *sense, int *n, z *a, int *lda, int *sdim, z *w, z *vs, int *ldvs, d *rconde, d *rcondv, z *work, int *lwork, d *rwork, bint *bwork, int *info)\n+void zgges(char *jobvsl, char *jobvsr, char *sort, zselect2 *selctg, int *n, z *a, int *lda, z *b, int *ldb, int *sdim, z *alpha, z *beta, z *vsl, int *ldvsl, z *vsr, int *ldvsr, z *work, int *lwork, d *rwork, bint *bwork, int *info)\n+void zggesx(char *jobvsl, char *jobvsr, char *sort, zselect2 *selctg, char *sense, int *n, z *a, int *lda, z *b, int *ldb, int *sdim, z *alpha, z *beta, z *vsl, int *ldvsl, z *vsr, int *ldvsr, d *rconde, d *rcondv, z *work, int *lwork, d *rwork, int *iwork, int *liwork, bint *bwork, int *info)'''\n+\n+if __name__ == '__main__':\n+    from sys import argv\n+    libname, src_dir, outfile = argv[1:]\n+    # Exclude scabs and sisnan since they aren't currently included\n+    # in the scipy-specific ABI wrappers.\n+    if libname.lower() == 'blas':\n+        sigs_from_dir(src_dir, outfile, exclusions=['scabs1'])\n+    elif libname.lower() == 'lapack':\n+        # Auxiliary routines are excluded unless explicitly included.\n+        auxiliaries = ['laenv', 'lacon', 'lacn2', 'laswp', 'larf', 'larz',","path":"scipy/linalg/_cython_signature_generator.py","position":116,"original_position":116,"commit_id":"77cd5732b22ac906b7afe68e1a8c341027308382","original_commit_id":"77cd5732b22ac906b7afe68e1a8c341027308382","user":{"login":"sturlamolden","id":1970862,"avatar_url":"https://avatars.githubusercontent.com/u/1970862?v=3","gravatar_id":"","url":"https://api.github.com/users/sturlamolden","html_url":"https://github.com/sturlamolden","followers_url":"https://api.github.com/users/sturlamolden/followers","following_url":"https://api.github.com/users/sturlamolden/following{/other_user}","gists_url":"https://api.github.com/users/sturlamolden/gists{/gist_id}","starred_url":"https://api.github.com/users/sturlamolden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sturlamolden/subscriptions","organizations_url":"https://api.github.com/users/sturlamolden/orgs","repos_url":"https://api.github.com/users/sturlamolden/repos","events_url":"https://api.github.com/users/sturlamolden/events{/privacy}","received_events_url":"https://api.github.com/users/sturlamolden/received_events","type":"User","site_admin":false},"body":"The warning will go away if we use NumPy typedefs, as I have suggested below.","created_at":"2015-03-07T00:37:11Z","updated_at":"2015-03-07T00:37:11Z","html_url":"https://github.com/scipy/scipy/pull/4021#discussion_r25989874","pull_request_url":"https://api.github.com/repos/scipy/scipy/pulls/4021","_links":{"self":{"href":"https://api.github.com/repos/scipy/scipy/pulls/comments/25989874"},"html":{"href":"https://github.com/scipy/scipy/pull/4021#discussion_r25989874"},"pull_request":{"href":"https://api.github.com/repos/scipy/scipy/pulls/4021"}}},"pull_request":{"url":"https://api.github.com/repos/scipy/scipy/pulls/4021","id":21686128,"html_url":"https://github.com/scipy/scipy/pull/4021","diff_url":"https://github.com/scipy/scipy/pull/4021.diff","patch_url":"https://github.com/scipy/scipy/pull/4021.patch","issue_url":"https://api.github.com/repos/scipy/scipy/issues/4021","number":4021,"state":"open","locked":false,"title":"ENH: Cython api for lapack and blas","user":{"login":"insertinterestingnamehere","id":1847484,"avatar_url":"https://avatars.githubusercontent.com/u/1847484?v=3","gravatar_id":"","url":"https://api.github.com/users/insertinterestingnamehere","html_url":"https://github.com/insertinterestingnamehere","followers_url":"https://api.github.com/users/insertinterestingnamehere/followers","following_url":"https://api.github.com/users/insertinterestingnamehere/following{/other_user}","gists_url":"https://api.github.com/users/insertinterestingnamehere/gists{/gist_id}","starred_url":"https://api.github.com/users/insertinterestingnamehere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insertinterestingnamehere/subscriptions","organizations_url":"https://api.github.com/users/insertinterestingnamehere/orgs","repos_url":"https://api.github.com/users/insertinterestingnamehere/repos","events_url":"https://api.github.com/users/insertinterestingnamehere/events{/privacy}","received_events_url":"https://api.github.com/users/insertinterestingnamehere/received_events","type":"User","site_admin":false},"body":"- [x] Add interface for lapack and blas routines.\r\n- [x] Add working example in tests\r\n- [x] Review signatures for correctness\r\n- [x] Add function to get directory of `scipy.linalg` (similar to `numpy.get_include`)\r\n- [x] Finish wrappers for 'gees' and 'gges' functions.\r\n- [x] Add interfaces to the functions added in https://github.com/scipy/scipy/pull/3984\r\n- [x] Add this api to the documentation","created_at":"2014-09-24T00:45:41Z","updated_at":"2015-03-07T00:37:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3896b7b8e033426a1500316ce3fb6f0b2291f619","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scipy/scipy/pulls/4021/commits","review_comments_url":"https://api.github.com/repos/scipy/scipy/pulls/4021/comments","review_comment_url":"https://api.github.com/repos/scipy/scipy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scipy/scipy/issues/4021/comments","statuses_url":"https://api.github.com/repos/scipy/scipy/statuses/77cd5732b22ac906b7afe68e1a8c341027308382","head":{"label":"insertinterestingnamehere:cyblas","ref":"cyblas","sha":"77cd5732b22ac906b7afe68e1a8c341027308382","user":{"login":"insertinterestingnamehere","id":1847484,"avatar_url":"https://avatars.githubusercontent.com/u/1847484?v=3","gravatar_id":"","url":"https://api.github.com/users/insertinterestingnamehere","html_url":"https://github.com/insertinterestingnamehere","followers_url":"https://api.github.com/users/insertinterestingnamehere/followers","following_url":"https://api.github.com/users/insertinterestingnamehere/following{/other_user}","gists_url":"https://api.github.com/users/insertinterestingnamehere/gists{/gist_id}","starred_url":"https://api.github.com/users/insertinterestingnamehere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insertinterestingnamehere/subscriptions","organizations_url":"https://api.github.com/users/insertinterestingnamehere/orgs","repos_url":"https://api.github.com/users/insertinterestingnamehere/repos","events_url":"https://api.github.com/users/insertinterestingnamehere/events{/privacy}","received_events_url":"https://api.github.com/users/insertinterestingnamehere/received_events","type":"User","site_admin":false},"repo":{"id":21440994,"name":"scipy","full_name":"insertinterestingnamehere/scipy","owner":{"login":"insertinterestingnamehere","id":1847484,"avatar_url":"https://avatars.githubusercontent.com/u/1847484?v=3","gravatar_id":"","url":"https://api.github.com/users/insertinterestingnamehere","html_url":"https://github.com/insertinterestingnamehere","followers_url":"https://api.github.com/users/insertinterestingnamehere/followers","following_url":"https://api.github.com/users/insertinterestingnamehere/following{/other_user}","gists_url":"https://api.github.com/users/insertinterestingnamehere/gists{/gist_id}","starred_url":"https://api.github.com/users/insertinterestingnamehere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insertinterestingnamehere/subscriptions","organizations_url":"https://api.github.com/users/insertinterestingnamehere/orgs","repos_url":"https://api.github.com/users/insertinterestingnamehere/repos","events_url":"https://api.github.com/users/insertinterestingnamehere/events{/privacy}","received_events_url":"https://api.github.com/users/insertinterestingnamehere/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/insertinterestingnamehere/scipy","description":"Scipy library main repository","fork":true,"url":"https://api.github.com/repos/insertinterestingnamehere/scipy","forks_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/forks","keys_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/teams","hooks_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/hooks","issue_events_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/issues/events{/number}","events_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/events","assignees_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/assignees{/user}","branches_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/branches{/branch}","tags_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/tags","blobs_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/git/refs{/sha}","trees_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/statuses/{sha}","languages_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/languages","stargazers_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/stargazers","contributors_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/contributors","subscribers_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/subscribers","subscription_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/subscription","commits_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/commits{/sha}","git_commits_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/git/commits{/sha}","comments_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/comments{/number}","issue_comment_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/issues/comments{/number}","contents_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/contents/{+path}","compare_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/merges","archive_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/downloads","issues_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/issues{/number}","pulls_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/pulls{/number}","milestones_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/milestones{/number}","notifications_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/labels{/name}","releases_url":"https://api.github.com/repos/insertinterestingnamehere/scipy/releases{/id}","created_at":"2014-07-02T21:27:14Z","updated_at":"2015-02-05T04:19:05Z","pushed_at":"2015-03-06T03:40:20Z","git_url":"git://github.com/insertinterestingnamehere/scipy.git","ssh_url":"git@github.com:insertinterestingnamehere/scipy.git","clone_url":"https://github.com/insertinterestingnamehere/scipy.git","svn_url":"https://github.com/insertinterestingnamehere/scipy","homepage":"http://scipy.org/scipylib/","size":54386,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scipy:master","ref":"master","sha":"30b5a120086f3dcb89b7c561ec40af1de8b7a708","user":{"login":"scipy","id":288277,"avatar_url":"https://avatars.githubusercontent.com/u/288277?v=3","gravatar_id":"","url":"https://api.github.com/users/scipy","html_url":"https://github.com/scipy","followers_url":"https://api.github.com/users/scipy/followers","following_url":"https://api.github.com/users/scipy/following{/other_user}","gists_url":"https://api.github.com/users/scipy/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy/subscriptions","organizations_url":"https://api.github.com/users/scipy/orgs","repos_url":"https://api.github.com/users/scipy/repos","events_url":"https://api.github.com/users/scipy/events{/privacy}","received_events_url":"https://api.github.com/users/scipy/received_events","type":"Organization","site_admin":false},"repo":{"id":1460385,"name":"scipy","full_name":"scipy/scipy","owner":{"login":"scipy","id":288277,"avatar_url":"https://avatars.githubusercontent.com/u/288277?v=3","gravatar_id":"","url":"https://api.github.com/users/scipy","html_url":"https://github.com/scipy","followers_url":"https://api.github.com/users/scipy/followers","following_url":"https://api.github.com/users/scipy/following{/other_user}","gists_url":"https://api.github.com/users/scipy/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy/subscriptions","organizations_url":"https://api.github.com/users/scipy/orgs","repos_url":"https://api.github.com/users/scipy/repos","events_url":"https://api.github.com/users/scipy/events{/privacy}","received_events_url":"https://api.github.com/users/scipy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scipy/scipy","description":"Scipy library main repository","fork":false,"url":"https://api.github.com/repos/scipy/scipy","forks_url":"https://api.github.com/repos/scipy/scipy/forks","keys_url":"https://api.github.com/repos/scipy/scipy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scipy/scipy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scipy/scipy/teams","hooks_url":"https://api.github.com/repos/scipy/scipy/hooks","issue_events_url":"https://api.github.com/repos/scipy/scipy/issues/events{/number}","events_url":"https://api.github.com/repos/scipy/scipy/events","assignees_url":"https://api.github.com/repos/scipy/scipy/assignees{/user}","branches_url":"https://api.github.com/repos/scipy/scipy/branches{/branch}","tags_url":"https://api.github.com/repos/scipy/scipy/tags","blobs_url":"https://api.github.com/repos/scipy/scipy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scipy/scipy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scipy/scipy/git/refs{/sha}","trees_url":"https://api.github.com/repos/scipy/scipy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scipy/scipy/statuses/{sha}","languages_url":"https://api.github.com/repos/scipy/scipy/languages","stargazers_url":"https://api.github.com/repos/scipy/scipy/stargazers","contributors_url":"https://api.github.com/repos/scipy/scipy/contributors","subscribers_url":"https://api.github.com/repos/scipy/scipy/subscribers","subscription_url":"https://api.github.com/repos/scipy/scipy/subscription","commits_url":"https://api.github.com/repos/scipy/scipy/commits{/sha}","git_commits_url":"https://api.github.com/repos/scipy/scipy/git/commits{/sha}","comments_url":"https://api.github.com/repos/scipy/scipy/comments{/number}","issue_comment_url":"https://api.github.com/repos/scipy/scipy/issues/comments{/number}","contents_url":"https://api.github.com/repos/scipy/scipy/contents/{+path}","compare_url":"https://api.github.com/repos/scipy/scipy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scipy/scipy/merges","archive_url":"https://api.github.com/repos/scipy/scipy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scipy/scipy/downloads","issues_url":"https://api.github.com/repos/scipy/scipy/issues{/number}","pulls_url":"https://api.github.com/repos/scipy/scipy/pulls{/number}","milestones_url":"https://api.github.com/repos/scipy/scipy/milestones{/number}","notifications_url":"https://api.github.com/repos/scipy/scipy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scipy/scipy/labels{/name}","releases_url":"https://api.github.com/repos/scipy/scipy/releases{/id}","created_at":"2011-03-09T18:52:03Z","updated_at":"2015-03-06T15:16:14Z","pushed_at":"2015-03-06T15:16:14Z","git_url":"git://github.com/scipy/scipy.git","ssh_url":"git@github.com:scipy/scipy.git","clone_url":"https://github.com/scipy/scipy.git","svn_url":"https://github.com/scipy/scipy","homepage":"http://scipy.org/scipylib/","size":84154,"stargazers_count":1526,"watchers_count":1526,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":806,"mirror_url":null,"open_issues_count":788,"forks":806,"open_issues":788,"watchers":1526,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scipy/scipy/pulls/4021"},"html":{"href":"https://github.com/scipy/scipy/pull/4021"},"issue":{"href":"https://api.github.com/repos/scipy/scipy/issues/4021"},"comments":{"href":"https://api.github.com/repos/scipy/scipy/issues/4021/comments"},"review_comments":{"href":"https://api.github.com/repos/scipy/scipy/pulls/4021/comments"},"review_comment":{"href":"https://api.github.com/repos/scipy/scipy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scipy/scipy/pulls/4021/commits"},"statuses":{"href":"https://api.github.com/repos/scipy/scipy/statuses/77cd5732b22ac906b7afe68e1a8c341027308382"}}}}