Add CI check for sequence ops' unittests (#21615)
parent
c3a88118ec
commit
0ba1d140d4
@ -0,0 +1,39 @@
|
||||
# Copyright (c) 2020 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 __future__ import print_function
|
||||
import sys
|
||||
|
||||
# For ops in this whitelist, the check of batch size = 1 input will be skipped.
|
||||
# Ops in this whitelist need to be fixed later.
|
||||
NEED_TO_FIX_OP_LIST = [
|
||||
'sequence_concat',
|
||||
'sequence_conv',
|
||||
'sequence_enumerate',
|
||||
'sequence_erase',
|
||||
'sequence_expand_as',
|
||||
'sequence_expand',
|
||||
'sequence_mask',
|
||||
'sequence_pad',
|
||||
'sequence_reshape',
|
||||
'sequence_reverse',
|
||||
'sequence_scatter',
|
||||
'sequence_slice',
|
||||
'sequence_softmax',
|
||||
'sequence_topk_avg_pooling',
|
||||
'sequence_unpad',
|
||||
]
|
||||
|
||||
op_name = sys.argv[1]
|
||||
print(op_name in NEED_TO_FIX_OP_LIST)
|
@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
PADDLE_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../" && pwd )"
|
||||
|
||||
function check_sequnece_op_unitests(){
|
||||
check_white_list_file=$1
|
||||
function_grep=$2
|
||||
INVALID_SEQUENCE_OP_UNITTEST=""
|
||||
all_sequence_ops=`grep '(sequence_' ${PADDLE_ROOT}/build/paddle/fluid/pybind/pybind.h | grep -Ev '^$' | cut -d'(' -f 2 | cut -d')' -f 1`
|
||||
for op_name in ${all_sequence_ops}; do
|
||||
in_white_list=`python ${PADDLE_ROOT}/${check_white_list_file} ${op_name}`
|
||||
if [ "${in_white_list}" == "True" ]; then
|
||||
continue
|
||||
fi
|
||||
unittest_file="python/paddle/fluid/tests/unittests/sequence/test_${op_name}.py"
|
||||
if [ ! -f "${PADDLE_ROOT}/${unittest_file}" ]; then
|
||||
INVALID_SEQUENCE_OP_UNITTEST="${INVALID_SEQUENCE_OP_UNITTEST}${unittest_file} (unittest file does not exists)\n"
|
||||
continue
|
||||
fi
|
||||
batch_size_1_funtion_calls=`grep ${function_grep} ${PADDLE_ROOT}/${unittest_file} || true`
|
||||
if [ "${batch_size_1_funtion_calls}" == "" ]; then
|
||||
INVALID_SEQUENCE_OP_UNITTEST="${INVALID_SEQUENCE_OP_UNITTEST}${unittest_file} (missing required function call)\n"
|
||||
fi
|
||||
done
|
||||
echo ${INVALID_SEQUENCE_OP_UNITTEST}
|
||||
}
|
||||
|
||||
check_white_list_file="python/paddle/fluid/tests/unittests/white_list/check_op_sequence_batch_1_input_white_list.py"
|
||||
function_grep="self.get_sequence_batch_size_1_input("
|
||||
INVALID_SEQUENCE_OP_UNITTEST=$(check_sequnece_op_unitests ${check_white_list_file} ${function_grep})
|
||||
if [ "${INVALID_SEQUENCE_OP_UNITTEST}" != "" ]; then
|
||||
echo "************************************"
|
||||
echo -e "It is required to include batch size 1 LoDTensor input in sequence OP test, please use self.get_sequence_batch_size_1_input() method."
|
||||
echo -e "For more information, please refer to [https://github.com/PaddlePaddle/Paddle/wiki/It-is-required-to-include-LoDTensor-input-with-batch_size=1-in-sequence-OP-test]."
|
||||
echo -e "Please check the following unittest files:\n${INVALID_SEQUENCE_OP_UNITTEST}"
|
||||
echo "************************************"
|
||||
exit 1
|
||||
fi
|
Loading…
Reference in new issue