transforms_util.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:vizgen 作者: uva-graphics 项目源码 文件源码
def parse_call_args(defnode, array_var, call_args, prev_dimensions):
    """
    try split call_args into multiple dimensions
    """

    if isinstance(py_ast.get_ast(call_args).body[0].value, (ast.List, ast.Tuple)):
        call_args = call_args[1 : -1]
        dimensions = call_args.split(',')
        for i in range(len(dimensions)):
            dimension = dimensions[i]
            try:
                d_node = py_ast.get_ast(dimension.strip()).body[0].value
                if isinstance(d_node, ast.BinOp):
                    if isinstance(d_node.op, (ast.Add, ast.Sub)):
                        if isinstance(d_node.left, ast.Num) and not isinstance(d_node.right, ast.Num):
                            dimensions[i] = py_ast.dump_ast(d_node.right)
                        elif isinstance(d_node.right, ast.Num) and not isinstance(d_node.left, ast.Num):
                            dimensions[i] = py_ast.dump_ast(d_node.left)
                        else:
                            dimensions[i] = py_ast.dump_ast(d_node)
                    else:
                        dimensions[i] = py_ast.dump_ast(d_node)
                else:
                    dimensions[i] = py_ast.dump_ast(d_node)
            except:
                pass
        prev_dimensions.append(dimensions)
    else:
        arg_node = py_ast.get_ast(call_args).body[0].value
        if isinstance(arg_node, ast.Attribute):
            if arg_node.attr == 'shape':
                arg_shape_var = py_ast.dump_ast(arg_node.value)
                try:
                    (shape_assignnode, shape_call_args, shape_assign_funcname) = preallocate_find_assignnode_py_ast(defnode, defnode.name, arg_shape_var)
                    prev_dimensions.append([call_args])
                    prev_dimensions = parse_call_args(defnode, arg_shape_var, shape_call_args, prev_dimensions)
                except PreallocateNotFound:
                    dimensions = [call_args]
                    prev_dimensions.append(dimensions)
        else:
            dimensions = [call_args]
            prev_dimensions.append(dimensions)
    return prev_dimensions
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号