diff --git a/docarray/base_doc/docarray_response.py b/docarray/base_doc/docarray_response.py index 8f00ffdbf5..4654069e7b 100644 --- a/docarray/base_doc/docarray_response.py +++ b/docarray/base_doc/docarray_response.py @@ -33,7 +33,7 @@ class DocArrayResponse(JSONResponse): --- ```python - from docarray.documets import Text + from docarray.documents import Text from docarray.base_doc import DocResponse diff --git a/docarray/typing/tensor/ndarray.py b/docarray/typing/tensor/ndarray.py index 6ea94dc697..fb2db8e857 100644 --- a/docarray/typing/tensor/ndarray.py +++ b/docarray/typing/tensor/ndarray.py @@ -31,11 +31,9 @@ from docarray.typing.tensor.tensorflow_tensor import TensorFlowTensor # noqa: F401 if TYPE_CHECKING: - from docarray.computation.numpy_backend import NumpyCompBackend from docarray.proto import NdArrayProto - T = TypeVar('T', bound='NdArray') ShapeT = TypeVar('ShapeT') @@ -150,12 +148,12 @@ def _docarray_from_native(cls: Type[T], value: np.ndarray) -> T: return cast(T, value.view(cls.__unparametrizedcls__)) return value.view(cls) - def _docarray_to_json_compatible(self) -> np.ndarray: + def _docarray_to_json_compatible(self): """ Convert `NdArray` into a json compatible object :return: a representation of the tensor compatible with orjson """ - return self.unwrap() + return self.unwrap().tolist() def unwrap(self) -> np.ndarray: """ diff --git a/tests/units/array/test_array_from_to_json.py b/tests/units/array/test_array_from_to_json.py index 2324652c6d..ce0ccb7fd7 100644 --- a/tests/units/array/test_array_from_to_json.py +++ b/tests/units/array/test_array_from_to_json.py @@ -149,6 +149,27 @@ class MyDoc(BaseDoc): assert v_after._storage == v._storage +@pytest.mark.parametrize('dtype', [np.float16, np.float32, np.float64]) +def test_from_to_json_doclist_different_dtype(dtype): + emb = np.random.rand(128).astype(dtype) + da = DocList[MyDoc]( + [ + MyDoc(embedding=emb, text='hello', image=ImageDoc(url='aux.png')), + MyDoc(embedding=emb, text='hello world', image=ImageDoc()), + ] + ) + json_da = da.to_json() + da2 = DocList[MyDoc].from_json(json_da) + assert len(da2) == 2 + assert len(da) == len(da2) + for d1, d2 in zip(da, da2): + assert d1.embedding.tolist() == d2.embedding.tolist() + assert d1.text == d2.text + assert d1.image.url == d2.image.url + assert da[1].image.url is None + assert da2[1].image.url is None + + def test_union_type(): from typing import Union