GitHub PullRequestReviewCommentEvent at 2014-09-22 15:52:21
Repository: nilearn
Actor: GaelVaroquaux
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/nilearn/nilearn/pulls/comments/17857829","id":17857829,"diff_hunk":"@@ -0,0 +1,319 @@\n+import itertools\n+from functools import partial\n+from nose import SkipTest\n+from nose.tools import assert_equal, assert_true\n+import numpy as np\n+from sklearn.externals.joblib import Memory\n+from sklearn.datasets import load_iris\n+from sklearn.utils import extmath\n+from sklearn.linear_model import Lasso\n+from sklearn.utils import check_random_state\n+from sklearn.linear_model import LogisticRegression\n+from ..space_net import (RegressorFeatureSelector,\n+                         ClassifierFeatureSelector, EarlyStoppingCallback,\n+                         _my_alpha_grid, path_scores, SpaceNet)\n+from ..space_net_solvers import (smooth_lasso_logistic,\n+                                 smooth_lasso_squared_loss)\n+\n+rng = check_random_state(42)\n+logistic_path_scores = partial(path_scores, classif=True)\n+squared_loss_path_scores = partial(path_scores, classif=False)\n+\n+# Data used in almost all tests\n+from .simulate_smooth_lasso_data import create_smooth_simulation_data\n+X, y, w, mask = create_smooth_simulation_data(\n+    snr=1., n_samples=10, size=4, n_points=5, random_state=42)\n+\n+\n+@SkipTest\n+def test_same_lasso_classifier_cv():\n+    # XXX test fails with early stopping in CV\n+    l1_ratio = 1.\n+    memory = Memory(\"cache\")\n+    iris = load_iris()\n+    X = iris.data\n+    y = iris.target\n+    y = 2 * (y == 2) - 1\n+    tol = 1e-3\n+\n+    # classification\n+    n_alphas = 5\n+    tvl1classifiercv = SpaceNet(n_alphas=n_alphas, memory=memory, cv=2,\n+                                l1_ratio=l1_ratio, tol=tol, penalty=\"tvl1\",\n+                                classif=True).fit(X, y)\n+    slclassifiercv = SpaceNet(n_alphas=n_alphas, memory=memory, classif=True,\n+                              penalty=\"smooth-lasso\",\n+                              cv=2, l1_ratio=l1_ratio, tol=tol).fit(X, y)\n+    assert_equal(tvl1classifiercv.alpha_, slclassifiercv.alpha_)\n+\n+    # regression\n+    tvl1regressorcv = SpaceNet(n_alphas=n_alphas, memory=memory, cv=2,\n+                               l1_ratio=l1_ratio, tol=tol, classif=False,\n+                               penalty=\"tvl1\").fit(X, y)\n+    slregressorcv = SpaceNet(n_alphas=n_alphas, memory=memory, classif=True,\n+                             cv=2, l1_ratio=l1_ratio, tol=tol,\n+                             penalty=\"smooth-lasso\").fit(X, y)\n+    assert_equal(tvl1regressorcv.alpha_, slregressorcv.alpha_)\n+\n+\n+def test_my_alpha_grid(n_samples=4, n_features=3):\n+    X = rng.randn(n_samples, n_features)\n+    y = np.arange(n_samples)\n+\n+    for l1_ratio in [.5, 1.]:\n+        alpha_max = np.max(np.abs(np.dot(X.T, y))) / n_samples / l1_ratio\n+        assert_equal(_my_alpha_grid(X, y, n_alphas=1, l1_ratio=l1_ratio),\n+                     alpha_max)\n+\n+    for standardize in [False, True]:\n+        for l1_ratio in [.5, 1.]:\n+            alpha_max = np.max(np.abs(np.dot(X.T, y))) / n_samples / l1_ratio\n+            for n_alphas in xrange(1, 10):\n+                alphas = _my_alpha_grid(\n+                    X, y, n_alphas=n_alphas, l1_ratio=l1_ratio,\n+                    standardize=standardize)\n+                if not standardize:\n+                    assert_equal(alphas.max(), alpha_max)\n+                assert_equal(n_alphas, len(alphas))\n+\n+\n+def test_my_alpha_grid_same_as_sk():\n+    try:\n+        from sklearn.linear_model.coordinate_descent import _alpha_grid\n+        iris = load_iris()\n+        X = iris.data\n+        y = iris.target\n+        for normalize in [True]:\n+            for fit_intercept in [True, False]:\n+                np.testing.assert_array_equal(_my_alpha_grid(\n+                        X, y, n_alphas=5, normalize=normalize,\n+                        fit_intercept=fit_intercept, standardize=True),\n+                        _alpha_grid(X, y, n_alphas=5, normalize=normalize,\n+                                    fit_intercept=fit_intercept))\n+    except ImportError:\n+        raise SkipTest\n+\n+\n+def test_featureselectors():\n+    import random\n+    iris = load_iris()\n+    X, y = iris.data, iris.target\n+    for ndim in range(1, 4):\n+        shape = [4] * ndim\n+        for percentile in [0, 10, 100]:\n+            for n_samples in [X.shape[0], X.shape[1] - 1]:\n+                for with_mask in [True, False]:\n+                    if with_mask:\n+                        mask = np.zeros(np.prod(shape)).astype(np.bool)\n+                        support = random.sample(xrange(np.prod(mask.shape)),\n+                                                X.shape[1])\n+                        mask[support] = 1\n+                        mask = mask.reshape(shape)\n+                    else:\n+                        mask = None\n+\n+                    for selector_class in [RegressorFeatureSelector,\n+                                           ClassifierFeatureSelector]:\n+                        selector = selector_class(percentile=percentile,\n+                                                  mask=mask)\n+                        salt = int(\"Classifier\" in selector_class.__name__)\n+                        X_ = X[:n_samples]\n+                        y_ = y[:n_samples]\n+                        X_ = selector.fit_transform(X_, y_)\n+                        if not mask is None:\n+                            assert_true(selector.mask_ is not None)\n+                        else:\n+                            assert_true(selector.mask_ is None)\n+                        coef_ = selector.inverse_transform(rng.randn(\n+                                selector.support_.sum() + salt))\n+                        assert_equal(len(coef_), X.shape[1] + salt)\n+\n+\n+def test_earlystoppingcallbackobject(n_samples=10, n_features=30):\n+    # This test evolves w so that every line of th EarlyStoppingCallback\n+    # code is executed a some point. This a kind of code fuzzing.\n+    X_test = rng.randn(n_samples, n_features)\n+    y_test = np.dot(X_test, np.ones(n_features))\n+    w = np.zeros(n_features)\n+    escb = EarlyStoppingCallback(X_test, y_test, verbose=1)\n+    for counter in xrange(50):\n+        k = min(counter, n_features - 1)\n+        w[k] = 1\n+\n+        # jitter\n+        if k > 0 and rng.rand() > .9:\n+            w[k - 1] = 1 - w[k - 1]\n+\n+        escb(dict(w=w, counter=counter))\n+        assert_equal(len(escb.test_errors), counter + 1)\n+        print np.mean(np.diff(escb.test_errors[-5:])), len(escb.test_errors)\n+\n+        # restart\n+        if counter > 20:\n+            w *= 0.\n+\n+\n+def test_params_correctly_propagated_in_constructors():\n+    for (penalty, classif, n_alphas, l1_ratio, n_jobs,\n+         cv, perc) in itertools.product(\n+        [\"smooth-lasso\", \"tvl1\"], [True, False],\n+        [.1, .01], [.5, 1.], [1, -1], [2, 3], [5, 10]):\n+        cvobj = SpaceNet(n_alphas=n_alphas, n_jobs=n_jobs, l1_ratio=l1_ratio,\n+                         cv=cv, screening_percentile=perc, penalty=penalty,\n+                         classif=classif)\n+        assert_equal(cvobj.n_alphas, n_alphas)\n+        assert_equal(cvobj.l1_ratio, l1_ratio)\n+        assert_equal(cvobj.n_jobs, n_jobs)\n+        assert_equal(cvobj.cv, cv)\n+        assert_equal(cvobj.screening_percentile, perc)\n+\n+\n+def test_logistic_path_scores():\n+    iris = load_iris()\n+    X, y = iris.data, iris.target\n+    alphas = [1., .1, .01]\n+    test_scores, best_w, _ = logistic_path_scores(\n+        smooth_lasso_logistic, X, y, alphas, .5,\n+        range(len(X)), range(len(X)))\n+    assert_equal(len(test_scores), len(alphas))\n+    assert_equal(X.shape[1] + 1, len(best_w))\n+\n+\n+def test_squared_loss_path_scores():\n+    iris = load_iris()\n+    X, y = iris.data, iris.target\n+    alphas = [1., .1, .01]\n+    test_scores, best_w, _ = squared_loss_path_scores(\n+        smooth_lasso_squared_loss, X, y, alphas, .5,\n+        range(len(X)), range(len(X)))\n+    assert_equal(len(test_scores), len(alphas))\n+    assert_equal(X.shape[1], len(best_w))\n+\n+\n+def test_estimators_are_special_cv_objects():\n+    iris = load_iris()\n+    X, y = iris.data, iris.target\n+    alpha = 1.\n+    for penalty, classif in itertools.product(['smooth-lasso', 'tvl1'],\n+                                             [True, False]):\n+        cv = SpaceNet(penalty=penalty, alpha=alpha)\n+        cv.fit(X, y)\n+        np.testing.assert_array_equal([alpha], cv.alphas_)\n+\n+\n+def test_tv_regression_2D_image_doesnt_crash():\n+    dim = (16, 16)\n+    W_init = np.zeros(dim)\n+    W_init[2:6, 3:7] = 1\n+    np.random.seed(0)\n+    n = 40\n+    p = dim[0] * dim[1]\n+    X = np.ones((n, 1)) + W_init.ravel().T\n+    X += np.random.randn(n, p)\n+    y = np.dot(X, W_init.ravel())\n+    alpha = 1.\n+\n+    for l1_ratio in [1.]:\n+        SpaceNet(alpha=alpha, l1_ratio=l1_ratio, penalty=\"tvl1\",\n+                 classif=False, max_iter=10).fit(X, y)\n+\n+\n+def test_tv_regression_3D_image_doesnt_crash():\n+    dim = (3, 4, 5)\n+    W_init = np.zeros(dim)\n+    W_init[2:3, 3:, 1:3] = 1\n+\n+    np.random.seed(0)\n+    n = 10\n+    p = dim[0] * dim[1] * dim[2]\n+    X = np.ones((n, 1)) + W_init.ravel().T\n+    X += np.random.randn(n, p)\n+    y = np.dot(X, W_init.ravel())\n+    alpha = 1.\n+\n+    for l1_ratio in [0., .5, 1.]:\n+        SpaceNet(alpha=alpha, l1_ratio=l1_ratio, penalty=\"tvl1\",\n+                 classif=False, max_iter=10).fit(X, y)\n+\n+\n+def test_log_reg_vs_smooth_lasso_two_classes_iris(C=1., tol=1e-10,\n+                                                  zero_thr=1e-4):\n+    # Test for one of the extreme cases of Smooth Lasso: That is, with\n+    # l1_ratio = 1 (pure Lasso), we compare Smooth Lasso's coefficients'\n+    # performance with the coefficients obtained from Scikit-Learn's\n+    # LogisticRegression, with l1 penalty, in a 2 classes classification task\n+    iris = load_iris()\n+    X, y = iris.data, iris.target\n+    y = 2 * (y > 0) - 1\n+    tvl1 = SpaceNet(alpha=1. / C / X.shape[0], l1_ratio=1., tol=tol,\n+                    verbose=0, max_iter=1000, penalty=\"tvl1\",\n+                    classif=True).fit(X, y)\n+    sklogreg = LogisticRegression(penalty=\"l1\", fit_intercept=True,\n+                                  tol=tol, C=C).fit(X, y)\n+\n+    # compare supports\n+    np.testing.assert_array_equal((np.abs(tvl1.coef_) < zero_thr),\n+                                  (np.abs(sklogreg.coef_) < zero_thr))\n+\n+    # compare predictions\n+    np.testing.assert_array_equal(tvl1.predict(X), sklogreg.predict(X))\n+\n+\n+def test_smooth_lasso_works_without_mask():\n+    n_samples = 10\n+    n_features = 125\n+    for l1_ratio in [0., .5, 1.]:\n+        X = rng.randn(n_samples, n_features)\n+        y = rng.randn(n_samples)\n+        SpaceNet(l1_ratio=l1_ratio, mask=None, penalty=\"smooth-lasso\",\n+                 classif=False, max_iter=10, alpha=1.).fit(X, y)\n+        SpaceNet(alpha=1., l1_ratio=l1_ratio, mask=None, classif=True,\n+                 penalty=\"smooth-lasso\", max_iter=10).fit(X, (y > 0))\n+\n+\n+@SkipTest","path":"nilearn/decoding/tests/test_space_net.py","position":null,"original_position":274,"commit_id":"cbc5c7a9244c38277e4afb4f1778def87cb1400e","original_commit_id":"c50b62aacb5c59f7eb6370df4e4ee522d26e6209","user":{"login":"GaelVaroquaux","id":208217,"avatar_url":"https://avatars.githubusercontent.com/u/208217?v=2","gravatar_id":"","url":"https://api.github.com/users/GaelVaroquaux","html_url":"https://github.com/GaelVaroquaux","followers_url":"https://api.github.com/users/GaelVaroquaux/followers","following_url":"https://api.github.com/users/GaelVaroquaux/following{/other_user}","gists_url":"https://api.github.com/users/GaelVaroquaux/gists{/gist_id}","starred_url":"https://api.github.com/users/GaelVaroquaux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GaelVaroquaux/subscriptions","organizations_url":"https://api.github.com/users/GaelVaroquaux/orgs","repos_url":"https://api.github.com/users/GaelVaroquaux/repos","events_url":"https://api.github.com/users/GaelVaroquaux/events{/privacy}","received_events_url":"https://api.github.com/users/GaelVaroquaux/received_events","type":"User","site_admin":false},"body":"It's somewhat a problem that you are skipping those tests, as they end up being false (here you are using the 'SmoothLassoClassifier' which is not defined.","created_at":"2014-09-22T15:52:21Z","updated_at":"2014-09-22T15:52:21Z","html_url":"https://github.com/nilearn/nilearn/pull/219#discussion_r17857829","pull_request_url":"https://api.github.com/repos/nilearn/nilearn/pulls/219","_links":{"self":{"href":"https://api.github.com/repos/nilearn/nilearn/pulls/comments/17857829"},"html":{"href":"https://github.com/nilearn/nilearn/pull/219#discussion_r17857829"},"pull_request":{"href":"https://api.github.com/repos/nilearn/nilearn/pulls/219"}}},"pull_request":{"url":"https://api.github.com/repos/nilearn/nilearn/pulls/219","id":17693110,"html_url":"https://github.com/nilearn/nilearn/pull/219","diff_url":"https://github.com/nilearn/nilearn/pull/219.diff","patch_url":"https://github.com/nilearn/nilearn/pull/219.patch","issue_url":"https://api.github.com/repos/nilearn/nilearn/issues/219","number":219,"state":"open","locked":false,"title":"(WIP) Sparse models: S-LASSO and TV-l1","user":{"login":"dohmatob","id":634068,"avatar_url":"https://avatars.githubusercontent.com/u/634068?v=2","gravatar_id":"","url":"https://api.github.com/users/dohmatob","html_url":"https://github.com/dohmatob","followers_url":"https://api.github.com/users/dohmatob/followers","following_url":"https://api.github.com/users/dohmatob/following{/other_user}","gists_url":"https://api.github.com/users/dohmatob/gists{/gist_id}","starred_url":"https://api.github.com/users/dohmatob/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dohmatob/subscriptions","organizations_url":"https://api.github.com/users/dohmatob/orgs","repos_url":"https://api.github.com/users/dohmatob/repos","events_url":"https://api.github.com/users/dohmatob/events{/privacy}","received_events_url":"https://api.github.com/users/dohmatob/received_events","type":"User","site_admin":false},"body":"- Supports TV-l1 and S-LASSO priors\r\n- Supports logistic and squared losses\r\n- Has cross validation\r\n- Can automatically select alpha by CV (+ automatic computation of useful alpha ranges for the CV)\r\n- Warning: User must supply l1_ratio","created_at":"2014-06-27T09:16:58Z","updated_at":"2014-09-22T15:52:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"67b89a9b5069fb7fd5d1377f4d5b2ee8fae65f54","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/nilearn/nilearn/pulls/219/commits","review_comments_url":"https://api.github.com/repos/nilearn/nilearn/pulls/219/comments","review_comment_url":"https://api.github.com/repos/nilearn/nilearn/pulls/comments/{number}","comments_url":"https://api.github.com/repos/nilearn/nilearn/issues/219/comments","statuses_url":"https://api.github.com/repos/nilearn/nilearn/statuses/cbc5c7a9244c38277e4afb4f1778def87cb1400e","head":{"label":"dohmatob:sparse-models","ref":"sparse-models","sha":"cbc5c7a9244c38277e4afb4f1778def87cb1400e","user":{"login":"dohmatob","id":634068,"avatar_url":"https://avatars.githubusercontent.com/u/634068?v=2","gravatar_id":"","url":"https://api.github.com/users/dohmatob","html_url":"https://github.com/dohmatob","followers_url":"https://api.github.com/users/dohmatob/followers","following_url":"https://api.github.com/users/dohmatob/following{/other_user}","gists_url":"https://api.github.com/users/dohmatob/gists{/gist_id}","starred_url":"https://api.github.com/users/dohmatob/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dohmatob/subscriptions","organizations_url":"https://api.github.com/users/dohmatob/orgs","repos_url":"https://api.github.com/users/dohmatob/repos","events_url":"https://api.github.com/users/dohmatob/events{/privacy}","received_events_url":"https://api.github.com/users/dohmatob/received_events","type":"User","site_admin":false},"repo":{"id":10718029,"name":"nilearn","full_name":"dohmatob/nilearn","owner":{"login":"dohmatob","id":634068,"avatar_url":"https://avatars.githubusercontent.com/u/634068?v=2","gravatar_id":"","url":"https://api.github.com/users/dohmatob","html_url":"https://github.com/dohmatob","followers_url":"https://api.github.com/users/dohmatob/followers","following_url":"https://api.github.com/users/dohmatob/following{/other_user}","gists_url":"https://api.github.com/users/dohmatob/gists{/gist_id}","starred_url":"https://api.github.com/users/dohmatob/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dohmatob/subscriptions","organizations_url":"https://api.github.com/users/dohmatob/orgs","repos_url":"https://api.github.com/users/dohmatob/repos","events_url":"https://api.github.com/users/dohmatob/events{/privacy}","received_events_url":"https://api.github.com/users/dohmatob/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dohmatob/nilearn","description":"NeuroImaging with the Scikit-learn: fMRI inverse inference tutorial","fork":true,"url":"https://api.github.com/repos/dohmatob/nilearn","forks_url":"https://api.github.com/repos/dohmatob/nilearn/forks","keys_url":"https://api.github.com/repos/dohmatob/nilearn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dohmatob/nilearn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dohmatob/nilearn/teams","hooks_url":"https://api.github.com/repos/dohmatob/nilearn/hooks","issue_events_url":"https://api.github.com/repos/dohmatob/nilearn/issues/events{/number}","events_url":"https://api.github.com/repos/dohmatob/nilearn/events","assignees_url":"https://api.github.com/repos/dohmatob/nilearn/assignees{/user}","branches_url":"https://api.github.com/repos/dohmatob/nilearn/branches{/branch}","tags_url":"https://api.github.com/repos/dohmatob/nilearn/tags","blobs_url":"https://api.github.com/repos/dohmatob/nilearn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dohmatob/nilearn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dohmatob/nilearn/git/refs{/sha}","trees_url":"https://api.github.com/repos/dohmatob/nilearn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dohmatob/nilearn/statuses/{sha}","languages_url":"https://api.github.com/repos/dohmatob/nilearn/languages","stargazers_url":"https://api.github.com/repos/dohmatob/nilearn/stargazers","contributors_url":"https://api.github.com/repos/dohmatob/nilearn/contributors","subscribers_url":"https://api.github.com/repos/dohmatob/nilearn/subscribers","subscription_url":"https://api.github.com/repos/dohmatob/nilearn/subscription","commits_url":"https://api.github.com/repos/dohmatob/nilearn/commits{/sha}","git_commits_url":"https://api.github.com/repos/dohmatob/nilearn/git/commits{/sha}","comments_url":"https://api.github.com/repos/dohmatob/nilearn/comments{/number}","issue_comment_url":"https://api.github.com/repos/dohmatob/nilearn/issues/comments/{number}","contents_url":"https://api.github.com/repos/dohmatob/nilearn/contents/{+path}","compare_url":"https://api.github.com/repos/dohmatob/nilearn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dohmatob/nilearn/merges","archive_url":"https://api.github.com/repos/dohmatob/nilearn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dohmatob/nilearn/downloads","issues_url":"https://api.github.com/repos/dohmatob/nilearn/issues{/number}","pulls_url":"https://api.github.com/repos/dohmatob/nilearn/pulls{/number}","milestones_url":"https://api.github.com/repos/dohmatob/nilearn/milestones{/number}","notifications_url":"https://api.github.com/repos/dohmatob/nilearn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dohmatob/nilearn/labels{/name}","releases_url":"https://api.github.com/repos/dohmatob/nilearn/releases{/id}","created_at":"2013-06-16T09:21:03Z","updated_at":"2014-07-01T14:32:45Z","pushed_at":"2014-09-22T13:40:45Z","git_url":"git://github.com/dohmatob/nilearn.git","ssh_url":"git@github.com:dohmatob/nilearn.git","clone_url":"https://github.com/dohmatob/nilearn.git","svn_url":"https://github.com/dohmatob/nilearn","homepage":"http://nilearn.github.com/","size":6187,"stargazers_count":1,"watchers_count":1,"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":1,"default_branch":"master"}},"base":{"label":"nilearn:master","ref":"master","sha":"26c23394126bcc33bdfafee27c679d50bd35cafa","user":{"login":"nilearn","id":4646912,"avatar_url":"https://avatars.githubusercontent.com/u/4646912?v=2","gravatar_id":"","url":"https://api.github.com/users/nilearn","html_url":"https://github.com/nilearn","followers_url":"https://api.github.com/users/nilearn/followers","following_url":"https://api.github.com/users/nilearn/following{/other_user}","gists_url":"https://api.github.com/users/nilearn/gists{/gist_id}","starred_url":"https://api.github.com/users/nilearn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nilearn/subscriptions","organizations_url":"https://api.github.com/users/nilearn/orgs","repos_url":"https://api.github.com/users/nilearn/repos","events_url":"https://api.github.com/users/nilearn/events{/privacy}","received_events_url":"https://api.github.com/users/nilearn/received_events","type":"Organization","site_admin":false},"repo":{"id":1235740,"name":"nilearn","full_name":"nilearn/nilearn","owner":{"login":"nilearn","id":4646912,"avatar_url":"https://avatars.githubusercontent.com/u/4646912?v=2","gravatar_id":"","url":"https://api.github.com/users/nilearn","html_url":"https://github.com/nilearn","followers_url":"https://api.github.com/users/nilearn/followers","following_url":"https://api.github.com/users/nilearn/following{/other_user}","gists_url":"https://api.github.com/users/nilearn/gists{/gist_id}","starred_url":"https://api.github.com/users/nilearn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nilearn/subscriptions","organizations_url":"https://api.github.com/users/nilearn/orgs","repos_url":"https://api.github.com/users/nilearn/repos","events_url":"https://api.github.com/users/nilearn/events{/privacy}","received_events_url":"https://api.github.com/users/nilearn/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nilearn/nilearn","description":"Machine learning for NeuroImaging in Python","fork":false,"url":"https://api.github.com/repos/nilearn/nilearn","forks_url":"https://api.github.com/repos/nilearn/nilearn/forks","keys_url":"https://api.github.com/repos/nilearn/nilearn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nilearn/nilearn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nilearn/nilearn/teams","hooks_url":"https://api.github.com/repos/nilearn/nilearn/hooks","issue_events_url":"https://api.github.com/repos/nilearn/nilearn/issues/events{/number}","events_url":"https://api.github.com/repos/nilearn/nilearn/events","assignees_url":"https://api.github.com/repos/nilearn/nilearn/assignees{/user}","branches_url":"https://api.github.com/repos/nilearn/nilearn/branches{/branch}","tags_url":"https://api.github.com/repos/nilearn/nilearn/tags","blobs_url":"https://api.github.com/repos/nilearn/nilearn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nilearn/nilearn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nilearn/nilearn/git/refs{/sha}","trees_url":"https://api.github.com/repos/nilearn/nilearn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nilearn/nilearn/statuses/{sha}","languages_url":"https://api.github.com/repos/nilearn/nilearn/languages","stargazers_url":"https://api.github.com/repos/nilearn/nilearn/stargazers","contributors_url":"https://api.github.com/repos/nilearn/nilearn/contributors","subscribers_url":"https://api.github.com/repos/nilearn/nilearn/subscribers","subscription_url":"https://api.github.com/repos/nilearn/nilearn/subscription","commits_url":"https://api.github.com/repos/nilearn/nilearn/commits{/sha}","git_commits_url":"https://api.github.com/repos/nilearn/nilearn/git/commits{/sha}","comments_url":"https://api.github.com/repos/nilearn/nilearn/comments{/number}","issue_comment_url":"https://api.github.com/repos/nilearn/nilearn/issues/comments/{number}","contents_url":"https://api.github.com/repos/nilearn/nilearn/contents/{+path}","compare_url":"https://api.github.com/repos/nilearn/nilearn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nilearn/nilearn/merges","archive_url":"https://api.github.com/repos/nilearn/nilearn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nilearn/nilearn/downloads","issues_url":"https://api.github.com/repos/nilearn/nilearn/issues{/number}","pulls_url":"https://api.github.com/repos/nilearn/nilearn/pulls{/number}","milestones_url":"https://api.github.com/repos/nilearn/nilearn/milestones{/number}","notifications_url":"https://api.github.com/repos/nilearn/nilearn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nilearn/nilearn/labels{/name}","releases_url":"https://api.github.com/repos/nilearn/nilearn/releases{/id}","created_at":"2011-01-09T19:02:23Z","updated_at":"2014-09-22T09:57:26Z","pushed_at":"2014-09-20T09:04:15Z","git_url":"git://github.com/nilearn/nilearn.git","ssh_url":"git@github.com:nilearn/nilearn.git","clone_url":"https://github.com/nilearn/nilearn.git","svn_url":"https://github.com/nilearn/nilearn","homepage":"http://nilearn.github.io","size":9083,"stargazers_count":61,"watchers_count":61,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":44,"mirror_url":null,"open_issues_count":42,"forks":44,"open_issues":42,"watchers":61,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nilearn/nilearn/pulls/219"},"html":{"href":"https://github.com/nilearn/nilearn/pull/219"},"issue":{"href":"https://api.github.com/repos/nilearn/nilearn/issues/219"},"comments":{"href":"https://api.github.com/repos/nilearn/nilearn/issues/219/comments"},"review_comments":{"href":"https://api.github.com/repos/nilearn/nilearn/pulls/219/comments"},"review_comment":{"href":"https://api.github.com/repos/nilearn/nilearn/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/nilearn/nilearn/pulls/219/commits"},"statuses":{"href":"https://api.github.com/repos/nilearn/nilearn/statuses/cbc5c7a9244c38277e4afb4f1778def87cb1400e"}}}}