GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( cc6bfd...4f98db )
by Andreas
01:27
created

klib.tests.test_util   A

Complexity

Total Complexity 21

Size/Duplication

Total Lines 109
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 77
dl 0
loc 109
rs 10
c 0
b 0
f 0
wmc 21

10 Methods

Rating   Name   Duplication   Size   Complexity  
A Test__missing_vals.test_mv_total() 0 5 1
A Test__drop_duplicates.test_drop_dupl() 0 7 1
A Test__drop_duplicates.setUpClass() 0 9 1
A Test__missing_vals.test_mv_cols_ratio() 0 9 3
A Test__missing_vals.test_mv_cols() 0 5 2
A Test__missing_vals.test_mv_rows() 0 5 2
A Test__missing_vals.setUpClass() 0 16 1
A Test__validate_input.test__validate_input_0_1() 0 6 3
A Test__missing_vals.test_mv_rows_ratio() 0 9 3
A Test__validate_input.test__validate_input_bool() 0 8 4
1
import numpy as np
2
import pandas as pd
3
import unittest
4
from klib.utils import _drop_duplicates
5
from klib.utils import _missing_vals
6
from klib.utils import _validate_input_0_1
7
from klib.utils import _validate_input_bool
8
9
if __name__ == '__main__':
10
    unittest.main()
11
12
13
class Test__drop_duplicates(unittest.TestCase):
14
15
    @classmethod
16
    def setUpClass(cls):
17
        cls.data_dupl_df = pd.DataFrame([[pd.NA, pd.NA, pd.NA, pd.NA],
18
                                         [1, 2, 3, 4],
19
                                         [1, 2, 3, 4],
20
                                         [1, 2, 3, 4],
21
                                         [2, 3, 4, 5],
22
                                         [1, 2, 3, pd.NA],
23
                                         [pd.NA, pd.NA, pd.NA, pd.NA]])
24
25
    def test_drop_dupl(self):
26
        # Test dropping of duplicate rows
27
        self.assertAlmostEqual(_drop_duplicates(self.data_dupl_df)[0].shape, (4, 4))
28
        # Test if the resulting DataFrame is equal to using the pandas method
29
        self.assertTrue(_drop_duplicates(self.data_dupl_df)[0].equals(self.data_dupl_df.drop_duplicates()))
30
        # Test number of duplicates
31
        self.assertEqual(len(_drop_duplicates(self.data_dupl_df)[1]), 3)
32
33
34
class Test__missing_vals(unittest.TestCase):
35
36
    @classmethod
37
    def setUpClass(cls):
38
        cls.data_mv_df = pd.DataFrame([[1, np.nan, 3, 4],
39
                                       [None, 4, 5, None],
40
                                       ['a', 'b', pd.NA, 'd'],
41
                                       [True, False, 7, pd.NaT]])
42
43
        cls.data_mv_array = np.array([[1, np.nan, 3, 4],
44
                                      [None, 4, 5, None],
45
                                      ['a', 'b', pd.NA, 'd'],
46
                                      [True, False, 7, pd.NaT]])
47
48
        cls.data_mv_list = [[1, np.nan, 3, 4],
49
                            [None, 4, 5, None],
50
                            ['a', 'b', pd.NA, 'd'],
51
                            [True, False, 7, pd.NaT]]
52
53
    def test_mv_total(self):
54
        # Test total missing values
55
        self.assertAlmostEqual(_missing_vals(self.data_mv_df)['mv_total'], 5)
56
        self.assertAlmostEqual(_missing_vals(self.data_mv_array)['mv_total'], 5)
57
        self.assertAlmostEqual(_missing_vals(self.data_mv_list)['mv_total'], 5)
58
59
    def test_mv_rows(self):
60
        # Test missing values for each row
61
        expected_results = [1, 2, 1, 1]
62
        for i, _ in enumerate(expected_results):
63
            self.assertAlmostEqual(_missing_vals(self.data_mv_df)['mv_rows'][i], expected_results[i])
64
65
    def test_mv_cols(self):
66
        # Test missing values for each column
67
        expected_results = [1, 1, 1, 2]
68
        for i, _ in enumerate(expected_results):
69
            self.assertAlmostEqual(_missing_vals(self.data_mv_df)['mv_cols'][i], expected_results[i])
70
71
    def test_mv_rows_ratio(self):
72
        # Test missing values ratio for each row
73
        expected_results = [0.25, 0.5, 0.25, 0.25]
74
        for i, _ in enumerate(expected_results):
75
            self.assertAlmostEqual(_missing_vals(self.data_mv_df)['mv_rows_ratio'][i], expected_results[i])
76
77
        # Test if missing value ratio is between 0 and 1
78
        for i in range(len(self.data_mv_df)):
79
            self.assertTrue(0 <= _missing_vals(self.data_mv_df)['mv_rows_ratio'][i] <= 1)
80
81
    def test_mv_cols_ratio(self):
82
        # Test missing values ratio for each column
83
        expected_results = [1/4, 0.25, 0.25, 0.5]
84
        for i, _ in enumerate(expected_results):
85
            self.assertAlmostEqual(_missing_vals(self.data_mv_df)['mv_cols_ratio'][i], expected_results[i])
86
87
        # Test if missing value ratio is between 0 and 1
88
        for i in range(len(self.data_mv_df)):
89
            self.assertTrue(0 <= _missing_vals(self.data_mv_df)['mv_cols_ratio'][i] <= 1)
90
91
92
class Test__validate_input(unittest.TestCase):
93
94
    def test__validate_input_0_1(self):
95
        with self.assertRaises(ValueError):
96
            _validate_input_0_1(-0.1, '-0.1')
97
98
        with self.assertRaises(ValueError):
99
            _validate_input_0_1(1.1, '1.1')
100
101
    def test__validate_input_bool(self):
102
        # Raises an exception if the input is not boolean
103
        with self.assertRaises(ValueError):
104
            _validate_input_bool('True', None)
105
        with self.assertRaises(ValueError):
106
            _validate_input_bool(None, None)
107
        with self.assertRaises(ValueError):
108
            _validate_input_bool(1, None)
109