示例#1
0
def _wtext(f, header, frm, printargs, perpage, nrows):
    if perpage < 1:
        # one additional in case nrows is zero
        perpage = nrows + 1
    pages = (nrows + perpage - 1) // perpage
    for p in range(pages):
        if p > 0:
            f.write(chr(12))
        f.write(header)
        b = p * perpage
        e = b + perpage
        writer.vecwrite(f, frm, *printargs, so=slice(b, e))
示例#2
0
def _wttab(f, header, hu, frm, res, loop_vars, rows, count_filter, desclen,
           descfrm, caselen):
    f.write(header)
    ec = {}  # event counter
    for lbl, vals, case_pv, ext, extcases in loop_vars:
        f.write(f"{lbl} Responses\n\n")
        hu_ = hu.replace("Maximum", lbl)
        f.write(hu_)
        ec[lbl] = _event_count(vals, case_pv, count_filter)
        extcases = _add_zero_case(vals, extcases)
        writer.vecwrite(f, frm, rows, res.drminfo.labels, vals, ext, extcases)
        f.write("\n\n")
    _add_max_plus_min(ec)
    _wttab_eventcount(f, res, ec, count_filter, desclen, descfrm, caselen)
示例#3
0
def test_vecwrite_2file():
    r = np.array([1.2, 45.8])
    s = "test string"
    i = [5]
    v = ["short string", "a bit longer string"]
    frm = "{:3}, {:5.1f}, {:<25}, {}" + chr(10)
    writer.vecwrite("temp.writer", frm, i, r, v, s)
    try:
        with open("temp.writer") as f:
            txt = f.read()
    finally:
        os.remove("temp.writer")
    sbe = ("  5,   1.2, short string             , test string\n"
           "  5,  45.8, a bit longer string      , test string\n")
    assert txt == sbe
示例#4
0
def _wttab_eventcount(f, res, ec, count_filter, desclen, descfrm, caselen):
    # extrema count
    n = len(res.cases)
    f.write(f"Extrema Count\nFilter: {count_filter}\n\n")
    widths = [desclen, *([caselen] * n)]
    headers = ["Description", *res.cases]
    for j, frm, lbl in zip(
        (0, 1), (f"{{:{caselen}d}}", f"{{:{caselen}.1f}}"), ("Count", "Percent")
    ):
        formats = [descfrm, *([frm] * n)]
        hu_, frm_ = writer.formheader(
            headers, widths, formats, sep=[7, 1], just="c", ulchar="="
        )
        f.write(hu_)
        rowlabels, table = _rowlbls_table(lbl, ec, j)
        writer.vecwrite(f, frm_, rowlabels, table)
        if j == 0:
            f.write("\n")
示例#5
0
 def _wtcmp(f, header, hu, frm, printargs, perpage, prtpv, pctinfo, desc):
     prtpv = prtpv.nonzero()[0]
     if perpage < 1:
         # one additional in case size is zero
         perpage = prtpv.size + 1
     pages = (prtpv.size + perpage - 1) // perpage
     if prtpv.size < len(printargs[0]):
         for i, item in enumerate(printargs):
             printargs[i] = [item[j] for j in prtpv]
     tabhead = header + hu
     pager = "\n"  # + chr(12)
     for p in range(pages):
         if p > 0:
             f.write(pager)
         f.write(tabhead)
         b = p * perpage
         e = b + perpage
         writer.vecwrite(f, frm, *printargs, so=slice(b, e))
     f.write(pager)
     for lbl, hdr in zip(("mx", "mn", "amx"), (maxhdr, minhdr, absmhdr)):
         if lbl in pctinfo:
             f.write(_get_histogram_str(desc, hdr, pctinfo[lbl]))
