def capture_output(): if sys.version_info < (3, 0): from io import StringIO class TextIO(StringIO): def write(self, data): if not isinstance(data, unicode): # noqa F821 data = unicode(data, getattr(self, '_encoding', 'utf-8'), 'replace') # noqa F821 StringIO.write(self, data) else: from io import StringIO as TextIO out = TextIO() err = TextIO() stdout = sys.stdout sys.stdout = out stderr = sys.stderr sys.stderr = err try: yield out, err finally: sys.stdout = stdout sys.stderr = stderr
def test_maximum_rows(self): """ Any single string passed to ``Sink.write`` gets limited to the number of rows available on the sink. """ size = Size(rows=3, columns=80, xpixels=3, ypixels=7) outfile = TextIO() sink = Sink( terminal=StubTerminal(size=size), outfile=outfile, ) lines = list("Hello {}\n".format(n) for n in range(size.rows + 1)) sink.write("".join(lines)) self.assertEqual( lines[:size.rows], list(line + "\n" for line in outfile.getvalue().splitlines()), )
def gen_html(csv_file, mod, csv_failed=None, out_file=None): import os.path as op from os import remove from shutil import copy import datetime from pkg_resources import resource_filename as pkgrf from .. import __version__ as ver from ..data import GroupTemplate from ..utils.misc import check_folder if version_info[0] > 2: from io import StringIO as TextIO else: from io import BytesIO as TextIO QCGROUPS = { 'T1w': [(['cjv'], None), (['cnr'], None), (['efc'], None), (['fber'], None), (['wm2max'], None), (['snr_csf', 'snr_gm', 'snr_wm'], None), (['snrd_csf', 'snrd_gm', 'snrd_wm'], None), (['fwhm_avg', 'fwhm_x', 'fwhm_y', 'fwhm_z'], 'vox'), (['qi_1', 'qi_2'], None), (['inu_range', 'inu_med'], None), (['icvs_csf', 'icvs_gm', 'icvs_wm'], None), (['rpve_csf', 'rpve_gm', 'rpve_wm'], None), (['tpm_overlap_csf', 'tpm_overlap_gm', 'tpm_overlap_wm'], None), ([ 'summary_bg_mean', 'summary_bg_median', 'summary_bg_stdv', 'summary_bg_mad', 'summary_bg_k', 'summary_bg_p05', 'summary_bg_p95' ], None), ([ 'summary_csf_mean', 'summary_csf_median', 'summary_csf_stdv', 'summary_csf_mad', 'summary_csf_k', 'summary_csf_p05', 'summary_csf_p95' ], None), ([ 'summary_gm_mean', 'summary_gm_median', 'summary_gm_stdv', 'summary_gm_mad', 'summary_gm_k', 'summary_gm_p05', 'summary_gm_p95' ], None), ([ 'summary_wm_mean', 'summary_wm_median', 'summary_wm_stdv', 'summary_wm_mad', 'summary_wm_k', 'summary_wm_p05', 'summary_wm_p95' ], None)], 'T2w': [(['cjv'], None), (['cnr'], None), (['efc'], None), (['fber'], None), (['wm2max'], None), (['snr_csf', 'snr_gm', 'snr_wm'], None), (['snrd_csf', 'snrd_gm', 'snrd_wm'], None), (['fwhm_avg', 'fwhm_x', 'fwhm_y', 'fwhm_z'], 'mm'), (['qi_1', 'qi_2'], None), (['inu_range', 'inu_med'], None), (['icvs_csf', 'icvs_gm', 'icvs_wm'], None), (['rpve_csf', 'rpve_gm', 'rpve_wm'], None), (['tpm_overlap_csf', 'tpm_overlap_gm', 'tpm_overlap_wm'], None), ([ 'summary_bg_mean', 'summary_bg_stdv', 'summary_bg_k', 'summary_bg_p05', 'summary_bg_p95' ], None), ([ 'summary_csf_mean', 'summary_csf_stdv', 'summary_csf_k', 'summary_csf_p05', 'summary_csf_p95' ], None), ([ 'summary_gm_mean', 'summary_gm_stdv', 'summary_gm_k', 'summary_gm_p05', 'summary_gm_p95' ], None), ([ 'summary_wm_mean', 'summary_wm_stdv', 'summary_wm_k', 'summary_wm_p05', 'summary_wm_p95' ], None)], 'bold': [ (['efc'], None), (['fber'], None), (['fwhm', 'fwhm_x', 'fwhm_y', 'fwhm_z'], 'mm'), (['gsr_%s' % a for a in ['x', 'y']], None), (['snr'], None), (['dvars_std', 'dvars_vstd'], None), (['dvars_nstd'], None), (['fd_mean'], 'mm'), (['fd_num'], '# timepoints'), (['fd_perc'], '% timepoints'), (['spikes_num'], '# slices'), (['dummy_trs'], '# TRs'), (['gcor'], None), (['tsnr'], None), (['aor'], None), (['aqi'], None), ([ 'summary_bg_mean', 'summary_bg_stdv', 'summary_bg_k', 'summary_bg_p05', 'summary_bg_p95' ], None), ([ 'summary_fg_mean', 'summary_fg_stdv', 'summary_fg_k', 'summary_fg_p05', 'summary_fg_p95' ], None), ] } def_comps = list(BIDS_COMP.keys()) dataframe = pd.read_csv(csv_file, index_col=False, dtype={comp: object for comp in def_comps}) id_labels = list(set(def_comps) & set(dataframe.columns.ravel().tolist())) dataframe['label'] = dataframe[id_labels].apply(_format_labels, axis=1) nPart = len(dataframe) failed = None if csv_failed is not None and op.isfile(csv_failed): MRIQC_REPORT_LOG.warn('Found failed-workflows table "%s"', csv_failed) failed_df = pd.read_csv(csv_failed, index_col=False) cols = list(set(id_labels) & set(failed_df.columns.ravel().tolist())) try: failed_df = failed_df.sort_values(by=cols) except AttributeError: #pylint: disable=E1101 failed_df = failed_df.sort(columns=cols) failed = failed_df[cols].apply(myfmt, args=(cols, ), axis=1).ravel().tolist() csv_groups = [] datacols = dataframe.columns.ravel().tolist() for group, units in QCGROUPS[mod]: dfdict = {'iqm': [], 'value': [], 'label': [], 'units': []} for iqm in group: if iqm in datacols: values = dataframe[[iqm]].values.ravel().tolist() if values: dfdict['iqm'] += [iqm] * nPart dfdict['units'] += [units] * nPart dfdict['value'] += values dfdict['label'] += dataframe[['label' ]].values.ravel().tolist() # Save only if there are values if dfdict['value']: csv_df = pd.DataFrame(dfdict) csv_str = TextIO() csv_df[['iqm', 'value', 'label', 'units']].to_csv(csv_str, index=False) csv_groups.append(csv_str.getvalue()) if out_file is None: out_file = op.abspath('group.html') tpl = GroupTemplate() tpl.generate_conf( { 'modality': mod, 'timestamp': datetime.datetime.now().strftime("%Y-%m-%d, %H:%M"), 'version': ver, 'csv_groups': csv_groups, 'failed': failed, 'boxplots_js': open( pkgrf( 'mriqc', op.join('data', 'reports', 'embed_resources', 'boxplots.js'))).read(), 'd3_js': open( pkgrf( 'mriqc', op.join('data', 'reports', 'embed_resources', 'd3.min.js'))).read(), 'boxplots_css': open( pkgrf( 'mriqc', op.join('data', 'reports', 'embed_resources', 'boxplots.css'))).read() }, out_file) return out_file
try: # python 2.6 import fractions import number import io from io import StringIO as TextIO # built-in functions (CH 2) a['ByteArrayType'] = bytearray([1]) # numeric and mathematical types (CH 9) a['FractionType'] = fractions.Fraction() a['NumberType'] = numbers.Number() # generic operating system services (CH 15) a['IOBaseType'] = io.IOBase() a['RawIOBaseType'] = io.RawIOBase() a['TextIOBaseType'] = io.TextIOBase() a['BufferedIOBaseType'] = io.BufferedIOBase() a['UnicodeIOType'] = TextIO() # the new StringIO a['LoggingAdapterType'] = logging.LoggingAdapter(_logger, _dict) # pickle ok if HAS_CTYPES: a['CBoolType'] = ctypes.c_bool(1) a['CLongDoubleType'] = ctypes.c_longdouble() except ImportError: pass try: # python 2.7 import argparse # data types (CH 8) a['OrderedDictType'] = collections.OrderedDict(_dict) a['CounterType'] = collections.Counter(_dict) if HAS_CTYPES: a['CSSizeTType'] = ctypes.c_ssize_t() # generic operating system services (CH 15)
def gen_html(csv_file, mod, csv_failed=None, out_file=None): import datetime import os.path as op from pkg_resources import resource_filename as pkgrf from .. import __version__ as ver from ..data import GroupTemplate if version_info[0] > 2: from io import StringIO as TextIO else: from io import BytesIO as TextIO QCGROUPS = { "T1w": [ (["cjv"], None), (["cnr"], None), (["efc"], None), (["fber"], None), (["wm2max"], None), (["snr_csf", "snr_gm", "snr_wm"], None), (["snrd_csf", "snrd_gm", "snrd_wm"], None), (["fwhm_avg", "fwhm_x", "fwhm_y", "fwhm_z"], "vox"), (["qi_1", "qi_2"], None), (["inu_range", "inu_med"], None), (["icvs_csf", "icvs_gm", "icvs_wm"], None), (["rpve_csf", "rpve_gm", "rpve_wm"], None), (["tpm_overlap_csf", "tpm_overlap_gm", "tpm_overlap_wm"], None), ( [ "summary_bg_mean", "summary_bg_median", "summary_bg_stdv", "summary_bg_mad", "summary_bg_k", "summary_bg_p05", "summary_bg_p95", ], None, ), ( [ "summary_csf_mean", "summary_csf_median", "summary_csf_stdv", "summary_csf_mad", "summary_csf_k", "summary_csf_p05", "summary_csf_p95", ], None, ), ( [ "summary_gm_mean", "summary_gm_median", "summary_gm_stdv", "summary_gm_mad", "summary_gm_k", "summary_gm_p05", "summary_gm_p95", ], None, ), ( [ "summary_wm_mean", "summary_wm_median", "summary_wm_stdv", "summary_wm_mad", "summary_wm_k", "summary_wm_p05", "summary_wm_p95", ], None, ), ], "T2w": [ (["cjv"], None), (["cnr"], None), (["efc"], None), (["fber"], None), (["wm2max"], None), (["snr_csf", "snr_gm", "snr_wm"], None), (["snrd_csf", "snrd_gm", "snrd_wm"], None), (["fwhm_avg", "fwhm_x", "fwhm_y", "fwhm_z"], "mm"), (["qi_1", "qi_2"], None), (["inu_range", "inu_med"], None), (["icvs_csf", "icvs_gm", "icvs_wm"], None), (["rpve_csf", "rpve_gm", "rpve_wm"], None), (["tpm_overlap_csf", "tpm_overlap_gm", "tpm_overlap_wm"], None), ( [ "summary_bg_mean", "summary_bg_stdv", "summary_bg_k", "summary_bg_p05", "summary_bg_p95", ], None, ), ( [ "summary_csf_mean", "summary_csf_stdv", "summary_csf_k", "summary_csf_p05", "summary_csf_p95", ], None, ), ( [ "summary_gm_mean", "summary_gm_stdv", "summary_gm_k", "summary_gm_p05", "summary_gm_p95", ], None, ), ( [ "summary_wm_mean", "summary_wm_stdv", "summary_wm_k", "summary_wm_p05", "summary_wm_p95", ], None, ), ], "bold": [ (["efc"], None), (["fber"], None), (["fwhm", "fwhm_x", "fwhm_y", "fwhm_z"], "mm"), (["gsr_%s" % a for a in ["x", "y"]], None), (["snr"], None), (["dvars_std", "dvars_vstd"], None), (["dvars_nstd"], None), (["fd_mean"], "mm"), (["fd_num"], "# timepoints"), (["fd_perc"], "% timepoints"), (["spikes_num"], "# slices"), (["dummy_trs"], "# TRs"), (["gcor"], None), (["tsnr"], None), (["aor"], None), (["aqi"], None), ( [ "summary_bg_mean", "summary_bg_stdv", "summary_bg_k", "summary_bg_p05", "summary_bg_p95", ], None, ), ( [ "summary_fg_mean", "summary_fg_stdv", "summary_fg_k", "summary_fg_p05", "summary_fg_p95", ], None, ), ], } if csv_file.suffix == ".csv": def_comps = list(BIDS_COMP.keys()) dataframe = pd.read_csv(csv_file, index_col=False, dtype={comp: object for comp in def_comps}) id_labels = list( set(def_comps) & set(dataframe.columns.ravel().tolist())) dataframe["label"] = dataframe[id_labels].apply(_format_labels, args=(id_labels, ), axis=1) else: dataframe = pd.read_csv(csv_file, index_col=False, sep="\t", dtype={"bids_name": object}) dataframe = dataframe.rename(index=str, columns={"bids_name": "label"}) nPart = len(dataframe) failed = None if csv_failed is not None and op.isfile(csv_failed): config.loggers.cli.warning( f'Found failed-workflows table "{csv_failed}"') failed_df = pd.read_csv(csv_failed, index_col=False) cols = list(set(id_labels) & set(failed_df.columns.ravel().tolist())) try: failed_df = failed_df.sort_values(by=cols) except AttributeError: failed_df = failed_df.sort(columns=cols) # myfmt not defined # failed = failed_df[cols].apply(myfmt, args=(cols,), axis=1).ravel().tolist() csv_groups = [] datacols = dataframe.columns.ravel().tolist() for group, units in QCGROUPS[mod]: dfdict = {"iqm": [], "value": [], "label": [], "units": []} for iqm in group: if iqm in datacols: values = dataframe[[iqm]].values.ravel().tolist() if values: dfdict["iqm"] += [iqm] * nPart dfdict["units"] += [units] * nPart dfdict["value"] += values dfdict["label"] += dataframe[["label" ]].values.ravel().tolist() # Save only if there are values if dfdict["value"]: csv_df = pd.DataFrame(dfdict) csv_str = TextIO() csv_df[["iqm", "value", "label", "units"]].to_csv(csv_str, index=False) csv_groups.append(csv_str.getvalue()) if out_file is None: out_file = op.abspath("group.html") tpl = GroupTemplate() tpl.generate_conf( { "modality": mod, "timestamp": datetime.datetime.now().strftime("%Y-%m-%d, %H:%M"), "version": ver, "csv_groups": csv_groups, "failed": failed, "boxplots_js": open( pkgrf( "mriqc", op.join("data", "reports", "embed_resources", "boxplots.js"), )).read(), "d3_js": open( pkgrf( "mriqc", op.join("data", "reports", "embed_resources", "d3.min.js"))).read(), "boxplots_css": open( pkgrf( "mriqc", op.join("data", "reports", "embed_resources", "boxplots.css"), )).read(), }, out_file, ) return out_file