Skip to content

Commit

Permalink
Merge pull request #65 from tommilligan/kneelocator-index-error
Browse files Browse the repository at this point in the history
knee_locator: don't raise IndexError if no knee is found
  • Loading branch information
arvkevi authored Mar 5, 2020
2 parents 76652ce + 909ec3b commit fb85306
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
8 changes: 6 additions & 2 deletions kneed/knee_locator.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,12 @@ def __init__(

# Step 6: find knee
self.knee, self.norm_knee = self.find_knee()
self.knee_y = self.y[self.x == self.knee][0]
self.norm_knee_y = self.y_normalized[self.x_normalized == self.norm_knee][0]

# Step 7: If we have a knee, extract data about it
self.knee_y = self.norm_knee_y = None
if self.knee:
self.knee_y = self.y[self.x == self.knee][0]
self.norm_knee_y = self.y_normalized[self.x_normalized == self.norm_knee][0]

@staticmethod
def __normalize(a: Iterable[float]) -> Iterable[float]:
Expand Down
14 changes: 14 additions & 0 deletions tests/test_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,17 @@ def test_y():
assert math.isclose(kl.all_knees_y[0], 1.897, rel_tol=0.03)
assert math.isclose(kl.norm_knee_y, 0.758, rel_tol=0.03)
assert math.isclose(kl.all_norm_knees_y[0], 0.758, rel_tol=0.03)

def test_y_no_knee():
"""Test the y value, if there is no knee found."""
kl = KneeLocator(
np.array([1, 2, 3]),
np.array([0.90483742, 0.81873075, 0.74081822]),
S=1.0,
curve="convex",
direction="decreasing",
interp_method="interp1d",
online=False
)
assert kl.knee_y is None
assert kl.norm_knee_y is None

0 comments on commit fb85306

Please sign in to comment.