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

Skip to content

Commit 7a64b79

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 e50c059 commit 7a64b79

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
@@ -416,50 +416,3 @@ def _adjust_extremes(self, lon_min, lon_max, lat_min, lat_max):
416416
lat_max = min(max0, lat_max)
417417

418418
return lon_min, lon_max, lat_min, lat_max
419-
420-
421-
422-
423-
424-
if __name__ == "__main__":
425-
#test2()
426-
#print select_step360(21.2, 33.3, 5)
427-
#print select_step360(20+21.2/60., 21+33.3/60., 5)
428-
#print select_step360(20.5+21.2/3600., 20.5+33.3/3600., 5)
429-
430-
# test threshold factor
431-
print(select_step360(20.5+11.2/3600., 20.5+53.3/3600., 5,
432-
threshold_factor=60))
433-
434-
print(select_step360(20.5+11.2/3600., 20.5+53.3/3600., 5,
435-
threshold_factor=1))
436-
437-
fmt = FormatterDMS()
438-
#print fmt("left", 60, [0, -30, -60])
439-
print(fmt("left", 600, [12301, 12302, 12303]))
440-
441-
print(select_step360(20.5+21.2/3600., 20.5+21.4/3600., 5))
442-
print(fmt("left", 36000, [738210, 738215, 738220]))
443-
print(fmt("left", 360000, [7382120, 7382125, 7382130]))
444-
print(fmt("left", 1., [45, 46, 47]))
445-
print(fmt("left", 10., [452, 453, 454]))
446-
447-
if 0:
448-
print(select_step360(20+21.2/60., 21+33.3/60., 5))
449-
print(select_step360(20.5+21.2/3600., 20.5+33.3/3600., 5))
450-
print(select_step360(20+21.2/60., 20+53.3/60., 5))
451-
452-
###
453-
levs, n, factor = select_step360(20.5+21.2/3600., 20.5+27.25/3600., 5)
454-
levs = levs * 0.1
455-
fmt = FormatterDMS()
456-
#print fmt("left", 60, [0, -30, -60])
457-
print(fmt("left", factor, levs))
458-
459-
460-
print(select_step(-180, 180, 10, hour=False))
461-
print(select_step(-12, 12, 10, hour=True))
462-
463-
fmt = FormatterDMS()
464-
#print fmt("left", 60, [0, -30, -60])
465-
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)