/usr/lib/python2.7/dist-packages/chaco/scales/time_scale_test_case.py is in python-chaco 4.5.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 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | from itertools import starmap
from datetime import datetime as DT
from scales import ScaleSystem
from time_scale import dt_to_sec, trange, TimeScale, HMSScales
from formatters import TimeFormatter
from scales_test_case import TicksTestCase
def DTS(*args, **kw):
""" Returns a unix-timestamp-like time """
return dt_to_sec(DT(*args, **kw))
def sec_from_hms(start, *times):
""" Returns a list of times based on adding each offset tuple in times
to the start time (which should be in seconds). Offset tuples can be
in any of the forms: (hours), (hours,minutes), or (hours,minutes,seconds).
"""
ret = []
for t in times:
cur = 0
if len(t) > 0:
cur += t[0] * 3600
if len(t) > 1:
cur += t[1] * 60
if len(t) > 2:
cur += t[2]
ret.append(start+cur)
return ret
class TRangeTestCase(TicksTestCase):
def test_null_ranges(self):
ranges = (
((2005,3,15,10,23,15), (2005,3,15,10,23,45), {"minutes":1}),
((2005,3,15,10,23), (2005,3,15,10,47), {"hours":1}),
((2005,3,15,5,23), (2005,3,15,18,43), {"days":1}),
((2005,3,15,10,30), (2005,12,25,18,30), {"years":1})
)
for start, end, kw in ranges:
self.assert_empty(trange(DTS(*start), DTS(*end), **kw))
return
def test_microseconds(self):
# Testing the microsecond scale is dicey--`base` is a 10 digit integer,
# so an increment of, say, 3 microseconds is only about a factor of 10
# more than machine precision.
base = DTS(2005, 3, 15, 10, 45, 10)
print "base: ", base
start = base + 0.0000027
end = base + 0.0000177
ticks = trange(start, end, microseconds=5)
desired = [base+i for i in (5e-6, 10e-6, 15e-6)]
print "ticks: ", ticks
print "desired: ", desired
self.check_ticks(ticks, desired)
def test_milliseconds(self):
base = DTS(2005, 3, 15, 10, 45, 10)
start = base + 0.0028
end = base + 0.0075
ticks = trange(start, end, milliseconds=1)
desired = [base + i for i in (0.003, 0.004, 0.005, 0.006, 0.007)]
self.check_ticks(ticks, desired)
ticks = trange(start, end, milliseconds=2)
self.check_ticks(ticks, (base+0.004, base+0.006))
def test_daily(self):
base = DTS(2005, 1, 1)
secs_per_day = 24*3600
ticks = trange(base, base + secs_per_day*5, days=1)
desired = [base+i*secs_per_day for i in range(6)]
print "ticks: ", ticks
print "desired: ", desired
self.check_ticks(ticks, desired)
def test_daily_leap(self):
start = DTS(2004, 2, 27)
end = DTS(2004, 3, 2)
ticks = trange(start, end, days=1)
desired = [start + i*24*3600 for i in range(5)]
self.check_ticks(ticks, desired)
def test_hourly(self):
# test between Feb 29,2004 10:15pm and Mar 1st 3:15am
ticks = trange(DTS(2004,2,29,22,15), DTS(2004,3,1,3,15), hours=1)
start = DTS(2004,2,29,23)
desired = [start + i*3600 for i in range(5)]
self.check_ticks(ticks, desired)
def test_multiday_increment(self):
start = DTS(2005, 1, 1)
ticks = trange(start, start + 9*24*3600, days=3)
desired = [start+i*3*24*3600 for i in range(4)]
print "ticks: ", ticks, " desired: ", desired
self.check_ticks(ticks, desired)
class TimeScaleTestCase(TicksTestCase):
""" This exercises a single TimeScale set at various resolutions """
def test_hourly(self):
ts = TimeScale(hours=1)
start = DTS(2005, 3, 15, 10, 30)
end = DTS(2005, 3, 15, 16, 59)
desired_start = DTS(2005, 3, 15)
desired = [desired_start + i*3600 for i in (11, 12, 13, 14, 15, 16)]
self.check_ticks(ts.ticks(start, end), desired)
def test_minutes(self):
ts = TimeScale(minutes=15)
start = DTS(2005, 3, 15, 10, 20)
end = DTS(2005, 3, 15, 11, 55)
dstart = DTS(2005, 3, 15)
desired = ((10,30), (10,45), (11,00), (11,15), (11,30), (11,45))
self.check_ticks(ts.ticks(start, end),
sec_from_hms(dstart, *desired))
def test_day_of_month(self):
ts = TimeScale(day_of_month=(1,8,15,22))
start = DTS(2005,3,12)
end = DTS(2005,5,3)
desired = list(starmap(DTS, ((2005,3,15), (2005,3,22), (2005,4,1), (2005,4,8),
(2005,4,15), (2005,4,22), (2005,5,1))))
self.check_ticks(ts.ticks(start,end), desired)
# test adjacent months
start = DTS(2005, 3, 12)
end = DTS(2005, 4, 10)
desired = list(starmap(DTS, ((2005,3,15), (2005,3,22), (2005,4,1), (2005,4,8))))
self.check_ticks(ts.ticks(start,end), desired)
def test_month_of_year(self):
ts = TimeScale(month_of_year=(1,4,8))
start = DTS(2005,1,1)
end = DTS(2006,5,1)
desired = list(starmap(DTS, ((2005,1,1), (2005,4,1), (2005,8,1), (2006,1,1), (2006,4,1))))
self.check_ticks(ts.ticks(start,end), desired)
def test_microsecond(self):
# This test is dicey, because the values being tested are close to
# machine precision. See the comment in TRangeTestCase.test_microseconds().
ts = TimeScale(microseconds=1)
base = DTS(1975, 3, 15, 10, 45, 10)
start = base + 2.8e-6
end = base + 9.2e-6
ticks = ts.ticks(start, end)
desired = [base+i for i in (3e-6, 4e-6, 5e-6, 6e-6, 7e-6, 8e-6, 9e-6)]
print "ticks: ", ticks
print "desired: ", desired
self.check_ticks(ticks, desired)
class CalendarScaleSystemTestCase(TicksTestCase):
""" This exercises the ability of multiple TimeScale objects to play well
within a single ScaleSystem.
"""
def test_hourly_scales(self):
scales = [TimeScale(seconds=dt) for dt in (1, 5, 15, 30)] + \
[TimeScale(minutes=dt) for dt in (1, 5, 15, 30)] + \
[TimeScale(hours=dt) for dt in (1, 2, 3, 4, 6, 12)]
def test_yearly_scales(self):
ticker = ScaleSystem(TimeScale(month_of_year=1), default_scale=None)
ticks = ticker.ticks(DTS(2000,1,1), DTS(2007,1,1), 10)
desired = list(starmap(DTS, ((2000,1,1), (2001,1,1), (2002,1,1), (2003,1,1),
(2004,1,1), (2005,1,1), (2006,1,1), (2007,1,1))))
self.check_ticks(ticks, desired)
class TimeFormatterTestCase(TicksTestCase):
def test_widths(self):
fmt = TimeFormatter()
scale = TimeScale(minutes = 5)
test_intervals = ([(2005,3,15,10,30), (2005,3,15,10,50), 50],
)
print
for start, end, width in test_intervals:
est_width = scale.label_width(DTS(*start), DTS(*end), char_width=width)
print start, end,
print " avail:", width, "est:", est_width[1], "numlabels:", est_width[0]
return
def test_labels(self):
fmt = TimeFormatter()
scale = ScaleSystem(*HMSScales)
test_intervals = ([(2005,3,15,10,30), (2005,3,15,10,50), 150],
)
print
for start, end, width in test_intervals:
labels = scale.labels(DTS(*start), DTS(*end), char_width=width)
print start, end, " avail:", width,
print " used:", sum([len(x[1]) for x in labels]),
print labels
return
if __name__ == "__main__":
import nose
nose.run()
|