Python code to construct AscGraph
from autofuse.pyautofuse import ascir
from autofuse.pyautofuse import Autofuser, AutofuserOptions
graph = ascir.HintGraph("autofuse_pointwise_0_FloorDiv_Cast_FloorDiv_Cast")
z0 = graph.create_axis("z0", 512)
z1 = graph.create_axis("z1", 256)
Data_0 = ascir.ops.Data("Cast_1_out0_graph/Data_0", graph)
Data_0.attr.sched.axis = [z0, z1]
Data_0.y.dtype = ascir.dtypes.int8
Data_0.y.axis = [z0, z1]
Data_0.y.size = [512, 256]
Data_0.y.strides = [256, 1]
Data_0.attr.ir_attr.index = 0
Load_0 = ascir.ops.Load("Cast_1_out0_graph/Load_0")
Load_0.attr.sched.axis = [z0, z1]
Load_0.x = Data_0.y
Load_0.y.dtype = ascir.dtypes.int8
Load_0.y.axis = [z0, z1]
Load_0.y.size = [512, 256]
Load_0.y.strides = [256, 1]
Load_0.attr.ir_attr.offset = 0
Scalar_0 = ascir.ops.Scalar("Cast_1_out0_graph/Scalar_0", graph)
Scalar_0.attr.sched.axis = [z0, z1]
Scalar_0.y.dtype = ascir.dtypes.int8
Scalar_0.y.axis = [z0, z1]
Scalar_0.y.size = [1, 1]
Scalar_0.y.strides = [0, 0]
Scalar_0.attr.ir_attr.value = '1'
Broadcast_0 = ascir.ops.Broadcast("Broadcast_0_Cast_1_out0_graph/FloorDiv_0_1")
Broadcast_0.attr.sched.axis = [z0, z1]
Broadcast_0.x = Scalar_0.y
Broadcast_0.y.dtype = ascir.dtypes.int8
Broadcast_0.y.axis = [z0, z1]
Broadcast_0.y.size = [1, 256]
Broadcast_0.y.strides = [0, 1]
Broadcast_1 = ascir.ops.Broadcast("Broadcast_1_Cast_1_out0_graph/FloorDiv_0_0")
Broadcast_1.attr.sched.axis = [z0, z1]
Broadcast_1.x = Broadcast_0.y
Broadcast_1.y.dtype = ascir.dtypes.int8
Broadcast_1.y.axis = [z0, z1]
Broadcast_1.y.size = [512, 256]
Broadcast_1.y.strides = [256, 1]
FloorDiv_0 = ascir.ops.FloorDiv("Cast_1_out0_graph/FloorDiv_0")
FloorDiv_0.attr.sched.axis = [z0, z1]
FloorDiv_0.x1 = Load_0.y
FloorDiv_0.x2 = Broadcast_1.y
FloorDiv_0.y.dtype = ascir.dtypes.int8
FloorDiv_0.y.axis = [z0, z1]
FloorDiv_0.y.size = [512, 256]
FloorDiv_0.y.strides = [256, 1]
Cast_0 = ascir.ops.Cast("Cast_1_out0_graph/Cast_0")
Cast_0.attr.sched.axis = [z0, z1]
Cast_0.x = FloorDiv_0.y
Cast_0.y.dtype = ascir.dtypes.int16
Cast_0.y.axis = [z0, z1]
Cast_0.y.size = [512, 256]
Cast_0.y.strides = [256, 1]
Scalar_1 = ascir.ops.Scalar("Cast_1_out0_graph/Scalar_1", graph)
Scalar_1.attr.sched.axis = [z0, z1]
Scalar_1.y.dtype = ascir.dtypes.int16
Scalar_1.y.axis = [z0, z1]
Scalar_1.y.size = [1, 1]
Scalar_1.y.strides = [0, 0]
Scalar_1.attr.ir_attr.value = '2'
Broadcast_2 = ascir.ops.Broadcast("Broadcast_0_Cast_1_out0_graph/FloorDiv_1_3")
Broadcast_2.attr.sched.axis = [z0, z1]
Broadcast_2.x = Scalar_1.y
Broadcast_2.y.dtype = ascir.dtypes.int16
Broadcast_2.y.axis = [z0, z1]
Broadcast_2.y.size = [1, 256]
Broadcast_2.y.strides = [0, 1]
Broadcast_3 = ascir.ops.Broadcast("Broadcast_1_Cast_1_out0_graph/FloorDiv_1_2")
Broadcast_3.attr.sched.axis = [z0, z1]
Broadcast_3.x = Broadcast_2.y
Broadcast_3.y.dtype = ascir.dtypes.int16
Broadcast_3.y.axis = [z0, z1]
Broadcast_3.y.size = [512, 256]
Broadcast_3.y.strides = [256, 1]
FloorDiv_1 = ascir.ops.FloorDiv("Cast_1_out0_graph/FloorDiv_1")
FloorDiv_1.attr.sched.axis = [z0, z1]
FloorDiv_1.x1 = Cast_0.y
FloorDiv_1.x2 = Broadcast_3.y
FloorDiv_1.y.dtype = ascir.dtypes.int16
FloorDiv_1.y.axis = [z0, z1]
FloorDiv_1.y.size = [512, 256]
FloorDiv_1.y.strides = [256, 1]
Cast_1 = ascir.ops.Cast("Cast_1_out0_graph/Cast_1")
Cast_1.attr.sched.axis = [z0, z1]
Cast_1.x = FloorDiv_1.y
Cast_1.y.dtype = ascir.dtypes.uint8
Cast_1.y.axis = [z0, z1]
Cast_1.y.size = [512, 256]
Cast_1.y.strides = [256, 1]
Store_0 = ascir.ops.Store("Cast_1_out0_graph/Store_0")
Store_0.attr.sched.axis = [z0, z1]
Store_0.x = Cast_1.y
Store_0.y.dtype = ascir.dtypes.uint8
Store_0.y.axis = [z0, z1]
Store_0.y.size = [512, 256]
Store_0.y.strides = [256, 1]
Output_0 = ascir.ops.Output("Cast_1_out0_graph/Output_0")
Output_0.attr.sched.axis = [z0, z1]
Output_0.x = Store_0.y
Output_0.y.dtype = ascir.dtypes.uint8
Output_0.attr.ir_attr.index = 0
fuser = Autofuser(AutofuserOptions())
schedule_results = fuser.schedule(graph)
tiling_def, host_impl, device_impl = fuser.codegen(schedule_results)


