Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 92 additions & 8 deletions backends/metax_gpu/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,106 @@ enable_testing()

find_package(Python REQUIRED COMPONENTS Interpreter)

file(GLOB_RECURSE PYTHON_TEST_SCRIPTS "unittest/*.py")
set(PADDLE_LEGACY_TEST_PATH
${CMAKE_CURRENT_LIST_DIR}/../../../Paddle/test/legacy_test)
set(METAX_UNIT_TEST_PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test)

file(GLOB_RECURSE PYTHON_TEST_SCRIPTS "${METAX_UNIT_TEST_PATH}/*.py")

list(
APPEND
PYTHON_TEST_SCRIPTS
${CMAKE_CURRENT_LIST_DIR}/../../../Paddle/test/legacy_test/test_tril_triu_op.py
)
${PADDLE_LEGACY_TEST_PATH}/test_accuracy_op.py
${PADDLE_LEGACY_TEST_PATH}/test_tril_triu_op.py
${PADDLE_LEGACY_TEST_PATH}/test_where_op.py
${PADDLE_LEGACY_TEST_PATH}/test_split_op.py
${PADDLE_LEGACY_TEST_PATH}/test_fill_constant_op.py
${PADDLE_LEGACY_TEST_PATH}/test_empty_op.py
${PADDLE_LEGACY_TEST_PATH}/test_sign_op.py
${PADDLE_LEGACY_TEST_PATH}/test_cast_op.py
${PADDLE_LEGACY_TEST_PATH}/test_index_add_op.py
${PADDLE_LEGACY_TEST_PATH}/test_unbind_op.py
${PADDLE_LEGACY_TEST_PATH}/test_put_along_axis_op.py
${PADDLE_LEGACY_TEST_PATH}/test_layer_norm_op.py
${PADDLE_LEGACY_TEST_PATH}/test_maximum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_accuracy_op.py
${PADDLE_LEGACY_TEST_PATH}/test_strided_slice_op.py
${PADDLE_LEGACY_TEST_PATH}/test_sum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_set_value_op.py
${PADDLE_LEGACY_TEST_PATH}/test_flatten_contiguous_range_op.py
${PADDLE_LEGACY_TEST_PATH}/test_top_k_op.py
${PADDLE_LEGACY_TEST_PATH}/test_subtract_op.py
${PADDLE_LEGACY_TEST_PATH}/test_softmax_op.py
${PADDLE_LEGACY_TEST_PATH}/test_cumsum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_greater_equal_op.py
${PADDLE_LEGACY_TEST_PATH}/test_elementwise_div_op.py
${PADDLE_LEGACY_TEST_PATH}/test_top_k_v2_op.py
${PADDLE_LEGACY_TEST_PATH}/test_stack_op.py
${PADDLE_LEGACY_TEST_PATH}/test_one_hot_v2_op.py
${PADDLE_LEGACY_TEST_PATH}/test_fill_any_op.py
${PADDLE_LEGACY_TEST_PATH}/test_gather_op.py
${PADDLE_LEGACY_TEST_PATH}/test_reshape_op.py
${PADDLE_LEGACY_TEST_PATH}/test_index_put_op.py
${PADDLE_LEGACY_TEST_PATH}/test_bitwise_op.py
${PADDLE_LEGACY_TEST_PATH}/test_max_op.py
${PADDLE_LEGACY_TEST_PATH}/test_pad_op.py
${PADDLE_LEGACY_TEST_PATH}/test_elementwise_pow_op.py
${PADDLE_LEGACY_TEST_PATH}/test_uniform_random_op.py
${PADDLE_LEGACY_TEST_PATH}/test_scatter_op.py
${PADDLE_LEGACY_TEST_PATH}/test_cast_op.py
${PADDLE_LEGACY_TEST_PATH}/test_zeros_like_op.py
${PADDLE_LEGACY_TEST_PATH}/test_compare_op.py
${PADDLE_LEGACY_TEST_PATH}/test_shape_op.py
${PADDLE_LEGACY_TEST_PATH}/test_tril_triu_op.py
${PADDLE_LEGACY_TEST_PATH}/test_slice_op.py
${PADDLE_LEGACY_TEST_PATH}/test_elementwise_add_op.py
${PADDLE_LEGACY_TEST_PATH}/test_index_put_op.py
${PADDLE_LEGACY_TEST_PATH}/test_bincount_op.py
${PADDLE_LEGACY_TEST_PATH}/test_assign_op.py
${PADDLE_LEGACY_TEST_PATH}/test_logical_op.py
${PADDLE_LEGACY_TEST_PATH}/test_squared_l2_norm_op.py
${PADDLE_LEGACY_TEST_PATH}/test_mean_op.py
${PADDLE_LEGACY_TEST_PATH}/test_fused_bias_act_op.py
${PADDLE_LEGACY_TEST_PATH}/test_expand_v2_op.py
${PADDLE_LEGACY_TEST_PATH}/test_adamw_op.py
${PADDLE_LEGACY_TEST_PATH}/test_gather_nd_op.py
${PADDLE_LEGACY_TEST_PATH}/test_concat_op.py
${PADDLE_LEGACY_TEST_PATH}/test_scatter_nd_op.py
${PADDLE_LEGACY_TEST_PATH}/test_elementwise_floordiv_op.py
${PADDLE_LEGACY_TEST_PATH}/test_elementwise_mul_op.py
${PADDLE_LEGACY_TEST_PATH}/test_transpose_op.py
${PADDLE_LEGACY_TEST_PATH}/test_einsum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_randint_op.py
${PADDLE_LEGACY_TEST_PATH}/test_c_embedding_op.py
${PADDLE_LEGACY_TEST_PATH}/test_numel_op.py
${PADDLE_LEGACY_TEST_PATH}/test_scale_op.py
${PADDLE_LEGACY_TEST_PATH}/test_softmax_with_cross_entropy_op.py
${PADDLE_LEGACY_TEST_PATH}/test_full_op.py
${PADDLE_LEGACY_TEST_PATH}/test_scatter_op.py
${PADDLE_LEGACY_TEST_PATH}/test_clip_op.py
${PADDLE_LEGACY_TEST_PATH}/test_reduce_op.py)

