def expr_init(rhs): if rhs is None: return Expr(_ti_core.expr_alloca()) if isinstance(rhs, Matrix): if rhs.in_python_scope or isinstance(rhs, _IntermediateMatrix): return Matrix(rhs.to_list()) return rhs if isinstance(rhs, Struct): if rhs.in_python_scope or isinstance(rhs, _IntermediateStruct): return Struct(rhs.to_dict()) return rhs if isinstance(rhs, list): return [expr_init(e) for e in rhs] if isinstance(rhs, tuple): return tuple(expr_init(e) for e in rhs) if isinstance(rhs, dict): return dict((key, expr_init(val)) for key, val in rhs.items()) if isinstance(rhs, _ti_core.DataType): return rhs if isinstance(rhs, _ti_core.Arch): return rhs if isinstance(rhs, ti.ndrange): return rhs if isinstance(rhs, MeshElementFieldProxy): return rhs if isinstance(rhs, MeshRelationAccessProxy): return rhs if hasattr(rhs, '_data_oriented'): return rhs return Expr(_ti_core.expr_var(Expr(rhs).ptr))
def expr_init(rhs): if rhs is None: return Expr(get_runtime().prog.current_ast_builder().expr_alloca()) if isinstance(rhs, Matrix) and (hasattr(rhs, "_DIM")): return type(rhs)(*rhs.to_list()) if isinstance(rhs, Matrix): return Matrix(rhs.to_list()) if isinstance(rhs, Struct): return Struct(rhs.to_dict()) if isinstance(rhs, list): return [expr_init(e) for e in rhs] if isinstance(rhs, tuple): return tuple(expr_init(e) for e in rhs) if isinstance(rhs, dict): return dict((key, expr_init(val)) for key, val in rhs.items()) if isinstance(rhs, _ti_core.DataType): return rhs if isinstance(rhs, _ti_core.Arch): return rhs if isinstance(rhs, _Ndrange): return rhs if isinstance(rhs, MeshElementFieldProxy): return rhs if isinstance(rhs, MeshRelationAccessProxy): return rhs if hasattr(rhs, '_data_oriented'): return rhs return Expr(get_runtime().prog.current_ast_builder().expr_var( Expr(rhs).ptr))