blob: 5fbc5c42dd6892b9ee0fec3a05effef288987d96 [file] [log] [blame]
# copybara:uncomment(oss-unused) load("//tools/build_defs/build_test:build_test.bzl", "build_test")
load(
"//tensorflow/lite:build_def.bzl",
"gen_zip_test",
"gen_zipped_test_file",
"generated_test_models_all",
"merged_test_models",
"tflite_custom_android_library",
"tflite_custom_cc_library",
)
load("//tensorflow/lite:special_rules.bzl", "tflite_portable_test_suite")
load("//tensorflow/lite/testing:tflite_model_test.bzl", "tflite_model_test")
load("//tensorflow:tensorflow.bzl", "pybind_extension")
load(
"//tensorflow:tensorflow.bzl",
"tf_cc_binary",
"tf_cc_test",
"tf_features_nolayering_check_if_android_or_ios",
)
package(
default_visibility = [
"//visibility:public",
],
licenses = ["notice"],
)
exports_files([
"generated_examples_zip_test.cc",
"tflite_diff_example_test.cc",
"init_tensorflow.h",
"init_tensorflow.cc",
])
[gen_zip_test(
name = "zip_test_%s" % test_name,
size = "medium",
srcs = ["generated_examples_zip_test.cc"],
additional_test_tags_args = {
"xnnpack": (
# TODO(b/162696268): remove 'notap' once the bug is fixed.
["notap"],
["--use_xnnpack=true"],
),
},
conversion_mode = conversion_mode,
# copybara:uncomment_begin(no special handling for Android in OSS)
# data = select({
# "//tensorflow:android": [],
# "//conditions:default": [
# ":zip_%s" % test_name,
# "//third_party/unzip",
# ],
# }),
# copybara:uncomment_end_and_comment_begin
data = [":zip_%s" % test_name],
# copybara:comment_end
shard_count = 20,
test_args = args + select({
"//tensorflow:android": [],
"//conditions:default": [
"--zip_file_path=$(location :zip_%s)" % test_name,
# TODO(angerson) We may be able to add an external unzip binary instead
# of relying on an existing one for OSS builds.
"--unzip_binary_path=/usr/bin/unzip",
],
}),
test_name = test_name,
test_tags = tags + [
"no_gpu", # Executing with TF GPU configurations is redundant.
"no_oss",
"tflite_not_portable_intentional",
],
deps = [
":parse_testdata_lib",
":tflite_driver",
":tflite_driver_delegate_providers",
":util",
"@com_google_googletest//:gtest",
"@com_googlesource_code_re2//:re2",
"//tensorflow/lite:builtin_op_data",
"//tensorflow/lite:framework",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/kernels:test_delegate_providers_lib",
] + select({
"//conditions:default": [
"//tensorflow/core:framework_internal",
"//tensorflow/core:lib",
"//tensorflow/core:test",
],
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib",
"//tensorflow/core:portable_tensorflow_test_lib",
],
}),
) for conversion_mode, test_name, tags, args in generated_test_models_all() + merged_test_models()]
test_suite(
name = "generated_zip_tests",
tags = [
"gen_zip_test",
],
)
py_library(
name = "toco_convert",
srcs = ["toco_convert.py"],
data = [
"//tensorflow/lite/toco",
],
srcs_version = "PY3",
deps = [
":zip_test_utils",
"//tensorflow:tensorflow_py",
"//third_party/py/numpy",
],
)
py_library(
name = "op_tests",
srcs = glob(["op_tests/*.py"]),
srcs_version = "PY3",
deps = [
":zip_test_utils",
"//third_party/py/numpy",
"//tensorflow:tensorflow_py",
# copybara:uncomment_begin(b/186563810)
# "//third_party/py/tensorflow_addons",
# copybara:uncomment_end
],
)
py_library(
name = "generate_examples_lib",
srcs = ["generate_examples_lib.py"],
srcs_version = "PY3",
deps = [
":op_tests",
":zip_test_utils",
"//tensorflow:tensorflow_py",
],
)
py_library(
name = "zip_test_utils",
srcs = ["zip_test_utils.py"],
srcs_version = "PY3",
deps = [
":_pywrap_string_util",
":generate_examples_report",
"//tensorflow:tensorflow_py",
"//third_party/py/numpy",
],
)
py_binary(
name = "generate_examples",
srcs = ["generate_examples.py"],
python_version = "PY3",
srcs_version = "PY3",
deps = [
":generate_examples_lib",
":toco_convert",
"//tensorflow:tensorflow_py",
"//third_party/py/numpy",
"@six_archive//:six",
],
)
py_library(
name = "generate_examples_report",
srcs = ["generate_examples_report.py"],
srcs_version = "PY3",
)
cc_library(
name = "parse_testdata_lib",
srcs = ["parse_testdata.cc"],
hdrs = ["parse_testdata.h"],
deps = [
":message",
":split",
":test_runner",
"//tensorflow/lite:framework",
],
)
cc_library(
name = "message",
srcs = ["message.cc"],
hdrs = ["message.h"],
deps = [":tokenize"],
)
cc_test(
name = "message_test",
srcs = ["message_test.cc"],
deps = [
":message",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "split",
srcs = ["split.cc"],
hdrs = ["split.h"],
deps = [
"//tensorflow/lite:string",
],
)
cc_test(
name = "split_test",
size = "small",
srcs = ["split_test.cc"],
deps = [
":split",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "join",
hdrs = ["join.h"],
deps = ["//tensorflow/lite:string"],
)
cc_test(
name = "join_test",
size = "small",
srcs = ["join_test.cc"],
deps = [
":join",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "tflite_driver",
srcs = ["tflite_driver.cc"],
hdrs = ["tflite_driver.h"],
deps = [
":join",
":split",
":test_runner",
"@com_google_absl//absl/strings",
"//tensorflow/lite:builtin_op_data",
"//tensorflow/lite:framework",
"//tensorflow/lite:string_util",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/kernels:custom_ops",
"//tensorflow/lite/kernels/gradient:gradient_ops",
"//tensorflow/lite/kernels:reference_ops",
"//tensorflow/lite/kernels:test_delegate_providers_lib",
"//tensorflow/lite/kernels/parse_example:parse_example",
"//tensorflow/lite/kernels/perception:perception_ops",
"//tensorflow/lite/tools/evaluation:utils",
] + select({
"//tensorflow:ios": [],
"//conditions:default": ["//tensorflow/lite/delegates/flex:delegate"],
}),
)
# A convenient library of tflite delegate execution providers for tests based
# on the `tflite_driver` library.
cc_library(
name = "tflite_driver_delegate_providers",
deps = [
"//tensorflow/lite/tools/delegates:coreml_delegate_provider",
"//tensorflow/lite/tools/delegates:default_execution_provider",
"//tensorflow/lite/tools/delegates:external_delegate_provider",
"//tensorflow/lite/tools/delegates:gpu_delegate_provider",
"//tensorflow/lite/tools/delegates:hexagon_delegate_provider",
"//tensorflow/lite/tools/delegates:nnapi_delegate_provider",
"//tensorflow/lite/tools/delegates:xnnpack_delegate_provider",
],
alwayslink = 1,
)
tf_cc_test(
name = "tflite_driver_test",
size = "small",
srcs = ["tflite_driver_test.cc"],
data = [
"//tensorflow/lite:testdata/add_quantized_int8.bin",
"//tensorflow/lite:testdata/multi_add.bin",
],
tags = [
"tflite_not_portable_android",
"tflite_not_portable_ios",
],
deps = [
":tflite_driver",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "tokenize",
srcs = ["tokenize.cc"],
hdrs = ["tokenize.h"],
deps = [
"//tensorflow/lite:string",
],
)
cc_test(
name = "tokenize_test",
srcs = ["tokenize_test.cc"],
deps = [
":tokenize",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "test_runner",
hdrs = ["test_runner.h"],
deps = [
"//tensorflow/lite:string",
],
)
cc_library(
name = "util",
hdrs = ["util.h"],
deps = [
"//tensorflow/core/platform:logging",
"//tensorflow/lite:error_reporter",
"//tensorflow/lite:string",
"//tensorflow/lite/core/api",
],
)
cc_test(
name = "test_runner_test",
srcs = ["test_runner_test.cc"],
deps = [
":test_runner",
"@com_google_googletest//:gtest_main",
],
)
tf_cc_binary(
name = "nnapi_example",
srcs = ["nnapi_example.cc"],
deps = [
":parse_testdata_lib",
":tflite_driver",
"//tensorflow/lite/nnapi:nnapi_implementation",
],
)
cc_library(
name = "tf_driver",
srcs = ["tf_driver.cc"],
hdrs = ["tf_driver.h"],
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":join",
":split",
":test_runner",
"@com_google_absl//absl/strings",
"//tensorflow/lite:string_util",
] + select({
"//conditions:default": [
"//tensorflow/core:core_cpu",
"//tensorflow/core:framework",
"//tensorflow/core:lib",
"//tensorflow/core:tensorflow",
],
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib",
],
}),
)
tf_cc_test(
name = "tf_driver_test",
size = "small",
srcs = ["tf_driver_test.cc"],
data = ["//tensorflow/lite:testdata/multi_add.pb"],
tags = [
"tflite_not_portable",
],
deps = [
":tf_driver",
"//tensorflow/lite:string_util",
"@com_google_absl//absl/strings",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "generate_testspec",
srcs = ["generate_testspec.cc"],
hdrs = ["generate_testspec.h"],
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":join",
":split",
":tf_driver",
":tflite_driver",
"//tensorflow/lite:string",
] + select({
"//conditions:default": [
"//tensorflow/core:framework",
],
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib",
],
}),
)
tf_cc_test(
name = "generate_testspec_test",
size = "small",
srcs = ["generate_testspec_test.cc"],
tags = [
"tflite_not_portable",
],
deps = [
":generate_testspec",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "init_tensorflow",
srcs = [
"init_tensorflow.cc",
],
hdrs = [
"init_tensorflow.h",
],
visibility = [
# copybara:uncomment_begin(internal brella benchmark)
# "//learning/brain/mobile/lite/brella_benchmark:__subpackages__",
# copybara:uncomment_end
"//tensorflow/lite/delegates/flex:__subpackages__",
"//tensorflow/lite/java/src/main/native:__subpackages__",
"//tensorflow/lite/testing:__subpackages__",
"//tensorflow/lite/tools/benchmark:__subpackages__",
],
deps = select({
"//conditions:default": [
"//tensorflow/core:lib",
],
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib",
],
}),
)
cc_library(
name = "tflite_diff_util",
srcs = ["tflite_diff_util.cc"],
hdrs = ["tflite_diff_util.h"],
deps = [
":generate_testspec",
":parse_testdata_lib",
":tflite_driver",
"//tensorflow/lite:framework",
"//tensorflow/lite:string",
],
)
cc_library(
name = "tflite_diff_flags",
hdrs = ["tflite_diff_flags.h"],
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":split",
":tflite_diff_util",
":tflite_driver",
"@com_google_absl//absl/strings",
] + select({
"//conditions:default": [
"//tensorflow/core:framework_internal",
"//tensorflow/core:lib",
],
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib",
],
}),
)
tf_cc_test(
name = "tflite_diff_example_test",
size = "medium",
srcs = ["tflite_diff_example_test.cc"],
args = [
"--tensorflow_model=third_party/tensorflow/lite/testdata/multi_add.pb",
"--tflite_model=third_party/tensorflow/lite/testdata/multi_add.bin",
"--input_layer=a,b,c,d",
"--input_layer_type=float,float,float,float",
"--input_layer_shape=1,3,4,3:1,3,4,3:1,3,4,3:1,3,4,3",
"--output_layer=x,y",
],
data = [
"//tensorflow/lite:testdata/multi_add.bin",
"//tensorflow/lite:testdata/multi_add.pb",
],
tags = [
"no_cuda_on_cpu_tap",
"no_oss", # needs test data
"tflite_not_portable",
],
deps = [
":init_tensorflow",
":tflite_diff_flags",
":tflite_diff_util",
],
)
tf_cc_binary(
name = "tflite_diff",
srcs = ["tflite_diff_example_test.cc"],
deps = [
":init_tensorflow",
":tflite_diff_flags",
":tflite_diff_util",
],
)
tflite_model_test(
name = "tflite_model_example_test",
input_layer = "a,b,c,d",
input_layer_shape = "1,8,8,3:1,8,8,3:1,8,8,3:1,8,8,3",
input_layer_type = "float,float,float,float",
output_layer = "x,y",
tags = [
"no_cuda_on_cpu_tap",
"no_oss", # needs test data
"tflite_not_portable", # TODO(b/134772701): Enable after making this a proper GTest.
],
tensorflow_model_file = "//tensorflow/lite:testdata/multi_add.pb",
)
cc_library(
name = "string_util_lib",
srcs = ["string_util.cc"],
hdrs = ["string_util.h"],
deps = [
"//tensorflow/lite:string_util",
"//tensorflow/lite/python/interpreter_wrapper:numpy",
"//tensorflow/lite/python/interpreter_wrapper:python_utils",
"//third_party/py/numpy:headers",
"//third_party/python_runtime:headers",
"@com_google_absl//absl/strings",
],
)
# A selective built tflite for testing.
tflite_custom_cc_library(
name = "test_tflite_lib",
models = [
"//tensorflow/lite:testdata/add.bin",
"//tensorflow/lite:testdata/lstm.bin",
],
)
cc_test(
name = "selective_build_test",
srcs = ["selective_build_test.cc"],
data = [
"//tensorflow/lite:testdata/add.bin",
"//tensorflow/lite:testdata/lstm.bin",
],
tags = [
"no_mac", # b/161990368
"tflite_not_portable",
],
deps = [
":test_tflite_lib",
"//tensorflow/core:tflite_portable_logging",
"//tensorflow/lite:framework",
"//tensorflow/lite/c:common",
"@com_google_googletest//:gtest_main",
],
)
pybind_extension(
name = "_pywrap_string_util",
srcs = [
"string_util_wrapper.cc",
],
hdrs = ["string_util.h"],
features = ["-use_header_modules"],
module_name = "_pywrap_string_util",
deps = [
":string_util_lib",
"//tensorflow/lite/python/interpreter_wrapper:numpy",
"//tensorflow/python:pybind11_lib",
"//third_party/python_runtime:headers",
"@pybind11",
],
)
tflite_portable_test_suite()
tflite_custom_android_library(
name = "customized_tflite_for_add_ops",
models = ["//tensorflow/lite:testdata/add.bin"],
visibility = ["//visibility:public"],
)
edgetpu_ops = [
"add",
"avg_pool",
"concat",
"conv", # high error
"conv_relu",
"conv_relu1",
"conv_relu6",
"depthwiseconv", # high error
"expand_dims",
"fully_connected",
"l2norm", # high error
"maximum",
"max_pool",
"mean",
"minimum",
"mul",
"pad", # high error
"pack",
"relu",
"relu1",
"relu6",
"reshape",
"resize_bilinear",
"resize_nearest_neighbor",
"sigmoid",
"slice",
"softmax",
"space_to_depth",
"split",
"squeeze",
"strided_slice",
"sub",
"sum", # high error
"tanh",
"transpose",
"transpose_conv",
]
# copybara:uncomment_begin(google-only)
# [gen_zipped_test_file(
# name = "zip_%s_edgetpu" % op_name,
# file = "%s_edgetpu.zip" % op_name,
# flags = " --make_edgetpu_tests",
# toco = "//tensorflow/lite/toco:toco", # Unused
# ) for op_name in edgetpu_ops]
#
# edgetpu_targets = [":zip_%s_edgetpu" % op_name for op_name in edgetpu_ops]
#
# build_test(
# name = "gen_edgetpu_tests",
# targets = edgetpu_targets,
# )
# copybara:uncomment_end