xref: /aosp_15_r20/external/pytorch/aten/src/ATen/Dispatch.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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