Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f467768

Browse filesBrowse files
committed
Also test FormatterHMS and select_step24.
1 parent 15fb901 commit f467768
Copy full SHA for f467768

File tree

Expand file treeCollapse file tree

1 file changed

+39
-11
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+39
-11
lines changed

‎lib/mpl_toolkits/tests/test_axisartist_angle_helper.py

Copy file name to clipboardExpand all lines: lib/mpl_toolkits/tests/test_axisartist_angle_helper.py
+39-11Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,41 @@
77
import pytest
88

99
from mpl_toolkits.axisartist.angle_helper import (
10-
FormatterDMS, select_step, select_step360)
10+
FormatterDMS, FormatterHMS, select_step, select_step24, select_step360)
1111

1212

13-
DMS_RE = re.compile(
13+
_MS_RE = (
1414
r'''\$ # Mathtext
1515
(
1616
# The sign sometimes appears on a 0 when a fraction is shown.
1717
# Check later that there's only one.
1818
(?P<degree_sign>-)?
1919
(?P<degree>[0-9.]+) # Degrees value
20-
\^{\\circ} # Degree symbol
20+
{degree} # Degree symbol (to be replaced by format.)
2121
)?
2222
(
2323
(?(degree)\\,) # Separator if degrees are also visible.
2424
(?P<minute_sign>-)?
2525
(?P<minute>[0-9.]+) # Minutes value
26-
\^{\\prime} # Minute symbol
26+
{minute} # Minute symbol (to be replaced by format.)
2727
)?
2828
(
2929
(?(minute)\\,) # Separator if minutes are also visible.
3030
(?P<second_sign>-)?
3131
(?P<second>[0-9.]+) # Seconds value
32-
\^{\\prime\\prime} # Second symbol
32+
{second} # Second symbol (to be replaced by format.)
3333
)?
3434
\$ # Mathtext
35-
''',
36-
re.VERBOSE
35+
'''
3736
)
37+
DMS_RE = re.compile(_MS_RE.format(degree=re.escape(FormatterDMS.deg_mark),
38+
minute=re.escape(FormatterDMS.min_mark),
39+
second=re.escape(FormatterDMS.sec_mark)),
40+
re.VERBOSE)
41+
HMS_RE = re.compile(_MS_RE.format(degree=re.escape(FormatterHMS.deg_mark),
42+
minute=re.escape(FormatterHMS.min_mark),
43+
second=re.escape(FormatterHMS.sec_mark)),
44+
re.VERBOSE)
3845

3946

4047
def dms2float(degrees, minutes=0, seconds=0):
@@ -53,6 +60,18 @@ def test_select_step(args, kwargs, expected_levels, expected_factor):
5360
assert factor == expected_factor
5461

5562

63+
@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [
64+
((-180, 180, 10), {}, np.arange(-180, 181, 30), 1.0),
65+
((-12, 12, 10), {}, np.arange(-750, 751, 150), 60.0)
66+
])
67+
def test_select_step24(args, kwargs, expected_levels, expected_factor):
68+
levels, n, factor = select_step24(*args, **kwargs)
69+
70+
assert n == len(levels)
71+
np.testing.assert_array_equal(levels, expected_levels)
72+
assert factor == expected_factor
73+
74+
5675
@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [
5776
((dms2float(20, 21.2), dms2float(21, 33.3), 5), {},
5877
np.arange(1215, 1306, 15), 60.0),
@@ -82,6 +101,10 @@ def test_select_step360(args, kwargs, expected_levels, expected_factor):
82101
assert factor == expected_factor
83102

84103

104+
@pytest.mark.parametrize('Formatter, regex',
105+
[(FormatterDMS, DMS_RE),
106+
(FormatterHMS, HMS_RE)],
107+
ids=['Degree/Minute/Second', 'Hour/Minute/Second'])
85108
@pytest.mark.parametrize('direction, factor, values', [
86109
("left", 60, [0, -30, -60]),
87110
("left", 600, [12301, 12302, 12303]),
@@ -91,13 +114,13 @@ def test_select_step360(args, kwargs, expected_levels, expected_factor):
91114
("left", 1., [45, 46, 47]),
92115
("left", 10., [452, 453, 454]),
93116
])
94-
def test_formatters(direction, factor, values):
95-
fmt = FormatterDMS()
117+
def test_formatters(Formatter, regex, direction, factor, values):
118+
fmt = Formatter()
96119
result = fmt(direction, factor, values)
97120

98121
prev_degree = prev_minute = prev_second = None
99122
for tick, value in zip(result, values):
100-
m = DMS_RE.match(tick)
123+
m = regex.match(tick)
101124
assert m is not None, '"%s" is not an expected tick format.' % (tick, )
102125

103126
sign = sum(m.group(sign + '_sign') is not None
@@ -109,7 +132,12 @@ def test_formatters(direction, factor, values):
109132
degree = float(m.group('degree') or prev_degree or 0)
110133
minute = float(m.group('minute') or prev_minute or 0)
111134
second = float(m.group('second') or prev_second or 0)
112-
assert sign * dms2float(degree, minute, second) == value / factor, \
135+
if Formatter == FormatterHMS:
136+
# 360 degrees as plot range -> 24 hours as labelled range
137+
expected_value = pytest.approx((value // 15) / factor)
138+
else:
139+
expected_value = pytest.approx(value / factor)
140+
assert sign * dms2float(degree, minute, second) == expected_value, \
113141
'"%s" does not match expected tick value.' % (tick, )
114142

115143
prev_degree = degree

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.