Skip to content

[BUG] extract_top_k_and_threshold_from_distance_profiles_one_series Function Errors Related to Numba and n_candidates Parameter #2475

Closed
@lucifer4073

Description

@lucifer4073

Describe the bug

The extract_top_k_and_threshold_from_distance_profiles_one_series function in similarity_search/_commons.py encounters errors primarily due to the @njit(cache=True) decorator from the Numba module.

After removing the Numba accelerator, the function operates correctly only when the distance profile array has n_candidates=1. Setting n_candidates to a value greater than 1 results in a ValueError.

Steps/Code to reproduce the bug

To reproduce

n_cases=10
n_candidates=2
arr=np.random.randint(0,10,size=(n_cases,n_candidates))
res_arr=extract_top_k_and_threshold_from_distance_profiles_one_series(arr,id_x=2)

Expected results

No error should be thrown

Actual results

Error when @njit(cache=True) is used

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[8], [line 1](vscode-notebook-cell:?execution_count=8&line=1)
----> [1](vscode-notebook-cell:?execution_count=8&line=1) res_arr=extract_top_k_and_threshold_from_distance_profiles_one_series(arr,id_x=0)
      [2](vscode-notebook-cell:?execution_count=8&line=2) res_arr

File c:\Users\Balgopal\aeon_gsoc\aeon\aeon-venv\Lib\site-packages\numba\core\dispatcher.py:442, in _DispatcherBase._compile_for_args(self, *args, **kws)
    [440](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:440)             e.patch_message('\n'.join((str(e).rstrip(), help_msg)))
    [441](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:441)     # ignore the FULL_TRACEBACKS config, this needs reporting!
--> [442](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:442)     raise e
    [443](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:443) finally:
    [444](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:444)     self._types_active_call = []

File c:\Users\Balgopal\aeon_gsoc\aeon\aeon-venv\Lib\site-packages\numba\core\dispatcher.py:375, in _DispatcherBase._compile_for_args(self, *args, **kws)
    [373](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:373) return_val = None
    [374](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:374) try:
--> [375](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:375)     return_val = self.compile(tuple(argtypes))
    [376](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:376) except errors.ForceLiteralArg as e:
    [377](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:377)     # Received request for compiler re-entry with the list of arguments
    [378](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:378)     # indicated by e.requested_args.
    [379](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:379)     # First, check if any of these args are already Literal-ized
    [380](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:380)     already_lit_pos = [i for i in e.requested_args
    [381](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/dispatcher.py:381)                        if isinstance(args[i], types.Literal)]

File c:\Users\Balgopal\aeon_gsoc\aeon\aeon-venv\Lib\site-packages\numba\core\dispatcher.py:905, in Dispatcher.compile(self, sig)
...
--> [249](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/typing/npydecl.py:249) assert len(sig.args) == 3
    [250](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/typing/npydecl.py:250) real_sig = signature(sig.return_type, *sig.args[:2])
    [251](file:///C:/Users/Balgopal/aeon_gsoc/aeon/aeon-venv/Lib/site-packages/numba/core/typing/npydecl.py:251) return real_sig

AttributeError: 'NoneType' object has no attribute 'args'

Error on removal for n_candidates >=1

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
TypeError: only length-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
Cell In[7], [line 1](vscode-notebook-cell:?execution_count=7&line=1)
----> [1](vscode-notebook-cell:?execution_count=7&line=1) res_arr=extract_top_k_and_threshold_from_distance_profiles_one_series(arr,id_x=2)
      [2](vscode-notebook-cell:?execution_count=7&line=2) res_arr

File ~\aeon_gsoc\aeon\aeon\similarity_search\_commons.py:348, in extract_top_k_and_threshold_from_distance_profiles_one_series(distance_profiles, id_x, k, threshold, exclusion_size, inverse_distance)
    [346](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/Balgopal/aeon_gsoc/aeon/sample_tests/~/aeon_gsoc/aeon/aeon/similarity_search/_commons.py:346)     for i in range(_k):
    [347](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/Balgopal/aeon_gsoc/aeon/sample_tests/~/aeon_gsoc/aeon/aeon/similarity_search/_commons.py:347)         indexes[i, 0] = id_x
--> [348](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/Balgopal/aeon_gsoc/aeon/sample_tests/~/aeon_gsoc/aeon/aeon/similarity_search/_commons.py:348)         indexes[i, 1] = _argsort[i]
    [349](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/Balgopal/aeon_gsoc/aeon/sample_tests/~/aeon_gsoc/aeon/aeon/similarity_search/_commons.py:349)     return distance_profiles[_argsort[:_k]], indexes
    [350](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/Balgopal/aeon_gsoc/aeon/sample_tests/~/aeon_gsoc/aeon/aeon/similarity_search/_commons.py:350) else:
    [351](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/Balgopal/aeon_gsoc/aeon/sample_tests/~/aeon_gsoc/aeon/aeon/similarity_search/_commons.py:351)     # Apply exclusion zone to avoid neighboring matches

ValueError: setting an array element with a sequence.

Versions

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingsimilarity searchSimilarity search package

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions