提交 41b51c34 编写于 作者: W wjj19950828

add logical ops

上级 208a2821
......@@ -155,6 +155,7 @@ class OPConvertAutoScanTest(unittest.TestCase):
# max_opset_version is a fixed value
max_opset_version = 15
enable_onnx_checker = True
run_dynamic = False
self.num_ran_tests += 1
# add ignore testcases
......@@ -165,6 +166,9 @@ class OPConvertAutoScanTest(unittest.TestCase):
if not isinstance(op_names, (tuple, list)):
op_names = [op_names]
if not isinstance(min_opset_version, (tuple, list)):
min_opset_version = [min_opset_version]
input_type_list = None
if len(test_data_types) > 1:
input_type_list = list(product(*test_data_types))
......@@ -186,12 +190,14 @@ class OPConvertAutoScanTest(unittest.TestCase):
max_opset_version = config["max_opset_version"]
if "enable_onnx_checker" in config.keys():
enable_onnx_checker = config["enable_onnx_checker"]
if "run_dynamic" in config.keys():
run_dynamic = config["run_dynamic"]
for i in range(len(op_names)):
obj = ONNXConverter(op_names[i], min_opset_version,
obj = ONNXConverter(op_names[i], min_opset_version[i],
max_opset_version, op_names[i], inputs_name,
outputs_name, inputs_shape, delta, rtol, attrs,
enable_onnx_checker)
enable_onnx_checker, run_dynamic)
for input_type in input_type_list:
input_data = list()
for j, shape in enumerate(test_data_shapes):
......
......@@ -101,7 +101,8 @@ class ONNXConverter(object):
delta=1e-5,
rtol=1e-5,
attrs=[],
enable_onnx_checker=True):
enable_onnx_checker=True,
run_dynamic=False):
self.op_type = op_type
assert isinstance(self.op_type,
str), "The dtype of op_type must be string!"
......@@ -124,6 +125,7 @@ class ONNXConverter(object):
self.inputs_shape = inputs_shape
self.attrs = attrs
self.enable_onnx_checker = enable_onnx_checker
self.run_dynamic = run_dynamic
def set_input_data(self, group_name, *args):
"""
......@@ -175,23 +177,36 @@ class ONNXConverter(object):
onnx_path,
paddle_path,
convert_to_lite=False,
enable_onnx_checker=self.enable_onnx_checker)
enable_onnx_checker=self.enable_onnx_checker,
disable_feedback=True)
def _mk_paddle_res(self, ver):
"""
make paddle res
"""
paddle_path = os.path.join(
self.pwd, self.name,
self.name + '_' + str(ver) + '_paddle/inference_model/model')
paddle.disable_static()
# run
model = paddle.jit.load(paddle_path)
paddle_feed = list()
# input data
paddle_numpy_feed = list()
paddle_tensor_feed = list()
for i in range(len(self.input_feed)):
paddle_feed.append(self.input_feed[self.inputs_name[i]])
result = model(*paddle_feed)
paddle_numpy_feed.append(self.input_feed[self.inputs_name[i]])
paddle_tensor_feed.append(paddle.to_tensor(self.input_feed[self.inputs_name[i]]))
if self.run_dynamic:
paddle_path = os.path.join(
self.pwd, self.name,
self.name + '_' + str(ver) + '_paddle/')
import sys
sys.path.append(paddle_path)
from x2paddle_code import main
result = main(*paddle_tensor_feed)
else:
paddle_path = os.path.join(
self.pwd, self.name,
self.name + '_' + str(ver) + '_paddle/inference_model/model')
paddle.disable_static()
# run
model = paddle.jit.load(paddle_path)
result = model(*paddle_numpy_feed)
# get paddle outputs
if isinstance(result, (tuple, list)):
result = tuple(out.numpy() for out in result)
......
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# 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
#
# http://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.
from auto_scan_test import OPConvertAutoScanTest
from hypothesis import reproduce_failure
from onnxbase import randtool
import hypothesis.strategies as st
import numpy as np
import unittest
min_opset_version_map = {
"And": 7,
}
class TestLogicalopsConvert(OPConvertAutoScanTest):
"""
ONNX op: Logical ops
OPset version: 7~15
"""
def sample_convert_config(self, draw):
input1_shape = draw(
st.lists(
st.integers(
min_value=10, max_value=20), min_size=2, max_size=4))
if draw(st.booleans()):
input2_shape = [input1_shape[-1]]
else:
input2_shape = input1_shape
if draw(st.booleans()):
input2_shape = [1]
input_dtype = draw(st.sampled_from(["bool"]))
config = {
"op_names": ["And"],
"test_data_shapes": [input1_shape, input2_shape],
"test_data_types": [[input_dtype], [input_dtype]],
"inputs_shape": [],
"min_opset_version": 7,
"inputs_name": ["x", "y"],
"outputs_name": ["z"],
"delta": 1e-4,
"rtol": 1e-4,
"run_dynamic": True,
}
min_opset_versions = list()
for op_name in config["op_names"]:
min_opset_versions.append(min_opset_version_map[op_name])
config["min_opset_version"] = min_opset_versions
attrs = {}
return (config, attrs)
def test(self):
self.run_and_statis(max_examples=30)
if __name__ == "__main__":
unittest.main()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册