120 lines
4.4 KiB
Python
120 lines
4.4 KiB
Python
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
import os
|
|
import re
|
|
import unittest
|
|
|
|
import onnx.backend.test
|
|
|
|
from onnx import defs
|
|
|
|
from onnx_tf import opset_version
|
|
from onnx_tf.backend import TensorflowBackend
|
|
from onnx_tf.common.legacy import legacy_onnx_pre_ver
|
|
from onnx_tf.common.legacy import legacy_opset_pre_ver
|
|
|
|
def get_onnxtf_supported_ops():
|
|
return opset_version.backend_opset_version
|
|
|
|
def get_onnx_supported_ops():
|
|
onnx_ops_dict = {}
|
|
for schema in defs.get_all_schemas():
|
|
onnx_ops_dict[schema.name] = {
|
|
'version': schema.since_version,
|
|
'deprecated': schema.deprecated
|
|
}
|
|
return onnx_ops_dict
|
|
|
|
# This is a pytest magic variable to load extra plugins
|
|
pytest_plugins = 'onnx.backend.test.report',
|
|
|
|
backend_test = onnx.backend.test.BackendTest(TensorflowBackend, __name__)
|
|
|
|
# The test cases excluded below should be considered permanent restrictions
|
|
# based on the TensorFlow implementation. Unimplemented operators will raise
|
|
# a BackendIsNotSupposedToImplementIt exception so that their test cases
|
|
# will pass and show a verbose message stating it was effectively skipped.
|
|
|
|
# https://github.com/onnx/onnx/issues/349
|
|
backend_test.exclude(r'[a-z,_]*GLU[a-z,_]*')
|
|
|
|
# TF does not support dialation and strides at the same time:
|
|
# Will produce strides > 1 not supported in conjunction with dilation_rate > 1
|
|
backend_test.exclude(r'[a-z,_]*dilated_strided[a-z,_]*')
|
|
backend_test.exclude(r'[a-z,_]*Conv2d_dilated[a-z,_]*')
|
|
|
|
# TF does not have column major max_pool_with_argmax
|
|
backend_test.exclude(
|
|
r'[a-z,_]*maxpool_with_argmax_2d_precomputed_strides[a-z,_]*')
|
|
|
|
# PRelu OnnxBackendPyTorchConvertedModelTest has wrong dim for broadcasting
|
|
backend_test.exclude(r'[a-z,_]*PReLU_[0-9]d_multiparam[a-z,_]*')
|
|
|
|
# TF does not support int8, int16, uint8, uint16, uint32, uint64 for
|
|
# tf.floormod and tf.truncatemod
|
|
backend_test.exclude(r'test_mod_[a-z,_]*uint[0-9]+')
|
|
backend_test.exclude(r'test_mod_[a-z,_]*int(8|(16))+')
|
|
|
|
# TF only support uint8, int32, int64 for indices and int32 for depth in
|
|
# tf.one_hot
|
|
backend_test.exclude(r'test_onehot_[a-z,_]*')
|
|
|
|
# TF doesn't support most of the attributes in resize op
|
|
# test_node.py will cover the test
|
|
backend_test.exclude(r'test_resize_[a-z,_]*')
|
|
|
|
# range is using loop in the model test but all the outputs datatype are
|
|
# missing in the body attribute of the loop
|
|
backend_test.exclude(
|
|
r'test_range_float_type_positive_delta_expanded[a-z,_]*')
|
|
backend_test.exclude(
|
|
r'test_range_int32_type_negative_delta_expanded[a-z,_]*')
|
|
|
|
# skip all the cumsum testcases because all the axis in the testcases
|
|
# are created as a 1-D 1 element tensor, but the spec clearly state
|
|
# that axis should be a 0-D tensor(scalar)
|
|
backend_test.exclude(r'test_cumsum_[a-z,_]*')
|
|
|
|
if legacy_opset_pre_ver(7):
|
|
backend_test.exclude(r'[a-z,_]*Upsample[a-z,_]*')
|
|
|
|
if 'TRAVIS' in os.environ:
|
|
backend_test.exclude('test_vgg19')
|
|
backend_test.exclude('zfnet512')
|
|
|
|
if legacy_onnx_pre_ver(1, 2):
|
|
# These following tests fails by a tiny margin with onnx<1.2:
|
|
backend_test.exclude('test_operator_add_broadcast_cpu')
|
|
backend_test.exclude('test_operator_add_size1_broadcast_cpu')
|
|
backend_test.exclude('test_operator_add_size1_right_broadcast_cpu')
|
|
backend_test.exclude('test_operator_add_size1_singleton_broadcast_cpu')
|
|
backend_test.exclude('test_averagepool_3d_default_cpu')
|
|
# Do not support consumed flag:
|
|
backend_test.exclude('test_batch_normalization')
|
|
# Do not support RNN testing on onnx<1.2 due to incorrect tests:
|
|
backend_test.exclude(r'test_operator_rnn_cpu')
|
|
backend_test.exclude(r'test_operator_lstm_cpu')
|
|
backend_test.exclude(r'test_operator_rnn_single_layer_cpu')
|
|
|
|
# The onnx test for cast, float to string, does not work
|
|
if not legacy_opset_pre_ver(9):
|
|
backend_test.exclude(r'[a-z,_]*cast[a-z,_]*')
|
|
|
|
if not legacy_opset_pre_ver(10):
|
|
# Do not support dilations != 1 for ConvTranspose, test is added in opset 10
|
|
backend_test.exclude(r'[a-z,_]*convtranspose_dilations[a-z,_]*')
|
|
|
|
# some NLL test cases do not use the `NegativeLogLikelihoodLoss` operator
|
|
# however they use the `where` operator which has some restrictions in TF 1.x
|
|
# (x,y tensors must have same shape, broadcastable shapes not supported)
|
|
backend_test.exclude(r'test_negative_log_likelihood_loss_[a-z,_]*')
|
|
|
|
# import all test cases at global scope to make them visible to python.unittest
|
|
globals().update(backend_test.enable_report().test_cases)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|