示例#6
0
def _get_histogram_str(desc, hdr, pctinfo):
    pctcount = pctinfo["hsto"]
    s = [
        (f"\n\n    {desc} - {hdr} Comparison Histogram\n\n"),
        ("      % Diff      Count    Percent\n     --------   --------   -------\n"
         ),
    ]
    with StringIO() as f:
        writer.vecwrite(f, "     {:8.2f}   {:8.0f}   {:7.2f}\n", pctcount)
        s.append(f.getvalue())
        s.append("\n")

    # total_percent_10 will either be 0 or 1000:
    #  - 0 if all % diffs are "n/a"
    #  - 1000 otherwise
    total_percent_10 = np.round(pctcount[:, 2].sum() * 10)
    last = -1.0
    for pdiff in [1, 2, 5, 10, 15, 20, 25, 50, 100, 500]:
        pvdiff = abs(pctcount[:, 0]) <= pdiff
        num = pctcount[pvdiff, 2].sum()
        if num > last:
            s.append(f"    {num:.1f}% of values are within {pdiff}%\n")
        if np.round(num * 10) == total_percent_10:
            break
        last = num

    pct = pctinfo["pct"]
    n = len(pct)
    if n == 0:
        s.append("\n    % Diff Statistics: [Min, Max, Mean, StdDev]"
                 " = [n/a, n/a, n/a, n/a]\n")
    else:
        stddev = 0.0 if n <= 1 else pct.std(ddof=1)
        s.append(
            "\n    % Diff Statistics: [Min, Max, Mean, StdDev]"
            f" = [{pct.min():.2f}, {pct.max():.2f}, {pct.mean():.4f}, {stddev:.4f}]\n"
        )
    return "".join(s)
示例#7
0
def test_vecwrite_slice():
    r = np.array([1.2, 45.8, 2.4, 12.3, 6.5])
    m = np.arange(10).reshape(5, -1)  # [[0, 1], [2, 3] ...
    s = "test"
    i = [5]
    v = ["short string", "a bit longer string", "3rd", "fourth", "number 5"]
    frm = "{:3}, {:5.1f}, {:<25}, {:1d}-{:1d}, {}" + chr(10)
    with StringIO() as f:
        writer.vecwrite(f, frm, i, r, v, m, s)
        txt = f.getvalue()
    sbe = ("  5,   1.2, short string             , 0-1, test\n"
           "  5,  45.8, a bit longer string      , 2-3, test\n"
           "  5,   2.4, 3rd                      , 4-5, test\n"
           "  5,  12.3, fourth                   , 6-7, test\n"
           "  5,   6.5, number 5                 , 8-9, test\n")
    assert txt == sbe

    with StringIO() as f:
        writer.vecwrite(f, frm, i, r, v, m, s, so=slice(1, 5, 2))
        txt = f.getvalue()
    sbe = (  #'  5,   1.2, short string             , 0-1, test\n'
        "  5,  45.8, a bit longer string      , 2-3, test\n"
        #'  5,   2.4, 3rd                      , 4-5, test\n'
        "  5,  12.3, fourth                   , 6-7, test\n"
        #'  5,   6.5, number 5                 , 8-9, test\n'
    )
    assert txt == sbe

    with StringIO() as f:
        writer.vecwrite(f, frm, i, r, v, m, s, so=slice(1, None, 2))
        txt = f.getvalue()
    sbe = (  #'  5,   1.2, short string             , 0-1, test\n'
        "  5,  45.8, a bit longer string      , 2-3, test\n"
        #'  5,   2.4, 3rd                      , 4-5, test\n'
        "  5,  12.3, fourth                   , 6-7, test\n"
        #'  5,   6.5, number 5                 , 8-9, test\n'
    )
    assert txt == sbe

    with StringIO() as f:
        writer.vecwrite(f, frm, i, r, v, m, s, so=slice(3))
        txt = f.getvalue()
    sbe = (
        "  5,   1.2, short string             , 0-1, test\n"
        "  5,  45.8, a bit longer string      , 2-3, test\n"
        "  5,   2.4, 3rd                      , 4-5, test\n"
        #'  5,  12.3, fourth                   , 6-7, test\n'
        #'  5,   6.5, number 5                 , 8-9, test\n'
    )
    assert txt == sbe

    with StringIO() as f:
        writer.vecwrite(f, frm, i, r, v, m, s, so=slice(3, None))
        txt = f.getvalue()
    sbe = (  #'  5,   1.2, short string             , 0-1, test\n'
        #'  5,  45.8, a bit longer string      , 2-3, test\n'
        #'  5,   2.4, 3rd                      , 4-5, test\n'
        "  5,  12.3, fourth                   , 6-7, test\n"
        "  5,   6.5, number 5                 , 8-9, test\n")
    assert txt == sbe

    v = list("too long to be compatible")
    with StringIO() as f:
        assert_raises(ValueError,
                      writer.vecwrite,
                      f,
                      frm,
                      i,
                      r,
                      v,
                      m,
                      s,
                      so=slice(1, None, 2))

    with StringIO() as f:
        writer.vecwrite(f, frm, i, r, v, m, s, so=slice(5))
        txt = f.getvalue()
    sbe = ("  5,   1.2, t                        , 0-1, test\n"
           "  5,  45.8, o                        , 2-3, test\n"
           "  5,   2.4, o                        , 4-5, test\n"
           "  5,  12.3,                          , 6-7, test\n"
           "  5,   6.5, l                        , 8-9, test\n")
    assert txt == sbe
