| # Copyright 2020 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Test coverage across backends for e2e tests is defined directly in the BUILD |
| # files. Coverage tables generated from this file can be viewed here: |
| # https://google.github.io/iree/tensorflow-coverage/tf-base-coverage |
| # Updates made to test suite names should also be reflected here: |
| # https://github.com/google/iree/blob/main/scripts/update_e2e_coverage.py |
| |
| load( |
| "//bindings/python:build_defs.oss.bzl", |
| "INTREE_TENSORFLOW_PY_DEPS", |
| "NUMPY_DEPS", |
| "iree_py_binary", |
| "iree_py_test", |
| ) |
| load( |
| "//integrations/tensorflow/e2e:iree_e2e_test_suite.bzl", |
| "set_difference", |
| ) |
| load( |
| "//integrations/tensorflow/e2e:iree_e2e_cartesian_product_test_suite.bzl", |
| "iree_e2e_cartesian_product_test_suite", |
| ) |
| |
| package( |
| default_visibility = ["//visibility:public"], |
| features = ["layering_check"], |
| licenses = ["notice"], # Apache 2.0 |
| ) |
| |
| [ |
| iree_py_binary( |
| name = src.replace(".py", "_manual"), |
| srcs = [src], |
| main = src, |
| python_version = "PY3", |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| for src in glob( |
| ["*_test.py"], |
| exclude = ["keyword_spotting_streaming_test.py"], |
| ) |
| ] |
| |
| # These functions were selected using all of the funcions in the tf.math docs: |
| # https://www.tensorflow.org/api_docs/python/tf/math |
| TF_MATH_FUNCTIONS = [ |
| "abs", |
| "accumulate_n", |
| "acos", |
| "acosh", |
| "add", |
| "add_n", |
| "angle", |
| "argmax", |
| "argmin", |
| "asin", |
| "asinh", |
| "atan", |
| "atan2", |
| "atanh", |
| "bessel_i0", |
| "bessel_i0e", |
| "bessel_i1", |
| "bessel_i1e", |
| "betainc", |
| "bincount", |
| "ceil", |
| "confusion_matrix", |
| "cos", |
| "cosh", |
| "count_nonzero", |
| "cumprod", |
| "cumsum", |
| "cumulative_logsumexp", |
| "digamma", |
| "divide", |
| "divide_no_nan", |
| "equal", |
| "erf", |
| "erfc", |
| "erfinv", |
| "exp", |
| "expm1", |
| "floor", |
| "floordiv", |
| "floormod", |
| "greater", |
| "greater_equal", |
| "igamma", |
| "igammac", |
| "imag", |
| "in_top_k", |
| "invert_permutation", |
| "is_finite", |
| "is_inf", |
| "is_nan", |
| "is_non_decreasing", |
| "is_strictly_increasing", |
| "lbeta", |
| "less", |
| "less_equal", |
| "lgamma", |
| "log", |
| "log1p", |
| "log_sigmoid", |
| "log_softmax", |
| "logical_and", |
| "logical_not", |
| "logical_or", |
| "logical_xor", |
| "maximum", |
| "minimum", |
| "mod", |
| "multiply", |
| "multiply_no_nan", |
| "ndtri", |
| "negative", |
| "nextafter", |
| "not_equal", |
| "polygamma", |
| "polyval", |
| "pow", |
| "real", |
| "reciprocal", |
| "reciprocal_no_nan", |
| "reduce_all", |
| "reduce_any", |
| "reduce_euclidean_norm", |
| "reduce_logsumexp", |
| "reduce_max", |
| "reduce_mean", |
| "reduce_min", |
| "reduce_prod", |
| "reduce_std", |
| "reduce_sum", |
| "reduce_variance", |
| "rint", |
| "round", |
| "rsqrt", |
| "scalar_mul", |
| "segment_max", |
| "segment_mean", |
| "segment_min", |
| "segment_prod", |
| "segment_sum", |
| "sigmoid", |
| "sign", |
| "sin", |
| "sinh", |
| "sobol_sample", |
| "softmax", |
| "softplus", |
| "softsign", |
| "sqrt", |
| "square", |
| "squared_difference", |
| "subtract", |
| "tan", |
| "tanh", |
| # "top_k", # TODO(meadowlark): Enable once list outputs are supported. |
| "truediv", |
| "unsorted_segment_max", |
| "unsorted_segment_mean", |
| "unsorted_segment_min", |
| "unsorted_segment_prod", |
| "unsorted_segment_sqrt_n", |
| "unsorted_segment_sum", |
| "xdivy", |
| "xlog1py", |
| "xlogy", |
| "zero_fraction", |
| "zeta", |
| ] |
| |
| # keep sorted |
| TFLITE_FAILING = [ |
| "abs", # Failing for integer inputs. |
| "acos", |
| "acosh", |
| "asin", |
| "asinh", |
| "atan", |
| "atan2", |
| "atanh", |
| "bessel_i0", |
| "bessel_i0e", |
| "bessel_i1", |
| "bessel_i1e", |
| "betainc", |
| "bincount", |
| "confusion_matrix", |
| "conj", |
| "cosh", |
| "cumprod", |
| "cumulative_logsumexp", |
| "digamma", |
| "divide", # Failing for integer inputs. |
| "erf", |
| "erfc", |
| "erfinv", |
| "expm1", |
| "igamma", |
| "igammac", |
| "in_top_k", |
| "invert_permutation", |
| "is_finite", |
| "is_non_decreasing", |
| "is_strictly_increasing", |
| "l2_normalize", |
| "lbeta", |
| "lgamma", |
| "log1p", |
| "log_sigmoid", |
| "ndtri", |
| "nextafter", |
| "polygamma", |
| "polyval", |
| "pow", # Failing for integer inputs. |
| "reduce_all", |
| "reduce_euclidean_norm", |
| "reduce_logsumexp", |
| "reduce_mean", |
| "reduce_std", |
| "reduce_variance", |
| "rint", |
| "segment_max", |
| "segment_mean", |
| "segment_min", |
| "segment_prod", |
| "sign", |
| "sinh", |
| "sobol_sample", |
| "softmax", |
| "softplus", |
| "softsign", |
| "tan", |
| "unsorted_segment_max", |
| "unsorted_segment_mean", |
| "unsorted_segment_min", |
| "unsorted_segment_prod", |
| "unsorted_segment_sqrt_n", |
| "unsorted_segment_sum", |
| "xdivy", |
| "xlog1py", |
| "xlogy", |
| "zeta", |
| ] |
| |
| # Note: The VMLA_FAILING_DYNAMIC specification extends this list. Newly-passing |
| # functions removed from this list may need to be added to VMLA_FAILING_DYNAMIC. |
| # keep sorted |
| VMLA_FAILING = [ |
| "acosh", |
| "argmax", |
| "argmin", |
| "asin", |
| "asinh", |
| "atan2", |
| "atanh", |
| "bessel_i0", |
| "bessel_i0e", |
| "bessel_i1", |
| "bessel_i1e", |
| "betainc", |
| "bincount", |
| "confusion_matrix", |
| "cosh", |
| "count_nonzero", |
| "cumprod", |
| "cumulative_logsumexp", |
| "digamma", |
| "divide", # Failing for integer inputs because iree doesn't output 'f64'. |
| "erf", |
| "erfc", |
| "erfinv", |
| "expm1", |
| "igamma", |
| "igammac", |
| "in_top_k", |
| "invert_permutation", |
| "is_nan", # TODO(#4061): tf.math.is_nan miscompiles with static shapes. |
| "is_non_decreasing", |
| "is_strictly_increasing", |
| "ndtri", |
| "nextafter", |
| "polygamma", |
| "pow", # Failing for integer inputs. |
| "reduce_euclidean_norm", |
| "reduce_prod", |
| "rint", |
| "segment_max", |
| "segment_mean", |
| "segment_min", |
| "segment_prod", |
| "segment_sum", |
| "sign", |
| "sobol_sample", |
| "softsign", |
| "unsorted_segment_max", |
| "unsorted_segment_mean", |
| "unsorted_segment_min", |
| "unsorted_segment_prod", |
| "unsorted_segment_sqrt_n", |
| "unsorted_segment_sum", |
| "xdivy", |
| "xlog1py", |
| "xlogy", |
| "zeta", |
| ] |
| |
| # Note: The LLVM_FAILING_DYNAMIC specification extends this list. Newly-passing |
| # functions removed from this list may need to be added to LLVM_FAILING_DYNAMIC. |
| # keep sorted |
| LLVM_FAILING = [ |
| "acos", |
| "acosh", |
| "argmax", |
| "argmin", |
| "asin", |
| "asinh", |
| "atan", |
| "atan2", |
| "atanh", |
| "bessel_i0", |
| "bessel_i0e", |
| "bessel_i1", |
| "bessel_i1e", |
| "betainc", |
| "bincount", |
| "confusion_matrix", |
| "cosh", |
| "count_nonzero", |
| "cumprod", |
| "cumulative_logsumexp", |
| "digamma", |
| "divide", # Failing for integer inputs because iree doesn't output 'f64'. |
| "erf", |
| "erfc", |
| "erfinv", |
| "expm1", |
| "igamma", |
| "igammac", |
| "in_top_k", |
| "invert_permutation", |
| "is_nan", |
| "is_non_decreasing", |
| "is_strictly_increasing", |
| "l2_normalize", |
| "logical_or", |
| "logical_xor", |
| "ndtri", |
| "nextafter", |
| "polygamma", |
| "pow", |
| "reduce_all", |
| "reduce_any", |
| "reduce_euclidean_norm", |
| "reduce_logsumexp", |
| "reduce_max", |
| "reduce_mean", |
| "reduce_min", |
| "reduce_prod", |
| "reduce_std", |
| "reduce_sum", |
| "reduce_variance", |
| "rint", |
| "segment_max", |
| "segment_mean", |
| "segment_min", |
| "segment_prod", |
| "segment_sum", |
| "sign", |
| "sobol_sample", |
| "softsign", |
| "unsorted_segment_max", |
| "unsorted_segment_mean", |
| "unsorted_segment_min", |
| "unsorted_segment_prod", |
| "unsorted_segment_sqrt_n", |
| "unsorted_segment_sum", |
| "xdivy", |
| "xlog1py", |
| "xlogy", |
| "zeta", |
| ] |
| |
| # Note: The VULKAN_FAILING_DYNAMIC specification extends this list. |
| # Newly-passing functions removed from this list may need to be added to |
| # VULKAN_FAILING_DYNAMIC. |
| # keep sorted |
| VULKAN_FAILING = [ |
| "acos", |
| "acosh", |
| "argmax", |
| "argmin", |
| "asin", |
| "asinh", |
| "atan", |
| "atan2", |
| "atanh", |
| "bessel_i0", |
| "bessel_i0e", |
| "bessel_i1", |
| "bessel_i1e", |
| "betainc", |
| "bincount", |
| "confusion_matrix", |
| "cosh", |
| "count_nonzero", |
| "cumprod", |
| "cumsum", |
| "cumulative_logsumexp", |
| "digamma", |
| "divide", # Failing for integer inputs because iree doesn't output 'f64'. |
| "erf", |
| "erfc", |
| "erfinv", |
| "expm1", |
| "igamma", |
| "igammac", |
| "in_top_k", |
| "invert_permutation", |
| "is_nan", |
| "is_non_decreasing", |
| "is_strictly_increasing", |
| "l2_normalize", |
| "logical_and", |
| "logical_not", |
| "logical_or", |
| "logical_xor", |
| "mod", # Passes with swiftshader, but fails on Turing GPU |
| "ndtri", |
| "nextafter", |
| "polygamma", |
| "pow", |
| "reduce_all", |
| "reduce_any", |
| "reduce_euclidean_norm", |
| "reduce_logsumexp", |
| "reduce_max", |
| "reduce_mean", |
| "reduce_min", |
| "reduce_prod", |
| "reduce_std", |
| "reduce_sum", |
| "reduce_variance", |
| "rint", |
| "segment_max", |
| "segment_mean", |
| "segment_min", |
| "segment_prod", |
| "segment_sum", |
| "sign", |
| "sobol_sample", |
| "softsign", |
| "unsorted_segment_max", |
| "unsorted_segment_mean", |
| "unsorted_segment_min", |
| "unsorted_segment_prod", |
| "unsorted_segment_sqrt_n", |
| "unsorted_segment_sum", |
| "xdivy", |
| "xlog1py", |
| "xlogy", |
| "zeta", |
| ] |
| |
| # ---- INDIVIDUAL STATIC TESTS ----------------------------------------------- # |
| |
| # These tests allow us to generate coverage tables and give a finer-grained view |
| # of the coverage, but are very slow due to bazel overhead, so they are not |
| # run on the internal or OSS CI. |
| iree_e2e_cartesian_product_test_suite( |
| name = "math_tests", |
| srcs = ["math_test.py"], |
| failing_configurations = [ |
| { |
| # Failing on TFLite. |
| "functions": TFLITE_FAILING, |
| "target_backends": "tflite", |
| }, |
| { |
| # Failing on vmla. |
| "functions": VMLA_FAILING, |
| "target_backends": "iree_vmla", |
| }, |
| { |
| # Failing on llvm. |
| "functions": LLVM_FAILING, |
| "target_backends": "iree_llvmjit", |
| }, |
| { |
| # Failing on vulkan. |
| "functions": VULKAN_FAILING, |
| "target_backends": "iree_vulkan", |
| }, |
| ], |
| flags_to_values = { |
| "reference_backend": "tf", |
| "functions": TF_MATH_FUNCTIONS, |
| "dynamic_dims": False, |
| "test_complex": False, |
| "target_backends": [ |
| "tf", |
| "tflite", |
| "iree_vmla", |
| "iree_llvmjit", |
| "iree_vulkan", |
| ], |
| }, |
| main = "math_test.py", |
| tags = [ |
| "manual", |
| "nokokoro", |
| "notap", |
| ], |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| |
| # ---- MULTIPLE STATIC TESTS ------------------------------------------------ # |
| |
| # These tests compile all functions in tf.math at once for testing so that |
| # we can run them on the CI with 5 additional targets instead of 640. The tests |
| # are run sharded such that about 5 functions run per shard. This is a |
| # reasonable tradeoff between shard startup overhead and critical path test |
| # latency. |
| |
| # TODO(#3810) 'multiply' outputs all zeros when compiled with other functions. |
| VMLA_FAILING_MULTIPLE = VMLA_FAILING + ["multiply"] |
| |
| # TODO(#3810) Including 'square' causes error: Recieved signal 11. |
| # @unused |
| LLVM_FAILING_MULTIPLE = LLVM_FAILING + ["square"] |
| |
| # TODO(#3810) Including 'square' causes error: Recieved signal 11. |
| VULKAN_FAILING_MULTIPLE = VULKAN_FAILING + ["square"] |
| |
| [ |
| iree_py_test( |
| name = "math_tests_multiple__{}".format(target_backend), |
| srcs = ["math_test.py"], |
| args = [ |
| "--reference_backend=tf", |
| "--target_backends={}".format(target_backend), |
| "--functions={}".format(",".join(functions)), |
| "--dynamic_dims=False", |
| "--test_complex=False", |
| ], |
| main = "math_test.py", |
| python_version = "PY3", |
| shard_count = len(functions) // 5, |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| for target_backend, functions in dict( |
| # TODO(#2673): enable LLVM AOT for these tests. JIT is deprecated. |
| # iree_llvmjit = set_difference(TF_MATH_FUNCTIONS, LLVM_FAILING_MULTIPLE), |
| iree_vmla = set_difference(TF_MATH_FUNCTIONS, VMLA_FAILING_MULTIPLE), |
| iree_vulkan = set_difference(TF_MATH_FUNCTIONS, VULKAN_FAILING_MULTIPLE), |
| tf = TF_MATH_FUNCTIONS, |
| tflite = set_difference(TF_MATH_FUNCTIONS, TFLITE_FAILING), |
| ).items() |
| ] |
| |
| # ---- INDIVIDUAL DYNAMIC TESTS ---------------------------------------------- # |
| |
| # keep sorted |
| VMLA_FAILING_DYNAMIC = VMLA_FAILING + [ |
| "angle", |
| "cumsum", |
| "divide_no_nan", |
| "floordiv", # TODO(#4065): VMLA raises INVALID_ARGUMENT errors after DeviceQueue failure. |
| "floormod", # TODO(#4065): VMLA raises INVALID_ARGUMENT errors after DeviceQueue failure. |
| "lbeta", |
| "lgamma", |
| "log_sigmoid", |
| "log1p", |
| "logical_and", |
| "logical_not", |
| "logical_or", |
| "logical_xor", |
| "mod", # TODO(#4065): VMLA raises INVALID_ARGUMENT errors after DeviceQueue failure. |
| "multiply_no_nan", |
| "round", |
| "reciprocal_no_nan", |
| "reduce_all", |
| "reduce_any", |
| "reduce_logsumexp", |
| "reduce_max", |
| "reduce_min", |
| "reduce_sum", |
| "reduce_mean", |
| "reduce_std", |
| "reduce_variance", |
| "softplus", |
| "zero_fraction", |
| ] |
| |
| # TODO(#4061): tf.math.is_nan miscompiles with static shapes. |
| VMLA_FAILING_DYNAMIC.remove("is_nan") |
| |
| # keep sorted |
| LLVM_FAILING_DYNAMIC = LLVM_FAILING + [ |
| "accumulate_n", |
| "add", |
| "add_n", |
| "angle", |
| "cumsum", |
| "divide", |
| "divide_no_nan", |
| "equal", |
| "floordiv", |
| "floormod", |
| "greater", |
| "greater_equal", |
| "is_finite", |
| "is_inf", |
| "lbeta", |
| "less", |
| "less_equal", |
| "lgamma", |
| "log_sigmoid", |
| "log_softmax", |
| "log1p", |
| "logical_and", |
| "logical_not", |
| "maximum", |
| "minimum", |
| "mod", |
| "multiply", |
| "multiply_no_nan", |
| "not_equal", |
| "polyval", |
| "reciprocal", |
| "reciprocal_no_nan", |
| "reduce_mean", |
| "scalar_mul", |
| "sigmoid", |
| "sinh", |
| "softmax", |
| "softplus", |
| "square", |
| "squared_difference", |
| "subtract", |
| "round", |
| "tan", |
| "truediv", |
| "zero_fraction", |
| ] |
| |
| # keep sorted |
| VULKAN_FAILING_DYNAMIC = VULKAN_FAILING + [ |
| "abs", |
| "accumulate_n", |
| "add", |
| "add_n", |
| "angle", |
| "ceil", |
| "cos", |
| "divide", |
| "divide_no_nan", |
| "equal", |
| "exp", |
| "floor", |
| "floordiv", |
| "floormod", |
| "greater", |
| "greater_equal", |
| "imag", |
| "is_finite", |
| "is_inf", |
| "lbeta", |
| "less", |
| "round", |
| "less_equal", |
| "lgamma", |
| "log", |
| "log_sigmoid", |
| "log_softmax", |
| "log1p", |
| "maximum", |
| "minimum", |
| "mod", |
| "multiply", |
| "multiply_no_nan", |
| "negative", |
| "not_equal", |
| "polyval", |
| "reciprocal", |
| "reciprocal_no_nan", |
| "reduce_max", |
| "reduce_mean", |
| "reduce_min", |
| "reduce_sum", |
| "rsqrt", |
| "scalar_mul", |
| "sigmoid", |
| "sin", |
| "sinh", |
| "softmax", |
| "softplus", |
| "sqrt", |
| "square", |
| "squared_difference", |
| "subtract", |
| "tan", |
| "tanh", |
| "truediv", |
| "zero_fraction", |
| ] |
| |
| # These tests allow us to generate coverage tables and give a finer-grained view |
| # of the coverage, but are very slow due to bazel overhead, so they are not |
| # run on the internal or OSS CI. |
| iree_e2e_cartesian_product_test_suite( |
| name = "math_dynamic_dims_tests", |
| srcs = ["math_test.py"], |
| failing_configurations = [ |
| { |
| # TFLite does not support dynamic shapes. |
| "target_backends": "tflite", |
| }, |
| { |
| # Failing on vmla. |
| "functions": VMLA_FAILING_DYNAMIC, |
| "target_backends": "iree_vmla", |
| }, |
| { |
| # Failing on llvm. |
| "functions": LLVM_FAILING_DYNAMIC, |
| "target_backends": "iree_llvmjit", |
| }, |
| { |
| # Failing on vulkan. |
| "functions": VULKAN_FAILING_DYNAMIC, |
| "target_backends": "iree_vulkan", |
| }, |
| ], |
| flags_to_values = { |
| "reference_backend": "tf", |
| "functions": TF_MATH_FUNCTIONS, |
| "dynamic_dims": True, |
| "test_complex": False, |
| "target_backends": [ |
| "tf", |
| "tflite", |
| "iree_vmla", |
| "iree_llvmjit", |
| "iree_vulkan", |
| ], |
| }, |
| main = "math_test.py", |
| tags = [ |
| "manual", |
| "nokokoro", |
| "notap", |
| ], |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| |
| # ---- MULTIPLE DYNAMIC TESTS ----------------------------------------------- # |
| |
| # These tests compile all functions in tf.math at once for testing so that |
| # we can run them on the CI with 4 additional targets instead of 512. The tests |
| # are run sharded such that about 5 functions run per shard. This is a |
| # reasonable tradeoff between shard startup overhead and critical path test |
| # latency. |
| |
| # TODO(#3810) 'multiply' outputs all zeros when compiled with other functions. |
| VMLA_FAILING_DYNAMIC_MULTIPLE = VMLA_FAILING_DYNAMIC + ["multiply"] |
| |
| [ |
| iree_py_test( |
| name = "math_dynamic_dims_tests_multiple__{}".format(target_backend), |
| srcs = ["math_test.py"], |
| args = [ |
| "--reference_backend=tf", |
| "--target_backends={}".format(target_backend), |
| "--functions={}".format(",".join(functions)), |
| "--dynamic_dims=True", |
| "--test_complex=False", |
| ], |
| main = "math_test.py", |
| python_version = "PY3", |
| shard_count = len(functions) // 5, |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| for target_backend, functions in dict( |
| # TODO(#2673): enable LLVM AOT for these tests. JIT is deprecated. |
| # iree_llvmjit = set_difference(TF_MATH_FUNCTIONS, LLVM_FAILING_DYNAMIC), |
| iree_vmla = set_difference(TF_MATH_FUNCTIONS, VMLA_FAILING_DYNAMIC_MULTIPLE), |
| iree_vulkan = set_difference(TF_MATH_FUNCTIONS, VULKAN_FAILING_DYNAMIC), |
| tf = TF_MATH_FUNCTIONS, |
| ).items() |
| ] |
| |
| # ---- INDIVIDUAL COMPLEX TESTS ---------------------------------------------- # |
| |
| # This list was generated by running: |
| # bazel run integrations/tensorflow/e2e/math:math_test_manual -- --list_functions_with_complex_tests |
| COMPLEX_FUNCTIONS = [ |
| "abs", |
| "add", |
| "angle", |
| "asinh", |
| "atanh", |
| "conj", |
| "cos", |
| "cosh", |
| "count_nonzero", |
| "cumprod", |
| "cumsum", |
| "divide", |
| "divide_no_nan", |
| "exp", |
| "expm1", |
| "imag", |
| "l2_normalize", |
| "log", |
| "log1p", |
| "multiply", |
| "multiply_no_nan", |
| "negative", |
| "pow", |
| "real", |
| "reciprocal", |
| "reciprocal_no_nan", |
| "reduce_euclidean_norm", |
| "reduce_std", |
| "reduce_variance", |
| "rsqrt", |
| "sigmoid", |
| "sign", |
| "sin", |
| "sinh", |
| "sqrt", |
| "square", |
| "squared_difference", |
| "subtract", |
| "tan", |
| "tanh", |
| "truediv", |
| "xdivy", |
| "xlog1py", |
| "xlogy", |
| "zero_fraction", |
| ] |
| |
| # keep sorted |
| FAILING_COMPLEX = [ |
| "angle", |
| "cos", |
| "cumsum", |
| "divide_no_nan", |
| "log", |
| "log1p", |
| "multiply_no_nan", |
| "negative", |
| "reciprocal", |
| "reciprocal_no_nan", |
| "reduce_std", |
| "reduce_variance", |
| "rsqrt", |
| "sigmoid", |
| "sin", |
| "sinh", |
| "sqrt", |
| "tan", |
| "tanh", |
| "zero_fraction", |
| ] |
| |
| VMLA_FAILING_COMPLEX = VMLA_FAILING + FAILING_COMPLEX |
| |
| LLVM_FAILING_COMPLEX = LLVM_FAILING + FAILING_COMPLEX |
| |
| VULKAN_FAILING_COMPLEX = VULKAN_FAILING + FAILING_COMPLEX |
| |
| # These tests allow us to generate coverage tables and give a finer-grained view |
| # of the coverage, but are very slow due to bazel overhead, so they are not |
| # run on the internal or OSS CI. |
| iree_e2e_cartesian_product_test_suite( |
| name = "math_complex_tests", |
| srcs = ["math_test.py"], |
| failing_configurations = [ |
| { |
| # TFLite does not support complex numbers. |
| "target_backends": "tflite", |
| }, |
| { |
| # Failing on vmla. |
| "functions": VMLA_FAILING_COMPLEX, |
| "target_backends": "iree_vmla", |
| }, |
| { |
| # Failing on llvm. |
| "functions": LLVM_FAILING_COMPLEX, |
| "target_backends": "iree_llvmjit", |
| }, |
| { |
| # Failing on vulkan. |
| "functions": VULKAN_FAILING_COMPLEX, |
| "target_backends": "iree_vulkan", |
| }, |
| ], |
| flags_to_values = { |
| "reference_backend": "tf", |
| "functions": COMPLEX_FUNCTIONS, |
| "dynamic_dims": False, |
| "test_complex": True, |
| "target_backends": [ |
| "tf", |
| "tflite", |
| "iree_vmla", |
| "iree_llvmjit", |
| "iree_vulkan", |
| ], |
| }, |
| main = "math_test.py", |
| tags = [ |
| "manual", |
| "nokokoro", |
| "notap", |
| ], |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| |
| # ---- MULTIPLE COMPLEX TESTS ----------------------------------------------- # |
| |
| # These tests compile all functions in tf.math at once for testing so that |
| # we can run them on the CI with 4 additional targets instead of 512. The tests |
| # are run sharded such that about 5 functions run per shard. This is a |
| # reasonable tradeoff between shard startup overhead and critical path test |
| # latency. |
| |
| # TODO(#3810) 'multiply' outputs all zeros when compiled with other functions. |
| VMLA_FAILING_COMPLEX_MULTIPLE = VMLA_FAILING_COMPLEX + ["multiply"] |
| |
| # TODO(#3810) Including 'square' causes error: Recieved signal 11. |
| # @unused |
| LLVM_FAILING_COMPLEX_MULTIPLE = LLVM_FAILING_COMPLEX + ["square"] |
| |
| # TODO(#3810) Including 'square' causes error: Recieved signal 11. |
| VULKAN_FAILING_COMPLEX_MULTIPLE = VULKAN_FAILING_COMPLEX + ["square"] |
| |
| [ |
| iree_py_test( |
| name = "math_complex_tests_multiple__{}".format(target_backend), |
| srcs = ["math_test.py"], |
| args = [ |
| "--reference_backend=tf", |
| "--target_backends={}".format(target_backend), |
| "--functions={}".format(",".join(functions)), |
| "--dynamic_dims=False", |
| "--test_complex=True", |
| ], |
| main = "math_test.py", |
| python_version = "PY3", |
| shard_count = len(functions) // 5, |
| deps = INTREE_TENSORFLOW_PY_DEPS + NUMPY_DEPS + [ |
| "//integrations/tensorflow/bindings/python/pyiree/tf/support", |
| ], |
| ) |
| for target_backend, functions in dict( |
| # TODO(#2673): enable LLVM AOT for these tests. JIT is deprecated. |
| # iree_llvmjit = set_difference(TF_MATH_FUNCTIONS, LLVM_FAILING_COMPLEX_MULTIPLE), |
| iree_vmla = set_difference(TF_MATH_FUNCTIONS, VMLA_FAILING_COMPLEX_MULTIPLE), |
| iree_vulkan = set_difference(TF_MATH_FUNCTIONS, VULKAN_FAILING_COMPLEX_MULTIPLE), |
| tf = TF_MATH_FUNCTIONS, |
| ).items() |
| ] |