{"action":"created","comment":{"url":"https://api.github.com/repos/brainiak/brainiak/pulls/comments/225741095","pull_request_review_id":165408672,"id":225741095,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNTc0MTA5NQ==","diff_hunk":"@@ -1,226 +1,1104 @@\n-#  Copyright 2017 Intel Corporation\r\n-#\r\n-#  Licensed under the Apache License, Version 2.0 (the \"License\");\r\n-#  you may not use this file except in compliance with the License.\r\n-#  You may obtain a copy of the License at\r\n-#\r\n-#       http://www.apache.org/licenses/LICENSE-2.0\r\n-#\r\n-#  Unless required by applicable law or agreed to in writing, software\r\n-#  distributed under the License is distributed on an \"AS IS\" BASIS,\r\n-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n-#  See the License for the specific language governing permissions and\r\n-#  limitations under the License.\r\n-\"\"\"Intersubject analyses (ISC/ISFC)\r\n-\r\n-Functions for computing intersubject correlation (ISC) and intersubject\r\n-functional correlation (ISFC)\r\n-\r\n-Paper references:\r\n-ISC: Hasson, U., Nir, Y., Levy, I., Fuhrmann, G. & Malach, R. Intersubject\r\n-synchronization of cortical activity during natural vision. Science 303,\r\n-1634–1640 (2004).\r\n-\r\n-ISFC: Simony E, Honey CJ, Chen J, Lositsky O, Yeshurun Y, Wiesel A, Hasson U\r\n-(2016) Dynamic reconfiguration of the default mode network during narrative\r\n-comprehension. Nat Commun 7.\r\n-\"\"\"\r\n-\r\n-# Authors: Christopher Baldassano and Mor Regev\r\n-# Princeton University, 2017\r\n-\r\n-from brainiak.fcma.util import compute_correlation\r\n-import numpy as np\r\n-from scipy import stats\r\n-from .utils.utils import phase_randomize, p_from_null\r\n-\r\n-\r\n-def isc(D, collapse_subj=True, return_p=False, num_perm=1000,\r\n-        two_sided=False, random_state=0, float_type=np.float64):\r\n-    \"\"\"Intersubject correlation\r\n-\r\n-    For each voxel, computes the correlation of each subject's timecourse with\r\n-    the mean of all other subjects' timecourses. By default the result is\r\n-    averaged across subjects, unless collapse_subj is set to False. A null\r\n-    distribution can optionally be computed using phase randomization, to\r\n-    compute a p value for each voxel.\r\n-\r\n-    Parameters\r\n-    ----------\r\n-    D : voxel by time by subject ndarray\r\n-        fMRI data for which to compute ISC\r\n-\r\n-    collapse_subj : bool, default:True\r\n-        Whether to average across subjects before returning result\r\n-\r\n-    return_p : bool, default:False\r\n-        Whether to use phase randomization to compute a p value for each voxel\r\n-\r\n-    num_perm : int, default:1000\r\n-        Number of null samples to use for computing p values\r\n-\r\n-    two_sided : bool, default:False\r\n-        Whether the p value should be one-sided (testing only for being\r\n-        above the null) or two-sided (testing for both significantly positive\r\n-        and significantly negative values)\r\n-\r\n-    random_state : RandomState or an int seed (0 by default)\r\n-        A random number generator instance to define the state of the\r\n-        random permutations generator.\r\n-\r\n-    float_type : either float16, float32, or float64,\r\n-        Depends on the required precision\r\n-        and available memory in the system.\r\n-        All the arrays generated during the execution will be cast\r\n-        to specified float type in order to save memory.\r\n-\r\n-    Returns\r\n-    -------\r\n-    ISC : voxel ndarray (or voxel by subject ndarray, if collapse_subj=False)\r\n-        pearson correlation for each voxel, across subjects\r\n-\r\n-    p : ndarray the same shape as ISC (if return_p = True)\r\n-        p values for each ISC value under the null distribution\r\n-    \"\"\"\r\n-\r\n-    n_vox = D.shape[0]\r\n-    n_subj = D.shape[2]\r\n-\r\n-    n_perm = num_perm*int(return_p)\r\n-    max_null = np.zeros(n_perm, dtype=float_type)\r\n-    min_null = np.zeros(n_perm, dtype=float_type)\r\n-    ISC = np.zeros((n_vox, n_subj), dtype=float_type)\r\n-\r\n-    for loo_subj in range(n_subj):\r\n-        group = np.mean(D[:, :, np.arange(n_subj) != loo_subj], axis=2)\r\n-        subj = D[:, :, loo_subj]\r\n-        for v in range(n_vox):\r\n-            ISC[v, loo_subj] = stats.pearsonr(group[v, :],\r\n-                                              subj[v, :])[0]\r\n-    if collapse_subj:\r\n-        ISC = np.mean(ISC, axis=1)\r\n-\r\n-    for p in range(n_perm):\r\n-        # Randomize phases of D to create next null dataset\r\n-        D = phase_randomize(D, random_state)\r\n-        # Loop across choice of leave-one-out subject\r\n-        tmp_ISC = np.zeros((n_vox, n_subj), dtype=float_type)\r\n-        for loo_subj in range(n_subj):\r\n-            group = np.mean(D[:, :, np.arange(n_subj) != loo_subj], axis=2)\r\n-            subj = D[:, :, loo_subj]\r\n-            for v in range(n_vox):\r\n-                tmp_ISC[v, loo_subj] = stats.pearsonr(group[v, :],\r\n-                                                      subj[v, :])[0]\r\n-        if collapse_subj:\r\n-            tmp_ISC = np.mean(tmp_ISC, axis=1)\r\n-        max_null[p] = np.max(tmp_ISC)\r\n-        min_null[p] = np.min(tmp_ISC)\r\n-\r\n-    if return_p:\r\n-        p = p_from_null(ISC, two_sided,\r\n-                        max_null_input=max_null,\r\n-                        min_null_input=min_null)\r\n-        return ISC, p\r\n-    else:\r\n-        return ISC\r\n-\r\n-\r\n-def isfc(D, collapse_subj=True, return_p=False, num_perm=1000,\r\n-         two_sided=False, random_state=0, float_type=np.float64):\r\n-    \"\"\"Intersubject functional correlation\r\n-\r\n-    Computes the correlation between the timecoure of each voxel in each\r\n-    subject with the average of all other subjects' timecourses in *all*\r\n-    voxels. By default the result is averaged across subjects, unless\r\n-    collapse_subj is set to False. A null distribution can optionally be\r\n-    computed using phase randomization, to compute a p value for each voxel-to-\r\n-    voxel correlation.\r\n-\r\n-    Uses the high performance compute_correlation routine from fcma.util\r\n-\r\n-    Parameters\r\n-    ----------\r\n-    D : voxel by time by subject ndarray\r\n-        fMRI data for which to compute ISFC\r\n-\r\n-    collapse_subj : bool, default:True\r\n-        Whether to average across subjects before returning result\r\n-\r\n-    return_p : bool, default:False\r\n-        Whether to use phase randomization to compute a p value for each voxel\r\n-\r\n-    num_perm : int, default:1000\r\n-        Number of null samples to use for computing p values\r\n-\r\n-    two_sided : bool, default:False\r\n-        Whether the p value should be one-sided (testing only for being\r\n-        above the null) or two-sided (testing for both significantly positive\r\n-        and significantly negative values)\r\n-\r\n-    random_state : RandomState or an int seed (0 by default)\r\n-        A random number generator instance to define the state of the\r\n-        random permutations generator.\r\n-\r\n-    float_type : either float16, float32, or float64\r\n-        Depends on the required precision\r\n-        and available memory in the system.\r\n-        All the arrays generated during the execution will be cast\r\n-        to specified float type in order to save memory.\r\n-\r\n-    Returns\r\n-    -------\r\n-    ISFC : voxel by voxel ndarray\r\n-        (or voxel by voxel by subject ndarray, if collapse_subj=False)\r\n-        pearson correlation between all pairs of voxels, across subjects\r\n-\r\n-    p : ndarray the same shape as ISC (if return_p = True)\r\n-        p values for each ISC value under the null distribution\r\n-    \"\"\"\r\n-\r\n-    n_vox = D.shape[0]\r\n-    n_subj = D.shape[2]\r\n-\r\n-    n_perm = num_perm*int(return_p)\r\n-    max_null = -np.ones(n_perm, dtype=float_type)\r\n-    min_null = np.ones(n_perm, dtype=float_type)\r\n-\r\n-    ISFC = np.zeros((n_vox, n_vox, n_subj), dtype=float_type)\r\n-\r\n-    for loo_subj in range(D.shape[2]):\r\n-        group = np.mean(D[:, :, np.arange(n_subj) != loo_subj], axis=2)\r\n-        subj = D[:, :, loo_subj]\r\n-        tmp_ISFC = compute_correlation(group, subj).astype(float_type)\r\n-        # Symmetrize matrix\r\n-        tmp_ISFC = (tmp_ISFC+tmp_ISFC.T)/2\r\n-        ISFC[:, :, loo_subj] = tmp_ISFC\r\n-    if collapse_subj:\r\n-        ISFC = np.mean(ISFC, axis=2)\r\n-\r\n-    for p in range(n_perm):\r\n-        # Randomize phases of D to create next null dataset\r\n-        D = phase_randomize(D, random_state)\r\n-        # Loop across choice of leave-one-out subject\r\n-        ISFC_null = np.zeros((n_vox, n_vox), dtype=float_type)\r\n-        for loo_subj in range(D.shape[2]):\r\n-            group = np.mean(D[:, :, np.arange(n_subj) != loo_subj], axis=2)\r\n-            subj = D[:, :, loo_subj]\r\n-            tmp_ISFC = compute_correlation(group, subj).astype(float_type)\r\n-            # Symmetrize matrix\r\n-            tmp_ISFC = (tmp_ISFC+tmp_ISFC.T)/2\r\n-\r\n-            if not collapse_subj:\r\n-                max_null[p] = max(np.max(tmp_ISFC), max_null[p])\r\n-                min_null[p] = min(np.min(tmp_ISFC), min_null[p])\r\n-            ISFC_null = ISFC_null + tmp_ISFC/n_subj\r\n-\r\n-        if collapse_subj:\r\n-            max_null[p] = np.max(ISFC_null)\r\n-            min_null[p] = np.min(ISFC_null)\r\n-\r\n-    if return_p:\r\n-        p = p_from_null(ISFC, two_sided,\r\n-                        max_null_input=max_null,\r\n-                        min_null_input=min_null)\r\n-        return ISFC, p\r\n-    else:\r\n-        return ISFC\r\n+#  Copyright 2017 Intel Corporation\n+#\n+#  Licensed under the Apache License, Version 2.0 (the \"License\");\n+#  you may not use this file except in compliance with the License.\n+#  You may obtain a copy of the License at\n+#\n+#       http://www.apache.org/licenses/LICENSE-2.0\n+#\n+#  Unless required by applicable law or agreed to in writing, software\n+#  distributed under the License is distributed on an \"AS IS\" BASIS,\n+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+#  See the License for the specific language governing permissions and\n+#  limitations under the License.\n+\"\"\"Intersubject correlation (ISC) analysis\n+\n+Functions for computing intersubject correlation (ISC) and related\n+analyses (e.g., intersubject funtional correlations; ISFC), as well\n+as statistical tests designed specifically for ISC analyses.\n+\n+\"\"\"\n+\n+# Authors: Sam Nastase, Christopher Baldassano, Mai Nguyen, and Mor Regev\n+# Princeton University, 2018\n+\n+import numpy as np\n+from scipy.spatial.distance import squareform\n+from scipy.stats import pearsonr, zscore\n+from scipy.fftpack import fft, ifft\n+import itertools as it\n+from brainiak.fcma.util import compute_correlation\n+\n+def isc(data, pairwise=False, summary_statistic=None, verbose=True):\n+    \"\"\"Intersubject correlation\n+\n+    For each voxel or ROI, compute the Pearson correlation between each\n+    subject's response time series and other subjects' response time series.\n+    If pairwise is False (default), use the leave-one-out approach, where\n+    correlation is computed between each subject and the average of the other\n+    subjects. If pairwise is True, compute correlations between all pairs of\n+    subjects. If summary_statistic is None, return N ISC values for N subjects\n+    (leave-one-out) or N(N-1)/2 ISC values for each pair of N subjects,\n+    corresponding to the upper triangle of the pairwise correlation matrix\n+    (see scipy.spatial.distance.squareform). Alternatively, supply either\n+    np.mean or np.median to compute summary statistic of ISCs (Fisher Z will\n+    be applied and inverted if using mean). Input data should be a list \n+    where each item is a time-points by voxels ndarray for a given subject.\n+    Multiple input ndarrays must be the same shape. If a single ndarray is\n+    supplied, the last dimension is assumed to correspond to subjects. If \n+    only two subjects are supplied, simply compute Pearson correlation\n+    (precludes averaging in leave-one-out approach, and does not apply\n+    summary statistic.) Output is an ndarray where the first dimension is\n+    the number of subjects or pairs and the second dimension is the number\n+    of voxels (or ROIs).\n+        \n+    The implementation is based on the following publication:\n+    \n+    .. [Hasson2004] \"Intersubject synchronization of cortical activity \n+    during natural vision.\", U. Hasson, Y. Nir, I. Levy, G. Fuhrmann,\n+    R. Malach, 2004, Science, 303, 1634-1640.\n+\n+    Parameters\n+    ----------\n+    data : list or ndarray\n+        fMRI data for which to compute ISC\n+        \n+    pairwise : bool, default: False\n+        Whether to use pairwise (True) or leave-one-out (False) approach\n+        \n+    summary_statistic : None\n+        Return all ISCs or collapse using np.mean or np.median\n+\n+    Returns\n+    -------\n+    iscs : subjects or pairs by voxels ndarray\n+        ISC for each subject or pair (or summary statistic) per voxel\n+\n+    \"\"\"\n+    \n+    # Convert list input to 3d and check shapes\n+    if type(data) == list:","path":"brainiak/isfc.py","position":306,"original_position":306,"commit_id":"d2f91e59081e405ef5c3e3bbcd35e4433e5826d2","original_commit_id":"d2f91e59081e405ef5c3e3bbcd35e4433e5826d2","user":{"login":"qihongl","id":7212521,"node_id":"MDQ6VXNlcjcyMTI1MjE=","avatar_url":"https://avatars3.githubusercontent.com/u/7212521?v=4","gravatar_id":"","url":"https://api.github.com/users/qihongl","html_url":"https://github.com/qihongl","followers_url":"https://api.github.com/users/qihongl/followers","following_url":"https://api.github.com/users/qihongl/following{/other_user}","gists_url":"https://api.github.com/users/qihongl/gists{/gist_id}","starred_url":"https://api.github.com/users/qihongl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qihongl/subscriptions","organizations_url":"https://api.github.com/users/qihongl/orgs","repos_url":"https://api.github.com/users/qihongl/repos","events_url":"https://api.github.com/users/qihongl/events{/privacy}","received_events_url":"https://api.github.com/users/qihongl/received_events","type":"User","site_admin":false},"body":"@mihaic Awesome! ","created_at":"2018-10-16T23:34:07Z","updated_at":"2018-10-16T23:34:07Z","html_url":"https://github.com/brainiak/brainiak/pull/384#discussion_r225741095","pull_request_url":"https://api.github.com/repos/brainiak/brainiak/pulls/384","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/brainiak/brainiak/pulls/comments/225741095"},"html":{"href":"https://github.com/brainiak/brainiak/pull/384#discussion_r225741095"},"pull_request":{"href":"https://api.github.com/repos/brainiak/brainiak/pulls/384"}},"in_reply_to_id":225330378},"pull_request":{"url":"https://api.github.com/repos/brainiak/brainiak/pulls/384","id":220219562,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIwMjE5NTYy","html_url":"https://github.com/brainiak/brainiak/pull/384","diff_url":"https://github.com/brainiak/brainiak/pull/384.diff","patch_url":"https://github.com/brainiak/brainiak/pull/384.patch","issue_url":"https://api.github.com/repos/brainiak/brainiak/issues/384","number":384,"state":"open","locked":false,"title":"WIP: Revamped ISC analyses with additional statistical tests","user":{"login":"snastase","id":3496566,"node_id":"MDQ6VXNlcjM0OTY1NjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3496566?v=4","gravatar_id":"","url":"https://api.github.com/users/snastase","html_url":"https://github.com/snastase","followers_url":"https://api.github.com/users/snastase/followers","following_url":"https://api.github.com/users/snastase/following{/other_user}","gists_url":"https://api.github.com/users/snastase/gists{/gist_id}","starred_url":"https://api.github.com/users/snastase/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snastase/subscriptions","organizations_url":"https://api.github.com/users/snastase/orgs","repos_url":"https://api.github.com/users/snastase/repos","events_url":"https://api.github.com/users/snastase/events{/privacy}","received_events_url":"https://api.github.com/users/snastase/received_events","type":"User","site_admin":false},"body":"I'm re-working and expanding the ISC (and ISFC) code to accommodate several new features. We can now compute either pairwise or leave-one-out ISCs (rather than just leave-one-out). All analyses now also accept 'mean' or 'median' as summary statistics. I've increased the flexibility of inputs to the core ISC functions, and tried to standardize output geometries (time points by voxels). I've moved statistical tests out of the core ISC and ISFC functions—these are now separate functions. In addition to phase randomization, I've added a circular time-shifting test (Kauppi et al., 2014), and group-level permutation and bootstrap tests (Chen et al., 2016). Both the phase randomization and circular time-shift randomization tests operate on the data themselves and call the core ISC function internally to recompute ISCs on the randomized data. Two changes to the phase randomization code: no more randomization across voxels (as this disrupts the spatial autocorrelation of fMRI data), and in the leave-one-out approach, only the left-out subject is phase randomized per iteration. If all subjects are randomized, then N-1 are averaged, the Nth subject will always be correlated with what is effectively a flat time series, yielding an overly tight null distribution and inflated false positive rates (FPRs). Group-level bootstrap and permutation tests operate directly on the ISC values and should better control FPRs (Chen et al., 2016). For pairwise ISCs, bootstrap resampling of subjects and group relabeling operate at the row/column level, not at the level of individual pairs (therefore respecting the correlation structure among pairs). Updated and expanded tests. No statistical tests for ISFC yet, but working on it. I would also recommend changing the module/filename from \"isfc.py\" to \"isc.py\", despite the ISC values being a subset of the ISC values, I think ISC is conceptually superordinate and we may want to add things like spatial ISC in the future (which does not fit under the ISFC heading). NB: This is my first major PR, so apologies if I'm missing anything obvious.","created_at":"2018-10-04T00:41:55Z","updated_at":"2018-10-16T23:34:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"284642e9ad94982e85fac49ba97e7431c4c03e73","assignee":null,"assignees":[],"requested_reviewers":[{"login":"cbaldassano","id":11167804,"node_id":"MDQ6VXNlcjExMTY3ODA0","avatar_url":"https://avatars1.githubusercontent.com/u/11167804?v=4","gravatar_id":"","url":"https://api.github.com/users/cbaldassano","html_url":"https://github.com/cbaldassano","followers_url":"https://api.github.com/users/cbaldassano/followers","following_url":"https://api.github.com/users/cbaldassano/following{/other_user}","gists_url":"https://api.github.com/users/cbaldassano/gists{/gist_id}","starred_url":"https://api.github.com/users/cbaldassano/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cbaldassano/subscriptions","organizations_url":"https://api.github.com/users/cbaldassano/orgs","repos_url":"https://api.github.com/users/cbaldassano/repos","events_url":"https://api.github.com/users/cbaldassano/events{/privacy}","received_events_url":"https://api.github.com/users/cbaldassano/received_events","type":"User","site_admin":false},{"login":"manojneuro","id":26097457,"node_id":"MDQ6VXNlcjI2MDk3NDU3","avatar_url":"https://avatars2.githubusercontent.com/u/26097457?v=4","gravatar_id":"","url":"https://api.github.com/users/manojneuro","html_url":"https://github.com/manojneuro","followers_url":"https://api.github.com/users/manojneuro/followers","following_url":"https://api.github.com/users/manojneuro/following{/other_user}","gists_url":"https://api.github.com/users/manojneuro/gists{/gist_id}","starred_url":"https://api.github.com/users/manojneuro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manojneuro/subscriptions","organizations_url":"https://api.github.com/users/manojneuro/orgs","repos_url":"https://api.github.com/users/manojneuro/repos","events_url":"https://api.github.com/users/manojneuro/events{/privacy}","received_events_url":"https://api.github.com/users/manojneuro/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/brainiak/brainiak/pulls/384/commits","review_comments_url":"https://api.github.com/repos/brainiak/brainiak/pulls/384/comments","review_comment_url":"https://api.github.com/repos/brainiak/brainiak/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brainiak/brainiak/issues/384/comments","statuses_url":"https://api.github.com/repos/brainiak/brainiak/statuses/d2f91e59081e405ef5c3e3bbcd35e4433e5826d2","head":{"label":"snastase:isc-stats","ref":"isc-stats","sha":"d2f91e59081e405ef5c3e3bbcd35e4433e5826d2","user":{"login":"snastase","id":3496566,"node_id":"MDQ6VXNlcjM0OTY1NjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3496566?v=4","gravatar_id":"","url":"https://api.github.com/users/snastase","html_url":"https://github.com/snastase","followers_url":"https://api.github.com/users/snastase/followers","following_url":"https://api.github.com/users/snastase/following{/other_user}","gists_url":"https://api.github.com/users/snastase/gists{/gist_id}","starred_url":"https://api.github.com/users/snastase/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snastase/subscriptions","organizations_url":"https://api.github.com/users/snastase/orgs","repos_url":"https://api.github.com/users/snastase/repos","events_url":"https://api.github.com/users/snastase/events{/privacy}","received_events_url":"https://api.github.com/users/snastase/received_events","type":"User","site_admin":false},"repo":{"id":64401896,"node_id":"MDEwOlJlcG9zaXRvcnk2NDQwMTg5Ng==","name":"brainiak","full_name":"snastase/brainiak","private":false,"owner":{"login":"snastase","id":3496566,"node_id":"MDQ6VXNlcjM0OTY1NjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3496566?v=4","gravatar_id":"","url":"https://api.github.com/users/snastase","html_url":"https://github.com/snastase","followers_url":"https://api.github.com/users/snastase/followers","following_url":"https://api.github.com/users/snastase/following{/other_user}","gists_url":"https://api.github.com/users/snastase/gists{/gist_id}","starred_url":"https://api.github.com/users/snastase/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snastase/subscriptions","organizations_url":"https://api.github.com/users/snastase/orgs","repos_url":"https://api.github.com/users/snastase/repos","events_url":"https://api.github.com/users/snastase/events{/privacy}","received_events_url":"https://api.github.com/users/snastase/received_events","type":"User","site_admin":false},"html_url":"https://github.com/snastase/brainiak","description":"Brain Imaging Analysis Kit","fork":true,"url":"https://api.github.com/repos/snastase/brainiak","forks_url":"https://api.github.com/repos/snastase/brainiak/forks","keys_url":"https://api.github.com/repos/snastase/brainiak/keys{/key_id}","collaborators_url":"https://api.github.com/repos/snastase/brainiak/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/snastase/brainiak/teams","hooks_url":"https://api.github.com/repos/snastase/brainiak/hooks","issue_events_url":"https://api.github.com/repos/snastase/brainiak/issues/events{/number}","events_url":"https://api.github.com/repos/snastase/brainiak/events","assignees_url":"https://api.github.com/repos/snastase/brainiak/assignees{/user}","branches_url":"https://api.github.com/repos/snastase/brainiak/branches{/branch}","tags_url":"https://api.github.com/repos/snastase/brainiak/tags","blobs_url":"https://api.github.com/repos/snastase/brainiak/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/snastase/brainiak/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/snastase/brainiak/git/refs{/sha}","trees_url":"https://api.github.com/repos/snastase/brainiak/git/trees{/sha}","statuses_url":"https://api.github.com/repos/snastase/brainiak/statuses/{sha}","languages_url":"https://api.github.com/repos/snastase/brainiak/languages","stargazers_url":"https://api.github.com/repos/snastase/brainiak/stargazers","contributors_url":"https://api.github.com/repos/snastase/brainiak/contributors","subscribers_url":"https://api.github.com/repos/snastase/brainiak/subscribers","subscription_url":"https://api.github.com/repos/snastase/brainiak/subscription","commits_url":"https://api.github.com/repos/snastase/brainiak/commits{/sha}","git_commits_url":"https://api.github.com/repos/snastase/brainiak/git/commits{/sha}","comments_url":"https://api.github.com/repos/snastase/brainiak/comments{/number}","issue_comment_url":"https://api.github.com/repos/snastase/brainiak/issues/comments{/number}","contents_url":"https://api.github.com/repos/snastase/brainiak/contents/{+path}","compare_url":"https://api.github.com/repos/snastase/brainiak/compare/{base}...{head}","merges_url":"https://api.github.com/repos/snastase/brainiak/merges","archive_url":"https://api.github.com/repos/snastase/brainiak/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/snastase/brainiak/downloads","issues_url":"https://api.github.com/repos/snastase/brainiak/issues{/number}","pulls_url":"https://api.github.com/repos/snastase/brainiak/pulls{/number}","milestones_url":"https://api.github.com/repos/snastase/brainiak/milestones{/number}","notifications_url":"https://api.github.com/repos/snastase/brainiak/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/snastase/brainiak/labels{/name}","releases_url":"https://api.github.com/repos/snastase/brainiak/releases{/id}","deployments_url":"https://api.github.com/repos/snastase/brainiak/deployments","created_at":"2016-07-28T14:23:30Z","updated_at":"2018-09-17T23:41:29Z","pushed_at":"2018-10-06T20:31:15Z","git_url":"git://github.com/snastase/brainiak.git","ssh_url":"git@github.com:snastase/brainiak.git","clone_url":"https://github.com/snastase/brainiak.git","svn_url":"https://github.com/snastase/brainiak","homepage":"","size":6860,"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,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"brainiak:master","ref":"master","sha":"9889b80b4555f63b165d7451d92111759784364e","user":{"login":"brainiak","id":23051892,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzMDUxODky","avatar_url":"https://avatars0.githubusercontent.com/u/23051892?v=4","gravatar_id":"","url":"https://api.github.com/users/brainiak","html_url":"https://github.com/brainiak","followers_url":"https://api.github.com/users/brainiak/followers","following_url":"https://api.github.com/users/brainiak/following{/other_user}","gists_url":"https://api.github.com/users/brainiak/gists{/gist_id}","starred_url":"https://api.github.com/users/brainiak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brainiak/subscriptions","organizations_url":"https://api.github.com/users/brainiak/orgs","repos_url":"https://api.github.com/users/brainiak/repos","events_url":"https://api.github.com/users/brainiak/events{/privacy}","received_events_url":"https://api.github.com/users/brainiak/received_events","type":"Organization","site_admin":false},"repo":{"id":51334498,"node_id":"MDEwOlJlcG9zaXRvcnk1MTMzNDQ5OA==","name":"brainiak","full_name":"brainiak/brainiak","private":false,"owner":{"login":"brainiak","id":23051892,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzMDUxODky","avatar_url":"https://avatars0.githubusercontent.com/u/23051892?v=4","gravatar_id":"","url":"https://api.github.com/users/brainiak","html_url":"https://github.com/brainiak","followers_url":"https://api.github.com/users/brainiak/followers","following_url":"https://api.github.com/users/brainiak/following{/other_user}","gists_url":"https://api.github.com/users/brainiak/gists{/gist_id}","starred_url":"https://api.github.com/users/brainiak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brainiak/subscriptions","organizations_url":"https://api.github.com/users/brainiak/orgs","repos_url":"https://api.github.com/users/brainiak/repos","events_url":"https://api.github.com/users/brainiak/events{/privacy}","received_events_url":"https://api.github.com/users/brainiak/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brainiak/brainiak","description":"Brain Imaging Analysis Kit","fork":false,"url":"https://api.github.com/repos/brainiak/brainiak","forks_url":"https://api.github.com/repos/brainiak/brainiak/forks","keys_url":"https://api.github.com/repos/brainiak/brainiak/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brainiak/brainiak/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brainiak/brainiak/teams","hooks_url":"https://api.github.com/repos/brainiak/brainiak/hooks","issue_events_url":"https://api.github.com/repos/brainiak/brainiak/issues/events{/number}","events_url":"https://api.github.com/repos/brainiak/brainiak/events","assignees_url":"https://api.github.com/repos/brainiak/brainiak/assignees{/user}","branches_url":"https://api.github.com/repos/brainiak/brainiak/branches{/branch}","tags_url":"https://api.github.com/repos/brainiak/brainiak/tags","blobs_url":"https://api.github.com/repos/brainiak/brainiak/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brainiak/brainiak/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brainiak/brainiak/git/refs{/sha}","trees_url":"https://api.github.com/repos/brainiak/brainiak/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brainiak/brainiak/statuses/{sha}","languages_url":"https://api.github.com/repos/brainiak/brainiak/languages","stargazers_url":"https://api.github.com/repos/brainiak/brainiak/stargazers","contributors_url":"https://api.github.com/repos/brainiak/brainiak/contributors","subscribers_url":"https://api.github.com/repos/brainiak/brainiak/subscribers","subscription_url":"https://api.github.com/repos/brainiak/brainiak/subscription","commits_url":"https://api.github.com/repos/brainiak/brainiak/commits{/sha}","git_commits_url":"https://api.github.com/repos/brainiak/brainiak/git/commits{/sha}","comments_url":"https://api.github.com/repos/brainiak/brainiak/comments{/number}","issue_comment_url":"https://api.github.com/repos/brainiak/brainiak/issues/comments{/number}","contents_url":"https://api.github.com/repos/brainiak/brainiak/contents/{+path}","compare_url":"https://api.github.com/repos/brainiak/brainiak/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brainiak/brainiak/merges","archive_url":"https://api.github.com/repos/brainiak/brainiak/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brainiak/brainiak/downloads","issues_url":"https://api.github.com/repos/brainiak/brainiak/issues{/number}","pulls_url":"https://api.github.com/repos/brainiak/brainiak/pulls{/number}","milestones_url":"https://api.github.com/repos/brainiak/brainiak/milestones{/number}","notifications_url":"https://api.github.com/repos/brainiak/brainiak/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brainiak/brainiak/labels{/name}","releases_url":"https://api.github.com/repos/brainiak/brainiak/releases{/id}","deployments_url":"https://api.github.com/repos/brainiak/brainiak/deployments","created_at":"2016-02-08T23:19:27Z","updated_at":"2018-10-16T22:14:21Z","pushed_at":"2018-10-16T22:14:19Z","git_url":"git://github.com/brainiak/brainiak.git","ssh_url":"git@github.com:brainiak/brainiak.git","clone_url":"https://github.com/brainiak/brainiak.git","svn_url":"https://github.com/brainiak/brainiak","homepage":"http://brainiak.org","size":6789,"stargazers_count":96,"watchers_count":96,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":65,"mirror_url":null,"archived":false,"open_issues_count":58,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":65,"open_issues":58,"watchers":96,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/brainiak/brainiak/pulls/384"},"html":{"href":"https://github.com/brainiak/brainiak/pull/384"},"issue":{"href":"https://api.github.com/repos/brainiak/brainiak/issues/384"},"comments":{"href":"https://api.github.com/repos/brainiak/brainiak/issues/384/comments"},"review_comments":{"href":"https://api.github.com/repos/brainiak/brainiak/pulls/384/comments"},"review_comment":{"href":"https://api.github.com/repos/brainiak/brainiak/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brainiak/brainiak/pulls/384/commits"},"statuses":{"href":"https://api.github.com/repos/brainiak/brainiak/statuses/d2f91e59081e405ef5c3e3bbcd35e4433e5826d2"}},"author_association":"NONE"}}
{"actor":{"display_login":"qihongl"}}