示例#1
0
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
示例#2
0
 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()),
     )
示例#3
0
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
示例#4
0
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)
示例#5
0
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