Passed
Push — master ( dc22b3...70b10f )
by Stefan
01:26
created

test_read._assert_age()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
# vim:fileencoding=utf-8
3
#
4
# Copyright (c) 2020 Stefan Bender
5
#
6
# This module is part of pyspaceweather.
7
# pyspaceweather is free software: you can redistribute it or modify
8
# it under the terms of the GNU General Public License as published
9
# by the Free Software Foundation, version 2.
10
# See accompanying COPYING.GPLv2 file or http://www.gnu.org/licenses/gpl-2.0.html.
11
"""Space weather index read tests
12
"""
13
import os
14
15
import numpy as np
16
import pandas as pd
17
18
from spaceweather import (
19
	ap_kp_3h, sw_daily, get_file_age, update_data,
20
	SW_PATH_ALL, SW_PATH_5Y,
21
)
22
23
24
def test_age():
25
	now = pd.Timestamp.utcnow()
26
	for p in [SW_PATH_ALL, SW_PATH_5Y]:
27
		assert os.path.exists(p)
28
		fage0 = get_file_age(p)
29
		fage1 = now - get_file_age(p, relative=False)
30
		assert (fage0 > pd.Timedelta("3h")) == (fage1 > pd.Timedelta("3h"))
31
		assert (fage0 > pd.Timedelta("1d")) == (fage1 > pd.Timedelta("1d"))
32
33
34
def _assert_age(p, age):
35
	assert os.path.exists(p)
36
	fage = get_file_age(p)
37
	assert fage < pd.Timedelta(age)
38
39
40
def test_update():
41
	update_data(min_age="100d")
42
	for p in [SW_PATH_ALL, SW_PATH_5Y]:
43
		_assert_age(p, "100d")
44
45
46
def test_auto_update():
47
	# Should update the last-5-year data
48
	df = sw_daily(update=True, update_interval="1d")
49
	_assert_age(SW_PATH_5Y, "1d")
50
51
52
def test_daily():
53
	df = sw_daily()
54
	np.testing.assert_allclose(
55
		df.loc["2000-01-01"].values,
56
		np.array([
57
			2.000e+03, 1.000e+00, 1.000e+00, 2.272e+03, 7.000e+00, 5.300e+00, 4.700e+00,
58
			4.000e+00, 3.300e+00, 4.300e+00, 3.000e+00, 4.300e+00, 3.700e+00, 3.270e+01,
59
			5.600e+01, 3.900e+01, 2.700e+01, 1.800e+01, 3.200e+01, 1.500e+01, 3.200e+01,
60
			2.200e+01, 3.000e+01, 1.300e+00, 6.000e+00, 4.800e+01, 1.256e+02, 0.000e+00,
61
			1.605e+02, 1.750e+02, 1.299e+02, 1.656e+02, 1.790e+02,
62
		]),
63
		rtol=1e-12,
64
	)
65
66
67
def test_3hourly_ap():
68
	df = ap_kp_3h()
69
	np.testing.assert_allclose(
70
		df.loc[pd.date_range("2000-01-01 01:30", "2000-01-01 23:30", freq='3h')].Ap.values,
71
		np.array([56, 39, 27, 18, 32, 15, 32, 22]),
72
		rtol=1e-12,
73
	)
74
75
76
def test_3hourly_kp():
77
	df = ap_kp_3h()
78
	np.testing.assert_allclose(
79
		df.loc[pd.date_range("2000-01-01 01:30", "2000-01-01 23:30", freq='3h')].Kp.values,
80
		np.array([5.3, 4.7, 4.0, 3.3, 4.3, 3.0, 4.3, 3.7]),
81
		rtol=1e-12,
82
	)
83