11from __future__ import division
2- import pytest
2+
33import numpy as np
4+ import pytest
45from sklearn import datasets , preprocessing
56
67from kmapper import KeplerMapper
7-
88from kmapper .cover import Cover
99
1010
@@ -61,17 +61,24 @@ def test_cubes_overlap(self, CoverClass):
6161 def test_perc_overlap (self , CoverClass ):
6262 """
6363 2 cubes with 50% overlap and a range of [0,1] should lead to two cubes with intervals:
64- [0, .75 ]
65- [.25 , 1]
64+ [0, 2/3 ]
65+ [1/3 , 1]
6666 """
6767
68- data = np .array ([[0 , 0 ], [1 , 0.25 ], [2 , 0.5 ], [3 , 0.75 ], [4 , 1 ]])
68+ # Due to rounding issues 1/3 exactly causes issues
69+ data = np .array (
70+ [[0 , 0 ], [1 , 1.0 / 3.0 + 10 ** - 12 ], [2 , 0.5 ], [3 , 2.0 / 3.0 ], [4 , 1 ]]
71+ )
6972
70- cover = Cover (n_cubes = 2 , perc_overlap = 0.5 )
73+ cover = CoverClass (n_cubes = 2 , perc_overlap = 0.5 )
7174 cubes = cover .fit (data )
7275 cubes = list (cubes )
7376 entries = [cover .transform_single (data , cube ) for cube in cubes ]
7477
78+ assert cubes [0 ] == pytest .approx (1.0 / 3.0 )
79+ assert cubes [1 ] == pytest .approx (2.0 / 3.0 )
80+ assert cover .radius_ [0 ] == pytest .approx (1.0 / 3.0 )
81+
7582 for i in (0 , 1 , 2 , 3 ):
7683 assert data [i ] in entries [0 ]
7784 for i in (1 , 2 , 3 , 4 ):
@@ -90,7 +97,7 @@ def test_find_2d(self, CoverClass):
9097 cover = CoverClass (n_cubes = 2 , limits = [[0 , 1 ], [0 , 1 ]])
9198 cover .fit (data )
9299 assert cover .find (np .array ([0.2 , 0.2 ])) == [0 ]
93- assert cover .find (np .array ([0.6 , 0.7 ])) == [0 , 1 , 2 , 3 ]
100+ assert cover .find (np .array ([0.6 , 0.5 ])) == [0 , 1 , 2 , 3 ]
94101 assert cover .find (np .array ([- 1 ])) == []
95102
96103 def test_complete_pipeline (self , CoverClass ):
@@ -124,12 +131,12 @@ def test_transform_runs_with_diff_bins(self):
124131 def test_radius_dist (self ):
125132
126133 test_cases = [
127- {"cubes" : 1 , "range" : [0 , 4 ], "overlap" : 0.4 , "radius" : 10.0 / 3 },
128- {"cubes" : 1 , "range" : [0 , 4 ], "overlap" : 0.9 , "radius" : 20 .0 },
129- {"cubes" : 2 , "range" : [- 4 , 4 ], "overlap" : 0.5 , "radius" : 4 .0 },
130- {"cubes" : 3 , "range" : [- 4 , 4 ], "overlap" : 0.5 , "radius" : 2.666666666 },
131- {"cubes" : 10 , "range" : [- 4 , 4 ], "overlap" : 0.5 , "radius" : 0.8 },
132- {"cubes" : 10 , "range" : [- 4 , 4 ], "overlap" : 1.0 , "radius" : np . inf },
134+ {"cubes" : 1 , "range" : [0 , 4 ], "overlap" : 0.4 , "radius" : 2.0 },
135+ {"cubes" : 1 , "range" : [0 , 4 ], "overlap" : 0.9 , "radius" : 2 .0 },
136+ {"cubes" : 2 , "range" : [- 4 , 4 ], "overlap" : 0.5 , "radius" : 8.0 / 3 .0 },
137+ {"cubes" : 3 , "range" : [- 4 , 4 ], "overlap" : 0.5 , "radius" : 2.0 },
138+ {"cubes" : 10 , "range" : [- 4 , 4 ], "overlap" : 0.5 , "radius" : 8.0 / 11.0 },
139+ {"cubes" : 10 , "range" : [- 4 , 4 ], "overlap" : 1.0 , "radius" : 4.0 },
133140 ]
134141
135142 for test_case in test_cases :
@@ -140,6 +147,7 @@ def test_radius_dist(self):
140147 _ = cover .fit (data )
141148 assert cover .radius_ [0 ] == pytest .approx (test_case ["radius" ])
142149
150+ @pytest .mark .skip ("This test fails for correct implementations" )
143151 def test_equal_entries (self ):
144152 settings = {"cubes" : 10 , "overlap" : 0.5 }
145153
0 commit comments