From 6154a19952ca7faf9aafc8350c5a9b7400f165ef Mon Sep 17 00:00:00 2001 From: ReneFabricius <65137969+ReneFabricius@users.noreply.github.com> Date: Mon, 11 Sep 2023 18:29:20 +0300 Subject: [PATCH 1/6] Set ground truth backend for frontend tests --- ivy_tests/test_ivy/helpers/globals.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ivy_tests/test_ivy/helpers/globals.py b/ivy_tests/test_ivy/helpers/globals.py index 29a09ffb54439..64710cd1cd8d6 100644 --- a/ivy_tests/test_ivy/helpers/globals.py +++ b/ivy_tests/test_ivy/helpers/globals.py @@ -78,6 +78,7 @@ def setup_frontend_test(frontend: str, backend: str, device: str, test_data: Tes _set_frontend(frontend) _set_backend(backend) _set_device(device) + _set_ground_truth_backend(frontend) def teardown_frontend_test(): @@ -85,6 +86,7 @@ def teardown_frontend_test(): _unset_frontend() _unset_backend() _unset_device() + _unset_ground_truth_backend() def _set_test_data(test_data: TestData): From 44ac5bb4dc70f7888bf8f5043cf7684c9aeb5730 Mon Sep 17 00:00:00 2001 From: ReneFabricius <65137969+ReneFabricius@users.noreply.github.com> Date: Thu, 14 Sep 2023 11:26:40 +0300 Subject: [PATCH 2/6] Get correct backend dtypes when prune_function==False and intersect with frontend dtypes for frontend tests. --- ivy_tests/test_ivy/helpers/globals.py | 2 -- .../test_ivy/helpers/hypothesis_helpers/dtype_helpers.py | 7 +++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ivy_tests/test_ivy/helpers/globals.py b/ivy_tests/test_ivy/helpers/globals.py index 64710cd1cd8d6..29a09ffb54439 100644 --- a/ivy_tests/test_ivy/helpers/globals.py +++ b/ivy_tests/test_ivy/helpers/globals.py @@ -78,7 +78,6 @@ def setup_frontend_test(frontend: str, backend: str, device: str, test_data: Tes _set_frontend(frontend) _set_backend(backend) _set_device(device) - _set_ground_truth_backend(frontend) def teardown_frontend_test(): @@ -86,7 +85,6 @@ def teardown_frontend_test(): _unset_frontend() _unset_backend() _unset_device() - _unset_ground_truth_backend() def _set_test_data(test_data: TestData): diff --git a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py index e725ddb7e3fe7..e2c8fa6cdf5b8 100644 --- a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py +++ b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py @@ -51,7 +51,7 @@ def _get_type_dict_helper(framework, kind, is_frontend_test): if is_frontend_test: framework_module = get_frontend_config(framework).supported_dtypes else: - framework_module = ivy + framework_module = ivy.with_backend(framework) if kind == "valid": return framework_module.valid_dtypes @@ -138,7 +138,7 @@ def get_dtypes( function as the keyword argument with the given name. prune_function if True, the function will prune the data types to only include the ones that - are supported by the current backend. If False, the function will return all + are supported by the current function. If False, the function will return all the data types supported by the current backend. Returns @@ -225,6 +225,9 @@ def get_dtypes( # FN_DTYPES & BACKEND_DTYPES & FRONTEND_DTYPES & GROUND_TRUTH_DTYPES # If being called from a frontend test + if test_globals.CURRENT_FRONTEND is not test_globals._Notsetval: + frontend_dtypes = _get_type_dict(test_globals.CURRENT_FRONTEND, kind, True) + valid_dtypes = valid_dtypes.intersection(frontend_dtypes) # Make sure we return dtypes that are compatible with ground truth backend ground_truth_is_set = ( From 1ad40c6e33e7352a77212499afe64b2e4051a13d Mon Sep 17 00:00:00 2001 From: ReneFabricius <65137969+ReneFabricius@users.noreply.github.com> Date: Thu, 14 Sep 2023 12:40:55 +0300 Subject: [PATCH 3/6] Avoid key error if frontend is not supported as a backend. --- .../test_ivy/helpers/hypothesis_helpers/dtype_helpers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py index e2c8fa6cdf5b8..c7ba3496a2c9a 100644 --- a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py +++ b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py @@ -226,7 +226,9 @@ def get_dtypes( # If being called from a frontend test if test_globals.CURRENT_FRONTEND is not test_globals._Notsetval: - frontend_dtypes = _get_type_dict(test_globals.CURRENT_FRONTEND, kind, True) + frontend_dtypes = _get_type_dict_helper( + test_globals.CURRENT_FRONTEND, kind, True + ) valid_dtypes = valid_dtypes.intersection(frontend_dtypes) # Make sure we return dtypes that are compatible with ground truth backend From ac2dee0410a2de485a3d9a05c6c15d740bdfa42a Mon Sep 17 00:00:00 2001 From: ReneFabricius <65137969+ReneFabricius@users.noreply.github.com> Date: Thu, 14 Sep 2023 21:44:43 +0300 Subject: [PATCH 4/6] Conditioned .with_backend for multiversion testing --- .../helpers/hypothesis_helpers/dtype_helpers.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py index c7ba3496a2c9a..ebb02a16b5c58 100644 --- a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py +++ b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py @@ -44,14 +44,19 @@ def _get_type_dict(framework: str, kind: str, is_frontend_test=False): input_queue.put(("_get_type_dict_helper", framework, kind, is_frontend_test)) return output_queue.get() else: - return _get_type_dict_helper(framework, kind, is_frontend_test) + return _get_type_dict_helper( + framework, kind, is_frontend_test, multiversion=False + ) -def _get_type_dict_helper(framework, kind, is_frontend_test): +def _get_type_dict_helper(framework, kind, is_frontend_test, multiversion=True): if is_frontend_test: framework_module = get_frontend_config(framework).supported_dtypes else: - framework_module = ivy.with_backend(framework) + if multiversion: + framework_module = ivy + else: + framework_module = ivy.with_backend(framework) if kind == "valid": return framework_module.valid_dtypes From dafc56a83587c235dd954db96b5f71b39acb157b Mon Sep 17 00:00:00 2001 From: ReneFabricius <65137969+ReneFabricius@users.noreply.github.com> Date: Fri, 15 Sep 2023 18:57:51 +0300 Subject: [PATCH 5/6] Get backend using context manager. --- .../helpers/hypothesis_helpers/dtype_helpers.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py index ebb02a16b5c58..dcc9249818020 100644 --- a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py +++ b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py @@ -7,7 +7,7 @@ # local import ivy -from ..pipeline_helper import BackendHandler, get_frontend_config +from ..pipeline_helper import BackendHandler, get_frontend_config, WithBackendContext from . import number_helpers as nh from . import array_helpers as ah from .. import globals as test_globals @@ -44,20 +44,19 @@ def _get_type_dict(framework: str, kind: str, is_frontend_test=False): input_queue.put(("_get_type_dict_helper", framework, kind, is_frontend_test)) return output_queue.get() else: - return _get_type_dict_helper( - framework, kind, is_frontend_test, multiversion=False - ) + return _get_type_dict_helper(framework, kind, is_frontend_test) -def _get_type_dict_helper(framework, kind, is_frontend_test, multiversion=True): +def _get_type_dict_helper(framework, kind, is_frontend_test): if is_frontend_test: framework_module = get_frontend_config(framework).supported_dtypes + return _retrieve_requested_dtypes(framework_module, kind) else: - if multiversion: - framework_module = ivy - else: - framework_module = ivy.with_backend(framework) + with WithBackendContext(framework) as ivy_backend: + return _retrieve_requested_dtypes(ivy_backend, kind) + +def _retrieve_requested_dtypes(framework_module, kind): if kind == "valid": return framework_module.valid_dtypes if kind == "numeric": From ea714401863ad08f457bd35ff78bdfa9bde53854 Mon Sep 17 00:00:00 2001 From: ReneFabricius <65137969+ReneFabricius@users.noreply.github.com> Date: Mon, 18 Sep 2023 18:31:42 +0300 Subject: [PATCH 6/6] Modified use of context. --- .../test_ivy/helpers/hypothesis_helpers/dtype_helpers.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py index dcc9249818020..76400dd4ccbbd 100644 --- a/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py +++ b/ivy_tests/test_ivy/helpers/hypothesis_helpers/dtype_helpers.py @@ -7,7 +7,7 @@ # local import ivy -from ..pipeline_helper import BackendHandler, get_frontend_config, WithBackendContext +from ..pipeline_helper import BackendHandler, get_frontend_config from . import number_helpers as nh from . import array_helpers as ah from .. import globals as test_globals @@ -50,13 +50,10 @@ def _get_type_dict(framework: str, kind: str, is_frontend_test=False): def _get_type_dict_helper(framework, kind, is_frontend_test): if is_frontend_test: framework_module = get_frontend_config(framework).supported_dtypes - return _retrieve_requested_dtypes(framework_module, kind) else: - with WithBackendContext(framework) as ivy_backend: - return _retrieve_requested_dtypes(ivy_backend, kind) + with BackendHandler.update_backend(framework) as ivy_backend: + framework_module = ivy_backend - -def _retrieve_requested_dtypes(framework_module, kind): if kind == "valid": return framework_module.valid_dtypes if kind == "numeric":