test_ionization   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 126
Duplicated Lines 64.29 %

Importance

Changes 0
Metric Value
eloc 91
dl 81
loc 126
rs 10
c 0
b 0
f 0
wmc 6

6 Functions

Rating   Name   Duplication   Size   Complexity  
A test_endiss_3d() 19 17 1
A test_endiss() 18 18 1
A test_endiss_transposed() 17 17 1
A test_ssusi_ioniz() 2 11 1
A test_endiss_3d_transposed() 19 17 1
A test_endiss_scalar() 0 18 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
# -*- coding: utf-8 -*-
2
import numpy as np
3
import pytest
4
5
import eppaurora as aur
6
7
EDISS_FUNCS_EXPECTED = [
8
	(aur.rr1987, 4.51517584e-07),
9
	(aur.rr1987_mod, 4.75296602e-07),
10
	(aur.fang2008, 4.44256875e-07),
11
	(aur.fang2010_mono, 1.96516057e-007),
12
	(aur.fang2010_maxw_int, 4.41340659e-07),
13
	(aur.fang2013_protons, 4.09444686e-22),
14
	(aur.berger1974, 1.18682805e-12),
15
]
16
17
18 View Code Duplication
@pytest.mark.parametrize(
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
19
	"edissfunc, expected",
20
	EDISS_FUNCS_EXPECTED,
21
)
22
def test_endiss(edissfunc, expected):
23
	energies = np.logspace(-1, 2, 4)
24
	fluxes = np.ones_like(energies)
25
	# ca. 100, 150, 200 km
26
	scale_heights = np.array([6e5, 27e5, 40e5])
27
	rhos = np.array([5e-10, 1.7e-12, 2.6e-13])
28
	# energy dissipation "profiles"
29
	ediss = edissfunc(
30
		energies[None, :], fluxes[None, :],
31
		scale_heights[:, None], rhos[:, None]
32
	)
33
	assert ediss.shape == (3, 4)
34
	np.testing.assert_allclose(ediss[0, 2], expected)
35
	return
36
37
38
@pytest.mark.parametrize(
39
	"edissfunc, expected",
40
	EDISS_FUNCS_EXPECTED,
41
)
42
def test_endiss_scalar(edissfunc, expected):
43
	energies = 10.
44
	fluxes = 1.
45
	# ca. 100, 150, 200 km
46
	scale_heights = np.array([6e5, 27e5, 40e5])
47
	rhos = np.array([5e-10, 1.7e-12, 2.6e-13])
48
	# energy dissipation "profiles"
49
	ediss = edissfunc(
50
		energies, fluxes,
51
		scale_heights[:, None], rhos[:, None]
52
	)
53
	assert ediss.shape == (3, 1)
54
	np.testing.assert_allclose(ediss[0, 0], expected)
55
	return
56
57
58 View Code Duplication
@pytest.mark.parametrize(
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
59
	"edissfunc, expected",
60
	EDISS_FUNCS_EXPECTED,
61
)
62
def test_endiss_transposed(edissfunc, expected):
63
	energies = np.logspace(-1, 2, 4)
64
	fluxes = np.ones_like(energies)
65
	# ca. 100, 150, 200 km
66
	scale_heights = np.array([6e5, 27e5, 40e5])
67
	rhos = np.array([5e-10, 1.7e-12, 2.6e-13])
68
	ediss = edissfunc(
69
		energies[:, None], fluxes[:, None],
70
		scale_heights[None, :], rhos[None, :]
71
	)
72
	assert ediss.shape == (4, 3)
73
	np.testing.assert_allclose(ediss[2, 0], expected)
74
	return
75
76
77 View Code Duplication
@pytest.mark.parametrize(
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
78
	"edissfunc, expected",
79
	EDISS_FUNCS_EXPECTED,
80
)
81
def test_endiss_3d(edissfunc, expected):
82
	energies = np.logspace(-1, 2, 4)
83
	fluxes = np.ones_like(energies)
84
	# ca. 100, 150, 200 km
85
	scale_heights = np.array([6e5, 27e5, 40e5])
86
	rhos = np.array([5e-10, 1.7e-12, 2.6e-13])
87
	ediss = edissfunc(
88
		energies[None, None, :], fluxes[None, None, :],
89
		scale_heights[:, None, None], rhos[:, None, None]
90
	)
91
	assert ediss.shape == (3, 1, 4)
92
	np.testing.assert_allclose(ediss[0, 0, 2], expected)
93
	return
94
95
96 View Code Duplication
@pytest.mark.parametrize(
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
97
	"edissfunc, expected",
98
	EDISS_FUNCS_EXPECTED,
99
)
100
def test_endiss_3d_transposed(edissfunc, expected):
101
	energies = np.logspace(-1, 2, 4)
102
	fluxes = np.ones_like(energies)
103
	# ca. 100, 150, 200 km
104
	scale_heights = np.array([6e5, 27e5, 40e5])
105
	rhos = np.array([5e-10, 1.7e-12, 2.6e-13])
106
	ediss = edissfunc(
107
		energies[None, :, None], fluxes[None, :, None],
108
		scale_heights[:, None, None], rhos[:, None, None]
109
	)
110
	assert ediss.shape == (3, 4, 1)
111
	np.testing.assert_allclose(ediss[0, 2, 0], expected)
112
	return
113
114
115
def test_ssusi_ioniz():
116
	energies = np.logspace(-1, 2, 4)
117
	fluxes = np.ones_like(energies)
118
	z = np.array([100, 120, 150])
119
	# energy dissipation "profiles"
120
	ediss = aur.ssusi_ioniz(
121
		z[:, None],
122
		energies[None, :], fluxes[None, :],
123
	)
124
	assert ediss.shape == (3, 4)
125
	return
126