This is an automated email from the git hooks/post-receive script. yoh pushed a commit to branch master in repository python-mne.
commit 90594284f3fb247695d2935f2b3f5c936444b7c4 Author: Yaroslav Halchenko <[email protected]> Date: Mon Jan 13 19:43:57 2014 -0500 Imported Upstream version 0.7.2 --- doc/Makefile | 13 +++++- doc/source/_templates/layout.html | 9 ++-- doc/source/_templates/sidebar.html | 5 +++ doc/source/conf.py | 7 +++- doc/sphinxext/gen_rst.py | 24 ++++++----- doc/upload_html.sh | 4 +- mne/fiff/brainvision/brainvision.py | 29 +++++++++---- mne/fiff/tag.py | 9 ++-- mne/forward/forward.py | 4 +- mne/gui/_file_traits.py | 2 +- mne/gui/tests/test_coreg_gui.py | 81 ++++++++++++++++++------------------ mne/tests/test_epochs.py | 2 +- mne/time_frequency/tests/test_csd.py | 16 +++---- mne/utils.py | 12 ++++-- 14 files changed, 130 insertions(+), 87 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 96a8dbc..0911f13 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -15,7 +15,8 @@ ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source help: @echo "Please use \`make <target>' where <target> is one of" - @echo " html to make standalone HTML files" + @echo " html to make standalone HTML files (stable version)" + @echo " dev_html to make standalone HTML files (dev version)" @echo " dirhtml to make HTML files named index.html in directories" @echo " pickle to make pickle files" @echo " json to make JSON files" @@ -39,11 +40,21 @@ html: @echo @echo "Build finished. The HTML pages are in build/html." +html_dev: + BUILD_DEV_HTML=1 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html + @echo + @echo "Build finished. The HTML pages are in build/html." + html-noplot: $(SPHINXBUILD) -D plot_gallery=False -b html $(ALLSPHINXOPTS) build/html @echo @echo "Build finished. The HTML pages are in build/html/stable." +html_dev-noplot: + BUILD_DEV_HTML=1 $(SPHINXBUILD) -D plot_gallery=False -b html $(ALLSPHINXOPTS) build/html + @echo + @echo "Build finished. The HTML pages are in build/html/stable." + dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml @echo diff --git a/doc/source/_templates/layout.html b/doc/source/_templates/layout.html index 6a5bd02..c71a450 100755 --- a/doc/source/_templates/layout.html +++ b/doc/source/_templates/layout.html @@ -45,8 +45,12 @@ <!-- <li><a href="{{ pathto('search') }}">Search</a></li> --> {% endblock %} - {% block relbar1 %} +{% if build_dev_html|tobool %} +<div style="background-color: red; color: white; font-weight:bold; text-align: center; padding: 10px; min-width: 910px"> +This documentation is for the development version ({{ release }}) - <a href="http://martinos.org/mne/stable">Stable version</a> +</div> +{% endif %} <div style="background-color: white; text-align: left; padding: 10px 7px 15px 15px; min-width: 910px"> <div style="float: left"> <a href="{{ pathto('index') }}"><img src="{{ @@ -64,5 +68,4 @@ pathto("_static/institutions.png", 1) }}" border="0" alt="py4sci"/></a> {# put the sidebar before the body #} {% block sidebar1 %}{{ sidebar() }}{% endblock %} -{% block sidebar2 %}{% endblock %} - +{% block sidebar2 %}{% endblock %} \ No newline at end of file diff --git a/doc/source/_templates/sidebar.html b/doc/source/_templates/sidebar.html new file mode 100644 index 0000000..85d65f8 --- /dev/null +++ b/doc/source/_templates/sidebar.html @@ -0,0 +1,5 @@ +<h3>Versions</h3> +<ul class="current"> + <li class="toctree-l1"><a href=http://martinos.org/mne/stable>Stable</a></li> + <li class="toctree-l1"><a href=http://martinos.org/mne/dev>Development</a></li> +</ul> \ No newline at end of file diff --git a/doc/source/conf.py b/doc/source/conf.py index b5c406b..3050a81 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -160,7 +160,8 @@ html_last_updated_fmt = '%b %d, %Y' #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +html_sidebars = {'**': ['globaltoc.html', 'sourcelink.html', 'searchbox.html', + 'sidebar.html']} # Additional templates that should be rendered to pages, maps page names to # template names. @@ -179,8 +180,10 @@ html_use_index = False html_show_sourcelink = False # variables to pass to HTML templating engine +build_dev_html = bool(int(os.environ.get('BUILD_DEV_HTML', False))) + html_context = {'use_google_analytics':True, 'use_twitter':True, - 'use_media_buttons':True} + 'use_media_buttons':True, 'build_dev_html':build_dev_html} # If true, an OpenSearch description file will be output, and all pages will # contain a <link> tag referring to it. The value of this option must be the diff --git a/doc/sphinxext/gen_rst.py b/doc/sphinxext/gen_rst.py index 7d27f84..03d5f4b 100644 --- a/doc/sphinxext/gen_rst.py +++ b/doc/sphinxext/gen_rst.py @@ -61,16 +61,20 @@ class Tee(object): def get_data(url): """Helper function to get data over http or from a local file""" if url.startswith('http://'): - resp = urllib2.urlopen(url) - encoding = resp.headers.dict.get('content-encoding', 'plain') - data = resp.read() - if encoding == 'plain': - pass - elif encoding == 'gzip': - data = StringIO(data) - data = gzip.GzipFile(fileobj=data).read() - else: - raise RuntimeError('unknown encoding') + try: + resp = urllib2.urlopen(url) + encoding = resp.headers.dict.get('content-encoding', 'plain') + data = resp.read() + if encoding == 'plain': + pass + elif encoding == 'gzip': + data = StringIO(data) + data = gzip.GzipFile(fileobj=data).read() + else: + raise RuntimeError('unknown encoding') + except urllib2.HTTPError as err: + print 'Error downloading %s: %s' % (url, str(err)) + return '' else: with open(url, 'r') as fid: data = fid.read() diff --git a/doc/upload_html.sh b/doc/upload_html.sh index e9ff7e4..ed75d88 100755 --- a/doc/upload_html.sh +++ b/doc/upload_html.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash #scp -r build/html/* martinos-data:/web/html/mne/ -rsync -rltvz --delete --perms --chmod=g+w build/html/ martinos-data:/web/html/ext/mne/ -essh -ssh martinos-data "chgrp -R megweb /web/html/ext/mne" +rsync -rltvz --delete --perms --chmod=g+w build/html/ martinos-data:/web/html/ext/mne/stable -essh +ssh martinos-data "chgrp -R megweb /web/html/ext/mne/stable" diff --git a/mne/fiff/brainvision/brainvision.py b/mne/fiff/brainvision/brainvision.py index afbe9f7..aa78d0c 100644 --- a/mne/fiff/brainvision/brainvision.py +++ b/mne/fiff/brainvision/brainvision.py @@ -205,16 +205,27 @@ def _read_vmrk(vmrk_fname): stim_channel : array An array containing the whole recording's event marking """ - - with open(vmrk_fname) as f: - # setup config reader - assert (f.readline().strip() == - 'Brain Vision Data Exchange Marker File, Version 1.0') - - cfg = SafeConfigParser() - cfg.readfp(f) + # read vmrk file + with open(vmrk_fname) as fid: + txt = fid.read() + + start_tag = 'Brain Vision Data Exchange Marker File, Version 1.0' + if not txt.startswith(start_tag): + raise ValueError("vmrk file should start with %r" % start_tag) + + # extract Marker Infos block + m = re.search("\[Marker Infos\]", txt) + if not m: + return np.zeros(0) + mk_txt = txt[m.end():] + m = re.search("\[.*\]", mk_txt) + if m: + mk_txt = mk_txt[:m.start()] + + # extract event information + items = re.findall("^Mk\d+=(.*)", mk_txt, re.MULTILINE) events = [] - for _, info in cfg.items('Marker Infos'): + for info in items: mtype, mdesc, offset, duration = info.split(',')[:4] if mtype == 'Stimulus': trigger = int(re.findall('S\s?(\d+)', mdesc)[0]) diff --git a/mne/fiff/tag.py b/mne/fiff/tag.py index fb9f4a2..c814fb1 100644 --- a/mne/fiff/tag.py +++ b/mne/fiff/tag.py @@ -94,11 +94,14 @@ def read_big(fid, size=None): >>> with open(fname, 'wb') as fid: x.tofile(fid) >>> with open(fname, 'rb') as fid: y = np.fromstring(read_big(fid)) >>> assert np.all(x == y) - >>> with gzip.open(fname_gz, 'wb') as fid: fid.write(x.tostring()) - 24000000 - >>> with gzip.open(fname_gz, 'rb') as fid: y = np.fromstring(read_big(fid)) + >>> fid_gz = gzip.open(fname_gz, 'wb') + >>> _ = fid_gz.write(x.tostring()) + >>> fid_gz.close() + >>> fid_gz = gzip.open(fname_gz, 'rb') + >>> y = np.fromstring(read_big(fid_gz)) >>> assert np.all(x == y) >>> shutil.rmtree(os.path.dirname(fname)) + >>> fid_gz.close() """ # buf_size is chosen as a largest working power of 2 (16 MB): diff --git a/mne/forward/forward.py b/mne/forward/forward.py index 8ebf7f3..fd66990 100644 --- a/mne/forward/forward.py +++ b/mne/forward/forward.py @@ -1500,8 +1500,8 @@ def do_forward_solution(subject, meas, fname=None, src=None, spacing=None, logger.info('Running forward solution generation command with ' 'subjects_dir %s' % subjects_dir) run_subprocess(cmd, env=env) - except Exception as exception: - raise exception + except: + raise else: fwd = read_forward_solution(op.join(path, fname), verbose=False) finally: diff --git a/mne/gui/_file_traits.py b/mne/gui/_file_traits.py index 758d346..a0e9bdb 100644 --- a/mne/gui/_file_traits.py +++ b/mne/gui/_file_traits.py @@ -297,7 +297,7 @@ class RawSource(HasPrivateTraits): def _get_fid_points(self): if not self.raw: return {} - digs = {d['ident']: d for d in self.fid_dig} + digs = dict((d['ident'], d) for d in self.fid_dig) return digs @cached_property diff --git a/mne/gui/tests/test_coreg_gui.py b/mne/gui/tests/test_coreg_gui.py index 8b41ff5..2e80af1 100644 --- a/mne/gui/tests/test_coreg_gui.py +++ b/mne/gui/tests/test_coreg_gui.py @@ -4,11 +4,10 @@ import os -import numpy as np +import numpy as np from numpy.testing import assert_allclose from nose.tools import (assert_equal, assert_almost_equal, assert_false, - assert_is_instance, assert_less, assert_raises, - assert_true) + assert_raises, assert_true) import mne from mne.datasets import sample @@ -22,8 +21,8 @@ kit_raw_path = os.path.join(kit_data_dir, 'test_bin.fif') subjects_dir = os.path.join(data_path, 'subjects') tempdir = _TempDir() - -trans_dst = os.path.join(tempdir, 'test-trans.fif') + +trans_dst = os.path.join(tempdir, 'test-trans.fif') @sample.requires_sample_data @@ -37,40 +36,40 @@ def test_coreg_model(): model.mri.subjects_dir = subjects_dir model.mri.subject = 'sample' - - assert_false(model.mri.fid_ok) - model.mri.lpa = [[-0.06, 0, 0]] - model.mri.nasion = [[0, 0.05, 0]] - model.mri.rpa = [[0.08, 0, 0]] - assert_true(model.mri.fid_ok) - - model.hsp.file = raw_path - assert_allclose(model.hsp.lpa, [[-7.137e-2, 0, 5.122e-9]], 1e-4) - assert_allclose(model.hsp.rpa, [[ 7.527e-2, 0, 5.588e-9]], 1e-4) - assert_allclose(model.hsp.nasion, [[ 3.725e-9, 1.026e-1, 4.191e-9]], 1e-4) - assert_true(model.has_fid_data) + + assert_false(model.mri.fid_ok) + model.mri.lpa = [[-0.06, 0, 0]] + model.mri.nasion = [[0, 0.05, 0]] + model.mri.rpa = [[0.08, 0, 0]] + assert_true(model.mri.fid_ok) + + model.hsp.file = raw_path + assert_allclose(model.hsp.lpa, [[-7.137e-2, 0, 5.122e-9]], 1e-4) + assert_allclose(model.hsp.rpa, [[+7.527e-2, 0, 5.588e-9]], 1e-4) + assert_allclose(model.hsp.nasion, [[+3.725e-9, 1.026e-1, 4.191e-9]], 1e-4) + assert_true(model.has_fid_data) lpa_distance = model.lpa_distance nasion_distance = model.nasion_distance rpa_distance = model.rpa_distance avg_point_distance = np.mean(model.point_distance) - model.fit_auricular_points() - old_x = lpa_distance ** 2 + rpa_distance ** 2 + model.fit_auricular_points() + old_x = lpa_distance ** 2 + rpa_distance ** 2 new_x = model.lpa_distance ** 2 + model.rpa_distance ** 2 - assert_less(new_x, old_x) - - model.fit_fiducials() - old_x = lpa_distance ** 2 + rpa_distance ** 2 + nasion_distance ** 2 + assert_true(new_x < old_x) + + model.fit_fiducials() + old_x = lpa_distance ** 2 + rpa_distance ** 2 + nasion_distance ** 2 new_x = (model.lpa_distance ** 2 + model.rpa_distance ** 2 - + model.nasion_distance ** 2) - assert_less(new_x, old_x) - - model.fit_hsp_points() - assert_less(np.mean(model.point_distance), avg_point_distance) - - model.save_trans(trans_dst) - trans = mne.read_trans(trans_dst) + + model.nasion_distance ** 2) + assert_true(new_x < old_x) + + model.fit_hsp_points() + assert_true(np.mean(model.point_distance) < avg_point_distance) + + model.save_trans(trans_dst) + trans = mne.read_trans(trans_dst) assert_allclose(trans['trans'], model.head_mri_trans) # test restoring trans @@ -94,9 +93,9 @@ def test_coreg_model(): assert_almost_equal(model.rot_z, rot_z) # info - assert_is_instance(model.fid_eval_str, basestring) - assert_is_instance(model.points_eval_str, basestring) - + assert_true(isinstance(model.fid_eval_str, basestring)) + assert_true(isinstance(model.points_eval_str, basestring)) + @sample.requires_sample_data @requires_traits @@ -129,22 +128,22 @@ def test_coreg_model_with_fsaverage(): assert_equal(model.hsp.n_omitted, 1) # scale with 1 parameter - model.n_scale_params = 1 - - model.fit_scale_auricular_points() + model.n_scale_params = 1 + + model.fit_scale_auricular_points() old_x = lpa_distance ** 2 + rpa_distance ** 2 new_x = model.lpa_distance ** 2 + model.rpa_distance ** 2 - assert_less(new_x, old_x) + assert_true(new_x < old_x) model.fit_scale_fiducials() old_x = lpa_distance ** 2 + rpa_distance ** 2 + nasion_distance ** 2 new_x = (model.lpa_distance ** 2 + model.rpa_distance ** 2 + model.nasion_distance ** 2) - assert_less(new_x, old_x) + assert_true(new_x < old_x) model.fit_scale_hsp_points() avg_point_distance_1param = np.mean(model.point_distance) - assert_less(avg_point_distance_1param, avg_point_distance) + assert_true(avg_point_distance_1param < avg_point_distance) desc, func, args, kwargs = model.get_scaling_job('test') assert_true(isinstance(desc, basestring)) @@ -156,7 +155,7 @@ def test_coreg_model_with_fsaverage(): # scale with 3 parameters model.n_scale_params = 3 model.fit_scale_hsp_points() - assert_less(np.mean(model.point_distance), avg_point_distance_1param) + assert_true(np.mean(model.point_distance) < avg_point_distance_1param) # test switching raw disables point omission assert_equal(model.hsp.n_omitted, 1) diff --git a/mne/tests/test_epochs.py b/mne/tests/test_epochs.py index ca7b03c..a294871 100644 --- a/mne/tests/test_epochs.py +++ b/mne/tests/test_epochs.py @@ -664,7 +664,7 @@ def test_epoch_eq(): epochs[key] except KeyError: caught += 1 - assert_raises(caught == 2) + assert_raises(Exception, caught == 2) assert_true(not np.any(epochs.events[:, 2] == 1)) assert_true(not np.any(epochs.events[:, 2] == 2)) epochs = combine_event_ids(epochs, ['c', 'd'], {'cd': 34}) diff --git a/mne/time_frequency/tests/test_csd.py b/mne/time_frequency/tests/test_csd.py index 45ae9ec..ba5c574 100644 --- a/mne/time_frequency/tests/test_csd.py +++ b/mne/time_frequency/tests/test_csd.py @@ -1,5 +1,6 @@ import numpy as np -from nose.tools import assert_raises, assert_equal, assert_almost_equal +from nose.tools import (assert_raises, assert_equal, assert_almost_equal, + assert_true) from numpy.testing import assert_array_equal from os import path as op @@ -124,8 +125,8 @@ def test_compute_epochs_csd_on_artificial_data(): data_csd_mt = compute_epochs_csd(epochs_sin, mode='multitaper') fourier_power = np.abs(data_csd_fourier.data[0, 0]) * sfreq mt_power = np.abs(data_csd_mt.data[0, 0]) * sfreq - assert_almost_equal(fourier_power, signal_power, delta=0.5) - assert_almost_equal(mt_power, signal_power, delta=1) + assert_true(abs(fourier_power - signal_power) <= 0.5) + assert_true(abs(mt_power - signal_power) <= 1) # Power per sample should not depend on time window length for tmax in [0.2, 0.4, 0.6, 0.8]: @@ -139,9 +140,8 @@ def test_compute_epochs_csd_on_artificial_data(): fmax=np.inf, n_fft=n_fft) fourier_power_per_sample = np.abs(data_csd_fourier.data[0, 0]) *\ sfreq / data_csd_fourier.n_fft - assert_almost_equal(signal_power_per_sample, - fourier_power_per_sample, delta=0.003) - + assert_true(abs(signal_power_per_sample - + fourier_power_per_sample) < 0.003) # Power per sample should not depend on number of tapers for n_tapers in [1, 2, 3, 5]: for add_n_fft in [30, 0, 30]: @@ -159,5 +159,5 @@ def test_compute_epochs_csd_on_artificial_data(): delta = 0.05 else: delta = 0.004 - assert_almost_equal(signal_power_per_sample, - mt_power_per_sample, delta=delta) + assert_true(abs(signal_power_per_sample - mt_power_per_sample) + < delta) diff --git a/mne/utils.py b/mne/utils.py index b54e19d..7c1b97f 100644 --- a/mne/utils.py +++ b/mne/utils.py @@ -215,8 +215,12 @@ def run_subprocess(command, *args, **kwargs): output = (stdout_, stderr) if p.returncode: - print output - raise subprocess.CalledProcessError(p.returncode, command, output) + print(output) + err_fun = subprocess.CalledProcessError.__init__ + if 'output' in inspect.getargspec(err_fun).args: + raise subprocess.CalledProcessError(p.returncode, command, output) + else: + raise subprocess.CalledProcessError(p.returncode, command) return output @@ -921,7 +925,7 @@ class ProgressBar(object): """ spinner_symbols = ['|', '/', '-', '\\'] - template = '\r[{}{}] {:.05f} {} {} ' + template = '\r[{0}{1}] {2:.05f} {3} {4} ' def __init__(self, max_value, initial_value=0, mesg='', max_chars=40, progress_character='.', spinner=False): @@ -1162,7 +1166,7 @@ def sizeof_fmt(num): exponent = min(int(log(num, 1024)), len(unit_list) - 1) quotient = float(num) / 1024 ** exponent unit, num_decimals = unit_list[exponent] - format_string = '{:.%sf} {}' % (num_decimals) + format_string = '{0:.%sf} {1}' % (num_decimals) return format_string.format(quotient, unit) if num == 0: return '0 bytes' -- Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