list(
REMOVE_ITEM
PYTHON_TEST_SCRIPTS
${CMAKE_CURRENT_LIST_DIR}/unittest/test_cumsum_op_metax.py
${CMAKE_CURRENT_LIST_DIR}/unittest/test_softmax_with_cross_entropy_op_metax.py
${CMAKE_CURRENT_LIST_DIR}/unittest/test_expand_v2_op_metax.py
${CMAKE_CURRENT_LIST_DIR}/unittest/test_tril_triu_op_metax.py
${CMAKE_CURRENT_LIST_DIR}/unittest/test_squared_l2_norm_op_metax.py)
${PADDLE_LEGACY_TEST_PATH}/test_sum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_cumsum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_softmax_with_cross_entropy_op.py
${PADDLE_LEGACY_TEST_PATH}/test_expand_v2_op.py
${PADDLE_LEGACY_TEST_PATH}/test_tril_triu_op.py
${PADDLE_LEGACY_TEST_PATH}/test_squared_l2_norm_op.py
${PADDLE_LEGACY_TEST_PATH}/test_softmax_op.py
${PADDLE_LEGACY_TEST_PATH}/test_index_add_op.py
${PADDLE_LEGACY_TEST_PATH}/test_elementwise_div_op.py
${PADDLE_LEGACY_TEST_PATH}/test_stack_op.py
${PADDLE_LEGACY_TEST_PATH}/test_gather_op.py
${PADDLE_LEGACY_TEST_PATH}/test_scatter_op.py
${PADDLE_LEGACY_TEST_PATH}/test_logical_op.py
${PADDLE_LEGACY_TEST_PATH}/test_mean_op.py
${PADDLE_LEGACY_TEST_PATH}/test_transpose_op.py
${PADDLE_LEGACY_TEST_PATH}/test_einsum_op.py
${PADDLE_LEGACY_TEST_PATH}/test_c_embedding_op.py
${PADDLE_LEGACY_TEST_PATH}/test_layer_norm_op.py)

list(REMOVE_DUPLICATES PYTHON_TEST_SCRIPTS)
foreach(test_script ${PYTHON_TEST_SCRIPTS})
Expand Down
108 changes: 108 additions & 0 deletions backends/metax_gpu/tests/scripts/check_diff_metax_legacy_unit_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
#!/bin/bash

# Copyright (c) 2025 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.

set -e

SOURCE_DIR="backends/metax_gpu/tests/unittest"
SEARCH_DIR="Paddle/test/legacy_test"
PREFIX_FILE="metax_prefixes.txt"
UNMATCHED_FILE="unmatched_files.txt"
EXIST_FILE="existing_files.txt"
MISS_FILE="missing_files.txt"

