Skip to content

Commit d3a5cd8

Browse files
committed
Update
[ghstack-poisoned]
1 parent e2cc507 commit d3a5cd8

File tree

3 files changed

+557
-0
lines changed

3 files changed

+557
-0
lines changed
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
# Copyright (c) Meta Platforms, Inc. and affiliates.
2+
# All rights reserved.
3+
#
4+
# This source code is licensed under the BSD-style license found in the
5+
# LICENSE file in the root directory of this source tree.
6+
7+
# pyre-unsafe
8+
9+
10+
import torch
11+
from executorch.backends.test.suite.flow import TestFlow
12+
13+
from executorch.backends.test.suite.operators import (
14+
dtype_test,
15+
operator_test,
16+
OperatorTest,
17+
)
18+
19+
class Model(torch.nn.Module):
20+
def __init__(
21+
self,
22+
kernel_size=3,
23+
stride=None,
24+
padding=0,
25+
dilation=1,
26+
return_indices=False,
27+
ceil_mode=False,
28+
):
29+
super().__init__()
30+
self.maxpool = torch.nn.MaxPool1d(
31+
kernel_size=kernel_size,
32+
stride=stride,
33+
padding=padding,
34+
dilation=dilation,
35+
return_indices=return_indices,
36+
ceil_mode=ceil_mode,
37+
)
38+
39+
def forward(self, x):
40+
return self.maxpool(x)
41+
42+
@operator_test
43+
class MaxPool1d(OperatorTest):
44+
@dtype_test
45+
def test_maxpool1d_dtype(self, flow: TestFlow, dtype) -> None:
46+
# Input shape: (batch_size, channels, length)
47+
self._test_op(
48+
Model().to(dtype),
49+
((torch.rand(1, 8, 100) * 10).to(dtype),),
50+
flow,
51+
)
52+
53+
def test_maxpool1d_kernel_size(self, flow: TestFlow) -> None:
54+
# Test with different kernel sizes
55+
self._test_op(
56+
Model(kernel_size=1),
57+
(torch.randn(1, 8, 100),),
58+
flow,
59+
)
60+
self._test_op(
61+
Model(kernel_size=5),
62+
(torch.randn(1, 8, 100),),
63+
flow,
64+
)
65+
66+
def test_maxpool1d_stride(self, flow: TestFlow) -> None:
67+
# Test with different stride values
68+
self._test_op(
69+
Model(stride=2),
70+
(torch.randn(1, 8, 100),),
71+
flow,
72+
)
73+
self._test_op(
74+
Model(stride=3),
75+
(torch.randn(1, 8, 100),),
76+
flow,
77+
)
78+
79+
def test_maxpool1d_padding(self, flow: TestFlow) -> None:
80+
# Test with different padding values
81+
self._test_op(
82+
Model(padding=1),
83+
(torch.randn(1, 8, 100),),
84+
flow,
85+
)
86+
self._test_op(
87+
Model(padding=2),
88+
(torch.randn(1, 8, 100),),
89+
flow,
90+
)
91+
92+
def test_maxpool1d_dilation(self, flow: TestFlow) -> None:
93+
# Test with different dilation values
94+
self._test_op(
95+
Model(dilation=2),
96+
(torch.randn(1, 8, 100),),
97+
flow,
98+
)
99+
self._test_op(
100+
Model(dilation=3),
101+
(torch.randn(1, 8, 100),),
102+
flow,
103+
)
104+
105+
def test_maxpool1d_ceil_mode(self, flow: TestFlow) -> None:
106+
# Test with ceil_mode=True
107+
self._test_op(
108+
Model(ceil_mode=True),
109+
(torch.randn(1, 8, 100),),
110+
flow,
111+
)
112+
113+
def test_maxpool1d_return_indices(self, flow: TestFlow) -> None:
114+
# Test with return_indices=True
115+
class ModelWithIndices(torch.nn.Module):
116+
def __init__(self):
117+
super().__init__()
118+
self.maxpool = torch.nn.MaxPool1d(
119+
kernel_size=3,
120+
stride=2,
121+
padding=1,
122+
return_indices=True,
123+
)
124+
125+
def forward(self, x):
126+
return self.maxpool(x)
127+
128+
input_tensor = torch.randn(1, 8, 100)
129+
130+
self._test_op(
131+
Model(kernel_size=3, stride=2, padding=1),
132+
(input_tensor,),
133+
flow,
134+
)
135+
136+
def test_maxpool1d_batch_sizes(self, flow: TestFlow) -> None:
137+
# Test with batch inputs
138+
self._test_op(
139+
Model(),
140+
(torch.randn(2, 8, 100),),
141+
flow,
142+
)
143+
self._test_op(
144+
Model(),
145+
(torch.randn(8, 8, 100),),
146+
flow,
147+
)
148+
self._test_op(
149+
Model(),
150+
(torch.randn(16, 8, 100),),
151+
flow,
152+
)
153+
154+
def test_maxpool1d_input_sizes(self, flow: TestFlow) -> None:
155+
# Test with different input sizes
156+
self._test_op(
157+
Model(),
158+
(torch.randn(1, 4, 100),),
159+
flow,
160+
)
161+
self._test_op(
162+
Model(),
163+
(torch.randn(1, 16, 100),),
164+
flow,
165+
)
166+
167+
def test_maxpool1d_combinations(self, flow: TestFlow) -> None:
168+
# Test with combinations of parameters
169+
self._test_op(
170+
Model(kernel_size=2, stride=2, padding=1),
171+
(torch.randn(1, 8, 100),),
172+
flow,
173+
)
174+
self._test_op(
175+
Model(kernel_size=3, stride=2, padding=1, ceil_mode=True),
176+
(torch.randn(1, 8, 100),),
177+
flow,
178+
)
179+
self._test_op(
180+
Model(kernel_size=2, stride=2, padding=1, dilation=2),
181+
(torch.randn(1, 8, 100),),
182+
flow,
183+
)
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# Copyright (c) Meta Platforms, Inc. and affiliates.
2+
# All rights reserved.
3+
#
4+
# This source code is licensed under the BSD-style license found in the
5+
# LICENSE file in the root directory of this source tree.
6+
7+
# pyre-unsafe
8+
9+
10+
import torch
11+
from executorch.backends.test.suite.flow import TestFlow
12+
13+
from executorch.backends.test.suite.operators import (
14+
dtype_test,
15+
operator_test,
16+
OperatorTest,
17+
)
18+
19+
class Model(torch.nn.Module):
20+
def __init__(
21+
self,
22+
kernel_size=3,
23+
stride=None,
24+
padding=0,
25+
dilation=1,
26+
return_indices=False,
27+
ceil_mode=False,
28+
):
29+
super().__init__()
30+
self.maxpool = torch.nn.MaxPool2d(
31+
kernel_size=kernel_size,
32+
stride=stride,
33+
padding=padding,
34+
dilation=dilation,
35+
return_indices=return_indices,
36+
ceil_mode=ceil_mode,
37+
)
38+
39+
def forward(self, x):
40+
return self.maxpool(x)
41+
42+
@operator_test
43+
class MaxPool2d(OperatorTest):
44+
@dtype_test
45+
def test_maxpool2d_dtype(self, flow: TestFlow, dtype) -> None:
46+
# Input shape: (batch_size, channels, height, width)
47+
self._test_op(
48+
Model().to(dtype),
49+
((torch.rand(1, 8, 20, 20) * 10).to(dtype),),
50+
flow,
51+
)
52+
53+
def test_maxpool2d_kernel_size(self, flow: TestFlow) -> None:
54+
# Test with different kernel sizes
55+
self._test_op(
56+
Model(kernel_size=1),
57+
(torch.randn(1, 8, 20, 20),),
58+
flow,
59+
)
60+
self._test_op(
61+
Model(kernel_size=5),
62+
(torch.randn(1, 8, 20, 20),),
63+
flow,
64+
)
65+
self._test_op(
66+
Model(kernel_size=(3, 2)),
67+
(torch.randn(1, 8, 20, 20),),
68+
flow,
69+
)
70+
71+
def test_maxpool2d_stride(self, flow: TestFlow) -> None:
72+
# Test with different stride values
73+
self._test_op(
74+
Model(stride=2),
75+
(torch.randn(1, 8, 20, 20),),
76+
flow,
77+
)
78+
self._test_op(
79+
Model(stride=(2, 1)),
80+
(torch.randn(1, 8, 20, 20),),
81+
flow,
82+
)
83+
84+
def test_maxpool2d_padding(self, flow: TestFlow) -> None:
85+
# Test with different padding values
86+
self._test_op(
87+
Model(padding=1),
88+
(torch.randn(1, 8, 20, 20),),
89+
flow,
90+
)
91+
self._test_op(
92+
Model(padding=(1, 2)),
93+
(torch.randn(1, 8, 20, 20),),
94+
flow,
95+
)
96+
97+
def test_maxpool2d_dilation(self, flow: TestFlow) -> None:
98+
# Test with different dilation values
99+
self._test_op(
100+
Model(dilation=2),
101+
(torch.randn(1, 8, 20, 20),),
102+
flow,
103+
)
104+
self._test_op(
105+
Model(dilation=(2, 1)),
106+
(torch.randn(1, 8, 20, 20),),
107+
flow,
108+
)
109+
110+
def test_maxpool2d_ceil_mode(self, flow: TestFlow) -> None:
111+
# Test with ceil_mode=True
112+
self._test_op(
113+
Model(ceil_mode=True),
114+
(torch.randn(1, 8, 20, 20),),
115+
flow,
116+
)
117+
118+
def test_maxpool2d_return_indices(self, flow: TestFlow) -> None:
119+
# Test with return_indices=True
120+
class ModelWithIndices(torch.nn.Module):
121+
def __init__(self):
122+
super().__init__()
123+
self.maxpool = torch.nn.MaxPool2d(
124+
kernel_size=3,
125+
stride=2,
126+
padding=1,
127+
return_indices=True,
128+
)
129+
130+
def forward(self, x):
131+
return self.maxpool(x)
132+
133+
# Create a test input tensor
134+
input_tensor = torch.randn(1, 8, 20, 20)
135+
136+
self._test_op(
137+
Model(kernel_size=3, stride=2, padding=1),
138+
(input_tensor,),
139+
flow,
140+
)
141+
142+
def test_maxpool2d_batch_sizes(self, flow: TestFlow) -> None:
143+
# Test with batch inputs
144+
self._test_op(
145+
Model(),
146+
(torch.randn(2, 8, 20, 20),),
147+
flow,
148+
)
149+
self._test_op(
150+
Model(),
151+
(torch.randn(8, 8, 20, 20),),
152+
flow,
153+
)
154+
self._test_op(
155+
Model(),
156+
(torch.randn(16, 8, 20, 20),),
157+
flow,
158+
)
159+
160+
def test_maxpool2d_input_sizes(self, flow: TestFlow) -> None:
161+
# Test with different input sizes
162+
self._test_op(
163+
Model(),
164+
(torch.randn(1, 4, 20, 20),),
165+
flow,
166+
)
167+
self._test_op(
168+
Model(),
169+
(torch.randn(1, 16, 20, 20),),
170+
flow,
171+
)
172+
173+
def test_maxpool2d_combinations(self, flow: TestFlow) -> None:
174+
# Test with combinations of parameters
175+
self._test_op(
176+
Model(kernel_size=2, stride=2, padding=1),
177+
(torch.randn(1, 8, 20, 20),),
178+
flow,
179+
)
180+
self._test_op(
181+
Model(kernel_size=3, stride=2, padding=1, ceil_mode=True),
182+
(torch.randn(1, 8, 21, 21),),
183+
flow,
184+
)
185+
self._test_op(
186+
Model(kernel_size=(2, 3), stride=(2, 1), padding=(1, 0), dilation=2),
187+
(torch.randn(1, 8, 20, 20),),
188+
flow,
189+
)

0 commit comments

Comments
 (0)