{"action":"created","comment":{"url":"https://api.github.com/repos/scikit-image/scikit-image/pulls/comments/81118383","pull_request_review_id":2121144,"id":81118383,"diff_hunk":"@@ -0,0 +1,287 @@\n+\"\"\" Scattering transform code licensed under\n+    BSD license.\n+    Original author: Sira Ferradans, based on a code developed by\n+    Ivan Dokmanic and Michael Eickenberg\n+\"\"\"\n+import numpy as np\n+from skimage._shared.utils import assert_nD\n+from skimage.filters.filter_bank import multiresolution_filter_bank_morlet2d\n+import warnings, sys\n+\n+\n+def _apply_fourier_mult(signals, filters):\n+    \"\"\"Pointwise multiplication of the filters and signals \n+    in the Fourier domain.\n+        This function applies a filtering of the signals in the\n+    Fourier domain using the filters, also in the Fourier domain. Note\n+    that we apply for every signal (num_signal) a number L of filters, \n+    thus the output is (num_signals, L, N, N).\n+        Parameters\n+        ----------\n+        signals: ndarray (3D)\n+            Signals in the Fourier domain stacked as (num_signals, N, N).\n+            Note that color images can be stacked as 'num_signals'.\n+        filters: ndarray (3D)\n+            Filters in the Fourier domain, stacked as (L, N, N) where\n+            L is the num. of filters to apply\n+        Returns\n+        -------\n+        filtered_signals : ndarray\n+            Filtered signals in the Fourier domain,\n+            stacked as (num_signals,L,N,N)\n+        \"\"\"\n+    filtered_s = signals[:, np.newaxis, :, :] * filters[np.newaxis, :, :, :]\n+    return filtered_s\n+\n+\n+def _subsample(X, j):\n+    \"\"\"Spatial subsampling on the last two dimensions of X at a rate that\n+    depends on 2**j.\n+    Parameters\n+    ----------\n+    X : array like variable.\n+        3D ndarray with shape (N, L, n, n) or (N, n, n). The subsampling is \n+        produced in the last two dimensions (n, n)\n+    j : int\n+        Rate of subsampling is 2**j\n+    Returns\n+    -------\n+    XX : ndarray\n+        Subsampled images\n+    \"\"\"\n+    dsf = 2 ** j\n+    return dsf * X[..., ::dsf, ::dsf]\n+\n+\n+def _apply_lowpass(img, phi, J, n_scat):\n+    \"\"\"Apply a low pass filter 'phi' to images 'img' and subsample.\n+    Convolution the filter phi (in the Fourier domain) on the set of images\n+    defined by img. The convolution is done in the Fourier domain, thus it is\n+    a pointwise multiplication of the filter phi and the images, stored in the\n+    last 2 dimensions of img. Then the images are subsampled at the appropiate\n+    rate to have 'n_scat' spatial coefficients\n+    Parameters\n+    ----------\n+    img : ndarray of (N, L, n, n) or (N, n, n) shape.\n+        Input images in the spatial domain, stacked along the first dimensions.\n+    phi : Low pass filter as a 2D ndarray\n+        Low pass filter in the Fourier domain, stored as (n, n) matrix\n+    J : int\n+        Rate of subsampling 2**J\n+    n_scat : int\n+        number of spatial coefficients of the scattering vector\n+    Returns\n+    -------\n+    XX : ndarray\n+        stacked images after being filtered and subsampled\n+    \"\"\"\n+    img_filtered = np.real(np.fft.ifft2(np.fft.fft2(img) * phi))\n+    n_spatial = img.shape[-1]\n+    ds = int(n_spatial / n_scat)\n+    return 2 ** (J - 1) * img_filtered[..., ::ds, ::ds]\n+\n+\n+def scattering(x, wavelet_filters=None, m=2):\n+    \"\"\"Compute the scattering transform of a signal (or set of signals).\n+    Given 'x', a set of 2D signals, this function computes the\n+    scattering transform of these signals using the filter bank\n+    'wavelet_filters'.\n+    Notes\n+    -----\n+    **Boundary values: The scattering transform applies a set of convolutions\n+    to the input signals. These convolutions are computed as the point-wise\n+    multiplication in the Fourier domain, thus the boundary values of the\n+    image are circular or cyclic. In case other\n+    kind of boundary values are needed, for instance zero-padded, the images\n+    should be preprocessed appropriately before calling this function.\n+    **Shape of x: The signals x must be squared shaped, thus (N, px, px)\n+    and not (N, px, py) for py != px. In case the images are rectangular,\n+    they will be cropped to the smallest dimension, px or py.\n+    Parameters\n+    ----------\n+    x : array_like\n+        3D dnarray with N images (2D arrays) of size (px, px), thus x has size\n+         (N, px, px)\n+        In case the array is rectangular (N, px, py) for px not equal to py, t\n+        he images will be cropped.\n+    wavelet_filters : Dictionary with the multiresolution wavelet filter bank\n+        Dictionary of vectors obtained after calling:\n+            >>>> px = 32 #number of pixels of the images\n+            >>>> J = np.log2(px) #number of scales\n+            >>>> wavelet_filters = multiresolution_filter_bank_morlet2d(px, J=J)\n+    m : int\n+        Order of the scattering transform, which can be 0, 1 or 2.\n+    Returns\n+    -------\n+    S : 4D array_like\n+        Scattering transform of the x signals, of size\n+        (N, num_coeffs, spatial_coefs, spatial_coefs). For more information\n+        see _[1] _[2]\n+    U : array_like\n+        Result before applying the lowpass filter and subsampling.\n+    S_tree : dictionary\n+        Dictionary that allows to access the scattering coefficients (S)\n+        according to the layer and indices. More specifically:\n+            Zero-order layer: The only available key is 0:\n+            S_tree[0] : returns all the coefficients of the 0-order scattering\n+             transform\n+\n+            First-order layer: The keys are tuples with (j, l) indexing\n+            S_tree[(j, l)] : returns the first order coefficients for scale 'j'\n+             and angle 'l'\n+            S_tree[((j1, l1), (j2, l2))] : the second order for scale 'j1',\n+            angle 'l1' on the first layer, and 'j2', 'l2' in the second layer.\n+\n+        The number of coefficients for each entry is\n+        (N, spatial_coefs, spatial_coefs)\n+    Raises\n+    ------\n+    UserWarning\n+        If the size of x is not (N, px, px) and informs that the images with be\n+        cropped to (N, px, px)\n+    UserWarning\n+        If no wavelet filters, the function creates a multiresolution set of\n+        filters with predefined settings, but warns about the parameters and\n+        suggests precomputing the filters.\n+    ValueError\n+        If the value of m is not 0, 1, or 2.\n+    References\n+    ----------\n+    .. [1] Bruna, J., Mallat, S. 'Invariant Scattering Convolutional Networks'.\n+    IEEE Transactions on PAMI, 2012.\n+    .. [2] Oyallon, E. et Mallat, S. 'Deep Roto-translation Scattering for\n+    Object Classification'. CVPR 2015.\n+    Examples\n+    --------\n+    Processing a set of 3 (randomly generated) images:\n+       >>>> import numpy as np\n+       >>>> from scattering.filter_bank \\\n+                import multiresolution_filter_bank_morlet2d\n+       >>>> from scattering.scattering import scattering\n+       >>>> px = 32 #number of pixels of the images\n+       >>>> images = range(0,3*px*px).reshape(3,px,px) #create images\n+       >>>> wavelet_filters,lp = \\\n+                multiresolution_filter_bank_morlet2d(px,J=np.log2(px))\n+       >>>> S,U = scattering(images,m=2)\n+    \"\"\"\n+    # Check that the input data is correct:\n+    # 1.- Signals are squared, otherwise, crop\n+    assert_nD(x, 3, 'x')  # check that the images are correctly stacked\n+    num_signals, px, py = x.shape\n+    if px != py:","path":"skimage/feature/scattering.py","position":171,"original_position":171,"commit_id":"d0dbdde2c9879e6e034c16cda0f75557f70f89cc","original_commit_id":"4100a5a0918919302feb7bffd83f4914e64d83b5","user":{"login":"eickenberg","id":1306635,"avatar_url":"https://avatars.githubusercontent.com/u/1306635?v=3","gravatar_id":"","url":"https://api.github.com/users/eickenberg","html_url":"https://github.com/eickenberg","followers_url":"https://api.github.com/users/eickenberg/followers","following_url":"https://api.github.com/users/eickenberg/following{/other_user}","gists_url":"https://api.github.com/users/eickenberg/gists{/gist_id}","starred_url":"https://api.github.com/users/eickenberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eickenberg/subscriptions","organizations_url":"https://api.github.com/users/eickenberg/orgs","repos_url":"https://api.github.com/users/eickenberg/repos","events_url":"https://api.github.com/users/eickenberg/events{/privacy}","received_events_url":"https://api.github.com/users/eickenberg/received_events","type":"User","site_admin":false},"body":"I am not sure I follow: If you define the filters in the spatial domain, nothing should change in the way the filters are calculated. In fourier there will be an aspect ratio, but it shouldn't change the Littlewood-Paley covering at all.","created_at":"2016-09-29T11:45:37Z","updated_at":"2016-09-29T11:45:37Z","html_url":"https://github.com/scikit-image/scikit-image/pull/2300#discussion_r81118383","pull_request_url":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300","_links":{"self":{"href":"https://api.github.com/repos/scikit-image/scikit-image/pulls/comments/81118383"},"html":{"href":"https://github.com/scikit-image/scikit-image/pull/2300#discussion_r81118383"},"pull_request":{"href":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300"}}},"pull_request":{"url":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300","id":84874034,"html_url":"https://github.com/scikit-image/scikit-image/pull/2300","diff_url":"https://github.com/scikit-image/scikit-image/pull/2300.diff","patch_url":"https://github.com/scikit-image/scikit-image/pull/2300.patch","issue_url":"https://api.github.com/repos/scikit-image/scikit-image/issues/2300","number":2300,"state":"open","locked":false,"title":"Add scattering transform","user":{"login":"siraferradans","id":6280654,"avatar_url":"https://avatars.githubusercontent.com/u/6280654?v=3","gravatar_id":"","url":"https://api.github.com/users/siraferradans","html_url":"https://github.com/siraferradans","followers_url":"https://api.github.com/users/siraferradans/followers","following_url":"https://api.github.com/users/siraferradans/following{/other_user}","gists_url":"https://api.github.com/users/siraferradans/gists{/gist_id}","starred_url":"https://api.github.com/users/siraferradans/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/siraferradans/subscriptions","organizations_url":"https://api.github.com/users/siraferradans/orgs","repos_url":"https://api.github.com/users/siraferradans/repos","events_url":"https://api.github.com/users/siraferradans/events{/privacy}","received_events_url":"https://api.github.com/users/siraferradans/received_events","type":"User","site_admin":false},"body":"## Description\r\nThis is a re-pull request for the scattering transform, that I did 4 days ago (#2295). Following the indications of @sciunto (as far as I could), I am re-summiting the code with just the new files (scattering.py, filter_bank.py) and its examples (plot_scattering_classification.py, plot_scattering.py, plot_multiresolution_filterbank.py). For completeness, I am copying the text I put in the previous pull request:  \r\n\r\nI have implemented the scattering transform to be applied to images. This scattering transform needs a multiresolution wavelet filter, thus you can also find this new functionality. There are three new examples that show how to use the scattering transform (how to create it and access it), how to use it for classification, and how to use the multiresolution filters implemented.\r\n\r\n\r\n## Checklist\r\n[It's fine to submit PRs which are a work in progress! But before they are merged, all PRs should provide:]\r\n- [X] Clean style in [the spirit of PEP8](https://www.python.org/dev/peps/pep-0008/)\r\n- [X] [Docstrings for all functions](https://github.com/numpy/numpy/blob/master/doc/example.py)\r\n- [X] Gallery example in `./doc/examples` (new features only)\r\n- [ ] Unit tests\r\n\r\nI am not sure how to provide unitary tests for the proposed code, since there are no mathematical constraints on the output scattering features. Any suggestions here are appreciated. \r\n\r\n@eickenberg\r\n\r\n## References\r\nThis pull-request is 'improving' the #2295 pull request.\r\n\r\nFor an explanation on the scattering transform, you can check the examples:\r\n\r\n - plot_scattering\r\n - plot_scattering_classification\r\n - papers:\r\n\r\n[1] Bruna, J., Mallat, S. 'Invariant Scattering Convolutional Networks'.IEEE TPAMI, 2012.\r\n[2] Oyallon, E. et Mallat, S. 'Deep Roto-translation Scattering for Object Classification'. CVPR 2015\r\n\r\n","created_at":"2016-09-12T13:47:36Z","updated_at":"2016-09-29T11:45:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6d4cc4c379a6c0d8748c66b63c1746209a3a453f","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300/commits","review_comments_url":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300/comments","review_comment_url":"https://api.github.com/repos/scikit-image/scikit-image/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scikit-image/scikit-image/issues/2300/comments","statuses_url":"https://api.github.com/repos/scikit-image/scikit-image/statuses/d0dbdde2c9879e6e034c16cda0f75557f70f89cc","head":{"label":"siraferradans:add_scattering_again","ref":"add_scattering_again","sha":"d0dbdde2c9879e6e034c16cda0f75557f70f89cc","user":{"login":"siraferradans","id":6280654,"avatar_url":"https://avatars.githubusercontent.com/u/6280654?v=3","gravatar_id":"","url":"https://api.github.com/users/siraferradans","html_url":"https://github.com/siraferradans","followers_url":"https://api.github.com/users/siraferradans/followers","following_url":"https://api.github.com/users/siraferradans/following{/other_user}","gists_url":"https://api.github.com/users/siraferradans/gists{/gist_id}","starred_url":"https://api.github.com/users/siraferradans/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/siraferradans/subscriptions","organizations_url":"https://api.github.com/users/siraferradans/orgs","repos_url":"https://api.github.com/users/siraferradans/repos","events_url":"https://api.github.com/users/siraferradans/events{/privacy}","received_events_url":"https://api.github.com/users/siraferradans/received_events","type":"User","site_admin":false},"repo":{"id":60183594,"name":"scikit-image","full_name":"siraferradans/scikit-image","owner":{"login":"siraferradans","id":6280654,"avatar_url":"https://avatars.githubusercontent.com/u/6280654?v=3","gravatar_id":"","url":"https://api.github.com/users/siraferradans","html_url":"https://github.com/siraferradans","followers_url":"https://api.github.com/users/siraferradans/followers","following_url":"https://api.github.com/users/siraferradans/following{/other_user}","gists_url":"https://api.github.com/users/siraferradans/gists{/gist_id}","starred_url":"https://api.github.com/users/siraferradans/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/siraferradans/subscriptions","organizations_url":"https://api.github.com/users/siraferradans/orgs","repos_url":"https://api.github.com/users/siraferradans/repos","events_url":"https://api.github.com/users/siraferradans/events{/privacy}","received_events_url":"https://api.github.com/users/siraferradans/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/siraferradans/scikit-image","description":"Image Processing SciKit (Toolbox for SciPy)","fork":true,"url":"https://api.github.com/repos/siraferradans/scikit-image","forks_url":"https://api.github.com/repos/siraferradans/scikit-image/forks","keys_url":"https://api.github.com/repos/siraferradans/scikit-image/keys{/key_id}","collaborators_url":"https://api.github.com/repos/siraferradans/scikit-image/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/siraferradans/scikit-image/teams","hooks_url":"https://api.github.com/repos/siraferradans/scikit-image/hooks","issue_events_url":"https://api.github.com/repos/siraferradans/scikit-image/issues/events{/number}","events_url":"https://api.github.com/repos/siraferradans/scikit-image/events","assignees_url":"https://api.github.com/repos/siraferradans/scikit-image/assignees{/user}","branches_url":"https://api.github.com/repos/siraferradans/scikit-image/branches{/branch}","tags_url":"https://api.github.com/repos/siraferradans/scikit-image/tags","blobs_url":"https://api.github.com/repos/siraferradans/scikit-image/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/siraferradans/scikit-image/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/siraferradans/scikit-image/git/refs{/sha}","trees_url":"https://api.github.com/repos/siraferradans/scikit-image/git/trees{/sha}","statuses_url":"https://api.github.com/repos/siraferradans/scikit-image/statuses/{sha}","languages_url":"https://api.github.com/repos/siraferradans/scikit-image/languages","stargazers_url":"https://api.github.com/repos/siraferradans/scikit-image/stargazers","contributors_url":"https://api.github.com/repos/siraferradans/scikit-image/contributors","subscribers_url":"https://api.github.com/repos/siraferradans/scikit-image/subscribers","subscription_url":"https://api.github.com/repos/siraferradans/scikit-image/subscription","commits_url":"https://api.github.com/repos/siraferradans/scikit-image/commits{/sha}","git_commits_url":"https://api.github.com/repos/siraferradans/scikit-image/git/commits{/sha}","comments_url":"https://api.github.com/repos/siraferradans/scikit-image/comments{/number}","issue_comment_url":"https://api.github.com/repos/siraferradans/scikit-image/issues/comments{/number}","contents_url":"https://api.github.com/repos/siraferradans/scikit-image/contents/{+path}","compare_url":"https://api.github.com/repos/siraferradans/scikit-image/compare/{base}...{head}","merges_url":"https://api.github.com/repos/siraferradans/scikit-image/merges","archive_url":"https://api.github.com/repos/siraferradans/scikit-image/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/siraferradans/scikit-image/downloads","issues_url":"https://api.github.com/repos/siraferradans/scikit-image/issues{/number}","pulls_url":"https://api.github.com/repos/siraferradans/scikit-image/pulls{/number}","milestones_url":"https://api.github.com/repos/siraferradans/scikit-image/milestones{/number}","notifications_url":"https://api.github.com/repos/siraferradans/scikit-image/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/siraferradans/scikit-image/labels{/name}","releases_url":"https://api.github.com/repos/siraferradans/scikit-image/releases{/id}","deployments_url":"https://api.github.com/repos/siraferradans/scikit-image/deployments","created_at":"2016-06-01T14:22:56Z","updated_at":"2016-06-01T14:22:59Z","pushed_at":"2016-09-29T11:00:15Z","git_url":"git://github.com/siraferradans/scikit-image.git","ssh_url":"git@github.com:siraferradans/scikit-image.git","clone_url":"https://github.com/siraferradans/scikit-image.git","svn_url":"https://github.com/siraferradans/scikit-image","homepage":"http://scikit-image.org","size":41454,"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":"scikit-image:master","ref":"master","sha":"2f71b5787662ce7589bb878c55359cd076f84c83","user":{"login":"scikit-image","id":897180,"avatar_url":"https://avatars.githubusercontent.com/u/897180?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-image","html_url":"https://github.com/scikit-image","followers_url":"https://api.github.com/users/scikit-image/followers","following_url":"https://api.github.com/users/scikit-image/following{/other_user}","gists_url":"https://api.github.com/users/scikit-image/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-image/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-image/subscriptions","organizations_url":"https://api.github.com/users/scikit-image/orgs","repos_url":"https://api.github.com/users/scikit-image/repos","events_url":"https://api.github.com/users/scikit-image/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-image/received_events","type":"Organization","site_admin":false},"repo":{"id":2014929,"name":"scikit-image","full_name":"scikit-image/scikit-image","owner":{"login":"scikit-image","id":897180,"avatar_url":"https://avatars.githubusercontent.com/u/897180?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-image","html_url":"https://github.com/scikit-image","followers_url":"https://api.github.com/users/scikit-image/followers","following_url":"https://api.github.com/users/scikit-image/following{/other_user}","gists_url":"https://api.github.com/users/scikit-image/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-image/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-image/subscriptions","organizations_url":"https://api.github.com/users/scikit-image/orgs","repos_url":"https://api.github.com/users/scikit-image/repos","events_url":"https://api.github.com/users/scikit-image/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-image/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scikit-image/scikit-image","description":"Image Processing SciKit (Toolbox for SciPy)","fork":false,"url":"https://api.github.com/repos/scikit-image/scikit-image","forks_url":"https://api.github.com/repos/scikit-image/scikit-image/forks","keys_url":"https://api.github.com/repos/scikit-image/scikit-image/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scikit-image/scikit-image/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scikit-image/scikit-image/teams","hooks_url":"https://api.github.com/repos/scikit-image/scikit-image/hooks","issue_events_url":"https://api.github.com/repos/scikit-image/scikit-image/issues/events{/number}","events_url":"https://api.github.com/repos/scikit-image/scikit-image/events","assignees_url":"https://api.github.com/repos/scikit-image/scikit-image/assignees{/user}","branches_url":"https://api.github.com/repos/scikit-image/scikit-image/branches{/branch}","tags_url":"https://api.github.com/repos/scikit-image/scikit-image/tags","blobs_url":"https://api.github.com/repos/scikit-image/scikit-image/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scikit-image/scikit-image/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scikit-image/scikit-image/git/refs{/sha}","trees_url":"https://api.github.com/repos/scikit-image/scikit-image/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scikit-image/scikit-image/statuses/{sha}","languages_url":"https://api.github.com/repos/scikit-image/scikit-image/languages","stargazers_url":"https://api.github.com/repos/scikit-image/scikit-image/stargazers","contributors_url":"https://api.github.com/repos/scikit-image/scikit-image/contributors","subscribers_url":"https://api.github.com/repos/scikit-image/scikit-image/subscribers","subscription_url":"https://api.github.com/repos/scikit-image/scikit-image/subscription","commits_url":"https://api.github.com/repos/scikit-image/scikit-image/commits{/sha}","git_commits_url":"https://api.github.com/repos/scikit-image/scikit-image/git/commits{/sha}","comments_url":"https://api.github.com/repos/scikit-image/scikit-image/comments{/number}","issue_comment_url":"https://api.github.com/repos/scikit-image/scikit-image/issues/comments{/number}","contents_url":"https://api.github.com/repos/scikit-image/scikit-image/contents/{+path}","compare_url":"https://api.github.com/repos/scikit-image/scikit-image/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scikit-image/scikit-image/merges","archive_url":"https://api.github.com/repos/scikit-image/scikit-image/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scikit-image/scikit-image/downloads","issues_url":"https://api.github.com/repos/scikit-image/scikit-image/issues{/number}","pulls_url":"https://api.github.com/repos/scikit-image/scikit-image/pulls{/number}","milestones_url":"https://api.github.com/repos/scikit-image/scikit-image/milestones{/number}","notifications_url":"https://api.github.com/repos/scikit-image/scikit-image/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scikit-image/scikit-image/labels{/name}","releases_url":"https://api.github.com/repos/scikit-image/scikit-image/releases{/id}","deployments_url":"https://api.github.com/repos/scikit-image/scikit-image/deployments","created_at":"2011-07-07T22:07:20Z","updated_at":"2016-09-28T23:58:45Z","pushed_at":"2016-09-29T11:00:15Z","git_url":"git://github.com/scikit-image/scikit-image.git","ssh_url":"git@github.com:scikit-image/scikit-image.git","clone_url":"https://github.com/scikit-image/scikit-image.git","svn_url":"https://github.com/scikit-image/scikit-image","homepage":"http://scikit-image.org","size":78439,"stargazers_count":1256,"watchers_count":1256,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":639,"mirror_url":null,"open_issues_count":321,"forks":639,"open_issues":321,"watchers":1256,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300"},"html":{"href":"https://github.com/scikit-image/scikit-image/pull/2300"},"issue":{"href":"https://api.github.com/repos/scikit-image/scikit-image/issues/2300"},"comments":{"href":"https://api.github.com/repos/scikit-image/scikit-image/issues/2300/comments"},"review_comments":{"href":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300/comments"},"review_comment":{"href":"https://api.github.com/repos/scikit-image/scikit-image/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scikit-image/scikit-image/pulls/2300/commits"},"statuses":{"href":"https://api.github.com/repos/scikit-image/scikit-image/statuses/d0dbdde2c9879e6e034c16cda0f75557f70f89cc"}}}}
{"actor":{"display_login":"eickenberg"}}