`scipy.spatial.ConvexHull(points)`

returns all points that form the hull.

It helps a lot already. However, in this question, we need to return all points on the hull.

I write a funciton `isHull(point, hull)`

to check if a point is on the hull.

When ConvexHull throws a exception, it means the points can not form a hull.

In this case, I return all points.

```
def outerTrees(self, points):
from scipy.spatial import ConvexHull
import numpy as np
def isHull(point, hull, tol=1e-12):
return any((abs(np.dot(eq[:-1], point) + eq[-1]) < tol) for eq in hull.equations)
try:
hull = ConvexHull([(p.x, p.y) for p in points])
return [p for p in points if isHull((p.x, p.y), hull)]
except:
return points
```