File: test_statsutils_histogram.py

package info (click to toggle)
python-boltons 25.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,236 kB
  • sloc: python: 12,133; makefile: 159; sh: 7
file content (103 lines) | stat: -rw-r--r-- 3,782 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from boltons.statsutils import Stats


# [round(random.normalvariate(10, 3), 3) for i in range(100)]
NORM_DATA = [12.975, 8.341, 12.27, 12.799, 15.443, 6.739, 10.572,
             14.863, 3.723, 9.825, 7.716, 12.218, 11.641, 9.02,
             13.037, 11.175, 13.156, 11.706, 8.184, 13.306, 9.845,
             11.665, 14.298, 12.021, 8.419, 10.209, 10.698, 6.559,
             10.346, 9.895, 11.742, 13.391, 10.587, 6.639, 10.23,
             8.841, 10.511, 6.033, 5.767, 8.482, 9.517, 9.039, 11.111,
             13.845, 4.331, 5.323, 14.486, 14.875, 10.005, 6.367,
             12.18, 11.69, 13.97, 4.14, 7.979, 11.114, 4.126, 10.028,
             9.295, 10.078, 14.615, 7.055, 7.641, 9.037, 9.933,
             10.077, 14.174, 14.645, 10.398, 10.238, 9.067, 4.841,
             13.159, 15.829, 8.464, 7.47, 11.858, 9.885, 11.978,
             5.418, 12.19, 8.206, 10.755, 6.455, 10.019, 11.594,
             9.082, 10.245, 12.321, 8.508, 9.711, 5.5, 15.001, 9.922,
             7.864, 7.794, 10.546, 9.203, 8.798, 9.853]


SIMPLE_RANGE_DATA = range(110)

LAYER_RANGE_DATA = (list(range(100))
                    + list(range(20, 80))
                    + list(range(40, 60)))

EMPTY_DATA = []

ALL_DATASETS = [EMPTY_DATA, LAYER_RANGE_DATA, SIMPLE_RANGE_DATA, NORM_DATA]


def test_check_sum():
    for data in ALL_DATASETS:
        for bin_size in [0, 1, 10, 99]:
            # bin_size=0 tests freedman
            stats = Stats(data)
            hist_counts = stats.get_histogram_counts()
            hist_counts_sum = sum([c for _, c in hist_counts])
            assert len(data) == hist_counts_sum
            if not data:
                continue

            assert min(data) >= hist_counts[0][0]
            assert max(data) >= hist_counts[-1][0]
    return


def test_norm_regression():
    stats = Stats(NORM_DATA)

    assert stats.format_histogram(width=80) == NORM_DATA_FREEDMAN_OUTPUT
    assert stats.format_histogram(10, width=80) == NORM_DATA_TEN_BIN_OUTPUT

    subpar_bin_out = stats.format_histogram([12.0], width=80)
    assert subpar_bin_out == NORM_DATA_SINGLE_SUBPAR_BIN_OUTPUT

    format_bin_out = stats.format_histogram(5,
                                            width=80,
                                            format_bin=lambda b: '%sms' % b)
    assert format_bin_out == NORM_DATA_FORMAT_BIN_OUTPUT


NORM_DATA_FREEDMAN_OUTPUT = """\
 3.7:  5 ################
 5.2: 10 ################################
 6.8:  9 #############################
 8.3: 21 ###################################################################
 9.9: 22 ######################################################################
11.4: 16 ###################################################
13.0: 10 ################################
14.5:  7 ######################"""

NORM_DATA_TEN_BIN_OUTPUT = """\
 3.7:  5 ##############
 4.9:  5 ##############
 6.1:  6 #################
 7.3: 12 ##################################
 8.5: 11 ###############################
 9.7: 25 ######################################################################
10.9: 12 ##################################
12.1: 12 ##################################
13.4:  5 ##############
14.6:  7 ####################"""

# make sure the minimum gets added
NORM_DATA_SINGLE_SUBPAR_BIN_OUTPUT = """\
 3.7: 75 ######################################################################
12.0: 25 #######################"""

NORM_DATA_FORMAT_BIN_OUTPUT = """\
 3.7ms: 10 ###################
 6.1ms: 18 ##################################
 8.5ms: 36 ####################################################################
10.9ms: 24 #############################################
13.4ms: 12 #######################"""


def main():
    print(Stats(NORM_DATA).format_histogram(10))


if __name__ == '__main__':
    main()