From b5f590edb10dfb5998b674b859bfbd6bc6655036 Mon Sep 17 00:00:00 2001 From: Johannes Messner Date: Mon, 31 Jul 2023 15:44:25 +0200 Subject: [PATCH 1/4] fix: equality between and abstracttensor and type Signed-off-by: Johannes Messner --- docarray/typing/tensor/abstract_tensor.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docarray/typing/tensor/abstract_tensor.py b/docarray/typing/tensor/abstract_tensor.py index cf7ddf13204..b4330355106 100644 --- a/docarray/typing/tensor/abstract_tensor.py +++ b/docarray/typing/tensor/abstract_tensor.py @@ -59,8 +59,8 @@ class _ParametrizedMeta(type): def _equals_special_case(cls, other): is_type = isinstance(other, type) - is_tensor = is_type and AbstractTensor in other.mro() - same_parents = is_tensor and cls.mro()[1:] == other.mro()[1:] + is_tensor = is_type and AbstractTensor in other.__mro__ + same_parents = is_tensor and cls.mro()[1:] == other.__mro__[1:] subclass_target_shape = getattr(other, '__docarray_target_shape__', False) self_target_shape = getattr(cls, '__docarray_target_shape__', False) @@ -92,9 +92,11 @@ def __instancecheck__(cls, instance): return False return any( safe_issubclass(candidate, _cls.__unparametrizedcls__) - for candidate in type(instance).mro() + for candidate in type(instance).__mro__ ) - return any(issubclass(candidate, cls) for candidate in type(instance).mro()) + return any( + issubclass(candidate, cls) for candidate in type(instance).__mro__ + ) return super().__instancecheck__(instance) def __eq__(cls, other): From 6dbcaa78a31887d2418934516f5f640680b7e2f5 Mon Sep 17 00:00:00 2001 From: Johannes Messner Date: Mon, 31 Jul 2023 15:47:15 +0200 Subject: [PATCH 2/4] test: add test for this case Signed-off-by: Johannes Messner --- tests/units/typing/tensor/test_tensor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/units/typing/tensor/test_tensor.py b/tests/units/typing/tensor/test_tensor.py index 02aaaeea742..1feebd8684f 100644 --- a/tests/units/typing/tensor/test_tensor.py +++ b/tests/units/typing/tensor/test_tensor.py @@ -41,3 +41,7 @@ class MyTensorDoc(BaseDoc): assert isinstance(doc.tensor, TensorFlowTensor) assert isinstance(doc.tensor.tensor, tf.Tensor) assert tnp.allclose(doc.tensor.tensor, tf.zeros((1000, 2))) + + +def test_equals_type(): + assert not (TorchTensor == type) From b36338134d0c98c58bcfd8a967bab3f679412735 Mon Sep 17 00:00:00 2001 From: Johannes Messner Date: Mon, 31 Jul 2023 15:49:03 +0200 Subject: [PATCH 3/4] test: add comment to test Signed-off-by: Johannes Messner --- tests/units/typing/tensor/test_tensor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/units/typing/tensor/test_tensor.py b/tests/units/typing/tensor/test_tensor.py index 1feebd8684f..6d506201cbc 100644 --- a/tests/units/typing/tensor/test_tensor.py +++ b/tests/units/typing/tensor/test_tensor.py @@ -44,4 +44,5 @@ class MyTensorDoc(BaseDoc): def test_equals_type(): + # see https://github.com/docarray/docarray/pull/1739 assert not (TorchTensor == type) From 55ba0147634e42e9a27b5e44670a46a409c8b448 Mon Sep 17 00:00:00 2001 From: Johannes Messner Date: Mon, 31 Jul 2023 17:00:46 +0200 Subject: [PATCH 4/4] fix: comparison of mro's Signed-off-by: Johannes Messner --- docarray/typing/tensor/abstract_tensor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docarray/typing/tensor/abstract_tensor.py b/docarray/typing/tensor/abstract_tensor.py index b4330355106..24b837afbbc 100644 --- a/docarray/typing/tensor/abstract_tensor.py +++ b/docarray/typing/tensor/abstract_tensor.py @@ -60,7 +60,7 @@ class _ParametrizedMeta(type): def _equals_special_case(cls, other): is_type = isinstance(other, type) is_tensor = is_type and AbstractTensor in other.__mro__ - same_parents = is_tensor and cls.mro()[1:] == other.__mro__[1:] + same_parents = is_tensor and cls.__mro__[1:] == other.__mro__[1:] subclass_target_shape = getattr(other, '__docarray_target_shape__', False) self_target_shape = getattr(cls, '__docarray_target_shape__', False)