Coverage for /opt/cloud/slavespace/usr1/096471637100f3de0fcfc01072822a80/dttest/api/python/llm_datadist_v1/utils/utils.py: 81%
84 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-27 10:02 +0800
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-27 10:02 +0800
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3# -------------------------------------------------------------------
4# -----------------------------------------------------------------------------------------------------------
5# Copyright (c) 2025 Huawei Technologies Co., Ltd.
6# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
7# CANN Open Software License Agreement Version 2.0 (the "License").
8# Please refer to the License for details. You may not use this file except in compliance with the License.
9# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
10# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
11# See LICENSE in the root of the software repository for the full text of the License.
12# -----------------------------------------------------------------------------------------------------------
14import ctypes
16_MAX_UINT8 = ctypes.c_uint8(2**8 - 1).value
17_MAX_UINT16 = ctypes.c_uint16(2**16 - 1).value
18_MAX_INT32 = ctypes.c_int32(2**31 - 1).value
19_MIN_INT32 = ctypes.c_int32(0 - 2**31).value
20_MAX_UINT32 = ctypes.c_uint32(2**32 - 1).value
21_MAX_INT64 = ctypes.c_int64(2**63 - 1).value
22_MIN_INT64 = ctypes.c_int64(0 - 2**63).value
23_MAX_UINT64 = ctypes.c_uint64(2**64 - 1).value
26def check_inner(arg_name, arg_value, inner_class):
27 for val in arg_value:
28 if not check_type(val, inner_class):
29 raise TypeError(f"{arg_name} inner type only support {[inner_class]}, but got {format(type(val))}.")
32def check_type(obj, cls):
33 if isinstance(obj, cls):
34 return True
35 target_name = cls.__name__
36 for clz in type(obj).__mro__:
37 if clz.__name__ == target_name:
38 return True
39 return False
42def check_dict(arg_name, arg_value: dict, k_class, v_class, v_inner_class=None):
43 for k, v in arg_value.items():
44 if not check_type(k, k_class):
45 raise TypeError(f"{arg_name} dict key only support {k_class}, but got {format(type(k))}.")
46 if not check_type(v, v_class):
47 raise TypeError(f"{arg_name} dict value only support {v_class}, but got {format(type(v))}.")
48 elif v_inner_class is not None:
49 check_inner("dict value", v, v_inner_class)
52def check_isinstance(
53 arg_name,
54 arg_value,
55 classes,
56 inner_class=None,
57 extra_fmt="",
58 allow_none: bool = True,
59):
60 if allow_none and arg_value is None:
61 return arg_value
62 if not check_type(classes, list):
63 classes = [classes]
64 check = False
65 for clazz in classes:
66 if check_type(arg_value, clazz):
67 if inner_class:
68 check_inner(arg_name, arg_value, inner_class)
69 check = True
70 break
71 if not check:
72 raise TypeError(
73 f"{extra_fmt}{arg_name} only support {[clazz.__name__ for clazz in classes]}, "
74 f"but got {format(type(arg_value))}."
75 )
76 return arg_value
79def check_uint64(arg_name, arg_value):
80 check_isinstance(arg_name, arg_value, [int], allow_none=False)
81 if arg_value < 0 or arg_value > _MAX_UINT64:
82 raise ValueError(f"{arg_name}'s value is out of range,{arg_value} is not a uint64 value.")
85def check_int64(arg_name, arg_value):
86 check_isinstance(arg_name, arg_value, [int], allow_none=False)
87 if arg_value < _MIN_INT64 or arg_value > _MAX_INT64:
88 raise ValueError(f"{arg_name}'s value is out of range,{arg_value} is not a int64 value.")
91def check_positive_or_set_default(arg_name, arg_value, default=-1):
92 if arg_value is not None:
93 check_int64(arg_name, arg_value)
94 if arg_value < 0:
95 raise ValueError(f"{arg_name}'s value:{arg_value} is invalid, should be >= 0")
96 else:
97 arg_value = default
98 return arg_value
101def check_int32(arg_name, arg_value):
102 check_isinstance(arg_name, arg_value, [int], allow_none=False)
103 if arg_value < _MIN_INT32 or arg_value > _MAX_INT32:
104 raise ValueError(f"{arg_name}'s value is out of range,{arg_value} is not a int32 value.")
107def check_uint32(arg_name, arg_value):
108 check_isinstance(arg_name, arg_value, [int], allow_none=False)
109 if arg_value < 0 or arg_value > _MAX_UINT32:
110 raise ValueError(f"{arg_name}'s value is out of range,{arg_value} is not a uint32 value.")
113def check_list_int32(arg_name, arg_value):
114 for value in arg_value:
115 check_int32(arg_name, value)
118def check_list_int64(arg_name, arg_value):
119 for value in arg_value:
120 check_int64(arg_name, value)
123def check_list_uint64(arg_name, arg_value):
124 for value in arg_value:
125 check_uint64(arg_name, value)
128def check_uint16(arg_name, arg_value):
129 check_isinstance(arg_name, arg_value, [int], allow_none=False)
130 if arg_value < 0 or arg_value > _MAX_UINT16:
131 raise ValueError(f"{arg_name}'s value is out of range,{arg_value} is not a uint16 value.")
134def check_uint8(arg_name, arg_value):
135 check_isinstance(arg_name, arg_value, [int], allow_none=False)
136 if arg_value < 0 or arg_value > _MAX_UINT8:
137 raise ValueError(f"{arg_name}'s value is out of range,{arg_value} is not a uint8 value.")