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

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# ----------------------------------------------------------------------------------------------------------- 

13 

14import ctypes 

15 

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 

24 

25 

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))}.") 

30 

31 

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 

40 

41 

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) 

50 

51 

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 

77 

78 

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.") 

83 

84 

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.") 

89 

90 

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 

99 

100 

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.") 

105 

106 

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.") 

111 

112 

113def check_list_int32(arg_name, arg_value): 

114 for value in arg_value: 

115 check_int32(arg_name, value) 

116 

117 

118def check_list_int64(arg_name, arg_value): 

119 for value in arg_value: 

120 check_int64(arg_name, value) 

121 

122 

123def check_list_uint64(arg_name, arg_value): 

124 for value in arg_value: 

125 check_uint64(arg_name, value) 

126 

127 

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.") 

132 

133 

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.")