Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a401287

Browse files
committed
Make axisartist.angle_helper pseudo-tests real.
These do no good sitting here and not running, especially because there are no expected results, so it's up to whoever runs it to check. I'm not even completely sure the results are right, but they seem acceptable.
1 parent 2316a07 commit a401287

File tree

2 files changed

+117
-47
lines changed

2 files changed

+117
-47
lines changed

lib/mpl_toolkits/axisartist/angle_helper.py

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -421,50 +421,3 @@ def _adjust_extremes(self, lon_min, lon_max, lat_min, lat_max):
421421
lat_max = min(max0, lat_max)
422422

423423
return lon_min, lon_max, lat_min, lat_max
424-
425-
426-
427-
428-
429-
if __name__ == "__main__":
430-
#test2()
431-
#print select_step360(21.2, 33.3, 5)
432-
#print select_step360(20+21.2/60., 21+33.3/60., 5)
433-
#print select_step360(20.5+21.2/3600., 20.5+33.3/3600., 5)
434-
435-
# test threshold factor
436-
print(select_step360(20.5+11.2/3600., 20.5+53.3/3600., 5,
437-
threshold_factor=60))
438-
439-
print(select_step360(20.5+11.2/3600., 20.5+53.3/3600., 5,
440-
threshold_factor=1))
441-
442-
fmt = FormatterDMS()
443-
#print fmt("left", 60, [0, -30, -60])
444-
print(fmt("left", 600, [12301, 12302, 12303]))
445-
446-
print(select_step360(20.5+21.2/3600., 20.5+21.4/3600., 5))
447-
print(fmt("left", 36000, [738210, 738215, 738220]))
448-
print(fmt("left", 360000, [7382120, 7382125, 7382130]))
449-
print(fmt("left", 1., [45, 46, 47]))
450-
print(fmt("left", 10., [452, 453, 454]))
451-
452-
if 0:
453-
print(select_step360(20+21.2/60., 21+33.3/60., 5))
454-
print(select_step360(20.5+21.2/3600., 20.5+33.3/3600., 5))
455-
print(select_step360(20+21.2/60., 20+53.3/60., 5))
456-
457-
###
458-
levs, n, factor = select_step360(20.5+21.2/3600., 20.5+27.25/3600., 5)
459-
levs = levs * 0.1
460-
fmt = FormatterDMS()
461-
#print fmt("left", 60, [0, -30, -60])
462-
print(fmt("left", factor, levs))
463-
464-
465-
print(select_step(-180, 180, 10, hour=False))
466-
print(select_step(-12, 12, 10, hour=True))
467-
468-
fmt = FormatterDMS()
469-
#print fmt("left", 60, [0, -30, -60])
470-
print(fmt("left", 3600, [0, -30, -60]))
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
from __future__ import (absolute_import, division, print_function,
2+
unicode_literals)
3+
4+
import re
5+
6+
import numpy as np
7+
import pytest
8+
9+
from mpl_toolkits.axisartist.angle_helper import (
10+
FormatterDMS, select_step, select_step360)
11+
12+
13+
DMS_RE = re.compile(
14+
r'''\$ # Mathtext
15+
(
16+
# The sign sometimes appears on a 0 when a fraction is shown.
17+
# Check later that there's only one.
18+
(?P<degree_sign>-)?
19+
(?P<degree>[0-9.]+) # Degrees value
20+
\^{\\circ} # Degree symbol
21+
)?
22+
(
23+
(?(degree)\\,) # Separator if degrees are also visible.
24+
(?P<minute_sign>-)?
25+
(?P<minute>[0-9.]+) # Minutes value
26+
\^{\\prime} # Minute symbol
27+
)?
28+
(
29+
(?(minute)\\,) # Separator if minutes are also visible.
30+
(?P<second_sign>-)?
31+
(?P<second>[0-9.]+) # Seconds value
32+
\^{\\prime\\prime} # Second symbol
33+
)?
34+
\$ # Mathtext
35+
''',
36+
re.VERBOSE
37+
)
38+
39+
40+
def dms2float(degrees, minutes=0, seconds=0):
41+
return degrees + minutes / 60.0 + seconds / 3600.0
42+
43+
44+
@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [
45+
((-180, 180, 10), {'hour': False}, np.arange(-180, 181, 30), 1.0),
46+
((-12, 12, 10), {'hour': True}, np.arange(-12, 13, 2), 1.0)
47+
])
48+
def test_select_step(args, kwargs, expected_levels, expected_factor):
49+
levels, n, factor = select_step(*args, **kwargs)
50+
51+
assert n == len(levels)
52+
np.testing.assert_array_equal(levels, expected_levels)
53+
assert factor == expected_factor
54+
55+
56+
@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [
57+
((dms2float(20, 21.2), dms2float(21, 33.3), 5), {},
58+
np.arange(1215, 1306, 15), 60.0),
59+
((dms2float(20.5, seconds=21.2), dms2float(20.5, seconds=33.3), 5), {},
60+
np.arange(73820, 73835, 2), 3600.0),
61+
((dms2float(20, 21.2), dms2float(20, 53.3), 5), {},
62+
np.arange(1220, 1256, 5), 60.0),
63+
((21.2, 33.3, 5), {},
64+
np.arange(20, 35, 2), 1.0),
65+
((dms2float(20, 21.2), dms2float(21, 33.3), 5), {},
66+
np.arange(1215, 1306, 15), 60.0),
67+
((dms2float(20.5, seconds=21.2), dms2float(20.5, seconds=33.3), 5), {},
68+
np.arange(73820, 73835, 2), 3600.0),
69+
((dms2float(20.5, seconds=21.2), dms2float(20.5, seconds=21.4), 5), {},
70+
np.arange(7382120, 7382141, 5), 360000.0),
71+
# test threshold factor
72+
((dms2float(20.5, seconds=11.2), dms2float(20.5, seconds=53.3), 5),
73+
{'threshold_factor': 60}, np.arange(12301, 12310), 600.0),
74+
((dms2float(20.5, seconds=11.2), dms2float(20.5, seconds=53.3), 5),
75+
{'threshold_factor': 1}, np.arange(20502, 20517, 2), 1000.0),
76+
])
77+
def test_select_step360(args, kwargs, expected_levels, expected_factor):
78+
levels, n, factor = select_step360(*args, **kwargs)
79+
80+
assert n == len(levels)
81+
np.testing.assert_array_equal(levels, expected_levels)
82+
assert factor == expected_factor
83+
84+
85+
@pytest.mark.parametrize('direction, factor, values', [
86+
("left", 60, [0, -30, -60]),
87+
("left", 600, [12301, 12302, 12303]),
88+
("left", 3600, [0, -30, -60]),
89+
("left", 36000, [738210, 738215, 738220]),
90+
("left", 360000, [7382120, 7382125, 7382130]),
91+
("left", 1., [45, 46, 47]),
92+
("left", 10., [452, 453, 454]),
93+
])
94+
def test_formatters(direction, factor, values):
95+
fmt = FormatterDMS()
96+
result = fmt(direction, factor, values)
97+
98+
prev_degree = prev_minute = prev_second = None
99+
for tick, value in zip(result, values):
100+
m = DMS_RE.match(tick)
101+
assert m is not None, '"%s" is not an expected tick format.' % (tick, )
102+
103+
sign = sum(m.group(sign + '_sign') is not None
104+
for sign in ('degree', 'minute', 'second'))
105+
assert sign <= 1, \
106+
'Only one element of tick "%s" may have a sign.' % (tick, )
107+
sign = 1 if sign == 0 else -1
108+
109+
degree = float(m.group('degree') or prev_degree or 0)
110+
minute = float(m.group('minute') or prev_minute or 0)
111+
second = float(m.group('second') or prev_second or 0)
112+
assert sign * dms2float(degree, minute, second) == value / factor, \
113+
'"%s" does not match expected tick value.' % (tick, )
114+
115+
prev_degree = degree
116+
prev_minute = minute
117+
prev_second = second

0 commit comments

Comments
 (0)