示例#8
0
def test_formheader():
    descs = ["Item 1", "A different item"]
    mx = np.array([[1.2, 2.3], [3.4, 4.5]]) * 1000
    time = np.array([[1.234], [2.345]])
    formats = ["{:<25s}", "{:10.2f}", "{:8.3f}"]
    widths = [25, 10, 8]
    assert_raises(ValueError,
                  writer.formheader,
                  44,
                  widths,
                  formats,
                  sep=[4, 5, 2],
                  just=0)
    headers = [["The"] * 3, ["Descriptions", "Maximum", "Time", "BAD"]]
    assert_raises(ValueError,
                  writer.formheader,
                  headers,
                  widths,
                  formats,
                  sep=[4, 5, 2],
                  just=0)
    headers = [["The"] * 3, ["Descriptions", "Maximum", "Time"]]
    assert_raises(ValueError,
                  writer.formheader,
                  headers, [25, 10],
                  formats,
                  sep=[4, 5, 2],
                  just=0)
    hu, f = writer.formheader(headers, widths, formats, sep=[4, 5, 2], just=0)
    with StringIO() as fout:
        fout.write(hu)
        writer.vecwrite(fout, f, descs, mx, time)
        s = fout.getvalue()
    sbe = ("               The                   The        The\n"
           "           Descriptions            Maximum      Time\n"
           "    -------------------------     ----------  --------\n"
           "    Item 1                           1200.00  2300.000\n"
           "    A different item                 3400.00  4500.000\n")
    assert sbe == s

    headers = ["Descriptions", "Maximum", "Time"]
    hu, f = writer.formheader(headers, widths, formats, sep=[4, 5, 2], just=0)
    with StringIO() as fout:
        fout.write(hu)
        writer.vecwrite(fout, f, descs, mx, time)
        s = fout.getvalue()
    sbe = ("           Descriptions            Maximum      Time\n"
           "    -------------------------     ----------  --------\n"
           "    Item 1                           1200.00  2300.000\n"
           "    A different item                 3400.00  4500.000\n")
    assert sbe == s

    headers = ["Descriptions", "Maximum", "Time"]
    hu, f = writer.formheader(headers,
                              widths,
                              formats,
                              sep=2,
                              just=("l", "c", "r"))
    with StringIO() as fout:
        fout.write(hu)
        writer.vecwrite(fout, f, descs, mx, time)
        s = fout.getvalue()
    sbe = ("  Descriptions                Maximum        Time\n"
           "  -------------------------  ----------  --------\n"
           "  Item 1                        1200.00  2300.000\n"
           "  A different item              3400.00  4500.000\n")
    assert sbe == s