{"action":"created","comment":{"url":"https://api.github.com/repos/mne-tools/mne-python/pulls/comments/54292881","id":54292881,"diff_hunk":"@@ -0,0 +1,229 @@\n+\"\"\"Conversion tool from Neuroscan CNT to FIF\n+\"\"\"\n+\n+# Author: Jaakko Leppakangas <jaeilepp@student.jyu.fi>\n+#\n+# License: BSD (3-clause)\n+from os import path\n+import datetime\n+import calendar\n+\n+import numpy as np\n+\n+from ...utils import warn, verbose\n+from ..constants import FIFF\n+from ..utils import _mult_cal_one\n+from ..meas_info import _empty_info\n+from ..base import _BaseRaw\n+\n+\n+def read_raw_cnt(input_fname, read_blocks=True, preload=False, verbose=None):\n+    \"\"\"\n+\n+    Parameters\n+    ----------\n+    input_fname : str\n+        Path to the data file.\n+    read_blocks : bool\n+        Whether to read data in blocks. This is for dealing with different\n+        kinds of CNT data formats.\n+    preload : bool or str (default False)\n+        Preload data into memory for data manipulation and faster indexing.\n+        If True, the data will be preloaded into memory (fast, requires\n+        large amount of memory). If preload is a string, preload is the\n+        file name of a memory-mapped file which is used to store the data\n+        on the hard drive (slower, requires less memory).\n+    verbose : bool, str, int, or None\n+        If not None, override default verbose level (see mne.verbose).\n+\n+    Returns\n+    -------\n+    Instance of RawCNT.\n+    \"\"\"\n+    return RawCNT(input_fname, read_blocks=read_blocks, preload=preload,\n+                  verbose=verbose)\n+\n+\n+def _get_cnt_info(input_fname, read_blocks):\n+    \"\"\"Helper for reading the cnt header.\"\"\"\n+    dtype = '<i4'\n+    n_bytes = np.dtype(dtype).itemsize\n+    offset = 900  # Size of the 'SETUP' header.\n+    start = 0\n+    cnt_info = dict()\n+    # Reading only the fields of interest. Structure of the whole header at\n+    # http://paulbourke.net/dataformats/eeg/\n+    with open(input_fname, 'rb', buffering=0) as fid:\n+        fid.seek(225)\n+        session_date = ''.join(np.fromfile(fid, dtype='S1', count=10))\n+        time = ''.join(np.fromfile(fid, dtype='S1', count=12))\n+        date = session_date.split('/')\n+        if date[2].startswith('9'):\n+            date[2] = '19' + date[2]\n+        elif len(date[2]) == 2:\n+            date[2] = '20' + date[2]\n+        time = time.split(':')\n+        # Assuming mm/dd/yy\n+        date = datetime.datetime(int(date[2]), int(date[0]), int(date[1]),\n+                                 int(time[0]), int(time[1]), int(time[2]))\n+        fid.seek(370)\n+        n_channels = np.fromfile(fid, dtype='<u2', count=1)[0]\n+\n+        data_offset = n_channels * start * n_bytes + offset\n+        fid.seek(376)\n+        cnt_info['sfreq'] = np.fromfile(fid, dtype='<u2', count=1)[0]\n+        fid.seek(438)\n+        lowpass_toggle = np.fromfile(fid, 'i1', count=1)[0]\n+        highpass_toggle = np.fromfile(fid, 'i1', count=1)[0]\n+        fid.seek(869)\n+        lowcutoff = np.fromfile(fid, dtype='f4', count=1)[0]\n+        fid.seek(2, 1)\n+        highcutoff = np.fromfile(fid, dtype='f4', count=1)[0]\n+\n+        fid.seek(886)\n+        cnt_info['event_offset'] = np.fromfile(fid, dtype='<i4', count=1)[0]\n+        cnt_info['continuous_seconds'] = np.fromfile(fid, dtype='<f4',\n+                                                     count=1)[0]\n+        cnt_info['channel_offset'] = np.fromfile(fid, dtype='<i4', count=1)[0]\n+        if cnt_info['channel_offset'] > 1 and read_blocks:\n+            cnt_info['channel_offset'] /= 2\n+            warn('Reading in data in blocks of %d. If this fails, try using '\n+                 'read_blocks=False.')\n+        cnt_info['n_samples'] = (cnt_info['event_offset'] -\n+                                 (900 + 75 * n_channels)) / (2 * n_channels)\n+        ch_names = list()\n+        cals = list()\n+        baselines = list()  # Baselines are subtracted before scaling the data.\n+        chs = list()\n+        for i in range(n_channels):\n+            fid.seek(data_offset + 75 * i)\n+            ch_names.append(''.join(np.fromfile(fid, dtype='S1', count=10)))\n+            fid.seek(data_offset + 75 * i + 47)\n+            baselines.append(np.fromfile(fid, dtype='i2', count=1)[0])\n+            fid.seek(data_offset + 75 * i + 59)\n+            sensitivity = np.fromfile(fid, dtype='f4', count=1)[0]\n+            fid.seek(data_offset + 75 * i + 71)\n+            cal = np.fromfile(fid, dtype='f4', count=1)\n+            cals.append(cal * sensitivity * 1e-6 / 204.8)\n+    cnt_info['n_channels'] = n_channels\n+\n+    info = _empty_info(cnt_info['sfreq'])\n+    if lowpass_toggle == 1:\n+        info['lowpass'] = highcutoff\n+    if highpass_toggle == 1:\n+        info['highpass'] = lowcutoff\n+    info.update({'filename': input_fname,\n+                 'meas_date': calendar.timegm(date.utctimetuple()),\n+                 'description': None, 'buffer_size_sec': 10.})\n+    for idx, ch_name in enumerate(ch_names):\n+        ch_coil = FIFF.FIFFV_COIL_EEG\n+        ch_kind = FIFF.FIFFV_EEG_CH\n+        chan_info = {'cal': cals[idx], 'logno': idx + 1, 'scanno': idx + 1,\n+                     'range': 1.0, 'unit_mul': 0., 'ch_name': ch_name,\n+                     'unit': FIFF.FIFF_UNIT_V,\n+                     'coord_frame': FIFF.FIFFV_COORD_HEAD, 'loc': np.zeros(12),\n+                     'coil_type': ch_coil, 'kind': ch_kind}\n+        chs.append(chan_info)\n+\n+    # Add the stim channel.\n+    chan_info = {'cal': 1.0, 'logno': len(chs) + 1, 'scanno': len(chs) + 1,\n+                 'range': 1.0, 'unit_mul': 0., 'ch_name': 'STI',\n+                 'unit': FIFF.FIFF_UNITM_NONE,\n+                 'coord_frame': FIFF.FIFFV_COORD_UNKNOWN, 'loc': np.zeros(12),\n+                 'coil_type': FIFF.FIFFV_COIL_NONE, 'kind': FIFF.FIFFV_SYST_CH}\n+    chs.append(chan_info)\n+    baselines.append(0)  # For stim channel\n+    cnt_info['baselines'] = np.array(baselines)\n+    info['chs'] = chs\n+    return info, cnt_info\n+\n+\n+class RawCNT(_BaseRaw):\n+    \"\"\"Raw object from Neuroscan CNT file.\n+\n+    Parameters\n+    ----------\n+    input_fname : str\n+        Path to the CNT file.\n+    read_blocks : bool\n+        Whether to read data in blocks. This is for dealing with different\n+        kinds of CNT data formats.\n+    preload : bool or str (default False)\n+        Preload data into memory for data manipulation and faster indexing.\n+        If True, the data will be preloaded into memory (fast, requires\n+        large amount of memory). If preload is a string, preload is the\n+        file name of a memory-mapped file which is used to store the data\n+        on the hard drive (slower, requires less memory).\n+    verbose : bool, str, int, or None\n+        If not None, override default verbose level (see mne.verbose).\n+\n+    See Also\n+    --------\n+    mne.io.Raw : Documentation of attribute and methods.\n+    \"\"\"\n+    def __init__(self, input_fname, read_blocks=True, preload=False,\n+                 verbose=None):\n+        input_fname = path.abspath(input_fname)\n+        info, cnt_info = _get_cnt_info(input_fname, read_blocks)\n+        last_samps = [cnt_info['n_samples'] - 1]\n+        super(RawCNT, self).__init__(\n+            info, preload, filenames=[input_fname], raw_extras=[cnt_info],\n+            last_samps=last_samps, orig_format='int',\n+            verbose=verbose)\n+\n+    @verbose\n+    def _read_segment_file(self, data, idx, fi, start, stop, cals, mult):\n+        \"\"\"Take a chunk of raw data, multiply by mult or cals, and store\"\"\"\n+        n_channels = self.info['nchan'] - 1\n+        n_samples = self._raw_extras[0]['n_samples']\n+        channel_offset = self._raw_extras[0]['channel_offset']\n+        baselines = self._raw_extras[0]['baselines']\n+        event_offset = self._raw_extras[0]['event_offset']\n+        n_bytes = 2\n+        # The data is divided into blocks of samples / channel.\n+        # channel_offset determines the amount of successive samples.\n+        # Here we use sample offset to align the data because start can be in\n+        # the middle of these blocks.\n+        s_offset = start % channel_offset\n+\n+        with open(self._filenames[fi], 'rb', buffering=0) as fid:\n+            fid.seek(event_offset)\n+            event_type = np.fromfile(fid, dtype='<i1', count=1)[0]\n+            event_size = np.fromfile(fid, dtype='<i4', count=1)\n+            if event_type == 1:\n+                bytes = 8","path":"mne/io/cnt/cnt.py","position":194,"original_position":194,"commit_id":"481dbb1bd8a6aa40fcb1ce54a403bfed4e38ffda","original_commit_id":"481dbb1bd8a6aa40fcb1ce54a403bfed4e38ffda","user":{"login":"Eric89GXL","id":2365790,"avatar_url":"https://avatars.githubusercontent.com/u/2365790?v=3","gravatar_id":"","url":"https://api.github.com/users/Eric89GXL","html_url":"https://github.com/Eric89GXL","followers_url":"https://api.github.com/users/Eric89GXL/followers","following_url":"https://api.github.com/users/Eric89GXL/following{/other_user}","gists_url":"https://api.github.com/users/Eric89GXL/gists{/gist_id}","starred_url":"https://api.github.com/users/Eric89GXL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Eric89GXL/subscriptions","organizations_url":"https://api.github.com/users/Eric89GXL/orgs","repos_url":"https://api.github.com/users/Eric89GXL/repos","events_url":"https://api.github.com/users/Eric89GXL/events{/privacy}","received_events_url":"https://api.github.com/users/Eric89GXL/received_events","type":"User","site_admin":false},"body":"don't shadow builtin","created_at":"2016-02-26T19:52:45Z","updated_at":"2016-02-26T19:52:45Z","html_url":"https://github.com/mne-tools/mne-python/pull/2946#discussion_r54292881","pull_request_url":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946","_links":{"self":{"href":"https://api.github.com/repos/mne-tools/mne-python/pulls/comments/54292881"},"html":{"href":"https://github.com/mne-tools/mne-python/pull/2946#discussion_r54292881"},"pull_request":{"href":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946"}}},"pull_request":{"url":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946","id":60675009,"html_url":"https://github.com/mne-tools/mne-python/pull/2946","diff_url":"https://github.com/mne-tools/mne-python/pull/2946.diff","patch_url":"https://github.com/mne-tools/mne-python/pull/2946.patch","issue_url":"https://api.github.com/repos/mne-tools/mne-python/issues/2946","number":2946,"state":"open","locked":false,"title":"[WIP] Reader for Neuroscan cnt files.","user":{"login":"jaeilepp","id":3456414,"avatar_url":"https://avatars.githubusercontent.com/u/3456414?v=3","gravatar_id":"","url":"https://api.github.com/users/jaeilepp","html_url":"https://github.com/jaeilepp","followers_url":"https://api.github.com/users/jaeilepp/followers","following_url":"https://api.github.com/users/jaeilepp/following{/other_user}","gists_url":"https://api.github.com/users/jaeilepp/gists{/gist_id}","starred_url":"https://api.github.com/users/jaeilepp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaeilepp/subscriptions","organizations_url":"https://api.github.com/users/jaeilepp/orgs","repos_url":"https://api.github.com/users/jaeilepp/repos","events_url":"https://api.github.com/users/jaeilepp/events{/privacy}","received_events_url":"https://api.github.com/users/jaeilepp/received_events","type":"User","site_admin":false},"body":"Closes https://github.com/mne-tools/mne-python/issues/2815\r\n\r\nFollowed the logic on eeglab reader. Do we want to include everything from the header file to the ``raw_extras``? It has quite a lot of stuff: http://paulbourke.net/dataformats/eeg/","created_at":"2016-02-25T13:03:26Z","updated_at":"2016-02-26T19:52:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3f102f54165f16967bd328552b982a435b5d9337","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946/commits","review_comments_url":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946/comments","review_comment_url":"https://api.github.com/repos/mne-tools/mne-python/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mne-tools/mne-python/issues/2946/comments","statuses_url":"https://api.github.com/repos/mne-tools/mne-python/statuses/481dbb1bd8a6aa40fcb1ce54a403bfed4e38ffda","head":{"label":"jaeilepp:cnt-reader","ref":"cnt-reader","sha":"481dbb1bd8a6aa40fcb1ce54a403bfed4e38ffda","user":{"login":"jaeilepp","id":3456414,"avatar_url":"https://avatars.githubusercontent.com/u/3456414?v=3","gravatar_id":"","url":"https://api.github.com/users/jaeilepp","html_url":"https://github.com/jaeilepp","followers_url":"https://api.github.com/users/jaeilepp/followers","following_url":"https://api.github.com/users/jaeilepp/following{/other_user}","gists_url":"https://api.github.com/users/jaeilepp/gists{/gist_id}","starred_url":"https://api.github.com/users/jaeilepp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaeilepp/subscriptions","organizations_url":"https://api.github.com/users/jaeilepp/orgs","repos_url":"https://api.github.com/users/jaeilepp/repos","events_url":"https://api.github.com/users/jaeilepp/events{/privacy}","received_events_url":"https://api.github.com/users/jaeilepp/received_events","type":"User","site_admin":false},"repo":{"id":35097627,"name":"mne-python","full_name":"jaeilepp/mne-python","owner":{"login":"jaeilepp","id":3456414,"avatar_url":"https://avatars.githubusercontent.com/u/3456414?v=3","gravatar_id":"","url":"https://api.github.com/users/jaeilepp","html_url":"https://github.com/jaeilepp","followers_url":"https://api.github.com/users/jaeilepp/followers","following_url":"https://api.github.com/users/jaeilepp/following{/other_user}","gists_url":"https://api.github.com/users/jaeilepp/gists{/gist_id}","starred_url":"https://api.github.com/users/jaeilepp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaeilepp/subscriptions","organizations_url":"https://api.github.com/users/jaeilepp/orgs","repos_url":"https://api.github.com/users/jaeilepp/repos","events_url":"https://api.github.com/users/jaeilepp/events{/privacy}","received_events_url":"https://api.github.com/users/jaeilepp/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jaeilepp/mne-python","description":"MNE : Magnetoencephalography (MEG) and Electroencephalography (EEG) in Python","fork":true,"url":"https://api.github.com/repos/jaeilepp/mne-python","forks_url":"https://api.github.com/repos/jaeilepp/mne-python/forks","keys_url":"https://api.github.com/repos/jaeilepp/mne-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jaeilepp/mne-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jaeilepp/mne-python/teams","hooks_url":"https://api.github.com/repos/jaeilepp/mne-python/hooks","issue_events_url":"https://api.github.com/repos/jaeilepp/mne-python/issues/events{/number}","events_url":"https://api.github.com/repos/jaeilepp/mne-python/events","assignees_url":"https://api.github.com/repos/jaeilepp/mne-python/assignees{/user}","branches_url":"https://api.github.com/repos/jaeilepp/mne-python/branches{/branch}","tags_url":"https://api.github.com/repos/jaeilepp/mne-python/tags","blobs_url":"https://api.github.com/repos/jaeilepp/mne-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jaeilepp/mne-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jaeilepp/mne-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/jaeilepp/mne-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jaeilepp/mne-python/statuses/{sha}","languages_url":"https://api.github.com/repos/jaeilepp/mne-python/languages","stargazers_url":"https://api.github.com/repos/jaeilepp/mne-python/stargazers","contributors_url":"https://api.github.com/repos/jaeilepp/mne-python/contributors","subscribers_url":"https://api.github.com/repos/jaeilepp/mne-python/subscribers","subscription_url":"https://api.github.com/repos/jaeilepp/mne-python/subscription","commits_url":"https://api.github.com/repos/jaeilepp/mne-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/jaeilepp/mne-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/jaeilepp/mne-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/jaeilepp/mne-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/jaeilepp/mne-python/contents/{+path}","compare_url":"https://api.github.com/repos/jaeilepp/mne-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jaeilepp/mne-python/merges","archive_url":"https://api.github.com/repos/jaeilepp/mne-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jaeilepp/mne-python/downloads","issues_url":"https://api.github.com/repos/jaeilepp/mne-python/issues{/number}","pulls_url":"https://api.github.com/repos/jaeilepp/mne-python/pulls{/number}","milestones_url":"https://api.github.com/repos/jaeilepp/mne-python/milestones{/number}","notifications_url":"https://api.github.com/repos/jaeilepp/mne-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jaeilepp/mne-python/labels{/name}","releases_url":"https://api.github.com/repos/jaeilepp/mne-python/releases{/id}","deployments_url":"https://api.github.com/repos/jaeilepp/mne-python/deployments","created_at":"2015-05-05T12:24:30Z","updated_at":"2015-05-05T12:24:33Z","pushed_at":"2016-02-26T15:10:12Z","git_url":"git://github.com/jaeilepp/mne-python.git","ssh_url":"git@github.com:jaeilepp/mne-python.git","clone_url":"https://github.com/jaeilepp/mne-python.git","svn_url":"https://github.com/jaeilepp/mne-python","homepage":"http://martinos.org/mne/","size":82137,"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":"mne-tools:master","ref":"master","sha":"96a0759c4c92339093416f8be19b70f58ed500e5","user":{"login":"mne-tools","id":583875,"avatar_url":"https://avatars.githubusercontent.com/u/583875?v=3","gravatar_id":"","url":"https://api.github.com/users/mne-tools","html_url":"https://github.com/mne-tools","followers_url":"https://api.github.com/users/mne-tools/followers","following_url":"https://api.github.com/users/mne-tools/following{/other_user}","gists_url":"https://api.github.com/users/mne-tools/gists{/gist_id}","starred_url":"https://api.github.com/users/mne-tools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mne-tools/subscriptions","organizations_url":"https://api.github.com/users/mne-tools/orgs","repos_url":"https://api.github.com/users/mne-tools/repos","events_url":"https://api.github.com/users/mne-tools/events{/privacy}","received_events_url":"https://api.github.com/users/mne-tools/received_events","type":"Organization","site_admin":false},"repo":{"id":1301584,"name":"mne-python","full_name":"mne-tools/mne-python","owner":{"login":"mne-tools","id":583875,"avatar_url":"https://avatars.githubusercontent.com/u/583875?v=3","gravatar_id":"","url":"https://api.github.com/users/mne-tools","html_url":"https://github.com/mne-tools","followers_url":"https://api.github.com/users/mne-tools/followers","following_url":"https://api.github.com/users/mne-tools/following{/other_user}","gists_url":"https://api.github.com/users/mne-tools/gists{/gist_id}","starred_url":"https://api.github.com/users/mne-tools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mne-tools/subscriptions","organizations_url":"https://api.github.com/users/mne-tools/orgs","repos_url":"https://api.github.com/users/mne-tools/repos","events_url":"https://api.github.com/users/mne-tools/events{/privacy}","received_events_url":"https://api.github.com/users/mne-tools/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mne-tools/mne-python","description":"MNE : Magnetoencephalography (MEG) and Electroencephalography (EEG) in Python","fork":false,"url":"https://api.github.com/repos/mne-tools/mne-python","forks_url":"https://api.github.com/repos/mne-tools/mne-python/forks","keys_url":"https://api.github.com/repos/mne-tools/mne-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mne-tools/mne-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mne-tools/mne-python/teams","hooks_url":"https://api.github.com/repos/mne-tools/mne-python/hooks","issue_events_url":"https://api.github.com/repos/mne-tools/mne-python/issues/events{/number}","events_url":"https://api.github.com/repos/mne-tools/mne-python/events","assignees_url":"https://api.github.com/repos/mne-tools/mne-python/assignees{/user}","branches_url":"https://api.github.com/repos/mne-tools/mne-python/branches{/branch}","tags_url":"https://api.github.com/repos/mne-tools/mne-python/tags","blobs_url":"https://api.github.com/repos/mne-tools/mne-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mne-tools/mne-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mne-tools/mne-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/mne-tools/mne-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mne-tools/mne-python/statuses/{sha}","languages_url":"https://api.github.com/repos/mne-tools/mne-python/languages","stargazers_url":"https://api.github.com/repos/mne-tools/mne-python/stargazers","contributors_url":"https://api.github.com/repos/mne-tools/mne-python/contributors","subscribers_url":"https://api.github.com/repos/mne-tools/mne-python/subscribers","subscription_url":"https://api.github.com/repos/mne-tools/mne-python/subscription","commits_url":"https://api.github.com/repos/mne-tools/mne-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/mne-tools/mne-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/mne-tools/mne-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/mne-tools/mne-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/mne-tools/mne-python/contents/{+path}","compare_url":"https://api.github.com/repos/mne-tools/mne-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mne-tools/mne-python/merges","archive_url":"https://api.github.com/repos/mne-tools/mne-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mne-tools/mne-python/downloads","issues_url":"https://api.github.com/repos/mne-tools/mne-python/issues{/number}","pulls_url":"https://api.github.com/repos/mne-tools/mne-python/pulls{/number}","milestones_url":"https://api.github.com/repos/mne-tools/mne-python/milestones{/number}","notifications_url":"https://api.github.com/repos/mne-tools/mne-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mne-tools/mne-python/labels{/name}","releases_url":"https://api.github.com/repos/mne-tools/mne-python/releases{/id}","deployments_url":"https://api.github.com/repos/mne-tools/mne-python/deployments","created_at":"2011-01-28T03:31:13Z","updated_at":"2016-02-26T06:56:23Z","pushed_at":"2016-02-26T19:38:16Z","git_url":"git://github.com/mne-tools/mne-python.git","ssh_url":"git@github.com:mne-tools/mne-python.git","clone_url":"https://github.com/mne-tools/mne-python.git","svn_url":"https://github.com/mne-tools/mne-python","homepage":"http://martinos.org/mne/","size":171158,"stargazers_count":181,"watchers_count":181,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":167,"mirror_url":null,"open_issues_count":177,"forks":167,"open_issues":177,"watchers":181,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946"},"html":{"href":"https://github.com/mne-tools/mne-python/pull/2946"},"issue":{"href":"https://api.github.com/repos/mne-tools/mne-python/issues/2946"},"comments":{"href":"https://api.github.com/repos/mne-tools/mne-python/issues/2946/comments"},"review_comments":{"href":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946/comments"},"review_comment":{"href":"https://api.github.com/repos/mne-tools/mne-python/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mne-tools/mne-python/pulls/2946/commits"},"statuses":{"href":"https://api.github.com/repos/mne-tools/mne-python/statuses/481dbb1bd8a6aa40fcb1ce54a403bfed4e38ffda"}}}}