From c3965382c6af213069a98c5992d3d31cd10639b3 Mon Sep 17 00:00:00 2001 From: Joan Fontanals Martinez Date: Thu, 27 Apr 2023 09:06:52 +0200 Subject: [PATCH 1/2] fix: fix max recursion --- docarray/base_doc/mixins/io.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docarray/base_doc/mixins/io.py b/docarray/base_doc/mixins/io.py index 9d19e4337bc..39989dec718 100644 --- a/docarray/base_doc/mixins/io.py +++ b/docarray/base_doc/mixins/io.py @@ -366,7 +366,7 @@ def _get_access_paths(cls) -> List[str]: paths = [] for field in cls.__fields__.keys(): field_type = cls._get_field_type(field) - if not is_union_type(field_type) and issubclass(field_type, BaseDoc): + if field != 'id' and not is_union_type(field_type) and issubclass(field_type, BaseDoc): sub_paths = field_type._get_access_paths() for path in sub_paths: paths.append(f'{field}__{path}') From b68a641b78c9ba8ca8fa16a00db57ef207517a5c Mon Sep 17 00:00:00 2001 From: Joan Fontanals Martinez Date: Thu, 27 Apr 2023 09:12:45 +0200 Subject: [PATCH 2/2] fix: fix recursion depth issue Signed-off-by: Joan Fontanals Martinez --- docarray/base_doc/mixins/io.py | 6 +++++- tests/integrations/issues/__init__.py | 0 tests/integrations/issues/test_1463.py | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/integrations/issues/__init__.py create mode 100644 tests/integrations/issues/test_1463.py diff --git a/docarray/base_doc/mixins/io.py b/docarray/base_doc/mixins/io.py index 39989dec718..ddb89dcd22c 100644 --- a/docarray/base_doc/mixins/io.py +++ b/docarray/base_doc/mixins/io.py @@ -366,7 +366,11 @@ def _get_access_paths(cls) -> List[str]: paths = [] for field in cls.__fields__.keys(): field_type = cls._get_field_type(field) - if field != 'id' and not is_union_type(field_type) and issubclass(field_type, BaseDoc): + if ( + field != 'id' + and not is_union_type(field_type) + and issubclass(field_type, BaseDoc) + ): sub_paths = field_type._get_access_paths() for path in sub_paths: paths.append(f'{field}__{path}') diff --git a/tests/integrations/issues/__init__.py b/tests/integrations/issues/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/integrations/issues/test_1463.py b/tests/integrations/issues/test_1463.py new file mode 100644 index 00000000000..1a77272ab4a --- /dev/null +++ b/tests/integrations/issues/test_1463.py @@ -0,0 +1,23 @@ +from docarray import DocList, BaseDoc +from docarray.typing import NdArrayEmbedding +from docarray.utils.find import find + +import numpy as np + + +def test_fix_max_recursion(): + class Doc(BaseDoc): + text: str + embedding: NdArrayEmbedding + + query = np.random.rand(128) + index = DocList[Doc]( + [Doc(text=_, embedding=np.random.rand(128)) for _ in range(100)] + ) + top_matches, _ = find( + index=index, query=query, search_field='embedding', metric='cosine_sim' + ) + df = top_matches.to_dataframe() + assert 'id' in df.columns + assert 'embedding' in df.columns + assert 'text' in df.columns