Python code to construct AscGraph
from autofuse.pyautofuse import ascir
from autofuse.pyautofuse import Autofuser, AutofuserOptions
graph = ascir.HintGraph("autofuse_4_Abs_Abs_Abs_Mul_Add_ConcatV2D")
z0 = graph.create_axis("z0", 6)
z1 = graph.create_axis("z1", 14)
z2 = graph.create_axis("z2", 20)
z3 = graph.create_axis("z3", 2)
Data_0 = ascir.ops.Data("MatMul_to_mul_out0_graph/Data_0", graph)
Data_0.attr.sched.axis = [z0, z1, z2, z3]
Data_0.y.dtype = ascir.dtypes.float32
Data_0.y.axis = [z0, z1, z2, z3]
Data_0.y.size = [1, 14, 20, 1]
Data_0.y.strides = [0, 20, 1, 0]
Data_0.attr.ir_attr.index = 0
Load_0 = ascir.ops.Load("MatMul_to_mul_out0_graph/Load_0")
Load_0.attr.sched.axis = [z0, z1, z2, z3]
Load_0.x = Data_0.y
Load_0.y.dtype = ascir.dtypes.float32
Load_0.y.axis = [z0, z1, z2, z3]
Load_0.y.size = [1, 14, 20, 1]
Load_0.y.strides = [0, 20, 1, 0]
Load_0.attr.ir_attr.offset = 0
Abs_0 = ascir.ops.Abs("MatMul_to_mul_out0_graph/Abs_0")
Abs_0.attr.sched.axis = [z0, z1, z2, z3]
Abs_0.x = Load_0.y
Abs_0.y.dtype = ascir.dtypes.float32
Abs_0.y.axis = [z0, z1, z2, z3]
Abs_0.y.size = [1, 14, 20, 1]
Abs_0.y.strides = [0, 20, 1, 0]
Abs_1 = ascir.ops.Abs("MatMul_to_mul_out0_graph/Abs_1")
Abs_1.attr.sched.axis = [z0, z1, z2, z3]
Abs_1.x = Abs_0.y
Abs_1.y.dtype = ascir.dtypes.float32
Abs_1.y.axis = [z0, z1, z2, z3]
Abs_1.y.size = [1, 14, 20, 1]
Abs_1.y.strides = [0, 20, 1, 0]
Abs_2 = ascir.ops.Abs("MatMul_to_mul_out0_graph/Abs_2")
Abs_2.attr.sched.axis = [z0, z1, z2, z3]
Abs_2.x = Abs_1.y
Abs_2.y.dtype = ascir.dtypes.float32
Abs_2.y.axis = [z0, z1, z2, z3]
Abs_2.y.size = [1, 14, 20, 1]
Abs_2.y.strides = [0, 20, 1, 0]
Data_1 = ascir.ops.Data("MatMul_to_mul_out0_graph/Data_1", graph)
Data_1.attr.sched.axis = [z0, z1, z2, z3]
Data_1.y.dtype = ascir.dtypes.float32
Data_1.y.axis = [z0, z1, z2, z3]
Data_1.y.size = [1, 14, 20, 1]
Data_1.y.strides = [0, 20, 1, 0]
Data_1.attr.ir_attr.index = 1
Load_1 = ascir.ops.Load("MatMul_to_mul_out0_graph/Load_1")
Load_1.attr.sched.axis = [z0, z1, z2, z3]
Load_1.x = Data_1.y
Load_1.y.dtype = ascir.dtypes.float32
Load_1.y.axis = [z0, z1, z2, z3]
Load_1.y.size = [1, 14, 20, 1]
Load_1.y.strides = [0, 20, 1, 0]
Load_1.attr.ir_attr.offset = 0
Mul_0 = ascir.ops.Mul("MatMul_to_mul_out0_graph/Mul_0")
Mul_0.attr.sched.axis = [z0, z1, z2, z3]
Mul_0.x1 = Abs_2.y
Mul_0.x2 = Load_1.y
Mul_0.y.dtype = ascir.dtypes.float32
Mul_0.y.axis = [z0, z1, z2, z3]
Mul_0.y.size = [1, 14, 20, 1]
Mul_0.y.strides = [0, 20, 1, 0]
Broadcast_0 = ascir.ops.Broadcast("Broadcast_0_Add_out0_graph/Add_0_13")
Broadcast_0.attr.sched.axis = [z0, z1, z2, z3]
Broadcast_0.x = Mul_0.y
Broadcast_0.y.dtype = ascir.dtypes.float32
Broadcast_0.y.axis = [z0, z1, z2, z3]
Broadcast_0.y.size = [1, 14, 20, 2]
Broadcast_0.y.strides = [0, 40, 2, 1]
Broadcast_1 = ascir.ops.Broadcast("Broadcast_1_Add_out0_graph/Add_0_12")
Broadcast_1.attr.sched.axis = [z0, z1, z2, z3]
Broadcast_1.x = Broadcast_0.y
Broadcast_1.y.dtype = ascir.dtypes.float32
Broadcast_1.y.axis = [z0, z1, z2, z3]
Broadcast_1.y.size = [6, 14, 20, 2]
Broadcast_1.y.strides = [560, 40, 2, 1]
Data_2 = ascir.ops.Data("Add_out0_graph/Data_1", graph)
Data_2.attr.sched.axis = [z0, z1, z2, z3]
Data_2.y.dtype = ascir.dtypes.float32
Data_2.y.axis = [z0, z1, z2, z3]
Data_2.y.size = [6, 14, 20, 2]
Data_2.y.strides = [560, 40, 2, 1]
Data_2.attr.ir_attr.index = 2
Store_0 = ascir.ops.Store("concat_out0_graph/Store_0")
Store_0.attr.sched.axis = [z0, z1, z2, z3]
Store_0.x = Broadcast_0.y
Store_0.y.dtype = ascir.dtypes.float32
Store_0.y.axis = [z0, z1, z2, z3]
Store_0.y.size = [1, 14, 20, 2]
Store_0.y.strides = [0, 40, 2, 1]
Output_0 = ascir.ops.Output("concat_out0_graph/Output_0")
Output_0.attr.sched.axis = [z0, z1, z2, z3]
Output_0.x = Store_0.y
Output_0.y.dtype = ascir.dtypes.float32
Output_0.attr.ir_attr.index = 1
Load_2 = ascir.ops.Load("Add_out0_graph/Load_1")
Load_2.attr.sched.axis = [z0, z1, z2, z3]
Load_2.x = Data_2.y
Load_2.y.dtype = ascir.dtypes.float32
Load_2.y.axis = [z0, z1, z2, z3]
Load_2.y.size = [6, 14, 20, 2]
Load_2.y.strides = [560, 40, 2, 1]
Load_2.attr.ir_attr.offset = 0
Add_0 = ascir.ops.Add("Add_out0_graph/Add_0")
Add_0.attr.sched.axis = [z0, z1, z2, z3]
Add_0.x1 = Broadcast_1.y
Add_0.x2 = Load_2.y
Add_0.y.dtype = ascir.dtypes.float32
Add_0.y.axis = [z0, z1, z2, z3]
Add_0.y.size = [6, 14, 20, 2]
Add_0.y.strides = [560, 40, 2, 1]
Store_1 = ascir.ops.Store("Add_out0_graph/Store_0")
Store_1.attr.sched.axis = [z0, z1, z2, z3]
Store_1.x = Add_0.y
Store_1.y.dtype = ascir.dtypes.float32
Store_1.y.axis = [z0, z1, z2, z3]
Store_1.y.size = [6, 14, 20, 2]
Store_1.y.strides = [560, 40, 2, 1]
Output_1 = ascir.ops.Output("Add_out0_graph/Output_0")
Output_1.attr.sched.axis = [z0, z1, z2, z3]
Output_1.x = Store_1.y
Output_1.y.dtype = ascir.dtypes.float32
Output_1.attr.ir_attr.index = 0
fuser = Autofuser(AutofuserOptions())
schedule_results = fuser.schedule(graph)
tiling_def, host_impl, device_impl = fuser.codegen(schedule_results)