This file is indexed.

/usr/lib/python3/dist-packages/pygal/test/test_box.py is in python3-pygal 2.4.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# -*- coding: utf-8 -*-
# This file is part of pygal
#
# A python svg graph plotting library
# Copyright © 2012-2016 Kozea
#
# This library is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with pygal. If not, see <http://www.gnu.org/licenses/>.

"""Box chart related tests"""

from pygal.graph.box import Box


def test_quartiles():
    """Test box points for the 1.5IQR computation method"""
    a = [-2.0, 3.0, 4.0, 5.0, 8.0]  # odd test data
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        a, mode='1.5IQR')

    assert q1 == 7.0 / 4.0
    assert q2 == 4.0
    assert q3 == 23 / 4.0
    assert q0 == 7.0 / 4.0 - 6.0  # q1 - 1.5 * iqr
    assert q4 == 23 / 4.0 + 6.0  # q3 + 1.5 * iqr

    b = [1.0, 4.0, 6.0, 8.0]  # even test data
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        b, mode='1.5IQR')

    assert q2 == 5.0

    c = [2.0, None, 4.0, 6.0, None]  # odd with None elements
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        c, mode='1.5IQR')

    assert q2 == 4.0

    d = [4]
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        d, mode='1.5IQR')

    assert q0 == 4
    assert q1 == 4
    assert q2 == 4
    assert q3 == 4
    assert q4 == 4


def test_quartiles_min_extremes():
    """Test box points for the extremes computation method"""
    a = [-2.0, 3.0, 4.0, 5.0, 8.0]  # odd test data
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        a, mode='extremes')

    assert q1 == 7.0 / 4.0
    assert q2 == 4.0
    assert q3 == 23 / 4.0
    assert q0 == -2.0  # min
    assert q4 == 8.0  # max

    b = [1.0, 4.0, 6.0, 8.0]  # even test data
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        b, mode='extremes')

    assert q2 == 5.0

    c = [2.0, None, 4.0, 6.0, None]  # odd with None elements
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        c, mode='extremes')

    assert q2 == 4.0

    d = [4]
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        d, mode='extremes')

    assert q0 == 4
    assert q1 == 4
    assert q2 == 4
    assert q3 == 4
    assert q4 == 4


def test_quartiles_tukey():
    """Test box points for the tukey computation method"""
    a = []  # empty data
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        a, mode='tukey')
    assert min_s == q0 == q1 == q2 == q3 == q4 == 0
    assert outliers == []

    # https://en.wikipedia.org/wiki/Quartile example 1
    b = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        b, mode='tukey')
    assert min_s == q0 == 6
    assert q1 == 20.25
    assert q2 == 40
    assert q3 == 42.75
    assert max_s == q4 == 49
    assert outliers == []

    # previous test with added outlier 75
    c = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49, 75]
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        c, mode='tukey')
    assert min_s == q0 == 6
    assert q1 == 25.5
    assert q2 == (40 + 41) / 2.0
    assert q3 == 45
    assert max_s == 75
    assert outliers == [75]

    # one more outlier, 77
    c = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49, 75, 77]
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        c, mode='tukey')
    assert min_s == q0 == 6
    assert q1 == 30.75
    assert q2 == 41
    assert q3 == 47.5
    assert max_s == 77
    assert 75 in outliers
    assert 77 in outliers


def test_quartiles_stdev():
    """Test box points for the stdev computation method"""
    a = [35, 42, 35, 41, 36, 6, 12, 51, 33, 27, 46, 36, 44, 53, 75, 46, 16,
         51, 45, 29, 25, 26, 54, 61, 27, 40, 23, 34, 51, 37]
    SD = 14.67
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        a, mode='stdev')
    assert min_s == min(a)
    assert max_s == max(a)
    assert q2 == 36.5
    assert q4 <= q2 + SD
    assert q0 >= q2 - SD
    assert all(n in outliers for n in [6, 12, 16, 53, 54, 61, 75])

    b = [5]  # test for posible zero division
    (min_s, q0, q1, q2, q3, q4, max_s), outliers = Box._box_points(
        b, mode='stdev')
    assert min_s == q0 == q1 == q2 == q3 == q4 == max_s == b[0]
    assert outliers == []


def test_simple_box():
    """Simple box test"""
    box = Box()
    box.add('test1', [-1, 2, 3, 3.1, 3.2, 4, 5])
    box.add('test2', [2, 3, 5, 6, 6, 4])
    box.title = 'Box test'
    q = box.render_pyquery()

    assert len(q(".axis.y")) == 1
    assert len(q(".legend")) == 2
    assert len(q(".plot .series rect")) == 2