{"action":"created","comment":{"url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments/121255861","pull_request_review_id":43295674,"id":121255861,"diff_hunk":"@@ -0,0 +1,279 @@\n+\"\"\"\n+Test the pipeline module.\n+\"\"\"\n+\n+import numpy as np\n+from scipy import sparse\n+\n+from sklearn.utils.testing import assert_raise_message\n+from sklearn.utils.testing import assert_equal\n+from sklearn.utils.testing import assert_true\n+from sklearn.utils.testing import assert_array_equal\n+from sklearn.utils.testing import SkipTest\n+\n+from sklearn.base import BaseEstimator\n+from sklearn.experimental import ColumnTransformer\n+\n+from sklearn.preprocessing import StandardScaler, Normalizer\n+\n+\n+class Trans(BaseEstimator):\n+    def fit(self, X, y=None):\n+        return self\n+\n+    def transform(self, X, y=None):\n+        return X\n+\n+\n+class SparseMatrixTrans(BaseEstimator):\n+    def fit(self, X, y=None):\n+        return self\n+\n+    def transform(self, X, y=None):\n+        n_samples = len(X)\n+        return sparse.eye(n_samples, n_samples).tocsr()\n+\n+\n+def test_column_transformer():\n+    # array\n+    X_array = np.array([[0, 1, 2], [2, 4, 6]]).T\n+\n+    X_res_first1D = np.array([0, 1, 2])\n+    X_res_second1D = np.array([2, 4, 6])\n+    X_res_first2D = X_res_first1D.reshape(-1, 1)\n+    X_res_both = X_array\n+\n+    # scalar\n+    ct = ColumnTransformer([('trans', Trans(), 0)])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_first1D)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_first1D)\n+\n+    ct = ColumnTransformer([('trans', Trans(), [0])])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_first2D)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_first2D)\n+\n+    # list\n+    ct = ColumnTransformer([('trans', Trans(), [0, 1])])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_both)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_both)\n+\n+    ct = ColumnTransformer([('trans1', Trans(), [0]),\n+                            ('trans2', Trans(), [1])])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_both)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_both)\n+\n+    # slice\n+    ct = ColumnTransformer([('trans', Trans(), slice(0, 1))])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_first2D)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_first2D)\n+\n+    ct = ColumnTransformer([('trans', Trans(), slice(0, 2))])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_both)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_both)\n+\n+    # boolean mask\n+    ct = ColumnTransformer([('trans', Trans(), np.array([True, False]))])\n+    assert_array_equal(ct.fit_transform(X_array), X_res_first2D)\n+    assert_array_equal(ct.fit(X_array).transform(X_array), X_res_first2D)\n+\n+    # test with transformer_weights\n+    transformer_weights = {'trans1': .1, 'trans2': 10}\n+    both = ColumnTransformer([('trans1', Trans(), [0]),\n+                              ('trans2', Trans(), [1])],\n+                             transformer_weights=transformer_weights)\n+    res = np.vstack([transformer_weights['trans1'] * X_res_first1D,\n+                     transformer_weights['trans2'] * X_res_second1D]).T\n+    assert_array_equal(both.fit_transform(X_array), res)\n+    assert_array_equal(both.fit(X_array).transform(X_array), res)\n+\n+    both = ColumnTransformer([('trans', Trans(), [0, 1])],\n+                             transformer_weights={'trans': .1})\n+    assert_array_equal(both.fit_transform(X_array), 0.1 * X_res_both)\n+    assert_array_equal(both.fit(X_array).transform(X_array), 0.1 * X_res_both)\n+\n+\n+def test_column_transformer_dataframe():\n+    # dataframe\n+    try:\n+        import pandas as pd\n+        X_array = np.array([[0, 1, 2], [2, 4, 6]]).T\n+        X_df = pd.DataFrame(X_array, columns=['first', 'second'])\n+    except ImportError:\n+        raise SkipTest(\"pandas is not installed: skipping ColumnTransformer \"\n+                       \"tests for DataFrames.\")\n+\n+    X_res_first1D = np.array([0, 1, 2])\n+    X_res_first2D = X_res_first1D.reshape(-1, 1)\n+    X_res_both = X_array\n+\n+    # String keys: label based\n+\n+    # scalar\n+    ct = ColumnTransformer([('trans', Trans(), 'first')])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first1D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first1D)\n+\n+    # list\n+    ct = ColumnTransformer([('trans', Trans(), ['first'])])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first2D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first2D)\n+\n+    ct = ColumnTransformer([('trans', Trans(), ['first', 'second'])])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_both)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_both)\n+\n+    ct = ColumnTransformer([('trans1', Trans(), ['first']),\n+                            ('trans2', Trans(), ['second'])])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_both)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_both)\n+\n+    # slice\n+    ct = ColumnTransformer([('trans', Trans(), slice('first', 'second'))])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_both)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_both)\n+\n+    # int keys: positional\n+\n+    # scalar\n+    ct = ColumnTransformer([('trans', Trans(), 0)])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first1D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first1D)\n+\n+    # list\n+    ct = ColumnTransformer([('trans', Trans(), [0])])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first2D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first2D)\n+\n+    ct = ColumnTransformer([('trans', Trans(), [0, 1])])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_both)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_both)\n+\n+    ct = ColumnTransformer([('trans1', Trans(), [0]),\n+                            ('trans2', Trans(), [1])])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_both)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_both)\n+\n+    # slice\n+    ct = ColumnTransformer([('trans', Trans(), slice(0, 1))])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first2D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first2D)\n+\n+    ct = ColumnTransformer([('trans', Trans(), slice(0, 2))])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_both)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_both)\n+\n+    # boolean mask\n+    ct = ColumnTransformer([('trans', Trans(), np.array([True, False]))])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first2D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first2D)\n+\n+    s_mask = pd.Series([True, False], index=['first', 'second'])\n+    ct = ColumnTransformer([('trans', Trans(), s_mask)])\n+    assert_array_equal(ct.fit_transform(X_df), X_res_first2D)\n+    assert_array_equal(ct.fit(X_df).transform(X_df), X_res_first2D)\n+\n+    # test with transformer_weights\n+    transformer_weights = {'trans1': .1, 'trans2': 10}\n+    both = ColumnTransformer([('trans1', Trans(), ['first']),\n+                              ('trans2', Trans(), ['second'])],\n+                             transformer_weights=transformer_weights)\n+    res = np.vstack([transformer_weights['trans1'] * X_df['first'],\n+                     transformer_weights['trans2'] * X_df['second']]).T\n+    assert_array_equal(both.fit_transform(X_df), res)\n+    assert_array_equal(both.fit(X_df).transform(X_df), res)\n+\n+    # test multiple columns\n+    both = ColumnTransformer([('trans', Trans(), ['first', 'second'])],\n+                             transformer_weights={'trans': .1})\n+    assert_array_equal(both.fit_transform(X_df), 0.1 * X_res_both)\n+    assert_array_equal(both.fit(X_df).transform(X_df), 0.1 * X_res_both)\n+\n+    both = ColumnTransformer([('trans', Trans(), [0, 1])],\n+                             transformer_weights={'trans': .1})\n+    assert_array_equal(both.fit_transform(X_df), 0.1 * X_res_both)\n+    assert_array_equal(both.fit(X_df).transform(X_df), 0.1 * X_res_both)\n+\n+    # ensure pandas object is passes through\n+\n+    class TransAssert(BaseEstimator):\n+\n+        def fit(self, X, y=None):\n+            return self\n+\n+        def transform(self, X, y=None):\n+            assert_true(isinstance(X, (pd.DataFrame, pd.Series)))\n+\n+    ct = ColumnTransformer([('trans', TransAssert(), 'first')])\n+    ct.fit_transform(X_df)\n+    ct = ColumnTransformer([('trans', TransAssert(), ['first', 'second'])])\n+    ct.fit_transform(X_df)\n+\n+\n+def test_column_transformer_sparse_array():\n+    X_sparse = sparse.eye(3, 2).tocsr()\n+\n+    # no distinction between 1D and 2D\n+    X_res_first = X_sparse[:, 0].A\n+    X_res_both = X_sparse.A\n+\n+    col_trans = ColumnTransformer([('trans', Trans(), 0)])\n+    assert_true(sparse.issparse(col_trans.fit_transform(X_sparse)))\n+    assert_array_equal(col_trans.fit_transform(X_sparse).A, X_res_first)\n+    assert_array_equal(col_trans.fit(X_sparse).transform(X_sparse).A,\n+                       X_res_first)\n+\n+    col_trans = ColumnTransformer([('trans', Trans(), [0])])\n+    assert_true(sparse.issparse(col_trans.fit_transform(X_sparse)))\n+    assert_array_equal(col_trans.fit_transform(X_sparse).A, X_res_first)\n+    assert_array_equal(col_trans.fit(X_sparse).transform(X_sparse).A,\n+                       X_res_first)\n+\n+    col_trans = ColumnTransformer([('trans', Trans(), [0, 1])])\n+    assert_true(sparse.issparse(col_trans.fit_transform(X_sparse)))\n+    assert_array_equal(col_trans.fit_transform(X_sparse).A, X_res_both)\n+    assert_array_equal(col_trans.fit(X_sparse).transform(X_sparse).A,\n+                       X_res_both)\n+\n+    col_trans = ColumnTransformer([('trans', Trans(), slice(0, 1))])\n+    assert_true(sparse.issparse(col_trans.fit_transform(X_sparse)))\n+    assert_array_equal(col_trans.fit_transform(X_sparse).A, X_res_first)\n+    assert_array_equal(col_trans.fit(X_sparse).transform(X_sparse).A,\n+                       X_res_first)\n+\n+    col_trans = ColumnTransformer([('trans', Trans(), slice(0, 2))])\n+    assert_true(sparse.issparse(col_trans.fit_transform(X_sparse)))\n+    assert_array_equal(col_trans.fit_transform(X_sparse).A, X_res_both)\n+    assert_array_equal(col_trans.fit(X_sparse).transform(X_sparse).A,\n+                       X_res_both)\n+\n+\n+def test_column_transformer_2D_array_items():","path":"sklearn/experimental/tests/test_column_transformer.py","position":250,"original_position":250,"commit_id":"c711b55b45ad6ac8f348cb4b9b08fdf566cf8c6b","original_commit_id":"c711b55b45ad6ac8f348cb4b9b08fdf566cf8c6b","user":{"login":"amueller","id":449558,"avatar_url":"https://avatars0.githubusercontent.com/u/449558?v=3","gravatar_id":"","url":"https://api.github.com/users/amueller","html_url":"https://github.com/amueller","followers_url":"https://api.github.com/users/amueller/followers","following_url":"https://api.github.com/users/amueller/following{/other_user}","gists_url":"https://api.github.com/users/amueller/gists{/gist_id}","starred_url":"https://api.github.com/users/amueller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amueller/subscriptions","organizations_url":"https://api.github.com/users/amueller/orgs","repos_url":"https://api.github.com/users/amueller/repos","events_url":"https://api.github.com/users/amueller/events{/privacy}","received_events_url":"https://api.github.com/users/amueller/received_events","type":"User","site_admin":false},"body":"what are we testing here?","created_at":"2017-06-10T11:46:00Z","updated_at":"2017-06-10T11:48:59Z","html_url":"https://github.com/scikit-learn/scikit-learn/pull/9012#discussion_r121255861","pull_request_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012","_links":{"self":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments/121255861"},"html":{"href":"https://github.com/scikit-learn/scikit-learn/pull/9012#discussion_r121255861"},"pull_request":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012"}}},"pull_request":{"url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012","id":124213658,"html_url":"https://github.com/scikit-learn/scikit-learn/pull/9012","diff_url":"https://github.com/scikit-learn/scikit-learn/pull/9012.diff","patch_url":"https://github.com/scikit-learn/scikit-learn/pull/9012.patch","issue_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/9012","number":9012,"state":"open","locked":false,"title":"[MRG] Add pipeline.ColumnTransformer","user":{"login":"jorisvandenbossche","id":1020496,"avatar_url":"https://avatars1.githubusercontent.com/u/1020496?v=3","gravatar_id":"","url":"https://api.github.com/users/jorisvandenbossche","html_url":"https://github.com/jorisvandenbossche","followers_url":"https://api.github.com/users/jorisvandenbossche/followers","following_url":"https://api.github.com/users/jorisvandenbossche/following{/other_user}","gists_url":"https://api.github.com/users/jorisvandenbossche/gists{/gist_id}","starred_url":"https://api.github.com/users/jorisvandenbossche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jorisvandenbossche/subscriptions","organizations_url":"https://api.github.com/users/jorisvandenbossche/orgs","repos_url":"https://api.github.com/users/jorisvandenbossche/repos","events_url":"https://api.github.com/users/jorisvandenbossche/events{/privacy}","received_events_url":"https://api.github.com/users/jorisvandenbossche/received_events","type":"User","site_admin":false},"body":"Continuation @amueller's PR https://github.com/scikit-learn/scikit-learn/pull/3886 (for now just rebased and updated for changes in sklearn)\r\n\r\nFixes #2034.\r\n","created_at":"2017-06-06T15:04:16Z","updated_at":"2017-06-10T11:48:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"74977f6ae1f987eb08e1a88ae2498cf751fe7b36","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012/commits","review_comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012/comments","review_comment_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/9012/comments","statuses_url":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/c711b55b45ad6ac8f348cb4b9b08fdf566cf8c6b","head":{"label":"jorisvandenbossche:amueller/heterogeneous_feature_union","ref":"amueller/heterogeneous_feature_union","sha":"c711b55b45ad6ac8f348cb4b9b08fdf566cf8c6b","user":{"login":"jorisvandenbossche","id":1020496,"avatar_url":"https://avatars1.githubusercontent.com/u/1020496?v=3","gravatar_id":"","url":"https://api.github.com/users/jorisvandenbossche","html_url":"https://github.com/jorisvandenbossche","followers_url":"https://api.github.com/users/jorisvandenbossche/followers","following_url":"https://api.github.com/users/jorisvandenbossche/following{/other_user}","gists_url":"https://api.github.com/users/jorisvandenbossche/gists{/gist_id}","starred_url":"https://api.github.com/users/jorisvandenbossche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jorisvandenbossche/subscriptions","organizations_url":"https://api.github.com/users/jorisvandenbossche/orgs","repos_url":"https://api.github.com/users/jorisvandenbossche/repos","events_url":"https://api.github.com/users/jorisvandenbossche/events{/privacy}","received_events_url":"https://api.github.com/users/jorisvandenbossche/received_events","type":"User","site_admin":false},"repo":{"id":89341156,"name":"scikit-learn","full_name":"jorisvandenbossche/scikit-learn","owner":{"login":"jorisvandenbossche","id":1020496,"avatar_url":"https://avatars1.githubusercontent.com/u/1020496?v=3","gravatar_id":"","url":"https://api.github.com/users/jorisvandenbossche","html_url":"https://github.com/jorisvandenbossche","followers_url":"https://api.github.com/users/jorisvandenbossche/followers","following_url":"https://api.github.com/users/jorisvandenbossche/following{/other_user}","gists_url":"https://api.github.com/users/jorisvandenbossche/gists{/gist_id}","starred_url":"https://api.github.com/users/jorisvandenbossche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jorisvandenbossche/subscriptions","organizations_url":"https://api.github.com/users/jorisvandenbossche/orgs","repos_url":"https://api.github.com/users/jorisvandenbossche/repos","events_url":"https://api.github.com/users/jorisvandenbossche/events{/privacy}","received_events_url":"https://api.github.com/users/jorisvandenbossche/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jorisvandenbossche/scikit-learn","description":"scikit-learn: machine learning in Python","fork":true,"url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn","forks_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/forks","keys_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/teams","hooks_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/hooks","issue_events_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/issues/events{/number}","events_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/events","assignees_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/assignees{/user}","branches_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/branches{/branch}","tags_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/tags","blobs_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/git/refs{/sha}","trees_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/statuses/{sha}","languages_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/languages","stargazers_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/stargazers","contributors_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/contributors","subscribers_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/subscribers","subscription_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/subscription","commits_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/commits{/sha}","git_commits_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/git/commits{/sha}","comments_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/comments{/number}","issue_comment_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/issues/comments{/number}","contents_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/contents/{+path}","compare_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/merges","archive_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/downloads","issues_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/issues{/number}","pulls_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/pulls{/number}","milestones_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/milestones{/number}","notifications_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/labels{/name}","releases_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/releases{/id}","deployments_url":"https://api.github.com/repos/jorisvandenbossche/scikit-learn/deployments","created_at":"2017-04-25T09:15:16Z","updated_at":"2017-04-25T09:15:27Z","pushed_at":"2017-06-10T10:44:05Z","git_url":"git://github.com/jorisvandenbossche/scikit-learn.git","ssh_url":"git@github.com:jorisvandenbossche/scikit-learn.git","clone_url":"https://github.com/jorisvandenbossche/scikit-learn.git","svn_url":"https://github.com/jorisvandenbossche/scikit-learn","homepage":"http://scikit-learn.org","size":81509,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"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-learn:master","ref":"master","sha":"440c77b3fa905a59878e9b6ec36615f44ede8d97","user":{"login":"scikit-learn","id":365630,"avatar_url":"https://avatars1.githubusercontent.com/u/365630?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-learn","html_url":"https://github.com/scikit-learn","followers_url":"https://api.github.com/users/scikit-learn/followers","following_url":"https://api.github.com/users/scikit-learn/following{/other_user}","gists_url":"https://api.github.com/users/scikit-learn/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-learn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-learn/subscriptions","organizations_url":"https://api.github.com/users/scikit-learn/orgs","repos_url":"https://api.github.com/users/scikit-learn/repos","events_url":"https://api.github.com/users/scikit-learn/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-learn/received_events","type":"Organization","site_admin":false},"repo":{"id":843222,"name":"scikit-learn","full_name":"scikit-learn/scikit-learn","owner":{"login":"scikit-learn","id":365630,"avatar_url":"https://avatars1.githubusercontent.com/u/365630?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-learn","html_url":"https://github.com/scikit-learn","followers_url":"https://api.github.com/users/scikit-learn/followers","following_url":"https://api.github.com/users/scikit-learn/following{/other_user}","gists_url":"https://api.github.com/users/scikit-learn/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-learn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-learn/subscriptions","organizations_url":"https://api.github.com/users/scikit-learn/orgs","repos_url":"https://api.github.com/users/scikit-learn/repos","events_url":"https://api.github.com/users/scikit-learn/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-learn/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scikit-learn/scikit-learn","description":"scikit-learn: machine learning in Python","fork":false,"url":"https://api.github.com/repos/scikit-learn/scikit-learn","forks_url":"https://api.github.com/repos/scikit-learn/scikit-learn/forks","keys_url":"https://api.github.com/repos/scikit-learn/scikit-learn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scikit-learn/scikit-learn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scikit-learn/scikit-learn/teams","hooks_url":"https://api.github.com/repos/scikit-learn/scikit-learn/hooks","issue_events_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/events{/number}","events_url":"https://api.github.com/repos/scikit-learn/scikit-learn/events","assignees_url":"https://api.github.com/repos/scikit-learn/scikit-learn/assignees{/user}","branches_url":"https://api.github.com/repos/scikit-learn/scikit-learn/branches{/branch}","tags_url":"https://api.github.com/repos/scikit-learn/scikit-learn/tags","blobs_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/refs{/sha}","trees_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/{sha}","languages_url":"https://api.github.com/repos/scikit-learn/scikit-learn/languages","stargazers_url":"https://api.github.com/repos/scikit-learn/scikit-learn/stargazers","contributors_url":"https://api.github.com/repos/scikit-learn/scikit-learn/contributors","subscribers_url":"https://api.github.com/repos/scikit-learn/scikit-learn/subscribers","subscription_url":"https://api.github.com/repos/scikit-learn/scikit-learn/subscription","commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/commits{/sha}","git_commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/commits{/sha}","comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/comments{/number}","issue_comment_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/comments{/number}","contents_url":"https://api.github.com/repos/scikit-learn/scikit-learn/contents/{+path}","compare_url":"https://api.github.com/repos/scikit-learn/scikit-learn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scikit-learn/scikit-learn/merges","archive_url":"https://api.github.com/repos/scikit-learn/scikit-learn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scikit-learn/scikit-learn/downloads","issues_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues{/number}","pulls_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls{/number}","milestones_url":"https://api.github.com/repos/scikit-learn/scikit-learn/milestones{/number}","notifications_url":"https://api.github.com/repos/scikit-learn/scikit-learn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scikit-learn/scikit-learn/labels{/name}","releases_url":"https://api.github.com/repos/scikit-learn/scikit-learn/releases{/id}","deployments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/deployments","created_at":"2010-08-17T09:43:38Z","updated_at":"2017-06-10T11:30:09Z","pushed_at":"2017-06-10T11:39:49Z","git_url":"git://github.com/scikit-learn/scikit-learn.git","ssh_url":"git@github.com:scikit-learn/scikit-learn.git","clone_url":"https://github.com/scikit-learn/scikit-learn.git","svn_url":"https://github.com/scikit-learn/scikit-learn","homepage":"http://scikit-learn.org","size":82057,"stargazers_count":19080,"watchers_count":19080,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":10380,"mirror_url":null,"open_issues_count":1391,"forks":10380,"open_issues":1391,"watchers":19080,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012"},"html":{"href":"https://github.com/scikit-learn/scikit-learn/pull/9012"},"issue":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/9012"},"comments":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/9012/comments"},"review_comments":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012/comments"},"review_comment":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/9012/commits"},"statuses":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/c711b55b45ad6ac8f348cb4b9b08fdf566cf8c6b"}}}}
{"actor":{"display_login":"amueller"}}