@@ -1696,6 +1696,63 @@ def verify_pad(input_shape, pads, mode="constant", value=0.0):
16961696 verify_pad ((1 , 3 , 4 , 5 ), [0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 ], "reflect" )
16971697
16981698
1699+ @pytest .mark .parametrize ("dynamic" , [True , False ])
1700+ def test_pad_v2 (dynamic ):
1701+
1702+ if dynamic :
1703+ pytest .skip ("Dynamic pad not supported" )
1704+
1705+ def verify_pad (input_shape , pads , mode = "constant" , value = 0.0 ):
1706+ indata = np .random .normal (size = input_shape ).astype (np .float32 )
1707+ # numpy expect result
1708+ len_dim = len (pads ) // 2
1709+ np_pads = [(pads [i ], pads [i + len_dim ]) for i in range (len_dim )]
1710+ pads = np .array (pads )
1711+ # onnx graph
1712+ if mode in ["edge" , "reflect" ]:
1713+ outdata = np .pad (indata , pad_width = np_pads , mode = mode )
1714+ node = helper .make_node (
1715+ "Pad" , inputs = ["input" ], outputs = ["output" ], mode = mode , pads = pads
1716+ )
1717+ graph = helper .make_graph (
1718+ [node ],
1719+ "pad_test" ,
1720+ inputs = [
1721+ helper .make_tensor_value_info ("input" , TensorProto .FLOAT , list (indata .shape ))
1722+ ],
1723+ outputs = [
1724+ helper .make_tensor_value_info ("output" , TensorProto .FLOAT , list (outdata .shape ))
1725+ ],
1726+ )
1727+ else :
1728+ outdata = np .pad (indata , pad_width = np_pads , mode = "constant" , constant_values = value )
1729+ node = helper .make_node (
1730+ "Pad" ,
1731+ inputs = ["input" ],
1732+ outputs = ["output" ],
1733+ mode = "constant" ,
1734+ pads = pads ,
1735+ value = value ,
1736+ )
1737+ graph = helper .make_graph (
1738+ [node ],
1739+ "pad_test" ,
1740+ inputs = [
1741+ helper .make_tensor_value_info ("input" , TensorProto .FLOAT , list (indata .shape ))
1742+ ],
1743+ outputs = [
1744+ helper .make_tensor_value_info ("output" , TensorProto .FLOAT , list (outdata .shape ))
1745+ ],
1746+ )
1747+ model = helper .make_model (graph , producer_name = "pad_test" )
1748+ check_correctness (model = model , opset = 10 )
1749+
1750+ verify_pad ((2 , 2 ), [0 , 1 , 0 , 0 ], "constant" , 0.0 )
1751+ verify_pad ((2 , 3 ), [1 , 0 , 0 , 1 ], "constant" , 0.0 )
1752+ verify_pad ((3 , 2 ), [0 , 0 , 1 , 0 ], "constant" , 5.0 )
1753+ verify_pad ((1 , 3 , 4 , 5 ), [0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 ], "reflect" )
1754+
1755+
16991756@pytest .mark .parametrize ("fp_arith" , [np .float16 , np .float32 ])
17001757@pytest .mark .parametrize ("dynamic" , [True , False ])
17011758def test_split (fp_arith , dynamic ):
0 commit comments