1*da0073e9SAndroid Build Coastguard Worker #pragma once
2*da0073e9SAndroid Build Coastguard Worker
3*da0073e9SAndroid Build Coastguard Worker #include <ATen/core/DeprecatedTypeProperties.h>
4*da0073e9SAndroid Build Coastguard Worker #include <c10/macros/Macros.h>
5*da0073e9SAndroid Build Coastguard Worker #include <c10/util/Exception.h>
6*da0073e9SAndroid Build Coastguard Worker #include <c10/util/Half.h>
7*da0073e9SAndroid Build Coastguard Worker #include <c10/util/Metaprogramming.h>
8*da0073e9SAndroid Build Coastguard Worker #include <c10/util/complex.h>
9*da0073e9SAndroid Build Coastguard Worker #include <c10/util/string_view.h>
10*da0073e9SAndroid Build Coastguard Worker
11*da0073e9SAndroid Build Coastguard Worker #ifdef __CUDACC__
12*da0073e9SAndroid Build Coastguard Worker #include <cuda.h> // For CUDA_VERSION
13*da0073e9SAndroid Build Coastguard Worker #endif
14*da0073e9SAndroid Build Coastguard Worker
15*da0073e9SAndroid Build Coastguard Worker #ifdef TEMPLATE_SELECTIVE_BUILD
16*da0073e9SAndroid Build Coastguard Worker #include <ATen/selected_mobile_ops.h>
17*da0073e9SAndroid Build Coastguard Worker #else
18*da0073e9SAndroid Build Coastguard Worker namespace at {
19*da0073e9SAndroid Build Coastguard Worker /**
20*da0073e9SAndroid Build Coastguard Worker * The method should_include_kernel_dtype() returns true/false
21*da0073e9SAndroid Build Coastguard Worker * based on whether the switching code for a specific dtype should be
22*da0073e9SAndroid Build Coastguard Worker * included based on build time constants generated from tracing model
23*da0073e9SAndroid Build Coastguard Worker * execution. This method will be implemented via code-generation and
24*da0073e9SAndroid Build Coastguard Worker * included in this file when code-gen is ready.
25*da0073e9SAndroid Build Coastguard Worker */
should_include_kernel_dtype(const char *,at::ScalarType)26*da0073e9SAndroid Build Coastguard Worker inline constexpr bool should_include_kernel_dtype(
27*da0073e9SAndroid Build Coastguard Worker const char* /*kernel_tag_str*/,
28*da0073e9SAndroid Build Coastguard Worker at::ScalarType /*scalar_type*/
29*da0073e9SAndroid Build Coastguard Worker ) {
30*da0073e9SAndroid Build Coastguard Worker return true;
31*da0073e9SAndroid Build Coastguard Worker }
32*da0073e9SAndroid Build Coastguard Worker } // namespace at
33*da0073e9SAndroid Build Coastguard Worker #endif
34*da0073e9SAndroid Build Coastguard Worker
35*da0073e9SAndroid Build Coastguard Worker /**
36*da0073e9SAndroid Build Coastguard Worker * In the Facebook internal build (using BUCK), this macro is enabled by
37*da0073e9SAndroid Build Coastguard Worker * passing in -c pt.enable_record_kernel_dtype=1 when building the tracer
38*da0073e9SAndroid Build Coastguard Worker * binary.
39*da0073e9SAndroid Build Coastguard Worker */
40*da0073e9SAndroid Build Coastguard Worker #if defined ENABLE_RECORD_KERNEL_FUNCTION_DTYPE
41*da0073e9SAndroid Build Coastguard Worker namespace at {
42*da0073e9SAndroid Build Coastguard Worker namespace detail {
43*da0073e9SAndroid Build Coastguard Worker TORCH_API void record_kernel_function_dtype(std::string name);
44*da0073e9SAndroid Build Coastguard Worker }
45*da0073e9SAndroid Build Coastguard Worker } // namespace at
46*da0073e9SAndroid Build Coastguard Worker
47*da0073e9SAndroid Build Coastguard Worker #define RECORD_KERNEL_FUNCTION_DTYPE(NAME, enum_type) \
48*da0073e9SAndroid Build Coastguard Worker at::detail::record_kernel_function_dtype( \
49*da0073e9SAndroid Build Coastguard Worker std::string(NAME) + "$" + toString(enum_type));
50*da0073e9SAndroid Build Coastguard Worker #else
51*da0073e9SAndroid Build Coastguard Worker #define RECORD_KERNEL_FUNCTION_DTYPE(NAME, enum_type)
52*da0073e9SAndroid Build Coastguard Worker #endif
53*da0073e9SAndroid Build Coastguard Worker
54*da0073e9SAndroid Build Coastguard Worker #define AT_PRIVATE_CHECK_SELECTIVE_BUILD(enum_type) \
55*da0073e9SAndroid Build Coastguard Worker do { \
56*da0073e9SAndroid Build Coastguard Worker if constexpr (!at::should_include_kernel_dtype( \
57*da0073e9SAndroid Build Coastguard Worker at_dispatch_name, enum_type)) { \
58*da0073e9SAndroid Build Coastguard Worker AT_ERROR( \
59*da0073e9SAndroid Build Coastguard Worker "dtype '", \
60*da0073e9SAndroid Build Coastguard Worker toString(enum_type), \
61*da0073e9SAndroid Build Coastguard Worker "' not selected for kernel tag ", \
62*da0073e9SAndroid Build Coastguard Worker at_dispatch_name); \
63*da0073e9SAndroid Build Coastguard Worker } \
64*da0073e9SAndroid Build Coastguard Worker } while (0)
65*da0073e9SAndroid Build Coastguard Worker
66*da0073e9SAndroid Build Coastguard Worker #define AT_PRIVATE_CASE_TYPE_USING_HINT(enum_type, HINT, ...) \
67*da0073e9SAndroid Build Coastguard Worker case enum_type: { \
68*da0073e9SAndroid Build Coastguard Worker AT_PRIVATE_CHECK_SELECTIVE_BUILD(enum_type); \
69*da0073e9SAndroid Build Coastguard Worker using HINT C10_UNUSED = c10::impl::ScalarTypeToCPPTypeT<enum_type>; \
70*da0073e9SAndroid Build Coastguard Worker return __VA_ARGS__(); \
71*da0073e9SAndroid Build Coastguard Worker }
72*da0073e9SAndroid Build Coastguard Worker
73*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE(enum_type, ...) \
74*da0073e9SAndroid Build Coastguard Worker AT_PRIVATE_CASE_TYPE_USING_HINT(enum_type, scalar_t, __VA_ARGS__)
75*da0073e9SAndroid Build Coastguard Worker
76*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_QINT(enum_type, scalar_type, ...) \
77*da0073e9SAndroid Build Coastguard Worker case enum_type: { \
78*da0073e9SAndroid Build Coastguard Worker AT_PRIVATE_CHECK_SELECTIVE_BUILD(enum_type); \
79*da0073e9SAndroid Build Coastguard Worker using scalar_t = scalar_type; \
80*da0073e9SAndroid Build Coastguard Worker using underlying_t C10_UNUSED = typename scalar_t::underlying; \
81*da0073e9SAndroid Build Coastguard Worker const auto& SCALAR_TYPE C10_UNUSED = enum_type; \
82*da0073e9SAndroid Build Coastguard Worker const auto& UNDERLYING_TYPE C10_UNUSED = toUnderlying(enum_type); \
83*da0073e9SAndroid Build Coastguard Worker return __VA_ARGS__(); \
84*da0073e9SAndroid Build Coastguard Worker }
85*da0073e9SAndroid Build Coastguard Worker
86*da0073e9SAndroid Build Coastguard Worker #define AT_QINT_SUB_BYTE_PRIVATE_CASE_TYPE( \
87*da0073e9SAndroid Build Coastguard Worker enum_type, scalar_type, bitwidth, qmin, qmax, ...) \
88*da0073e9SAndroid Build Coastguard Worker case enum_type: { \
89*da0073e9SAndroid Build Coastguard Worker AT_PRIVATE_CHECK_SELECTIVE_BUILD(enum_type); \
90*da0073e9SAndroid Build Coastguard Worker using scalar_t = scalar_type; \
91*da0073e9SAndroid Build Coastguard Worker using underlying_t C10_UNUSED = typename scalar_t::underlying; \
92*da0073e9SAndroid Build Coastguard Worker const auto& SCALAR_TYPE C10_UNUSED = enum_type; \
93*da0073e9SAndroid Build Coastguard Worker const auto& UNDERLYING_TYPE C10_UNUSED = toUnderlying(enum_type); \
94*da0073e9SAndroid Build Coastguard Worker C10_UNUSED int bit_width = bitwidth; \
95*da0073e9SAndroid Build Coastguard Worker C10_UNUSED int64_t quant_min = qmin; \
96*da0073e9SAndroid Build Coastguard Worker C10_UNUSED int64_t quant_max = qmax; \
97*da0073e9SAndroid Build Coastguard Worker return __VA_ARGS__(); \
98*da0073e9SAndroid Build Coastguard Worker }
99*da0073e9SAndroid Build Coastguard Worker
100*da0073e9SAndroid Build Coastguard Worker namespace detail {
101*da0073e9SAndroid Build Coastguard Worker
scalar_type(at::ScalarType s)102*da0073e9SAndroid Build Coastguard Worker inline at::ScalarType scalar_type(at::ScalarType s) {
103*da0073e9SAndroid Build Coastguard Worker return s;
104*da0073e9SAndroid Build Coastguard Worker }
105*da0073e9SAndroid Build Coastguard Worker
106*da0073e9SAndroid Build Coastguard Worker C10_DEPRECATED_MESSAGE(
107*da0073e9SAndroid Build Coastguard Worker "passing at::DeprecatedTypeProperties to an AT_DISPATCH macro is deprecated, "
108*da0073e9SAndroid Build Coastguard Worker "pass an at::ScalarType instead")
scalar_type(const at::DeprecatedTypeProperties & t)109*da0073e9SAndroid Build Coastguard Worker inline at::ScalarType scalar_type(const at::DeprecatedTypeProperties& t) {
110*da0073e9SAndroid Build Coastguard Worker return t.scalarType();
111*da0073e9SAndroid Build Coastguard Worker }
112*da0073e9SAndroid Build Coastguard Worker
113*da0073e9SAndroid Build Coastguard Worker C10_DEPRECATED_MESSAGE(
114*da0073e9SAndroid Build Coastguard Worker "AT_DISPATCH_ALL_TYPES_AND_HALF is deprecated, "
115*da0073e9SAndroid Build Coastguard Worker "use AT_DISPATCH_ALL_TYPES_AND(at::ScalarType::Half, ...) instead")
deprecated_AT_DISPATCH_ALL_TYPES_AND_HALF()116*da0073e9SAndroid Build Coastguard Worker inline void deprecated_AT_DISPATCH_ALL_TYPES_AND_HALF() {}
117*da0073e9SAndroid Build Coastguard Worker
118*da0073e9SAndroid Build Coastguard Worker C10_DEPRECATED_MESSAGE(
119*da0073e9SAndroid Build Coastguard Worker "AT_DISPATCH_ALL_TYPES_AND_HALF_AND_COMPLEX is deprecated, "
120*da0073e9SAndroid Build Coastguard Worker "use AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND(at::ScalarType::Half, ...) "
121*da0073e9SAndroid Build Coastguard Worker "instead")
deprecated_AT_DISPATCH_ALL_TYPES_AND_HALF_AND_COMPLEX()122*da0073e9SAndroid Build Coastguard Worker inline void deprecated_AT_DISPATCH_ALL_TYPES_AND_HALF_AND_COMPLEX() {}
123*da0073e9SAndroid Build Coastguard Worker
124*da0073e9SAndroid Build Coastguard Worker } // namespace detail
125*da0073e9SAndroid Build Coastguard Worker
126*da0073e9SAndroid Build Coastguard Worker // The AT_DISPATCH_* family of macros provides the ability to
127*da0073e9SAndroid Build Coastguard Worker // conveniently generate specializations of a kernel over all of the
128*da0073e9SAndroid Build Coastguard Worker // dtypes we care about in PyTorch. We call it "dispatch" because
129*da0073e9SAndroid Build Coastguard Worker // we are "dispatching" to the correct, dtype-specific kernel.
130*da0073e9SAndroid Build Coastguard Worker //
131*da0073e9SAndroid Build Coastguard Worker // A standard usage looks like:
132*da0073e9SAndroid Build Coastguard Worker //
133*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_ALL_TYPES(self.scalar_type(), "op_name", [&] {
134*da0073e9SAndroid Build Coastguard Worker // // Your code here, with 'scalar_t' now defined to
135*da0073e9SAndroid Build Coastguard Worker // // be the dtype in question
136*da0073e9SAndroid Build Coastguard Worker // });
137*da0073e9SAndroid Build Coastguard Worker //
138*da0073e9SAndroid Build Coastguard Worker // There are many variations of this macro, so it's important to
139*da0073e9SAndroid Build Coastguard Worker // understand exactly /which/ dtypes you want to get instantiated, as
140*da0073e9SAndroid Build Coastguard Worker // well as what the "default" set is.
141*da0073e9SAndroid Build Coastguard Worker //
142*da0073e9SAndroid Build Coastguard Worker // The default set of dtypes that are instantiated (e.g., by
143*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_ALL_TYPES) are floating point types (float, double),
144*da0073e9SAndroid Build Coastguard Worker // and integral types (int32_t, int64_t, int16_t, int8_t, uint8_t),
145*da0073e9SAndroid Build Coastguard Worker // but NOT booleans (bool), half-precision floats (Half) or
146*da0073e9SAndroid Build Coastguard Worker // complex number (c10::complex<float>, c10::complex<double>).
147*da0073e9SAndroid Build Coastguard Worker // This "cut" is somewhat historical (the default types are the
148*da0073e9SAndroid Build Coastguard Worker // ones that TH historically supported), but it also reflects the
149*da0073e9SAndroid Build Coastguard Worker // fact that the non-default types are "poorly" behaved (booleans
150*da0073e9SAndroid Build Coastguard Worker // are NOT integers mod 2, half precision operations ~essentially
151*da0073e9SAndroid Build Coastguard Worker // don't exist on CPU, complex numbers are an experimental application).
152*da0073e9SAndroid Build Coastguard Worker //
153*da0073e9SAndroid Build Coastguard Worker // Here are the questions you should generally ask to decide which
154*da0073e9SAndroid Build Coastguard Worker // dispatch you want:
155*da0073e9SAndroid Build Coastguard Worker //
156*da0073e9SAndroid Build Coastguard Worker // 1. Is this an integral or floating point specific operation?
157*da0073e9SAndroid Build Coastguard Worker // (If so, you'll want one of the FLOATING or INTEGRAL macros.)
158*da0073e9SAndroid Build Coastguard Worker //
159*da0073e9SAndroid Build Coastguard Worker // 2. Should half be supported? (If you're on CPU, the answer is almost
160*da0073e9SAndroid Build Coastguard Worker // definitely no. If you do want support, use one of the AND_HALF
161*da0073e9SAndroid Build Coastguard Worker // macros)
162*da0073e9SAndroid Build Coastguard Worker //
163*da0073e9SAndroid Build Coastguard Worker // Much rarer situations:
164*da0073e9SAndroid Build Coastguard Worker //
165*da0073e9SAndroid Build Coastguard Worker // 3. Should bool be supported? (You often have to write your kernel
166*da0073e9SAndroid Build Coastguard Worker // differently if arithmetic operations are involved.) If so,
167*da0073e9SAndroid Build Coastguard Worker // Use AT_DISPATCH_ALL_TYPES_AND along with ScalarType::Bool
168*da0073e9SAndroid Build Coastguard Worker //
169*da0073e9SAndroid Build Coastguard Worker // 4. Should complex be supported? The answer is almost always no,
170*da0073e9SAndroid Build Coastguard Worker // unless you are working on "generic" code that should work on
171*da0073e9SAndroid Build Coastguard Worker // all dtypes.
172*da0073e9SAndroid Build Coastguard Worker //
173*da0073e9SAndroid Build Coastguard Worker // Parameters:
174*da0073e9SAndroid Build Coastguard Worker // -----------
175*da0073e9SAndroid Build Coastguard Worker //
176*da0073e9SAndroid Build Coastguard Worker // 1. The NAME argument is a "tag" that is used to trace and then
177*da0073e9SAndroid Build Coastguard Worker // conditionally compile fragments of the case statements such
178*da0073e9SAndroid Build Coastguard Worker // that the kernel functions are specialized only for the dtypes
179*da0073e9SAndroid Build Coastguard Worker // that are needed. The NAME parameter *must* be a build time
180*da0073e9SAndroid Build Coastguard Worker // const char* (can't be std::string, etc...)
181*da0073e9SAndroid Build Coastguard Worker //
182*da0073e9SAndroid Build Coastguard Worker // Please ensure that the NAME is unique for every implementation
183*da0073e9SAndroid Build Coastguard Worker // or you run the risk of over-including code for the kernel
184*da0073e9SAndroid Build Coastguard Worker // functions. There is no risk of missing out on any code, so
185*da0073e9SAndroid Build Coastguard Worker // it's mostly a risk of a Type-2 error, and not a Type-1 error.
186*da0073e9SAndroid Build Coastguard Worker //
187*da0073e9SAndroid Build Coastguard Worker // Switch-like syntax:
188*da0073e9SAndroid Build Coastguard Worker // -------------------
189*da0073e9SAndroid Build Coastguard Worker // There is also a switch-case like syntax which is useful if a kernel
190*da0073e9SAndroid Build Coastguard Worker // needs to be specialized for particular scalar types
191*da0073e9SAndroid Build Coastguard Worker //
192*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_SWITCH(self.scalar_type(), "op_name",
193*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_CASE_INTEGRAL_TYPES([&] {
194*da0073e9SAndroid Build Coastguard Worker // op_integral<scalar_t>(iter);
195*da0073e9SAndroid Build Coastguard Worker // })
196*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_CASE_FLOATING_TYPES([&] {
197*da0073e9SAndroid Build Coastguard Worker // op_floating<scalar_t>(iter);
198*da0073e9SAndroid Build Coastguard Worker // })
199*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_CASE(kBool, [&] {
200*da0073e9SAndroid Build Coastguard Worker // op_bool(iter);
201*da0073e9SAndroid Build Coastguard Worker // })
202*da0073e9SAndroid Build Coastguard Worker // );
203*da0073e9SAndroid Build Coastguard Worker //
204*da0073e9SAndroid Build Coastguard Worker // For each AT_DISPATCH_FOO macro, there is a corresponding
205*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_CASE_FOO macro which can be used inside of an
206*da0073e9SAndroid Build Coastguard Worker // AT_DISPATCH_SWITCH block.
207*da0073e9SAndroid Build Coastguard Worker
208*da0073e9SAndroid Build Coastguard Worker // NB: the the_type variable is not used, but we have kept it for
209*da0073e9SAndroid Build Coastguard Worker // backwards compatibility. It's probably not used by anyone though;
210*da0073e9SAndroid Build Coastguard Worker // but we're just being safe (and it doesn't hurt.) Note we must
211*da0073e9SAndroid Build Coastguard Worker // use it to shut up warnings about unused store.
212*da0073e9SAndroid Build Coastguard Worker
213*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_SWITCH(TYPE, NAME, ...) \
214*da0073e9SAndroid Build Coastguard Worker [&] { \
215*da0073e9SAndroid Build Coastguard Worker const auto& the_type = TYPE; \
216*da0073e9SAndroid Build Coastguard Worker constexpr const char* at_dispatch_name = NAME; \
217*da0073e9SAndroid Build Coastguard Worker /* don't use TYPE again in case it is an expensive or side-effect op */ \
218*da0073e9SAndroid Build Coastguard Worker at::ScalarType _st = ::detail::scalar_type(the_type); \
219*da0073e9SAndroid Build Coastguard Worker RECORD_KERNEL_FUNCTION_DTYPE(at_dispatch_name, _st); \
220*da0073e9SAndroid Build Coastguard Worker switch (_st) { \
221*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__ \
222*da0073e9SAndroid Build Coastguard Worker default: \
223*da0073e9SAndroid Build Coastguard Worker AT_ERROR( \
224*da0073e9SAndroid Build Coastguard Worker '"', \
225*da0073e9SAndroid Build Coastguard Worker at_dispatch_name, \
226*da0073e9SAndroid Build Coastguard Worker "\" not implemented for '", \
227*da0073e9SAndroid Build Coastguard Worker toString(_st), \
228*da0073e9SAndroid Build Coastguard Worker "'"); \
229*da0073e9SAndroid Build Coastguard Worker } \
230*da0073e9SAndroid Build Coastguard Worker }()
231*da0073e9SAndroid Build Coastguard Worker
232*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_TYPES(...) \
233*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Double, __VA_ARGS__) \
234*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Float, __VA_ARGS__)
235*da0073e9SAndroid Build Coastguard Worker
236*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_TYPES(TYPE, NAME, ...) \
237*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__))
238*da0073e9SAndroid Build Coastguard Worker
239*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_TYPES_AND_HALF(...) \
240*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Double, __VA_ARGS__) \
241*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Float, __VA_ARGS__) \
242*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Half, __VA_ARGS__)
243*da0073e9SAndroid Build Coastguard Worker
244*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_TYPES_AND_HALF(TYPE, NAME, ...) \
245*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
246*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_FLOATING_TYPES_AND_HALF(__VA_ARGS__))
247*da0073e9SAndroid Build Coastguard Worker
248*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_REDUCED_FLOATING_TYPES(...) \
249*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Half, __VA_ARGS__) \
250*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::BFloat16, __VA_ARGS__)
251*da0073e9SAndroid Build Coastguard Worker
252*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_REDUCED_FLOATING_TYPES(TYPE, NAME, ...) \
253*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
254*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_REDUCED_FLOATING_TYPES(__VA_ARGS__))
255*da0073e9SAndroid Build Coastguard Worker
256*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_TYPES_AND(SCALARTYPE, ...) \
257*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__) \
258*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
259*da0073e9SAndroid Build Coastguard Worker
260*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_TYPES_AND(SCALARTYPE, TYPE, NAME, ...) \
261*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
262*da0073e9SAndroid Build Coastguard Worker TYPE, \
263*da0073e9SAndroid Build Coastguard Worker NAME, \
264*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES_AND(SCALARTYPE, __VA_ARGS__))
265*da0073e9SAndroid Build Coastguard Worker
266*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, ...) \
267*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__) \
268*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
269*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__)
270*da0073e9SAndroid Build Coastguard Worker
271*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_TYPES_AND2( \
272*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, TYPE, NAME, ...) \
273*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
274*da0073e9SAndroid Build Coastguard Worker TYPE, \
275*da0073e9SAndroid Build Coastguard Worker NAME, \
276*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES_AND2( \
277*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, __VA_ARGS__))
278*da0073e9SAndroid Build Coastguard Worker
279*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_TYPES_AND3( \
280*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, ...) \
281*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__) \
282*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
283*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
284*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__)
285*da0073e9SAndroid Build Coastguard Worker
286*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_TYPES_AND3( \
287*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, TYPE, NAME, ...) \
288*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
289*da0073e9SAndroid Build Coastguard Worker TYPE, \
290*da0073e9SAndroid Build Coastguard Worker NAME, \
291*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES_AND3( \
292*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, __VA_ARGS__))
293*da0073e9SAndroid Build Coastguard Worker
294*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_TYPES_AND4( \
295*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, ...) \
296*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__) \
297*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
298*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
299*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
300*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__)
301*da0073e9SAndroid Build Coastguard Worker
302*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_TYPES_AND4( \
303*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, TYPE, NAME, ...) \
304*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
305*da0073e9SAndroid Build Coastguard Worker TYPE, \
306*da0073e9SAndroid Build Coastguard Worker NAME, \
307*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES_AND4( \
308*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, __VA_ARGS__))
309*da0073e9SAndroid Build Coastguard Worker
310*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_COMPLEX_TYPES(...) \
311*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::ComplexDouble, __VA_ARGS__) \
312*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::ComplexFloat, __VA_ARGS__)
313*da0073e9SAndroid Build Coastguard Worker
314*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_COMPLEX_TYPES(TYPE, NAME, ...) \
315*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_COMPLEX_TYPES(__VA_ARGS__))
316*da0073e9SAndroid Build Coastguard Worker
317*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_COMPLEX_TYPES_AND(SCALARTYPE, ...) \
318*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_COMPLEX_TYPES(__VA_ARGS__) \
319*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
320*da0073e9SAndroid Build Coastguard Worker
321*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_COMPLEX_TYPES_AND(SCALARTYPE, TYPE, NAME, ...) \
322*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
323*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_COMPLEX_TYPES_AND(SCALARTYPE, __VA_ARGS__))
324*da0073e9SAndroid Build Coastguard Worker
325*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(...) \
326*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__) \
327*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_COMPLEX_TYPES(__VA_ARGS__)
328*da0073e9SAndroid Build Coastguard Worker
329*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES(TYPE, NAME, ...) \
330*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
331*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__))
332*da0073e9SAndroid Build Coastguard Worker
333*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND1(SCALARTYPE, ...) \
334*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__) \
335*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
336*da0073e9SAndroid Build Coastguard Worker
337*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND1( \
338*da0073e9SAndroid Build Coastguard Worker SCALARTYPE, TYPE, NAME, ...) \
339*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
340*da0073e9SAndroid Build Coastguard Worker TYPE, \
341*da0073e9SAndroid Build Coastguard Worker NAME, \
342*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND1( \
343*da0073e9SAndroid Build Coastguard Worker SCALARTYPE, __VA_ARGS__))
344*da0073e9SAndroid Build Coastguard Worker
345*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND2( \
346*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, ...) \
347*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__) \
348*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
349*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__)
350*da0073e9SAndroid Build Coastguard Worker
351*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND2( \
352*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, TYPE, NAME, ...) \
353*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
354*da0073e9SAndroid Build Coastguard Worker TYPE, \
355*da0073e9SAndroid Build Coastguard Worker NAME, \
356*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND2( \
357*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, __VA_ARGS__))
358*da0073e9SAndroid Build Coastguard Worker
359*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND3( \
360*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, ...) \
361*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__) \
362*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
363*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
364*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__)
365*da0073e9SAndroid Build Coastguard Worker
366*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND3( \
367*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, TYPE, NAME, ...) \
368*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
369*da0073e9SAndroid Build Coastguard Worker TYPE, \
370*da0073e9SAndroid Build Coastguard Worker NAME, \
371*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND3( \
372*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, __VA_ARGS__))
373*da0073e9SAndroid Build Coastguard Worker
374*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND4( \
375*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, ...) \
376*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__) \
377*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
378*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
379*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
380*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__)
381*da0073e9SAndroid Build Coastguard Worker
382*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND4( \
383*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, TYPE, NAME, ...) \
384*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
385*da0073e9SAndroid Build Coastguard Worker TYPE, \
386*da0073e9SAndroid Build Coastguard Worker NAME, \
387*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND4( \
388*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, __VA_ARGS__))
389*da0073e9SAndroid Build Coastguard Worker
390*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND5( \
391*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, SCALARTYPE5, ...) \
392*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__) \
393*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
394*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
395*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
396*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__) \
397*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE5, __VA_ARGS__)
398*da0073e9SAndroid Build Coastguard Worker
399*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND5( \
400*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
401*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
402*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
403*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
404*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
405*da0073e9SAndroid Build Coastguard Worker TYPE, \
406*da0073e9SAndroid Build Coastguard Worker NAME, \
407*da0073e9SAndroid Build Coastguard Worker ...) \
408*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
409*da0073e9SAndroid Build Coastguard Worker TYPE, \
410*da0073e9SAndroid Build Coastguard Worker NAME, \
411*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND5( \
412*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
413*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
414*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
415*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
416*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
417*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__))
418*da0073e9SAndroid Build Coastguard Worker
419*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND6( \
420*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
421*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
422*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
423*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
424*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
425*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
426*da0073e9SAndroid Build Coastguard Worker ...) \
427*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES(__VA_ARGS__) \
428*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
429*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
430*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
431*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__) \
432*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE5, __VA_ARGS__) \
433*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE6, __VA_ARGS__)
434*da0073e9SAndroid Build Coastguard Worker
435*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND6( \
436*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
437*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
438*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
439*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
440*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
441*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
442*da0073e9SAndroid Build Coastguard Worker TYPE, \
443*da0073e9SAndroid Build Coastguard Worker NAME, \
444*da0073e9SAndroid Build Coastguard Worker ...) \
445*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
446*da0073e9SAndroid Build Coastguard Worker TYPE, \
447*da0073e9SAndroid Build Coastguard Worker NAME, \
448*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_AND_COMPLEX_TYPES_AND6( \
449*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
450*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
451*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
452*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
453*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
454*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
455*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__))
456*da0073e9SAndroid Build Coastguard Worker
457*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_INTEGRAL_TYPES(...) \
458*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Byte, __VA_ARGS__) \
459*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Char, __VA_ARGS__) \
460*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Int, __VA_ARGS__) \
461*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Long, __VA_ARGS__) \
462*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Short, __VA_ARGS__)
463*da0073e9SAndroid Build Coastguard Worker
464*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_INTEGRAL_TYPES(TYPE, NAME, ...) \
465*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_INTEGRAL_TYPES(__VA_ARGS__))
466*da0073e9SAndroid Build Coastguard Worker
467*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_INTEGRAL_TYPES_AND(SCALARTYPE, ...) \
468*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_INTEGRAL_TYPES(__VA_ARGS__) \
469*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
470*da0073e9SAndroid Build Coastguard Worker
471*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_INTEGRAL_TYPES_AND(SCALARTYPE, TYPE, NAME, ...) \
472*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
473*da0073e9SAndroid Build Coastguard Worker TYPE, \
474*da0073e9SAndroid Build Coastguard Worker NAME, \
475*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_INTEGRAL_TYPES_AND(SCALARTYPE, __VA_ARGS__))
476*da0073e9SAndroid Build Coastguard Worker
477*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES(...) \
478*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_INTEGRAL_TYPES(__VA_ARGS__) \
479*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_FLOATING_TYPES(__VA_ARGS__)
480*da0073e9SAndroid Build Coastguard Worker
481*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES(TYPE, NAME, ...) \
482*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_ALL_TYPES(__VA_ARGS__))
483*da0073e9SAndroid Build Coastguard Worker
484*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_QINT_TYPES(...) \
485*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_QINT(at::kQInt8, at::qint8, __VA_ARGS__) \
486*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_QINT(at::kQUInt8, at::quint8, __VA_ARGS__) \
487*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_QINT(at::kQInt32, at::qint32, __VA_ARGS__)
488*da0073e9SAndroid Build Coastguard Worker
489*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_QINT_TYPES(TYPE, NAME, ...) \
490*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_QINT_TYPES(__VA_ARGS__))
491*da0073e9SAndroid Build Coastguard Worker
492*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_QINT_TYPES_AND(SCALARTYPE, ...) \
493*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_QINT_TYPES(__VA_ARGS__) \
494*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
495*da0073e9SAndroid Build Coastguard Worker
496*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_QINT_TYPES_AND(SCALARTYPE, TYPE, NAME, ...) \
497*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
498*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_QINT_TYPES_AND(SCALARTYPE, __VA_ARGS__))
499*da0073e9SAndroid Build Coastguard Worker
500*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_QINT_BYTE_TYPES(...) \
501*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_QINT(at::kQInt8, at::qint8, __VA_ARGS__) \
502*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_QINT(at::kQUInt8, at::quint8, __VA_ARGS__)
503*da0073e9SAndroid Build Coastguard Worker
504*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_QINT_BYTE_TYPES(TYPE, NAME, ...) \
505*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_QINT_BYTE_TYPES(__VA_ARGS__))
506*da0073e9SAndroid Build Coastguard Worker
507*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_QINT_AND_SUB_BYTE_TYPES(...) \
508*da0073e9SAndroid Build Coastguard Worker AT_QINT_SUB_BYTE_PRIVATE_CASE_TYPE( \
509*da0073e9SAndroid Build Coastguard Worker at::kQInt8, at::qint8, CHAR_BIT, SCHAR_MIN, SCHAR_MAX, __VA_ARGS__) \
510*da0073e9SAndroid Build Coastguard Worker AT_QINT_SUB_BYTE_PRIVATE_CASE_TYPE( \
511*da0073e9SAndroid Build Coastguard Worker at::kQUInt8, at::quint8, CHAR_BIT, 0, UCHAR_MAX, __VA_ARGS__) \
512*da0073e9SAndroid Build Coastguard Worker AT_QINT_SUB_BYTE_PRIVATE_CASE_TYPE( \
513*da0073e9SAndroid Build Coastguard Worker at::kQInt32, \
514*da0073e9SAndroid Build Coastguard Worker at::qint32, \
515*da0073e9SAndroid Build Coastguard Worker CHAR_BIT * sizeof(int), \
516*da0073e9SAndroid Build Coastguard Worker INT_MIN, \
517*da0073e9SAndroid Build Coastguard Worker INT_MAX, \
518*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__) \
519*da0073e9SAndroid Build Coastguard Worker AT_QINT_SUB_BYTE_PRIVATE_CASE_TYPE( \
520*da0073e9SAndroid Build Coastguard Worker at::kQUInt4x2, at::quint4x2, 4, 0, 15, __VA_ARGS__) \
521*da0073e9SAndroid Build Coastguard Worker AT_QINT_SUB_BYTE_PRIVATE_CASE_TYPE( \
522*da0073e9SAndroid Build Coastguard Worker at::kQUInt2x4, at::quint2x4, 2, 0, 3, __VA_ARGS__)
523*da0073e9SAndroid Build Coastguard Worker
524*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_QINT_AND_SUB_BYTE_TYPES(TYPE, NAME, ...) \
525*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
526*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_QINT_AND_SUB_BYTE_TYPES(__VA_ARGS__))
527*da0073e9SAndroid Build Coastguard Worker
528*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(...) \
529*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES(__VA_ARGS__) \
530*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_COMPLEX_TYPES(__VA_ARGS__)
531*da0073e9SAndroid Build Coastguard Worker
532*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX(TYPE, NAME, ...) \
533*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
534*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__))
535*da0073e9SAndroid Build Coastguard Worker
536*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND(SCALARTYPE, ...) \
537*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES(__VA_ARGS__) \
538*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
539*da0073e9SAndroid Build Coastguard Worker
540*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND(SCALARTYPE, TYPE, NAME, ...) \
541*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
542*da0073e9SAndroid Build Coastguard Worker TYPE, NAME, AT_DISPATCH_CASE_ALL_TYPES_AND(SCALARTYPE, __VA_ARGS__))
543*da0073e9SAndroid Build Coastguard Worker
544*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND(SCALARTYPE, ...) \
545*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
546*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE, __VA_ARGS__)
547*da0073e9SAndroid Build Coastguard Worker
548*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND(SCALARTYPE, TYPE, NAME, ...) \
549*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
550*da0073e9SAndroid Build Coastguard Worker TYPE, \
551*da0073e9SAndroid Build Coastguard Worker NAME, \
552*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND(SCALARTYPE, __VA_ARGS__))
553*da0073e9SAndroid Build Coastguard Worker
554*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, ...) \
555*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES(__VA_ARGS__) \
556*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
557*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__)
558*da0073e9SAndroid Build Coastguard Worker
559*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, TYPE, NAME, ...) \
560*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
561*da0073e9SAndroid Build Coastguard Worker TYPE, \
562*da0073e9SAndroid Build Coastguard Worker NAME, \
563*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, __VA_ARGS__))
564*da0073e9SAndroid Build Coastguard Worker
565*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND2( \
566*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, ...) \
567*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
568*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
569*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__)
570*da0073e9SAndroid Build Coastguard Worker
571*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND2( \
572*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, TYPE, NAME, ...) \
573*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
574*da0073e9SAndroid Build Coastguard Worker TYPE, \
575*da0073e9SAndroid Build Coastguard Worker NAME, \
576*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND2( \
577*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, __VA_ARGS__))
578*da0073e9SAndroid Build Coastguard Worker
579*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND3( \
580*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, ...) \
581*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES(__VA_ARGS__) \
582*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
583*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
584*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__)
585*da0073e9SAndroid Build Coastguard Worker
586*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND3( \
587*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, TYPE, NAME, ...) \
588*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
589*da0073e9SAndroid Build Coastguard Worker TYPE, \
590*da0073e9SAndroid Build Coastguard Worker NAME, \
591*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND3( \
592*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, __VA_ARGS__))
593*da0073e9SAndroid Build Coastguard Worker
594*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND3( \
595*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, ...) \
596*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
597*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
598*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
599*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__)
600*da0073e9SAndroid Build Coastguard Worker
601*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND3( \
602*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, TYPE, NAME, ...) \
603*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
604*da0073e9SAndroid Build Coastguard Worker TYPE, \
605*da0073e9SAndroid Build Coastguard Worker NAME, \
606*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND3( \
607*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, __VA_ARGS__))
608*da0073e9SAndroid Build Coastguard Worker
609*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND4( \
610*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, ...) \
611*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
612*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
613*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
614*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
615*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__)
616*da0073e9SAndroid Build Coastguard Worker
617*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND4( \
618*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, TYPE, NAME, ...) \
619*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
620*da0073e9SAndroid Build Coastguard Worker TYPE, \
621*da0073e9SAndroid Build Coastguard Worker NAME, \
622*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND4( \
623*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, __VA_ARGS__))
624*da0073e9SAndroid Build Coastguard Worker
625*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND5( \
626*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, SCALARTYPE5, ...) \
627*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
628*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
629*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
630*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
631*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__) \
632*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE5, __VA_ARGS__)
633*da0073e9SAndroid Build Coastguard Worker
634*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND5( \
635*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
636*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
637*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
638*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
639*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
640*da0073e9SAndroid Build Coastguard Worker TYPE, \
641*da0073e9SAndroid Build Coastguard Worker NAME, \
642*da0073e9SAndroid Build Coastguard Worker ...) \
643*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
644*da0073e9SAndroid Build Coastguard Worker TYPE, \
645*da0073e9SAndroid Build Coastguard Worker NAME, \
646*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND5( \
647*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
648*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
649*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
650*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
651*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
652*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__))
653*da0073e9SAndroid Build Coastguard Worker
654*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND6( \
655*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
656*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
657*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
658*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
659*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
660*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
661*da0073e9SAndroid Build Coastguard Worker ...) \
662*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
663*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
664*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
665*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
666*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__) \
667*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE5, __VA_ARGS__) \
668*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE6, __VA_ARGS__)
669*da0073e9SAndroid Build Coastguard Worker
670*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND6( \
671*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
672*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
673*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
674*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
675*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
676*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
677*da0073e9SAndroid Build Coastguard Worker TYPE, \
678*da0073e9SAndroid Build Coastguard Worker NAME, \
679*da0073e9SAndroid Build Coastguard Worker ...) \
680*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
681*da0073e9SAndroid Build Coastguard Worker TYPE, \
682*da0073e9SAndroid Build Coastguard Worker NAME, \
683*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND6( \
684*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
685*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
686*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
687*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
688*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
689*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
690*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__))
691*da0073e9SAndroid Build Coastguard Worker
692*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND7( \
693*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
694*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
695*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
696*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
697*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
698*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
699*da0073e9SAndroid Build Coastguard Worker SCALARTYPE7, \
700*da0073e9SAndroid Build Coastguard Worker ...) \
701*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
702*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
703*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
704*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
705*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__) \
706*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE5, __VA_ARGS__) \
707*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE6, __VA_ARGS__) \
708*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE7, __VA_ARGS__)
709*da0073e9SAndroid Build Coastguard Worker
710*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND7( \
711*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
712*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
713*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
714*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
715*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
716*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
717*da0073e9SAndroid Build Coastguard Worker SCALARTYPE7, \
718*da0073e9SAndroid Build Coastguard Worker TYPE, \
719*da0073e9SAndroid Build Coastguard Worker NAME, \
720*da0073e9SAndroid Build Coastguard Worker ...) \
721*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
722*da0073e9SAndroid Build Coastguard Worker TYPE, \
723*da0073e9SAndroid Build Coastguard Worker NAME, \
724*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND7( \
725*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
726*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
727*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
728*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
729*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
730*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
731*da0073e9SAndroid Build Coastguard Worker SCALARTYPE7, \
732*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__))
733*da0073e9SAndroid Build Coastguard Worker
734*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND8( \
735*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
736*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
737*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
738*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
739*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
740*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
741*da0073e9SAndroid Build Coastguard Worker SCALARTYPE7, \
742*da0073e9SAndroid Build Coastguard Worker SCALARTYPE8, \
743*da0073e9SAndroid Build Coastguard Worker ...) \
744*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX(__VA_ARGS__) \
745*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE1, __VA_ARGS__) \
746*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE2, __VA_ARGS__) \
747*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE3, __VA_ARGS__) \
748*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE4, __VA_ARGS__) \
749*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE5, __VA_ARGS__) \
750*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE6, __VA_ARGS__) \
751*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE7, __VA_ARGS__) \
752*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(SCALARTYPE8, __VA_ARGS__)
753*da0073e9SAndroid Build Coastguard Worker
754*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND8( \
755*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
756*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
757*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
758*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
759*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
760*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
761*da0073e9SAndroid Build Coastguard Worker SCALARTYPE7, \
762*da0073e9SAndroid Build Coastguard Worker SCALARTYPE8, \
763*da0073e9SAndroid Build Coastguard Worker TYPE, \
764*da0073e9SAndroid Build Coastguard Worker NAME, \
765*da0073e9SAndroid Build Coastguard Worker ...) \
766*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
767*da0073e9SAndroid Build Coastguard Worker TYPE, \
768*da0073e9SAndroid Build Coastguard Worker NAME, \
769*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND_COMPLEX_AND8( \
770*da0073e9SAndroid Build Coastguard Worker SCALARTYPE1, \
771*da0073e9SAndroid Build Coastguard Worker SCALARTYPE2, \
772*da0073e9SAndroid Build Coastguard Worker SCALARTYPE3, \
773*da0073e9SAndroid Build Coastguard Worker SCALARTYPE4, \
774*da0073e9SAndroid Build Coastguard Worker SCALARTYPE5, \
775*da0073e9SAndroid Build Coastguard Worker SCALARTYPE6, \
776*da0073e9SAndroid Build Coastguard Worker SCALARTYPE7, \
777*da0073e9SAndroid Build Coastguard Worker SCALARTYPE8, \
778*da0073e9SAndroid Build Coastguard Worker __VA_ARGS__))
779*da0073e9SAndroid Build Coastguard Worker
780*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_CASE_BIT_TYPES(...) \
781*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Bits1x8, __VA_ARGS__) \
782*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Bits2x4, __VA_ARGS__) \
783*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Bits4x2, __VA_ARGS__) \
784*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Bits8, __VA_ARGS__) \
785*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE(at::ScalarType::Bits16, __VA_ARGS__)
786*da0073e9SAndroid Build Coastguard Worker
787*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_BIT_TYPES(TYPE, NAME, ...) \
788*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH(TYPE, NAME, AT_DISPATCH_CASE_BIT_TYPES(__VA_ARGS__))
789*da0073e9SAndroid Build Coastguard Worker
790*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_INDEX_TYPES(TYPE, NAME, ...) \
791*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
792*da0073e9SAndroid Build Coastguard Worker TYPE, \
793*da0073e9SAndroid Build Coastguard Worker NAME, \
794*da0073e9SAndroid Build Coastguard Worker AT_PRIVATE_CASE_TYPE_USING_HINT( \
795*da0073e9SAndroid Build Coastguard Worker at::ScalarType::Int, index_t, __VA_ARGS__) \
796*da0073e9SAndroid Build Coastguard Worker AT_PRIVATE_CASE_TYPE_USING_HINT( \
797*da0073e9SAndroid Build Coastguard Worker at::ScalarType::Long, index_t, __VA_ARGS__))
798*da0073e9SAndroid Build Coastguard Worker
799*da0073e9SAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
800*da0073e9SAndroid Build Coastguard Worker // DEPRECATED MACROS, DON'T USE THESE
801*da0073e9SAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
802*da0073e9SAndroid Build Coastguard Worker
803*da0073e9SAndroid Build Coastguard Worker #define AT_DISPATCH_ALL_TYPES_AND_HALF(TYPE, NAME, ...) \
804*da0073e9SAndroid Build Coastguard Worker detail::deprecated_AT_DISPATCH_ALL_TYPES_AND_HALF(); \
805*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_SWITCH( \
806*da0073e9SAndroid Build Coastguard Worker TYPE, \
807*da0073e9SAndroid Build Coastguard Worker NAME, \
808*da0073e9SAndroid Build Coastguard Worker AT_DISPATCH_CASE_ALL_TYPES_AND(at::ScalarType::Half, __VA_ARGS__))
809