def test_happy_days(self, point_count, dim_count): '''When any other input, perform at least as well as a hypergrid layout of points''' points = spread_points_in_hypercube(point_count=point_count, dimension_count=dim_count) assert points.shape == (point_count, dim_count) # points must lay in the hypercube assert np.all((points >= 0) & (points <= 1)) # actual min distance >= min distance in a hypergrid min_distance = min(euclidean(points[i], points[j]) for i in range(point_count) for j in range(i+1, point_count)) points_per_side = np.ceil(point_count ** (1/dim_count)) hypergrid_min_distance = 1 / (points_per_side - 1) assert min_distance > hypergrid_min_distance or np.isclose(min_distance, hypergrid_min_distance)
def test_no_points(self, dims): '''When point_count = 0, returns empty np.array, regardless of dimension_count''' assert np.array_equal(spread_points_in_hypercube(point_count=0, dimension_count=dims), np.empty(shape=(0,dims)))
def test_one_point(self, dims): '''When point_count = 1, it should lay in the hypercube''' points = spread_points_in_hypercube(point_count=1, dimension_count=dims) assert np.all((points >= 0) & (points <= 1))
def test_invalid_dimension_count(self): '''When dimension_count < 1, ValueError''' with pytest.raises(ValueError): spread_points_in_hypercube(point_count=1, dimension_count=-1)