check_op_params
函数功能
算子定义函数的装饰器,为算子定义函数提供基础的校验功能,对算子的输入、输出、属性及Kernel Name进行基础校验。
函数原型
check_op_params(*type_args, **type_kwargs)
参数说明
参数名 |
说明 |
---|---|
type_args |
可变长度的列表,取值范围为•输入输出参数、•属性与•KERNEL_NAME。 |
type_kwargs |
保留参数,暂不使用。 |
- 输入输出参数
表1 输入输出参数校验 参数取值
参数含义
REQUIRED_INPUT
表明在算子定义函数中该参数是算子的必须输入。
会做如下常规校验:
- 必须为dict类型。
- dict中必须包含如下信息:
OpParamInfoKey.SHAPE、OpParamInfoKey.FORMAT、OpParamInfoKey.ORI_SHAPE、OpParamInfoKey.ORI_FORMAT、OpParamInfoKey.DTYPE
OpParamInfoKey的参数说明请参见OpParamInfoKey。
- shape必须是list或者tuple类型,shape中dim必须是int类型,且0<=rank<=8,0<=各Dim<=2**31,0<=Shape的总size<=2**31。
- dtype必须在("int8", "int16", "int32", "int64", "float16", "float32", "float64")中。
- format必须在TensorFormat的定义中。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_INPUT
表明在算子定义函数中,该参数是算子的可选输入。
可以为None,其他的校验同REQUIRED_INPUT。
若校验失败,则抛出校验错误的异常RuntimeError。
DYNAMIC_INPUT
表明在算子定义函数中,该参数是算子的动态输入。
需要为list或者tuple类型,且list/tuple中的每个元素都要满足REQUIRED_INPUT的校验。
若校验失败,则抛出校验错误的异常。
REQUIRED_OUTPUT
表明在算子定义函数中,该参数是算子的必须输出。
校验规则同REQUIRED_INPUT。
OPTION_OUTPUT
表明在算子定义函数中,该参数是算子的可选输出。
校验规则同OPTION_INPUT。
DYNAMIC_OUTPUT
表明在算子定义函数中,该参数是算子的可选输出。
校验规则同DYNAMIC_INPUT。
- 属性
表2 属性校验 参数取值
参数含义
REQUIRED_ATTR_INT
表明在算子定义函数中,该参数是算子的必选属性,属性的类型需要为INT(int64)类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_FLOAT
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为FLOAT(float32)类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_STR
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为String类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_BOOL
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为Bool类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_TYPE
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为STRING类型,值必须在["int8", "int16", "int32", "int64", "float16", "float32", "float64"]中。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_LIST_INT
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为INT类型的list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_LIST_FLOAT
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为float类型的list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_LIST_BOOL
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为bool类型的list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
REQUIRED_ATTR_LIST_LIST_INT
表明在算子定义函数中,该参数是算子的必须属性,属性的类型需要为INT类型的二维list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_INT
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为INT类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_FLOAT
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为FLOAT(float32)类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_STR
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为string类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_BOOL
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为bool类型。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_TYPE
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为STRING类型,值必须在["int8", "int16", "int32", "int64", "float16", "float32", "float64"]中。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_LIST_INT
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为INT(int64)类型的list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_LIST_FLOAT
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为float类型的list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_LIST_BOOL
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为bool类型的list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
OPTION_ATTR_LIST_LIST_INT
表明在算子定义函数中,该参数是算子的可选属性。
- 可以为None。
- 若不为None,则需要为INT(int64)类型的二维list或者tuple。
若校验失败,则抛出校验错误的异常(RuntimeError)。
- KERNEL_NAME
表明算子定义函数中,该参数是算子的kernel name,kernel name需要小于等于200个字符,并且只能包含[A-Za-z_][A-Za-z0-9_]这些字符。
若校验失败,则抛出校验错误的异常(RuntimeError)。
返回值说明
无返回值,校验错误会抛出RuntimeError。
约束说明
无。
调用示例
@check_op_params(REQUIRED_INPUT, REQUIRED_OUTPUT, REQUIRED_ATTR_STR, KERNEL_NAME) def sample_op(x, y, attr_a, kernel_name):
调用装饰器函数check_op_params对算子定义函数sample_op的入参进行校验,如下所示:
- 入参x需要满足“必选输入”的要求,详情请参见输入输出参数。
- 入参y需要满足“必选输出”的要求,详情请参见输入输出参数。
- 入参attr_a需要满足“必需string类型的属性”的要求,详情请参见属性。
- 入参kernel_name需要满足“KERNEL_NAME”的要求,详情请参见KERNEL_NAME。