We provide two special functions for analysing data: unique_points and multiplicities. They do the following: suppose that `A`

is an array of real or complex vectors. Then, `unique_points(A)`

filters multiple elements of `A`

, such that each entry appears once (given a provided tolerance). On the other hand, `multiplicities(A)`

returns the indices of multiple elements in `A`

.

### Unique points

Here is an example:

```
julia> using HomotopyContinuation
julia> A = [[1.0,0.5], [0.99,0.49], [2.0,0.1], [0.5,1.0]]
julia> unique_points(A)
4-element Array{Array{Float64,1},1}:
[1.0, 0.5]
[0.99, 0.49]
[2.0, 0.1]
[0.5, 1.0]
```

If we relax the tolerance, we get

```
julia> unique_points(A, atol = 0.3)
3-element Array{Array{Float64,1},1}:
[1.0, 0.5]
[2.0, 0.1]
[0.5, 1.0]
```

Note that by default the Euclidean metric is used.

We can also use another metric:

```
julia> unique_points(A, atol = 0.5, metric = InfNorm())
1-element Array{Array{Float64,1},1}:
[1.0, 0.5]
```

### Multiplicities

Here is the syntax of `multiplicities`

```
multiplicities(A; distance=euclidean_distance, tol::Real = 1e-5)
```

where `distance`

and `tol`

have the same meaning as above.

We use the `multiplicities`

function on the same example as above:

```
julia> M = multiplicities(A)
0-element Array{Array{Int64,1},1}
```

For the `tol = 0.5`

we get one multiplicity:

```
julia> M = multiplicities(A, atol = 0.3)
1-element Array{Array{Int64,1},1}:
[1, 2]
```

This means that the first and the second entry of $A$ are the same up to `distance < 0.3`

.

### Group Actions

It is also possible to define equality up to group action. For instance, consider the group that interchanges the first and the second entry of a vector in `A`

.

```
G = GroupActions( x -> ([x[2]; x[1]], ) )
```

Then, we have

```
julia> unique_points(A, group_actions = G)
3-element Array{Array{Float64,1},1}:
[1.0, 0.5]
[0.99, 0.49]
[2.0, 0.1]
```

because `A[1] = [1.0, 0.5]`

and `A[4] = [0.5, 1.0]`

are now considered equal:

```
julia> M = multiplicities(A, group_actions = G)
1-element Array{Array{Int64,1},1}:
[1, 4]
```