## Faulty implementation of comparison function

### Description

The `are_equal`

function in `time_series.utils`

incorrectly assumes that the `is_nn`

function checks if the argument is negative. According to the documentation, however, this function checks if the argument is non-negative. This leads to an incorrect implementation, causing the `are_equal`

function to return bogus values.

```
func are_equal{range_check_ptr}(num1: felt, num2: felt) -> (_are_equal: Bool) {
alloc_locals;
let is_neg1 = is_nn(num1 - num2);
let is_neg2 = is_nn(num2 - num1);
let _are_equal = is_nn(is_neg1 + is_neg2 - 1);
return (_are_equal,);
}
```

As an example, the `are_equal`

function will have the following trace when run with arguments `(3, 4)`

, wrongly returning that the numbers are equal:

```
is_neg1 = is_nn(3 - 4) => is_nn(-1) => 0;
is_neg2 = is_nn(4 - 3) => is_nn(1) => 1
_are_equal = is_nn(0 + 1 - 1) => is_nn(0) => 1
```

### Impact

The faulty `are_equal`

function is used as a helper function by other statistical calculation functions under time_series/, which could lead to incorrect results.

### Recommendations

Rewrite the code according to the correct specification of the is_nn function: It returns 1 when the argument is non-negative.

Write more unit tests for individual library functions to catch any incorrect implementations and edge cases that might not show up in an integration test.

### Remediation

The issue was addressed in a later update.