# 检查源路径是否存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "错误: 源路径 '$SOURCE_DIR' 不存在或不是一个目录"
exit 1
fi

# 检查搜索路径是否存在
if [ ! -d "$SEARCH_DIR" ]; then
echo "错误: 搜索路径 '$SEARCH_DIR' 不存在或不是一个目录"
exit 1
fi

# 第一步:提取前缀(根据新规则处理)
echo "第一步:从 '$SOURCE_DIR' 提取文件前缀(按_op/_metax规则)..."
> "$PREFIX_FILE" # 清空前缀文件
> "$UNMATCHED_FILE" # 清空未匹配文件列表

find "$SOURCE_DIR" -type f -name "*.py" | while read -r file; do
filename=$(basename "$file")
prefix=""

# 规则1:如果包含_op关键字,提取_op前的所有字符
if [[ "$filename" == *"_op"* ]]; then
prefix="${filename%%_op*}"
echo "提取前缀(_op规则): $prefix (来自 $filename)"
echo "$prefix" >> "$PREFIX_FILE"

# 规则2:如果没有_op但有_metax,提取_metax前的所有字符
elif [[ "$filename" == *"_metax"* ]]; then
prefix="${filename%%_metax*}"
echo "提取前缀(_metax规则): $prefix (来自 $filename)"
echo "$prefix" >> "$PREFIX_FILE"

# 规则3:都不包含,归类到未匹配
else
echo "未匹配的文件: $filename(不包含_op和_metax)"
echo "$filename" >> "$UNMATCHED_FILE"
fi
done

# 检查是否有提取到前缀或未匹配文件
prefix_count=$(wc -l < "$PREFIX_FILE")
unmatched_count=$(wc -l < "$UNMATCHED_FILE")

echo "提取完成 - 有效前缀: $prefix_count 个,未匹配文件: $unmatched_count 个"

if [ $prefix_count -eq 0 ] && [ $unmatched_count -eq 0 ]; then
echo "警告: 在 '$SOURCE_DIR' 中未找到任何以 '_metax.py' 结尾的文件"
exit 0
fi

# 第二步:在搜索路径中查找同名文件(仅搜索当前目录,不包括子文件夹)
echo -e "\n第二步:在 '$SEARCH_DIR' 中搜索同名文件(深度为1)..."
> "$EXIST_FILE" # 清空存在文件列表
> "$MISS_FILE" # 清空缺失文件列表

# 逐个处理每个前缀
while read -r prefix; do
# 跳过空行
if [ -z "$prefix" ]; then
continue
fi

# 只在搜索路径的直接目录下查找(深度为1)
found=$(find "$SEARCH_DIR" -maxdepth 1 -type f -name "${prefix}_op.py" -print -quit)

if [ -n "$found" ]; then
echo "$prefix -> 找到文件: $found"
echo "${prefix}_op.py" >> "$EXIST_FILE"
else
echo "$prefix -> 未找到同名文件"
echo "$prefix" >> "$MISS_FILE"
fi
done < "$PREFIX_FILE"

# 输出结果统计
exist_count=$(wc -l < "$EXIST_FILE")
miss_count=$(wc -l < "$MISS_FILE")

echo -e "\n处理完成!"
echo "找到同名文件的前缀数量: $exist_count(已保存到 $EXIST_FILE)"
echo "未找到同名文件的前缀数量: $miss_count(已保存到 $MISS_FILE)"
echo "未匹配规则的文件数量: $unmatched_count(已保存到 $UNMATCHED_FILE)"
39 changes: 39 additions & 0 deletions backends/metax_gpu/tests/unit_test/test_abs_metax.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# 2024 - Modified by MetaX Integrated Circuits (Shanghai) Co., Ltd. All Rights Reserved.
# # Copyright (c) 2021 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.

import unittest

import numpy as np

import paddle
import paddle.base.dygraph as dg


class TestAbs(unittest.TestCase):
def setUp(self):
self._dtypes = ["float32"]
self._places = [paddle.CustomPlace("metax_gpu", 0)]

def test_all_positive(self):
for dtype in self._dtypes:
x = 1 + 10 * np.random.random([13, 3, 3]).astype(dtype)
for place in self._places:
with dg.guard(place):
y = paddle.abs(paddle.to_tensor(x))
np.testing.assert_allclose(np.abs(x), y.numpy(), rtol=1e-05)


if __name__ == "__main__":
unittest.main()
Loading