ZhengyangZhang commited on
Commit
278581a
·
verified ·
1 Parent(s): a809a68

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. lib/python3.12/site-packages/torch/include/ATen/ATen.h +37 -0
  2. lib/python3.12/site-packages/torch/include/ATen/ArrayRef.h +2 -0
  3. lib/python3.12/site-packages/torch/include/ATen/Backend.h +2 -0
  4. lib/python3.12/site-packages/torch/include/ATen/Backtrace.h +2 -0
  5. lib/python3.12/site-packages/torch/include/ATen/BlasBackend.h +29 -0
  6. lib/python3.12/site-packages/torch/include/ATen/CPUApplyUtils.h +352 -0
  7. lib/python3.12/site-packages/torch/include/ATen/CPUFixedAllocator.h +33 -0
  8. lib/python3.12/site-packages/torch/include/ATen/CPUFunctions_inl.h +540 -0
  9. lib/python3.12/site-packages/torch/include/ATen/CPUGeneratorImpl.h +49 -0
  10. lib/python3.12/site-packages/torch/include/ATen/CUDAFunctions.h +29 -0
  11. lib/python3.12/site-packages/torch/include/ATen/CollapseDims.h +94 -0
  12. lib/python3.12/site-packages/torch/include/ATen/CompositeExplicitAutogradFunctions.h +29 -0
  13. lib/python3.12/site-packages/torch/include/ATen/CompositeExplicitAutogradNonFunctionalFunctions.h +29 -0
  14. lib/python3.12/site-packages/torch/include/ATen/CompositeExplicitAutogradNonFunctionalFunctions_inl.h +323 -0
  15. lib/python3.12/site-packages/torch/include/ATen/CompositeImplicitAutogradFunctions.h +29 -0
  16. lib/python3.12/site-packages/torch/include/ATen/CompositeImplicitAutogradNestedTensorFunctions.h +29 -0
  17. lib/python3.12/site-packages/torch/include/ATen/CompositeImplicitAutogradNestedTensorFunctions_inl.h +25 -0
  18. lib/python3.12/site-packages/torch/include/ATen/Config.h +21 -0
  19. lib/python3.12/site-packages/torch/include/ATen/Context.h +627 -0
  20. lib/python3.12/site-packages/torch/include/ATen/DLConvertor.h +21 -0
  21. lib/python3.12/site-packages/torch/include/ATen/Device.h +2 -0
  22. lib/python3.12/site-packages/torch/include/ATen/DeviceAccelerator.h +27 -0
  23. lib/python3.12/site-packages/torch/include/ATen/DeviceGuard.h +41 -0
  24. lib/python3.12/site-packages/torch/include/ATen/DimVector.h +2 -0
  25. lib/python3.12/site-packages/torch/include/ATen/Dimname.h +1 -0
  26. lib/python3.12/site-packages/torch/include/ATen/Dispatch_v2.h +202 -0
  27. lib/python3.12/site-packages/torch/include/ATen/DynamicLibrary.h +36 -0
  28. lib/python3.12/site-packages/torch/include/ATen/EmptyTensor.h +166 -0
  29. lib/python3.12/site-packages/torch/include/ATen/ExpandUtils.h +527 -0
  30. lib/python3.12/site-packages/torch/include/ATen/Formatting.h +1 -0
  31. lib/python3.12/site-packages/torch/include/ATen/FuncTorchTLS.h +46 -0
  32. lib/python3.12/site-packages/torch/include/ATen/FunctionalStorageImpl.h +208 -0
  33. lib/python3.12/site-packages/torch/include/ATen/FunctionalTensorWrapper.h +454 -0
  34. lib/python3.12/site-packages/torch/include/ATen/Functions.h +1458 -0
  35. lib/python3.12/site-packages/torch/include/ATen/InferSize.h +88 -0
  36. lib/python3.12/site-packages/torch/include/ATen/InitialTensorOptions.h +15 -0
  37. lib/python3.12/site-packages/torch/include/ATen/Layout.h +2 -0
  38. lib/python3.12/site-packages/torch/include/ATen/LegacyBatchedTensorImpl.h +160 -0
  39. lib/python3.12/site-packages/torch/include/ATen/LegacyVmapMode.h +26 -0
  40. lib/python3.12/site-packages/torch/include/ATen/LegacyVmapTransforms.h +183 -0
  41. lib/python3.12/site-packages/torch/include/ATen/LinalgBackend.h +31 -0
  42. lib/python3.12/site-packages/torch/include/ATen/MapAllocator.h +147 -0
  43. lib/python3.12/site-packages/torch/include/ATen/MetaFunctions_inl.h +326 -0
  44. lib/python3.12/site-packages/torch/include/ATen/MethodOperators.h +443 -0
  45. lib/python3.12/site-packages/torch/include/ATen/NamedTensor.h +1 -0
  46. lib/python3.12/site-packages/torch/include/ATen/NativeFunctions.h +1348 -0
  47. lib/python3.12/site-packages/torch/include/ATen/NativeMetaFunctions.h +1334 -0
  48. lib/python3.12/site-packages/torch/include/ATen/NestedTensorImpl.h +286 -0
  49. lib/python3.12/site-packages/torch/include/ATen/NumericUtils.h +203 -0
  50. lib/python3.12/site-packages/torch/include/ATen/OpaqueTensorImpl.h +187 -0
lib/python3.12/site-packages/torch/include/ATen/ATen.h ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #if !defined(_MSC_VER) && __cplusplus < 201703L
4
+ #error C++17 or later compatible compiler is required to use ATen.
5
+ #endif
6
+
7
+ #include <ATen/Context.h>
8
+ #include <ATen/Device.h>
9
+ #include <ATen/DeviceGuard.h>
10
+ #include <ATen/DimVector.h>
11
+ #include <ATen/Dispatch.h>
12
+ #include <ATen/Formatting.h>
13
+ #include <ATen/Functions.h>
14
+ #include <ATen/NamedTensor.h>
15
+ #include <ATen/ScalarOps.h>
16
+ #include <ATen/Tensor.h>
17
+ #include <ATen/TensorGeometry.h>
18
+ #include <ATen/TensorIndexing.h>
19
+ #include <ATen/TensorOperators.h>
20
+ #include <ATen/Version.h>
21
+ #include <ATen/core/ATenGeneral.h>
22
+ #include <ATen/core/Generator.h>
23
+ #include <ATen/core/Reduction.h>
24
+ #include <ATen/core/Scalar.h>
25
+ #include <ATen/core/UnsafeFromTH.h>
26
+ #include <ATen/core/ivalue.h>
27
+ #include <ATen/core/jit_type.h>
28
+ #include <c10/core/Allocator.h>
29
+ #include <c10/core/InferenceMode.h>
30
+ #include <c10/core/Layout.h>
31
+ #include <c10/core/Storage.h>
32
+ #include <c10/core/TensorOptions.h>
33
+ #include <c10/util/Exception.h>
34
+
35
+ // TODO: try to remove this
36
+ // There is some back story, see https://github.com/pytorch/pytorch/issues/48684
37
+ #include <ATen/NativeFunctions.h>
lib/python3.12/site-packages/torch/include/ATen/ArrayRef.h ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ #pragma once
2
+ #include <c10/util/ArrayRef.h>
lib/python3.12/site-packages/torch/include/ATen/Backend.h ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ #pragma once
2
+ #include <c10/core/Backend.h>
lib/python3.12/site-packages/torch/include/ATen/Backtrace.h ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ #pragma once
2
+ #include <ATen/core/Backtrace.h>
lib/python3.12/site-packages/torch/include/ATen/BlasBackend.h ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/util/Exception.h>
4
+
5
+ #include <ostream>
6
+ #include <string>
7
+
8
+ namespace at {
9
+
10
+ enum class BlasBackend : int8_t { Cublas, Cublaslt, Ck };
11
+
12
+ inline std::string BlasBackendToString(at::BlasBackend backend) {
13
+ switch (backend) {
14
+ case BlasBackend::Cublas:
15
+ return "at::BlasBackend::Cublas";
16
+ case BlasBackend::Cublaslt:
17
+ return "at::BlasBackend::Cublaslt";
18
+ case BlasBackend::Ck:
19
+ return "at::BlasBackend::Ck";
20
+ default:
21
+ TORCH_CHECK(false, "Unknown blas backend");
22
+ }
23
+ }
24
+
25
+ inline std::ostream& operator<<(std::ostream& stream, at::BlasBackend backend) {
26
+ return stream << BlasBackendToString(backend);
27
+ }
28
+
29
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/CPUApplyUtils.h ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/CollapseDims.h>
4
+ #include <ATen/Parallel.h>
5
+ #include <ATen/TensorUtils.h>
6
+ #include <c10/util/irange.h>
7
+ #include <cstring>
8
+ #include <limits>
9
+
10
+ namespace at {
11
+
12
+ /*
13
+ * The basic strategy for apply is as follows:
14
+ *
15
+ * 1. Starting with the outermost index, loop until we reach a dimension where
16
+ * the data is no longer contiguous, i.e. the stride at that dimension is not
17
+ * equal to the size of the tensor defined by the outer dimensions. Let's call
18
+ * this outer (contiguous) tensor A. Note that if the Tensor is contiguous, then
19
+ * A is equal to the entire Tensor. Let's call the inner tensor B.
20
+ *
21
+ * 2. We loop through the indices in B, starting at its outermost dimension. For
22
+ * example, if B is a 2x2 matrix, then we do:
23
+ *
24
+ * B[0][0]
25
+ * B[0][1]
26
+ * B[1][0]
27
+ * B[1][1]
28
+ *
29
+ * We set the offset into the underlying storage as (storageOffset + stride_B *
30
+ * index_B), i.e. basically we compute the offset into the storage as we would
31
+ * normally for a Tensor. But because we are guaranteed the subsequent data is
32
+ * contiguous in memory, we can simply loop for sizeof(A) iterations and perform
33
+ * the operation, without having to follow the order described by the strides of
34
+ * A.
35
+ *
36
+ * 3. As an optimization, we merge dimensions of A that are contiguous in
37
+ * memory. For example, if A is a 3x3x3x3 tensor narrowed from a 3x3x4x3 tensor,
38
+ * then the first two dimensions can be merged for the purposes of APPLY,
39
+ * reducing the number of nested loops.
40
+ */
41
+
42
+ inline Tensor sort_strides(Tensor& tensor_) {
43
+ IntArrayRef strides = tensor_.strides();
44
+ std::vector<int64_t> indices;
45
+ indices.reserve(tensor_.ndimension());
46
+ for (const auto i : c10::irange(tensor_.ndimension())) {
47
+ indices.push_back(i);
48
+ }
49
+ std::sort(indices.begin(), indices.end(), [&strides](int64_t i1, int64_t i2) {
50
+ return strides[i1] > strides[i2];
51
+ });
52
+ Tensor tensor = tensor_.permute(indices);
53
+ return tensor;
54
+ }
55
+
56
+ template <typename T, int N>
57
+ struct strided_tensor_iter_fixed {
58
+ public:
59
+ T* data_ = NULL;
60
+ int64_t dim_ = 0;
61
+
62
+ // NOLINTNEXTLINE(*array*)
63
+ int64_t counter_[N] = {0};
64
+ // NOLINTNEXTLINE(*array*)
65
+ int64_t sizes_[N] = {0};
66
+ // NOLINTNEXTLINE(*array*)
67
+ int64_t strides_[N] = {0};
68
+
69
+ strided_tensor_iter_fixed(strided_tensor_iter_fixed const&) = delete;
70
+ strided_tensor_iter_fixed& operator=(strided_tensor_iter_fixed const& x) =
71
+ delete;
72
+ strided_tensor_iter_fixed(strided_tensor_iter_fixed&&) noexcept = default;
73
+ strided_tensor_iter_fixed& operator=(strided_tensor_iter_fixed&& x) noexcept =
74
+ default;
75
+ ~strided_tensor_iter_fixed() noexcept = default;
76
+ strided_tensor_iter_fixed(
77
+ Tensor& tensor,
78
+ [[maybe_unused]] bool sort_strides = false)
79
+ : data_(tensor.data_ptr<T>()) {
80
+ std::memset(counter_, 0, sizeof(int64_t) * N);
81
+ if (tensor.dim() > 0) {
82
+ std::memcpy(
83
+ sizes_, tensor.sizes().data(), tensor.dim() * sizeof(int64_t));
84
+ std::memcpy(
85
+ strides_, tensor.strides().data(), tensor.dim() * sizeof(int64_t));
86
+ }
87
+ dim_ = std::get<1>(collapse_dims(sizes_, strides_, tensor.ndimension()));
88
+ }
89
+ };
90
+
91
+ template <typename T>
92
+ struct strided_tensor_iter {
93
+ private:
94
+ public:
95
+ T* data_ = NULL;
96
+ int64_t dim_;
97
+
98
+ std::vector<int64_t> counter_;
99
+ std::vector<int64_t> sizes_;
100
+ std::vector<int64_t> strides_;
101
+
102
+ strided_tensor_iter(strided_tensor_iter const&) = delete;
103
+ strided_tensor_iter& operator=(strided_tensor_iter const& x) = delete;
104
+ strided_tensor_iter(strided_tensor_iter&&) noexcept = default;
105
+ strided_tensor_iter& operator=(strided_tensor_iter&&) noexcept = default;
106
+ ~strided_tensor_iter() noexcept = default;
107
+ strided_tensor_iter(Tensor& tensor)
108
+ : data_(tensor.data_ptr<T>()),
109
+ dim_(tensor.ndimension()),
110
+ counter_(dim_, 0),
111
+ sizes_(tensor.sizes().vec()),
112
+ strides_(tensor.strides().vec()) {
113
+ dim_ = std::get<1>(collapse_dims(sizes_.data(), strides_.data(), dim_));
114
+ }
115
+ };
116
+
117
+ inline bool _all_equal_numel(at::ArrayRef<Tensor> tensors) {
118
+ if (tensors.empty())
119
+ return true;
120
+ int64_t all_numel = tensors[0].numel();
121
+ for (const auto i : c10::irange(1, tensors.size())) {
122
+ if (tensors[i].numel() != all_numel)
123
+ return false;
124
+ }
125
+ return true;
126
+ }
127
+
128
+ inline std::string _all_equal_numel_error(at::ArrayRef<Tensor> tensors) {
129
+ std::ostringstream oss;
130
+ oss << "inconsistent tensor size, expected ";
131
+ for (size_t i = 0; i < tensors.size() - 1; i++) {
132
+ oss << tensors[i].sizes() << ", ";
133
+ }
134
+ oss << "and " << tensors[tensors.size() - 1].sizes()
135
+ << " to have the same number of elements, but got ";
136
+ for (size_t i = 0; i < tensors.size() - 1; i++) {
137
+ oss << tensors[i].numel() << ", ";
138
+ }
139
+ oss << "and " << tensors[tensors.size() - 1].numel()
140
+ << " elements respectively";
141
+ return oss.str();
142
+ }
143
+
144
+ inline bool _apply_preamble(ArrayRef<Tensor> tensors) {
145
+ checkDeviceType("CPU_tensor_apply", tensors, kCPU);
146
+ checkLayout("CPU_tensor_apply", tensors, kStrided);
147
+ if (!_all_equal_numel(tensors))
148
+ TORCH_CHECK(false, _all_equal_numel_error(tensors));
149
+ // An empty tensor has no elements
150
+ for (auto& t : tensors)
151
+ if (t.numel() == 0)
152
+ return false;
153
+ return true;
154
+ }
155
+
156
+ inline int64_t _max_dim_tensors(ArrayRef<Tensor> tensors) {
157
+ int64_t dim = 0;
158
+ for (auto& t : tensors)
159
+ dim = std::max(dim, t.ndimension());
160
+ return dim;
161
+ }
162
+
163
+ inline void iterate(int64_t /*size*/) {}
164
+
165
+ template <typename Arg, typename... Args>
166
+ inline void iterate(int64_t size, Arg& iter, Args&... iter_tail) {
167
+ iter.counter_[iter.dim_ - 1] += size;
168
+ iter.data_ = iter.data_ + size * iter.strides_[iter.dim_ - 1];
169
+ iterate(size, iter_tail...);
170
+ }
171
+
172
+ inline bool iterate_continue() {
173
+ return true;
174
+ }
175
+
176
+ template <typename Arg, typename... Args>
177
+ inline bool iterate_continue(Arg& iter, Args&... iter_tail) {
178
+ return iter.counter_[iter.dim_ - 1] < iter.sizes_[iter.dim_ - 1] &&
179
+ iterate_continue(iter_tail...);
180
+ }
181
+
182
+ inline int64_t max_iterate_size() {
183
+ return std::numeric_limits<int64_t>::max();
184
+ }
185
+
186
+ template <typename Arg, typename... Args>
187
+ inline int64_t max_iterate_size(Arg& iter, Args&... iter_tail) {
188
+ return std::min(
189
+ (iter.sizes_[iter.dim_ - 1] - iter.counter_[iter.dim_ - 1]),
190
+ max_iterate_size(iter_tail...));
191
+ }
192
+
193
+ inline void iterate_overflow() {}
194
+
195
+ template <typename Arg, typename... Args>
196
+ inline void iterate_overflow(Arg& iter, Args&... iter_tail) {
197
+ if (iter.counter_[iter.dim_ - 1] == iter.sizes_[iter.dim_ - 1]) {
198
+ for (int64_t i = iter.dim_ - 1; i > 0; i--) {
199
+ if (iter.counter_[i] == iter.sizes_[i]) {
200
+ iter.counter_[i] = 0;
201
+ iter.counter_[i - 1]++;
202
+ iter.data_ = iter.data_ - (iter.sizes_[i] * iter.strides_[i]) +
203
+ iter.strides_[i - 1];
204
+ }
205
+ }
206
+ }
207
+ iterate_overflow(iter_tail...);
208
+ }
209
+
210
+ inline void forward(int64_t /*offset*/) {}
211
+
212
+ template <typename Arg, typename... Args>
213
+ inline void forward(int64_t offset, Arg& iter, Args&... iter_tail) {
214
+ int64_t multi = offset;
215
+ for (int64_t i = iter.dim_ - 1; i >= 0; i--) {
216
+ int64_t inc = multi % iter.sizes_[i];
217
+ multi = multi / iter.sizes_[i];
218
+ iter.data_ = iter.data_ + inc * iter.strides_[i];
219
+ iter.counter_[i] += inc;
220
+ }
221
+ forward(offset, iter_tail...);
222
+ }
223
+
224
+ inline int64_t max_dim() {
225
+ return 0;
226
+ }
227
+
228
+ template <typename Arg, typename... Args>
229
+ inline int64_t max_dim(Arg& iter, Args&... iter_tail) {
230
+ return std::max(iter.dim_, max_dim(iter_tail...));
231
+ }
232
+
233
+ inline void apply_op() {}
234
+
235
+ template <typename Op, typename... Args>
236
+ inline void apply_op(
237
+ int64_t numel,
238
+ int64_t offset,
239
+ const Op& op,
240
+ Args... iters) {
241
+ // For 0-dim tensors
242
+ if (numel == 1 && max_dim(iters...) == 0) {
243
+ op(*iters.data_...);
244
+ return;
245
+ }
246
+ if (offset > 0)
247
+ forward(offset, iters...);
248
+ // Splitting this into chunks helps the compiler create faster assembly
249
+ for (int64_t i = 0; i < numel;) {
250
+ for (; iterate_continue(iters...) && i < numel;) {
251
+ op(*iters.data_...);
252
+ iterate(1, iters...);
253
+ i++;
254
+ }
255
+ iterate_overflow(iters...);
256
+ }
257
+ }
258
+
259
+ /*
260
+ Apply a pointwise operator to sequence of tensors
261
+
262
+ The calling convention for op is a function/functor that takes the same
263
+ number of pointers of type scalar as the number of given tensors. For example,
264
+ to compute a = b * c, op would be of the form:
265
+ [](scalar* a_val, const scalar* b_val, const scalar* c_val) { a_val[0] =
266
+ b_val[0] * c_val[0]; };
267
+ */
268
+
269
+ template <typename scalar1, typename scalar2, typename Op>
270
+ inline void CPU_tensor_apply2(Tensor tensor1, Tensor tensor2, const Op op) {
271
+ if (!_apply_preamble({tensor1, tensor2}))
272
+ return;
273
+ if (_max_dim_tensors({tensor1, tensor2}) <= 8) {
274
+ apply_op(
275
+ tensor1.numel(),
276
+ 0,
277
+ op,
278
+ strided_tensor_iter_fixed<scalar1, 8>(tensor1),
279
+ strided_tensor_iter_fixed<scalar2, 8>(tensor2));
280
+ } else {
281
+ apply_op(
282
+ tensor1.numel(),
283
+ 0,
284
+ op,
285
+ strided_tensor_iter<scalar1>(tensor1),
286
+ strided_tensor_iter<scalar2>(tensor2));
287
+ }
288
+ }
289
+
290
+ template <typename scalar1, typename scalar2, typename scalar3, typename Op>
291
+ inline void CPU_tensor_apply3(
292
+ Tensor tensor1,
293
+ Tensor tensor2,
294
+ Tensor tensor3,
295
+ const Op op) {
296
+ if (!_apply_preamble({tensor1, tensor2, tensor3}))
297
+ return;
298
+ if (_max_dim_tensors({tensor1, tensor2, tensor3}) <= 8) {
299
+ apply_op(
300
+ tensor1.numel(),
301
+ 0,
302
+ op,
303
+ strided_tensor_iter_fixed<scalar1, 8>(tensor1),
304
+ strided_tensor_iter_fixed<scalar2, 8>(tensor2),
305
+ strided_tensor_iter_fixed<scalar3, 8>(tensor3));
306
+ } else {
307
+ apply_op(
308
+ tensor1.numel(),
309
+ 0,
310
+ op,
311
+ strided_tensor_iter<scalar1>(tensor1),
312
+ strided_tensor_iter<scalar2>(tensor2),
313
+ strided_tensor_iter<scalar3>(tensor3));
314
+ }
315
+ }
316
+
317
+ template <
318
+ typename scalar1,
319
+ typename scalar2,
320
+ typename scalar3,
321
+ typename scalar4,
322
+ typename Op>
323
+ inline void CPU_tensor_apply4(
324
+ Tensor tensor1,
325
+ Tensor tensor2,
326
+ Tensor tensor3,
327
+ Tensor tensor4,
328
+ const Op op) {
329
+ if (!_apply_preamble({tensor1, tensor2, tensor3, tensor4}))
330
+ return;
331
+ if (_max_dim_tensors({tensor1, tensor2, tensor3, tensor4}) <= 8) {
332
+ apply_op(
333
+ tensor1.numel(),
334
+ 0,
335
+ op,
336
+ strided_tensor_iter_fixed<scalar1, 8>(tensor1),
337
+ strided_tensor_iter_fixed<scalar2, 8>(tensor2),
338
+ strided_tensor_iter_fixed<scalar3, 8>(tensor3),
339
+ strided_tensor_iter_fixed<scalar4, 8>(tensor4));
340
+ } else {
341
+ apply_op(
342
+ tensor1.numel(),
343
+ 0,
344
+ op,
345
+ strided_tensor_iter<scalar1>(tensor1),
346
+ strided_tensor_iter<scalar2>(tensor2),
347
+ strided_tensor_iter<scalar3>(tensor3),
348
+ strided_tensor_iter<scalar4>(tensor4));
349
+ }
350
+ }
351
+
352
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/CPUFixedAllocator.h ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/core/Allocator.h>
4
+ #include <c10/util/Exception.h>
5
+
6
+ // This file creates a fake allocator that just throws exceptions if
7
+ // it is actually used.
8
+
9
+ // state passed to the allocator is the std::function<void(void*)> called
10
+ // when the blob is release by ATen
11
+
12
+ namespace at {
13
+
14
+ static void* cpu_fixed_malloc(void*, ptrdiff_t) {
15
+ TORCH_CHECK(false, "attempting to resize a tensor view of an external blob");
16
+ }
17
+
18
+ static void* cpu_fixed_realloc(void*, void*, ptrdiff_t) {
19
+ TORCH_CHECK(false, "attempting to resize a tensor view of an external blob");
20
+ }
21
+
22
+ static void cpu_fixed_free(void* state, void* allocation) {
23
+ auto on_release = static_cast<std::function<void(void*)>*>(state);
24
+ (*on_release)(allocation);
25
+ delete on_release;
26
+ }
27
+
28
+ static Allocator CPU_fixed_allocator = {
29
+ cpu_fixed_malloc,
30
+ cpu_fixed_realloc,
31
+ cpu_fixed_free};
32
+
33
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/CPUFunctions_inl.h ADDED
@@ -0,0 +1,540 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+ // @generated by torchgen/gen.py from DispatchKeyFunctions_inl.h
3
+
4
+ // NB: The implementing C++ file is RegisterDispatchKey.cpp
5
+
6
+ // The only #includes we need are for custom classes that have defaults in the C++ API
7
+ #include <c10/core/MemoryFormat.h>
8
+ #include <c10/core/Scalar.h>
9
+ #include <ATen/core/Reduction.h>
10
+
11
+ #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
12
+ #error This change adds a dependency on all pytorch operators, meaning the \
13
+ file will need to be re-compiled every time an operator is changed or added. \
14
+ Consider including a specific operator from \
15
+ <ATen/ops/{my_operator}_cpu_dispatch.h>. \
16
+ See NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
17
+ #endif
18
+
19
+ #include <ATen/ops/_adaptive_avg_pool2d_cpu_dispatch.h>
20
+ #include <ATen/ops/_adaptive_avg_pool2d_backward_cpu_dispatch.h>
21
+ #include <ATen/ops/_adaptive_avg_pool3d_cpu_dispatch.h>
22
+ #include <ATen/ops/_adaptive_avg_pool3d_backward_cpu_dispatch.h>
23
+ #include <ATen/ops/_add_relu_cpu_dispatch.h>
24
+ #include <ATen/ops/_addmm_activation_cpu_dispatch.h>
25
+ #include <ATen/ops/_aminmax_cpu_dispatch.h>
26
+ #include <ATen/ops/_amp_foreach_non_finite_check_and_unscale_cpu_dispatch.h>
27
+ #include <ATen/ops/_amp_update_scale_cpu_dispatch.h>
28
+ #include <ATen/ops/_assert_async_cpu_dispatch.h>
29
+ #include <ATen/ops/_batch_norm_with_update_cpu_dispatch.h>
30
+ #include <ATen/ops/_cdist_backward_cpu_dispatch.h>
31
+ #include <ATen/ops/_cdist_forward_cpu_dispatch.h>
32
+ #include <ATen/ops/_cholesky_solve_helper_cpu_dispatch.h>
33
+ #include <ATen/ops/_compute_linear_combination_cpu_dispatch.h>
34
+ #include <ATen/ops/_convert_indices_from_coo_to_csr_cpu_dispatch.h>
35
+ #include <ATen/ops/_convert_indices_from_csr_to_coo_cpu_dispatch.h>
36
+ #include <ATen/ops/_convert_weight_to_int4pack_for_cpu_cpu_dispatch.h>
37
+ #include <ATen/ops/_ctc_loss_cpu_dispatch.h>
38
+ #include <ATen/ops/_ctc_loss_backward_cpu_dispatch.h>
39
+ #include <ATen/ops/_cummax_helper_cpu_dispatch.h>
40
+ #include <ATen/ops/_cummin_helper_cpu_dispatch.h>
41
+ #include <ATen/ops/_dirichlet_grad_cpu_dispatch.h>
42
+ #include <ATen/ops/_efficientzerotensor_cpu_dispatch.h>
43
+ #include <ATen/ops/_embedding_bag_cpu_dispatch.h>
44
+ #include <ATen/ops/_embedding_bag_backward_cpu_dispatch.h>
45
+ #include <ATen/ops/_embedding_bag_dense_backward_cpu_dispatch.h>
46
+ #include <ATen/ops/_embedding_bag_forward_only_cpu_dispatch.h>
47
+ #include <ATen/ops/_embedding_bag_per_sample_weights_backward_cpu_dispatch.h>
48
+ #include <ATen/ops/_empty_affine_quantized_cpu_dispatch.h>
49
+ #include <ATen/ops/_empty_per_channel_affine_quantized_cpu_dispatch.h>
50
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_cpu_dispatch.h>
51
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_backward_cpu_dispatch.h>
52
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_cpu_dispatch.h>
53
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_backward_cpu_dispatch.h>
54
+ #include <ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams_cpu_dispatch.h>
55
+ #include <ATen/ops/_fft_c2c_cpu_dispatch.h>
56
+ #include <ATen/ops/_fft_c2r_cpu_dispatch.h>
57
+ #include <ATen/ops/_fft_r2c_cpu_dispatch.h>
58
+ #include <ATen/ops/_foobar_cpu_dispatch.h>
59
+ #include <ATen/ops/_functional_assert_async_cpu_dispatch.h>
60
+ #include <ATen/ops/_fused_adagrad_cpu_dispatch.h>
61
+ #include <ATen/ops/_fused_adam_cpu_dispatch.h>
62
+ #include <ATen/ops/_fused_adamw_cpu_dispatch.h>
63
+ #include <ATen/ops/_fused_moving_avg_obs_fq_helper_cpu_dispatch.h>
64
+ #include <ATen/ops/_fused_sdp_choice_cpu_dispatch.h>
65
+ #include <ATen/ops/_fused_sgd_cpu_dispatch.h>
66
+ #include <ATen/ops/_histogramdd_bin_edges_cpu_dispatch.h>
67
+ #include <ATen/ops/_histogramdd_from_bin_cts_cpu_dispatch.h>
68
+ #include <ATen/ops/_histogramdd_from_bin_tensors_cpu_dispatch.h>
69
+ #include <ATen/ops/_index_put_impl_cpu_dispatch.h>
70
+ #include <ATen/ops/_int_mm_cpu_dispatch.h>
71
+ #include <ATen/ops/_jagged_to_padded_dense_forward_cpu_dispatch.h>
72
+ #include <ATen/ops/_linalg_det_cpu_dispatch.h>
73
+ #include <ATen/ops/_linalg_eigh_cpu_dispatch.h>
74
+ #include <ATen/ops/_linalg_eigvals_cpu_dispatch.h>
75
+ #include <ATen/ops/_linalg_slogdet_cpu_dispatch.h>
76
+ #include <ATen/ops/_linalg_solve_ex_cpu_dispatch.h>
77
+ #include <ATen/ops/_linalg_svd_cpu_dispatch.h>
78
+ #include <ATen/ops/_local_scalar_dense_cpu_dispatch.h>
79
+ #include <ATen/ops/_log_softmax_cpu_dispatch.h>
80
+ #include <ATen/ops/_log_softmax_backward_data_cpu_dispatch.h>
81
+ #include <ATen/ops/_logcumsumexp_cpu_dispatch.h>
82
+ #include <ATen/ops/_make_dep_token_cpu_dispatch.h>
83
+ #include <ATen/ops/_make_per_channel_quantized_tensor_cpu_dispatch.h>
84
+ #include <ATen/ops/_make_per_tensor_quantized_tensor_cpu_dispatch.h>
85
+ #include <ATen/ops/_masked_softmax_cpu_dispatch.h>
86
+ #include <ATen/ops/_masked_softmax_backward_cpu_dispatch.h>
87
+ #include <ATen/ops/_native_batch_norm_legit_cpu_dispatch.h>
88
+ #include <ATen/ops/_native_multi_head_attention_cpu_dispatch.h>
89
+ #include <ATen/ops/_nested_compute_contiguous_strides_offsets_cpu_dispatch.h>
90
+ #include <ATen/ops/_nested_from_padded_cpu_dispatch.h>
91
+ #include <ATen/ops/_nested_tensor_from_mask_cpu_dispatch.h>
92
+ #include <ATen/ops/_nested_tensor_from_mask_left_aligned_cpu_dispatch.h>
93
+ #include <ATen/ops/_nested_view_from_buffer_cpu_dispatch.h>
94
+ #include <ATen/ops/_padded_dense_to_jagged_forward_cpu_dispatch.h>
95
+ #include <ATen/ops/_pdist_backward_cpu_dispatch.h>
96
+ #include <ATen/ops/_pdist_forward_cpu_dispatch.h>
97
+ #include <ATen/ops/_prelu_kernel_cpu_dispatch.h>
98
+ #include <ATen/ops/_prelu_kernel_backward_cpu_dispatch.h>
99
+ #include <ATen/ops/_reshape_alias_cpu_dispatch.h>
100
+ #include <ATen/ops/_sample_dirichlet_cpu_dispatch.h>
101
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_cpu_dispatch.h>
102
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_backward_cpu_dispatch.h>
103
+ #include <ATen/ops/_segment_reduce_backward_cpu_dispatch.h>
104
+ #include <ATen/ops/_slow_conv2d_backward_cpu_dispatch.h>
105
+ #include <ATen/ops/_slow_conv2d_forward_cpu_dispatch.h>
106
+ #include <ATen/ops/_softmax_cpu_dispatch.h>
107
+ #include <ATen/ops/_softmax_backward_data_cpu_dispatch.h>
108
+ #include <ATen/ops/_spdiags_cpu_dispatch.h>
109
+ #include <ATen/ops/_stack_cpu_dispatch.h>
110
+ #include <ATen/ops/_standard_gamma_cpu_dispatch.h>
111
+ #include <ATen/ops/_standard_gamma_grad_cpu_dispatch.h>
112
+ #include <ATen/ops/_test_functorch_fallback_cpu_dispatch.h>
113
+ #include <ATen/ops/_test_optional_filled_intlist_cpu_dispatch.h>
114
+ #include <ATen/ops/_test_optional_floatlist_cpu_dispatch.h>
115
+ #include <ATen/ops/_test_optional_intlist_cpu_dispatch.h>
116
+ #include <ATen/ops/_to_sparse_cpu_dispatch.h>
117
+ #include <ATen/ops/_to_sparse_bsc_cpu_dispatch.h>
118
+ #include <ATen/ops/_to_sparse_bsr_cpu_dispatch.h>
119
+ #include <ATen/ops/_to_sparse_csc_cpu_dispatch.h>
120
+ #include <ATen/ops/_to_sparse_csr_cpu_dispatch.h>
121
+ #include <ATen/ops/_transform_bias_rescale_qkv_cpu_dispatch.h>
122
+ #include <ATen/ops/_transformer_encoder_layer_fwd_cpu_dispatch.h>
123
+ #include <ATen/ops/_unique_cpu_dispatch.h>
124
+ #include <ATen/ops/_unique2_cpu_dispatch.h>
125
+ #include <ATen/ops/_upsample_bicubic2d_aa_cpu_dispatch.h>
126
+ #include <ATen/ops/_upsample_bicubic2d_aa_backward_cpu_dispatch.h>
127
+ #include <ATen/ops/_upsample_bilinear2d_aa_cpu_dispatch.h>
128
+ #include <ATen/ops/_upsample_bilinear2d_aa_backward_cpu_dispatch.h>
129
+ #include <ATen/ops/_upsample_nearest_exact1d_cpu_dispatch.h>
130
+ #include <ATen/ops/_upsample_nearest_exact1d_backward_cpu_dispatch.h>
131
+ #include <ATen/ops/_upsample_nearest_exact2d_cpu_dispatch.h>
132
+ #include <ATen/ops/_upsample_nearest_exact2d_backward_cpu_dispatch.h>
133
+ #include <ATen/ops/_upsample_nearest_exact3d_cpu_dispatch.h>
134
+ #include <ATen/ops/_upsample_nearest_exact3d_backward_cpu_dispatch.h>
135
+ #include <ATen/ops/_validate_compressed_sparse_indices_cpu_dispatch.h>
136
+ #include <ATen/ops/_weight_int4pack_mm_for_cpu_cpu_dispatch.h>
137
+ #include <ATen/ops/_weight_int8pack_mm_cpu_dispatch.h>
138
+ #include <ATen/ops/_weight_norm_interface_cpu_dispatch.h>
139
+ #include <ATen/ops/_weight_norm_interface_backward_cpu_dispatch.h>
140
+ #include <ATen/ops/abs_cpu_dispatch.h>
141
+ #include <ATen/ops/acos_cpu_dispatch.h>
142
+ #include <ATen/ops/acosh_cpu_dispatch.h>
143
+ #include <ATen/ops/adaptive_avg_pool2d_cpu_dispatch.h>
144
+ #include <ATen/ops/adaptive_avg_pool3d_cpu_dispatch.h>
145
+ #include <ATen/ops/adaptive_avg_pool3d_backward_cpu_dispatch.h>
146
+ #include <ATen/ops/adaptive_max_pool2d_cpu_dispatch.h>
147
+ #include <ATen/ops/adaptive_max_pool2d_backward_cpu_dispatch.h>
148
+ #include <ATen/ops/adaptive_max_pool3d_cpu_dispatch.h>
149
+ #include <ATen/ops/adaptive_max_pool3d_backward_cpu_dispatch.h>
150
+ #include <ATen/ops/add_cpu_dispatch.h>
151
+ #include <ATen/ops/addbmm_cpu_dispatch.h>
152
+ #include <ATen/ops/addcdiv_cpu_dispatch.h>
153
+ #include <ATen/ops/addcmul_cpu_dispatch.h>
154
+ #include <ATen/ops/addmm_cpu_dispatch.h>
155
+ #include <ATen/ops/addmv_cpu_dispatch.h>
156
+ #include <ATen/ops/addr_cpu_dispatch.h>
157
+ #include <ATen/ops/all_cpu_dispatch.h>
158
+ #include <ATen/ops/amax_cpu_dispatch.h>
159
+ #include <ATen/ops/amin_cpu_dispatch.h>
160
+ #include <ATen/ops/aminmax_cpu_dispatch.h>
161
+ #include <ATen/ops/angle_cpu_dispatch.h>
162
+ #include <ATen/ops/any_cpu_dispatch.h>
163
+ #include <ATen/ops/arange_cpu_dispatch.h>
164
+ #include <ATen/ops/argmax_cpu_dispatch.h>
165
+ #include <ATen/ops/argmin_cpu_dispatch.h>
166
+ #include <ATen/ops/as_strided_cpu_dispatch.h>
167
+ #include <ATen/ops/asin_cpu_dispatch.h>
168
+ #include <ATen/ops/asinh_cpu_dispatch.h>
169
+ #include <ATen/ops/atan_cpu_dispatch.h>
170
+ #include <ATen/ops/atan2_cpu_dispatch.h>
171
+ #include <ATen/ops/atanh_cpu_dispatch.h>
172
+ #include <ATen/ops/avg_pool2d_cpu_dispatch.h>
173
+ #include <ATen/ops/avg_pool2d_backward_cpu_dispatch.h>
174
+ #include <ATen/ops/avg_pool3d_cpu_dispatch.h>
175
+ #include <ATen/ops/avg_pool3d_backward_cpu_dispatch.h>
176
+ #include <ATen/ops/baddbmm_cpu_dispatch.h>
177
+ #include <ATen/ops/batch_norm_backward_cpu_dispatch.h>
178
+ #include <ATen/ops/batch_norm_update_stats_cpu_dispatch.h>
179
+ #include <ATen/ops/bernoulli_cpu_dispatch.h>
180
+ #include <ATen/ops/binary_cross_entropy_cpu_dispatch.h>
181
+ #include <ATen/ops/binary_cross_entropy_backward_cpu_dispatch.h>
182
+ #include <ATen/ops/bincount_cpu_dispatch.h>
183
+ #include <ATen/ops/binomial_cpu_dispatch.h>
184
+ #include <ATen/ops/bitwise_and_cpu_dispatch.h>
185
+ #include <ATen/ops/bitwise_left_shift_cpu_dispatch.h>
186
+ #include <ATen/ops/bitwise_not_cpu_dispatch.h>
187
+ #include <ATen/ops/bitwise_or_cpu_dispatch.h>
188
+ #include <ATen/ops/bitwise_right_shift_cpu_dispatch.h>
189
+ #include <ATen/ops/bitwise_xor_cpu_dispatch.h>
190
+ #include <ATen/ops/bmm_cpu_dispatch.h>
191
+ #include <ATen/ops/bucketize_cpu_dispatch.h>
192
+ #include <ATen/ops/cat_cpu_dispatch.h>
193
+ #include <ATen/ops/cauchy_cpu_dispatch.h>
194
+ #include <ATen/ops/ceil_cpu_dispatch.h>
195
+ #include <ATen/ops/channel_shuffle_cpu_dispatch.h>
196
+ #include <ATen/ops/cholesky_cpu_dispatch.h>
197
+ #include <ATen/ops/cholesky_inverse_cpu_dispatch.h>
198
+ #include <ATen/ops/clamp_cpu_dispatch.h>
199
+ #include <ATen/ops/clamp_max_cpu_dispatch.h>
200
+ #include <ATen/ops/clamp_min_cpu_dispatch.h>
201
+ #include <ATen/ops/col2im_cpu_dispatch.h>
202
+ #include <ATen/ops/complex_cpu_dispatch.h>
203
+ #include <ATen/ops/conj_physical_cpu_dispatch.h>
204
+ #include <ATen/ops/copysign_cpu_dispatch.h>
205
+ #include <ATen/ops/cos_cpu_dispatch.h>
206
+ #include <ATen/ops/cosh_cpu_dispatch.h>
207
+ #include <ATen/ops/count_nonzero_cpu_dispatch.h>
208
+ #include <ATen/ops/cumprod_cpu_dispatch.h>
209
+ #include <ATen/ops/cumsum_cpu_dispatch.h>
210
+ #include <ATen/ops/dequantize_cpu_dispatch.h>
211
+ #include <ATen/ops/digamma_cpu_dispatch.h>
212
+ #include <ATen/ops/div_cpu_dispatch.h>
213
+ #include <ATen/ops/dot_cpu_dispatch.h>
214
+ #include <ATen/ops/elu_cpu_dispatch.h>
215
+ #include <ATen/ops/elu_backward_cpu_dispatch.h>
216
+ #include <ATen/ops/embedding_dense_backward_cpu_dispatch.h>
217
+ #include <ATen/ops/embedding_renorm_cpu_dispatch.h>
218
+ #include <ATen/ops/empty_cpu_dispatch.h>
219
+ #include <ATen/ops/empty_strided_cpu_dispatch.h>
220
+ #include <ATen/ops/eq_cpu_dispatch.h>
221
+ #include <ATen/ops/equal_cpu_dispatch.h>
222
+ #include <ATen/ops/erf_cpu_dispatch.h>
223
+ #include <ATen/ops/erfc_cpu_dispatch.h>
224
+ #include <ATen/ops/erfinv_cpu_dispatch.h>
225
+ #include <ATen/ops/exp_cpu_dispatch.h>
226
+ #include <ATen/ops/exp2_cpu_dispatch.h>
227
+ #include <ATen/ops/expm1_cpu_dispatch.h>
228
+ #include <ATen/ops/exponential_cpu_dispatch.h>
229
+ #include <ATen/ops/eye_cpu_dispatch.h>
230
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_cpu_dispatch.h>
231
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_cpu_dispatch.h>
232
+ #include <ATen/ops/fill_cpu_dispatch.h>
233
+ #include <ATen/ops/flip_cpu_dispatch.h>
234
+ #include <ATen/ops/floor_cpu_dispatch.h>
235
+ #include <ATen/ops/floor_divide_cpu_dispatch.h>
236
+ #include <ATen/ops/fmax_cpu_dispatch.h>
237
+ #include <ATen/ops/fmin_cpu_dispatch.h>
238
+ #include <ATen/ops/fmod_cpu_dispatch.h>
239
+ #include <ATen/ops/frac_cpu_dispatch.h>
240
+ #include <ATen/ops/fractional_max_pool2d_cpu_dispatch.h>
241
+ #include <ATen/ops/fractional_max_pool2d_backward_cpu_dispatch.h>
242
+ #include <ATen/ops/fractional_max_pool3d_cpu_dispatch.h>
243
+ #include <ATen/ops/fractional_max_pool3d_backward_cpu_dispatch.h>
244
+ #include <ATen/ops/frexp_cpu_dispatch.h>
245
+ #include <ATen/ops/from_file_cpu_dispatch.h>
246
+ #include <ATen/ops/gather_cpu_dispatch.h>
247
+ #include <ATen/ops/gcd_cpu_dispatch.h>
248
+ #include <ATen/ops/ge_cpu_dispatch.h>
249
+ #include <ATen/ops/gelu_cpu_dispatch.h>
250
+ #include <ATen/ops/gelu_backward_cpu_dispatch.h>
251
+ #include <ATen/ops/geometric_cpu_dispatch.h>
252
+ #include <ATen/ops/geqrf_cpu_dispatch.h>
253
+ #include <ATen/ops/glu_cpu_dispatch.h>
254
+ #include <ATen/ops/glu_backward_cpu_dispatch.h>
255
+ #include <ATen/ops/glu_backward_jvp_cpu_dispatch.h>
256
+ #include <ATen/ops/glu_jvp_cpu_dispatch.h>
257
+ #include <ATen/ops/grid_sampler_2d_cpu_dispatch.h>
258
+ #include <ATen/ops/grid_sampler_2d_backward_cpu_dispatch.h>
259
+ #include <ATen/ops/grid_sampler_3d_cpu_dispatch.h>
260
+ #include <ATen/ops/grid_sampler_3d_backward_cpu_dispatch.h>
261
+ #include <ATen/ops/gt_cpu_dispatch.h>
262
+ #include <ATen/ops/hardshrink_cpu_dispatch.h>
263
+ #include <ATen/ops/hardshrink_backward_cpu_dispatch.h>
264
+ #include <ATen/ops/hardsigmoid_cpu_dispatch.h>
265
+ #include <ATen/ops/hardsigmoid_backward_cpu_dispatch.h>
266
+ #include <ATen/ops/hardswish_cpu_dispatch.h>
267
+ #include <ATen/ops/hardswish_backward_cpu_dispatch.h>
268
+ #include <ATen/ops/hardtanh_cpu_dispatch.h>
269
+ #include <ATen/ops/hardtanh_backward_cpu_dispatch.h>
270
+ #include <ATen/ops/heaviside_cpu_dispatch.h>
271
+ #include <ATen/ops/histc_cpu_dispatch.h>
272
+ #include <ATen/ops/histogram_cpu_dispatch.h>
273
+ #include <ATen/ops/huber_loss_cpu_dispatch.h>
274
+ #include <ATen/ops/huber_loss_backward_cpu_dispatch.h>
275
+ #include <ATen/ops/hypot_cpu_dispatch.h>
276
+ #include <ATen/ops/i0_cpu_dispatch.h>
277
+ #include <ATen/ops/igamma_cpu_dispatch.h>
278
+ #include <ATen/ops/igammac_cpu_dispatch.h>
279
+ #include <ATen/ops/im2col_cpu_dispatch.h>
280
+ #include <ATen/ops/index_cpu_dispatch.h>
281
+ #include <ATen/ops/index_add_cpu_dispatch.h>
282
+ #include <ATen/ops/index_copy_cpu_dispatch.h>
283
+ #include <ATen/ops/index_fill_cpu_dispatch.h>
284
+ #include <ATen/ops/index_reduce_cpu_dispatch.h>
285
+ #include <ATen/ops/index_select_cpu_dispatch.h>
286
+ #include <ATen/ops/is_set_to_cpu_dispatch.h>
287
+ #include <ATen/ops/isin_cpu_dispatch.h>
288
+ #include <ATen/ops/isnan_cpu_dispatch.h>
289
+ #include <ATen/ops/isneginf_cpu_dispatch.h>
290
+ #include <ATen/ops/isposinf_cpu_dispatch.h>
291
+ #include <ATen/ops/kthvalue_cpu_dispatch.h>
292
+ #include <ATen/ops/lcm_cpu_dispatch.h>
293
+ #include <ATen/ops/le_cpu_dispatch.h>
294
+ #include <ATen/ops/leaky_relu_cpu_dispatch.h>
295
+ #include <ATen/ops/leaky_relu_backward_cpu_dispatch.h>
296
+ #include <ATen/ops/lerp_cpu_dispatch.h>
297
+ #include <ATen/ops/lgamma_cpu_dispatch.h>
298
+ #include <ATen/ops/linalg_cholesky_ex_cpu_dispatch.h>
299
+ #include <ATen/ops/linalg_cross_cpu_dispatch.h>
300
+ #include <ATen/ops/linalg_eig_cpu_dispatch.h>
301
+ #include <ATen/ops/linalg_eigvals_cpu_dispatch.h>
302
+ #include <ATen/ops/linalg_householder_product_cpu_dispatch.h>
303
+ #include <ATen/ops/linalg_inv_ex_cpu_dispatch.h>
304
+ #include <ATen/ops/linalg_ldl_factor_ex_cpu_dispatch.h>
305
+ #include <ATen/ops/linalg_ldl_solve_cpu_dispatch.h>
306
+ #include <ATen/ops/linalg_lstsq_cpu_dispatch.h>
307
+ #include <ATen/ops/linalg_lu_cpu_dispatch.h>
308
+ #include <ATen/ops/linalg_lu_factor_ex_cpu_dispatch.h>
309
+ #include <ATen/ops/linalg_lu_solve_cpu_dispatch.h>
310
+ #include <ATen/ops/linalg_matrix_exp_cpu_dispatch.h>
311
+ #include <ATen/ops/linalg_qr_cpu_dispatch.h>
312
+ #include <ATen/ops/linalg_solve_triangular_cpu_dispatch.h>
313
+ #include <ATen/ops/linalg_vector_norm_cpu_dispatch.h>
314
+ #include <ATen/ops/linspace_cpu_dispatch.h>
315
+ #include <ATen/ops/log_cpu_dispatch.h>
316
+ #include <ATen/ops/log10_cpu_dispatch.h>
317
+ #include <ATen/ops/log1p_cpu_dispatch.h>
318
+ #include <ATen/ops/log2_cpu_dispatch.h>
319
+ #include <ATen/ops/log_normal_cpu_dispatch.h>
320
+ #include <ATen/ops/log_sigmoid_backward_cpu_dispatch.h>
321
+ #include <ATen/ops/log_sigmoid_forward_cpu_dispatch.h>
322
+ #include <ATen/ops/logaddexp_cpu_dispatch.h>
323
+ #include <ATen/ops/logaddexp2_cpu_dispatch.h>
324
+ #include <ATen/ops/logical_and_cpu_dispatch.h>
325
+ #include <ATen/ops/logical_not_cpu_dispatch.h>
326
+ #include <ATen/ops/logical_or_cpu_dispatch.h>
327
+ #include <ATen/ops/logical_xor_cpu_dispatch.h>
328
+ #include <ATen/ops/logit_cpu_dispatch.h>
329
+ #include <ATen/ops/logit_backward_cpu_dispatch.h>
330
+ #include <ATen/ops/logspace_cpu_dispatch.h>
331
+ #include <ATen/ops/lshift_cpu_dispatch.h>
332
+ #include <ATen/ops/lt_cpu_dispatch.h>
333
+ #include <ATen/ops/lu_unpack_cpu_dispatch.h>
334
+ #include <ATen/ops/masked_fill_cpu_dispatch.h>
335
+ #include <ATen/ops/masked_scatter_cpu_dispatch.h>
336
+ #include <ATen/ops/masked_select_cpu_dispatch.h>
337
+ #include <ATen/ops/max_cpu_dispatch.h>
338
+ #include <ATen/ops/max_pool2d_with_indices_cpu_dispatch.h>
339
+ #include <ATen/ops/max_pool2d_with_indices_backward_cpu_dispatch.h>
340
+ #include <ATen/ops/max_pool3d_with_indices_cpu_dispatch.h>
341
+ #include <ATen/ops/max_pool3d_with_indices_backward_cpu_dispatch.h>
342
+ #include <ATen/ops/max_unpool2d_cpu_dispatch.h>
343
+ #include <ATen/ops/max_unpool3d_cpu_dispatch.h>
344
+ #include <ATen/ops/maximum_cpu_dispatch.h>
345
+ #include <ATen/ops/mean_cpu_dispatch.h>
346
+ #include <ATen/ops/median_cpu_dispatch.h>
347
+ #include <ATen/ops/min_cpu_dispatch.h>
348
+ #include <ATen/ops/minimum_cpu_dispatch.h>
349
+ #include <ATen/ops/mish_cpu_dispatch.h>
350
+ #include <ATen/ops/mish_backward_cpu_dispatch.h>
351
+ #include <ATen/ops/mkldnn_rnn_layer_cpu_dispatch.h>
352
+ #include <ATen/ops/mkldnn_rnn_layer_backward_cpu_dispatch.h>
353
+ #include <ATen/ops/mm_cpu_dispatch.h>
354
+ #include <ATen/ops/mode_cpu_dispatch.h>
355
+ #include <ATen/ops/mse_loss_cpu_dispatch.h>
356
+ #include <ATen/ops/mse_loss_backward_cpu_dispatch.h>
357
+ #include <ATen/ops/mul_cpu_dispatch.h>
358
+ #include <ATen/ops/multi_margin_loss_cpu_dispatch.h>
359
+ #include <ATen/ops/multi_margin_loss_backward_cpu_dispatch.h>
360
+ #include <ATen/ops/multilabel_margin_loss_backward_cpu_dispatch.h>
361
+ #include <ATen/ops/multilabel_margin_loss_forward_cpu_dispatch.h>
362
+ #include <ATen/ops/multinomial_cpu_dispatch.h>
363
+ #include <ATen/ops/mvlgamma_cpu_dispatch.h>
364
+ #include <ATen/ops/nan_to_num_cpu_dispatch.h>
365
+ #include <ATen/ops/nanmedian_cpu_dispatch.h>
366
+ #include <ATen/ops/nansum_cpu_dispatch.h>
367
+ #include <ATen/ops/narrow_copy_cpu_dispatch.h>
368
+ #include <ATen/ops/native_batch_norm_cpu_dispatch.h>
369
+ #include <ATen/ops/native_batch_norm_backward_cpu_dispatch.h>
370
+ #include <ATen/ops/native_channel_shuffle_cpu_dispatch.h>
371
+ #include <ATen/ops/native_dropout_cpu_dispatch.h>
372
+ #include <ATen/ops/native_dropout_backward_cpu_dispatch.h>
373
+ #include <ATen/ops/native_group_norm_cpu_dispatch.h>
374
+ #include <ATen/ops/native_group_norm_backward_cpu_dispatch.h>
375
+ #include <ATen/ops/native_layer_norm_cpu_dispatch.h>
376
+ #include <ATen/ops/native_layer_norm_backward_cpu_dispatch.h>
377
+ #include <ATen/ops/ne_cpu_dispatch.h>
378
+ #include <ATen/ops/neg_cpu_dispatch.h>
379
+ #include <ATen/ops/nextafter_cpu_dispatch.h>
380
+ #include <ATen/ops/nll_loss2d_backward_cpu_dispatch.h>
381
+ #include <ATen/ops/nll_loss2d_forward_cpu_dispatch.h>
382
+ #include <ATen/ops/nll_loss_backward_cpu_dispatch.h>
383
+ #include <ATen/ops/nll_loss_forward_cpu_dispatch.h>
384
+ #include <ATen/ops/nonzero_cpu_dispatch.h>
385
+ #include <ATen/ops/nonzero_static_cpu_dispatch.h>
386
+ #include <ATen/ops/norm_cpu_dispatch.h>
387
+ #include <ATen/ops/normal_cpu_dispatch.h>
388
+ #include <ATen/ops/ormqr_cpu_dispatch.h>
389
+ #include <ATen/ops/pixel_shuffle_cpu_dispatch.h>
390
+ #include <ATen/ops/pixel_unshuffle_cpu_dispatch.h>
391
+ #include <ATen/ops/poisson_cpu_dispatch.h>
392
+ #include <ATen/ops/polar_cpu_dispatch.h>
393
+ #include <ATen/ops/polygamma_cpu_dispatch.h>
394
+ #include <ATen/ops/pow_cpu_dispatch.h>
395
+ #include <ATen/ops/prod_cpu_dispatch.h>
396
+ #include <ATen/ops/put_cpu_dispatch.h>
397
+ #include <ATen/ops/quantize_per_channel_cpu_dispatch.h>
398
+ #include <ATen/ops/quantize_per_tensor_cpu_dispatch.h>
399
+ #include <ATen/ops/quantize_per_tensor_dynamic_cpu_dispatch.h>
400
+ #include <ATen/ops/random_cpu_dispatch.h>
401
+ #include <ATen/ops/randperm_cpu_dispatch.h>
402
+ #include <ATen/ops/range_cpu_dispatch.h>
403
+ #include <ATen/ops/reciprocal_cpu_dispatch.h>
404
+ #include <ATen/ops/reflection_pad1d_cpu_dispatch.h>
405
+ #include <ATen/ops/reflection_pad1d_backward_cpu_dispatch.h>
406
+ #include <ATen/ops/reflection_pad2d_cpu_dispatch.h>
407
+ #include <ATen/ops/reflection_pad2d_backward_cpu_dispatch.h>
408
+ #include <ATen/ops/reflection_pad3d_cpu_dispatch.h>
409
+ #include <ATen/ops/reflection_pad3d_backward_cpu_dispatch.h>
410
+ #include <ATen/ops/relu_cpu_dispatch.h>
411
+ #include <ATen/ops/remainder_cpu_dispatch.h>
412
+ #include <ATen/ops/renorm_cpu_dispatch.h>
413
+ #include <ATen/ops/repeat_interleave_cpu_dispatch.h>
414
+ #include <ATen/ops/replication_pad1d_cpu_dispatch.h>
415
+ #include <ATen/ops/replication_pad1d_backward_cpu_dispatch.h>
416
+ #include <ATen/ops/replication_pad2d_cpu_dispatch.h>
417
+ #include <ATen/ops/replication_pad2d_backward_cpu_dispatch.h>
418
+ #include <ATen/ops/replication_pad3d_cpu_dispatch.h>
419
+ #include <ATen/ops/replication_pad3d_backward_cpu_dispatch.h>
420
+ #include <ATen/ops/resize_cpu_dispatch.h>
421
+ #include <ATen/ops/roll_cpu_dispatch.h>
422
+ #include <ATen/ops/round_cpu_dispatch.h>
423
+ #include <ATen/ops/rrelu_with_noise_cpu_dispatch.h>
424
+ #include <ATen/ops/rshift_cpu_dispatch.h>
425
+ #include <ATen/ops/rsqrt_cpu_dispatch.h>
426
+ #include <ATen/ops/rsub_cpu_dispatch.h>
427
+ #include <ATen/ops/scatter_cpu_dispatch.h>
428
+ #include <ATen/ops/scatter_add_cpu_dispatch.h>
429
+ #include <ATen/ops/scatter_reduce_cpu_dispatch.h>
430
+ #include <ATen/ops/searchsorted_cpu_dispatch.h>
431
+ #include <ATen/ops/segment_reduce_cpu_dispatch.h>
432
+ #include <ATen/ops/set_cpu_dispatch.h>
433
+ #include <ATen/ops/sgn_cpu_dispatch.h>
434
+ #include <ATen/ops/sigmoid_cpu_dispatch.h>
435
+ #include <ATen/ops/sigmoid_backward_cpu_dispatch.h>
436
+ #include <ATen/ops/sign_cpu_dispatch.h>
437
+ #include <ATen/ops/signbit_cpu_dispatch.h>
438
+ #include <ATen/ops/silu_cpu_dispatch.h>
439
+ #include <ATen/ops/silu_backward_cpu_dispatch.h>
440
+ #include <ATen/ops/sin_cpu_dispatch.h>
441
+ #include <ATen/ops/sinc_cpu_dispatch.h>
442
+ #include <ATen/ops/sinh_cpu_dispatch.h>
443
+ #include <ATen/ops/slow_conv3d_forward_cpu_dispatch.h>
444
+ #include <ATen/ops/slow_conv_dilated2d_cpu_dispatch.h>
445
+ #include <ATen/ops/slow_conv_dilated3d_cpu_dispatch.h>
446
+ #include <ATen/ops/slow_conv_transpose2d_cpu_dispatch.h>
447
+ #include <ATen/ops/slow_conv_transpose3d_cpu_dispatch.h>
448
+ #include <ATen/ops/smooth_l1_loss_cpu_dispatch.h>
449
+ #include <ATen/ops/smooth_l1_loss_backward_cpu_dispatch.h>
450
+ #include <ATen/ops/softplus_cpu_dispatch.h>
451
+ #include <ATen/ops/softplus_backward_cpu_dispatch.h>
452
+ #include <ATen/ops/softshrink_cpu_dispatch.h>
453
+ #include <ATen/ops/softshrink_backward_cpu_dispatch.h>
454
+ #include <ATen/ops/sort_cpu_dispatch.h>
455
+ #include <ATen/ops/special_airy_ai_cpu_dispatch.h>
456
+ #include <ATen/ops/special_bessel_j0_cpu_dispatch.h>
457
+ #include <ATen/ops/special_bessel_j1_cpu_dispatch.h>
458
+ #include <ATen/ops/special_bessel_y0_cpu_dispatch.h>
459
+ #include <ATen/ops/special_bessel_y1_cpu_dispatch.h>
460
+ #include <ATen/ops/special_chebyshev_polynomial_t_cpu_dispatch.h>
461
+ #include <ATen/ops/special_chebyshev_polynomial_u_cpu_dispatch.h>
462
+ #include <ATen/ops/special_chebyshev_polynomial_v_cpu_dispatch.h>
463
+ #include <ATen/ops/special_chebyshev_polynomial_w_cpu_dispatch.h>
464
+ #include <ATen/ops/special_entr_cpu_dispatch.h>
465
+ #include <ATen/ops/special_erfcx_cpu_dispatch.h>
466
+ #include <ATen/ops/special_hermite_polynomial_h_cpu_dispatch.h>
467
+ #include <ATen/ops/special_hermite_polynomial_he_cpu_dispatch.h>
468
+ #include <ATen/ops/special_i0e_cpu_dispatch.h>
469
+ #include <ATen/ops/special_i1_cpu_dispatch.h>
470
+ #include <ATen/ops/special_i1e_cpu_dispatch.h>
471
+ #include <ATen/ops/special_laguerre_polynomial_l_cpu_dispatch.h>
472
+ #include <ATen/ops/special_legendre_polynomial_p_cpu_dispatch.h>
473
+ #include <ATen/ops/special_log_ndtr_cpu_dispatch.h>
474
+ #include <ATen/ops/special_modified_bessel_i0_cpu_dispatch.h>
475
+ #include <ATen/ops/special_modified_bessel_i1_cpu_dispatch.h>
476
+ #include <ATen/ops/special_modified_bessel_k0_cpu_dispatch.h>
477
+ #include <ATen/ops/special_modified_bessel_k1_cpu_dispatch.h>
478
+ #include <ATen/ops/special_ndtri_cpu_dispatch.h>
479
+ #include <ATen/ops/special_scaled_modified_bessel_k0_cpu_dispatch.h>
480
+ #include <ATen/ops/special_scaled_modified_bessel_k1_cpu_dispatch.h>
481
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_t_cpu_dispatch.h>
482
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_u_cpu_dispatch.h>
483
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_v_cpu_dispatch.h>
484
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_w_cpu_dispatch.h>
485
+ #include <ATen/ops/special_spherical_bessel_j0_cpu_dispatch.h>
486
+ #include <ATen/ops/special_xlog1py_cpu_dispatch.h>
487
+ #include <ATen/ops/special_zeta_cpu_dispatch.h>
488
+ #include <ATen/ops/sqrt_cpu_dispatch.h>
489
+ #include <ATen/ops/sspaddmm_cpu_dispatch.h>
490
+ #include <ATen/ops/std_cpu_dispatch.h>
491
+ #include <ATen/ops/std_mean_cpu_dispatch.h>
492
+ #include <ATen/ops/sub_cpu_dispatch.h>
493
+ #include <ATen/ops/sum_cpu_dispatch.h>
494
+ #include <ATen/ops/take_cpu_dispatch.h>
495
+ #include <ATen/ops/tan_cpu_dispatch.h>
496
+ #include <ATen/ops/tanh_cpu_dispatch.h>
497
+ #include <ATen/ops/tanh_backward_cpu_dispatch.h>
498
+ #include <ATen/ops/threshold_cpu_dispatch.h>
499
+ #include <ATen/ops/threshold_backward_cpu_dispatch.h>
500
+ #include <ATen/ops/to_mkldnn_cpu_dispatch.h>
501
+ #include <ATen/ops/topk_cpu_dispatch.h>
502
+ #include <ATen/ops/trace_cpu_dispatch.h>
503
+ #include <ATen/ops/triangular_solve_cpu_dispatch.h>
504
+ #include <ATen/ops/tril_cpu_dispatch.h>
505
+ #include <ATen/ops/tril_indices_cpu_dispatch.h>
506
+ #include <ATen/ops/triu_cpu_dispatch.h>
507
+ #include <ATen/ops/triu_indices_cpu_dispatch.h>
508
+ #include <ATen/ops/trunc_cpu_dispatch.h>
509
+ #include <ATen/ops/unfold_cpu_dispatch.h>
510
+ #include <ATen/ops/unfold_backward_cpu_dispatch.h>
511
+ #include <ATen/ops/uniform_cpu_dispatch.h>
512
+ #include <ATen/ops/unique_consecutive_cpu_dispatch.h>
513
+ #include <ATen/ops/unique_dim_cpu_dispatch.h>
514
+ #include <ATen/ops/unique_dim_consecutive_cpu_dispatch.h>
515
+ #include <ATen/ops/upsample_bicubic2d_cpu_dispatch.h>
516
+ #include <ATen/ops/upsample_bicubic2d_backward_cpu_dispatch.h>
517
+ #include <ATen/ops/upsample_bilinear2d_cpu_dispatch.h>
518
+ #include <ATen/ops/upsample_bilinear2d_backward_cpu_dispatch.h>
519
+ #include <ATen/ops/upsample_linear1d_cpu_dispatch.h>
520
+ #include <ATen/ops/upsample_linear1d_backward_cpu_dispatch.h>
521
+ #include <ATen/ops/upsample_nearest1d_cpu_dispatch.h>
522
+ #include <ATen/ops/upsample_nearest1d_backward_cpu_dispatch.h>
523
+ #include <ATen/ops/upsample_nearest2d_cpu_dispatch.h>
524
+ #include <ATen/ops/upsample_nearest2d_backward_cpu_dispatch.h>
525
+ #include <ATen/ops/upsample_nearest3d_cpu_dispatch.h>
526
+ #include <ATen/ops/upsample_nearest3d_backward_cpu_dispatch.h>
527
+ #include <ATen/ops/upsample_trilinear3d_cpu_dispatch.h>
528
+ #include <ATen/ops/upsample_trilinear3d_backward_cpu_dispatch.h>
529
+ #include <ATen/ops/var_cpu_dispatch.h>
530
+ #include <ATen/ops/var_mean_cpu_dispatch.h>
531
+ #include <ATen/ops/vdot_cpu_dispatch.h>
532
+ #include <ATen/ops/view_cpu_dispatch.h>
533
+ #include <ATen/ops/view_as_complex_cpu_dispatch.h>
534
+ #include <ATen/ops/view_as_real_cpu_dispatch.h>
535
+ #include <ATen/ops/where_cpu_dispatch.h>
536
+ #include <ATen/ops/xlogy_cpu_dispatch.h>
537
+ #include <ATen/ops/zero_cpu_dispatch.h>
538
+
539
+
540
+
lib/python3.12/site-packages/torch/include/ATen/CPUGeneratorImpl.h ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/core/Generator.h>
4
+ #include <ATen/core/MT19937RNGEngine.h>
5
+ #include <c10/core/GeneratorImpl.h>
6
+ #include <optional>
7
+
8
+ namespace at {
9
+
10
+ struct TORCH_API CPUGeneratorImpl : public c10::GeneratorImpl {
11
+ // Constructors
12
+ CPUGeneratorImpl(uint64_t seed_in = default_rng_seed_val);
13
+ ~CPUGeneratorImpl() override = default;
14
+
15
+ // CPUGeneratorImpl methods
16
+ std::shared_ptr<CPUGeneratorImpl> clone() const;
17
+ void set_current_seed(uint64_t seed) override;
18
+ void set_offset(uint64_t offset) override;
19
+ uint64_t get_offset() const override;
20
+ uint64_t current_seed() const override;
21
+ uint64_t seed() override;
22
+ void set_state(const c10::TensorImpl& new_state) override;
23
+ c10::intrusive_ptr<c10::TensorImpl> get_state() const override;
24
+ static c10::DeviceType device_type();
25
+ uint32_t random();
26
+ uint64_t random64();
27
+ std::optional<float> next_float_normal_sample();
28
+ std::optional<double> next_double_normal_sample();
29
+ void set_next_float_normal_sample(std::optional<float> randn);
30
+ void set_next_double_normal_sample(std::optional<double> randn);
31
+ at::mt19937 engine();
32
+ void set_engine(at::mt19937 engine);
33
+
34
+ private:
35
+ CPUGeneratorImpl* clone_impl() const override;
36
+ at::mt19937 engine_;
37
+ std::optional<float> next_float_normal_sample_;
38
+ std::optional<double> next_double_normal_sample_;
39
+ };
40
+
41
+ namespace detail {
42
+
43
+ TORCH_API const Generator& getDefaultCPUGenerator();
44
+ TORCH_API Generator
45
+ createCPUGenerator(uint64_t seed_val = default_rng_seed_val);
46
+
47
+ } // namespace detail
48
+
49
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/CUDAFunctions.h ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <ATen/core/TensorBody.h>
2
+
3
+ // TODO Undo all logic introduced for Note [Avoiding Include Cycles In Static Dispatch]
4
+ // Code introduced to avoid cyclic dependency in static dispatch is no longer
5
+ // needed as static dispatch logic is moved from TensorBody.h, which caused cycles in the first place,
6
+ // to Operators.cpp for supporting multiple backends with multiple kernels.
7
+ //
8
+ // Note [Avoiding Include Cycles In Static Dispatch]
9
+ // In order to avoid #include cycles in the static dispatch build, we've carefully split out
10
+ // the static function definition files into {DispatchKey}Functions.h and {DispatchKey}Functions_inl.h.
11
+ //
12
+ // Without this split, the include cycle looks like TensorBody.h -> CPUFunctions.h -> TensorBody.h.
13
+ // - TensorBody.h #includes CPUFunctions.h in the static dispatch build, because the tensor methods
14
+ // all need to call into the fastpath C++ API defined in CPUFunctions.h. The methods are also all
15
+ // directly inlined into TensorBody.h.
16
+ // - CPUFunctions.h #includes TensorBody.h because it contains function declarations for the entire C++ API,
17
+ // which include functions that have defaultable std::optional<Tensor> arguments.
18
+ // That requires knowing the full Tensor class definition.
19
+ //
20
+ // We break the cycle by doing the following:
21
+ // - Split out CPUFunction.h into two files: CPUFunctions.h and CPUFunctions_inl.h
22
+ // - CPUFunction.h is a dummy file that just includes the Tensor class and includes CPUFunctions_inl.,
23
+ // - CPUFunctions_inl.h includes everything else
24
+ // - (only in the static dispatch build) TensorBody.h makes sure to finish defining the Tensor class,
25
+ // and then it includes CPUFunctions_inl.h.
26
+ // - All other files that want the cpu fastpath functions can include CPUFunctions.h directly.
27
+ // - This also means that static dispatch build, CPUFunctions.h only needs to
28
+ // #include TensorBody.h, and it will automatically bring in CPUFunctions_inl.h.
29
+ #include <ATen/CUDAFunctions_inl.h>
lib/python3.12/site-packages/torch/include/ATen/CollapseDims.h ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <c10/util/Exception.h>
2
+ #include <utility>
3
+
4
+ namespace at {
5
+
6
+ /*
7
+ [collapse dims] Updates sizes, and strides to reflect a "collapse" of
8
+ the info, possibly excluding the optional excludeDim. A "collapsed" version
9
+ of the info is the fewest dims that order the tensor's elements in the same
10
+ way as the original info. If excludeDim is specified, the collapse is the
11
+ fewest dims that order the tensor's elements as the original and preserve the
12
+ excluded dimension, unless the tensor collapses to a point.
13
+
14
+ This function returns a pair of values.
15
+
16
+ 1) The (new) index of the preserved dimension if excludeDim is
17
+ specified. 0 if the tensor is collapsed to a point. -1
18
+ otherwise.
19
+
20
+ 2) The new number of dimensions.
21
+ */
22
+ template <typename T>
23
+ inline std::pair<int64_t, int64_t> collapse_dims(
24
+ T* sizes,
25
+ T* strides,
26
+ int64_t dims,
27
+ const int excludeDim = -1) {
28
+ TORCH_CHECK(
29
+ excludeDim >= -1 && excludeDim < dims,
30
+ "expected excluded dim between -1 and dims - 1");
31
+
32
+ int64_t stopDim = (excludeDim == -1) ? dims : excludeDim;
33
+ int64_t newIndex = -1;
34
+ int64_t oldIndex = 0;
35
+ int64_t remappedExcludedDim = -1;
36
+
37
+ while (oldIndex < dims) {
38
+ // Finds a dimension to collapse into
39
+ for (; oldIndex < stopDim; ++oldIndex) {
40
+ if (sizes[oldIndex] == 1) {
41
+ continue;
42
+ }
43
+
44
+ ++newIndex;
45
+ sizes[newIndex] = sizes[oldIndex];
46
+ strides[newIndex] = strides[oldIndex];
47
+ ++oldIndex;
48
+ break;
49
+ }
50
+
51
+ // Collapses dims
52
+ for (; oldIndex < stopDim; ++oldIndex) {
53
+ if (sizes[oldIndex] == 1) {
54
+ continue;
55
+ }
56
+
57
+ if (strides[newIndex] == sizes[oldIndex] * strides[oldIndex]) {
58
+ sizes[newIndex] *= sizes[oldIndex];
59
+ strides[newIndex] = strides[oldIndex];
60
+ } else {
61
+ ++newIndex;
62
+ sizes[newIndex] = sizes[oldIndex];
63
+ strides[newIndex] = strides[oldIndex];
64
+ }
65
+ }
66
+
67
+ // Handles excludeDim being set (oldIndex == excludeDim)
68
+ if (oldIndex != dims) {
69
+ // Preserves excluded dimension
70
+ ++newIndex;
71
+ sizes[newIndex] = sizes[oldIndex];
72
+ strides[newIndex] = strides[oldIndex];
73
+ remappedExcludedDim = newIndex;
74
+
75
+ // Restarts iteration after excludeDim
76
+ ++oldIndex;
77
+ stopDim = dims;
78
+ }
79
+ }
80
+
81
+ // Handles special case of all dims size 1
82
+ if (newIndex == -1 || (newIndex == 0 && sizes[0] == 1)) {
83
+ dims = 1;
84
+ sizes[0] = 1;
85
+ strides[0] = 1;
86
+
87
+ return std::pair<int64_t, int64_t>(0, 1);
88
+ }
89
+
90
+ dims = newIndex + 1;
91
+ return std::pair<int64_t, int64_t>(remappedExcludedDim, dims);
92
+ }
93
+
94
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/CompositeExplicitAutogradFunctions.h ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <ATen/core/TensorBody.h>
2
+
3
+ // TODO Undo all logic introduced for Note [Avoiding Include Cycles In Static Dispatch]
4
+ // Code introduced to avoid cyclic dependency in static dispatch is no longer
5
+ // needed as static dispatch logic is moved from TensorBody.h, which caused cycles in the first place,
6
+ // to Operators.cpp for supporting multiple backends with multiple kernels.
7
+ //
8
+ // Note [Avoiding Include Cycles In Static Dispatch]
9
+ // In order to avoid #include cycles in the static dispatch build, we've carefully split out
10
+ // the static function definition files into {DispatchKey}Functions.h and {DispatchKey}Functions_inl.h.
11
+ //
12
+ // Without this split, the include cycle looks like TensorBody.h -> CPUFunctions.h -> TensorBody.h.
13
+ // - TensorBody.h #includes CPUFunctions.h in the static dispatch build, because the tensor methods
14
+ // all need to call into the fastpath C++ API defined in CPUFunctions.h. The methods are also all
15
+ // directly inlined into TensorBody.h.
16
+ // - CPUFunctions.h #includes TensorBody.h because it contains function declarations for the entire C++ API,
17
+ // which include functions that have defaultable std::optional<Tensor> arguments.
18
+ // That requires knowing the full Tensor class definition.
19
+ //
20
+ // We break the cycle by doing the following:
21
+ // - Split out CPUFunction.h into two files: CPUFunctions.h and CPUFunctions_inl.h
22
+ // - CPUFunction.h is a dummy file that just includes the Tensor class and includes CPUFunctions_inl.,
23
+ // - CPUFunctions_inl.h includes everything else
24
+ // - (only in the static dispatch build) TensorBody.h makes sure to finish defining the Tensor class,
25
+ // and then it includes CPUFunctions_inl.h.
26
+ // - All other files that want the cpu fastpath functions can include CPUFunctions.h directly.
27
+ // - This also means that static dispatch build, CPUFunctions.h only needs to
28
+ // #include TensorBody.h, and it will automatically bring in CPUFunctions_inl.h.
29
+ #include <ATen/CompositeExplicitAutogradFunctions_inl.h>
lib/python3.12/site-packages/torch/include/ATen/CompositeExplicitAutogradNonFunctionalFunctions.h ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <ATen/core/TensorBody.h>
2
+
3
+ // TODO Undo all logic introduced for Note [Avoiding Include Cycles In Static Dispatch]
4
+ // Code introduced to avoid cyclic dependency in static dispatch is no longer
5
+ // needed as static dispatch logic is moved from TensorBody.h, which caused cycles in the first place,
6
+ // to Operators.cpp for supporting multiple backends with multiple kernels.
7
+ //
8
+ // Note [Avoiding Include Cycles In Static Dispatch]
9
+ // In order to avoid #include cycles in the static dispatch build, we've carefully split out
10
+ // the static function definition files into {DispatchKey}Functions.h and {DispatchKey}Functions_inl.h.
11
+ //
12
+ // Without this split, the include cycle looks like TensorBody.h -> CPUFunctions.h -> TensorBody.h.
13
+ // - TensorBody.h #includes CPUFunctions.h in the static dispatch build, because the tensor methods
14
+ // all need to call into the fastpath C++ API defined in CPUFunctions.h. The methods are also all
15
+ // directly inlined into TensorBody.h.
16
+ // - CPUFunctions.h #includes TensorBody.h because it contains function declarations for the entire C++ API,
17
+ // which include functions that have defaultable std::optional<Tensor> arguments.
18
+ // That requires knowing the full Tensor class definition.
19
+ //
20
+ // We break the cycle by doing the following:
21
+ // - Split out CPUFunction.h into two files: CPUFunctions.h and CPUFunctions_inl.h
22
+ // - CPUFunction.h is a dummy file that just includes the Tensor class and includes CPUFunctions_inl.,
23
+ // - CPUFunctions_inl.h includes everything else
24
+ // - (only in the static dispatch build) TensorBody.h makes sure to finish defining the Tensor class,
25
+ // and then it includes CPUFunctions_inl.h.
26
+ // - All other files that want the cpu fastpath functions can include CPUFunctions.h directly.
27
+ // - This also means that static dispatch build, CPUFunctions.h only needs to
28
+ // #include TensorBody.h, and it will automatically bring in CPUFunctions_inl.h.
29
+ #include <ATen/CompositeExplicitAutogradNonFunctionalFunctions_inl.h>
lib/python3.12/site-packages/torch/include/ATen/CompositeExplicitAutogradNonFunctionalFunctions_inl.h ADDED
@@ -0,0 +1,323 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+ // @generated by torchgen/gen.py from DispatchKeyFunctions_inl.h
3
+
4
+ // NB: The implementing C++ file is RegisterDispatchKey.cpp
5
+
6
+ // The only #includes we need are for custom classes that have defaults in the C++ API
7
+ #include <c10/core/MemoryFormat.h>
8
+ #include <c10/core/Scalar.h>
9
+ #include <ATen/core/Reduction.h>
10
+
11
+ #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
12
+ #error This change adds a dependency on all pytorch operators, meaning the \
13
+ file will need to be re-compiled every time an operator is changed or added. \
14
+ Consider including a specific operator from \
15
+ <ATen/ops/{my_operator}_compositeexplicitautogradnonfunctional_dispatch.h>. \
16
+ See NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
17
+ #endif
18
+
19
+ #include <ATen/ops/_addmm_activation_compositeexplicitautogradnonfunctional_dispatch.h>
20
+ #include <ATen/ops/_conj_copy_compositeexplicitautogradnonfunctional_dispatch.h>
21
+ #include <ATen/ops/_convert_indices_from_coo_to_csr_compositeexplicitautogradnonfunctional_dispatch.h>
22
+ #include <ATen/ops/_convert_indices_from_csr_to_coo_compositeexplicitautogradnonfunctional_dispatch.h>
23
+ #include <ATen/ops/_fw_primal_copy_compositeexplicitautogradnonfunctional_dispatch.h>
24
+ #include <ATen/ops/_indices_copy_compositeexplicitautogradnonfunctional_dispatch.h>
25
+ #include <ATen/ops/_linalg_det_compositeexplicitautogradnonfunctional_dispatch.h>
26
+ #include <ATen/ops/_linalg_eigh_compositeexplicitautogradnonfunctional_dispatch.h>
27
+ #include <ATen/ops/_linalg_slogdet_compositeexplicitautogradnonfunctional_dispatch.h>
28
+ #include <ATen/ops/_linalg_solve_ex_compositeexplicitautogradnonfunctional_dispatch.h>
29
+ #include <ATen/ops/_linalg_svd_compositeexplicitautogradnonfunctional_dispatch.h>
30
+ #include <ATen/ops/_log_softmax_compositeexplicitautogradnonfunctional_dispatch.h>
31
+ #include <ATen/ops/_log_softmax_backward_data_compositeexplicitautogradnonfunctional_dispatch.h>
32
+ #include <ATen/ops/_make_dual_copy_compositeexplicitautogradnonfunctional_dispatch.h>
33
+ #include <ATen/ops/_neg_view_copy_compositeexplicitautogradnonfunctional_dispatch.h>
34
+ #include <ATen/ops/_nested_get_values_copy_compositeexplicitautogradnonfunctional_dispatch.h>
35
+ #include <ATen/ops/_nested_view_from_buffer_copy_compositeexplicitautogradnonfunctional_dispatch.h>
36
+ #include <ATen/ops/_nested_view_from_jagged_copy_compositeexplicitautogradnonfunctional_dispatch.h>
37
+ #include <ATen/ops/_reshape_alias_copy_compositeexplicitautogradnonfunctional_dispatch.h>
38
+ #include <ATen/ops/_softmax_compositeexplicitautogradnonfunctional_dispatch.h>
39
+ #include <ATen/ops/_softmax_backward_data_compositeexplicitautogradnonfunctional_dispatch.h>
40
+ #include <ATen/ops/_sparse_broadcast_to_copy_compositeexplicitautogradnonfunctional_dispatch.h>
41
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view_copy_compositeexplicitautogradnonfunctional_dispatch.h>
42
+ #include <ATen/ops/_trilinear_compositeexplicitautogradnonfunctional_dispatch.h>
43
+ #include <ATen/ops/_upsample_bicubic2d_aa_compositeexplicitautogradnonfunctional_dispatch.h>
44
+ #include <ATen/ops/_upsample_bicubic2d_aa_backward_compositeexplicitautogradnonfunctional_dispatch.h>
45
+ #include <ATen/ops/_upsample_bilinear2d_aa_compositeexplicitautogradnonfunctional_dispatch.h>
46
+ #include <ATen/ops/_upsample_bilinear2d_aa_backward_compositeexplicitautogradnonfunctional_dispatch.h>
47
+ #include <ATen/ops/_upsample_nearest_exact1d_compositeexplicitautogradnonfunctional_dispatch.h>
48
+ #include <ATen/ops/_upsample_nearest_exact1d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
49
+ #include <ATen/ops/_upsample_nearest_exact2d_compositeexplicitautogradnonfunctional_dispatch.h>
50
+ #include <ATen/ops/_upsample_nearest_exact2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
51
+ #include <ATen/ops/_upsample_nearest_exact3d_compositeexplicitautogradnonfunctional_dispatch.h>
52
+ #include <ATen/ops/_upsample_nearest_exact3d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
53
+ #include <ATen/ops/_values_copy_compositeexplicitautogradnonfunctional_dispatch.h>
54
+ #include <ATen/ops/acos_compositeexplicitautogradnonfunctional_dispatch.h>
55
+ #include <ATen/ops/acosh_compositeexplicitautogradnonfunctional_dispatch.h>
56
+ #include <ATen/ops/adaptive_max_pool2d_compositeexplicitautogradnonfunctional_dispatch.h>
57
+ #include <ATen/ops/adaptive_max_pool2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
58
+ #include <ATen/ops/adaptive_max_pool3d_compositeexplicitautogradnonfunctional_dispatch.h>
59
+ #include <ATen/ops/adaptive_max_pool3d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
60
+ #include <ATen/ops/add_compositeexplicitautogradnonfunctional_dispatch.h>
61
+ #include <ATen/ops/addcdiv_compositeexplicitautogradnonfunctional_dispatch.h>
62
+ #include <ATen/ops/addcmul_compositeexplicitautogradnonfunctional_dispatch.h>
63
+ #include <ATen/ops/addmm_compositeexplicitautogradnonfunctional_dispatch.h>
64
+ #include <ATen/ops/addmv_compositeexplicitautogradnonfunctional_dispatch.h>
65
+ #include <ATen/ops/alias_copy_compositeexplicitautogradnonfunctional_dispatch.h>
66
+ #include <ATen/ops/all_compositeexplicitautogradnonfunctional_dispatch.h>
67
+ #include <ATen/ops/amax_compositeexplicitautogradnonfunctional_dispatch.h>
68
+ #include <ATen/ops/amin_compositeexplicitautogradnonfunctional_dispatch.h>
69
+ #include <ATen/ops/aminmax_compositeexplicitautogradnonfunctional_dispatch.h>
70
+ #include <ATen/ops/any_compositeexplicitautogradnonfunctional_dispatch.h>
71
+ #include <ATen/ops/argmax_compositeexplicitautogradnonfunctional_dispatch.h>
72
+ #include <ATen/ops/argmin_compositeexplicitautogradnonfunctional_dispatch.h>
73
+ #include <ATen/ops/as_strided_compositeexplicitautogradnonfunctional_dispatch.h>
74
+ #include <ATen/ops/as_strided_copy_compositeexplicitautogradnonfunctional_dispatch.h>
75
+ #include <ATen/ops/as_strided_scatter_compositeexplicitautogradnonfunctional_dispatch.h>
76
+ #include <ATen/ops/asin_compositeexplicitautogradnonfunctional_dispatch.h>
77
+ #include <ATen/ops/asinh_compositeexplicitautogradnonfunctional_dispatch.h>
78
+ #include <ATen/ops/atan_compositeexplicitautogradnonfunctional_dispatch.h>
79
+ #include <ATen/ops/atan2_compositeexplicitautogradnonfunctional_dispatch.h>
80
+ #include <ATen/ops/atanh_compositeexplicitautogradnonfunctional_dispatch.h>
81
+ #include <ATen/ops/avg_pool2d_compositeexplicitautogradnonfunctional_dispatch.h>
82
+ #include <ATen/ops/avg_pool2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
83
+ #include <ATen/ops/avg_pool3d_compositeexplicitautogradnonfunctional_dispatch.h>
84
+ #include <ATen/ops/avg_pool3d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
85
+ #include <ATen/ops/baddbmm_compositeexplicitautogradnonfunctional_dispatch.h>
86
+ #include <ATen/ops/bernoulli_compositeexplicitautogradnonfunctional_dispatch.h>
87
+ #include <ATen/ops/bitwise_and_compositeexplicitautogradnonfunctional_dispatch.h>
88
+ #include <ATen/ops/bitwise_left_shift_compositeexplicitautogradnonfunctional_dispatch.h>
89
+ #include <ATen/ops/bitwise_not_compositeexplicitautogradnonfunctional_dispatch.h>
90
+ #include <ATen/ops/bitwise_or_compositeexplicitautogradnonfunctional_dispatch.h>
91
+ #include <ATen/ops/bitwise_right_shift_compositeexplicitautogradnonfunctional_dispatch.h>
92
+ #include <ATen/ops/bitwise_xor_compositeexplicitautogradnonfunctional_dispatch.h>
93
+ #include <ATen/ops/bmm_compositeexplicitautogradnonfunctional_dispatch.h>
94
+ #include <ATen/ops/cat_compositeexplicitautogradnonfunctional_dispatch.h>
95
+ #include <ATen/ops/ccol_indices_copy_compositeexplicitautogradnonfunctional_dispatch.h>
96
+ #include <ATen/ops/ceil_compositeexplicitautogradnonfunctional_dispatch.h>
97
+ #include <ATen/ops/clamp_compositeexplicitautogradnonfunctional_dispatch.h>
98
+ #include <ATen/ops/clamp_max_compositeexplicitautogradnonfunctional_dispatch.h>
99
+ #include <ATen/ops/clamp_min_compositeexplicitautogradnonfunctional_dispatch.h>
100
+ #include <ATen/ops/col_indices_copy_compositeexplicitautogradnonfunctional_dispatch.h>
101
+ #include <ATen/ops/copy_compositeexplicitautogradnonfunctional_dispatch.h>
102
+ #include <ATen/ops/copysign_compositeexplicitautogradnonfunctional_dispatch.h>
103
+ #include <ATen/ops/cos_compositeexplicitautogradnonfunctional_dispatch.h>
104
+ #include <ATen/ops/cosh_compositeexplicitautogradnonfunctional_dispatch.h>
105
+ #include <ATen/ops/crow_indices_copy_compositeexplicitautogradnonfunctional_dispatch.h>
106
+ #include <ATen/ops/cumprod_compositeexplicitautogradnonfunctional_dispatch.h>
107
+ #include <ATen/ops/cumsum_compositeexplicitautogradnonfunctional_dispatch.h>
108
+ #include <ATen/ops/detach_copy_compositeexplicitautogradnonfunctional_dispatch.h>
109
+ #include <ATen/ops/diag_embed_compositeexplicitautogradnonfunctional_dispatch.h>
110
+ #include <ATen/ops/diagonal_copy_compositeexplicitautogradnonfunctional_dispatch.h>
111
+ #include <ATen/ops/diagonal_scatter_compositeexplicitautogradnonfunctional_dispatch.h>
112
+ #include <ATen/ops/digamma_compositeexplicitautogradnonfunctional_dispatch.h>
113
+ #include <ATen/ops/div_compositeexplicitautogradnonfunctional_dispatch.h>
114
+ #include <ATen/ops/elu_compositeexplicitautogradnonfunctional_dispatch.h>
115
+ #include <ATen/ops/elu_backward_compositeexplicitautogradnonfunctional_dispatch.h>
116
+ #include <ATen/ops/eq_compositeexplicitautogradnonfunctional_dispatch.h>
117
+ #include <ATen/ops/erf_compositeexplicitautogradnonfunctional_dispatch.h>
118
+ #include <ATen/ops/erfc_compositeexplicitautogradnonfunctional_dispatch.h>
119
+ #include <ATen/ops/erfinv_compositeexplicitautogradnonfunctional_dispatch.h>
120
+ #include <ATen/ops/exp_compositeexplicitautogradnonfunctional_dispatch.h>
121
+ #include <ATen/ops/exp2_compositeexplicitautogradnonfunctional_dispatch.h>
122
+ #include <ATen/ops/expand_copy_compositeexplicitautogradnonfunctional_dispatch.h>
123
+ #include <ATen/ops/expm1_compositeexplicitautogradnonfunctional_dispatch.h>
124
+ #include <ATen/ops/floor_compositeexplicitautogradnonfunctional_dispatch.h>
125
+ #include <ATen/ops/fmax_compositeexplicitautogradnonfunctional_dispatch.h>
126
+ #include <ATen/ops/fmin_compositeexplicitautogradnonfunctional_dispatch.h>
127
+ #include <ATen/ops/fmod_compositeexplicitautogradnonfunctional_dispatch.h>
128
+ #include <ATen/ops/frac_compositeexplicitautogradnonfunctional_dispatch.h>
129
+ #include <ATen/ops/fractional_max_pool2d_compositeexplicitautogradnonfunctional_dispatch.h>
130
+ #include <ATen/ops/fractional_max_pool2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
131
+ #include <ATen/ops/fractional_max_pool3d_compositeexplicitautogradnonfunctional_dispatch.h>
132
+ #include <ATen/ops/gather_compositeexplicitautogradnonfunctional_dispatch.h>
133
+ #include <ATen/ops/gcd_compositeexplicitautogradnonfunctional_dispatch.h>
134
+ #include <ATen/ops/ge_compositeexplicitautogradnonfunctional_dispatch.h>
135
+ #include <ATen/ops/gelu_compositeexplicitautogradnonfunctional_dispatch.h>
136
+ #include <ATen/ops/gelu_backward_compositeexplicitautogradnonfunctional_dispatch.h>
137
+ #include <ATen/ops/glu_compositeexplicitautogradnonfunctional_dispatch.h>
138
+ #include <ATen/ops/gt_compositeexplicitautogradnonfunctional_dispatch.h>
139
+ #include <ATen/ops/hardshrink_compositeexplicitautogradnonfunctional_dispatch.h>
140
+ #include <ATen/ops/hardshrink_backward_compositeexplicitautogradnonfunctional_dispatch.h>
141
+ #include <ATen/ops/hardsigmoid_compositeexplicitautogradnonfunctional_dispatch.h>
142
+ #include <ATen/ops/hardsigmoid_backward_compositeexplicitautogradnonfunctional_dispatch.h>
143
+ #include <ATen/ops/heaviside_compositeexplicitautogradnonfunctional_dispatch.h>
144
+ #include <ATen/ops/hypot_compositeexplicitautogradnonfunctional_dispatch.h>
145
+ #include <ATen/ops/i0_compositeexplicitautogradnonfunctional_dispatch.h>
146
+ #include <ATen/ops/igamma_compositeexplicitautogradnonfunctional_dispatch.h>
147
+ #include <ATen/ops/igammac_compositeexplicitautogradnonfunctional_dispatch.h>
148
+ #include <ATen/ops/index_compositeexplicitautogradnonfunctional_dispatch.h>
149
+ #include <ATen/ops/index_add_compositeexplicitautogradnonfunctional_dispatch.h>
150
+ #include <ATen/ops/index_copy_compositeexplicitautogradnonfunctional_dispatch.h>
151
+ #include <ATen/ops/index_reduce_compositeexplicitautogradnonfunctional_dispatch.h>
152
+ #include <ATen/ops/indices_copy_compositeexplicitautogradnonfunctional_dispatch.h>
153
+ #include <ATen/ops/isin_compositeexplicitautogradnonfunctional_dispatch.h>
154
+ #include <ATen/ops/isneginf_compositeexplicitautogradnonfunctional_dispatch.h>
155
+ #include <ATen/ops/isposinf_compositeexplicitautogradnonfunctional_dispatch.h>
156
+ #include <ATen/ops/lcm_compositeexplicitautogradnonfunctional_dispatch.h>
157
+ #include <ATen/ops/le_compositeexplicitautogradnonfunctional_dispatch.h>
158
+ #include <ATen/ops/leaky_relu_compositeexplicitautogradnonfunctional_dispatch.h>
159
+ #include <ATen/ops/leaky_relu_backward_compositeexplicitautogradnonfunctional_dispatch.h>
160
+ #include <ATen/ops/lerp_compositeexplicitautogradnonfunctional_dispatch.h>
161
+ #include <ATen/ops/lgamma_compositeexplicitautogradnonfunctional_dispatch.h>
162
+ #include <ATen/ops/lift_fresh_copy_compositeexplicitautogradnonfunctional_dispatch.h>
163
+ #include <ATen/ops/linalg_cholesky_ex_compositeexplicitautogradnonfunctional_dispatch.h>
164
+ #include <ATen/ops/linalg_cross_compositeexplicitautogradnonfunctional_dispatch.h>
165
+ #include <ATen/ops/linalg_inv_ex_compositeexplicitautogradnonfunctional_dispatch.h>
166
+ #include <ATen/ops/linalg_ldl_factor_ex_compositeexplicitautogradnonfunctional_dispatch.h>
167
+ #include <ATen/ops/linalg_ldl_solve_compositeexplicitautogradnonfunctional_dispatch.h>
168
+ #include <ATen/ops/linalg_lu_compositeexplicitautogradnonfunctional_dispatch.h>
169
+ #include <ATen/ops/linalg_lu_factor_ex_compositeexplicitautogradnonfunctional_dispatch.h>
170
+ #include <ATen/ops/linalg_lu_solve_compositeexplicitautogradnonfunctional_dispatch.h>
171
+ #include <ATen/ops/linalg_pinv_compositeexplicitautogradnonfunctional_dispatch.h>
172
+ #include <ATen/ops/linalg_qr_compositeexplicitautogradnonfunctional_dispatch.h>
173
+ #include <ATen/ops/linalg_vector_norm_compositeexplicitautogradnonfunctional_dispatch.h>
174
+ #include <ATen/ops/log_compositeexplicitautogradnonfunctional_dispatch.h>
175
+ #include <ATen/ops/log10_compositeexplicitautogradnonfunctional_dispatch.h>
176
+ #include <ATen/ops/log1p_compositeexplicitautogradnonfunctional_dispatch.h>
177
+ #include <ATen/ops/log2_compositeexplicitautogradnonfunctional_dispatch.h>
178
+ #include <ATen/ops/logaddexp_compositeexplicitautogradnonfunctional_dispatch.h>
179
+ #include <ATen/ops/logaddexp2_compositeexplicitautogradnonfunctional_dispatch.h>
180
+ #include <ATen/ops/logit_backward_compositeexplicitautogradnonfunctional_dispatch.h>
181
+ #include <ATen/ops/logsumexp_compositeexplicitautogradnonfunctional_dispatch.h>
182
+ #include <ATen/ops/lt_compositeexplicitautogradnonfunctional_dispatch.h>
183
+ #include <ATen/ops/lu_unpack_compositeexplicitautogradnonfunctional_dispatch.h>
184
+ #include <ATen/ops/max_compositeexplicitautogradnonfunctional_dispatch.h>
185
+ #include <ATen/ops/max_pool2d_with_indices_compositeexplicitautogradnonfunctional_dispatch.h>
186
+ #include <ATen/ops/max_pool2d_with_indices_backward_compositeexplicitautogradnonfunctional_dispatch.h>
187
+ #include <ATen/ops/maximum_compositeexplicitautogradnonfunctional_dispatch.h>
188
+ #include <ATen/ops/mean_compositeexplicitautogradnonfunctional_dispatch.h>
189
+ #include <ATen/ops/min_compositeexplicitautogradnonfunctional_dispatch.h>
190
+ #include <ATen/ops/minimum_compositeexplicitautogradnonfunctional_dispatch.h>
191
+ #include <ATen/ops/mish_compositeexplicitautogradnonfunctional_dispatch.h>
192
+ #include <ATen/ops/mm_compositeexplicitautogradnonfunctional_dispatch.h>
193
+ #include <ATen/ops/mse_loss_compositeexplicitautogradnonfunctional_dispatch.h>
194
+ #include <ATen/ops/mul_compositeexplicitautogradnonfunctional_dispatch.h>
195
+ #include <ATen/ops/narrow_copy_compositeexplicitautogradnonfunctional_dispatch.h>
196
+ #include <ATen/ops/ne_compositeexplicitautogradnonfunctional_dispatch.h>
197
+ #include <ATen/ops/neg_compositeexplicitautogradnonfunctional_dispatch.h>
198
+ #include <ATen/ops/new_empty_strided_compositeexplicitautogradnonfunctional_dispatch.h>
199
+ #include <ATen/ops/nextafter_compositeexplicitautogradnonfunctional_dispatch.h>
200
+ #include <ATen/ops/nll_loss_backward_compositeexplicitautogradnonfunctional_dispatch.h>
201
+ #include <ATen/ops/nll_loss_forward_compositeexplicitautogradnonfunctional_dispatch.h>
202
+ #include <ATen/ops/norm_compositeexplicitautogradnonfunctional_dispatch.h>
203
+ #include <ATen/ops/permute_copy_compositeexplicitautogradnonfunctional_dispatch.h>
204
+ #include <ATen/ops/pixel_shuffle_compositeexplicitautogradnonfunctional_dispatch.h>
205
+ #include <ATen/ops/pixel_unshuffle_compositeexplicitautogradnonfunctional_dispatch.h>
206
+ #include <ATen/ops/polygamma_compositeexplicitautogradnonfunctional_dispatch.h>
207
+ #include <ATen/ops/pow_compositeexplicitautogradnonfunctional_dispatch.h>
208
+ #include <ATen/ops/prod_compositeexplicitautogradnonfunctional_dispatch.h>
209
+ #include <ATen/ops/reciprocal_compositeexplicitautogradnonfunctional_dispatch.h>
210
+ #include <ATen/ops/reflection_pad1d_compositeexplicitautogradnonfunctional_dispatch.h>
211
+ #include <ATen/ops/reflection_pad1d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
212
+ #include <ATen/ops/reflection_pad3d_compositeexplicitautogradnonfunctional_dispatch.h>
213
+ #include <ATen/ops/reflection_pad3d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
214
+ #include <ATen/ops/remainder_compositeexplicitautogradnonfunctional_dispatch.h>
215
+ #include <ATen/ops/renorm_compositeexplicitautogradnonfunctional_dispatch.h>
216
+ #include <ATen/ops/replication_pad1d_compositeexplicitautogradnonfunctional_dispatch.h>
217
+ #include <ATen/ops/replication_pad1d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
218
+ #include <ATen/ops/replication_pad2d_compositeexplicitautogradnonfunctional_dispatch.h>
219
+ #include <ATen/ops/replication_pad3d_compositeexplicitautogradnonfunctional_dispatch.h>
220
+ #include <ATen/ops/round_compositeexplicitautogradnonfunctional_dispatch.h>
221
+ #include <ATen/ops/row_indices_copy_compositeexplicitautogradnonfunctional_dispatch.h>
222
+ #include <ATen/ops/rsqrt_compositeexplicitautogradnonfunctional_dispatch.h>
223
+ #include <ATen/ops/scatter_compositeexplicitautogradnonfunctional_dispatch.h>
224
+ #include <ATen/ops/scatter_add_compositeexplicitautogradnonfunctional_dispatch.h>
225
+ #include <ATen/ops/scatter_reduce_compositeexplicitautogradnonfunctional_dispatch.h>
226
+ #include <ATen/ops/select_backward_compositeexplicitautogradnonfunctional_dispatch.h>
227
+ #include <ATen/ops/select_copy_compositeexplicitautogradnonfunctional_dispatch.h>
228
+ #include <ATen/ops/select_scatter_compositeexplicitautogradnonfunctional_dispatch.h>
229
+ #include <ATen/ops/sgn_compositeexplicitautogradnonfunctional_dispatch.h>
230
+ #include <ATen/ops/sigmoid_compositeexplicitautogradnonfunctional_dispatch.h>
231
+ #include <ATen/ops/sigmoid_backward_compositeexplicitautogradnonfunctional_dispatch.h>
232
+ #include <ATen/ops/sign_compositeexplicitautogradnonfunctional_dispatch.h>
233
+ #include <ATen/ops/signbit_compositeexplicitautogradnonfunctional_dispatch.h>
234
+ #include <ATen/ops/silu_compositeexplicitautogradnonfunctional_dispatch.h>
235
+ #include <ATen/ops/silu_backward_compositeexplicitautogradnonfunctional_dispatch.h>
236
+ #include <ATen/ops/sin_compositeexplicitautogradnonfunctional_dispatch.h>
237
+ #include <ATen/ops/sinc_compositeexplicitautogradnonfunctional_dispatch.h>
238
+ #include <ATen/ops/sinh_compositeexplicitautogradnonfunctional_dispatch.h>
239
+ #include <ATen/ops/slice_copy_compositeexplicitautogradnonfunctional_dispatch.h>
240
+ #include <ATen/ops/slice_scatter_compositeexplicitautogradnonfunctional_dispatch.h>
241
+ #include <ATen/ops/slow_conv_transpose2d_compositeexplicitautogradnonfunctional_dispatch.h>
242
+ #include <ATen/ops/smooth_l1_loss_compositeexplicitautogradnonfunctional_dispatch.h>
243
+ #include <ATen/ops/softplus_compositeexplicitautogradnonfunctional_dispatch.h>
244
+ #include <ATen/ops/softplus_backward_compositeexplicitautogradnonfunctional_dispatch.h>
245
+ #include <ATen/ops/softshrink_compositeexplicitautogradnonfunctional_dispatch.h>
246
+ #include <ATen/ops/softshrink_backward_compositeexplicitautogradnonfunctional_dispatch.h>
247
+ #include <ATen/ops/sort_compositeexplicitautogradnonfunctional_dispatch.h>
248
+ #include <ATen/ops/special_airy_ai_compositeexplicitautogradnonfunctional_dispatch.h>
249
+ #include <ATen/ops/special_bessel_j0_compositeexplicitautogradnonfunctional_dispatch.h>
250
+ #include <ATen/ops/special_bessel_j1_compositeexplicitautogradnonfunctional_dispatch.h>
251
+ #include <ATen/ops/special_bessel_y0_compositeexplicitautogradnonfunctional_dispatch.h>
252
+ #include <ATen/ops/special_bessel_y1_compositeexplicitautogradnonfunctional_dispatch.h>
253
+ #include <ATen/ops/special_chebyshev_polynomial_t_compositeexplicitautogradnonfunctional_dispatch.h>
254
+ #include <ATen/ops/special_chebyshev_polynomial_u_compositeexplicitautogradnonfunctional_dispatch.h>
255
+ #include <ATen/ops/special_chebyshev_polynomial_v_compositeexplicitautogradnonfunctional_dispatch.h>
256
+ #include <ATen/ops/special_chebyshev_polynomial_w_compositeexplicitautogradnonfunctional_dispatch.h>
257
+ #include <ATen/ops/special_entr_compositeexplicitautogradnonfunctional_dispatch.h>
258
+ #include <ATen/ops/special_erfcx_compositeexplicitautogradnonfunctional_dispatch.h>
259
+ #include <ATen/ops/special_hermite_polynomial_h_compositeexplicitautogradnonfunctional_dispatch.h>
260
+ #include <ATen/ops/special_hermite_polynomial_he_compositeexplicitautogradnonfunctional_dispatch.h>
261
+ #include <ATen/ops/special_i0e_compositeexplicitautogradnonfunctional_dispatch.h>
262
+ #include <ATen/ops/special_i1_compositeexplicitautogradnonfunctional_dispatch.h>
263
+ #include <ATen/ops/special_i1e_compositeexplicitautogradnonfunctional_dispatch.h>
264
+ #include <ATen/ops/special_laguerre_polynomial_l_compositeexplicitautogradnonfunctional_dispatch.h>
265
+ #include <ATen/ops/special_legendre_polynomial_p_compositeexplicitautogradnonfunctional_dispatch.h>
266
+ #include <ATen/ops/special_log_ndtr_compositeexplicitautogradnonfunctional_dispatch.h>
267
+ #include <ATen/ops/special_modified_bessel_i0_compositeexplicitautogradnonfunctional_dispatch.h>
268
+ #include <ATen/ops/special_modified_bessel_i1_compositeexplicitautogradnonfunctional_dispatch.h>
269
+ #include <ATen/ops/special_modified_bessel_k0_compositeexplicitautogradnonfunctional_dispatch.h>
270
+ #include <ATen/ops/special_modified_bessel_k1_compositeexplicitautogradnonfunctional_dispatch.h>
271
+ #include <ATen/ops/special_ndtri_compositeexplicitautogradnonfunctional_dispatch.h>
272
+ #include <ATen/ops/special_scaled_modified_bessel_k0_compositeexplicitautogradnonfunctional_dispatch.h>
273
+ #include <ATen/ops/special_scaled_modified_bessel_k1_compositeexplicitautogradnonfunctional_dispatch.h>
274
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_t_compositeexplicitautogradnonfunctional_dispatch.h>
275
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_u_compositeexplicitautogradnonfunctional_dispatch.h>
276
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_v_compositeexplicitautogradnonfunctional_dispatch.h>
277
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_w_compositeexplicitautogradnonfunctional_dispatch.h>
278
+ #include <ATen/ops/special_spherical_bessel_j0_compositeexplicitautogradnonfunctional_dispatch.h>
279
+ #include <ATen/ops/special_xlog1py_compositeexplicitautogradnonfunctional_dispatch.h>
280
+ #include <ATen/ops/special_zeta_compositeexplicitautogradnonfunctional_dispatch.h>
281
+ #include <ATen/ops/split_copy_compositeexplicitautogradnonfunctional_dispatch.h>
282
+ #include <ATen/ops/split_with_sizes_copy_compositeexplicitautogradnonfunctional_dispatch.h>
283
+ #include <ATen/ops/sqrt_compositeexplicitautogradnonfunctional_dispatch.h>
284
+ #include <ATen/ops/squeeze_copy_compositeexplicitautogradnonfunctional_dispatch.h>
285
+ #include <ATen/ops/sub_compositeexplicitautogradnonfunctional_dispatch.h>
286
+ #include <ATen/ops/sum_compositeexplicitautogradnonfunctional_dispatch.h>
287
+ #include <ATen/ops/t_copy_compositeexplicitautogradnonfunctional_dispatch.h>
288
+ #include <ATen/ops/tan_compositeexplicitautogradnonfunctional_dispatch.h>
289
+ #include <ATen/ops/tanh_compositeexplicitautogradnonfunctional_dispatch.h>
290
+ #include <ATen/ops/tanh_backward_compositeexplicitautogradnonfunctional_dispatch.h>
291
+ #include <ATen/ops/threshold_compositeexplicitautogradnonfunctional_dispatch.h>
292
+ #include <ATen/ops/threshold_backward_compositeexplicitautogradnonfunctional_dispatch.h>
293
+ #include <ATen/ops/topk_compositeexplicitautogradnonfunctional_dispatch.h>
294
+ #include <ATen/ops/transpose_copy_compositeexplicitautogradnonfunctional_dispatch.h>
295
+ #include <ATen/ops/triangular_solve_compositeexplicitautogradnonfunctional_dispatch.h>
296
+ #include <ATen/ops/tril_compositeexplicitautogradnonfunctional_dispatch.h>
297
+ #include <ATen/ops/triu_compositeexplicitautogradnonfunctional_dispatch.h>
298
+ #include <ATen/ops/trunc_compositeexplicitautogradnonfunctional_dispatch.h>
299
+ #include <ATen/ops/unbind_copy_compositeexplicitautogradnonfunctional_dispatch.h>
300
+ #include <ATen/ops/unfold_copy_compositeexplicitautogradnonfunctional_dispatch.h>
301
+ #include <ATen/ops/unsqueeze_copy_compositeexplicitautogradnonfunctional_dispatch.h>
302
+ #include <ATen/ops/upsample_bicubic2d_compositeexplicitautogradnonfunctional_dispatch.h>
303
+ #include <ATen/ops/upsample_bicubic2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
304
+ #include <ATen/ops/upsample_bilinear2d_compositeexplicitautogradnonfunctional_dispatch.h>
305
+ #include <ATen/ops/upsample_bilinear2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
306
+ #include <ATen/ops/upsample_linear1d_compositeexplicitautogradnonfunctional_dispatch.h>
307
+ #include <ATen/ops/upsample_linear1d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
308
+ #include <ATen/ops/upsample_nearest1d_compositeexplicitautogradnonfunctional_dispatch.h>
309
+ #include <ATen/ops/upsample_nearest1d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
310
+ #include <ATen/ops/upsample_nearest2d_compositeexplicitautogradnonfunctional_dispatch.h>
311
+ #include <ATen/ops/upsample_nearest2d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
312
+ #include <ATen/ops/upsample_nearest3d_compositeexplicitautogradnonfunctional_dispatch.h>
313
+ #include <ATen/ops/upsample_nearest3d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
314
+ #include <ATen/ops/upsample_trilinear3d_compositeexplicitautogradnonfunctional_dispatch.h>
315
+ #include <ATen/ops/upsample_trilinear3d_backward_compositeexplicitautogradnonfunctional_dispatch.h>
316
+ #include <ATen/ops/values_copy_compositeexplicitautogradnonfunctional_dispatch.h>
317
+ #include <ATen/ops/view_as_complex_copy_compositeexplicitautogradnonfunctional_dispatch.h>
318
+ #include <ATen/ops/view_as_real_copy_compositeexplicitautogradnonfunctional_dispatch.h>
319
+ #include <ATen/ops/view_copy_compositeexplicitautogradnonfunctional_dispatch.h>
320
+ #include <ATen/ops/xlogy_compositeexplicitautogradnonfunctional_dispatch.h>
321
+
322
+
323
+
lib/python3.12/site-packages/torch/include/ATen/CompositeImplicitAutogradFunctions.h ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <ATen/core/TensorBody.h>
2
+
3
+ // TODO Undo all logic introduced for Note [Avoiding Include Cycles In Static Dispatch]
4
+ // Code introduced to avoid cyclic dependency in static dispatch is no longer
5
+ // needed as static dispatch logic is moved from TensorBody.h, which caused cycles in the first place,
6
+ // to Operators.cpp for supporting multiple backends with multiple kernels.
7
+ //
8
+ // Note [Avoiding Include Cycles In Static Dispatch]
9
+ // In order to avoid #include cycles in the static dispatch build, we've carefully split out
10
+ // the static function definition files into {DispatchKey}Functions.h and {DispatchKey}Functions_inl.h.
11
+ //
12
+ // Without this split, the include cycle looks like TensorBody.h -> CPUFunctions.h -> TensorBody.h.
13
+ // - TensorBody.h #includes CPUFunctions.h in the static dispatch build, because the tensor methods
14
+ // all need to call into the fastpath C++ API defined in CPUFunctions.h. The methods are also all
15
+ // directly inlined into TensorBody.h.
16
+ // - CPUFunctions.h #includes TensorBody.h because it contains function declarations for the entire C++ API,
17
+ // which include functions that have defaultable std::optional<Tensor> arguments.
18
+ // That requires knowing the full Tensor class definition.
19
+ //
20
+ // We break the cycle by doing the following:
21
+ // - Split out CPUFunction.h into two files: CPUFunctions.h and CPUFunctions_inl.h
22
+ // - CPUFunction.h is a dummy file that just includes the Tensor class and includes CPUFunctions_inl.,
23
+ // - CPUFunctions_inl.h includes everything else
24
+ // - (only in the static dispatch build) TensorBody.h makes sure to finish defining the Tensor class,
25
+ // and then it includes CPUFunctions_inl.h.
26
+ // - All other files that want the cpu fastpath functions can include CPUFunctions.h directly.
27
+ // - This also means that static dispatch build, CPUFunctions.h only needs to
28
+ // #include TensorBody.h, and it will automatically bring in CPUFunctions_inl.h.
29
+ #include <ATen/CompositeImplicitAutogradFunctions_inl.h>
lib/python3.12/site-packages/torch/include/ATen/CompositeImplicitAutogradNestedTensorFunctions.h ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <ATen/core/TensorBody.h>
2
+
3
+ // TODO Undo all logic introduced for Note [Avoiding Include Cycles In Static Dispatch]
4
+ // Code introduced to avoid cyclic dependency in static dispatch is no longer
5
+ // needed as static dispatch logic is moved from TensorBody.h, which caused cycles in the first place,
6
+ // to Operators.cpp for supporting multiple backends with multiple kernels.
7
+ //
8
+ // Note [Avoiding Include Cycles In Static Dispatch]
9
+ // In order to avoid #include cycles in the static dispatch build, we've carefully split out
10
+ // the static function definition files into {DispatchKey}Functions.h and {DispatchKey}Functions_inl.h.
11
+ //
12
+ // Without this split, the include cycle looks like TensorBody.h -> CPUFunctions.h -> TensorBody.h.
13
+ // - TensorBody.h #includes CPUFunctions.h in the static dispatch build, because the tensor methods
14
+ // all need to call into the fastpath C++ API defined in CPUFunctions.h. The methods are also all
15
+ // directly inlined into TensorBody.h.
16
+ // - CPUFunctions.h #includes TensorBody.h because it contains function declarations for the entire C++ API,
17
+ // which include functions that have defaultable std::optional<Tensor> arguments.
18
+ // That requires knowing the full Tensor class definition.
19
+ //
20
+ // We break the cycle by doing the following:
21
+ // - Split out CPUFunction.h into two files: CPUFunctions.h and CPUFunctions_inl.h
22
+ // - CPUFunction.h is a dummy file that just includes the Tensor class and includes CPUFunctions_inl.,
23
+ // - CPUFunctions_inl.h includes everything else
24
+ // - (only in the static dispatch build) TensorBody.h makes sure to finish defining the Tensor class,
25
+ // and then it includes CPUFunctions_inl.h.
26
+ // - All other files that want the cpu fastpath functions can include CPUFunctions.h directly.
27
+ // - This also means that static dispatch build, CPUFunctions.h only needs to
28
+ // #include TensorBody.h, and it will automatically bring in CPUFunctions_inl.h.
29
+ #include <ATen/CompositeImplicitAutogradNestedTensorFunctions_inl.h>
lib/python3.12/site-packages/torch/include/ATen/CompositeImplicitAutogradNestedTensorFunctions_inl.h ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+ // @generated by torchgen/gen.py from DispatchKeyFunctions_inl.h
3
+
4
+ // NB: The implementing C++ file is RegisterDispatchKey.cpp
5
+
6
+ // The only #includes we need are for custom classes that have defaults in the C++ API
7
+ #include <c10/core/MemoryFormat.h>
8
+ #include <c10/core/Scalar.h>
9
+ #include <ATen/core/Reduction.h>
10
+
11
+ #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
12
+ #error This change adds a dependency on all pytorch operators, meaning the \
13
+ file will need to be re-compiled every time an operator is changed or added. \
14
+ Consider including a specific operator from \
15
+ <ATen/ops/{my_operator}_compositeimplicitautogradnestedtensor_dispatch.h>. \
16
+ See NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
17
+ #endif
18
+
19
+ #include <ATen/ops/randn_like_compositeimplicitautogradnestedtensor_dispatch.h>
20
+ #include <ATen/ops/reshape_compositeimplicitautogradnestedtensor_dispatch.h>
21
+ #include <ATen/ops/reshape_as_compositeimplicitautogradnestedtensor_dispatch.h>
22
+ #include <ATen/ops/zeros_like_compositeimplicitautogradnestedtensor_dispatch.h>
23
+
24
+
25
+
lib/python3.12/site-packages/torch/include/ATen/Config.h ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ // Test these using #if AT_MKL_ENABLED(), not #ifdef, so that it's
4
+ // obvious if you forgot to include Config.h
5
+ // c.f. https://stackoverflow.com/questions/33759787/generating-an-error-if-checked-boolean-macro-is-not-defined
6
+ //
7
+ // DO NOT put the macros for CUDA libraries in this file; they belong in cuda/CUDAConfig.h
8
+
9
+ #define AT_MKLDNN_ENABLED() 1
10
+ #define AT_MKLDNN_ACL_ENABLED() 0
11
+ #define AT_MKL_ENABLED() 1
12
+ #define AT_MKL_SEQUENTIAL() 0
13
+ #define AT_POCKETFFT_ENABLED() 0
14
+ #define AT_NNPACK_ENABLED() 1
15
+ #define CAFFE2_STATIC_LINK_CUDA() 0
16
+ #define AT_BUILD_WITH_BLAS() 1
17
+ #define AT_BUILD_WITH_LAPACK() 1
18
+ #define AT_PARALLEL_OPENMP 1
19
+ #define AT_PARALLEL_NATIVE 0
20
+ #define AT_BLAS_F2C() 0
21
+ #define AT_BLAS_USE_CBLAS_DOT() 0
lib/python3.12/site-packages/torch/include/ATen/Context.h ADDED
@@ -0,0 +1,627 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/BlasBackend.h>
4
+ #include <ATen/CPUGeneratorImpl.h>
5
+ #include <ATen/DeviceAccelerator.h>
6
+ #include <ATen/LinalgBackend.h>
7
+ #include <ATen/SDPBackend.h>
8
+ #include <ATen/core/ATenGeneral.h>
9
+ #include <ATen/core/DeprecatedTypeProperties.h>
10
+ #include <ATen/core/Generator.h>
11
+ #include <ATen/core/LegacyTypeDispatch.h>
12
+ #include <ATen/detail/AcceleratorHooksInterface.h>
13
+ #include <ATen/detail/CUDAHooksInterface.h>
14
+ #include <ATen/detail/HIPHooksInterface.h>
15
+ #include <ATen/detail/HPUHooksInterface.h>
16
+ #include <ATen/detail/IPUHooksInterface.h>
17
+ #include <ATen/detail/MAIAHooksInterface.h>
18
+ #include <ATen/detail/MPSHooksInterface.h>
19
+ #include <ATen/detail/MTIAHooksInterface.h>
20
+ #include <ATen/detail/PrivateUse1HooksInterface.h>
21
+ #include <ATen/detail/XPUHooksInterface.h>
22
+ #include <c10/core/QEngine.h>
23
+ #include <c10/core/impl/DeviceGuardImplInterface.h>
24
+ #include <c10/util/CallOnce.h>
25
+ #include <c10/util/Exception.h>
26
+ #include <c10/util/env.h>
27
+ #include <c10/util/irange.h>
28
+
29
+ #include <cstdint>
30
+ #include <mutex>
31
+
32
+ namespace at {
33
+
34
+ class Tensor;
35
+
36
+ enum class TORCH_API Float32MatmulPrecision { HIGHEST, HIGH, MEDIUM };
37
+
38
+ class TORCH_API Context {
39
+ public:
40
+ Context();
41
+
42
+ const Generator& defaultGenerator(Device device) {
43
+ c10::DeviceType device_type = device.type();
44
+ lazyInitDevice(device_type);
45
+
46
+ if (device_type == at::kCPU) {
47
+ return at::detail::getDefaultCPUGenerator();
48
+ } else {
49
+ return getAcceleratorHooksInterface(device_type)
50
+ .getDefaultGenerator(device.index());
51
+ }
52
+ }
53
+
54
+ const AcceleratorHooksInterface& getAcceleratorHooksInterface(
55
+ std::optional<c10::DeviceType> opt_device_type = std::nullopt) {
56
+ if (!opt_device_type.has_value()) {
57
+ opt_device_type = at::getAccelerator(true);
58
+ }
59
+ if (opt_device_type == at::kCUDA) {
60
+ return at::detail::getCUDAHooks();
61
+ } else if (opt_device_type == at::kXPU) {
62
+ return at::detail::getXPUHooks();
63
+ } else if (opt_device_type == at::kMPS) {
64
+ return at::detail::getMPSHooks();
65
+ } else if (opt_device_type == at::kPrivateUse1) {
66
+ return at::detail::getPrivateUse1Hooks();
67
+ } else if (opt_device_type == at::kMTIA) {
68
+ return at::detail::getMTIAHooks();
69
+ } else if (opt_device_type == at::kHIP) {
70
+ return at::detail::getHIPHooks();
71
+ } else if (opt_device_type == at::kHPU) {
72
+ return at::detail::getHPUHooks();
73
+ } else {
74
+ TORCH_CHECK(
75
+ false,
76
+ opt_device_type.has_value()
77
+ ? c10::DeviceTypeName(opt_device_type.value())
78
+ : "None",
79
+ " device type not an accelerator.");
80
+ }
81
+ }
82
+
83
+ Device getDeviceFromPtr(void* data, c10::DeviceType device_type) {
84
+ lazyInitDevice(device_type);
85
+
86
+ if (device_type == at::kCPU) {
87
+ return c10::DeviceType::CPU;
88
+ } else {
89
+ return getAcceleratorHooksInterface(device_type).getDeviceFromPtr(data);
90
+ }
91
+ }
92
+
93
+ bool isPinnedPtr(
94
+ const void* data,
95
+ std::optional<c10::DeviceType> device_type = std::nullopt) {
96
+ auto opt_device_type =
97
+ device_type.has_value() ? device_type : at::getAccelerator();
98
+ if (!opt_device_type.has_value() || // there is no accelerator
99
+ !at::isAccelerator(
100
+ opt_device_type.value())) { // passed device not an accelerator
101
+ return false;
102
+ }
103
+ return getAcceleratorHooksInterface(opt_device_type).isPinnedPtr(data);
104
+ }
105
+
106
+ Allocator* getPinnedMemoryAllocator(
107
+ std::optional<c10::DeviceType> device_type = std::nullopt) {
108
+ return getAcceleratorHooksInterface(device_type).getPinnedMemoryAllocator();
109
+ }
110
+
111
+ void lazyInitDevice(c10::DeviceType device_type) {
112
+ if (device_type != at::kCPU) {
113
+ c10::call_once(init_[static_cast<int8_t>(device_type)], [&] {
114
+ getAcceleratorHooksInterface(device_type).init();
115
+ });
116
+ }
117
+ }
118
+
119
+ static bool hasOpenMP();
120
+ static bool hasMKL();
121
+ static bool hasLAPACK();
122
+ static bool hasMKLDNN();
123
+ static bool hasMAGMA() {
124
+ return detail::getCUDAHooks().hasMAGMA();
125
+ }
126
+ static bool hasCUDA() {
127
+ return detail::getCUDAHooks().hasCUDA();
128
+ }
129
+ static bool hasMTIA() {
130
+ return detail::getMTIAHooks().hasMTIA();
131
+ }
132
+ static bool hasCUDART() {
133
+ return detail::getCUDAHooks().hasCUDART();
134
+ }
135
+ static long versionCUDART() {
136
+ return detail::getCUDAHooks().versionCUDART();
137
+ }
138
+ static bool hasCuDNN() {
139
+ return detail::getCUDAHooks().hasCuDNN();
140
+ }
141
+ static long versionCuDNN() {
142
+ return detail::getCUDAHooks().versionCuDNN();
143
+ }
144
+ static bool hasCuSOLVER() {
145
+ return detail::getCUDAHooks().hasCuSOLVER();
146
+ }
147
+ static bool hasCuBLASLt() {
148
+ return detail::getCUDAHooks().hasCuBLASLt();
149
+ }
150
+ static bool hasROCM() {
151
+ return detail::getCUDAHooks().hasROCM();
152
+ }
153
+ static bool hasHIP() {
154
+ return detail::getHIPHooks().hasHIP();
155
+ }
156
+ static bool hasMPS() {
157
+ return detail::getMPSHooks().hasMPS();
158
+ }
159
+ static bool hasIPU() {
160
+ return c10::impl::hasDeviceGuardImpl(c10::DeviceType::IPU);
161
+ }
162
+ static bool hasXLA() {
163
+ return c10::impl::hasDeviceGuardImpl(c10::DeviceType::XLA);
164
+ }
165
+ static bool hasXPU() {
166
+ return detail::getXPUHooks().hasXPU();
167
+ }
168
+ static bool hasLazy() {
169
+ return c10::impl::hasDeviceGuardImpl(c10::DeviceType::Lazy);
170
+ }
171
+ static bool hasMAIA() {
172
+ return c10::impl::hasDeviceGuardImpl(c10::DeviceType::MAIA);
173
+ }
174
+ static bool hasHPU() {
175
+ return detail::getHPUHooks().hasHPU();
176
+ }
177
+
178
+ static const at::cuda::NVRTC& getNVRTC() {
179
+ return detail::getCUDAHooks().nvrtc();
180
+ }
181
+
182
+ static bool setFlushDenormal(bool on);
183
+
184
+ // NB: This method is *purely* whether or not a user requested
185
+ // that CuDNN was enabled, it doesn't actually say anything about
186
+ // whether or not CuDNN is actually usable. Use cudnn_is_acceptable
187
+ // to test this instead
188
+ bool userEnabledCuDNN() const;
189
+ void setUserEnabledCuDNN(bool e);
190
+ bool userEnabledMkldnn() const;
191
+ void setUserEnabledMkldnn(bool e);
192
+ bool benchmarkCuDNN() const;
193
+ void setBenchmarkCuDNN(bool);
194
+ int benchmarkLimitCuDNN() const;
195
+ void setBenchmarkLimitCuDNN(int);
196
+ bool deterministicCuDNN() const;
197
+ void setDeterministicCuDNN(bool);
198
+ bool deterministicMkldnn() const;
199
+ void setDeterministicMkldnn(bool);
200
+ bool userEnabledNNPACK() const;
201
+ void setUserEnabledNNPACK(bool e);
202
+
203
+ // Note [Disabling Fused SDP Kernels]
204
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
205
+ // Flash and Memory Efficient SDP kernels are enabled by default.
206
+ // However, they can be disabled by setting
207
+ // at::globalContext().setUserEnabledFlashSDP(false) flag.
208
+ // This is useful for debugging purposes. For example, if you want to
209
+ // compare the performance of the flash SDP kernels with the unfused
210
+ // kernel, you can disable the flash SDP kernels. By disabling
211
+ // the math SDP kernel, you can force your code to use flash kernels.
212
+ // The math SDP kernel can be disabled by setting
213
+ // at::globalContext().setUserEnabledMathSDP(false) flag.
214
+ void setSDPPriorityOrder(const std::vector<int64_t>& order);
215
+ std::array<at::SDPBackend, at::num_sdp_backends> sDPPriorityOrder();
216
+
217
+ void setSDPUseFlash(bool);
218
+ bool userEnabledFlashSDP() const;
219
+
220
+ void setSDPUseMemEfficient(bool);
221
+ bool userEnabledMemEfficientSDP() const;
222
+
223
+ void setSDPUseMath(bool);
224
+ bool userEnabledMathSDP() const;
225
+
226
+ void setSDPUseCuDNN(bool);
227
+ bool userEnabledCuDNNSDP() const;
228
+
229
+ void setAllowFP16BF16ReductionMathSDP(bool);
230
+ bool allowFP16BF16ReductionMathSDP() const;
231
+
232
+ void setSDPUseOverrideable(bool);
233
+ bool userEnabledOverrideableSDP() const;
234
+
235
+ at::LinalgBackend linalgPreferredBackend() const;
236
+ void setLinalgPreferredBackend(at::LinalgBackend);
237
+
238
+ at::BlasBackend blasPreferredBackend();
239
+ void setBlasPreferredBackend(at::BlasBackend);
240
+
241
+ // Note [Enabling Deterministic Operations]
242
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
243
+ // Operations in PyTorch that normally act nondeterministically, but have an
244
+ // alternate deterministic implementation, should satisfy the following
245
+ // requirements:
246
+ //
247
+ // * Include this comment: "See Note [Enabling Deterministic Operations]"
248
+ //
249
+ // * Check the value of `at::globalContext().deterministicAlgorithms()` to
250
+ // toggle
251
+ // between nondeterministic and deterministic implementations.
252
+ //
253
+ // * Have an entry in the list of PyTorch operations that toggle between
254
+ // nondeterministic
255
+ // and deterministic implementations, in the docstring of
256
+ // `use_deterministic_algorithms()` in torch/__init__.py
257
+ //
258
+ // `example_func()` below shows an example of toggling between
259
+ // nondeterministic and deterministic implementations:
260
+ //
261
+ // void example_func() {
262
+ // // See Note [Enabling Deterministic Operations]
263
+ // if (at::globalContext().deterministicAlgorithms()) {
264
+ // example_func_deterministic();
265
+ // } else {
266
+ // example_func_nondeterministic();
267
+ // }
268
+ // }
269
+
270
+ bool deterministicAlgorithms() const;
271
+ bool deterministicAlgorithmsWarnOnly() const;
272
+ void setDeterministicAlgorithms(bool, bool);
273
+ bool deterministicFillUninitializedMemory() const;
274
+ void setDeterministicFillUninitializedMemory(bool);
275
+
276
+ // Note [Writing Nondeterministic Operations]
277
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
278
+ // Operations in PyTorch that act nondeterministically and do not have an
279
+ // alternate deterministic implementation should satisfy the following
280
+ // requirements:
281
+ //
282
+ // * Include this comment: "See Note [Writing Nondeterministic Operations]"
283
+ //
284
+ // * Include a comment explaining why the operation is nondeterministic.
285
+ //
286
+ // * Throw an error when `Context::deterministicAlgorithms()` is true. Most
287
+ // of the time, this should be accomplished by calling
288
+ // `at::globalContext().alertNotDeterminstic()`. However, if the
289
+ // nondeterministic behavior is caused by the CuBLAS workspace
290
+ // configuration in CUDA >= 10.2,
291
+ // `at::globalContext().alertCuBLASConfigNotDeterministic()` should be
292
+ // called instead (in this case, a comment explaining why the operation is
293
+ // nondeterministic is not necessary). See below for details on these
294
+ // methods.
295
+ //
296
+ // * Have an entry in the list of nondeterministic PyTorch operations in the
297
+ // docstring of `use_deterministic_algorithms()` in torch/__init__.py
298
+ //
299
+ // * Have a test function in `test/test_torch.py` whose name begins with
300
+ // `test_nondeterministic_alert_`. Alternatively, if CuBLAS workspace
301
+ // configuration is the reason for nondeterminism, the operation should be
302
+ // included in the `test_cublas_config_nondeterministic_alert` test. Any new
303
+ // tests should ideally follow a pattern similar to the existing ones.
304
+ //
305
+ // `example_func()` below shows an example of the comments and error-throwing
306
+ // code for a nondeterministic operation:
307
+ //
308
+ // void example_func() {
309
+ // // See Note [Writing Nondeterministic Operations]
310
+ // // Nondeterministic because <reason>
311
+ // at::globalContext().alertNondeterministic("example_func");
312
+ // ...
313
+ // }
314
+
315
+ // Throws an error if `Context::deterministicAlgorithms()` is true
316
+ static void alertNotDeterministic(std::string_view const& caller);
317
+
318
+ // Throws an error if `Context::deterministicAlgorithms()` is true, CUDA
319
+ // >= 10.2, and CUBLAS_WORKSPACE_CONFIG is not set to either ":16:8" or
320
+ // ":4096:8". For more details:
321
+ // https://docs.nvidia.com/cuda/cublas/index.html#results-reproducibility
322
+ void alertCuBLASConfigNotDeterministic() const;
323
+
324
+ void setFloat32MatmulPrecision(const std::string& s);
325
+ bool allowTF32CuDNN() const;
326
+ void setAllowTF32CuDNN(bool);
327
+ bool allowTF32CuBLAS() const;
328
+ void setAllowTF32CuBLAS(bool);
329
+ Float32MatmulPrecision float32MatmulPrecision() const;
330
+ void setFloat32MatmulPrecision(Float32MatmulPrecision p);
331
+ bool allowFP16ReductionCuBLAS() const;
332
+ void setAllowFP16ReductionCuBLAS(bool);
333
+ bool allowBF16ReductionCuBLAS() const;
334
+ void setAllowBF16ReductionCuBLAS(bool);
335
+ at::QEngine qEngine() const;
336
+ void setQEngine(at::QEngine e);
337
+ static const std::vector<at::QEngine>& supportedQEngines();
338
+ static bool isXNNPACKAvailable();
339
+ void setCheckSparseTensorInvariants(bool e);
340
+ bool checkSparseTensorInvariants() const;
341
+ // This method is used to release the original weight after pre-packing.
342
+ // It should be called once before loading/running the model.
343
+ // NB: By default it is set to true for mobile builds.
344
+ void setReleaseWeightsWhenPrepacking(bool e);
345
+ bool releaseWeightsWhenPrepacking() const;
346
+
347
+ void setDisplayVmapFallbackWarnings(bool enabled);
348
+ bool areVmapFallbackWarningsEnabled() const;
349
+
350
+ void setDefaultMobileCPUAllocator();
351
+ void unsetDefaultMobileCPUAllocator();
352
+ bool allowFP16ReductionCPU() const;
353
+ void setAllowFP16ReductionCPU(bool);
354
+
355
+ // Preserved for BC
356
+ void lazyInitCUDA() {
357
+ TORCH_WARN_DEPRECATION(
358
+ "lazyInitCUDA is deprecated. Please use lazyInitDevice(at::kCUDA) instead.")
359
+ lazyInitDevice(at::kCUDA);
360
+ }
361
+ void lazyInitHIP() {
362
+ TORCH_WARN_DEPRECATION(
363
+ "lazyInitHIP is deprecated. Please use lazyInitDevice(at::kHIP) instead.")
364
+ lazyInitDevice(at::kHIP);
365
+ }
366
+ void lazyInitXPU() {
367
+ TORCH_WARN_DEPRECATION(
368
+ "lazyInitXPU is deprecated. Please use lazyInitDevice(at::kXPU) instead.")
369
+ lazyInitDevice(at::kXPU);
370
+ }
371
+ void lazyInitMTIA() {
372
+ TORCH_WARN_DEPRECATION(
373
+ "lazyInitMTIA is deprecated. Please use lazyInitDevice(at::kMTIA) instead.")
374
+ lazyInitDevice(at::kMTIA);
375
+ }
376
+ void lazyInitPrivateUse1() {
377
+ TORCH_WARN_DEPRECATION(
378
+ "lazyInitPrivateUse1 is deprecated. Please use lazyInitDevice(at::kPrivateUse1) instead.")
379
+ lazyInitDevice(at::kPrivateUse1);
380
+ }
381
+
382
+ private:
383
+ static bool checkCuBLASConfigDeterministic();
384
+ std::array<c10::once_flag, at::COMPILE_TIME_MAX_DEVICE_TYPES> init_;
385
+ bool enabled_cudnn = true;
386
+ bool deterministic_cudnn = false;
387
+ bool deterministic_mkldnn = false;
388
+ bool _deterministic_algorithms = false;
389
+ bool _deterministic_algorithms_warn_only = false;
390
+ bool _deterministic_fill_uninitialized_memory = true;
391
+ std::array<at::SDPBackend, at::num_sdp_backends> sdp_priority_order = {
392
+ at::SDPBackend::flash_attention,
393
+ at::SDPBackend::efficient_attention,
394
+ at::SDPBackend::math,
395
+ at::SDPBackend::cudnn_attention};
396
+ bool enabled_flashSDP = true;
397
+ bool enabled_mem_efficientSDP = true;
398
+ bool enabled_mathSDP = true;
399
+ bool enabled_cudnnSDP = true;
400
+ bool enabled_overrideable = true;
401
+ bool allow_fp16_bf16_reduction_mathSDP = false;
402
+ #ifdef USE_ROCM
403
+ bool benchmark_cudnn = true;
404
+ #else
405
+ bool benchmark_cudnn = false;
406
+ #endif
407
+ Float32MatmulPrecision float32_matmul_precision =
408
+ c10::utils::check_env("TORCH_ALLOW_TF32_CUBLAS_OVERRIDE") == true
409
+ ? at::Float32MatmulPrecision::HIGH
410
+ : at::Float32MatmulPrecision::HIGHEST;
411
+ int benchmark_limit_cudnn = 10;
412
+ bool allow_tf32_cudnn = true;
413
+ bool allow_fp16_reduction_cublas = true;
414
+ bool allow_bf16_reduction_cublas = true;
415
+ bool enabled_mkldnn = true;
416
+ bool enabled_nnpack = true;
417
+ at::LinalgBackend linalg_preferred_backend =
418
+ c10::utils::check_env("TORCH_LINALG_PREFER_CUSOLVER") == true
419
+ ? at::LinalgBackend::Cusolver
420
+ : at::LinalgBackend::Default;
421
+ at::BlasBackend blas_preferred_backend =
422
+ #ifdef USE_ROCM
423
+ (c10::utils::check_env("TORCH_BLAS_PREFER_HIPBLASLT") != false)
424
+ #else
425
+ (c10::utils::check_env("TORCH_BLAS_PREFER_CUBLASLT") == true)
426
+ #endif
427
+ ? at::BlasBackend::Cublaslt
428
+ : at::BlasBackend::Cublas;
429
+ #ifdef C10_MOBILE
430
+ bool release_original_weights = true;
431
+ #else
432
+ bool release_original_weights = false;
433
+ #endif
434
+ bool display_vmap_fallback_warnings_ = false;
435
+ std::optional<at::QEngine> quantized_engine = std::nullopt;
436
+ bool enable_sparse_tensor_invariant_checks = false;
437
+ bool allow_fp16_reduction_cpu = false;
438
+
439
+ Allocator* prev_allocator_ptr_{nullptr};
440
+ };
441
+
442
+ TORCH_API Context& globalContext();
443
+
444
+ inline void init() {
445
+ globalContext();
446
+ }
447
+
448
+ TORCH_API Allocator* getCPUAllocator();
449
+
450
+ inline DeprecatedTypeProperties& getDeprecatedTypeProperties(
451
+ Backend p,
452
+ ScalarType s) {
453
+ return globalDeprecatedTypePropertiesRegistry().getDeprecatedTypeProperties(
454
+ p, s);
455
+ }
456
+
457
+ inline DeprecatedTypeProperties& CPU(ScalarType s) {
458
+ return globalDeprecatedTypePropertiesRegistry().getDeprecatedTypeProperties(
459
+ Backend::CPU, s);
460
+ }
461
+
462
+ inline DeprecatedTypeProperties& CUDA(ScalarType s) {
463
+ return globalDeprecatedTypePropertiesRegistry().getDeprecatedTypeProperties(
464
+ Backend::CUDA, s);
465
+ }
466
+
467
+ inline DeprecatedTypeProperties& HIP(ScalarType s) {
468
+ return globalDeprecatedTypePropertiesRegistry().getDeprecatedTypeProperties(
469
+ Backend::HIP, s);
470
+ }
471
+
472
+ inline DeprecatedTypeProperties& MPS(ScalarType s) {
473
+ return globalDeprecatedTypePropertiesRegistry().getDeprecatedTypeProperties(
474
+ Backend::MPS, s);
475
+ }
476
+
477
+ inline bool hasCUDA() {
478
+ return globalContext().hasCUDA();
479
+ }
480
+
481
+ inline bool hasMTIA() {
482
+ return globalContext().hasMTIA();
483
+ }
484
+
485
+ inline bool hasHIP() {
486
+ return globalContext().hasHIP();
487
+ }
488
+
489
+ inline bool hasIPU() {
490
+ return globalContext().hasIPU();
491
+ }
492
+
493
+ inline bool hasXLA() {
494
+ return globalContext().hasXLA();
495
+ }
496
+
497
+ inline bool hasMPS() {
498
+ return globalContext().hasMPS();
499
+ }
500
+
501
+ inline bool hasMAIA() {
502
+ return globalContext().hasMAIA();
503
+ }
504
+
505
+ inline bool hasXPU() {
506
+ return globalContext().hasXPU();
507
+ }
508
+
509
+ inline bool hasHPU() {
510
+ return globalContext().hasHPU();
511
+ }
512
+
513
+ // Despite its name, this function returns the number of *CUDA* GPUs.
514
+ inline size_t getNumGPUs() {
515
+ // WARNING: DO NOT ADD LOGIC TO HANDLE OTHER DEVICE TYPES TO THIS
516
+ // FUNCTION. If you are interested in interrogating the number of
517
+ // devices for a specific device type, add that function to the
518
+ // relevant library (e.g., similar to at::cuda::device_count())
519
+ if (hasCUDA() && hasHIP()) {
520
+ throw std::runtime_error(
521
+ "Enabling both CUDA and HIP in ATen is not supported, as HIP masquerades "
522
+ "to be CUDA (e.g., when you say CUDA, on a HIP build of ATen, this actually "
523
+ "means HIP. Rebuild PyTorch with one or the other disabled.");
524
+ } else if (hasCUDA()) {
525
+ return detail::getCUDAHooks().deviceCount();
526
+ } else if (hasHIP()) {
527
+ return detail::getHIPHooks().getNumGPUs();
528
+ } else {
529
+ return 0;
530
+ }
531
+ }
532
+
533
+ inline bool hasOpenMP() {
534
+ return globalContext().hasOpenMP();
535
+ }
536
+
537
+ inline bool hasMKL() {
538
+ return globalContext().hasMKL();
539
+ }
540
+
541
+ inline bool hasLAPACK() {
542
+ return globalContext().hasLAPACK();
543
+ }
544
+
545
+ inline bool hasMAGMA() {
546
+ return globalContext().hasMAGMA();
547
+ }
548
+
549
+ inline bool hasMKLDNN() {
550
+ return globalContext().hasMKLDNN();
551
+ }
552
+
553
+ inline void manual_seed(uint64_t seed) {
554
+ auto gen = globalContext().defaultGenerator(c10::DeviceType::CPU);
555
+ {
556
+ // See Note [Acquire lock when using random generators]
557
+ std::lock_guard<std::mutex> lock(gen.mutex());
558
+ gen.set_current_seed(seed);
559
+ }
560
+ // NB: Sometimes we build with CUDA, but we don't have any GPUs
561
+ // available. In that case, we must not seed CUDA; it will fail!
562
+ const auto cuda_num_gpus = detail::getCUDAHooks().deviceCount();
563
+ if (hasCUDA() && cuda_num_gpus > 0) {
564
+ for (const auto i : c10::irange(cuda_num_gpus)) {
565
+ auto cuda_gen = globalContext().defaultGenerator(
566
+ Device(at::kCUDA, static_cast<c10::DeviceIndex>(i)));
567
+ {
568
+ // See Note [Acquire lock when using random generators]
569
+ std::lock_guard<std::mutex> lock(cuda_gen.mutex());
570
+ cuda_gen.set_current_seed(seed);
571
+ }
572
+ }
573
+ }
574
+
575
+ const auto xpu_num_gpus = detail::getXPUHooks().deviceCount();
576
+ if (hasXPU() && xpu_num_gpus) {
577
+ for (const auto i : c10::irange(xpu_num_gpus)) {
578
+ auto xpu_gen = globalContext().defaultGenerator(
579
+ Device(at::kXPU, static_cast<c10::DeviceIndex>(i)));
580
+ {
581
+ // See Note [Acquire lock when using random generators]
582
+ std::lock_guard<std::mutex> lock(xpu_gen.mutex());
583
+ xpu_gen.set_current_seed(seed);
584
+ }
585
+ }
586
+ }
587
+
588
+ if (hasMPS()) {
589
+ auto mps_gen = globalContext().defaultGenerator(c10::DeviceType::MPS);
590
+ // See Note [Acquire lock when using random generators]
591
+ std::lock_guard<std::mutex> lock(mps_gen.mutex());
592
+ mps_gen.set_current_seed(seed);
593
+ }
594
+ }
595
+
596
+ // When the global flag `allow_tf32` is set to true, cuBLAS handles are
597
+ // automatically configured to use math mode CUBLAS_TF32_TENSOR_OP_MATH.
598
+ // For some operators, such as addmv, TF32 offers no performance improvement
599
+ // but causes precision loss. To help this case, this class implements
600
+ // a RAII guard that can be used to quickly disable TF32 within its scope.
601
+ //
602
+ // Usage:
603
+ // NoTF32Guard disable_tf32;
604
+ struct TORCH_API NoTF32Guard {
605
+ NoTF32Guard();
606
+ NoTF32Guard(NoTF32Guard&& other) = delete;
607
+ NoTF32Guard(const NoTF32Guard&) = delete;
608
+ NoTF32Guard& operator=(const NoTF32Guard&) = delete;
609
+ NoTF32Guard& operator=(NoTF32Guard&&) = delete;
610
+ ~NoTF32Guard();
611
+ static bool should_disable_tf32();
612
+
613
+ private:
614
+ bool changed = false;
615
+ };
616
+
617
+ struct TORCH_API ROCmBackwardPassGuard {
618
+ ROCmBackwardPassGuard();
619
+ ROCmBackwardPassGuard(ROCmBackwardPassGuard&& other) = delete;
620
+ ROCmBackwardPassGuard(const ROCmBackwardPassGuard&) = delete;
621
+ ROCmBackwardPassGuard& operator=(const ROCmBackwardPassGuard&) = delete;
622
+ ROCmBackwardPassGuard& operator=(ROCmBackwardPassGuard&&) = delete;
623
+ ~ROCmBackwardPassGuard();
624
+ static bool is_backward_pass();
625
+ };
626
+
627
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/DLConvertor.h ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/ATen.h>
4
+ #include <ATen/Tensor.h>
5
+ #include <ATen/dlpack.h>
6
+
7
+ // this convertor will:
8
+ // 1) take a Tensor object and wrap it in the DLPack tensor
9
+ // 2) take a dlpack tensor and convert it to the ATen Tensor
10
+
11
+ namespace at {
12
+
13
+ TORCH_API ScalarType toScalarType(const DLDataType& dtype);
14
+ TORCH_API DLManagedTensor* toDLPack(const Tensor& src);
15
+ TORCH_API Tensor fromDLPack(DLManagedTensor* src);
16
+ TORCH_API Tensor
17
+ fromDLPack(DLManagedTensor* src, std::function<void(void*)> deleter);
18
+ TORCH_API DLDataType getDLDataType(const Tensor& t);
19
+ TORCH_API DLDevice getDLContext(const Tensor& tensor, const int64_t& device_id);
20
+
21
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/Device.h ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ #pragma once
2
+ #include <c10/core/Device.h>
lib/python3.12/site-packages/torch/include/ATen/DeviceAccelerator.h ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/core/DeviceType.h>
4
+ #include <c10/macros/Macros.h>
5
+
6
+ #include <ATen/detail/MTIAHooksInterface.h>
7
+ #include <optional>
8
+
9
+ // This file defines the top level Accelerator concept for PyTorch.
10
+ // A device is an accelerator per the definition here if:
11
+ // - It is mutually exclusive with all other accelerators
12
+ // - It performs asynchronous compute via a Stream/Event system
13
+ // - It provides a set of common APIs as defined by AcceleratorHooksInterface
14
+ //
15
+ // As of today, accelerator devices are (in no particular order):
16
+ // CUDA, MTIA, XPU, HIP, MPS, PrivateUse1
17
+
18
+ namespace at {
19
+
20
+ // Ensures that only one accelerator is available (at
21
+ // compile time if possible) and return it.
22
+ // When checked is true, the returned optional always has a value.
23
+ TORCH_API std::optional<c10::DeviceType> getAccelerator(bool checked = false);
24
+
25
+ TORCH_API bool isAccelerator(c10::DeviceType d);
26
+
27
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/DeviceGuard.h ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/core/IListRef.h>
4
+ #include <ATen/core/Tensor.h>
5
+ #include <c10/core/DeviceGuard.h>
6
+ #include <c10/core/ScalarType.h> // TensorList whyyyyy
7
+
8
+ namespace at {
9
+
10
+ // Are you here because you're wondering why DeviceGuard(tensor) no
11
+ // longer works? For code organization reasons, we have temporarily(?)
12
+ // removed this constructor from DeviceGuard. The new way to
13
+ // spell it is:
14
+ //
15
+ // OptionalDeviceGuard guard(device_of(tensor));
16
+
17
+ /// Return the Device of a Tensor, if the Tensor is defined.
18
+ inline std::optional<Device> device_of(const Tensor& t) {
19
+ if (t.defined()) {
20
+ return t.device();
21
+ } else {
22
+ return std::nullopt;
23
+ }
24
+ }
25
+
26
+ inline std::optional<Device> device_of(const std::optional<Tensor>& t) {
27
+ return t.has_value() ? device_of(t.value()) : std::nullopt;
28
+ }
29
+
30
+ /// Return the Device of a TensorList, if the list is non-empty and
31
+ /// the first Tensor is defined. (This function implicitly assumes
32
+ /// that all tensors in the list have the same device.)
33
+ inline std::optional<Device> device_of(ITensorListRef t) {
34
+ if (!t.empty()) {
35
+ return device_of(t.front());
36
+ } else {
37
+ return std::nullopt;
38
+ }
39
+ }
40
+
41
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/DimVector.h ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ #pragma once
2
+ #include <ATen/core/DimVector.h>
lib/python3.12/site-packages/torch/include/ATen/Dimname.h ADDED
@@ -0,0 +1 @@
 
 
1
+ #include <ATen/core/Dimname.h>
lib/python3.12/site-packages/torch/include/ATen/Dispatch_v2.h ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <ATen/Dispatch.h>
2
+
3
+ // This is a new implementation of the AT_DISPATCH macro family from
4
+ // ATen/Dispatch.h
5
+ //
6
+ // The intended usage is:
7
+ //
8
+ // ScalarType scalar_type;
9
+ //
10
+ // AT_DISPATCH_V2(
11
+ // scalar_type,
12
+ // "debug string",
13
+ // AT_WRAP([&] {
14
+ // ... code to specialize with scalar_t ...
15
+ // }),
16
+ // kHalf,
17
+ // AT_EXPAND(AT_ALL_TYPES),
18
+ // ... as many types arguments as needed ...
19
+ // )
20
+ //
21
+ // For example, given an old style:
22
+ //
23
+ // AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND2(
24
+ // kComplexHalf,
25
+ // kHalf,
26
+ // self.scalar_type(),
27
+ // "_local_scalar_dense_cpu",
28
+ // [&] {
29
+ // scalar_t value = *self.data_ptr<scalar_t>();
30
+ // r = Scalar(value);
31
+ // }
32
+ // )
33
+ //
34
+ // You now write:
35
+ //
36
+ // AT_DISPATCH_V2(
37
+ // self.scalar_type(),
38
+ // "_local_scalar_dense_cpu",
39
+ // AT_WRAP([&] {
40
+ // scalar_t value = *self.data_ptr<scalar_t>();
41
+ // r = Scalar(value);
42
+ // }),
43
+ // AT_EXPAND(AT_ALL_TYPES),
44
+ // AT_EXPAND(AT_COMPLEX_TYPES),
45
+ // kComplexHalf,
46
+ // kHalf,
47
+ // )
48
+ //
49
+ // Notably, it sports the following improvements:
50
+ //
51
+ // - It is not necessary to specify the arity (e.g.,
52
+ // AT_DISPATCH_FLOATING_AND_COMPLEX_TYPES_AND{2,3,4,...})
53
+ // when using the macro
54
+ //
55
+ // - It is not necessary to specify each dtype individually; if
56
+ // there is a set of related dtypes and you want to dispatch
57
+ // over all of them, you can simply say, e.g., AT_EXPAND(AT_INTEGRAL_TYPES)
58
+ // in your argument list.
59
+ //
60
+ // However, you must remember to wrap the payload body in AT_WRAP, or commas
61
+ // inside your lambda will be improperly handled. Furthermore, if you more
62
+ // entries to ScalarType than can be supported by this macro, it will fail
63
+ // with an obscure error (due to attempting to concatenate AT_AP with
64
+ // something that is not a number).
65
+ //
66
+ // The implementation strategy is to use the count arguments trick
67
+ // (e.g., as described in https://stackoverflow.com/a/2124385/23845)
68
+ // to discover how many dtypes have been passed, and then dispatch to a
69
+ // hand-written macro for each arity that applies as many DISPATCH_CASE as
70
+ // necessary. The hand-written macros can be regenerated for other arities
71
+ // with the script below.
72
+ //
73
+ // There is some delicacy in the implementation in controlling when
74
+ // macro expansion occurs, mediated with AT_EXPAND and AT_GUARD. I mostly
75
+ // relied on GPT4 to help me get it right.
76
+
77
+ // Public API macros
78
+
79
+ // See documentation above
80
+ #define AT_DISPATCH_V2(TYPE, NAME, BODY, ...) \
81
+ AT_DISPATCH_SWITCH(TYPE, NAME, AT_AP_VAR(AT_WRAP(BODY), TYPE, __VA_ARGS__))
82
+
83
+ // This macro lets you pass an arbitrary expression that may contain internal
84
+ // commas to another macro without having the commas causing the expression
85
+ // to be interpreted as being multiple arguments
86
+ #define AT_WRAP(...) __VA_ARGS__
87
+
88
+ #define AT_FLOAT8_TYPES \
89
+ c10::kFloat8_e5m2, c10::kFloat8_e5m2fnuz, c10::kFloat8_e4m3fn, \
90
+ c10::kFloat8_e4m3fnuz
91
+
92
+ #define AT_INTEGRAL_TYPES \
93
+ c10::kByte, c10::kChar, c10::kInt, c10::kLong, c10::kShort
94
+ #define AT_FLOATING_TYPES c10::kDouble, c10::kFloat
95
+ #define AT_BAREBONES_UNSIGNED_TYPES c10::kUInt16, c10::kUInt32, c10::kUInt64
96
+ #define AT_INTEGRAL_TYPES_V2 \
97
+ AT_EXPAND(AT_INTEGRAL_TYPES), AT_EXPAND(AT_BAREBONES_UNSIGNED_TYPES)
98
+ #define AT_COMPLEX_TYPES c10::kComplexDouble, c10::kComplexFloat
99
+ #define AT_QINT_TYPES c10::kQInt8, c10::kQUInt8, c10::kQInt32
100
+ // NB: not *actually* all types
101
+ #define AT_ALL_TYPES AT_EXPAND(AT_INTEGRAL_TYPES), AT_EXPAND(AT_FLOATING_TYPES)
102
+ #define AT_ALL_TYPES_AND_COMPLEX \
103
+ AT_EXPAND(AT_ALL_TYPES), AT_EXPAND(AT_COMPLEX_TYPES)
104
+
105
+ // Helper macros
106
+
107
+ #define AT_AP_VAR(N, T, ...) \
108
+ AT_EXPAND(AT_CONCAT(AT_AP, AT_NUM_ARGS(__VA_ARGS__))(AT_WRAP(N), __VA_ARGS__))
109
+ #define AT_CONCAT(a, b) AT_CONCAT_AUX(a, b)
110
+ #define AT_CONCAT_AUX(a, b) a##b
111
+ #define AT_EXPAND(X) X
112
+
113
+ // Ensure we never have too many scalar types for the expansion here to
114
+ // support. To bump this, you must regenerate the macros below.
115
+ static_assert(static_cast<int>(c10::ScalarType::NumOptions) < 60);
116
+
117
+ // Python code to regenerate generate code below:
118
+ #if 0
119
+
120
+ num_args = 60
121
+
122
+ nums = ', '.join(str(i) for i in reversed(range(num_args+1)))
123
+ args = ', '.join(f'_{i}' for i in range(1, num_args+1))
124
+
125
+ print(f'#define AT_NUM_ARGS(...) AT_EXPAND(AT_NUM_ARGS_AUX(__VA_ARGS__, {nums}))')
126
+ print(f'#define AT_NUM_ARGS_AUX({args}, N, ...) N')
127
+
128
+ for i in range(1, num_args+1):
129
+ args = ', '.join(f'_{i}' for i in range(1, i+1))
130
+ cases = ' '.join([f'AT_DISPATCH_CASE(_{j}, N)' for j in range(1, i+1)])
131
+ print(f'#define AT_AP{i}(N, {args}) {cases}')
132
+
133
+ #endif
134
+
135
+ // Begin generated code
136
+ // clang-format off
137
+
138
+ #define AT_NUM_ARGS(...) AT_EXPAND(AT_NUM_ARGS_AUX(__VA_ARGS__, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
139
+ #define AT_NUM_ARGS_AUX(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, N, ...) N
140
+ #define AT_AP1(N, _1) AT_DISPATCH_CASE(_1, N)
141
+ #define AT_AP2(N, _1, _2) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N)
142
+ #define AT_AP3(N, _1, _2, _3) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N)
143
+ #define AT_AP4(N, _1, _2, _3, _4) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N)
144
+ #define AT_AP5(N, _1, _2, _3, _4, _5) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N)
145
+ #define AT_AP6(N, _1, _2, _3, _4, _5, _6) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N)
146
+ #define AT_AP7(N, _1, _2, _3, _4, _5, _6, _7) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N)
147
+ #define AT_AP8(N, _1, _2, _3, _4, _5, _6, _7, _8) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N)
148
+ #define AT_AP9(N, _1, _2, _3, _4, _5, _6, _7, _8, _9) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N)
149
+ #define AT_AP10(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N)
150
+ #define AT_AP11(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N)
151
+ #define AT_AP12(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N)
152
+ #define AT_AP13(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N)
153
+ #define AT_AP14(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N)
154
+ #define AT_AP15(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N)
155
+ #define AT_AP16(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N)
156
+ #define AT_AP17(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N)
157
+ #define AT_AP18(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N)
158
+ #define AT_AP19(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N)
159
+ #define AT_AP20(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N)
160
+ #define AT_AP21(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N)
161
+ #define AT_AP22(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N)
162
+ #define AT_AP23(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N)
163
+ #define AT_AP24(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N)
164
+ #define AT_AP25(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N)
165
+ #define AT_AP26(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N)
166
+ #define AT_AP27(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N)
167
+ #define AT_AP28(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N)
168
+ #define AT_AP29(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N)
169
+ #define AT_AP30(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N)
170
+ #define AT_AP31(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N)
171
+ #define AT_AP32(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N)
172
+ #define AT_AP33(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N)
173
+ #define AT_AP34(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N)
174
+ #define AT_AP35(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N)
175
+ #define AT_AP36(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N)
176
+ #define AT_AP37(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N)
177
+ #define AT_AP38(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N)
178
+ #define AT_AP39(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N)
179
+ #define AT_AP40(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N)
180
+ #define AT_AP41(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N)
181
+ #define AT_AP42(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N)
182
+ #define AT_AP43(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N)
183
+ #define AT_AP44(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N)
184
+ #define AT_AP45(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N)
185
+ #define AT_AP46(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N)
186
+ #define AT_AP47(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N)
187
+ #define AT_AP48(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N)
188
+ #define AT_AP49(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N)
189
+ #define AT_AP50(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N)
190
+ #define AT_AP51(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N)
191
+ #define AT_AP52(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N)
192
+ #define AT_AP53(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N)
193
+ #define AT_AP54(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N)
194
+ #define AT_AP55(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N) AT_DISPATCH_CASE(_55, N)
195
+ #define AT_AP56(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N) AT_DISPATCH_CASE(_55, N) AT_DISPATCH_CASE(_56, N)
196
+ #define AT_AP57(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N) AT_DISPATCH_CASE(_55, N) AT_DISPATCH_CASE(_56, N) AT_DISPATCH_CASE(_57, N)
197
+ #define AT_AP58(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N) AT_DISPATCH_CASE(_55, N) AT_DISPATCH_CASE(_56, N) AT_DISPATCH_CASE(_57, N) AT_DISPATCH_CASE(_58, N)
198
+ #define AT_AP59(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N) AT_DISPATCH_CASE(_55, N) AT_DISPATCH_CASE(_56, N) AT_DISPATCH_CASE(_57, N) AT_DISPATCH_CASE(_58, N) AT_DISPATCH_CASE(_59, N)
199
+ #define AT_AP60(N, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60) AT_DISPATCH_CASE(_1, N) AT_DISPATCH_CASE(_2, N) AT_DISPATCH_CASE(_3, N) AT_DISPATCH_CASE(_4, N) AT_DISPATCH_CASE(_5, N) AT_DISPATCH_CASE(_6, N) AT_DISPATCH_CASE(_7, N) AT_DISPATCH_CASE(_8, N) AT_DISPATCH_CASE(_9, N) AT_DISPATCH_CASE(_10, N) AT_DISPATCH_CASE(_11, N) AT_DISPATCH_CASE(_12, N) AT_DISPATCH_CASE(_13, N) AT_DISPATCH_CASE(_14, N) AT_DISPATCH_CASE(_15, N) AT_DISPATCH_CASE(_16, N) AT_DISPATCH_CASE(_17, N) AT_DISPATCH_CASE(_18, N) AT_DISPATCH_CASE(_19, N) AT_DISPATCH_CASE(_20, N) AT_DISPATCH_CASE(_21, N) AT_DISPATCH_CASE(_22, N) AT_DISPATCH_CASE(_23, N) AT_DISPATCH_CASE(_24, N) AT_DISPATCH_CASE(_25, N) AT_DISPATCH_CASE(_26, N) AT_DISPATCH_CASE(_27, N) AT_DISPATCH_CASE(_28, N) AT_DISPATCH_CASE(_29, N) AT_DISPATCH_CASE(_30, N) AT_DISPATCH_CASE(_31, N) AT_DISPATCH_CASE(_32, N) AT_DISPATCH_CASE(_33, N) AT_DISPATCH_CASE(_34, N) AT_DISPATCH_CASE(_35, N) AT_DISPATCH_CASE(_36, N) AT_DISPATCH_CASE(_37, N) AT_DISPATCH_CASE(_38, N) AT_DISPATCH_CASE(_39, N) AT_DISPATCH_CASE(_40, N) AT_DISPATCH_CASE(_41, N) AT_DISPATCH_CASE(_42, N) AT_DISPATCH_CASE(_43, N) AT_DISPATCH_CASE(_44, N) AT_DISPATCH_CASE(_45, N) AT_DISPATCH_CASE(_46, N) AT_DISPATCH_CASE(_47, N) AT_DISPATCH_CASE(_48, N) AT_DISPATCH_CASE(_49, N) AT_DISPATCH_CASE(_50, N) AT_DISPATCH_CASE(_51, N) AT_DISPATCH_CASE(_52, N) AT_DISPATCH_CASE(_53, N) AT_DISPATCH_CASE(_54, N) AT_DISPATCH_CASE(_55, N) AT_DISPATCH_CASE(_56, N) AT_DISPATCH_CASE(_57, N) AT_DISPATCH_CASE(_58, N) AT_DISPATCH_CASE(_59, N) AT_DISPATCH_CASE(_60, N)
200
+
201
+ // End generated code
202
+ // clang-format on
lib/python3.12/site-packages/torch/include/ATen/DynamicLibrary.h ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/Utils.h>
4
+ #include <c10/macros/Export.h>
5
+ #include <c10/util/Exception.h>
6
+
7
+ namespace c10 {
8
+
9
+ class DynamicLibraryError : public Error {
10
+ using Error::Error;
11
+ };
12
+
13
+ } // namespace c10
14
+
15
+ namespace at {
16
+
17
+ struct DynamicLibrary {
18
+ AT_DISALLOW_COPY_AND_ASSIGN(DynamicLibrary);
19
+ DynamicLibrary(DynamicLibrary&& other) = delete;
20
+ DynamicLibrary& operator=(DynamicLibrary&&) = delete;
21
+
22
+ TORCH_API DynamicLibrary(
23
+ const char* name,
24
+ const char* alt_name = nullptr,
25
+ bool leak_handle = false);
26
+
27
+ TORCH_API void* sym(const char* name);
28
+
29
+ TORCH_API ~DynamicLibrary();
30
+
31
+ private:
32
+ bool leak_handle;
33
+ void* handle = nullptr;
34
+ };
35
+
36
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/EmptyTensor.h ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+ #include <ATen/core/TensorBase.h>
3
+
4
+ namespace at::detail {
5
+
6
+ inline void check_size_nonnegative(ArrayRef<int64_t> size) {
7
+ for (const auto& x : size) {
8
+ TORCH_CHECK(
9
+ x >= 0,
10
+ "Trying to create tensor with negative dimension ",
11
+ x,
12
+ ": ",
13
+ size);
14
+ }
15
+ }
16
+
17
+ inline void check_size_nonnegative(ArrayRef<c10::SymInt> size) {
18
+ for (const auto& x : size) {
19
+ TORCH_CHECK(
20
+ x.expect_size(__FILE__, __LINE__),
21
+ "Trying to create tensor with negative dimension ",
22
+ x,
23
+ ": ",
24
+ size);
25
+ }
26
+ }
27
+
28
+ TORCH_API size_t computeStorageNbytesContiguous(
29
+ IntArrayRef sizes,
30
+ size_t itemsize,
31
+ size_t storage_offset = 0);
32
+ TORCH_API SymInt computeStorageNbytesContiguous(
33
+ SymIntArrayRef sizes,
34
+ const SymInt& itemsize,
35
+ const SymInt& storage_offset = 0);
36
+ TORCH_API size_t computeStorageNbytes(
37
+ IntArrayRef sizes,
38
+ IntArrayRef strides,
39
+ size_t itemsize,
40
+ size_t storage_offset = 0);
41
+ TORCH_API SymInt computeStorageNbytes(
42
+ SymIntArrayRef sizes,
43
+ SymIntArrayRef strides,
44
+ const SymInt& itemsize,
45
+ const SymInt& storage_offset = 0);
46
+
47
+ TORCH_API TensorBase empty_generic(
48
+ IntArrayRef size,
49
+ c10::Allocator* allocator,
50
+ c10::DispatchKeySet ks,
51
+ ScalarType scalar_type,
52
+ std::optional<c10::MemoryFormat> memory_format_opt);
53
+
54
+ TORCH_API TensorBase empty_generic_symint(
55
+ SymIntArrayRef size,
56
+ c10::Allocator* allocator,
57
+ c10::DispatchKeySet ks,
58
+ ScalarType scalar_type,
59
+ std::optional<c10::MemoryFormat> memory_format_opt);
60
+
61
+ TORCH_API TensorBase empty_strided_generic(
62
+ IntArrayRef size,
63
+ IntArrayRef stride,
64
+ c10::Allocator* allocator,
65
+ c10::DispatchKeySet ks,
66
+ ScalarType scalar_type);
67
+
68
+ TORCH_API TensorBase empty_strided_symint_generic(
69
+ SymIntArrayRef size,
70
+ SymIntArrayRef stride,
71
+ c10::Allocator* allocator,
72
+ c10::DispatchKeySet ks,
73
+ ScalarType scalar_type);
74
+
75
+ TORCH_API TensorBase empty_cpu(
76
+ IntArrayRef size,
77
+ ScalarType dtype,
78
+ bool pin_memory = false,
79
+ std::optional<c10::MemoryFormat> memory_format_opt = std::nullopt);
80
+
81
+ TORCH_API TensorBase empty_cpu(
82
+ IntArrayRef size,
83
+ std::optional<ScalarType> dtype_opt,
84
+ std::optional<Layout> layout_opt,
85
+ std::optional<Device> device_opt,
86
+ std::optional<bool> pin_memory_opt,
87
+ std::optional<c10::MemoryFormat> memory_format_opt);
88
+
89
+ TORCH_API TensorBase empty_cpu(IntArrayRef size, const TensorOptions& options);
90
+
91
+ TORCH_API TensorBase empty_strided_cpu(
92
+ IntArrayRef size,
93
+ IntArrayRef stride,
94
+ ScalarType dtype,
95
+ bool pin_memory = false);
96
+
97
+ TORCH_API TensorBase empty_strided_cpu(
98
+ IntArrayRef size,
99
+ IntArrayRef stride,
100
+ std::optional<ScalarType> dtype_opt,
101
+ std::optional<Layout> layout_opt,
102
+ std::optional<Device> device_opt,
103
+ std::optional<bool> pin_memory_opt);
104
+
105
+ TORCH_API TensorBase empty_strided_cpu(
106
+ IntArrayRef size,
107
+ IntArrayRef stride,
108
+ const TensorOptions& options);
109
+
110
+ TORCH_API TensorBase empty_meta(
111
+ IntArrayRef size,
112
+ ScalarType dtype,
113
+ std::optional<c10::MemoryFormat> memory_format_opt = std::nullopt);
114
+
115
+ TORCH_API TensorBase empty_meta(
116
+ IntArrayRef size,
117
+ std::optional<ScalarType> dtype_opt,
118
+ std::optional<Layout> layout_opt,
119
+ std::optional<Device> device_opt,
120
+ std::optional<bool> pin_memory_opt,
121
+ std::optional<c10::MemoryFormat> memory_format_opt);
122
+
123
+ TORCH_API TensorBase empty_symint_meta(
124
+ SymIntArrayRef size,
125
+ std::optional<ScalarType> dtype_opt,
126
+ std::optional<Layout> layout_opt,
127
+ std::optional<Device> device_opt,
128
+ std::optional<bool> pin_memory_opt,
129
+ std::optional<c10::MemoryFormat> memory_format_opt);
130
+
131
+ TORCH_API TensorBase empty_meta(IntArrayRef size, const TensorOptions& options);
132
+
133
+ TORCH_API TensorBase
134
+ empty_strided_meta(IntArrayRef size, IntArrayRef stride, ScalarType dtype);
135
+
136
+ TORCH_API TensorBase empty_strided_meta(
137
+ IntArrayRef size,
138
+ IntArrayRef stride,
139
+ std::optional<ScalarType> dtype_opt,
140
+ std::optional<Layout> layout_opt,
141
+ std::optional<Device> device_opt,
142
+ std::optional<bool> pin_memory_opt);
143
+
144
+ TORCH_API TensorBase empty_strided_meta(
145
+ IntArrayRef size,
146
+ IntArrayRef stride,
147
+ const TensorOptions& options);
148
+
149
+ TORCH_API TensorBase empty_strided_symint_meta(
150
+ SymIntArrayRef size,
151
+ SymIntArrayRef stride,
152
+ ScalarType dtype);
153
+
154
+ TORCH_API TensorBase empty_strided_symint_meta(
155
+ SymIntArrayRef size,
156
+ SymIntArrayRef stride,
157
+ std::optional<ScalarType> dtype_opt,
158
+ std::optional<Layout> layout_opt,
159
+ std::optional<Device> device_opt);
160
+
161
+ TORCH_API TensorBase empty_strided_symint_meta(
162
+ SymIntArrayRef size,
163
+ SymIntArrayRef stride,
164
+ const TensorOptions& options);
165
+
166
+ } // namespace at::detail
lib/python3.12/site-packages/torch/include/ATen/ExpandUtils.h ADDED
@@ -0,0 +1,527 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #ifndef AT_PER_OPERATOR_HEADERS
4
+ #include <ATen/Functions.h>
5
+ #else
6
+ #include <ATen/ops/view.h>
7
+ #include <ATen/ops/view_copy.h>
8
+ #endif
9
+
10
+ #include <ATen/Tensor.h>
11
+ #include <ATen/core/DimVector.h>
12
+ #include <c10/util/Exception.h>
13
+ #include <c10/util/MaybeOwned.h>
14
+ #include <c10/util/irange.h>
15
+
16
+ #include <functional>
17
+ #include <tuple>
18
+ #include <utility>
19
+
20
+ namespace at {
21
+
22
+ TORCH_API std::vector<int64_t> infer_size(IntArrayRef a, IntArrayRef b);
23
+ TORCH_API std::vector<SymInt> infer_size_symint(
24
+ SymIntArrayRef a,
25
+ SymIntArrayRef b);
26
+ TORCH_API DimVector infer_size_dimvector(IntArrayRef a, IntArrayRef b);
27
+ TORCH_API SymDimVector
28
+ infer_size_symdimvector(SymIntArrayRef a, SymIntArrayRef b);
29
+
30
+ // Named type instead of a pair/tuple so that we can be sure to
31
+ // construct the vectors in place and get NRVO.
32
+ template <typename Container>
33
+ struct InferExpandGeometryResult {
34
+ Container sizes;
35
+ Container strides;
36
+ explicit InferExpandGeometryResult(size_t ndim)
37
+ : sizes(ndim), strides(ndim) {}
38
+ explicit InferExpandGeometryResult(IntArrayRef sizes_, size_t ndim)
39
+ : sizes(sizes_.begin(), sizes_.end()), strides(ndim) {}
40
+ };
41
+
42
+ TORCH_API std::tuple<std::vector<int64_t>, std::vector<int64_t>>
43
+ inferExpandGeometry(
44
+ IntArrayRef tensor_sizes,
45
+ IntArrayRef tensor_strides,
46
+ IntArrayRef sizes);
47
+
48
+ TORCH_API InferExpandGeometryResult<DimVector> inferExpandGeometry_dimvector(
49
+ IntArrayRef tensor_sizes,
50
+ IntArrayRef tensor_strides,
51
+ IntArrayRef sizes);
52
+
53
+ TORCH_API std::vector<int64_t> infer_dense_strides(
54
+ IntArrayRef tensor_sizes,
55
+ IntArrayRef tensor_strides);
56
+
57
+ // True if input shapes are expandable
58
+ // NOTE: infer_size did a similar check, please keep them sync if change is
59
+ // needed
60
+ inline bool are_expandable(IntArrayRef shape1, IntArrayRef shape2) {
61
+ size_t ndim1 = shape1.size();
62
+ size_t ndim2 = shape2.size();
63
+ size_t ndim = ndim1 < ndim2 ? ndim1 : ndim2;
64
+
65
+ for (int64_t i = static_cast<int64_t>(ndim) - 1; i >= 0; --i) {
66
+ if (shape1[--ndim1] == shape2[--ndim2] || shape1[ndim1] == 1 ||
67
+ shape2[ndim2] == 1) {
68
+ continue;
69
+ }
70
+ return false;
71
+ }
72
+ return true;
73
+ }
74
+
75
+ // avoid copy-construction of Tensor by using a reference_wrapper.
76
+ inline void check_defined(
77
+ std::initializer_list<std::reference_wrapper<const Tensor>> tensors,
78
+ const char* api_name) {
79
+ for (auto& t : tensors) {
80
+ if (!t.get().defined()) {
81
+ TORCH_CHECK(false, api_name, "(...) called with an undefined Tensor");
82
+ }
83
+ }
84
+ }
85
+
86
+ // NOTE [ ExpandUtils Borrowing ]
87
+ //
88
+ // Functions in ExpandUtils return `c10::MaybeOwned<Tensor>` because
89
+ // expansion may not actually be needed, in which case we can improve
90
+ // efficiency by returning
91
+ // `c10::MaybeOwned<Tensor>::borrowed(to_expand)`. However, this means
92
+ // that you need to be careful: the returned `c10::MaybeOwned<Tensor>`
93
+ // must not outlive the original `Tensor` object that `to_expand`
94
+ // referred to! The deleted rvalue reference overloads of these
95
+ // functions help with this by preventing trivial use of a temporary
96
+ // resulting from a function call, but it is still possible to make a
97
+ // mistake.
98
+
99
+ inline c10::MaybeOwned<Tensor> expand_inplace(
100
+ const Tensor& tensor,
101
+ const Tensor& to_expand) {
102
+ if (tensor.sym_sizes().equals(to_expand.sym_sizes())) {
103
+ return c10::MaybeOwned<Tensor>::borrowed(to_expand);
104
+ }
105
+ return c10::MaybeOwned<Tensor>::owned(
106
+ to_expand.expand_symint(tensor.sym_sizes()));
107
+ }
108
+
109
+ inline c10::MaybeOwned<Tensor> expand_inplace(
110
+ const Tensor& tensor,
111
+ Tensor&& to_expand) = delete;
112
+
113
+ inline c10::MaybeOwned<Tensor> expand_inplace(
114
+ const Tensor& tensor,
115
+ const Tensor& to_expand,
116
+ const char* api_name) {
117
+ check_defined({tensor, to_expand}, api_name);
118
+ return expand_inplace(tensor, to_expand);
119
+ }
120
+
121
+ inline c10::MaybeOwned<Tensor> expand_inplace(
122
+ const Tensor& tensor,
123
+ Tensor&& to_expand,
124
+ const char* api_name) = delete;
125
+
126
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
127
+ expand_inplace(
128
+ const Tensor& tensor,
129
+ const Tensor& to_expand1,
130
+ const Tensor& to_expand2) {
131
+ if (tensor.sizes().equals(to_expand1.sizes()) &&
132
+ tensor.sizes().equals((to_expand2.sizes()))) {
133
+ return std::make_tuple(
134
+ c10::MaybeOwned<Tensor>::borrowed(to_expand1),
135
+ c10::MaybeOwned<Tensor>::borrowed(to_expand2));
136
+ }
137
+
138
+ return std::make_tuple(
139
+ c10::MaybeOwned<Tensor>::owned(to_expand1.expand(tensor.sizes())),
140
+ c10::MaybeOwned<Tensor>::owned(to_expand2.expand(tensor.sizes())));
141
+ }
142
+
143
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
144
+ expand_inplace(
145
+ const Tensor& tensor,
146
+ Tensor&& to_expand1,
147
+ const Tensor& to_expand2) = delete;
148
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
149
+ expand_inplace(
150
+ const Tensor& tensor,
151
+ const Tensor& to_expand1,
152
+ Tensor&& to_expand2) = delete;
153
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
154
+ expand_inplace(const Tensor& tensor, Tensor&& to_expand1, Tensor&& to_expand2) =
155
+ delete;
156
+
157
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
158
+ expand_inplace(
159
+ const Tensor& tensor,
160
+ const Tensor& to_expand1,
161
+ const Tensor& to_expand2,
162
+ const char* api_name) {
163
+ check_defined({tensor, to_expand1, to_expand2}, api_name);
164
+ return expand_inplace(tensor, to_expand1, to_expand2);
165
+ }
166
+
167
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
168
+ expand_inplace(
169
+ const Tensor& tensor,
170
+ Tensor&& to_expand1,
171
+ const Tensor& to_expand2,
172
+ const char* api_name) = delete;
173
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
174
+ expand_inplace(
175
+ const Tensor& tensor,
176
+ const Tensor& to_expand1,
177
+ Tensor&& to_expand2,
178
+ const char* api_name) = delete;
179
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
180
+ expand_inplace(
181
+ const Tensor& tensor,
182
+ Tensor&& to_expand1,
183
+ Tensor&& to_expand2,
184
+ const char* api_name) = delete;
185
+
186
+ // See NOTE [ ExpandUtils Borrowing ] above for `MaybeOwned` explanation.
187
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
188
+ expand_outplace(const Tensor& to_expand1, const Tensor& to_expand2) {
189
+ auto s1 = to_expand1.sym_sizes();
190
+ auto s2 = to_expand2.sym_sizes();
191
+ if (s1.equals(s2)) {
192
+ return std::make_tuple(
193
+ c10::MaybeOwned<Tensor>::borrowed(to_expand1),
194
+ c10::MaybeOwned<Tensor>::borrowed(to_expand2));
195
+ }
196
+
197
+ auto expanded_size = infer_size_symdimvector(s1, s2);
198
+ return std::make_tuple(
199
+ c10::MaybeOwned<Tensor>::owned(to_expand1.expand_symint(expanded_size)),
200
+ c10::MaybeOwned<Tensor>::owned(to_expand2.expand_symint(expanded_size)));
201
+ }
202
+
203
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
204
+ expand_outplace(Tensor&& to_expand1, const Tensor& to_expand2) = delete;
205
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
206
+ expand_outplace(const Tensor& to_expand1, Tensor&& to_expand2) = delete;
207
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
208
+ expand_outplace(Tensor&& to_expand1, Tensor&& to_expand2) = delete;
209
+
210
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
211
+ expand_outplace(
212
+ const Tensor& to_expand1,
213
+ const Tensor& to_expand2,
214
+ const char* api_name) {
215
+ check_defined({to_expand1, to_expand2}, api_name);
216
+ return expand_outplace(to_expand1, to_expand2);
217
+ }
218
+
219
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
220
+ expand_outplace(
221
+ Tensor&& to_expand1,
222
+ const Tensor& to_expand2,
223
+ const char* api_name) = delete;
224
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
225
+ expand_outplace(
226
+ const Tensor& to_expand1,
227
+ Tensor&& to_expand2,
228
+ const char* api_name) = delete;
229
+ inline std::tuple<c10::MaybeOwned<Tensor>, c10::MaybeOwned<Tensor>>
230
+ expand_outplace(
231
+ Tensor&& to_expand1,
232
+ Tensor&& to_expand2,
233
+ const char* api_name) = delete;
234
+
235
+ inline std::tuple<
236
+ c10::MaybeOwned<Tensor>,
237
+ c10::MaybeOwned<Tensor>,
238
+ c10::MaybeOwned<Tensor>>
239
+ expand_outplace(
240
+ const Tensor& to_expand1,
241
+ const Tensor& to_expand2,
242
+ const Tensor& to_expand3) {
243
+ if (to_expand1.sizes().equals(to_expand2.sizes()) &&
244
+ to_expand1.sizes().equals(to_expand3.sizes())) {
245
+ return std::make_tuple(
246
+ c10::MaybeOwned<Tensor>::borrowed(to_expand1),
247
+ c10::MaybeOwned<Tensor>::borrowed(to_expand2),
248
+ c10::MaybeOwned<Tensor>::borrowed(to_expand3));
249
+ }
250
+
251
+ auto expanded_size12 =
252
+ infer_size_dimvector(to_expand1.sizes(), to_expand2.sizes());
253
+ auto expanded_size =
254
+ infer_size_dimvector(expanded_size12, to_expand3.sizes());
255
+ return std::make_tuple(
256
+ c10::MaybeOwned<Tensor>::owned(to_expand1.expand(expanded_size)),
257
+ c10::MaybeOwned<Tensor>::owned(to_expand2.expand(expanded_size)),
258
+ c10::MaybeOwned<Tensor>::owned(to_expand3.expand(expanded_size)));
259
+ }
260
+
261
+ inline std::tuple<
262
+ c10::MaybeOwned<Tensor>,
263
+ c10::MaybeOwned<Tensor>,
264
+ c10::MaybeOwned<Tensor>>
265
+ expand_outplace(
266
+ Tensor&& to_expand1,
267
+ const Tensor& to_expand2,
268
+ const Tensor& to_expand3) = delete;
269
+ inline std::tuple<
270
+ c10::MaybeOwned<Tensor>,
271
+ c10::MaybeOwned<Tensor>,
272
+ c10::MaybeOwned<Tensor>>
273
+ expand_outplace(
274
+ const Tensor& to_expand1,
275
+ Tensor&& to_expand2,
276
+ const Tensor& to_expand3) = delete;
277
+ inline std::tuple<
278
+ c10::MaybeOwned<Tensor>,
279
+ c10::MaybeOwned<Tensor>,
280
+ c10::MaybeOwned<Tensor>>
281
+ expand_outplace(
282
+ Tensor&& to_expand1,
283
+ Tensor&& to_expand2,
284
+ const Tensor& to_expand3) = delete;
285
+ inline std::tuple<
286
+ c10::MaybeOwned<Tensor>,
287
+ c10::MaybeOwned<Tensor>,
288
+ c10::MaybeOwned<Tensor>>
289
+ expand_outplace(
290
+ const Tensor& to_expand1,
291
+ const Tensor& to_expand2,
292
+ Tensor&& to_expand3) = delete;
293
+ inline std::tuple<
294
+ c10::MaybeOwned<Tensor>,
295
+ c10::MaybeOwned<Tensor>,
296
+ c10::MaybeOwned<Tensor>>
297
+ expand_outplace(
298
+ Tensor&& to_expand1,
299
+ const Tensor& to_expand2,
300
+ Tensor&& to_expand3) = delete;
301
+ inline std::tuple<
302
+ c10::MaybeOwned<Tensor>,
303
+ c10::MaybeOwned<Tensor>,
304
+ c10::MaybeOwned<Tensor>>
305
+ expand_outplace(
306
+ const Tensor& to_expand1,
307
+ Tensor&& to_expand2,
308
+ Tensor&& to_expand3) = delete;
309
+ inline std::tuple<
310
+ c10::MaybeOwned<Tensor>,
311
+ c10::MaybeOwned<Tensor>,
312
+ c10::MaybeOwned<Tensor>>
313
+ expand_outplace(Tensor&& to_expand1, Tensor&& to_expand2, Tensor&& to_expand3) =
314
+ delete;
315
+
316
+ inline std::tuple<
317
+ c10::MaybeOwned<Tensor>,
318
+ c10::MaybeOwned<Tensor>,
319
+ c10::MaybeOwned<Tensor>>
320
+ expand_outplace(
321
+ const Tensor& to_expand1,
322
+ const Tensor& to_expand2,
323
+ const Tensor& to_expand3,
324
+ const char* api_name) {
325
+ check_defined({to_expand1, to_expand2, to_expand3}, api_name);
326
+ return expand_outplace(to_expand1, to_expand2, to_expand3);
327
+ }
328
+
329
+ inline std::tuple<
330
+ c10::MaybeOwned<Tensor>,
331
+ c10::MaybeOwned<Tensor>,
332
+ c10::MaybeOwned<Tensor>>
333
+ expand_outplace(
334
+ Tensor&& to_expand1,
335
+ const Tensor& to_expand2,
336
+ const Tensor& to_expand3,
337
+ const char* api_name) = delete;
338
+ inline std::tuple<
339
+ c10::MaybeOwned<Tensor>,
340
+ c10::MaybeOwned<Tensor>,
341
+ c10::MaybeOwned<Tensor>>
342
+ expand_outplace(
343
+ const Tensor& to_expand1,
344
+ Tensor&& to_expand2,
345
+ const Tensor& to_expand3,
346
+ const char* api_name) = delete;
347
+ inline std::tuple<
348
+ c10::MaybeOwned<Tensor>,
349
+ c10::MaybeOwned<Tensor>,
350
+ c10::MaybeOwned<Tensor>>
351
+ expand_outplace(
352
+ Tensor&& to_expand1,
353
+ Tensor&& to_expand2,
354
+ const Tensor& to_expand3,
355
+ const char* api_name) = delete;
356
+ inline std::tuple<
357
+ c10::MaybeOwned<Tensor>,
358
+ c10::MaybeOwned<Tensor>,
359
+ c10::MaybeOwned<Tensor>>
360
+ expand_outplace(
361
+ const Tensor& to_expand1,
362
+ const Tensor& to_expand2,
363
+ Tensor&& to_expand3,
364
+ const char* api_name) = delete;
365
+ inline std::tuple<
366
+ c10::MaybeOwned<Tensor>,
367
+ c10::MaybeOwned<Tensor>,
368
+ c10::MaybeOwned<Tensor>>
369
+ expand_outplace(
370
+ Tensor&& to_expand1,
371
+ const Tensor& to_expand2,
372
+ Tensor&& to_expand3,
373
+ const char* api_name) = delete;
374
+ inline std::tuple<
375
+ c10::MaybeOwned<Tensor>,
376
+ c10::MaybeOwned<Tensor>,
377
+ c10::MaybeOwned<Tensor>>
378
+ expand_outplace(
379
+ const Tensor& to_expand1,
380
+ Tensor&& to_expand2,
381
+ Tensor&& to_expand3,
382
+ const char* api_name) = delete;
383
+ inline std::tuple<
384
+ c10::MaybeOwned<Tensor>,
385
+ c10::MaybeOwned<Tensor>,
386
+ c10::MaybeOwned<Tensor>>
387
+ expand_outplace(
388
+ Tensor&& to_expand1,
389
+ Tensor&& to_expand2,
390
+ Tensor&& to_expand3,
391
+ const char* api_name) = delete;
392
+
393
+ inline c10::MaybeOwned<Tensor> expand_size(
394
+ const Tensor& to_expand,
395
+ IntArrayRef sizes) {
396
+ if (to_expand.sizes().equals(sizes)) {
397
+ return c10::MaybeOwned<Tensor>::borrowed(to_expand);
398
+ }
399
+
400
+ return c10::MaybeOwned<Tensor>::owned(to_expand.expand(sizes));
401
+ }
402
+
403
+ inline c10::MaybeOwned<Tensor> expand_size(
404
+ Tensor&& to_expand,
405
+ IntArrayRef sizes) = delete;
406
+
407
+ inline c10::MaybeOwned<Tensor> expand_size(
408
+ const Tensor& to_expand,
409
+ IntArrayRef sizes,
410
+ const char* api_name) {
411
+ check_defined({to_expand}, api_name);
412
+ return expand_size(to_expand, sizes);
413
+ }
414
+
415
+ inline c10::MaybeOwned<Tensor> expand_size(
416
+ Tensor&& to_expand,
417
+ IntArrayRef sizes,
418
+ const char* api_name) = delete;
419
+
420
+ inline std::vector<Tensor> expand_outplace(TensorList to_expand) {
421
+ // expands a list of Tensors; ignores undefined (null) tensors
422
+ bool first = true;
423
+ SymDimVector sizes;
424
+ for (const auto i : c10::irange(to_expand.size())) {
425
+ if (!to_expand[i].defined()) {
426
+ continue;
427
+ } else if (first) {
428
+ sizes = to_expand[i].sym_sizes();
429
+ first = false;
430
+ } else {
431
+ sizes = infer_size_symdimvector(sizes, to_expand[i].sym_sizes());
432
+ }
433
+ }
434
+
435
+ std::vector<Tensor> result(to_expand.size());
436
+ for (const auto i : c10::irange(to_expand.size())) {
437
+ if (!to_expand[i].defined()) {
438
+ continue;
439
+ } else if (to_expand[i].sym_sizes().equals(sizes)) {
440
+ result[i] = to_expand[i];
441
+ } else {
442
+ result[i] = to_expand[i].expand_symint(sizes);
443
+ }
444
+ }
445
+ return result;
446
+ }
447
+
448
+ template <typename T>
449
+ inline Tensor _sum_to(
450
+ Tensor tensor,
451
+ const c10::ArrayRef<T> shape,
452
+ bool always_return_non_view = false) {
453
+ if (shape.size() == 0) {
454
+ return tensor.sum();
455
+ }
456
+
457
+ auto sizes = at::symint::sizes<T>(tensor);
458
+ c10::SmallVector<int64_t, 8> reduce_dims;
459
+ const int64_t leading_dims = sizes.size() - shape.size();
460
+ for (const auto i : c10::irange(leading_dims)) {
461
+ reduce_dims.push_back(i);
462
+ }
463
+ for (int64_t i = leading_dims; i < static_cast<int64_t>(sizes.size()); ++i) {
464
+ if (TORCH_GUARD_SIZE_OBLIVIOUS(sym_eq(shape[i - leading_dims], 1)) &&
465
+ TORCH_GUARD_SIZE_OBLIVIOUS(sym_ne(sizes[i], 1))) {
466
+ reduce_dims.push_back(i);
467
+ }
468
+ }
469
+
470
+ if (!reduce_dims.empty()) {
471
+ tensor = tensor.sum(reduce_dims, /*keepdim=*/true);
472
+ }
473
+
474
+ if (always_return_non_view) {
475
+ // This is only actually used by the functionalization pass.
476
+ // We want to be able to guarantee that this function doesn't return a view
477
+ // of the input.
478
+ return leading_dims > 0 ? at::symint::view_copy<T>(tensor, shape)
479
+ : tensor.clone();
480
+ } else {
481
+ return leading_dims > 0 ? at::symint::view<T>(tensor, shape) : tensor;
482
+ }
483
+ }
484
+
485
+ inline Tensor sum_to(
486
+ Tensor tensor,
487
+ const c10::SymIntArrayRef shape,
488
+ bool always_return_non_view = false) {
489
+ return _sum_to(std::move(tensor), shape, always_return_non_view);
490
+ }
491
+
492
+ // Sums `tensor` repeatedly to produce a tensor of shape `shape`.
493
+ // Precondition: is_expandable_to(shape, tensor.sizes()) must be true
494
+ inline Tensor sum_to(
495
+ Tensor tensor,
496
+ const IntArrayRef shape,
497
+ bool always_return_non_view = false) {
498
+ return _sum_to(std::move(tensor), shape, always_return_non_view);
499
+ }
500
+
501
+ inline bool is_expandable_to(
502
+ SymIntArrayRef shape,
503
+ c10::SymIntArrayRef desired) {
504
+ size_t ndim = shape.size();
505
+ size_t target_dim = desired.size();
506
+ if (ndim > target_dim) {
507
+ return false;
508
+ }
509
+ for (const auto i : c10::irange(ndim)) {
510
+ const auto& size = shape[ndim - i - 1];
511
+ const auto& target = desired[target_dim - i - 1];
512
+ if (size != target && size != 1) {
513
+ return false;
514
+ }
515
+ }
516
+ return true;
517
+ }
518
+
519
+ inline bool is_expandable_to(IntArrayRef shape, IntArrayRef desired) {
520
+ auto sym_shape = c10::SymIntArrayRef(
521
+ reinterpret_cast<const c10::SymInt*>(shape.data()), shape.size());
522
+ auto sym_desired = c10::SymIntArrayRef(
523
+ reinterpret_cast<const c10::SymInt*>(desired.data()), desired.size());
524
+ return is_expandable_to(sym_shape, sym_desired);
525
+ }
526
+
527
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/Formatting.h ADDED
@@ -0,0 +1 @@
 
 
1
+ #include <ATen/core/Formatting.h>
lib/python3.12/site-packages/torch/include/ATen/FuncTorchTLS.h ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/macros/Macros.h>
4
+ #include <memory>
5
+
6
+ namespace at::functorch {
7
+
8
+ // NOTE [functorch TLS in pytorch/pytorch]
9
+ //
10
+ // functorch lives out-of-tree. However, it has some TLS that needs to be
11
+ // propagated. The solution for that is we store a pointer to the TLS
12
+ // inside pytorch/pytorch and extend FuncTorchTLSBase inside functorch to
13
+ // include whatever functorch needs.
14
+ //
15
+ // We need to store a pointer due to the indirection:
16
+ // inside functorch, we will create a subclass of FunctorchTLSBase called
17
+ // FuncTorchTLSImpl that actually contains metadata, like the DynamicLayerStack.
18
+ // FuncTorchTLSBase doesn't have any metadata because it hasn't been defined
19
+ // yet.
20
+ //
21
+ // Here in pytorch/pytorch, we will pass around FuncTorchTLSBase*, but inside
22
+ // functorch, we will assign a FuncTorchTLSImpl* to the FunctorchTLSBase*.
23
+ // We can't directly pass around FunctorchTLSBase (without a pointer) because
24
+ // FuncTorchTLSImpl does not fit inside a FuncTorchTLSBase by virtue of having
25
+ // more elements.
26
+ struct TORCH_API FuncTorchTLSBase {
27
+ virtual ~FuncTorchTLSBase() = default;
28
+ virtual std::unique_ptr<FuncTorchTLSBase> deepcopy() const = 0;
29
+
30
+ virtual int64_t checkSupportsSingleLevelAutogradFunction() const = 0;
31
+ virtual void checkSupportsCppAutogradFunction() const = 0;
32
+ virtual void checkSupportsInplaceRequiresGrad() const = 0;
33
+ virtual void checkSupportsRetainGrad() const = 0;
34
+ };
35
+
36
+ // returns deepcopy of the functorch tls
37
+ TORCH_API std::unique_ptr<FuncTorchTLSBase> getCopyOfFuncTorchTLS();
38
+
39
+ // sets the functorch tls. always does a deep copy.
40
+ TORCH_API void setFuncTorchTLS(
41
+ const std::shared_ptr<const FuncTorchTLSBase>& state);
42
+
43
+ // get a mutable reference to the functorch tls
44
+ TORCH_API std::unique_ptr<FuncTorchTLSBase>& functorchTLSAccessor();
45
+
46
+ } // namespace at::functorch
lib/python3.12/site-packages/torch/include/ATen/FunctionalStorageImpl.h ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/Tensor.h>
4
+
5
+ #include <utility>
6
+
7
+ namespace at::functionalization {
8
+
9
+ // See Note [Functionalization Pass In Core]
10
+
11
+ // ViewMeta is a class used by the functionalization pass to navigate between
12
+ // a base tensor and a view tensor.
13
+ // For example, if I call `b = a.view1(...)`
14
+ // the functionalization pass will generate and store a ViewMeta on b that looks
15
+ // like:
16
+ //
17
+ // ViewMeta(
18
+ // [<captures>](const Tensor& base, int64_t mutated_view_idx) {
19
+ // return base.view1(...);
20
+ // },
21
+ // [<captures>](const at::Tensor& base, const at::Tensor& mutated_view,
22
+ // int64_t mutated_view_idx) -> at::Tensor {
23
+ // return at::functionalization::impl::view1_inverse(base, mutated_view,
24
+ // ...);
25
+ // }
26
+ //
27
+ // The forward_fn lambda describes how to replay view1 on a tensor.
28
+ //
29
+ // The reverse_fn lambda describes how, given a tensor that is already a view,
30
+ // how to get the corresponding base tensor. See Note [Functionalization Pass:
31
+ // View Inverses] for details.
32
+ struct ViewMeta {
33
+ ViewMeta(
34
+ std::function<Tensor(const Tensor&, int64_t)> forward,
35
+ std::function<Tensor(const Tensor&, const Tensor&, int64_t)> reverse,
36
+ bool has_symbolic_inputs,
37
+ bool is_multi_output = false,
38
+ bool is_as_strided = false,
39
+ int64_t out_idx = 0)
40
+ : forward_fn(std::move(forward)),
41
+ reverse_fn(std::move(reverse)),
42
+ out_index(out_idx),
43
+ is_multi_output(is_multi_output),
44
+ is_as_strided(is_as_strided),
45
+ has_symbolic_inputs(has_symbolic_inputs) {}
46
+
47
+ std::function<Tensor(const Tensor&, int64_t)> forward_fn;
48
+ std::function<Tensor(const Tensor&, const Tensor&, int64_t)> reverse_fn;
49
+ // See Note [out_idx in ViewMeta]
50
+ int64_t out_index;
51
+
52
+ // Tells us if this is a multi-output view
53
+ bool is_multi_output;
54
+
55
+ bool is_as_strided;
56
+
57
+ // Tells us if this view operation has any symbolic inputs
58
+ bool has_symbolic_inputs;
59
+
60
+ // Returns a copy of the current ViewMeta, if out_idx matches the current
61
+ // out_index. Otherwise, returns a new ViewMeta with the same forward/reverse
62
+ // functions, but a new out index.
63
+ ViewMeta to_out_idx(int64_t out_idx);
64
+ };
65
+
66
+ // FunctionalStorageImpl is a subclass of StorageImpl used by the
67
+ // functionalization pass. It has no underlying data (similar to meta storage).
68
+ // It also knows how to reflect mutations to tensors in the absence of a valid
69
+ // data pointer.
70
+ //
71
+ // A storage represents the state shared by (potentially multiple) views of the
72
+ // same tensor. For example, in the following code:
73
+ //
74
+ // b = a.view1(...)
75
+ // c = b.view2(...)
76
+ // b.add_(1)
77
+ // --> storage.add_update(b, {view1_meta})
78
+ //
79
+ // The call to add_(1) will result in a call to alias.add_update(b,
80
+ // {view1_meta}), queueing up the mutation from b onto the alias. Later, suppose
81
+ // c is used in an expression (e.g. you try to print c, or pass it to an
82
+ // operator). Doing so will involve "syncing" c. First we apply any pending
83
+ // updates to the alias, and then we regenerate c by replaying its views off of
84
+ // the updated alias. E.g:
85
+ //
86
+ // print(str(c))
87
+ // --> c.sync_()
88
+ // --> alias.apply_updates() // after this, the alias will be updated to
89
+ // reflect the mutation to b
90
+ struct TORCH_API FunctionalStorageImpl : public c10::StorageImpl {
91
+ public:
92
+ struct Update {
93
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members)
94
+ const at::Tensor new_val;
95
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members)
96
+ const std::vector<ViewMeta> view_metas;
97
+ };
98
+
99
+ explicit FunctionalStorageImpl(const Tensor& value);
100
+
101
+ void add_update(
102
+ const Tensor& updated_val,
103
+ const std::vector<ViewMeta>& view_metas);
104
+ bool apply_updates();
105
+ const Tensor& base() {
106
+ return base_;
107
+ }
108
+ size_t generation() const {
109
+ return generation_;
110
+ }
111
+ void freeze() {
112
+ frozen_ = true;
113
+ }
114
+
115
+ c10::SymInt get_storage_size(bool before) {
116
+ if (before) {
117
+ return original_storage_size_;
118
+ } else {
119
+ return curr_storage_size_;
120
+ }
121
+ }
122
+
123
+ ~FunctionalStorageImpl() override = default;
124
+
125
+ void mark_mutation() {
126
+ mutation_counter_++;
127
+ }
128
+ void mark_mutation_during_no_grad_or_inference_mode() {
129
+ mutation_counter_during_no_grad_or_inference_mode_++;
130
+ }
131
+ void mark_mutation_hidden_from_autograd() {
132
+ mutation_counter_hidden_from_autograd_++;
133
+ }
134
+
135
+ bool are_all_mutations_under_no_grad_or_inference_mode() const {
136
+ auto non_autograd_mutations =
137
+ mutation_counter_during_no_grad_or_inference_mode_ +
138
+ mutation_counter_hidden_from_autograd_;
139
+ // The <= is because both counters will technically be incremented, if we
140
+ // perform e.g. a triton kernel mutation under no_grad
141
+ return mutation_counter_ <= non_autograd_mutations;
142
+ }
143
+
144
+ bool are_all_mutations_hidden_from_autograd() const {
145
+ // mutations under no_grad / inference_mode are technically not hidden from
146
+ // autograd - they change the version counter
147
+ return mutation_counter_ <= mutation_counter_hidden_from_autograd_;
148
+ }
149
+
150
+ void mark_inductor_storage_resize(c10::SymInt new_size) {
151
+ inductor_storage_resized_ = true;
152
+ curr_storage_size_ = std::move(new_size);
153
+ }
154
+
155
+ bool was_inductor_storage_resized() {
156
+ return inductor_storage_resized_;
157
+ }
158
+
159
+ private:
160
+ // NB: base_ should always point to a tensor BELOW the current
161
+ // functionalization layer. This is mainly to avoid reference cycles. e.g.
162
+ // given `b = a.view(...)` Both a.storage_ and b.storage_ are a
163
+ // FunctionStorageImpl containing an Walualias, with contains a Tensor
164
+ // `base_`. In this case (where a and b are FunctionalTensorWrapper's), base_
165
+ // should point not to a, but to a's unwrapped value, a.value_` See Note
166
+ // [Functionalization: Walualias Removal] for a diagram that shows this
167
+ // visually.
168
+ at::Tensor base_;
169
+ std::vector<Update> updates_;
170
+ // generation_ gets incremented every time a mutation is queued onto the
171
+ // alias. It is used to determine if a given tensor is "up to date", or if it
172
+ // needs to be regenerated from the alias.
173
+ size_t generation_ = 0;
174
+ // If frozen, no more mutations are allowed on this storage. Once frozen, a
175
+ // storage cannot be unfrozen.
176
+ bool frozen_ = false;
177
+
178
+ // These mutation counters are bumped on the storage
179
+ // whenever a FunctionalTensorWrapper experiences a mutation.
180
+ // When the mutation is under no_grad, or comes from a triton kernel, we also
181
+ // bump the corresponding during_no_grad or hidden_from_autograd counters. Why
182
+ // do we need to detect these two situations separately from "normal" input
183
+ // mutations? (1) "normal" input mutations can mutate autograd metadata like
184
+ // .grad_fn,
185
+ // in which case they need to be replayed outside of the compiled graph
186
+ // (2) "no_grad" input mutations are generally safe to keep in the graph (and
187
+ // compile),
188
+ // but they bump the tensor's VC, so we need to mark_dirty() on the inputs
189
+ // in torch.compile
190
+ // (3) mutations that are fully hidden from autograd (e.g. from a triton
191
+ // kernel)
192
+ // do not mutate any autograd state, and be fully kept in the graph
193
+ // When we detect that an input was mutated, we need to be able to tell if:
194
+ // (1) all of the mutations were from triton kernels
195
+ // (2) all of the mutations were under no_grad
196
+ uint64_t mutation_counter_during_no_grad_or_inference_mode_ = 0;
197
+ uint64_t mutation_counter_ = 0;
198
+ uint64_t mutation_counter_hidden_from_autograd_ = 0;
199
+
200
+ // Used to tell if:
201
+ // (1) There were any storage resizes on a graph input
202
+ // (2) The original/curr storage size tell us if these resizes result in a nop
203
+ bool inductor_storage_resized_ = false;
204
+ c10::SymInt original_storage_size_;
205
+ c10::SymInt curr_storage_size_;
206
+ };
207
+
208
+ } // namespace at::functionalization
lib/python3.12/site-packages/torch/include/ATen/FunctionalTensorWrapper.h ADDED
@@ -0,0 +1,454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ #pragma once
3
+
4
+ #include <ATen/ArrayRef.h>
5
+ #include <ATen/FunctionalStorageImpl.h>
6
+ #include <ATen/core/IListRef.h>
7
+ #include <ATen/core/List.h>
8
+ #include <ATen/core/boxing/BoxedKernel.h>
9
+ #include <ATen/core/boxing/impl/boxing.h>
10
+ #include <ATen/core/dispatch/Dispatcher.h>
11
+
12
+ #include <c10/core/DispatchKey.h>
13
+
14
+ namespace at {
15
+
16
+ // Note [Functionalization Pass In Core]
17
+ // The Functionalization pass is used to remove aliasing from a pytorch program.
18
+ //
19
+ // This is useful for backends that don't support aliasing, like XLA and Vulkan.
20
+ // It's also necessary in order to remove mutation from a program, which is
21
+ // needed in Functorch.
22
+ //
23
+ // Consider this program:
24
+ // a = torch.ones(...)
25
+ // b = a.view(...)
26
+ // b.add_(1)
27
+ //
28
+ // In this program, b is meant to alias with a due to the use of view(). At the
29
+ // end of the program, both a and b are full of 2's. However, backends that
30
+ // don't support aliasing aren't able to correctly implement the view()
31
+ // operator. Instead, they can opt into the Functionalization pass, which will
32
+ // sit between the user and the backend, and provide the necessary aliasing
33
+ // logic.
34
+ //
35
+ // The functionalization pass will turn the above program into a slightly
36
+ // different program that has the same semantics, transparently to the user,
37
+ // that backends like XLA/Vulkan are able to implement a = torch.ones(...) b =
38
+ // a.view_copy(...) # view() replaced with view_copy(). Backends like
39
+ // XLA/Vulkan can implement this! b.add_(1) a.add_(1) # Our functionalization
40
+ // pass machinery knows that a and b are aliased - it applies b's mutation to a
41
+ // too.
42
+ //
43
+ // So, how does the functionalization pass keep track of which tensors are
44
+ // aliased? The pass works by wrapping EVERY tensor in the program inside of a
45
+ // FunctionalTensorWrapper, which knows about its alias'd tensors.
46
+ //
47
+ // See Note [Functionalization: Alias Removal] for details on the aliasing
48
+ // machinery. See Note [Functionalization: Mutation Removal] for details on
49
+ // mutation removal.
50
+ struct TORCH_API FunctionalTensorWrapper : public c10::TensorImpl {
51
+ explicit FunctionalTensorWrapper(const Tensor& value);
52
+ // Additional constructor to create a FunctionalTensorWrapper directly from an
53
+ // underlying tensor that was created from a view. For example, the code b =
54
+ // a.view1() will generate a constructor call to FunctionalTensorWrapper(b, a,
55
+ // view1_meta)
56
+ explicit FunctionalTensorWrapper(
57
+ const Tensor& view_value,
58
+ const FunctionalTensorWrapper* base,
59
+ const functionalization::ViewMeta& meta);
60
+
61
+ // Get the underlying, actual tensor, that doesn't know anything about
62
+ // functionalization.
63
+ const Tensor& value() const {
64
+ return value_;
65
+ }
66
+ // The concept of "level" is only ever important to functorch; it's exposed
67
+ // here as more of a hook for functorch to use.
68
+ int64_t level() const {
69
+ return level_;
70
+ }
71
+ void set_level(int64_t level) {
72
+ level_ = level;
73
+ }
74
+ bool has_metadata_mutation() const {
75
+ return has_metadata_mutation_;
76
+ }
77
+
78
+ void mark_mutation() {
79
+ functional_storage_impl()->mark_mutation();
80
+ }
81
+ // Denotes a mutation that's hidden from autograd,
82
+ // e.g. for the purposes of passing a tensor to a triton kernel
83
+ void mark_mutation_hidden_from_autograd() {
84
+ functional_storage_impl()->mark_mutation_hidden_from_autograd();
85
+ }
86
+ void mark_mutation_during_no_grad_or_inference_mode() {
87
+ functional_storage_impl()->mark_mutation_during_no_grad_or_inference_mode();
88
+ }
89
+ // Are all the mutations happening to the tensor hidden from autograd
90
+ bool are_all_mutations_hidden_from_autograd() const {
91
+ return functional_storage_impl()->are_all_mutations_hidden_from_autograd();
92
+ }
93
+ // Did all mutations happen under no_grad or inference_mode
94
+ // (We also need to ignore mutations fully hidden from autograd here)
95
+ bool are_all_mutations_under_no_grad_or_inference_mode() const {
96
+ return functional_storage_impl()
97
+ ->are_all_mutations_under_no_grad_or_inference_mode();
98
+ }
99
+
100
+ void maybe_mark_symbolic(const functionalization::ViewMeta& meta) {
101
+ is_symbolic_ = is_symbolic_ | meta.has_symbolic_inputs;
102
+ }
103
+
104
+ bool is_symbolic() const {
105
+ return is_symbolic_;
106
+ }
107
+
108
+ // Runs the forward_fn of every ViewMeta collected in the current instance
109
+ // to some other base.
110
+ Tensor apply_view_metas(const Tensor& base);
111
+
112
+ // Sync's the underlying tensor with its alias, if it's out of date. This
113
+ // involves two steps: 1) Apply any pending updates/mutations to the alias 2)
114
+ // Replay the views (if any) to regenerate the current tensor off of the
115
+ // updated alias.
116
+ void sync_();
117
+ // Performs step (1) of the sync. This is its own public API because it's
118
+ // needed by view_inplace ops like transpose_. See Note [Functionalization
119
+ // Pass - Inplace View Ops]
120
+ void regenerate_from_base();
121
+ // Performs step (2) of the sync. This is its own public API because it's
122
+ // needed by functorch. functorch wants to make sure that all input tensors to
123
+ // a functionalized program have been properly synced so it can properly
124
+ // propagate mutations to inputs. It can't just call sync_(), because the
125
+ // FunctionalTensorWrapper will look like it has no aliases and sync_ will be
126
+ // a noop. We use the reference count on storage_ to determine if the wrapper
127
+ // is aliased, and by the time functorch is ready to propagate updates to
128
+ // inputs, any intermediate views of the input created by the program will
129
+ // have been deallocated. This function also returns whether or not the base
130
+ // actually had any updates to apply.
131
+ bool apply_updates();
132
+ // Takes the current state of value_ and snapshots it, sending it as a pending
133
+ // update to the alias.
134
+ void commit_update();
135
+ // When any tensor is mutated, the tensor increments its alias's "generation".
136
+ // Separately, each tensor maintains its own "generation" counter, which is
137
+ // used to determine if it's up-to-date with its alias. The act of syncing a
138
+ // tensor will set a tensor's generation equal to its alias's generation.
139
+ bool is_up_to_date() const;
140
+ // Freezes the storage of this tensor, preventing subsequent mutations
141
+ void freeze_storage() const;
142
+ // Every FunctionalTensorWrapper contains a vector<ViewMeta> objects
143
+ // describing the series of view ops that ran to generate the current tensor
144
+ // from the base tensor. This method is used by inplace-view ops like
145
+ // transpose_. It appends a ViewMeta to the existing stack, and refreshes the
146
+ // tensor by replaying the views off of the alias.
147
+ void mutate_view_meta(const at::functionalization::ViewMeta& meta);
148
+
149
+ // Custom implementation of self.set_(src)
150
+ void set__impl(const FunctionalTensorWrapper* other);
151
+
152
+ // Custom implementation of resize_storage_bytes_(self, new_size)
153
+ void storage_resize_(const c10::SymInt& new_size);
154
+
155
+ // Returns whether the current tensor's data was ever mutated
156
+ bool has_data_mutation();
157
+ //
158
+ // Returns whether the current FunctionalTensorWrapper
159
+ // experienced a set_() call.
160
+ bool was_storage_changed() {
161
+ return was_storage_changed_;
162
+ }
163
+
164
+ void set_storage_changed() {
165
+ was_storage_changed_ = true;
166
+ }
167
+
168
+ // A FunctionalTensor is considered a base if its not a view of another
169
+ // tensor.
170
+ bool isBaseTensor() const {
171
+ return view_metas_.empty();
172
+ }
173
+
174
+ c10::SymInt get_storage_size(bool before) {
175
+ return functional_storage_impl()->get_storage_size(before);
176
+ }
177
+
178
+ // Returns whether the FunctionalTensor experienced an
179
+ // untyped_storage().resize_() call
180
+ bool was_inductor_storage_resized() {
181
+ return functional_storage_impl()->was_inductor_storage_resized();
182
+ }
183
+
184
+ // The functionalization pass can be used to remove mutations.
185
+ // It does so by replacing any mutation op with it's corresponding
186
+ // out-of-place op, followed by a call to replace_(). e.g:
187
+ //
188
+ // a.add_(1)
189
+ //
190
+ // will turn into:
191
+ //
192
+ // tmp = a.add(1)
193
+ // a.replace_(tmp)
194
+ //
195
+ // replace_() swaps out the wrapped tensor, value_, with tmp.
196
+ void replace_(const Tensor& other, bool from_lazy_regenerate = false);
197
+
198
+ bool is_multi_output_view() {
199
+ return is_multi_output_view_;
200
+ }
201
+
202
+ // See Note[resize_() in functionalization pass]
203
+ void maybe_replace_storage(const Tensor& other);
204
+
205
+ // Replaces the storage with a new functional storage,
206
+ // and clears the view_metas_ stack.
207
+ // WARNING: Calling this function will sever the aliasing relationship between
208
+ // the current FunctionalTensorWrapper and any of its outstanding aliases.
209
+ // Please only call if you know what you're doing.
210
+ void _unsafe_reset_storage();
211
+
212
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
213
+ const c10::VariableVersion& version_counter,
214
+ bool allow_tensor_metadata_change) const override;
215
+
216
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
217
+ c10::VariableVersion&& version_counter,
218
+ bool allow_tensor_metadata_change) const override;
219
+
220
+ ~FunctionalTensorWrapper() override = default;
221
+
222
+ // FunctionalTensorWrapper overrides all custom size/stride function,
223
+ // so that if the inner tensor has a custom implementation
224
+ // we make sure to call that implementation.
225
+ at::IntArrayRef sizes_custom() const override;
226
+ at::IntArrayRef strides_custom() const override;
227
+ int64_t dim_custom() const override;
228
+ int64_t numel_custom() const override;
229
+ bool is_contiguous_custom(at::MemoryFormat memory_format) const override;
230
+ c10::SymIntArrayRef sym_sizes_custom() const override;
231
+ c10::SymInt sym_size_custom(int64_t d) const override;
232
+ c10::SymIntArrayRef sym_strides_custom() const override;
233
+ c10::SymInt sym_storage_offset_custom() const override;
234
+ c10::Device device_custom() const override;
235
+ c10::Layout layout_impl() const override;
236
+
237
+ private:
238
+ const char* tensorimpl_type_name() const override;
239
+ void set_constructor_metadata();
240
+ functionalization::FunctionalStorageImpl* functional_storage_impl() const;
241
+
242
+ // This is used to re-implement shallow_copy_and_detach for
243
+ // FunctionalTensorWrapper. The implementation is identical, but we just need
244
+ // to return a subclass instead of a plain TensorImpl.
245
+ // TODO: maybe it's possible to arrange for that to happen automatically
246
+ // without an override here?
247
+ template <typename VariableVersion>
248
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach_core(
249
+ VariableVersion&& version_counter,
250
+ bool allow_tensor_metadata_change) const;
251
+
252
+ void shallow_copy_from(const c10::intrusive_ptr<TensorImpl>& impl) override;
253
+ void copy_tensor_metadata_and_refresh(
254
+ const FunctionalTensorWrapper* src_impl,
255
+ FunctionalTensorWrapper* dest_impl,
256
+ const c10::VariableVersion& version_counter,
257
+ bool allow_tensor_metadata_change) const;
258
+
259
+ // Note that value is not taken by reference: internally, the wrapper will
260
+ // change the value tensor that it points to over time.
261
+ Tensor value_;
262
+ int64_t level_{};
263
+ // These two counters are used for identifying
264
+ // whether all the mutations on a given tensor are hidden from autograd or
265
+ // not. If we have an input mutation that is hidden from autograd, then once
266
+ // we convert the input mutation to a copy_() we know it will be safe to hide
267
+ // the copy_() from autograd as well.
268
+ bool has_metadata_mutation_ = false;
269
+ bool is_multi_output_view_ = false;
270
+ // Did the tensor experience a set_() call.
271
+ bool was_storage_changed_ = false;
272
+ // Did the tensor experience any view operation with symbolic int.
273
+ bool is_symbolic_ = false;
274
+
275
+ size_t generation_ = 0;
276
+ std::vector<at::functionalization::ViewMeta> view_metas_;
277
+
278
+ protected:
279
+ static void copy_tensor_metadata(
280
+ const FunctionalTensorWrapper* src_impl,
281
+ FunctionalTensorWrapper* dest_impl,
282
+ const c10::VariableVersion& version_counter,
283
+ bool allow_tensor_metadata_change);
284
+ };
285
+
286
+ // Utility functions for the functionalization pass.
287
+
288
+ namespace functionalization {
289
+ namespace impl {
290
+
291
+ TORCH_API inline FunctionalTensorWrapper* unsafeGetFunctionalWrapper(
292
+ const Tensor& tensor) {
293
+ auto functional_impl =
294
+ static_cast<FunctionalTensorWrapper*>(tensor.unsafeGetTensorImpl());
295
+ TORCH_INTERNAL_ASSERT_DEBUG_ONLY(functional_impl != nullptr);
296
+ return functional_impl;
297
+ }
298
+
299
+ TORCH_API bool isBaseTensor(const at::Tensor& tensor);
300
+
301
+ TORCH_API bool isFunctionalTensor(const at::Tensor& tensor);
302
+ TORCH_API bool isFunctionalTensor(const std::optional<Tensor>& t);
303
+ TORCH_API bool isFunctionalTensor(
304
+ const c10::List<std::optional<Tensor>>& t_list);
305
+ TORCH_API bool isFunctionalTensor(ITensorListRef list);
306
+
307
+ TORCH_API Tensor to_functional_tensor(const Tensor& tensor);
308
+ TORCH_API std::optional<Tensor> to_functional_tensor(
309
+ const std::optional<Tensor>& tensor);
310
+ TORCH_API c10::List<std::optional<Tensor>> to_functional_tensor(
311
+ const c10::List<std::optional<Tensor>>& t_list);
312
+ TORCH_API std::vector<Tensor> to_functional_tensor(ITensorListRef t_list);
313
+
314
+ TORCH_API void freeze_functional_tensor(const Tensor& tensor);
315
+
316
+ TORCH_API Tensor
317
+ from_functional_tensor(const Tensor& tensor, bool assert_functional = true);
318
+ TORCH_API std::optional<Tensor> from_functional_tensor(
319
+ const std::optional<Tensor>& t,
320
+ bool assert_functional = true);
321
+ TORCH_API c10::List<std::optional<Tensor>> from_functional_tensor(
322
+ const c10::List<std::optional<Tensor>>& t_list);
323
+ TORCH_API std::vector<Tensor> from_functional_tensor(ITensorListRef t_list);
324
+
325
+ TORCH_API void sync(const at::Tensor& t);
326
+ TORCH_API void sync(const std::optional<Tensor>& t);
327
+ TORCH_API void sync(const c10::List<std::optional<Tensor>>& t_list);
328
+ TORCH_API void sync(ITensorListRef t_list);
329
+
330
+ TORCH_API void replace_(const Tensor& functional_tensor, const Tensor& other);
331
+ TORCH_API void replace_(
332
+ const ITensorListRef functional_tensor,
333
+ ITensorListRef other);
334
+
335
+ TORCH_API void commit_update(const Tensor& functional_tensor);
336
+ TORCH_API void commit_update(ITensorListRef functional_tensor);
337
+
338
+ TORCH_API void unsafe_reset_storage(const Tensor& functional_tensor);
339
+
340
+ TORCH_API void mark_mutation_hidden_from_autograd(
341
+ const Tensor& functional_tensor);
342
+
343
+ TORCH_API bool are_all_mutations_hidden_from_autograd(
344
+ const Tensor& functional_tensor);
345
+
346
+ TORCH_API bool are_all_mutations_under_no_grad_or_inference_mode(
347
+ const Tensor& functional_tensor);
348
+
349
+ // These two methods are XLA-specific logic and are no-ops
350
+ // for the normal functionalization flow.
351
+ TORCH_API void propagate_xla_data(
352
+ const Tensor& functional_tensor,
353
+ const Tensor& other);
354
+ TORCH_API void propagate_xla_data(
355
+ const ITensorListRef functional_tensor,
356
+ ITensorListRef other);
357
+
358
+ TORCH_API void propagate_xla_data_direct(
359
+ const Tensor& tensor,
360
+ const Tensor& other);
361
+ TORCH_API void propagate_xla_data_direct(
362
+ const ITensorListRef tensor,
363
+ ITensorListRef other);
364
+
365
+ Tensor create_functional_tensor_with_view_meta(
366
+ const Tensor& view_to_wrap,
367
+ const Tensor& base,
368
+ functionalization::ViewMeta meta,
369
+ int64_t out_idx = 0);
370
+ std::vector<Tensor> create_functional_tensor_with_view_meta(
371
+ ITensorListRef view_to_wrap,
372
+ const Tensor& base,
373
+ const functionalization::ViewMeta& meta);
374
+
375
+ void mutate_view_meta(
376
+ const Tensor& self,
377
+ const functionalization::ViewMeta& meta);
378
+
379
+ void set_sizes_strides_offset(const Tensor& out, const Tensor& meta_out);
380
+ void set_sizes_strides_offset(
381
+ const std::vector<Tensor>& outs,
382
+ const std::vector<Tensor>& meta_outs);
383
+
384
+ // ~~~~~ TLS used in functionalization ~~~~~
385
+
386
+ TORCH_API bool getFunctionalizationReapplyViewsTLS();
387
+ TORCH_API void setFunctionalizationReapplyViewsTLS(bool reapply_views);
388
+
389
+ class TORCH_API FunctionalizationReapplyViewsGuard {
390
+ public:
391
+ FunctionalizationReapplyViewsGuard(bool reapply_views)
392
+ : prev_(getFunctionalizationReapplyViewsTLS()) {
393
+ setFunctionalizationReapplyViewsTLS(reapply_views);
394
+ }
395
+
396
+ ~FunctionalizationReapplyViewsGuard() {
397
+ setFunctionalizationReapplyViewsTLS(prev_);
398
+ }
399
+
400
+ FunctionalizationReapplyViewsGuard(
401
+ const FunctionalizationReapplyViewsGuard&) = delete;
402
+ FunctionalizationReapplyViewsGuard operator=(
403
+ const FunctionalizationReapplyViewsGuard&) = delete;
404
+ FunctionalizationReapplyViewsGuard(FunctionalizationReapplyViewsGuard&&) =
405
+ delete;
406
+ FunctionalizationReapplyViewsGuard operator=(
407
+ FunctionalizationReapplyViewsGuard&&) = delete;
408
+
409
+ private:
410
+ bool prev_;
411
+ };
412
+
413
+ } // namespace impl
414
+
415
+ // Helper function to call an out-of-place composite aten kernel that may use
416
+ // mutations / views internally, and functionalize them.
417
+ TORCH_API void functionalize_op_helper(
418
+ const c10::OperatorHandle& op,
419
+ torch::jit::Stack* stack);
420
+
421
+ template <class Op, bool symint, class ReturnType, class... ParameterTypes>
422
+ struct _functionalize_aten_op final {};
423
+
424
+ template <class Op, bool symint, class ReturnType, class... ParameterTypes>
425
+ struct _functionalize_aten_op<Op, symint, ReturnType(ParameterTypes...)> final {
426
+ static ReturnType call(
427
+ typename c10::maybe_keep_symint<symint, ParameterTypes>::type... args) {
428
+ using FuncType = ReturnType(
429
+ typename c10::maybe_keep_symint<symint, ParameterTypes>::type...);
430
+ auto op = c10::Dispatcher::singleton()
431
+ .findSchemaOrThrow(
432
+ (const char*)Op::name, (const char*)Op::overload_name)
433
+ .typed<FuncType>();
434
+
435
+ return c10::impl::BoxedKernelWrapper<FuncType>::call(
436
+ c10::BoxedKernel::makeFromFunction<functionalize_op_helper>(),
437
+ op,
438
+ // BoxedKernelWrapper knows to ignore this keyset argument,
439
+ // because functionalize_op_helper doesn't take in a DispatchKeySet
440
+ c10::DispatchKeySet(),
441
+ args...);
442
+ }
443
+ };
444
+
445
+ template <class Op>
446
+ using functionalize_aten_op =
447
+ _functionalize_aten_op<Op, false, typename Op::schema>;
448
+
449
+ template <class Op>
450
+ using functionalize_aten_op_symint =
451
+ _functionalize_aten_op<Op, true, typename Op::schema>;
452
+
453
+ } // namespace functionalization
454
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/Functions.h ADDED
@@ -0,0 +1,1458 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ // @generated by torchgen/gen.py from Functions.h
4
+
5
+ #ifdef TORCH_ASSERT_NO_OPERATORS
6
+ #error This change adds a dependency on native_functions.yaml, \
7
+ meaning the file will need to be re-compiled every time an operator \
8
+ is changed or added. Consider if your change would be better placed in \
9
+ another file, or if a more specific header might achieve the same goal. \
10
+ See NOTE: [Tensor vs. TensorBase]
11
+ #endif
12
+
13
+ #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
14
+ #error This change adds a dependency on all pytorch operators, meaning the \
15
+ file will need to be re-compiled every time an operator is changed or added. \
16
+ Consider including a specific operator from <ATen/ops/{my_operator}.h> and \
17
+ see NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
18
+ #endif
19
+
20
+ // NOTE: [TORCH_ASSERT_ONLY_METHOD_OPERATORS]
21
+ //
22
+ // In ATen, certain generated headers files include the definitions of
23
+ // every single operator in PyTorch. Unfortunately this means every
24
+ // time an operator signature is updated or changed in
25
+ // native_functions.yaml, you (and every other PyTorch developer) need
26
+ // to recompile every source file that includes any of these headers.
27
+ //
28
+ // To break up these header dependencies, and improve incremental
29
+ // build times for all PyTorch developers. These headers are split
30
+ // into per-operator headers in the `ATen/ops` folder. This limits
31
+ // incremental builds to only changes to methods of `Tensor`, or files
32
+ // that use the specific operator being changed. With `at::sum` as an
33
+ // example, you should include
34
+ //
35
+ // <ATen/ops/sum.h> // instead of ATen/Functions.h
36
+ // <ATen/ops/sum_native.h> // instead of ATen/NativeFunctions.h
37
+ // <ATen/ops/sum_ops.h> // instead of ATen/Operators.h
38
+ // <ATen/ops/sum_cpu_dispatch.h> // instead of ATen/CPUFunctions.h
39
+ //
40
+ // However, even if you're careful to use this in your own code.
41
+ // `Functions.h` might be included indirectly through another header
42
+ // without you realising. To avoid this, you can add
43
+ //
44
+ // #define TORCH_ASSERT_ONLY_METHOD_OPERATORS
45
+ //
46
+ // to the top of your source file. This way any time the non-specific
47
+ // headers are included, the compiler will error out.
48
+ //
49
+ // Also, be aware that `ops` are not available in all build
50
+ // configurations (namely fb-internal) so you must guard these
51
+ // includes with `#ifdef AT_PER_OPERATOR_HEADERS`. e.g.
52
+ //
53
+ // #ifndef AT_PER_OPERATOR_HEADERS
54
+ // #include <ATen/Functions.h>
55
+ // #else
56
+ // #include <ATen/ops/sum.h>
57
+ // #endif
58
+
59
+ #include <ATen/Context.h>
60
+ #include <ATen/DeviceGuard.h>
61
+ #include <ATen/TensorUtils.h>
62
+ #include <ATen/TracerMode.h>
63
+ #include <ATen/core/Generator.h>
64
+ #include <ATen/core/Reduction.h>
65
+ #include <c10/core/SymInt.h>
66
+ #include <ATen/core/Tensor.h>
67
+ #include <c10/core/Scalar.h>
68
+ #include <c10/core/Storage.h>
69
+ #include <c10/core/TensorOptions.h>
70
+ #include <c10/util/Deprecated.h>
71
+ #include <optional>
72
+ #include <c10/util/OptionalArrayRef.h>
73
+
74
+ #include <ATen/ops/from_blob.h>
75
+ #include <ATen/ops/tensor.h>
76
+
77
+ #include <ATen/ops/_adaptive_avg_pool2d.h>
78
+ #include <ATen/ops/_adaptive_avg_pool2d_backward.h>
79
+ #include <ATen/ops/_adaptive_avg_pool3d.h>
80
+ #include <ATen/ops/_adaptive_avg_pool3d_backward.h>
81
+ #include <ATen/ops/_add_batch_dim.h>
82
+ #include <ATen/ops/_add_relu.h>
83
+ #include <ATen/ops/_addmm_activation.h>
84
+ #include <ATen/ops/_aminmax.h>
85
+ #include <ATen/ops/_amp_foreach_non_finite_check_and_unscale.h>
86
+ #include <ATen/ops/_amp_update_scale.h>
87
+ #include <ATen/ops/_assert_async.h>
88
+ #include <ATen/ops/_assert_scalar.h>
89
+ #include <ATen/ops/_assert_tensor_metadata.h>
90
+ #include <ATen/ops/_autocast_to_full_precision.h>
91
+ #include <ATen/ops/_autocast_to_reduced_precision.h>
92
+ #include <ATen/ops/_backward.h>
93
+ #include <ATen/ops/_batch_norm_impl_index.h>
94
+ #include <ATen/ops/_batch_norm_impl_index_backward.h>
95
+ #include <ATen/ops/_batch_norm_no_update.h>
96
+ #include <ATen/ops/_batch_norm_with_update.h>
97
+ #include <ATen/ops/_cast_Byte.h>
98
+ #include <ATen/ops/_cast_Char.h>
99
+ #include <ATen/ops/_cast_Double.h>
100
+ #include <ATen/ops/_cast_Float.h>
101
+ #include <ATen/ops/_cast_Half.h>
102
+ #include <ATen/ops/_cast_Int.h>
103
+ #include <ATen/ops/_cast_Long.h>
104
+ #include <ATen/ops/_cast_Short.h>
105
+ #include <ATen/ops/_cdist_backward.h>
106
+ #include <ATen/ops/_cdist_forward.h>
107
+ #include <ATen/ops/_cholesky_solve_helper.h>
108
+ #include <ATen/ops/_choose_qparams_per_tensor.h>
109
+ #include <ATen/ops/_chunk_cat.h>
110
+ #include <ATen/ops/_coalesce.h>
111
+ #include <ATen/ops/_coalesced.h>
112
+ #include <ATen/ops/_compute_linear_combination.h>
113
+ #include <ATen/ops/_conj.h>
114
+ #include <ATen/ops/_conj_copy.h>
115
+ #include <ATen/ops/_conj_physical.h>
116
+ #include <ATen/ops/_conv_depthwise2d.h>
117
+ #include <ATen/ops/_convert_indices_from_coo_to_csr.h>
118
+ #include <ATen/ops/_convert_indices_from_csr_to_coo.h>
119
+ #include <ATen/ops/_convert_weight_to_int4pack.h>
120
+ #include <ATen/ops/_convert_weight_to_int4pack_for_cpu.h>
121
+ #include <ATen/ops/_convolution.h>
122
+ #include <ATen/ops/_convolution_double_backward.h>
123
+ #include <ATen/ops/_convolution_mode.h>
124
+ #include <ATen/ops/_copy_from.h>
125
+ #include <ATen/ops/_copy_from_and_resize.h>
126
+ #include <ATen/ops/_cslt_compress.h>
127
+ #include <ATen/ops/_cslt_sparse_mm.h>
128
+ #include <ATen/ops/_cslt_sparse_mm_search.h>
129
+ #include <ATen/ops/_ctc_loss.h>
130
+ #include <ATen/ops/_ctc_loss_backward.h>
131
+ #include <ATen/ops/_cudnn_ctc_loss.h>
132
+ #include <ATen/ops/_cudnn_init_dropout_state.h>
133
+ #include <ATen/ops/_cudnn_rnn.h>
134
+ #include <ATen/ops/_cudnn_rnn_backward.h>
135
+ #include <ATen/ops/_cudnn_rnn_flatten_weight.h>
136
+ #include <ATen/ops/_cufft_clear_plan_cache.h>
137
+ #include <ATen/ops/_cufft_get_plan_cache_max_size.h>
138
+ #include <ATen/ops/_cufft_get_plan_cache_size.h>
139
+ #include <ATen/ops/_cufft_set_plan_cache_max_size.h>
140
+ #include <ATen/ops/_cummax_helper.h>
141
+ #include <ATen/ops/_cummin_helper.h>
142
+ #include <ATen/ops/_debug_has_internal_overlap.h>
143
+ #include <ATen/ops/_dimI.h>
144
+ #include <ATen/ops/_dimV.h>
145
+ #include <ATen/ops/_dim_arange.h>
146
+ #include <ATen/ops/_dirichlet_grad.h>
147
+ #include <ATen/ops/_efficient_attention_backward.h>
148
+ #include <ATen/ops/_efficient_attention_forward.h>
149
+ #include <ATen/ops/_efficientzerotensor.h>
150
+ #include <ATen/ops/_embedding_bag.h>
151
+ #include <ATen/ops/_embedding_bag_backward.h>
152
+ #include <ATen/ops/_embedding_bag_dense_backward.h>
153
+ #include <ATen/ops/_embedding_bag_forward_only.h>
154
+ #include <ATen/ops/_embedding_bag_per_sample_weights_backward.h>
155
+ #include <ATen/ops/_embedding_bag_sparse_backward.h>
156
+ #include <ATen/ops/_empty_affine_quantized.h>
157
+ #include <ATen/ops/_empty_per_channel_affine_quantized.h>
158
+ #include <ATen/ops/_euclidean_dist.h>
159
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine.h>
160
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_backward.h>
161
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine.h>
162
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_backward.h>
163
+ #include <ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams.h>
164
+ #include <ATen/ops/_fft_c2c.h>
165
+ #include <ATen/ops/_fft_c2r.h>
166
+ #include <ATen/ops/_fft_r2c.h>
167
+ #include <ATen/ops/_fill_mem_eff_dropout_mask.h>
168
+ #include <ATen/ops/_flash_attention_backward.h>
169
+ #include <ATen/ops/_flash_attention_forward.h>
170
+ #include <ATen/ops/_foobar.h>
171
+ #include <ATen/ops/_foreach_abs.h>
172
+ #include <ATen/ops/_foreach_acos.h>
173
+ #include <ATen/ops/_foreach_add.h>
174
+ #include <ATen/ops/_foreach_addcdiv.h>
175
+ #include <ATen/ops/_foreach_addcmul.h>
176
+ #include <ATen/ops/_foreach_asin.h>
177
+ #include <ATen/ops/_foreach_atan.h>
178
+ #include <ATen/ops/_foreach_ceil.h>
179
+ #include <ATen/ops/_foreach_clamp_max.h>
180
+ #include <ATen/ops/_foreach_clamp_min.h>
181
+ #include <ATen/ops/_foreach_copy.h>
182
+ #include <ATen/ops/_foreach_cos.h>
183
+ #include <ATen/ops/_foreach_cosh.h>
184
+ #include <ATen/ops/_foreach_div.h>
185
+ #include <ATen/ops/_foreach_erf.h>
186
+ #include <ATen/ops/_foreach_erfc.h>
187
+ #include <ATen/ops/_foreach_exp.h>
188
+ #include <ATen/ops/_foreach_expm1.h>
189
+ #include <ATen/ops/_foreach_floor.h>
190
+ #include <ATen/ops/_foreach_frac.h>
191
+ #include <ATen/ops/_foreach_lerp.h>
192
+ #include <ATen/ops/_foreach_lgamma.h>
193
+ #include <ATen/ops/_foreach_log.h>
194
+ #include <ATen/ops/_foreach_log10.h>
195
+ #include <ATen/ops/_foreach_log1p.h>
196
+ #include <ATen/ops/_foreach_log2.h>
197
+ #include <ATen/ops/_foreach_max.h>
198
+ #include <ATen/ops/_foreach_maximum.h>
199
+ #include <ATen/ops/_foreach_minimum.h>
200
+ #include <ATen/ops/_foreach_mul.h>
201
+ #include <ATen/ops/_foreach_neg.h>
202
+ #include <ATen/ops/_foreach_norm.h>
203
+ #include <ATen/ops/_foreach_pow.h>
204
+ #include <ATen/ops/_foreach_reciprocal.h>
205
+ #include <ATen/ops/_foreach_round.h>
206
+ #include <ATen/ops/_foreach_rsqrt.h>
207
+ #include <ATen/ops/_foreach_sigmoid.h>
208
+ #include <ATen/ops/_foreach_sign.h>
209
+ #include <ATen/ops/_foreach_sin.h>
210
+ #include <ATen/ops/_foreach_sinh.h>
211
+ #include <ATen/ops/_foreach_sqrt.h>
212
+ #include <ATen/ops/_foreach_sub.h>
213
+ #include <ATen/ops/_foreach_tan.h>
214
+ #include <ATen/ops/_foreach_tanh.h>
215
+ #include <ATen/ops/_foreach_trunc.h>
216
+ #include <ATen/ops/_foreach_zero.h>
217
+ #include <ATen/ops/_functional_assert_async.h>
218
+ #include <ATen/ops/_functional_assert_scalar.h>
219
+ #include <ATen/ops/_functional_sym_constrain_range.h>
220
+ #include <ATen/ops/_functional_sym_constrain_range_for_size.h>
221
+ #include <ATen/ops/_fused_adagrad.h>
222
+ #include <ATen/ops/_fused_adam.h>
223
+ #include <ATen/ops/_fused_adamw.h>
224
+ #include <ATen/ops/_fused_dropout.h>
225
+ #include <ATen/ops/_fused_moving_avg_obs_fq_helper.h>
226
+ #include <ATen/ops/_fused_sdp_choice.h>
227
+ #include <ATen/ops/_fused_sgd.h>
228
+ #include <ATen/ops/_fw_primal.h>
229
+ #include <ATen/ops/_fw_primal_copy.h>
230
+ #include <ATen/ops/_gather_sparse_backward.h>
231
+ #include <ATen/ops/_grid_sampler_2d_cpu_fallback.h>
232
+ #include <ATen/ops/_grid_sampler_2d_cpu_fallback_backward.h>
233
+ #include <ATen/ops/_has_compatible_shallow_copy_type.h>
234
+ #include <ATen/ops/_has_same_storage_numel.h>
235
+ #include <ATen/ops/_histogramdd_bin_edges.h>
236
+ #include <ATen/ops/_histogramdd_from_bin_cts.h>
237
+ #include <ATen/ops/_histogramdd_from_bin_tensors.h>
238
+ #include <ATen/ops/_index_put_impl.h>
239
+ #include <ATen/ops/_indices.h>
240
+ #include <ATen/ops/_indices_copy.h>
241
+ #include <ATen/ops/_int_mm.h>
242
+ #include <ATen/ops/_is_all_true.h>
243
+ #include <ATen/ops/_is_any_true.h>
244
+ #include <ATen/ops/_is_zerotensor.h>
245
+ #include <ATen/ops/_jagged_to_padded_dense_forward.h>
246
+ #include <ATen/ops/_lazy_clone.h>
247
+ #include <ATen/ops/_linalg_check_errors.h>
248
+ #include <ATen/ops/_linalg_det.h>
249
+ #include <ATen/ops/_linalg_eigh.h>
250
+ #include <ATen/ops/_linalg_eigvals.h>
251
+ #include <ATen/ops/_linalg_slogdet.h>
252
+ #include <ATen/ops/_linalg_solve_ex.h>
253
+ #include <ATen/ops/_linalg_svd.h>
254
+ #include <ATen/ops/_local_scalar_dense.h>
255
+ #include <ATen/ops/_log_softmax.h>
256
+ #include <ATen/ops/_log_softmax_backward_data.h>
257
+ #include <ATen/ops/_logcumsumexp.h>
258
+ #include <ATen/ops/_lstm_mps.h>
259
+ #include <ATen/ops/_lu_with_info.h>
260
+ #include <ATen/ops/_make_dep_token.h>
261
+ #include <ATen/ops/_make_dual.h>
262
+ #include <ATen/ops/_make_dual_copy.h>
263
+ #include <ATen/ops/_make_per_channel_quantized_tensor.h>
264
+ #include <ATen/ops/_make_per_tensor_quantized_tensor.h>
265
+ #include <ATen/ops/_masked_scale.h>
266
+ #include <ATen/ops/_masked_softmax.h>
267
+ #include <ATen/ops/_masked_softmax_backward.h>
268
+ #include <ATen/ops/_mixed_dtypes_linear.h>
269
+ #include <ATen/ops/_mkldnn_reshape.h>
270
+ #include <ATen/ops/_mkldnn_transpose.h>
271
+ #include <ATen/ops/_mps_convolution.h>
272
+ #include <ATen/ops/_mps_convolution_transpose.h>
273
+ #include <ATen/ops/_native_batch_norm_legit.h>
274
+ #include <ATen/ops/_native_batch_norm_legit_no_training.h>
275
+ #include <ATen/ops/_native_multi_head_attention.h>
276
+ #include <ATen/ops/_neg_view.h>
277
+ #include <ATen/ops/_neg_view_copy.h>
278
+ #include <ATen/ops/_nested_compute_contiguous_strides_offsets.h>
279
+ #include <ATen/ops/_nested_from_padded.h>
280
+ #include <ATen/ops/_nested_from_padded_and_nested_example.h>
281
+ #include <ATen/ops/_nested_from_padded_tensor.h>
282
+ #include <ATen/ops/_nested_get_jagged_dummy.h>
283
+ #include <ATen/ops/_nested_get_lengths.h>
284
+ #include <ATen/ops/_nested_get_max_seqlen.h>
285
+ #include <ATen/ops/_nested_get_min_seqlen.h>
286
+ #include <ATen/ops/_nested_get_offsets.h>
287
+ #include <ATen/ops/_nested_get_ragged_idx.h>
288
+ #include <ATen/ops/_nested_get_values.h>
289
+ #include <ATen/ops/_nested_get_values_copy.h>
290
+ #include <ATen/ops/_nested_select_backward.h>
291
+ #include <ATen/ops/_nested_sum_backward.h>
292
+ #include <ATen/ops/_nested_tensor_from_mask.h>
293
+ #include <ATen/ops/_nested_tensor_from_mask_left_aligned.h>
294
+ #include <ATen/ops/_nested_tensor_from_tensor_list.h>
295
+ #include <ATen/ops/_nested_tensor_size.h>
296
+ #include <ATen/ops/_nested_tensor_softmax_with_shape.h>
297
+ #include <ATen/ops/_nested_tensor_storage_offsets.h>
298
+ #include <ATen/ops/_nested_tensor_strides.h>
299
+ #include <ATen/ops/_nested_view_from_buffer.h>
300
+ #include <ATen/ops/_nested_view_from_buffer_copy.h>
301
+ #include <ATen/ops/_nested_view_from_jagged.h>
302
+ #include <ATen/ops/_nested_view_from_jagged_copy.h>
303
+ #include <ATen/ops/_new_zeros_with_same_feature_meta.h>
304
+ #include <ATen/ops/_nnpack_available.h>
305
+ #include <ATen/ops/_nnpack_spatial_convolution.h>
306
+ #include <ATen/ops/_nnz.h>
307
+ #include <ATen/ops/_pack_padded_sequence.h>
308
+ #include <ATen/ops/_pack_padded_sequence_backward.h>
309
+ #include <ATen/ops/_pad_circular.h>
310
+ #include <ATen/ops/_pad_enum.h>
311
+ #include <ATen/ops/_pad_packed_sequence.h>
312
+ #include <ATen/ops/_padded_dense_to_jagged_forward.h>
313
+ #include <ATen/ops/_pdist_backward.h>
314
+ #include <ATen/ops/_pdist_forward.h>
315
+ #include <ATen/ops/_pin_memory.h>
316
+ #include <ATen/ops/_prelu_kernel.h>
317
+ #include <ATen/ops/_prelu_kernel_backward.h>
318
+ #include <ATen/ops/_print.h>
319
+ #include <ATen/ops/_propagate_xla_data.h>
320
+ #include <ATen/ops/_remove_batch_dim.h>
321
+ #include <ATen/ops/_reshape_alias.h>
322
+ #include <ATen/ops/_reshape_alias_copy.h>
323
+ #include <ATen/ops/_reshape_copy.h>
324
+ #include <ATen/ops/_reshape_from_tensor.h>
325
+ #include <ATen/ops/_resize_output.h>
326
+ #include <ATen/ops/_rowwise_prune.h>
327
+ #include <ATen/ops/_safe_softmax.h>
328
+ #include <ATen/ops/_sample_dirichlet.h>
329
+ #include <ATen/ops/_saturate_weight_to_fp16.h>
330
+ #include <ATen/ops/_scaled_dot_product_attention_math.h>
331
+ #include <ATen/ops/_scaled_dot_product_attention_math_for_mps.h>
332
+ #include <ATen/ops/_scaled_dot_product_cudnn_attention.h>
333
+ #include <ATen/ops/_scaled_dot_product_cudnn_attention_backward.h>
334
+ #include <ATen/ops/_scaled_dot_product_efficient_attention.h>
335
+ #include <ATen/ops/_scaled_dot_product_efficient_attention_backward.h>
336
+ #include <ATen/ops/_scaled_dot_product_flash_attention.h>
337
+ #include <ATen/ops/_scaled_dot_product_flash_attention_backward.h>
338
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu.h>
339
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_backward.h>
340
+ #include <ATen/ops/_scaled_dot_product_fused_attention_overrideable.h>
341
+ #include <ATen/ops/_scaled_dot_product_fused_attention_overrideable_backward.h>
342
+ #include <ATen/ops/_scaled_mm.h>
343
+ #include <ATen/ops/_segment_reduce_backward.h>
344
+ #include <ATen/ops/_shape_as_tensor.h>
345
+ #include <ATen/ops/_slow_conv2d_backward.h>
346
+ #include <ATen/ops/_slow_conv2d_forward.h>
347
+ #include <ATen/ops/_sobol_engine_draw.h>
348
+ #include <ATen/ops/_sobol_engine_ff.h>
349
+ #include <ATen/ops/_sobol_engine_initialize_state.h>
350
+ #include <ATen/ops/_sobol_engine_scramble.h>
351
+ #include <ATen/ops/_softmax.h>
352
+ #include <ATen/ops/_softmax_backward_data.h>
353
+ #include <ATen/ops/_sparse_addmm.h>
354
+ #include <ATen/ops/_sparse_broadcast_to.h>
355
+ #include <ATen/ops/_sparse_broadcast_to_copy.h>
356
+ #include <ATen/ops/_sparse_bsc_tensor_unsafe.h>
357
+ #include <ATen/ops/_sparse_bsr_tensor_unsafe.h>
358
+ #include <ATen/ops/_sparse_compressed_tensor_unsafe.h>
359
+ #include <ATen/ops/_sparse_compressed_tensor_with_dims.h>
360
+ #include <ATen/ops/_sparse_coo_tensor_unsafe.h>
361
+ #include <ATen/ops/_sparse_coo_tensor_with_dims.h>
362
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_and_tensors.h>
363
+ #include <ATen/ops/_sparse_csc_tensor_unsafe.h>
364
+ #include <ATen/ops/_sparse_csr_prod.h>
365
+ #include <ATen/ops/_sparse_csr_sum.h>
366
+ #include <ATen/ops/_sparse_csr_tensor_unsafe.h>
367
+ #include <ATen/ops/_sparse_log_softmax.h>
368
+ #include <ATen/ops/_sparse_log_softmax_backward_data.h>
369
+ #include <ATen/ops/_sparse_mask_projection.h>
370
+ #include <ATen/ops/_sparse_mm.h>
371
+ #include <ATen/ops/_sparse_mm_reduce_impl.h>
372
+ #include <ATen/ops/_sparse_mm_reduce_impl_backward.h>
373
+ #include <ATen/ops/_sparse_semi_structured_addmm.h>
374
+ #include <ATen/ops/_sparse_semi_structured_apply.h>
375
+ #include <ATen/ops/_sparse_semi_structured_apply_dense.h>
376
+ #include <ATen/ops/_sparse_semi_structured_linear.h>
377
+ #include <ATen/ops/_sparse_semi_structured_mm.h>
378
+ #include <ATen/ops/_sparse_semi_structured_tile.h>
379
+ #include <ATen/ops/_sparse_softmax.h>
380
+ #include <ATen/ops/_sparse_softmax_backward_data.h>
381
+ #include <ATen/ops/_sparse_sparse_matmul.h>
382
+ #include <ATen/ops/_sparse_sum.h>
383
+ #include <ATen/ops/_sparse_sum_backward.h>
384
+ #include <ATen/ops/_spdiags.h>
385
+ #include <ATen/ops/_spsolve.h>
386
+ #include <ATen/ops/_stack.h>
387
+ #include <ATen/ops/_standard_gamma.h>
388
+ #include <ATen/ops/_standard_gamma_grad.h>
389
+ #include <ATen/ops/_test_ambiguous_defaults.h>
390
+ #include <ATen/ops/_test_autograd_multiple_dispatch.h>
391
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view.h>
392
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view_copy.h>
393
+ #include <ATen/ops/_test_check_tensor.h>
394
+ #include <ATen/ops/_test_functorch_fallback.h>
395
+ #include <ATen/ops/_test_optional_filled_intlist.h>
396
+ #include <ATen/ops/_test_optional_floatlist.h>
397
+ #include <ATen/ops/_test_optional_intlist.h>
398
+ #include <ATen/ops/_test_parallel_materialize.h>
399
+ #include <ATen/ops/_test_serialization_subcmul.h>
400
+ #include <ATen/ops/_test_string_default.h>
401
+ #include <ATen/ops/_test_warn_in_autograd.h>
402
+ #include <ATen/ops/_thnn_differentiable_gru_cell_backward.h>
403
+ #include <ATen/ops/_thnn_differentiable_lstm_cell_backward.h>
404
+ #include <ATen/ops/_thnn_fused_gru_cell.h>
405
+ #include <ATen/ops/_thnn_fused_gru_cell_backward.h>
406
+ #include <ATen/ops/_thnn_fused_lstm_cell.h>
407
+ #include <ATen/ops/_thnn_fused_lstm_cell_backward.h>
408
+ #include <ATen/ops/_thnn_fused_lstm_cell_backward_impl.h>
409
+ #include <ATen/ops/_to_copy.h>
410
+ #include <ATen/ops/_to_cpu.h>
411
+ #include <ATen/ops/_to_dense.h>
412
+ #include <ATen/ops/_to_sparse.h>
413
+ #include <ATen/ops/_to_sparse_bsc.h>
414
+ #include <ATen/ops/_to_sparse_bsr.h>
415
+ #include <ATen/ops/_to_sparse_csc.h>
416
+ #include <ATen/ops/_to_sparse_csr.h>
417
+ #include <ATen/ops/_to_sparse_semi_structured.h>
418
+ #include <ATen/ops/_transform_bias_rescale_qkv.h>
419
+ #include <ATen/ops/_transformer_encoder_layer_fwd.h>
420
+ #include <ATen/ops/_trilinear.h>
421
+ #include <ATen/ops/_triton_multi_head_attention.h>
422
+ #include <ATen/ops/_triton_scaled_dot_attention.h>
423
+ #include <ATen/ops/_unique.h>
424
+ #include <ATen/ops/_unique2.h>
425
+ #include <ATen/ops/_unpack_dual.h>
426
+ #include <ATen/ops/_unsafe_index.h>
427
+ #include <ATen/ops/_unsafe_index_put.h>
428
+ #include <ATen/ops/_unsafe_masked_index.h>
429
+ #include <ATen/ops/_unsafe_masked_index_put_accumulate.h>
430
+ #include <ATen/ops/_unsafe_view.h>
431
+ #include <ATen/ops/_upsample_bicubic2d_aa.h>
432
+ #include <ATen/ops/_upsample_bicubic2d_aa_backward.h>
433
+ #include <ATen/ops/_upsample_bilinear2d_aa.h>
434
+ #include <ATen/ops/_upsample_bilinear2d_aa_backward.h>
435
+ #include <ATen/ops/_upsample_nearest_exact1d.h>
436
+ #include <ATen/ops/_upsample_nearest_exact1d_backward.h>
437
+ #include <ATen/ops/_upsample_nearest_exact2d.h>
438
+ #include <ATen/ops/_upsample_nearest_exact2d_backward.h>
439
+ #include <ATen/ops/_upsample_nearest_exact3d.h>
440
+ #include <ATen/ops/_upsample_nearest_exact3d_backward.h>
441
+ #include <ATen/ops/_use_cudnn_ctc_loss.h>
442
+ #include <ATen/ops/_use_cudnn_rnn_flatten_weight.h>
443
+ #include <ATen/ops/_validate_compressed_sparse_indices.h>
444
+ #include <ATen/ops/_validate_sparse_bsc_tensor_args.h>
445
+ #include <ATen/ops/_validate_sparse_bsr_tensor_args.h>
446
+ #include <ATen/ops/_validate_sparse_compressed_tensor_args.h>
447
+ #include <ATen/ops/_validate_sparse_coo_tensor_args.h>
448
+ #include <ATen/ops/_validate_sparse_csc_tensor_args.h>
449
+ #include <ATen/ops/_validate_sparse_csr_tensor_args.h>
450
+ #include <ATen/ops/_values.h>
451
+ #include <ATen/ops/_values_copy.h>
452
+ #include <ATen/ops/_version.h>
453
+ #include <ATen/ops/_weight_int4pack_mm.h>
454
+ #include <ATen/ops/_weight_int4pack_mm_for_cpu.h>
455
+ #include <ATen/ops/_weight_int8pack_mm.h>
456
+ #include <ATen/ops/_weight_norm.h>
457
+ #include <ATen/ops/_weight_norm_differentiable_backward.h>
458
+ #include <ATen/ops/_weight_norm_interface.h>
459
+ #include <ATen/ops/_weight_norm_interface_backward.h>
460
+ #include <ATen/ops/_wrapped_linear_prepack.h>
461
+ #include <ATen/ops/_wrapped_quantized_linear_prepacked.h>
462
+ #include <ATen/ops/abs.h>
463
+ #include <ATen/ops/absolute.h>
464
+ #include <ATen/ops/acos.h>
465
+ #include <ATen/ops/acosh.h>
466
+ #include <ATen/ops/adaptive_avg_pool1d.h>
467
+ #include <ATen/ops/adaptive_avg_pool2d.h>
468
+ #include <ATen/ops/adaptive_avg_pool3d.h>
469
+ #include <ATen/ops/adaptive_avg_pool3d_backward.h>
470
+ #include <ATen/ops/adaptive_max_pool1d.h>
471
+ #include <ATen/ops/adaptive_max_pool2d.h>
472
+ #include <ATen/ops/adaptive_max_pool2d_backward.h>
473
+ #include <ATen/ops/adaptive_max_pool3d.h>
474
+ #include <ATen/ops/adaptive_max_pool3d_backward.h>
475
+ #include <ATen/ops/add.h>
476
+ #include <ATen/ops/addbmm.h>
477
+ #include <ATen/ops/addcdiv.h>
478
+ #include <ATen/ops/addcmul.h>
479
+ #include <ATen/ops/addmm.h>
480
+ #include <ATen/ops/addmv.h>
481
+ #include <ATen/ops/addr.h>
482
+ #include <ATen/ops/adjoint.h>
483
+ #include <ATen/ops/affine_grid_generator.h>
484
+ #include <ATen/ops/affine_grid_generator_backward.h>
485
+ #include <ATen/ops/alias.h>
486
+ #include <ATen/ops/alias_copy.h>
487
+ #include <ATen/ops/align_as.h>
488
+ #include <ATen/ops/align_tensors.h>
489
+ #include <ATen/ops/align_to.h>
490
+ #include <ATen/ops/all.h>
491
+ #include <ATen/ops/allclose.h>
492
+ #include <ATen/ops/alpha_dropout.h>
493
+ #include <ATen/ops/amax.h>
494
+ #include <ATen/ops/amin.h>
495
+ #include <ATen/ops/aminmax.h>
496
+ #include <ATen/ops/and.h>
497
+ #include <ATen/ops/angle.h>
498
+ #include <ATen/ops/any.h>
499
+ #include <ATen/ops/arange.h>
500
+ #include <ATen/ops/arccos.h>
501
+ #include <ATen/ops/arccosh.h>
502
+ #include <ATen/ops/arcsin.h>
503
+ #include <ATen/ops/arcsinh.h>
504
+ #include <ATen/ops/arctan.h>
505
+ #include <ATen/ops/arctan2.h>
506
+ #include <ATen/ops/arctanh.h>
507
+ #include <ATen/ops/argmax.h>
508
+ #include <ATen/ops/argmin.h>
509
+ #include <ATen/ops/argsort.h>
510
+ #include <ATen/ops/argwhere.h>
511
+ #include <ATen/ops/as_strided.h>
512
+ #include <ATen/ops/as_strided_copy.h>
513
+ #include <ATen/ops/as_strided_scatter.h>
514
+ #include <ATen/ops/asin.h>
515
+ #include <ATen/ops/asinh.h>
516
+ #include <ATen/ops/atan.h>
517
+ #include <ATen/ops/atan2.h>
518
+ #include <ATen/ops/atanh.h>
519
+ #include <ATen/ops/atleast_1d.h>
520
+ #include <ATen/ops/atleast_2d.h>
521
+ #include <ATen/ops/atleast_3d.h>
522
+ #include <ATen/ops/avg_pool1d.h>
523
+ #include <ATen/ops/avg_pool2d.h>
524
+ #include <ATen/ops/avg_pool2d_backward.h>
525
+ #include <ATen/ops/avg_pool3d.h>
526
+ #include <ATen/ops/avg_pool3d_backward.h>
527
+ #include <ATen/ops/baddbmm.h>
528
+ #include <ATen/ops/bartlett_window.h>
529
+ #include <ATen/ops/batch_norm.h>
530
+ #include <ATen/ops/batch_norm_backward.h>
531
+ #include <ATen/ops/batch_norm_backward_elemt.h>
532
+ #include <ATen/ops/batch_norm_backward_reduce.h>
533
+ #include <ATen/ops/batch_norm_elemt.h>
534
+ #include <ATen/ops/batch_norm_gather_stats.h>
535
+ #include <ATen/ops/batch_norm_gather_stats_with_counts.h>
536
+ #include <ATen/ops/batch_norm_stats.h>
537
+ #include <ATen/ops/batch_norm_update_stats.h>
538
+ #include <ATen/ops/bernoulli.h>
539
+ #include <ATen/ops/bilinear.h>
540
+ #include <ATen/ops/binary_cross_entropy.h>
541
+ #include <ATen/ops/binary_cross_entropy_backward.h>
542
+ #include <ATen/ops/binary_cross_entropy_with_logits.h>
543
+ #include <ATen/ops/bincount.h>
544
+ #include <ATen/ops/binomial.h>
545
+ #include <ATen/ops/bitwise_and.h>
546
+ #include <ATen/ops/bitwise_left_shift.h>
547
+ #include <ATen/ops/bitwise_not.h>
548
+ #include <ATen/ops/bitwise_or.h>
549
+ #include <ATen/ops/bitwise_right_shift.h>
550
+ #include <ATen/ops/bitwise_xor.h>
551
+ #include <ATen/ops/blackman_window.h>
552
+ #include <ATen/ops/block_diag.h>
553
+ #include <ATen/ops/bmm.h>
554
+ #include <ATen/ops/broadcast_tensors.h>
555
+ #include <ATen/ops/broadcast_to.h>
556
+ #include <ATen/ops/bucketize.h>
557
+ #include <ATen/ops/can_cast.h>
558
+ #include <ATen/ops/cartesian_prod.h>
559
+ #include <ATen/ops/cat.h>
560
+ #include <ATen/ops/cauchy.h>
561
+ #include <ATen/ops/ccol_indices.h>
562
+ #include <ATen/ops/ccol_indices_copy.h>
563
+ #include <ATen/ops/cdist.h>
564
+ #include <ATen/ops/ceil.h>
565
+ #include <ATen/ops/celu.h>
566
+ #include <ATen/ops/chain_matmul.h>
567
+ #include <ATen/ops/chalf.h>
568
+ #include <ATen/ops/channel_shuffle.h>
569
+ #include <ATen/ops/cholesky.h>
570
+ #include <ATen/ops/cholesky_inverse.h>
571
+ #include <ATen/ops/cholesky_solve.h>
572
+ #include <ATen/ops/choose_qparams_optimized.h>
573
+ #include <ATen/ops/chunk.h>
574
+ #include <ATen/ops/clamp.h>
575
+ #include <ATen/ops/clamp_max.h>
576
+ #include <ATen/ops/clamp_min.h>
577
+ #include <ATen/ops/clip.h>
578
+ #include <ATen/ops/clone.h>
579
+ #include <ATen/ops/coalesce.h>
580
+ #include <ATen/ops/col2im.h>
581
+ #include <ATen/ops/col_indices.h>
582
+ #include <ATen/ops/col_indices_copy.h>
583
+ #include <ATen/ops/column_stack.h>
584
+ #include <ATen/ops/combinations.h>
585
+ #include <ATen/ops/complex.h>
586
+ #include <ATen/ops/concat.h>
587
+ #include <ATen/ops/concatenate.h>
588
+ #include <ATen/ops/conj.h>
589
+ #include <ATen/ops/conj_physical.h>
590
+ #include <ATen/ops/constant_pad_nd.h>
591
+ #include <ATen/ops/contiguous.h>
592
+ #include <ATen/ops/conv1d.h>
593
+ #include <ATen/ops/conv2d.h>
594
+ #include <ATen/ops/conv3d.h>
595
+ #include <ATen/ops/conv_depthwise3d.h>
596
+ #include <ATen/ops/conv_tbc.h>
597
+ #include <ATen/ops/conv_tbc_backward.h>
598
+ #include <ATen/ops/conv_transpose1d.h>
599
+ #include <ATen/ops/conv_transpose2d.h>
600
+ #include <ATen/ops/conv_transpose3d.h>
601
+ #include <ATen/ops/convolution.h>
602
+ #include <ATen/ops/convolution_backward.h>
603
+ #include <ATen/ops/convolution_backward_overrideable.h>
604
+ #include <ATen/ops/convolution_overrideable.h>
605
+ #include <ATen/ops/copy.h>
606
+ #include <ATen/ops/copy_sparse_to_sparse.h>
607
+ #include <ATen/ops/copysign.h>
608
+ #include <ATen/ops/corrcoef.h>
609
+ #include <ATen/ops/cos.h>
610
+ #include <ATen/ops/cosh.h>
611
+ #include <ATen/ops/cosine_embedding_loss.h>
612
+ #include <ATen/ops/cosine_similarity.h>
613
+ #include <ATen/ops/count_nonzero.h>
614
+ #include <ATen/ops/cov.h>
615
+ #include <ATen/ops/cross.h>
616
+ #include <ATen/ops/cross_entropy_loss.h>
617
+ #include <ATen/ops/crow_indices.h>
618
+ #include <ATen/ops/crow_indices_copy.h>
619
+ #include <ATen/ops/ctc_loss.h>
620
+ #include <ATen/ops/cudnn_affine_grid_generator.h>
621
+ #include <ATen/ops/cudnn_affine_grid_generator_backward.h>
622
+ #include <ATen/ops/cudnn_batch_norm.h>
623
+ #include <ATen/ops/cudnn_batch_norm_backward.h>
624
+ #include <ATen/ops/cudnn_convolution.h>
625
+ #include <ATen/ops/cudnn_convolution_add_relu.h>
626
+ #include <ATen/ops/cudnn_convolution_relu.h>
627
+ #include <ATen/ops/cudnn_convolution_transpose.h>
628
+ #include <ATen/ops/cudnn_grid_sampler.h>
629
+ #include <ATen/ops/cudnn_grid_sampler_backward.h>
630
+ #include <ATen/ops/cudnn_is_acceptable.h>
631
+ #include <ATen/ops/cummax.h>
632
+ #include <ATen/ops/cummaxmin_backward.h>
633
+ #include <ATen/ops/cummin.h>
634
+ #include <ATen/ops/cumprod.h>
635
+ #include <ATen/ops/cumprod_backward.h>
636
+ #include <ATen/ops/cumsum.h>
637
+ #include <ATen/ops/cumulative_trapezoid.h>
638
+ #include <ATen/ops/data.h>
639
+ #include <ATen/ops/deg2rad.h>
640
+ #include <ATen/ops/dense_dim.h>
641
+ #include <ATen/ops/dequantize.h>
642
+ #include <ATen/ops/det.h>
643
+ #include <ATen/ops/detach.h>
644
+ #include <ATen/ops/detach_copy.h>
645
+ #include <ATen/ops/diag.h>
646
+ #include <ATen/ops/diag_embed.h>
647
+ #include <ATen/ops/diagflat.h>
648
+ #include <ATen/ops/diagonal.h>
649
+ #include <ATen/ops/diagonal_backward.h>
650
+ #include <ATen/ops/diagonal_copy.h>
651
+ #include <ATen/ops/diagonal_scatter.h>
652
+ #include <ATen/ops/diff.h>
653
+ #include <ATen/ops/digamma.h>
654
+ #include <ATen/ops/dist.h>
655
+ #include <ATen/ops/div.h>
656
+ #include <ATen/ops/divide.h>
657
+ #include <ATen/ops/dot.h>
658
+ #include <ATen/ops/dropout.h>
659
+ #include <ATen/ops/dsplit.h>
660
+ #include <ATen/ops/dstack.h>
661
+ #include <ATen/ops/einsum.h>
662
+ #include <ATen/ops/elu.h>
663
+ #include <ATen/ops/elu_backward.h>
664
+ #include <ATen/ops/embedding.h>
665
+ #include <ATen/ops/embedding_backward.h>
666
+ #include <ATen/ops/embedding_bag.h>
667
+ #include <ATen/ops/embedding_dense_backward.h>
668
+ #include <ATen/ops/embedding_renorm.h>
669
+ #include <ATen/ops/embedding_sparse_backward.h>
670
+ #include <ATen/ops/empty.h>
671
+ #include <ATen/ops/empty_like.h>
672
+ #include <ATen/ops/empty_permuted.h>
673
+ #include <ATen/ops/empty_quantized.h>
674
+ #include <ATen/ops/empty_strided.h>
675
+ #include <ATen/ops/eq.h>
676
+ #include <ATen/ops/equal.h>
677
+ #include <ATen/ops/erf.h>
678
+ #include <ATen/ops/erfc.h>
679
+ #include <ATen/ops/erfinv.h>
680
+ #include <ATen/ops/exp.h>
681
+ #include <ATen/ops/exp2.h>
682
+ #include <ATen/ops/expand.h>
683
+ #include <ATen/ops/expand_as.h>
684
+ #include <ATen/ops/expand_copy.h>
685
+ #include <ATen/ops/expm1.h>
686
+ #include <ATen/ops/exponential.h>
687
+ #include <ATen/ops/eye.h>
688
+ #include <ATen/ops/fake_quantize_per_channel_affine.h>
689
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask.h>
690
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_backward.h>
691
+ #include <ATen/ops/fake_quantize_per_tensor_affine.h>
692
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask.h>
693
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_backward.h>
694
+ #include <ATen/ops/fbgemm_linear_fp16_weight.h>
695
+ #include <ATen/ops/fbgemm_linear_fp16_weight_fp32_activation.h>
696
+ #include <ATen/ops/fbgemm_linear_int8_weight.h>
697
+ #include <ATen/ops/fbgemm_linear_int8_weight_fp32_activation.h>
698
+ #include <ATen/ops/fbgemm_linear_quantize_weight.h>
699
+ #include <ATen/ops/fbgemm_pack_gemm_matrix_fp16.h>
700
+ #include <ATen/ops/fbgemm_pack_quantized_matrix.h>
701
+ #include <ATen/ops/feature_alpha_dropout.h>
702
+ #include <ATen/ops/feature_dropout.h>
703
+ #include <ATen/ops/fft_fft.h>
704
+ #include <ATen/ops/fft_fft2.h>
705
+ #include <ATen/ops/fft_fftfreq.h>
706
+ #include <ATen/ops/fft_fftn.h>
707
+ #include <ATen/ops/fft_fftshift.h>
708
+ #include <ATen/ops/fft_hfft.h>
709
+ #include <ATen/ops/fft_hfft2.h>
710
+ #include <ATen/ops/fft_hfftn.h>
711
+ #include <ATen/ops/fft_ifft.h>
712
+ #include <ATen/ops/fft_ifft2.h>
713
+ #include <ATen/ops/fft_ifftn.h>
714
+ #include <ATen/ops/fft_ifftshift.h>
715
+ #include <ATen/ops/fft_ihfft.h>
716
+ #include <ATen/ops/fft_ihfft2.h>
717
+ #include <ATen/ops/fft_ihfftn.h>
718
+ #include <ATen/ops/fft_irfft.h>
719
+ #include <ATen/ops/fft_irfft2.h>
720
+ #include <ATen/ops/fft_irfftn.h>
721
+ #include <ATen/ops/fft_rfft.h>
722
+ #include <ATen/ops/fft_rfft2.h>
723
+ #include <ATen/ops/fft_rfftfreq.h>
724
+ #include <ATen/ops/fft_rfftn.h>
725
+ #include <ATen/ops/fill.h>
726
+ #include <ATen/ops/fill_diagonal.h>
727
+ #include <ATen/ops/fix.h>
728
+ #include <ATen/ops/flatten.h>
729
+ #include <ATen/ops/flatten_dense_tensors.h>
730
+ #include <ATen/ops/flip.h>
731
+ #include <ATen/ops/fliplr.h>
732
+ #include <ATen/ops/flipud.h>
733
+ #include <ATen/ops/float_power.h>
734
+ #include <ATen/ops/floor.h>
735
+ #include <ATen/ops/floor_divide.h>
736
+ #include <ATen/ops/fmax.h>
737
+ #include <ATen/ops/fmin.h>
738
+ #include <ATen/ops/fmod.h>
739
+ #include <ATen/ops/frac.h>
740
+ #include <ATen/ops/fractional_max_pool2d.h>
741
+ #include <ATen/ops/fractional_max_pool2d_backward.h>
742
+ #include <ATen/ops/fractional_max_pool3d.h>
743
+ #include <ATen/ops/fractional_max_pool3d_backward.h>
744
+ #include <ATen/ops/frexp.h>
745
+ #include <ATen/ops/frobenius_norm.h>
746
+ #include <ATen/ops/from_file.h>
747
+ #include <ATen/ops/full.h>
748
+ #include <ATen/ops/full_like.h>
749
+ #include <ATen/ops/fused_moving_avg_obs_fake_quant.h>
750
+ #include <ATen/ops/gather.h>
751
+ #include <ATen/ops/gather_backward.h>
752
+ #include <ATen/ops/gcd.h>
753
+ #include <ATen/ops/ge.h>
754
+ #include <ATen/ops/gelu.h>
755
+ #include <ATen/ops/gelu_backward.h>
756
+ #include <ATen/ops/geometric.h>
757
+ #include <ATen/ops/geqrf.h>
758
+ #include <ATen/ops/ger.h>
759
+ #include <ATen/ops/glu.h>
760
+ #include <ATen/ops/glu_backward.h>
761
+ #include <ATen/ops/glu_backward_jvp.h>
762
+ #include <ATen/ops/glu_jvp.h>
763
+ #include <ATen/ops/gradient.h>
764
+ #include <ATen/ops/greater.h>
765
+ #include <ATen/ops/greater_equal.h>
766
+ #include <ATen/ops/grid_sampler.h>
767
+ #include <ATen/ops/grid_sampler_2d.h>
768
+ #include <ATen/ops/grid_sampler_2d_backward.h>
769
+ #include <ATen/ops/grid_sampler_3d.h>
770
+ #include <ATen/ops/grid_sampler_3d_backward.h>
771
+ #include <ATen/ops/group_norm.h>
772
+ #include <ATen/ops/gru.h>
773
+ #include <ATen/ops/gru_cell.h>
774
+ #include <ATen/ops/gt.h>
775
+ #include <ATen/ops/hamming_window.h>
776
+ #include <ATen/ops/hann_window.h>
777
+ #include <ATen/ops/hardshrink.h>
778
+ #include <ATen/ops/hardshrink_backward.h>
779
+ #include <ATen/ops/hardsigmoid.h>
780
+ #include <ATen/ops/hardsigmoid_backward.h>
781
+ #include <ATen/ops/hardswish.h>
782
+ #include <ATen/ops/hardswish_backward.h>
783
+ #include <ATen/ops/hardtanh.h>
784
+ #include <ATen/ops/hardtanh_backward.h>
785
+ #include <ATen/ops/heaviside.h>
786
+ #include <ATen/ops/hinge_embedding_loss.h>
787
+ #include <ATen/ops/histc.h>
788
+ #include <ATen/ops/histogram.h>
789
+ #include <ATen/ops/histogramdd.h>
790
+ #include <ATen/ops/hsplit.h>
791
+ #include <ATen/ops/hspmm.h>
792
+ #include <ATen/ops/hstack.h>
793
+ #include <ATen/ops/huber_loss.h>
794
+ #include <ATen/ops/huber_loss_backward.h>
795
+ #include <ATen/ops/hypot.h>
796
+ #include <ATen/ops/i0.h>
797
+ #include <ATen/ops/igamma.h>
798
+ #include <ATen/ops/igammac.h>
799
+ #include <ATen/ops/im2col.h>
800
+ #include <ATen/ops/imag.h>
801
+ #include <ATen/ops/index.h>
802
+ #include <ATen/ops/index_add.h>
803
+ #include <ATen/ops/index_copy.h>
804
+ #include <ATen/ops/index_fill.h>
805
+ #include <ATen/ops/index_put.h>
806
+ #include <ATen/ops/index_reduce.h>
807
+ #include <ATen/ops/index_select.h>
808
+ #include <ATen/ops/index_select_backward.h>
809
+ #include <ATen/ops/indices.h>
810
+ #include <ATen/ops/indices_copy.h>
811
+ #include <ATen/ops/infinitely_differentiable_gelu_backward.h>
812
+ #include <ATen/ops/inner.h>
813
+ #include <ATen/ops/instance_norm.h>
814
+ #include <ATen/ops/int_repr.h>
815
+ #include <ATen/ops/inverse.h>
816
+ #include <ATen/ops/is_coalesced.h>
817
+ #include <ATen/ops/is_complex.h>
818
+ #include <ATen/ops/is_conj.h>
819
+ #include <ATen/ops/is_distributed.h>
820
+ #include <ATen/ops/is_floating_point.h>
821
+ #include <ATen/ops/is_inference.h>
822
+ #include <ATen/ops/is_leaf.h>
823
+ #include <ATen/ops/is_neg.h>
824
+ #include <ATen/ops/is_nonzero.h>
825
+ #include <ATen/ops/is_pinned.h>
826
+ #include <ATen/ops/is_same_size.h>
827
+ #include <ATen/ops/is_set_to.h>
828
+ #include <ATen/ops/is_signed.h>
829
+ #include <ATen/ops/is_vulkan_available.h>
830
+ #include <ATen/ops/isclose.h>
831
+ #include <ATen/ops/isfinite.h>
832
+ #include <ATen/ops/isin.h>
833
+ #include <ATen/ops/isinf.h>
834
+ #include <ATen/ops/isnan.h>
835
+ #include <ATen/ops/isneginf.h>
836
+ #include <ATen/ops/isposinf.h>
837
+ #include <ATen/ops/isreal.h>
838
+ #include <ATen/ops/istft.h>
839
+ #include <ATen/ops/item.h>
840
+ #include <ATen/ops/kaiser_window.h>
841
+ #include <ATen/ops/kl_div.h>
842
+ #include <ATen/ops/kron.h>
843
+ #include <ATen/ops/kthvalue.h>
844
+ #include <ATen/ops/l1_loss.h>
845
+ #include <ATen/ops/layer_norm.h>
846
+ #include <ATen/ops/lcm.h>
847
+ #include <ATen/ops/ldexp.h>
848
+ #include <ATen/ops/le.h>
849
+ #include <ATen/ops/leaky_relu.h>
850
+ #include <ATen/ops/leaky_relu_backward.h>
851
+ #include <ATen/ops/lerp.h>
852
+ #include <ATen/ops/less.h>
853
+ #include <ATen/ops/less_equal.h>
854
+ #include <ATen/ops/lgamma.h>
855
+ #include <ATen/ops/lift.h>
856
+ #include <ATen/ops/lift_fresh.h>
857
+ #include <ATen/ops/lift_fresh_copy.h>
858
+ #include <ATen/ops/linalg_cholesky.h>
859
+ #include <ATen/ops/linalg_cholesky_ex.h>
860
+ #include <ATen/ops/linalg_cond.h>
861
+ #include <ATen/ops/linalg_cross.h>
862
+ #include <ATen/ops/linalg_det.h>
863
+ #include <ATen/ops/linalg_diagonal.h>
864
+ #include <ATen/ops/linalg_eig.h>
865
+ #include <ATen/ops/linalg_eigh.h>
866
+ #include <ATen/ops/linalg_eigvals.h>
867
+ #include <ATen/ops/linalg_eigvalsh.h>
868
+ #include <ATen/ops/linalg_householder_product.h>
869
+ #include <ATen/ops/linalg_inv.h>
870
+ #include <ATen/ops/linalg_inv_ex.h>
871
+ #include <ATen/ops/linalg_ldl_factor.h>
872
+ #include <ATen/ops/linalg_ldl_factor_ex.h>
873
+ #include <ATen/ops/linalg_ldl_solve.h>
874
+ #include <ATen/ops/linalg_lstsq.h>
875
+ #include <ATen/ops/linalg_lu.h>
876
+ #include <ATen/ops/linalg_lu_factor.h>
877
+ #include <ATen/ops/linalg_lu_factor_ex.h>
878
+ #include <ATen/ops/linalg_lu_solve.h>
879
+ #include <ATen/ops/linalg_matmul.h>
880
+ #include <ATen/ops/linalg_matrix_exp.h>
881
+ #include <ATen/ops/linalg_matrix_norm.h>
882
+ #include <ATen/ops/linalg_matrix_power.h>
883
+ #include <ATen/ops/linalg_matrix_rank.h>
884
+ #include <ATen/ops/linalg_multi_dot.h>
885
+ #include <ATen/ops/linalg_norm.h>
886
+ #include <ATen/ops/linalg_pinv.h>
887
+ #include <ATen/ops/linalg_qr.h>
888
+ #include <ATen/ops/linalg_slogdet.h>
889
+ #include <ATen/ops/linalg_solve.h>
890
+ #include <ATen/ops/linalg_solve_ex.h>
891
+ #include <ATen/ops/linalg_solve_triangular.h>
892
+ #include <ATen/ops/linalg_svd.h>
893
+ #include <ATen/ops/linalg_svdvals.h>
894
+ #include <ATen/ops/linalg_tensorinv.h>
895
+ #include <ATen/ops/linalg_tensorsolve.h>
896
+ #include <ATen/ops/linalg_vander.h>
897
+ #include <ATen/ops/linalg_vecdot.h>
898
+ #include <ATen/ops/linalg_vector_norm.h>
899
+ #include <ATen/ops/linear.h>
900
+ #include <ATen/ops/linear_backward.h>
901
+ #include <ATen/ops/linspace.h>
902
+ #include <ATen/ops/log.h>
903
+ #include <ATen/ops/log10.h>
904
+ #include <ATen/ops/log1p.h>
905
+ #include <ATen/ops/log2.h>
906
+ #include <ATen/ops/log_normal.h>
907
+ #include <ATen/ops/log_sigmoid.h>
908
+ #include <ATen/ops/log_sigmoid_backward.h>
909
+ #include <ATen/ops/log_sigmoid_forward.h>
910
+ #include <ATen/ops/log_softmax.h>
911
+ #include <ATen/ops/logaddexp.h>
912
+ #include <ATen/ops/logaddexp2.h>
913
+ #include <ATen/ops/logcumsumexp.h>
914
+ #include <ATen/ops/logdet.h>
915
+ #include <ATen/ops/logical_and.h>
916
+ #include <ATen/ops/logical_not.h>
917
+ #include <ATen/ops/logical_or.h>
918
+ #include <ATen/ops/logical_xor.h>
919
+ #include <ATen/ops/logit.h>
920
+ #include <ATen/ops/logit_backward.h>
921
+ #include <ATen/ops/logspace.h>
922
+ #include <ATen/ops/logsumexp.h>
923
+ #include <ATen/ops/lshift.h>
924
+ #include <ATen/ops/lstm.h>
925
+ #include <ATen/ops/lstm_cell.h>
926
+ #include <ATen/ops/lstm_mps_backward.h>
927
+ #include <ATen/ops/lt.h>
928
+ #include <ATen/ops/lu_solve.h>
929
+ #include <ATen/ops/lu_unpack.h>
930
+ #include <ATen/ops/mH.h>
931
+ #include <ATen/ops/mT.h>
932
+ #include <ATen/ops/margin_ranking_loss.h>
933
+ #include <ATen/ops/masked_fill.h>
934
+ #include <ATen/ops/masked_scatter.h>
935
+ #include <ATen/ops/masked_scatter_backward.h>
936
+ #include <ATen/ops/masked_select.h>
937
+ #include <ATen/ops/masked_select_backward.h>
938
+ #include <ATen/ops/matmul.h>
939
+ #include <ATen/ops/matmul_backward.h>
940
+ #include <ATen/ops/matrix_H.h>
941
+ #include <ATen/ops/matrix_exp.h>
942
+ #include <ATen/ops/matrix_exp_backward.h>
943
+ #include <ATen/ops/matrix_power.h>
944
+ #include <ATen/ops/max.h>
945
+ #include <ATen/ops/max_pool1d.h>
946
+ #include <ATen/ops/max_pool1d_with_indices.h>
947
+ #include <ATen/ops/max_pool2d.h>
948
+ #include <ATen/ops/max_pool2d_backward.h>
949
+ #include <ATen/ops/max_pool2d_with_indices.h>
950
+ #include <ATen/ops/max_pool2d_with_indices_backward.h>
951
+ #include <ATen/ops/max_pool3d.h>
952
+ #include <ATen/ops/max_pool3d_with_indices.h>
953
+ #include <ATen/ops/max_pool3d_with_indices_backward.h>
954
+ #include <ATen/ops/max_unpool2d.h>
955
+ #include <ATen/ops/max_unpool3d.h>
956
+ #include <ATen/ops/maximum.h>
957
+ #include <ATen/ops/mean.h>
958
+ #include <ATen/ops/median.h>
959
+ #include <ATen/ops/meshgrid.h>
960
+ #include <ATen/ops/min.h>
961
+ #include <ATen/ops/minimum.h>
962
+ #include <ATen/ops/miopen_batch_norm.h>
963
+ #include <ATen/ops/miopen_batch_norm_backward.h>
964
+ #include <ATen/ops/miopen_convolution.h>
965
+ #include <ATen/ops/miopen_convolution_add_relu.h>
966
+ #include <ATen/ops/miopen_convolution_relu.h>
967
+ #include <ATen/ops/miopen_convolution_transpose.h>
968
+ #include <ATen/ops/miopen_depthwise_convolution.h>
969
+ #include <ATen/ops/miopen_rnn.h>
970
+ #include <ATen/ops/miopen_rnn_backward.h>
971
+ #include <ATen/ops/mish.h>
972
+ #include <ATen/ops/mish_backward.h>
973
+ #include <ATen/ops/mkldnn_adaptive_avg_pool2d.h>
974
+ #include <ATen/ops/mkldnn_adaptive_avg_pool2d_backward.h>
975
+ #include <ATen/ops/mkldnn_convolution.h>
976
+ #include <ATen/ops/mkldnn_linear.h>
977
+ #include <ATen/ops/mkldnn_linear_backward.h>
978
+ #include <ATen/ops/mkldnn_linear_backward_input.h>
979
+ #include <ATen/ops/mkldnn_linear_backward_weights.h>
980
+ #include <ATen/ops/mkldnn_max_pool2d.h>
981
+ #include <ATen/ops/mkldnn_max_pool2d_backward.h>
982
+ #include <ATen/ops/mkldnn_max_pool3d.h>
983
+ #include <ATen/ops/mkldnn_max_pool3d_backward.h>
984
+ #include <ATen/ops/mkldnn_reorder_conv2d_weight.h>
985
+ #include <ATen/ops/mkldnn_reorder_conv3d_weight.h>
986
+ #include <ATen/ops/mkldnn_rnn_layer.h>
987
+ #include <ATen/ops/mkldnn_rnn_layer_backward.h>
988
+ #include <ATen/ops/mm.h>
989
+ #include <ATen/ops/mode.h>
990
+ #include <ATen/ops/moveaxis.h>
991
+ #include <ATen/ops/movedim.h>
992
+ #include <ATen/ops/mps_convolution_backward.h>
993
+ #include <ATen/ops/mps_convolution_transpose_backward.h>
994
+ #include <ATen/ops/mse_loss.h>
995
+ #include <ATen/ops/mse_loss_backward.h>
996
+ #include <ATen/ops/msort.h>
997
+ #include <ATen/ops/mul.h>
998
+ #include <ATen/ops/multi_margin_loss.h>
999
+ #include <ATen/ops/multi_margin_loss_backward.h>
1000
+ #include <ATen/ops/multilabel_margin_loss.h>
1001
+ #include <ATen/ops/multilabel_margin_loss_backward.h>
1002
+ #include <ATen/ops/multilabel_margin_loss_forward.h>
1003
+ #include <ATen/ops/multinomial.h>
1004
+ #include <ATen/ops/multiply.h>
1005
+ #include <ATen/ops/mv.h>
1006
+ #include <ATen/ops/mvlgamma.h>
1007
+ #include <ATen/ops/nan_to_num.h>
1008
+ #include <ATen/ops/nanmean.h>
1009
+ #include <ATen/ops/nanmedian.h>
1010
+ #include <ATen/ops/nanquantile.h>
1011
+ #include <ATen/ops/nansum.h>
1012
+ #include <ATen/ops/narrow.h>
1013
+ #include <ATen/ops/narrow_copy.h>
1014
+ #include <ATen/ops/native_batch_norm.h>
1015
+ #include <ATen/ops/native_batch_norm_backward.h>
1016
+ #include <ATen/ops/native_channel_shuffle.h>
1017
+ #include <ATen/ops/native_dropout.h>
1018
+ #include <ATen/ops/native_dropout_backward.h>
1019
+ #include <ATen/ops/native_group_norm.h>
1020
+ #include <ATen/ops/native_group_norm_backward.h>
1021
+ #include <ATen/ops/native_layer_norm.h>
1022
+ #include <ATen/ops/native_layer_norm_backward.h>
1023
+ #include <ATen/ops/native_norm.h>
1024
+ #include <ATen/ops/ne.h>
1025
+ #include <ATen/ops/neg.h>
1026
+ #include <ATen/ops/negative.h>
1027
+ #include <ATen/ops/nested_to_padded_tensor.h>
1028
+ #include <ATen/ops/new_empty.h>
1029
+ #include <ATen/ops/new_empty_strided.h>
1030
+ #include <ATen/ops/new_full.h>
1031
+ #include <ATen/ops/new_ones.h>
1032
+ #include <ATen/ops/new_zeros.h>
1033
+ #include <ATen/ops/nextafter.h>
1034
+ #include <ATen/ops/nll_loss.h>
1035
+ #include <ATen/ops/nll_loss2d.h>
1036
+ #include <ATen/ops/nll_loss2d_backward.h>
1037
+ #include <ATen/ops/nll_loss2d_forward.h>
1038
+ #include <ATen/ops/nll_loss_backward.h>
1039
+ #include <ATen/ops/nll_loss_forward.h>
1040
+ #include <ATen/ops/nll_loss_nd.h>
1041
+ #include <ATen/ops/nonzero.h>
1042
+ #include <ATen/ops/nonzero_numpy.h>
1043
+ #include <ATen/ops/nonzero_static.h>
1044
+ #include <ATen/ops/norm.h>
1045
+ #include <ATen/ops/norm_except_dim.h>
1046
+ #include <ATen/ops/normal.h>
1047
+ #include <ATen/ops/not_equal.h>
1048
+ #include <ATen/ops/nuclear_norm.h>
1049
+ #include <ATen/ops/numpy_T.h>
1050
+ #include <ATen/ops/one_hot.h>
1051
+ #include <ATen/ops/ones.h>
1052
+ #include <ATen/ops/ones_like.h>
1053
+ #include <ATen/ops/or.h>
1054
+ #include <ATen/ops/orgqr.h>
1055
+ #include <ATen/ops/ormqr.h>
1056
+ #include <ATen/ops/outer.h>
1057
+ #include <ATen/ops/output_nr.h>
1058
+ #include <ATen/ops/pad.h>
1059
+ #include <ATen/ops/pad_sequence.h>
1060
+ #include <ATen/ops/pairwise_distance.h>
1061
+ #include <ATen/ops/pdist.h>
1062
+ #include <ATen/ops/permute.h>
1063
+ #include <ATen/ops/permute_copy.h>
1064
+ #include <ATen/ops/pin_memory.h>
1065
+ #include <ATen/ops/pinverse.h>
1066
+ #include <ATen/ops/pixel_shuffle.h>
1067
+ #include <ATen/ops/pixel_unshuffle.h>
1068
+ #include <ATen/ops/poisson.h>
1069
+ #include <ATen/ops/poisson_nll_loss.h>
1070
+ #include <ATen/ops/polar.h>
1071
+ #include <ATen/ops/polygamma.h>
1072
+ #include <ATen/ops/positive.h>
1073
+ #include <ATen/ops/pow.h>
1074
+ #include <ATen/ops/prelu.h>
1075
+ #include <ATen/ops/prod.h>
1076
+ #include <ATen/ops/promote_types.h>
1077
+ #include <ATen/ops/put.h>
1078
+ #include <ATen/ops/q_per_channel_axis.h>
1079
+ #include <ATen/ops/q_per_channel_scales.h>
1080
+ #include <ATen/ops/q_per_channel_zero_points.h>
1081
+ #include <ATen/ops/q_scale.h>
1082
+ #include <ATen/ops/q_zero_point.h>
1083
+ #include <ATen/ops/qr.h>
1084
+ #include <ATen/ops/qscheme.h>
1085
+ #include <ATen/ops/quantile.h>
1086
+ #include <ATen/ops/quantize_per_channel.h>
1087
+ #include <ATen/ops/quantize_per_tensor.h>
1088
+ #include <ATen/ops/quantize_per_tensor_dynamic.h>
1089
+ #include <ATen/ops/quantized_batch_norm.h>
1090
+ #include <ATen/ops/quantized_gru_cell.h>
1091
+ #include <ATen/ops/quantized_lstm_cell.h>
1092
+ #include <ATen/ops/quantized_max_pool1d.h>
1093
+ #include <ATen/ops/quantized_max_pool2d.h>
1094
+ #include <ATen/ops/quantized_max_pool3d.h>
1095
+ #include <ATen/ops/quantized_rnn_relu_cell.h>
1096
+ #include <ATen/ops/quantized_rnn_tanh_cell.h>
1097
+ #include <ATen/ops/rad2deg.h>
1098
+ #include <ATen/ops/rand.h>
1099
+ #include <ATen/ops/rand_like.h>
1100
+ #include <ATen/ops/randint.h>
1101
+ #include <ATen/ops/randint_like.h>
1102
+ #include <ATen/ops/randn.h>
1103
+ #include <ATen/ops/randn_like.h>
1104
+ #include <ATen/ops/random.h>
1105
+ #include <ATen/ops/randperm.h>
1106
+ #include <ATen/ops/range.h>
1107
+ #include <ATen/ops/ravel.h>
1108
+ #include <ATen/ops/real.h>
1109
+ #include <ATen/ops/reciprocal.h>
1110
+ #include <ATen/ops/record_stream.h>
1111
+ #include <ATen/ops/refine_names.h>
1112
+ #include <ATen/ops/reflection_pad1d.h>
1113
+ #include <ATen/ops/reflection_pad1d_backward.h>
1114
+ #include <ATen/ops/reflection_pad2d.h>
1115
+ #include <ATen/ops/reflection_pad2d_backward.h>
1116
+ #include <ATen/ops/reflection_pad3d.h>
1117
+ #include <ATen/ops/reflection_pad3d_backward.h>
1118
+ #include <ATen/ops/relu.h>
1119
+ #include <ATen/ops/relu6.h>
1120
+ #include <ATen/ops/remainder.h>
1121
+ #include <ATen/ops/rename.h>
1122
+ #include <ATen/ops/renorm.h>
1123
+ #include <ATen/ops/repeat.h>
1124
+ #include <ATen/ops/repeat_interleave.h>
1125
+ #include <ATen/ops/replication_pad1d.h>
1126
+ #include <ATen/ops/replication_pad1d_backward.h>
1127
+ #include <ATen/ops/replication_pad2d.h>
1128
+ #include <ATen/ops/replication_pad2d_backward.h>
1129
+ #include <ATen/ops/replication_pad3d.h>
1130
+ #include <ATen/ops/replication_pad3d_backward.h>
1131
+ #include <ATen/ops/requires_grad.h>
1132
+ #include <ATen/ops/reshape.h>
1133
+ #include <ATen/ops/reshape_as.h>
1134
+ #include <ATen/ops/resize.h>
1135
+ #include <ATen/ops/resize_as.h>
1136
+ #include <ATen/ops/resize_as_sparse.h>
1137
+ #include <ATen/ops/resolve_conj.h>
1138
+ #include <ATen/ops/resolve_neg.h>
1139
+ #include <ATen/ops/result_type.h>
1140
+ #include <ATen/ops/retain_grad.h>
1141
+ #include <ATen/ops/retains_grad.h>
1142
+ #include <ATen/ops/rms_norm.h>
1143
+ #include <ATen/ops/rnn_relu.h>
1144
+ #include <ATen/ops/rnn_relu_cell.h>
1145
+ #include <ATen/ops/rnn_tanh.h>
1146
+ #include <ATen/ops/rnn_tanh_cell.h>
1147
+ #include <ATen/ops/roll.h>
1148
+ #include <ATen/ops/rot90.h>
1149
+ #include <ATen/ops/round.h>
1150
+ #include <ATen/ops/row_indices.h>
1151
+ #include <ATen/ops/row_indices_copy.h>
1152
+ #include <ATen/ops/row_stack.h>
1153
+ #include <ATen/ops/rrelu.h>
1154
+ #include <ATen/ops/rrelu_with_noise.h>
1155
+ #include <ATen/ops/rrelu_with_noise_backward.h>
1156
+ #include <ATen/ops/rshift.h>
1157
+ #include <ATen/ops/rsqrt.h>
1158
+ #include <ATen/ops/rsub.h>
1159
+ #include <ATen/ops/scalar_tensor.h>
1160
+ #include <ATen/ops/scaled_dot_product_attention.h>
1161
+ #include <ATen/ops/scatter.h>
1162
+ #include <ATen/ops/scatter_add.h>
1163
+ #include <ATen/ops/scatter_reduce.h>
1164
+ #include <ATen/ops/searchsorted.h>
1165
+ #include <ATen/ops/segment_reduce.h>
1166
+ #include <ATen/ops/select.h>
1167
+ #include <ATen/ops/select_backward.h>
1168
+ #include <ATen/ops/select_copy.h>
1169
+ #include <ATen/ops/select_scatter.h>
1170
+ #include <ATen/ops/selu.h>
1171
+ #include <ATen/ops/set.h>
1172
+ #include <ATen/ops/set_data.h>
1173
+ #include <ATen/ops/sgn.h>
1174
+ #include <ATen/ops/sigmoid.h>
1175
+ #include <ATen/ops/sigmoid_backward.h>
1176
+ #include <ATen/ops/sign.h>
1177
+ #include <ATen/ops/signbit.h>
1178
+ #include <ATen/ops/silu.h>
1179
+ #include <ATen/ops/silu_backward.h>
1180
+ #include <ATen/ops/sin.h>
1181
+ #include <ATen/ops/sinc.h>
1182
+ #include <ATen/ops/sinh.h>
1183
+ #include <ATen/ops/size.h>
1184
+ #include <ATen/ops/slice.h>
1185
+ #include <ATen/ops/slice_backward.h>
1186
+ #include <ATen/ops/slice_copy.h>
1187
+ #include <ATen/ops/slice_inverse.h>
1188
+ #include <ATen/ops/slice_scatter.h>
1189
+ #include <ATen/ops/slogdet.h>
1190
+ #include <ATen/ops/slow_conv3d.h>
1191
+ #include <ATen/ops/slow_conv3d_forward.h>
1192
+ #include <ATen/ops/slow_conv_dilated2d.h>
1193
+ #include <ATen/ops/slow_conv_dilated3d.h>
1194
+ #include <ATen/ops/slow_conv_transpose2d.h>
1195
+ #include <ATen/ops/slow_conv_transpose3d.h>
1196
+ #include <ATen/ops/smm.h>
1197
+ #include <ATen/ops/smooth_l1_loss.h>
1198
+ #include <ATen/ops/smooth_l1_loss_backward.h>
1199
+ #include <ATen/ops/soft_margin_loss.h>
1200
+ #include <ATen/ops/soft_margin_loss_backward.h>
1201
+ #include <ATen/ops/softmax.h>
1202
+ #include <ATen/ops/softplus.h>
1203
+ #include <ATen/ops/softplus_backward.h>
1204
+ #include <ATen/ops/softshrink.h>
1205
+ #include <ATen/ops/softshrink_backward.h>
1206
+ #include <ATen/ops/sort.h>
1207
+ #include <ATen/ops/sparse_bsc_tensor.h>
1208
+ #include <ATen/ops/sparse_bsr_tensor.h>
1209
+ #include <ATen/ops/sparse_compressed_tensor.h>
1210
+ #include <ATen/ops/sparse_coo_tensor.h>
1211
+ #include <ATen/ops/sparse_csc_tensor.h>
1212
+ #include <ATen/ops/sparse_csr_tensor.h>
1213
+ #include <ATen/ops/sparse_dim.h>
1214
+ #include <ATen/ops/sparse_mask.h>
1215
+ #include <ATen/ops/sparse_resize.h>
1216
+ #include <ATen/ops/sparse_resize_and_clear.h>
1217
+ #include <ATen/ops/sparse_sampled_addmm.h>
1218
+ #include <ATen/ops/special_airy_ai.h>
1219
+ #include <ATen/ops/special_bessel_j0.h>
1220
+ #include <ATen/ops/special_bessel_j1.h>
1221
+ #include <ATen/ops/special_bessel_y0.h>
1222
+ #include <ATen/ops/special_bessel_y1.h>
1223
+ #include <ATen/ops/special_chebyshev_polynomial_t.h>
1224
+ #include <ATen/ops/special_chebyshev_polynomial_u.h>
1225
+ #include <ATen/ops/special_chebyshev_polynomial_v.h>
1226
+ #include <ATen/ops/special_chebyshev_polynomial_w.h>
1227
+ #include <ATen/ops/special_digamma.h>
1228
+ #include <ATen/ops/special_entr.h>
1229
+ #include <ATen/ops/special_erf.h>
1230
+ #include <ATen/ops/special_erfc.h>
1231
+ #include <ATen/ops/special_erfcx.h>
1232
+ #include <ATen/ops/special_erfinv.h>
1233
+ #include <ATen/ops/special_exp2.h>
1234
+ #include <ATen/ops/special_expit.h>
1235
+ #include <ATen/ops/special_expm1.h>
1236
+ #include <ATen/ops/special_gammainc.h>
1237
+ #include <ATen/ops/special_gammaincc.h>
1238
+ #include <ATen/ops/special_gammaln.h>
1239
+ #include <ATen/ops/special_hermite_polynomial_h.h>
1240
+ #include <ATen/ops/special_hermite_polynomial_he.h>
1241
+ #include <ATen/ops/special_i0.h>
1242
+ #include <ATen/ops/special_i0e.h>
1243
+ #include <ATen/ops/special_i1.h>
1244
+ #include <ATen/ops/special_i1e.h>
1245
+ #include <ATen/ops/special_laguerre_polynomial_l.h>
1246
+ #include <ATen/ops/special_legendre_polynomial_p.h>
1247
+ #include <ATen/ops/special_log1p.h>
1248
+ #include <ATen/ops/special_log_ndtr.h>
1249
+ #include <ATen/ops/special_log_softmax.h>
1250
+ #include <ATen/ops/special_logit.h>
1251
+ #include <ATen/ops/special_logsumexp.h>
1252
+ #include <ATen/ops/special_modified_bessel_i0.h>
1253
+ #include <ATen/ops/special_modified_bessel_i1.h>
1254
+ #include <ATen/ops/special_modified_bessel_k0.h>
1255
+ #include <ATen/ops/special_modified_bessel_k1.h>
1256
+ #include <ATen/ops/special_multigammaln.h>
1257
+ #include <ATen/ops/special_ndtr.h>
1258
+ #include <ATen/ops/special_ndtri.h>
1259
+ #include <ATen/ops/special_polygamma.h>
1260
+ #include <ATen/ops/special_psi.h>
1261
+ #include <ATen/ops/special_round.h>
1262
+ #include <ATen/ops/special_scaled_modified_bessel_k0.h>
1263
+ #include <ATen/ops/special_scaled_modified_bessel_k1.h>
1264
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_t.h>
1265
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_u.h>
1266
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_v.h>
1267
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_w.h>
1268
+ #include <ATen/ops/special_sinc.h>
1269
+ #include <ATen/ops/special_softmax.h>
1270
+ #include <ATen/ops/special_spherical_bessel_j0.h>
1271
+ #include <ATen/ops/special_xlog1py.h>
1272
+ #include <ATen/ops/special_xlogy.h>
1273
+ #include <ATen/ops/special_zeta.h>
1274
+ #include <ATen/ops/split.h>
1275
+ #include <ATen/ops/split_copy.h>
1276
+ #include <ATen/ops/split_with_sizes.h>
1277
+ #include <ATen/ops/split_with_sizes_copy.h>
1278
+ #include <ATen/ops/sqrt.h>
1279
+ #include <ATen/ops/square.h>
1280
+ #include <ATen/ops/squeeze.h>
1281
+ #include <ATen/ops/squeeze_copy.h>
1282
+ #include <ATen/ops/sspaddmm.h>
1283
+ #include <ATen/ops/stack.h>
1284
+ #include <ATen/ops/std.h>
1285
+ #include <ATen/ops/std_mean.h>
1286
+ #include <ATen/ops/stft.h>
1287
+ #include <ATen/ops/stride.h>
1288
+ #include <ATen/ops/sub.h>
1289
+ #include <ATen/ops/subtract.h>
1290
+ #include <ATen/ops/sum.h>
1291
+ #include <ATen/ops/sum_to_size.h>
1292
+ #include <ATen/ops/svd.h>
1293
+ #include <ATen/ops/swapaxes.h>
1294
+ #include <ATen/ops/swapdims.h>
1295
+ #include <ATen/ops/sym_constrain_range.h>
1296
+ #include <ATen/ops/sym_constrain_range_for_size.h>
1297
+ #include <ATen/ops/sym_numel.h>
1298
+ #include <ATen/ops/sym_size.h>
1299
+ #include <ATen/ops/sym_storage_offset.h>
1300
+ #include <ATen/ops/sym_stride.h>
1301
+ #include <ATen/ops/t.h>
1302
+ #include <ATen/ops/t_copy.h>
1303
+ #include <ATen/ops/take.h>
1304
+ #include <ATen/ops/take_along_dim.h>
1305
+ #include <ATen/ops/tan.h>
1306
+ #include <ATen/ops/tanh.h>
1307
+ #include <ATen/ops/tanh_backward.h>
1308
+ #include <ATen/ops/tensor_split.h>
1309
+ #include <ATen/ops/tensordot.h>
1310
+ #include <ATen/ops/thnn_conv2d.h>
1311
+ #include <ATen/ops/threshold.h>
1312
+ #include <ATen/ops/threshold_backward.h>
1313
+ #include <ATen/ops/tile.h>
1314
+ #include <ATen/ops/to.h>
1315
+ #include <ATen/ops/to_dense.h>
1316
+ #include <ATen/ops/to_dense_backward.h>
1317
+ #include <ATen/ops/to_mkldnn.h>
1318
+ #include <ATen/ops/to_mkldnn_backward.h>
1319
+ #include <ATen/ops/to_padded_tensor.h>
1320
+ #include <ATen/ops/to_sparse.h>
1321
+ #include <ATen/ops/to_sparse_bsc.h>
1322
+ #include <ATen/ops/to_sparse_bsr.h>
1323
+ #include <ATen/ops/to_sparse_csc.h>
1324
+ #include <ATen/ops/to_sparse_csr.h>
1325
+ #include <ATen/ops/topk.h>
1326
+ #include <ATen/ops/trace.h>
1327
+ #include <ATen/ops/trace_backward.h>
1328
+ #include <ATen/ops/transpose.h>
1329
+ #include <ATen/ops/transpose_copy.h>
1330
+ #include <ATen/ops/trapezoid.h>
1331
+ #include <ATen/ops/trapz.h>
1332
+ #include <ATen/ops/triangular_solve.h>
1333
+ #include <ATen/ops/tril.h>
1334
+ #include <ATen/ops/tril_indices.h>
1335
+ #include <ATen/ops/triplet_margin_loss.h>
1336
+ #include <ATen/ops/triu.h>
1337
+ #include <ATen/ops/triu_indices.h>
1338
+ #include <ATen/ops/true_divide.h>
1339
+ #include <ATen/ops/trunc.h>
1340
+ #include <ATen/ops/type_as.h>
1341
+ #include <ATen/ops/unbind.h>
1342
+ #include <ATen/ops/unbind_copy.h>
1343
+ #include <ATen/ops/unflatten.h>
1344
+ #include <ATen/ops/unflatten_dense_tensors.h>
1345
+ #include <ATen/ops/unfold.h>
1346
+ #include <ATen/ops/unfold_backward.h>
1347
+ #include <ATen/ops/unfold_copy.h>
1348
+ #include <ATen/ops/uniform.h>
1349
+ #include <ATen/ops/unique_consecutive.h>
1350
+ #include <ATen/ops/unique_dim.h>
1351
+ #include <ATen/ops/unique_dim_consecutive.h>
1352
+ #include <ATen/ops/unsafe_chunk.h>
1353
+ #include <ATen/ops/unsafe_split.h>
1354
+ #include <ATen/ops/unsafe_split_with_sizes.h>
1355
+ #include <ATen/ops/unsqueeze.h>
1356
+ #include <ATen/ops/unsqueeze_copy.h>
1357
+ #include <ATen/ops/upsample_bicubic2d.h>
1358
+ #include <ATen/ops/upsample_bicubic2d_backward.h>
1359
+ #include <ATen/ops/upsample_bilinear2d.h>
1360
+ #include <ATen/ops/upsample_bilinear2d_backward.h>
1361
+ #include <ATen/ops/upsample_linear1d.h>
1362
+ #include <ATen/ops/upsample_linear1d_backward.h>
1363
+ #include <ATen/ops/upsample_nearest1d.h>
1364
+ #include <ATen/ops/upsample_nearest1d_backward.h>
1365
+ #include <ATen/ops/upsample_nearest2d.h>
1366
+ #include <ATen/ops/upsample_nearest2d_backward.h>
1367
+ #include <ATen/ops/upsample_nearest3d.h>
1368
+ #include <ATen/ops/upsample_nearest3d_backward.h>
1369
+ #include <ATen/ops/upsample_trilinear3d.h>
1370
+ #include <ATen/ops/upsample_trilinear3d_backward.h>
1371
+ #include <ATen/ops/value_selecting_reduction_backward.h>
1372
+ #include <ATen/ops/values.h>
1373
+ #include <ATen/ops/values_copy.h>
1374
+ #include <ATen/ops/vander.h>
1375
+ #include <ATen/ops/var.h>
1376
+ #include <ATen/ops/var_mean.h>
1377
+ #include <ATen/ops/vdot.h>
1378
+ #include <ATen/ops/view.h>
1379
+ #include <ATen/ops/view_as.h>
1380
+ #include <ATen/ops/view_as_complex.h>
1381
+ #include <ATen/ops/view_as_complex_copy.h>
1382
+ #include <ATen/ops/view_as_real.h>
1383
+ #include <ATen/ops/view_as_real_copy.h>
1384
+ #include <ATen/ops/view_copy.h>
1385
+ #include <ATen/ops/vsplit.h>
1386
+ #include <ATen/ops/vstack.h>
1387
+ #include <ATen/ops/where.h>
1388
+ #include <ATen/ops/xlogy.h>
1389
+ #include <ATen/ops/xor.h>
1390
+ #include <ATen/ops/zero.h>
1391
+ #include <ATen/ops/zeros.h>
1392
+ #include <ATen/ops/zeros_like.h>
1393
+
1394
+ namespace at {
1395
+
1396
+
1397
+
1398
+ // Special C++ only overloads for std()-like functions (See gh-40287)
1399
+ // These are needed because int -> bool conversion takes precedence over int -> IntArrayRef
1400
+ // So, for example std(0) would select the std(unbiased=False) overload
1401
+ TORCH_API inline Tensor var(const Tensor& self, int dim) {
1402
+ return at::var(self, IntArrayRef{dim});
1403
+ }
1404
+ TORCH_API inline std::tuple<Tensor, Tensor> var_mean(const Tensor& self, int dim) {
1405
+ return at::var_mean(self, IntArrayRef{dim});
1406
+ }
1407
+ TORCH_API inline Tensor std(const Tensor& self, int dim) {
1408
+ return at::std(self, IntArrayRef{dim});
1409
+ }
1410
+ TORCH_API inline std::tuple<Tensor, Tensor> std_mean(const Tensor& self, int dim) {
1411
+ return at::std_mean(self, IntArrayRef{dim});
1412
+ }
1413
+
1414
+ inline int64_t numel(const Tensor& tensor) {
1415
+ return tensor.numel();
1416
+ }
1417
+
1418
+ inline int64_t size(const Tensor& tensor, int64_t dim) {
1419
+ return tensor.size(dim);
1420
+ }
1421
+
1422
+ inline int64_t stride(const Tensor& tensor, int64_t dim) {
1423
+ return tensor.stride(dim);
1424
+ }
1425
+
1426
+ inline bool is_complex(const Tensor& tensor) {
1427
+ return tensor.is_complex();
1428
+ }
1429
+
1430
+ inline bool is_floating_point(const Tensor& tensor) {
1431
+ return tensor.is_floating_point();
1432
+ }
1433
+
1434
+ inline bool is_signed(const Tensor& tensor) {
1435
+ return tensor.is_signed();
1436
+ }
1437
+
1438
+ inline bool is_inference(const Tensor& tensor) {
1439
+ return tensor.is_inference();
1440
+ }
1441
+
1442
+ inline bool _is_zerotensor(const Tensor& tensor) {
1443
+ return tensor._is_zerotensor();
1444
+ }
1445
+
1446
+ inline bool is_conj(const Tensor& tensor) {
1447
+ return tensor.is_conj();
1448
+ }
1449
+
1450
+ inline Tensor conj(const Tensor& tensor) {
1451
+ return tensor.conj();
1452
+ }
1453
+
1454
+ inline bool is_neg(const Tensor& tensor) {
1455
+ return tensor.is_neg();
1456
+ }
1457
+
1458
+ }
lib/python3.12/site-packages/torch/include/ATen/InferSize.h ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/DimVector.h>
4
+ #include <c10/core/ScalarType.h>
5
+ #include <c10/core/SymIntArrayRef.h>
6
+ #include <c10/util/DimVector.h>
7
+ #include <optional>
8
+ #include <sstream>
9
+ #include <vector>
10
+
11
+ namespace at {
12
+
13
+ // Infers the size of a dim with size -1, if it exists. Also checks that new
14
+ // shape is compatible with the number of elements.
15
+ //
16
+ // templated to handle std::vector<int64_t> and DimVector use cases, see
17
+ // below
18
+ //
19
+ template <typename InputArrayRef, typename NumelType, typename ResultVec>
20
+ inline void infer_size_impl(
21
+ InputArrayRef shape,
22
+ NumelType numel,
23
+ ResultVec& res) {
24
+ NumelType newsize = 1;
25
+ // N.B. this is an index, not a sym dim!
26
+ std::optional<int64_t> infer_dim;
27
+ for (int64_t dim = 0, ndim = shape.size(); dim != ndim; dim++) {
28
+ if (shape[dim] == -1) {
29
+ if (infer_dim) {
30
+ throw std::runtime_error("only one dimension can be inferred");
31
+ }
32
+ infer_dim = dim;
33
+ } else if (shape[dim] >= 0) {
34
+ newsize *= shape[dim];
35
+ } else {
36
+ TORCH_CHECK(false, "invalid shape dimension ", shape[dim]);
37
+ }
38
+ }
39
+
40
+ if (TORCH_GUARD_SIZE_OBLIVIOUS(sym_eq(numel, newsize)) ||
41
+ (infer_dim && newsize > 0 && numel % newsize == 0)) {
42
+ if (infer_dim) {
43
+ // We have a degree of freedom here to select the dimension size; follow
44
+ // NumPy semantics and just bail. However, a nice error message is needed
45
+ // because users often use `view` as a way to flatten & unflatten
46
+ // dimensions and will otherwise be confused why
47
+ // empty_tensor.view( 0, 0)
48
+ // works yet
49
+ // empty_tensor.view(-1, 0)
50
+ // doesn't.
51
+ TORCH_CHECK(
52
+ newsize != 0,
53
+ "cannot reshape tensor of 0 elements into shape ",
54
+ shape,
55
+ " because the unspecified dimension size -1 can be any "
56
+ "value and is ambiguous");
57
+ res[*infer_dim] = numel / newsize;
58
+ }
59
+ return;
60
+ }
61
+
62
+ std::ostringstream ss;
63
+ ss << "shape '" << shape << "' is invalid for input of size " << numel;
64
+ throw std::runtime_error(ss.str());
65
+ }
66
+
67
+ inline std::vector<int64_t> infer_size(IntArrayRef shape, int64_t numel) {
68
+ auto res = shape.vec();
69
+ infer_size_impl(shape, numel, res);
70
+ return res;
71
+ }
72
+
73
+ inline at::DimVector infer_size_dv(IntArrayRef shape, int64_t numel) {
74
+ auto res = at::DimVector(shape);
75
+ infer_size_impl(shape, numel, res);
76
+ return res;
77
+ }
78
+
79
+ inline at::SymDimVector infer_size_dv(
80
+ c10::SymIntArrayRef shape,
81
+ c10::SymInt numel) {
82
+ auto res = at::SymDimVector(shape);
83
+ infer_size_impl<c10::SymIntArrayRef, c10::SymInt, at::SymDimVector>(
84
+ shape, std::move(numel), res);
85
+ return res;
86
+ }
87
+
88
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/InitialTensorOptions.h ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/core/TensorOptions.h>
4
+
5
+ namespace at {
6
+
7
+ // Represents the initial TensorOptions, before the "defaults" are ever changed.
8
+ // This is designed to be used in library code, where the explicit devices,
9
+ // dtypes, etc. are known. NOTE: this is not a stable API.
10
+ inline TensorOptions initialTensorOptions() {
11
+ return TensorOptions(kCPU).dtype(kFloat).layout(kStrided).requires_grad(
12
+ false);
13
+ }
14
+
15
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/Layout.h ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ #pragma once
2
+ #include <c10/core/Layout.h>
lib/python3.12/site-packages/torch/include/ATen/LegacyBatchedTensorImpl.h ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <bitset>
4
+
5
+ #include <ATen/ArrayRef.h>
6
+ #include <ATen/SmallVector.h>
7
+ #include <ATen/Tensor.h>
8
+
9
+ namespace at {
10
+
11
+ // We assume this in a few other places in the codebase,
12
+ // but there isn't a centralized definition.
13
+ constexpr int64_t kVmapMaxTensorDims = 64;
14
+
15
+ // The valid vmap levels range from [0, 64). This effectively means that we
16
+ // support a maximum of 64 nested vmaps.
17
+ constexpr int64_t kVmapNumLevels = 64;
18
+
19
+ // Store this number of elements of BatchDims on the stack. Most people will
20
+ // probably use <= 5 nested vmaps, but adjust this number as necessary.
21
+ constexpr int64_t kBatchDimsStackSize = 5;
22
+
23
+ // a BatchDim represents a "private" dimension on a Tensor created inside of
24
+ // vmap. It is a (level, dim) tuple, with the `dim` indicating which dimension
25
+ // is being vmap'ed over and the `level` being an identifier for which vmap
26
+ // said dimension was created inside. The `dim` corresponds to a "physical
27
+ // dim" - it is a dimension index on the underlying physical tensor that is
28
+ // being vmapped over.
29
+ struct BatchDim {
30
+ BatchDim(int64_t level, int64_t dim) : dim_(dim), level_(level) {}
31
+ int64_t dim() const {
32
+ return dim_;
33
+ }
34
+ int64_t level() const {
35
+ return level_;
36
+ }
37
+
38
+ private:
39
+ int64_t dim_;
40
+ int64_t level_;
41
+ };
42
+
43
+ using BatchDims = SmallVector<BatchDim, kBatchDimsStackSize>;
44
+ using BatchDimsRef = ArrayRef<BatchDim>;
45
+
46
+ // A BatchedTensorImpl holds an underlying Tensor and a list of BatchDim
47
+ // NB: We use the term "BatchedTensor" to mean a Tensor that is backed with a
48
+ // BatchedTensorImpl.
49
+ //
50
+ // The batch dimensions are treated as being "private"; they are not
51
+ // user-visible. For example, in the following Tensor,
52
+ // bt = BatchedTensorImpl(ones(2, 3, 5, 7), [(lvl=1, dim=0), (lvl=2, dim=1)])
53
+ // dimensions 0 and 1 are batch dimensions.
54
+ //
55
+ // bt.sizes() returns (5, 7); bt.sum(0) performs a reduction over the (public)
56
+ // dim 0, which is equivalent to dim 3 in the underlying ones(2, 3, 5, 7)
57
+ // tensor.
58
+ struct TORCH_API BatchedTensorImpl : public c10::TensorImpl {
59
+ explicit BatchedTensorImpl(Tensor value, BatchDims bdims);
60
+
61
+ // Returns a reference to BatchDims that represent which dimensions of this
62
+ // tensor are private.
63
+ BatchDimsRef bdims() const {
64
+ return bdims_;
65
+ }
66
+
67
+ // BatchedTensorImpl wraps a Tensor
68
+ const Tensor& value() const {
69
+ return value_;
70
+ }
71
+
72
+ // Given a public dimension index, return the dimension index in the
73
+ // underlying value() tensor. For example, if we have
74
+ // bt = BatchedTensorImpl(ones(2, 3, 5, 7), [(lvl=1, dim=0), (lvl=2,
75
+ // dim=2)])
76
+ // bt.actualDim(0) -> 1
77
+ // bt.actualDim(1) -> 3
78
+ // bt.actualDim(2) -> Error
79
+ int64_t actualDim(int64_t dim, bool wrap_dim = true) const;
80
+
81
+ // We have to override this because we opted into CustomStrides
82
+ IntArrayRef strides_custom() const override;
83
+ // Override a bunch of methods inherited from TensorImpl to return error
84
+ // messages.
85
+ bool is_contiguous_custom(at::MemoryFormat memory_format) const override;
86
+ void set_size(int64_t dim, int64_t new_size) override;
87
+ void set_stride(int64_t dim, int64_t new_stride) override;
88
+ void set_storage_offset(int64_t storage_offset) override;
89
+ #ifdef DEBUG
90
+ bool has_storage() const override;
91
+ #endif
92
+
93
+ private:
94
+ // see NOTE: [BatchedTensorImpl levels invariant]
95
+ void checkInvariants() const;
96
+ const char* tensorimpl_type_name() const override;
97
+
98
+ Tensor value_;
99
+
100
+ // Note: [BatchedTensorImpl levels invariant]
101
+ // There is an invariant that the BatchDims must be stored in increasing
102
+ // `level` order. That is, for i < j, bdims_[i].level must be less than
103
+ // bdims_[j].level.
104
+ BatchDims bdims_;
105
+ };
106
+
107
+ // NB: We use the term "BatchedTensor" to mean a Tensor that is backed with a
108
+ // BatchedTensorImpl.
109
+ inline bool isBatchedTensor(const Tensor& tensor) {
110
+ return tensor.unsafeGetTensorImpl()->key_set().has(DispatchKey::Batched);
111
+ }
112
+
113
+ // It is unsafe to call this on a Tensor that is not backed by a
114
+ // BatchedTensorImpl. Please use `maybeGetBatchedImpl` whenever possible.
115
+ inline BatchedTensorImpl* unsafeGetBatchedImpl(const Tensor& tensor) {
116
+ return static_cast<BatchedTensorImpl*>(tensor.unsafeGetTensorImpl());
117
+ }
118
+
119
+ inline BatchedTensorImpl* maybeGetBatchedImpl(const Tensor& tensor) {
120
+ if (!isBatchedTensor(tensor)) {
121
+ return nullptr;
122
+ }
123
+ return unsafeGetBatchedImpl(tensor);
124
+ }
125
+
126
+ // Returns a bitset. If bit i is set, then that means dim i is a batchdim.
127
+ inline std::bitset<kVmapMaxTensorDims> createBatchDimBitset(
128
+ BatchDimsRef bdims) {
129
+ std::bitset<kVmapMaxTensorDims> is_bdim;
130
+ for (const auto& bdim : bdims) {
131
+ is_bdim.set(bdim.dim());
132
+ }
133
+ return is_bdim;
134
+ }
135
+
136
+ // Creates a bitset for all of the levels present in `bdims`
137
+ inline std::bitset<kVmapNumLevels> createVmapLevelsBitset(BatchDimsRef bdims) {
138
+ std::bitset<kVmapNumLevels> result;
139
+ for (const auto& bdim : bdims) {
140
+ result.set(bdim.level());
141
+ }
142
+ return result;
143
+ }
144
+
145
+ inline std::ostream& operator<<(std::ostream& out, const BatchDim& bdim) {
146
+ out << "(lvl=" << bdim.level() << ", dim=" << bdim.dim() << ")";
147
+ return out;
148
+ }
149
+
150
+ // Use this to construct a BatchedTensor from a regular Tensor
151
+ TORCH_API Tensor makeBatched(Tensor tensor, BatchDims bdims);
152
+
153
+ // Adds a batch dim to `tensor`, returning a BatchedTensor
154
+ TORCH_API Tensor addBatchDim(Tensor tensor, int64_t level, int64_t dim);
155
+
156
+ // Checks if an inplace operation on self and other is "vmap compatible".
157
+ // See NOTE: [vmap-incompatible in-place operations] for the definition of this.
158
+ TORCH_API bool inplaceIsVmapCompatible(const Tensor& self, const Tensor& other);
159
+
160
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/LegacyVmapMode.h ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/core/impl/LocalDispatchKeySet.h>
4
+
5
+ namespace at::impl {
6
+
7
+ // VmapMode contains a thread local count of how many nested vmaps
8
+ // we are currently inside. That number is known as the `vmap level`.
9
+ // VmapMode is used in the implementation of the Python `torch.vmap` API.
10
+ //
11
+ // NOTE: this is NOT the c++ api for torch.vmap. That doesn't exist yet.
12
+
13
+ struct TORCH_API VmapMode {
14
+ // Returns the vmap level, aka the count of how many nested vmaps we're in.
15
+ static int64_t current_vmap_level();
16
+
17
+ // Increment the count of nested vmaps. If this causes the vmap level to be
18
+ // greater than 0, then it enables DispatchKey::VmapMode on all tensors.
19
+ static int64_t increment_nesting();
20
+
21
+ // Decrements the count of nested vmaps. If this causes the vmap level to be
22
+ // equal to 0, then it disables DispatchKey::VmapMode on all tensors.
23
+ static int64_t decrement_nesting();
24
+ };
25
+
26
+ } // namespace at::impl
lib/python3.12/site-packages/torch/include/ATen/LegacyVmapTransforms.h ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <ATen/LegacyBatchedTensorImpl.h>
4
+ #include <ATen/core/IListRef.h>
5
+
6
+ namespace at {
7
+
8
+ // This file contains abstractions used for transforming *logical* vmap
9
+ // arguments into *physical* arguments. (Keep reading for definitions of these
10
+ // terms).
11
+
12
+ // NOTE: [Logical vs physical args]
13
+ // Consider the following vmap.
14
+ // vmap(vmap(func, in_dims=(2,)), in_dims=(0,))(torch.ones(2, 3, 4))
15
+ // This would produce a BatchedTensor wrapping a Tensor of size [2, 3, 4],
16
+ // with batch dims 0 and 2:
17
+ // BatchedTensor(ones(2, 3, 4), bdims=[(lvl=1,dim=0),(lvl=2,dim=2)])
18
+ //
19
+ // We say the *logical* view of the tensor has size [3] -- tensors inside
20
+ // `func` appear to have size [3].
21
+ // However, the *physical* underlying tensor (the one passed to vmap) has size
22
+ // [2, 3, 4].
23
+ //
24
+ // This notion of logical vs physical also extends to non-tensor arguments.
25
+ // Consider the previous tensor; let's assume the user called
26
+ // `torch.sum(tensor, dim=0)` inside of `func`. Then the logical
27
+ // dimension they are reducing over is dim 0 but the physical dim is dim 1
28
+ // (the first non-batch dimension)
29
+
30
+ // Forward declared; see NOTE: [What is a VmapPhysicalView?]
31
+ struct VmapPhysicalView;
32
+
33
+ // Most PyTorch operators take 4 or fewer inputs.
34
+ constexpr int64_t kVmapTransformStaticInputSize = 4;
35
+ using VmapPhysicalViewVec =
36
+ SmallVector<VmapPhysicalView, kVmapTransformStaticInputSize>;
37
+
38
+ // Pytorch generally advertises good performance for <= 5 dims.
39
+ // (see ATen/core/DimVector.h). We add a few extra dims (~3) for vmap
40
+ // dimensions to get 8. Adjust this number as necessary
41
+ constexpr int64_t kVmapStaticDimVecSize = 8;
42
+ using VmapDimVector = SmallVector<int64_t, kVmapStaticDimVecSize>;
43
+ using VmapSymDimVector = SmallVector<c10::SymInt, kVmapStaticDimVecSize>;
44
+
45
+ // NOTE: [What is an VmapTransform?]
46
+ // An *VmapTransform* converts logical views of tensors to physical views.
47
+ //
48
+ // Batching rules use VmapTransforms to convert logical arguments to
49
+ // physical arguments, then call one or more at:: operator that handles the
50
+ // physical arguments, and then converts the physical result back to a logical
51
+ // argument.
52
+
53
+ // VmapTransform for operators that take tensors with multiple batch dims.
54
+ // Given one or more logical views on Tensors, `logicalToPhysical`
55
+ // permutes all of the batch dims to the front of the tensor, aligns
56
+ // and expands the batch dims to match each other (according to their `level`),
57
+ // and returns a VmapPhysicalView on the tensor(s).
58
+ struct TORCH_API MultiBatchVmapTransform {
59
+ static VmapPhysicalView logicalToPhysical(const Tensor& logical_tensor);
60
+ static VmapPhysicalViewVec logicalToPhysical(ITensorListRef logical_tensors);
61
+ };
62
+
63
+ // VmapTransform for operators that broadcast all inputs.
64
+ // Given some logical views on Tensors, `logicalToPhysical`:
65
+ // - permutes all of the batch dims to the front of the tensors
66
+ // - aligns all the batch dims to the collective levels of all of the tensors.
67
+ // If a tensor does not have a batch dim for a vmap level, then it receives
68
+ // a size-one dimension for said level.
69
+ // - aligns the non-batch dims to have the same dimensionality, adding extra
70
+ // size-1 dimensions in between the batch dimensions and the non-batch
71
+ // dimensions so that the batch dimensions are lined up from the right.
72
+ //
73
+ // For example: given inputs of size (B, 2) and (B, 3, 2) where B is the batch
74
+ // dimension, BroadcastingVmapTransform returns VmapPhysicalViews that wrap
75
+ // tensors of size (B, 1, 2) and (B, 3, 2).
76
+ //
77
+ // Given inputs of size (B, 2) and (2,), BroadcastingVmapTransform returns
78
+ // VmapPhysicalViews wrapping tensors of size (B, 2) and (1, 2). We don't
79
+ // actually *need* to return a tensor of size (1, 2) for the second tensor
80
+ // because the broadcasting operation takes care of that for us, but we do
81
+ // it anyways to keep things simple.
82
+ struct TORCH_API BroadcastingVmapTransform {
83
+ static VmapPhysicalViewVec logicalToPhysical(TensorList logical_tensors);
84
+ };
85
+
86
+ // Forward declared, if you're reading this file head to toe, don't worry about
87
+ // it yet.
88
+ struct VmapPhysicalToLogicalMap;
89
+
90
+ // NOTE: [What is a VmapPhysicalView?]
91
+ // VmapPhysicalView represents a physical view on a Tensor.
92
+ //
93
+ // One can use it to further convert logical dimension indices, logical shapes,
94
+ // and more to their physical variants, or convert a new (physical) tensor into
95
+ // a logical BatchedTensor. (TODO(rzou): some of these are not yet implemented).
96
+ //
97
+ // VmapPhysicalView stores a physical tensor with all of its batch dimensions at
98
+ // the front and some levels that correspond to said batch dimensions.
99
+ //
100
+ // The levels bitset specifies which vmap levels correspond to the batch
101
+ // dimensions at the front of the tensor. In particular, the number of set bits
102
+ // corresponds to the number of batch dimensions on `tensor` and the rightmost
103
+ // bit of `levels` specifies the maximum number of nested vmaps we are in at
104
+ // this point in time.
105
+ // For example, given:
106
+ // physical_view = VmapPhysicalView(tensor=ones(2, 3, 4, 5, 6), levels={1, 3})
107
+ //
108
+ // Rightmost bit of `levels` is 3 indicating the number of nested vmaps less
109
+ // than or equal to 3.
110
+ // bitset: 010100
111
+ // ^
112
+ // |
113
+ // levels: 012345
114
+ struct TORCH_API VmapPhysicalView {
115
+ VmapPhysicalView(Tensor&& tensor, std::bitset<kVmapNumLevels> levels)
116
+ : levels_(levels), tensor_(std::move(tensor)) {
117
+ TORCH_INTERNAL_ASSERT(!isBatchedTensor(tensor_));
118
+ }
119
+
120
+ Tensor& tensor() {
121
+ return tensor_;
122
+ }
123
+ const Tensor& tensor() const {
124
+ return tensor_;
125
+ }
126
+
127
+ // Maps logical dim indices to physical dim indices. Also does dim wrapping.
128
+ //
129
+ // For example, given:
130
+ // physical_view = VmapPhysicalView(tensor=ones(2, 3, 4, 5), levels={1, 3})
131
+ //
132
+ // Then physical_view.getPhysicalDims({0, 1}) returns {2, 3}.
133
+ // This is because the size of levels tell us that the first two dimensions
134
+ // of `tensor_` are batch dimensions, so a logical dim of `n` is actually
135
+ // a physical dim of `n + 2`.
136
+ VmapDimVector getPhysicalDims(OptionalIntArrayRef logical_dims) const;
137
+ int64_t getPhysicalDim(int64_t logical_dim) const;
138
+
139
+ // Returns a VmapPhysicalToLogicalMap object. This can be used for
140
+ // mapping a physical tensor to a new logical tensor (BatchedTensor)
141
+ VmapPhysicalToLogicalMap getPhysicalToLogicalMap() const;
142
+
143
+ // Maps a logical shape to a physical shape by pre-pending the batch
144
+ // sizes to the logical shape.
145
+ VmapDimVector getPhysicalShape(IntArrayRef logical_shape) const;
146
+
147
+ int64_t numBatchDims() const;
148
+
149
+ private:
150
+ int64_t numLogicalDims() const;
151
+
152
+ std::bitset<kVmapNumLevels> levels_;
153
+ Tensor tensor_;
154
+ };
155
+
156
+ // Convenience struct used for mapping a physical tensor (a non-BatchedTensor)
157
+ // to a logical one (BatchedTensor). It holds some levels that are used to do
158
+ // the mapping and assumes that the batch dimensions in the physical tensor all
159
+ // occur at the front of the tensor.
160
+ struct TORCH_API VmapPhysicalToLogicalMap {
161
+ VmapPhysicalToLogicalMap(std::bitset<kVmapNumLevels> levels)
162
+ : levels_(levels) {}
163
+
164
+ // Maps a physical tensor to a new logical tensor (BatchedTensor).
165
+ // Assumes that all of the "batch dimensions" are at the front
166
+ // of the physical tensor. For example, given:
167
+ // - x = rank-4 Tensor with size 2, 3, 5, 7
168
+ // - levels = (2, 4)
169
+ // Returns:
170
+ // - BatchedTensor(x, bdims=[(dim=0,lvl=2), (dim=1, lvl=4)])
171
+ Tensor apply(const Tensor& physical_tensor) const;
172
+
173
+ // Given a vector of physical tensors,
174
+ // 1. maps each tensor to a new logical tensor. Assumes that all of the
175
+ // "batch dimensions" are at the front of the physical tensors.
176
+ // 2. stores the new logical tensors back into the passed-in vector. This is
177
+ // to avoid additional dynamic allocations.
178
+ void applyInplace(std::vector<Tensor>& physical_tensors) const;
179
+
180
+ std::bitset<kVmapNumLevels> levels_;
181
+ };
182
+
183
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/LinalgBackend.h ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/util/Exception.h>
4
+
5
+ #include <ostream>
6
+ #include <string>
7
+
8
+ namespace at {
9
+
10
+ enum class LinalgBackend : int8_t { Default, Cusolver, Magma };
11
+
12
+ inline std::string LinalgBackendToString(at::LinalgBackend backend) {
13
+ switch (backend) {
14
+ case LinalgBackend::Default:
15
+ return "at::LinalgBackend::Default";
16
+ case LinalgBackend::Cusolver:
17
+ return "at::LinalgBackend::Cusolver";
18
+ case LinalgBackend::Magma:
19
+ return "at::LinalgBackend::Magma";
20
+ default:
21
+ TORCH_CHECK(false, "Unknown linalg backend");
22
+ }
23
+ }
24
+
25
+ inline std::ostream& operator<<(
26
+ std::ostream& stream,
27
+ at::LinalgBackend backend) {
28
+ return stream << LinalgBackendToString(backend);
29
+ }
30
+
31
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/MapAllocator.h ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/core/Allocator.h>
4
+ #include <c10/util/string_view.h>
5
+
6
+ namespace at {
7
+
8
+ enum MappedAllocatorModes {
9
+ ALLOCATOR_MAPPED_SHARED = 1,
10
+ ALLOCATOR_MAPPED_SHAREDMEM = 2,
11
+ ALLOCATOR_MAPPED_EXCLUSIVE = 4,
12
+ ALLOCATOR_MAPPED_NOCREATE = 8,
13
+ ALLOCATOR_MAPPED_KEEPFD = 16,
14
+ ALLOCATOR_MAPPED_FROMFD = 32,
15
+ ALLOCATOR_MAPPED_UNLINK = 64
16
+ };
17
+
18
+ // Sentinel value/type to help distinguish the file descriptor constructor from
19
+ // the non-file descriptor constructor
20
+ enum WithFd { WITH_FD };
21
+
22
+ TORCH_API std::string NewProcessWideShmHandle();
23
+
24
+ class TORCH_API MapAllocator {
25
+ public:
26
+ MapAllocator(std::string_view filename, int flags, size_t size);
27
+ MapAllocator(
28
+ WithFd,
29
+ std::string_view filename,
30
+ int fd,
31
+ int flags,
32
+ size_t size);
33
+ MapAllocator(const MapAllocator&) = delete;
34
+ MapAllocator& operator=(const MapAllocator&) = delete;
35
+ MapAllocator(MapAllocator&&) = delete;
36
+ MapAllocator& operator=(MapAllocator&&) = delete;
37
+
38
+ const char* filename() const {
39
+ return filename_.c_str();
40
+ }
41
+ int fd() const {
42
+ #ifdef _WIN32
43
+ TORCH_CHECK(false, "MapAllocator::fd() is unsupported on Windows");
44
+ #else
45
+ return fd_;
46
+ #endif
47
+ }
48
+ ptrdiff_t size() const {
49
+ return size_;
50
+ }
51
+ // Return a pointer to the actual data for this allocator
52
+ // (in the case of the refcounted allocator, this is offset
53
+ // from the base pointer.)
54
+ virtual void* data() const {
55
+ return base_ptr_;
56
+ }
57
+
58
+ int flags() const {
59
+ return flags_;
60
+ }
61
+
62
+ static MapAllocator* fromDataPtr(const at::DataPtr&);
63
+ static at::DataPtr makeDataPtr(
64
+ std::string_view filename,
65
+ int flags,
66
+ size_t size,
67
+ size_t* actual_size_out);
68
+ static at::DataPtr makeDataPtr(
69
+ WithFd,
70
+ const char* filename,
71
+ int fd,
72
+ int flags,
73
+ size_t size,
74
+ size_t* actual_size_out);
75
+
76
+ // Closes the data. Helps us avoid destructor shenanigans
77
+ virtual void close();
78
+
79
+ // This is very dangerous. You have to redefine this destructor for each
80
+ // subclass
81
+ virtual ~MapAllocator();
82
+
83
+ protected:
84
+ bool closed_ = false;
85
+ std::string filename_;
86
+ int flags_ = 0;
87
+ ptrdiff_t size_; /* mapped size */
88
+ #ifdef _WIN32
89
+ void* handle_;
90
+ void* event_;
91
+ std::string eventname_;
92
+ #else
93
+ int fd_ = -1;
94
+ #endif
95
+ void* base_ptr_ = nullptr;
96
+ };
97
+
98
+ // Base-from-member idiom
99
+ struct TORCH_API RefcountedMapAllocatorArgCheck {
100
+ RefcountedMapAllocatorArgCheck(int flags);
101
+ };
102
+
103
+ class TORCH_API RefcountedMapAllocator : private RefcountedMapAllocatorArgCheck,
104
+ public MapAllocator {
105
+ public:
106
+ RefcountedMapAllocator(const char* filename, int flags, size_t size);
107
+ RefcountedMapAllocator(
108
+ WithFd,
109
+ const char* filename,
110
+ int fd,
111
+ int flags,
112
+ size_t size);
113
+
114
+ static RefcountedMapAllocator* fromDataPtr(const at::DataPtr&);
115
+ RefcountedMapAllocator(const RefcountedMapAllocator&) = delete;
116
+ RefcountedMapAllocator(RefcountedMapAllocator&&) = delete;
117
+ RefcountedMapAllocator& operator=(const RefcountedMapAllocator&) = delete;
118
+ RefcountedMapAllocator& operator=(RefcountedMapAllocator&&) = delete;
119
+ static at::DataPtr makeDataPtr(
120
+ const char* filename,
121
+ int flags,
122
+ size_t size,
123
+ size_t* actual_size_out);
124
+ static at::DataPtr makeDataPtr(
125
+ WithFd,
126
+ const char* filename,
127
+ int fd,
128
+ int flags,
129
+ size_t size,
130
+ size_t* actual_size_out);
131
+
132
+ void* data() const override;
133
+
134
+ void incref();
135
+ int decref();
136
+ void close() override;
137
+
138
+ ~RefcountedMapAllocator() override {
139
+ RefcountedMapAllocator::close();
140
+ }
141
+
142
+ protected:
143
+ void checkFlags();
144
+ void initializeAlloc();
145
+ };
146
+
147
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/MetaFunctions_inl.h ADDED
@@ -0,0 +1,326 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+ // @generated by torchgen/gen.py from DispatchKeyFunctions_inl.h
3
+
4
+ // NB: The implementing C++ file is RegisterDispatchKey.cpp
5
+
6
+ // The only #includes we need are for custom classes that have defaults in the C++ API
7
+ #include <c10/core/MemoryFormat.h>
8
+ #include <c10/core/Scalar.h>
9
+ #include <ATen/core/Reduction.h>
10
+
11
+ #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
12
+ #error This change adds a dependency on all pytorch operators, meaning the \
13
+ file will need to be re-compiled every time an operator is changed or added. \
14
+ Consider including a specific operator from \
15
+ <ATen/ops/{my_operator}_meta_dispatch.h>. \
16
+ See NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
17
+ #endif
18
+
19
+ #include <ATen/ops/_add_relu_meta_dispatch.h>
20
+ #include <ATen/ops/_addmm_activation_meta_dispatch.h>
21
+ #include <ATen/ops/_amp_update_scale_meta_dispatch.h>
22
+ #include <ATen/ops/_assert_tensor_metadata_meta_dispatch.h>
23
+ #include <ATen/ops/_coalesced_meta_dispatch.h>
24
+ #include <ATen/ops/_convert_indices_from_coo_to_csr_meta_dispatch.h>
25
+ #include <ATen/ops/_convert_indices_from_csr_to_coo_meta_dispatch.h>
26
+ #include <ATen/ops/_ctc_loss_meta_dispatch.h>
27
+ #include <ATen/ops/_efficientzerotensor_meta_dispatch.h>
28
+ #include <ATen/ops/_fill_mem_eff_dropout_mask_meta_dispatch.h>
29
+ #include <ATen/ops/_fused_sdp_choice_meta_dispatch.h>
30
+ #include <ATen/ops/_index_put_impl_meta_dispatch.h>
31
+ #include <ATen/ops/_linalg_det_meta_dispatch.h>
32
+ #include <ATen/ops/_linalg_eigh_meta_dispatch.h>
33
+ #include <ATen/ops/_linalg_slogdet_meta_dispatch.h>
34
+ #include <ATen/ops/_linalg_solve_ex_meta_dispatch.h>
35
+ #include <ATen/ops/_linalg_svd_meta_dispatch.h>
36
+ #include <ATen/ops/_log_softmax_meta_dispatch.h>
37
+ #include <ATen/ops/_log_softmax_backward_data_meta_dispatch.h>
38
+ #include <ATen/ops/_mkldnn_transpose_meta_dispatch.h>
39
+ #include <ATen/ops/_reshape_alias_meta_dispatch.h>
40
+ #include <ATen/ops/_resize_output_meta_dispatch.h>
41
+ #include <ATen/ops/_softmax_meta_dispatch.h>
42
+ #include <ATen/ops/_softmax_backward_data_meta_dispatch.h>
43
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_meta_dispatch.h>
44
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_and_tensors_meta_dispatch.h>
45
+ #include <ATen/ops/_upsample_bicubic2d_aa_meta_dispatch.h>
46
+ #include <ATen/ops/_upsample_bicubic2d_aa_backward_meta_dispatch.h>
47
+ #include <ATen/ops/_upsample_bilinear2d_aa_meta_dispatch.h>
48
+ #include <ATen/ops/_upsample_bilinear2d_aa_backward_meta_dispatch.h>
49
+ #include <ATen/ops/_upsample_nearest_exact1d_meta_dispatch.h>
50
+ #include <ATen/ops/_upsample_nearest_exact1d_backward_meta_dispatch.h>
51
+ #include <ATen/ops/_upsample_nearest_exact2d_meta_dispatch.h>
52
+ #include <ATen/ops/_upsample_nearest_exact2d_backward_meta_dispatch.h>
53
+ #include <ATen/ops/_upsample_nearest_exact3d_meta_dispatch.h>
54
+ #include <ATen/ops/_upsample_nearest_exact3d_backward_meta_dispatch.h>
55
+ #include <ATen/ops/acos_meta_dispatch.h>
56
+ #include <ATen/ops/acosh_meta_dispatch.h>
57
+ #include <ATen/ops/adaptive_max_pool2d_meta_dispatch.h>
58
+ #include <ATen/ops/adaptive_max_pool2d_backward_meta_dispatch.h>
59
+ #include <ATen/ops/adaptive_max_pool3d_meta_dispatch.h>
60
+ #include <ATen/ops/adaptive_max_pool3d_backward_meta_dispatch.h>
61
+ #include <ATen/ops/add_meta_dispatch.h>
62
+ #include <ATen/ops/addbmm_meta_dispatch.h>
63
+ #include <ATen/ops/addcdiv_meta_dispatch.h>
64
+ #include <ATen/ops/addcmul_meta_dispatch.h>
65
+ #include <ATen/ops/addmm_meta_dispatch.h>
66
+ #include <ATen/ops/addmv_meta_dispatch.h>
67
+ #include <ATen/ops/all_meta_dispatch.h>
68
+ #include <ATen/ops/amax_meta_dispatch.h>
69
+ #include <ATen/ops/amin_meta_dispatch.h>
70
+ #include <ATen/ops/aminmax_meta_dispatch.h>
71
+ #include <ATen/ops/any_meta_dispatch.h>
72
+ #include <ATen/ops/arange_meta_dispatch.h>
73
+ #include <ATen/ops/argmax_meta_dispatch.h>
74
+ #include <ATen/ops/argmin_meta_dispatch.h>
75
+ #include <ATen/ops/as_strided_meta_dispatch.h>
76
+ #include <ATen/ops/asin_meta_dispatch.h>
77
+ #include <ATen/ops/asinh_meta_dispatch.h>
78
+ #include <ATen/ops/atan_meta_dispatch.h>
79
+ #include <ATen/ops/atan2_meta_dispatch.h>
80
+ #include <ATen/ops/atanh_meta_dispatch.h>
81
+ #include <ATen/ops/avg_pool2d_meta_dispatch.h>
82
+ #include <ATen/ops/avg_pool2d_backward_meta_dispatch.h>
83
+ #include <ATen/ops/avg_pool3d_meta_dispatch.h>
84
+ #include <ATen/ops/avg_pool3d_backward_meta_dispatch.h>
85
+ #include <ATen/ops/baddbmm_meta_dispatch.h>
86
+ #include <ATen/ops/bernoulli_meta_dispatch.h>
87
+ #include <ATen/ops/bitwise_and_meta_dispatch.h>
88
+ #include <ATen/ops/bitwise_left_shift_meta_dispatch.h>
89
+ #include <ATen/ops/bitwise_not_meta_dispatch.h>
90
+ #include <ATen/ops/bitwise_or_meta_dispatch.h>
91
+ #include <ATen/ops/bitwise_right_shift_meta_dispatch.h>
92
+ #include <ATen/ops/bitwise_xor_meta_dispatch.h>
93
+ #include <ATen/ops/bmm_meta_dispatch.h>
94
+ #include <ATen/ops/cat_meta_dispatch.h>
95
+ #include <ATen/ops/cauchy_meta_dispatch.h>
96
+ #include <ATen/ops/ceil_meta_dispatch.h>
97
+ #include <ATen/ops/clamp_meta_dispatch.h>
98
+ #include <ATen/ops/clamp_max_meta_dispatch.h>
99
+ #include <ATen/ops/clamp_min_meta_dispatch.h>
100
+ #include <ATen/ops/copy_meta_dispatch.h>
101
+ #include <ATen/ops/copy_sparse_to_sparse_meta_dispatch.h>
102
+ #include <ATen/ops/copysign_meta_dispatch.h>
103
+ #include <ATen/ops/cos_meta_dispatch.h>
104
+ #include <ATen/ops/cosh_meta_dispatch.h>
105
+ #include <ATen/ops/cumprod_meta_dispatch.h>
106
+ #include <ATen/ops/cumsum_meta_dispatch.h>
107
+ #include <ATen/ops/digamma_meta_dispatch.h>
108
+ #include <ATen/ops/div_meta_dispatch.h>
109
+ #include <ATen/ops/elu_meta_dispatch.h>
110
+ #include <ATen/ops/elu_backward_meta_dispatch.h>
111
+ #include <ATen/ops/embedding_renorm_meta_dispatch.h>
112
+ #include <ATen/ops/empty_meta_dispatch.h>
113
+ #include <ATen/ops/empty_strided_meta_dispatch.h>
114
+ #include <ATen/ops/eq_meta_dispatch.h>
115
+ #include <ATen/ops/erf_meta_dispatch.h>
116
+ #include <ATen/ops/erfc_meta_dispatch.h>
117
+ #include <ATen/ops/erfinv_meta_dispatch.h>
118
+ #include <ATen/ops/exp_meta_dispatch.h>
119
+ #include <ATen/ops/exp2_meta_dispatch.h>
120
+ #include <ATen/ops/expm1_meta_dispatch.h>
121
+ #include <ATen/ops/exponential_meta_dispatch.h>
122
+ #include <ATen/ops/eye_meta_dispatch.h>
123
+ #include <ATen/ops/fill_meta_dispatch.h>
124
+ #include <ATen/ops/floor_meta_dispatch.h>
125
+ #include <ATen/ops/floor_divide_meta_dispatch.h>
126
+ #include <ATen/ops/fmax_meta_dispatch.h>
127
+ #include <ATen/ops/fmin_meta_dispatch.h>
128
+ #include <ATen/ops/fmod_meta_dispatch.h>
129
+ #include <ATen/ops/frac_meta_dispatch.h>
130
+ #include <ATen/ops/fractional_max_pool2d_meta_dispatch.h>
131
+ #include <ATen/ops/fractional_max_pool2d_backward_meta_dispatch.h>
132
+ #include <ATen/ops/fractional_max_pool3d_meta_dispatch.h>
133
+ #include <ATen/ops/gather_meta_dispatch.h>
134
+ #include <ATen/ops/gcd_meta_dispatch.h>
135
+ #include <ATen/ops/ge_meta_dispatch.h>
136
+ #include <ATen/ops/gelu_meta_dispatch.h>
137
+ #include <ATen/ops/gelu_backward_meta_dispatch.h>
138
+ #include <ATen/ops/geometric_meta_dispatch.h>
139
+ #include <ATen/ops/glu_meta_dispatch.h>
140
+ #include <ATen/ops/gt_meta_dispatch.h>
141
+ #include <ATen/ops/hardshrink_meta_dispatch.h>
142
+ #include <ATen/ops/hardshrink_backward_meta_dispatch.h>
143
+ #include <ATen/ops/hardsigmoid_meta_dispatch.h>
144
+ #include <ATen/ops/hardsigmoid_backward_meta_dispatch.h>
145
+ #include <ATen/ops/hardswish_meta_dispatch.h>
146
+ #include <ATen/ops/hardtanh_meta_dispatch.h>
147
+ #include <ATen/ops/heaviside_meta_dispatch.h>
148
+ #include <ATen/ops/hypot_meta_dispatch.h>
149
+ #include <ATen/ops/i0_meta_dispatch.h>
150
+ #include <ATen/ops/igamma_meta_dispatch.h>
151
+ #include <ATen/ops/igammac_meta_dispatch.h>
152
+ #include <ATen/ops/index_meta_dispatch.h>
153
+ #include <ATen/ops/index_add_meta_dispatch.h>
154
+ #include <ATen/ops/index_copy_meta_dispatch.h>
155
+ #include <ATen/ops/index_fill_meta_dispatch.h>
156
+ #include <ATen/ops/index_reduce_meta_dispatch.h>
157
+ #include <ATen/ops/isin_meta_dispatch.h>
158
+ #include <ATen/ops/isneginf_meta_dispatch.h>
159
+ #include <ATen/ops/isposinf_meta_dispatch.h>
160
+ #include <ATen/ops/lcm_meta_dispatch.h>
161
+ #include <ATen/ops/le_meta_dispatch.h>
162
+ #include <ATen/ops/leaky_relu_meta_dispatch.h>
163
+ #include <ATen/ops/leaky_relu_backward_meta_dispatch.h>
164
+ #include <ATen/ops/lerp_meta_dispatch.h>
165
+ #include <ATen/ops/lgamma_meta_dispatch.h>
166
+ #include <ATen/ops/linalg_cholesky_ex_meta_dispatch.h>
167
+ #include <ATen/ops/linalg_cross_meta_dispatch.h>
168
+ #include <ATen/ops/linalg_inv_ex_meta_dispatch.h>
169
+ #include <ATen/ops/linalg_ldl_factor_ex_meta_dispatch.h>
170
+ #include <ATen/ops/linalg_ldl_solve_meta_dispatch.h>
171
+ #include <ATen/ops/linalg_lu_meta_dispatch.h>
172
+ #include <ATen/ops/linalg_lu_factor_ex_meta_dispatch.h>
173
+ #include <ATen/ops/linalg_lu_solve_meta_dispatch.h>
174
+ #include <ATen/ops/linalg_qr_meta_dispatch.h>
175
+ #include <ATen/ops/linalg_vector_norm_meta_dispatch.h>
176
+ #include <ATen/ops/linspace_meta_dispatch.h>
177
+ #include <ATen/ops/log_meta_dispatch.h>
178
+ #include <ATen/ops/log10_meta_dispatch.h>
179
+ #include <ATen/ops/log1p_meta_dispatch.h>
180
+ #include <ATen/ops/log2_meta_dispatch.h>
181
+ #include <ATen/ops/log_normal_meta_dispatch.h>
182
+ #include <ATen/ops/logaddexp_meta_dispatch.h>
183
+ #include <ATen/ops/logaddexp2_meta_dispatch.h>
184
+ #include <ATen/ops/logit_meta_dispatch.h>
185
+ #include <ATen/ops/logit_backward_meta_dispatch.h>
186
+ #include <ATen/ops/logspace_meta_dispatch.h>
187
+ #include <ATen/ops/lshift_meta_dispatch.h>
188
+ #include <ATen/ops/lt_meta_dispatch.h>
189
+ #include <ATen/ops/lu_unpack_meta_dispatch.h>
190
+ #include <ATen/ops/masked_fill_meta_dispatch.h>
191
+ #include <ATen/ops/masked_scatter_meta_dispatch.h>
192
+ #include <ATen/ops/max_meta_dispatch.h>
193
+ #include <ATen/ops/max_pool2d_with_indices_meta_dispatch.h>
194
+ #include <ATen/ops/max_pool2d_with_indices_backward_meta_dispatch.h>
195
+ #include <ATen/ops/maximum_meta_dispatch.h>
196
+ #include <ATen/ops/mean_meta_dispatch.h>
197
+ #include <ATen/ops/min_meta_dispatch.h>
198
+ #include <ATen/ops/minimum_meta_dispatch.h>
199
+ #include <ATen/ops/mish_meta_dispatch.h>
200
+ #include <ATen/ops/mm_meta_dispatch.h>
201
+ #include <ATen/ops/mse_loss_meta_dispatch.h>
202
+ #include <ATen/ops/mul_meta_dispatch.h>
203
+ #include <ATen/ops/ne_meta_dispatch.h>
204
+ #include <ATen/ops/neg_meta_dispatch.h>
205
+ #include <ATen/ops/nextafter_meta_dispatch.h>
206
+ #include <ATen/ops/nll_loss_backward_meta_dispatch.h>
207
+ #include <ATen/ops/nll_loss_forward_meta_dispatch.h>
208
+ #include <ATen/ops/norm_meta_dispatch.h>
209
+ #include <ATen/ops/normal_meta_dispatch.h>
210
+ #include <ATen/ops/polygamma_meta_dispatch.h>
211
+ #include <ATen/ops/pow_meta_dispatch.h>
212
+ #include <ATen/ops/prod_meta_dispatch.h>
213
+ #include <ATen/ops/put_meta_dispatch.h>
214
+ #include <ATen/ops/random_meta_dispatch.h>
215
+ #include <ATen/ops/range_meta_dispatch.h>
216
+ #include <ATen/ops/reciprocal_meta_dispatch.h>
217
+ #include <ATen/ops/reflection_pad1d_meta_dispatch.h>
218
+ #include <ATen/ops/reflection_pad1d_backward_meta_dispatch.h>
219
+ #include <ATen/ops/reflection_pad3d_meta_dispatch.h>
220
+ #include <ATen/ops/reflection_pad3d_backward_meta_dispatch.h>
221
+ #include <ATen/ops/relu_meta_dispatch.h>
222
+ #include <ATen/ops/remainder_meta_dispatch.h>
223
+ #include <ATen/ops/renorm_meta_dispatch.h>
224
+ #include <ATen/ops/replication_pad1d_meta_dispatch.h>
225
+ #include <ATen/ops/replication_pad1d_backward_meta_dispatch.h>
226
+ #include <ATen/ops/replication_pad2d_meta_dispatch.h>
227
+ #include <ATen/ops/replication_pad3d_meta_dispatch.h>
228
+ #include <ATen/ops/resize_meta_dispatch.h>
229
+ #include <ATen/ops/resize_as_sparse_meta_dispatch.h>
230
+ #include <ATen/ops/round_meta_dispatch.h>
231
+ #include <ATen/ops/rrelu_with_noise_meta_dispatch.h>
232
+ #include <ATen/ops/rshift_meta_dispatch.h>
233
+ #include <ATen/ops/rsqrt_meta_dispatch.h>
234
+ #include <ATen/ops/scatter_meta_dispatch.h>
235
+ #include <ATen/ops/scatter_add_meta_dispatch.h>
236
+ #include <ATen/ops/scatter_reduce_meta_dispatch.h>
237
+ #include <ATen/ops/set_meta_dispatch.h>
238
+ #include <ATen/ops/sgn_meta_dispatch.h>
239
+ #include <ATen/ops/sigmoid_meta_dispatch.h>
240
+ #include <ATen/ops/sigmoid_backward_meta_dispatch.h>
241
+ #include <ATen/ops/sign_meta_dispatch.h>
242
+ #include <ATen/ops/signbit_meta_dispatch.h>
243
+ #include <ATen/ops/silu_meta_dispatch.h>
244
+ #include <ATen/ops/silu_backward_meta_dispatch.h>
245
+ #include <ATen/ops/sin_meta_dispatch.h>
246
+ #include <ATen/ops/sinc_meta_dispatch.h>
247
+ #include <ATen/ops/sinh_meta_dispatch.h>
248
+ #include <ATen/ops/slow_conv_transpose2d_meta_dispatch.h>
249
+ #include <ATen/ops/smooth_l1_loss_meta_dispatch.h>
250
+ #include <ATen/ops/softplus_meta_dispatch.h>
251
+ #include <ATen/ops/softplus_backward_meta_dispatch.h>
252
+ #include <ATen/ops/softshrink_meta_dispatch.h>
253
+ #include <ATen/ops/softshrink_backward_meta_dispatch.h>
254
+ #include <ATen/ops/sort_meta_dispatch.h>
255
+ #include <ATen/ops/sparse_resize_meta_dispatch.h>
256
+ #include <ATen/ops/sparse_resize_and_clear_meta_dispatch.h>
257
+ #include <ATen/ops/special_airy_ai_meta_dispatch.h>
258
+ #include <ATen/ops/special_bessel_j0_meta_dispatch.h>
259
+ #include <ATen/ops/special_bessel_j1_meta_dispatch.h>
260
+ #include <ATen/ops/special_bessel_y0_meta_dispatch.h>
261
+ #include <ATen/ops/special_bessel_y1_meta_dispatch.h>
262
+ #include <ATen/ops/special_chebyshev_polynomial_t_meta_dispatch.h>
263
+ #include <ATen/ops/special_chebyshev_polynomial_u_meta_dispatch.h>
264
+ #include <ATen/ops/special_chebyshev_polynomial_v_meta_dispatch.h>
265
+ #include <ATen/ops/special_chebyshev_polynomial_w_meta_dispatch.h>
266
+ #include <ATen/ops/special_entr_meta_dispatch.h>
267
+ #include <ATen/ops/special_erfcx_meta_dispatch.h>
268
+ #include <ATen/ops/special_hermite_polynomial_h_meta_dispatch.h>
269
+ #include <ATen/ops/special_hermite_polynomial_he_meta_dispatch.h>
270
+ #include <ATen/ops/special_i0e_meta_dispatch.h>
271
+ #include <ATen/ops/special_i1_meta_dispatch.h>
272
+ #include <ATen/ops/special_i1e_meta_dispatch.h>
273
+ #include <ATen/ops/special_laguerre_polynomial_l_meta_dispatch.h>
274
+ #include <ATen/ops/special_legendre_polynomial_p_meta_dispatch.h>
275
+ #include <ATen/ops/special_log_ndtr_meta_dispatch.h>
276
+ #include <ATen/ops/special_modified_bessel_i0_meta_dispatch.h>
277
+ #include <ATen/ops/special_modified_bessel_i1_meta_dispatch.h>
278
+ #include <ATen/ops/special_modified_bessel_k0_meta_dispatch.h>
279
+ #include <ATen/ops/special_modified_bessel_k1_meta_dispatch.h>
280
+ #include <ATen/ops/special_ndtri_meta_dispatch.h>
281
+ #include <ATen/ops/special_scaled_modified_bessel_k0_meta_dispatch.h>
282
+ #include <ATen/ops/special_scaled_modified_bessel_k1_meta_dispatch.h>
283
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_t_meta_dispatch.h>
284
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_u_meta_dispatch.h>
285
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_v_meta_dispatch.h>
286
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_w_meta_dispatch.h>
287
+ #include <ATen/ops/special_spherical_bessel_j0_meta_dispatch.h>
288
+ #include <ATen/ops/special_xlog1py_meta_dispatch.h>
289
+ #include <ATen/ops/special_zeta_meta_dispatch.h>
290
+ #include <ATen/ops/sqrt_meta_dispatch.h>
291
+ #include <ATen/ops/sub_meta_dispatch.h>
292
+ #include <ATen/ops/sum_meta_dispatch.h>
293
+ #include <ATen/ops/tan_meta_dispatch.h>
294
+ #include <ATen/ops/tanh_meta_dispatch.h>
295
+ #include <ATen/ops/tanh_backward_meta_dispatch.h>
296
+ #include <ATen/ops/threshold_meta_dispatch.h>
297
+ #include <ATen/ops/threshold_backward_meta_dispatch.h>
298
+ #include <ATen/ops/topk_meta_dispatch.h>
299
+ #include <ATen/ops/triangular_solve_meta_dispatch.h>
300
+ #include <ATen/ops/tril_meta_dispatch.h>
301
+ #include <ATen/ops/triu_meta_dispatch.h>
302
+ #include <ATen/ops/trunc_meta_dispatch.h>
303
+ #include <ATen/ops/unfold_meta_dispatch.h>
304
+ #include <ATen/ops/uniform_meta_dispatch.h>
305
+ #include <ATen/ops/upsample_bicubic2d_meta_dispatch.h>
306
+ #include <ATen/ops/upsample_bicubic2d_backward_meta_dispatch.h>
307
+ #include <ATen/ops/upsample_bilinear2d_meta_dispatch.h>
308
+ #include <ATen/ops/upsample_bilinear2d_backward_meta_dispatch.h>
309
+ #include <ATen/ops/upsample_linear1d_meta_dispatch.h>
310
+ #include <ATen/ops/upsample_linear1d_backward_meta_dispatch.h>
311
+ #include <ATen/ops/upsample_nearest1d_meta_dispatch.h>
312
+ #include <ATen/ops/upsample_nearest1d_backward_meta_dispatch.h>
313
+ #include <ATen/ops/upsample_nearest2d_meta_dispatch.h>
314
+ #include <ATen/ops/upsample_nearest2d_backward_meta_dispatch.h>
315
+ #include <ATen/ops/upsample_nearest3d_meta_dispatch.h>
316
+ #include <ATen/ops/upsample_nearest3d_backward_meta_dispatch.h>
317
+ #include <ATen/ops/upsample_trilinear3d_meta_dispatch.h>
318
+ #include <ATen/ops/upsample_trilinear3d_backward_meta_dispatch.h>
319
+ #include <ATen/ops/view_meta_dispatch.h>
320
+ #include <ATen/ops/view_as_complex_meta_dispatch.h>
321
+ #include <ATen/ops/view_as_real_meta_dispatch.h>
322
+ #include <ATen/ops/xlogy_meta_dispatch.h>
323
+ #include <ATen/ops/zero_meta_dispatch.h>
324
+
325
+
326
+
lib/python3.12/site-packages/torch/include/ATen/MethodOperators.h ADDED
@@ -0,0 +1,443 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ // @generated by torchgen/gen.py from MethodOperators.h
4
+
5
+ #ifdef TORCH_ASSERT_NO_OPERATORS
6
+ #error This change adds a dependency on native_functions.yaml, \
7
+ meaning the file will need to be re-compiled every time an operator \
8
+ is changed or added. Consider if your change would be better placed in \
9
+ another file, or if a more specific header might achieve the same goal. \
10
+ See NOTE: [Tensor vs. TensorBase]
11
+ #endif
12
+
13
+ // Forward declarations of any types needed in the operator signatures.
14
+ // We can't directly include these classes because it will cause circular include dependencies.
15
+ // This file is included by TensorBody.h, which defines the Tensor class.
16
+ #include <ATen/core/ATen_fwd.h>
17
+
18
+ #include <ATen/ops/_addmm_activation_ops.h>
19
+ #include <ATen/ops/_autocast_to_full_precision_ops.h>
20
+ #include <ATen/ops/_autocast_to_reduced_precision_ops.h>
21
+ #include <ATen/ops/_backward_ops.h>
22
+ #include <ATen/ops/_coalesced_ops.h>
23
+ #include <ATen/ops/_conj_ops.h>
24
+ #include <ATen/ops/_conj_physical_ops.h>
25
+ #include <ATen/ops/_dimI_ops.h>
26
+ #include <ATen/ops/_dimV_ops.h>
27
+ #include <ATen/ops/_fw_primal_ops.h>
28
+ #include <ATen/ops/_indices_ops.h>
29
+ #include <ATen/ops/_is_all_true_ops.h>
30
+ #include <ATen/ops/_is_any_true_ops.h>
31
+ #include <ATen/ops/_is_zerotensor_ops.h>
32
+ #include <ATen/ops/_lazy_clone_ops.h>
33
+ #include <ATen/ops/_neg_view_ops.h>
34
+ #include <ATen/ops/_nested_tensor_size_ops.h>
35
+ #include <ATen/ops/_nested_tensor_storage_offsets_ops.h>
36
+ #include <ATen/ops/_nested_tensor_strides_ops.h>
37
+ #include <ATen/ops/_nnz_ops.h>
38
+ #include <ATen/ops/_reshape_alias_ops.h>
39
+ #include <ATen/ops/_sparse_mask_projection_ops.h>
40
+ #include <ATen/ops/_to_dense_ops.h>
41
+ #include <ATen/ops/_to_sparse_bsc_ops.h>
42
+ #include <ATen/ops/_to_sparse_bsr_ops.h>
43
+ #include <ATen/ops/_to_sparse_csc_ops.h>
44
+ #include <ATen/ops/_to_sparse_csr_ops.h>
45
+ #include <ATen/ops/_to_sparse_ops.h>
46
+ #include <ATen/ops/_values_ops.h>
47
+ #include <ATen/ops/_version_ops.h>
48
+ #include <ATen/ops/abs_ops.h>
49
+ #include <ATen/ops/absolute_ops.h>
50
+ #include <ATen/ops/acos_ops.h>
51
+ #include <ATen/ops/acosh_ops.h>
52
+ #include <ATen/ops/add_ops.h>
53
+ #include <ATen/ops/addbmm_ops.h>
54
+ #include <ATen/ops/addcdiv_ops.h>
55
+ #include <ATen/ops/addcmul_ops.h>
56
+ #include <ATen/ops/addmm_ops.h>
57
+ #include <ATen/ops/addmv_ops.h>
58
+ #include <ATen/ops/addr_ops.h>
59
+ #include <ATen/ops/adjoint_ops.h>
60
+ #include <ATen/ops/alias_ops.h>
61
+ #include <ATen/ops/align_as_ops.h>
62
+ #include <ATen/ops/align_to_ops.h>
63
+ #include <ATen/ops/all_ops.h>
64
+ #include <ATen/ops/allclose_ops.h>
65
+ #include <ATen/ops/amax_ops.h>
66
+ #include <ATen/ops/amin_ops.h>
67
+ #include <ATen/ops/aminmax_ops.h>
68
+ #include <ATen/ops/and_ops.h>
69
+ #include <ATen/ops/angle_ops.h>
70
+ #include <ATen/ops/any_ops.h>
71
+ #include <ATen/ops/arccos_ops.h>
72
+ #include <ATen/ops/arccosh_ops.h>
73
+ #include <ATen/ops/arcsin_ops.h>
74
+ #include <ATen/ops/arcsinh_ops.h>
75
+ #include <ATen/ops/arctan2_ops.h>
76
+ #include <ATen/ops/arctan_ops.h>
77
+ #include <ATen/ops/arctanh_ops.h>
78
+ #include <ATen/ops/argmax_ops.h>
79
+ #include <ATen/ops/argmin_ops.h>
80
+ #include <ATen/ops/argsort_ops.h>
81
+ #include <ATen/ops/argwhere_ops.h>
82
+ #include <ATen/ops/as_strided_ops.h>
83
+ #include <ATen/ops/as_strided_scatter_ops.h>
84
+ #include <ATen/ops/asin_ops.h>
85
+ #include <ATen/ops/asinh_ops.h>
86
+ #include <ATen/ops/atan2_ops.h>
87
+ #include <ATen/ops/atan_ops.h>
88
+ #include <ATen/ops/atanh_ops.h>
89
+ #include <ATen/ops/baddbmm_ops.h>
90
+ #include <ATen/ops/bernoulli_ops.h>
91
+ #include <ATen/ops/bincount_ops.h>
92
+ #include <ATen/ops/bitwise_and_ops.h>
93
+ #include <ATen/ops/bitwise_left_shift_ops.h>
94
+ #include <ATen/ops/bitwise_not_ops.h>
95
+ #include <ATen/ops/bitwise_or_ops.h>
96
+ #include <ATen/ops/bitwise_right_shift_ops.h>
97
+ #include <ATen/ops/bitwise_xor_ops.h>
98
+ #include <ATen/ops/bmm_ops.h>
99
+ #include <ATen/ops/broadcast_to_ops.h>
100
+ #include <ATen/ops/cauchy_ops.h>
101
+ #include <ATen/ops/ccol_indices_ops.h>
102
+ #include <ATen/ops/ceil_ops.h>
103
+ #include <ATen/ops/chalf_ops.h>
104
+ #include <ATen/ops/cholesky_inverse_ops.h>
105
+ #include <ATen/ops/cholesky_ops.h>
106
+ #include <ATen/ops/cholesky_solve_ops.h>
107
+ #include <ATen/ops/chunk_ops.h>
108
+ #include <ATen/ops/clamp_max_ops.h>
109
+ #include <ATen/ops/clamp_min_ops.h>
110
+ #include <ATen/ops/clamp_ops.h>
111
+ #include <ATen/ops/clip_ops.h>
112
+ #include <ATen/ops/clone_ops.h>
113
+ #include <ATen/ops/coalesce_ops.h>
114
+ #include <ATen/ops/col_indices_ops.h>
115
+ #include <ATen/ops/conj_ops.h>
116
+ #include <ATen/ops/conj_physical_ops.h>
117
+ #include <ATen/ops/contiguous_ops.h>
118
+ #include <ATen/ops/copy_ops.h>
119
+ #include <ATen/ops/copysign_ops.h>
120
+ #include <ATen/ops/corrcoef_ops.h>
121
+ #include <ATen/ops/cos_ops.h>
122
+ #include <ATen/ops/cosh_ops.h>
123
+ #include <ATen/ops/count_nonzero_ops.h>
124
+ #include <ATen/ops/cov_ops.h>
125
+ #include <ATen/ops/cross_ops.h>
126
+ #include <ATen/ops/crow_indices_ops.h>
127
+ #include <ATen/ops/cummax_ops.h>
128
+ #include <ATen/ops/cummin_ops.h>
129
+ #include <ATen/ops/cumprod_ops.h>
130
+ #include <ATen/ops/cumsum_ops.h>
131
+ #include <ATen/ops/data_ops.h>
132
+ #include <ATen/ops/deg2rad_ops.h>
133
+ #include <ATen/ops/dense_dim_ops.h>
134
+ #include <ATen/ops/dequantize_ops.h>
135
+ #include <ATen/ops/det_ops.h>
136
+ #include <ATen/ops/detach_ops.h>
137
+ #include <ATen/ops/diag_embed_ops.h>
138
+ #include <ATen/ops/diag_ops.h>
139
+ #include <ATen/ops/diagflat_ops.h>
140
+ #include <ATen/ops/diagonal_ops.h>
141
+ #include <ATen/ops/diagonal_scatter_ops.h>
142
+ #include <ATen/ops/diff_ops.h>
143
+ #include <ATen/ops/digamma_ops.h>
144
+ #include <ATen/ops/dist_ops.h>
145
+ #include <ATen/ops/div_ops.h>
146
+ #include <ATen/ops/divide_ops.h>
147
+ #include <ATen/ops/dot_ops.h>
148
+ #include <ATen/ops/dsplit_ops.h>
149
+ #include <ATen/ops/eq_ops.h>
150
+ #include <ATen/ops/equal_ops.h>
151
+ #include <ATen/ops/erf_ops.h>
152
+ #include <ATen/ops/erfc_ops.h>
153
+ #include <ATen/ops/erfinv_ops.h>
154
+ #include <ATen/ops/exp2_ops.h>
155
+ #include <ATen/ops/exp_ops.h>
156
+ #include <ATen/ops/expand_as_ops.h>
157
+ #include <ATen/ops/expand_ops.h>
158
+ #include <ATen/ops/expm1_ops.h>
159
+ #include <ATen/ops/exponential_ops.h>
160
+ #include <ATen/ops/fill_diagonal_ops.h>
161
+ #include <ATen/ops/fill_ops.h>
162
+ #include <ATen/ops/fix_ops.h>
163
+ #include <ATen/ops/flatten_ops.h>
164
+ #include <ATen/ops/flip_ops.h>
165
+ #include <ATen/ops/fliplr_ops.h>
166
+ #include <ATen/ops/flipud_ops.h>
167
+ #include <ATen/ops/float_power_ops.h>
168
+ #include <ATen/ops/floor_divide_ops.h>
169
+ #include <ATen/ops/floor_ops.h>
170
+ #include <ATen/ops/fmax_ops.h>
171
+ #include <ATen/ops/fmin_ops.h>
172
+ #include <ATen/ops/fmod_ops.h>
173
+ #include <ATen/ops/frac_ops.h>
174
+ #include <ATen/ops/frexp_ops.h>
175
+ #include <ATen/ops/gather_ops.h>
176
+ #include <ATen/ops/gcd_ops.h>
177
+ #include <ATen/ops/ge_ops.h>
178
+ #include <ATen/ops/geometric_ops.h>
179
+ #include <ATen/ops/geqrf_ops.h>
180
+ #include <ATen/ops/ger_ops.h>
181
+ #include <ATen/ops/greater_equal_ops.h>
182
+ #include <ATen/ops/greater_ops.h>
183
+ #include <ATen/ops/gt_ops.h>
184
+ #include <ATen/ops/hardshrink_backward_ops.h>
185
+ #include <ATen/ops/hardshrink_ops.h>
186
+ #include <ATen/ops/heaviside_ops.h>
187
+ #include <ATen/ops/histc_ops.h>
188
+ #include <ATen/ops/histogram_ops.h>
189
+ #include <ATen/ops/hsplit_ops.h>
190
+ #include <ATen/ops/hypot_ops.h>
191
+ #include <ATen/ops/i0_ops.h>
192
+ #include <ATen/ops/igamma_ops.h>
193
+ #include <ATen/ops/igammac_ops.h>
194
+ #include <ATen/ops/index_add_ops.h>
195
+ #include <ATen/ops/index_copy_ops.h>
196
+ #include <ATen/ops/index_fill_ops.h>
197
+ #include <ATen/ops/index_ops.h>
198
+ #include <ATen/ops/index_put_ops.h>
199
+ #include <ATen/ops/index_reduce_ops.h>
200
+ #include <ATen/ops/index_select_ops.h>
201
+ #include <ATen/ops/indices_ops.h>
202
+ #include <ATen/ops/inner_ops.h>
203
+ #include <ATen/ops/int_repr_ops.h>
204
+ #include <ATen/ops/inverse_ops.h>
205
+ #include <ATen/ops/is_coalesced_ops.h>
206
+ #include <ATen/ops/is_complex_ops.h>
207
+ #include <ATen/ops/is_conj_ops.h>
208
+ #include <ATen/ops/is_distributed_ops.h>
209
+ #include <ATen/ops/is_floating_point_ops.h>
210
+ #include <ATen/ops/is_inference_ops.h>
211
+ #include <ATen/ops/is_leaf_ops.h>
212
+ #include <ATen/ops/is_neg_ops.h>
213
+ #include <ATen/ops/is_nonzero_ops.h>
214
+ #include <ATen/ops/is_pinned_ops.h>
215
+ #include <ATen/ops/is_same_size_ops.h>
216
+ #include <ATen/ops/is_set_to_ops.h>
217
+ #include <ATen/ops/is_signed_ops.h>
218
+ #include <ATen/ops/isclose_ops.h>
219
+ #include <ATen/ops/isfinite_ops.h>
220
+ #include <ATen/ops/isinf_ops.h>
221
+ #include <ATen/ops/isnan_ops.h>
222
+ #include <ATen/ops/isneginf_ops.h>
223
+ #include <ATen/ops/isposinf_ops.h>
224
+ #include <ATen/ops/isreal_ops.h>
225
+ #include <ATen/ops/istft_ops.h>
226
+ #include <ATen/ops/item_ops.h>
227
+ #include <ATen/ops/kron_ops.h>
228
+ #include <ATen/ops/kthvalue_ops.h>
229
+ #include <ATen/ops/lcm_ops.h>
230
+ #include <ATen/ops/ldexp_ops.h>
231
+ #include <ATen/ops/le_ops.h>
232
+ #include <ATen/ops/lerp_ops.h>
233
+ #include <ATen/ops/less_equal_ops.h>
234
+ #include <ATen/ops/less_ops.h>
235
+ #include <ATen/ops/lgamma_ops.h>
236
+ #include <ATen/ops/log10_ops.h>
237
+ #include <ATen/ops/log1p_ops.h>
238
+ #include <ATen/ops/log2_ops.h>
239
+ #include <ATen/ops/log_normal_ops.h>
240
+ #include <ATen/ops/log_ops.h>
241
+ #include <ATen/ops/log_softmax_ops.h>
242
+ #include <ATen/ops/logaddexp2_ops.h>
243
+ #include <ATen/ops/logaddexp_ops.h>
244
+ #include <ATen/ops/logcumsumexp_ops.h>
245
+ #include <ATen/ops/logdet_ops.h>
246
+ #include <ATen/ops/logical_and_ops.h>
247
+ #include <ATen/ops/logical_not_ops.h>
248
+ #include <ATen/ops/logical_or_ops.h>
249
+ #include <ATen/ops/logical_xor_ops.h>
250
+ #include <ATen/ops/logit_ops.h>
251
+ #include <ATen/ops/logsumexp_ops.h>
252
+ #include <ATen/ops/lshift_ops.h>
253
+ #include <ATen/ops/lt_ops.h>
254
+ #include <ATen/ops/lu_solve_ops.h>
255
+ #include <ATen/ops/mH_ops.h>
256
+ #include <ATen/ops/mT_ops.h>
257
+ #include <ATen/ops/masked_fill_ops.h>
258
+ #include <ATen/ops/masked_scatter_ops.h>
259
+ #include <ATen/ops/masked_select_ops.h>
260
+ #include <ATen/ops/matmul_ops.h>
261
+ #include <ATen/ops/matrix_H_ops.h>
262
+ #include <ATen/ops/matrix_exp_ops.h>
263
+ #include <ATen/ops/matrix_power_ops.h>
264
+ #include <ATen/ops/max_ops.h>
265
+ #include <ATen/ops/maximum_ops.h>
266
+ #include <ATen/ops/mean_ops.h>
267
+ #include <ATen/ops/median_ops.h>
268
+ #include <ATen/ops/min_ops.h>
269
+ #include <ATen/ops/minimum_ops.h>
270
+ #include <ATen/ops/mm_ops.h>
271
+ #include <ATen/ops/mode_ops.h>
272
+ #include <ATen/ops/moveaxis_ops.h>
273
+ #include <ATen/ops/movedim_ops.h>
274
+ #include <ATen/ops/msort_ops.h>
275
+ #include <ATen/ops/mul_ops.h>
276
+ #include <ATen/ops/multinomial_ops.h>
277
+ #include <ATen/ops/multiply_ops.h>
278
+ #include <ATen/ops/mv_ops.h>
279
+ #include <ATen/ops/mvlgamma_ops.h>
280
+ #include <ATen/ops/nan_to_num_ops.h>
281
+ #include <ATen/ops/nanmean_ops.h>
282
+ #include <ATen/ops/nanmedian_ops.h>
283
+ #include <ATen/ops/nanquantile_ops.h>
284
+ #include <ATen/ops/nansum_ops.h>
285
+ #include <ATen/ops/narrow_copy_ops.h>
286
+ #include <ATen/ops/narrow_ops.h>
287
+ #include <ATen/ops/ne_ops.h>
288
+ #include <ATen/ops/neg_ops.h>
289
+ #include <ATen/ops/negative_ops.h>
290
+ #include <ATen/ops/new_empty_ops.h>
291
+ #include <ATen/ops/new_empty_strided_ops.h>
292
+ #include <ATen/ops/new_full_ops.h>
293
+ #include <ATen/ops/new_ones_ops.h>
294
+ #include <ATen/ops/new_zeros_ops.h>
295
+ #include <ATen/ops/nextafter_ops.h>
296
+ #include <ATen/ops/nonzero_numpy_ops.h>
297
+ #include <ATen/ops/nonzero_ops.h>
298
+ #include <ATen/ops/nonzero_static_ops.h>
299
+ #include <ATen/ops/norm_ops.h>
300
+ #include <ATen/ops/normal_ops.h>
301
+ #include <ATen/ops/not_equal_ops.h>
302
+ #include <ATen/ops/numpy_T_ops.h>
303
+ #include <ATen/ops/or_ops.h>
304
+ #include <ATen/ops/orgqr_ops.h>
305
+ #include <ATen/ops/ormqr_ops.h>
306
+ #include <ATen/ops/outer_ops.h>
307
+ #include <ATen/ops/output_nr_ops.h>
308
+ #include <ATen/ops/permute_ops.h>
309
+ #include <ATen/ops/pin_memory_ops.h>
310
+ #include <ATen/ops/pinverse_ops.h>
311
+ #include <ATen/ops/polygamma_ops.h>
312
+ #include <ATen/ops/positive_ops.h>
313
+ #include <ATen/ops/pow_ops.h>
314
+ #include <ATen/ops/prelu_ops.h>
315
+ #include <ATen/ops/prod_ops.h>
316
+ #include <ATen/ops/put_ops.h>
317
+ #include <ATen/ops/q_per_channel_axis_ops.h>
318
+ #include <ATen/ops/q_per_channel_scales_ops.h>
319
+ #include <ATen/ops/q_per_channel_zero_points_ops.h>
320
+ #include <ATen/ops/q_scale_ops.h>
321
+ #include <ATen/ops/q_zero_point_ops.h>
322
+ #include <ATen/ops/qr_ops.h>
323
+ #include <ATen/ops/qscheme_ops.h>
324
+ #include <ATen/ops/quantile_ops.h>
325
+ #include <ATen/ops/rad2deg_ops.h>
326
+ #include <ATen/ops/random_ops.h>
327
+ #include <ATen/ops/ravel_ops.h>
328
+ #include <ATen/ops/reciprocal_ops.h>
329
+ #include <ATen/ops/record_stream_ops.h>
330
+ #include <ATen/ops/refine_names_ops.h>
331
+ #include <ATen/ops/relu_ops.h>
332
+ #include <ATen/ops/remainder_ops.h>
333
+ #include <ATen/ops/rename_ops.h>
334
+ #include <ATen/ops/renorm_ops.h>
335
+ #include <ATen/ops/repeat_interleave_ops.h>
336
+ #include <ATen/ops/repeat_ops.h>
337
+ #include <ATen/ops/requires_grad_ops.h>
338
+ #include <ATen/ops/reshape_as_ops.h>
339
+ #include <ATen/ops/reshape_ops.h>
340
+ #include <ATen/ops/resize_as_ops.h>
341
+ #include <ATen/ops/resize_as_sparse_ops.h>
342
+ #include <ATen/ops/resize_ops.h>
343
+ #include <ATen/ops/resolve_conj_ops.h>
344
+ #include <ATen/ops/resolve_neg_ops.h>
345
+ #include <ATen/ops/retain_grad_ops.h>
346
+ #include <ATen/ops/retains_grad_ops.h>
347
+ #include <ATen/ops/roll_ops.h>
348
+ #include <ATen/ops/rot90_ops.h>
349
+ #include <ATen/ops/round_ops.h>
350
+ #include <ATen/ops/row_indices_ops.h>
351
+ #include <ATen/ops/rshift_ops.h>
352
+ #include <ATen/ops/rsqrt_ops.h>
353
+ #include <ATen/ops/scatter_add_ops.h>
354
+ #include <ATen/ops/scatter_ops.h>
355
+ #include <ATen/ops/scatter_reduce_ops.h>
356
+ #include <ATen/ops/select_ops.h>
357
+ #include <ATen/ops/select_scatter_ops.h>
358
+ #include <ATen/ops/set_data_ops.h>
359
+ #include <ATen/ops/set_ops.h>
360
+ #include <ATen/ops/sgn_ops.h>
361
+ #include <ATen/ops/sigmoid_ops.h>
362
+ #include <ATen/ops/sign_ops.h>
363
+ #include <ATen/ops/signbit_ops.h>
364
+ #include <ATen/ops/sin_ops.h>
365
+ #include <ATen/ops/sinc_ops.h>
366
+ #include <ATen/ops/sinh_ops.h>
367
+ #include <ATen/ops/size_ops.h>
368
+ #include <ATen/ops/slice_inverse_ops.h>
369
+ #include <ATen/ops/slice_ops.h>
370
+ #include <ATen/ops/slice_scatter_ops.h>
371
+ #include <ATen/ops/slogdet_ops.h>
372
+ #include <ATen/ops/smm_ops.h>
373
+ #include <ATen/ops/softmax_ops.h>
374
+ #include <ATen/ops/sort_ops.h>
375
+ #include <ATen/ops/sparse_dim_ops.h>
376
+ #include <ATen/ops/sparse_mask_ops.h>
377
+ #include <ATen/ops/sparse_resize_and_clear_ops.h>
378
+ #include <ATen/ops/sparse_resize_ops.h>
379
+ #include <ATen/ops/split_ops.h>
380
+ #include <ATen/ops/split_with_sizes_ops.h>
381
+ #include <ATen/ops/sqrt_ops.h>
382
+ #include <ATen/ops/square_ops.h>
383
+ #include <ATen/ops/squeeze_ops.h>
384
+ #include <ATen/ops/sspaddmm_ops.h>
385
+ #include <ATen/ops/std_ops.h>
386
+ #include <ATen/ops/stft_ops.h>
387
+ #include <ATen/ops/stride_ops.h>
388
+ #include <ATen/ops/sub_ops.h>
389
+ #include <ATen/ops/subtract_ops.h>
390
+ #include <ATen/ops/sum_ops.h>
391
+ #include <ATen/ops/sum_to_size_ops.h>
392
+ #include <ATen/ops/svd_ops.h>
393
+ #include <ATen/ops/swapaxes_ops.h>
394
+ #include <ATen/ops/swapdims_ops.h>
395
+ #include <ATen/ops/t_ops.h>
396
+ #include <ATen/ops/take_along_dim_ops.h>
397
+ #include <ATen/ops/take_ops.h>
398
+ #include <ATen/ops/tan_ops.h>
399
+ #include <ATen/ops/tanh_ops.h>
400
+ #include <ATen/ops/tensor_split_ops.h>
401
+ #include <ATen/ops/tile_ops.h>
402
+ #include <ATen/ops/to_dense_ops.h>
403
+ #include <ATen/ops/to_mkldnn_ops.h>
404
+ #include <ATen/ops/to_ops.h>
405
+ #include <ATen/ops/to_padded_tensor_ops.h>
406
+ #include <ATen/ops/to_sparse_bsc_ops.h>
407
+ #include <ATen/ops/to_sparse_bsr_ops.h>
408
+ #include <ATen/ops/to_sparse_csc_ops.h>
409
+ #include <ATen/ops/to_sparse_csr_ops.h>
410
+ #include <ATen/ops/to_sparse_ops.h>
411
+ #include <ATen/ops/topk_ops.h>
412
+ #include <ATen/ops/trace_ops.h>
413
+ #include <ATen/ops/transpose_ops.h>
414
+ #include <ATen/ops/triangular_solve_ops.h>
415
+ #include <ATen/ops/tril_ops.h>
416
+ #include <ATen/ops/triu_ops.h>
417
+ #include <ATen/ops/true_divide_ops.h>
418
+ #include <ATen/ops/trunc_ops.h>
419
+ #include <ATen/ops/type_as_ops.h>
420
+ #include <ATen/ops/unbind_ops.h>
421
+ #include <ATen/ops/unflatten_ops.h>
422
+ #include <ATen/ops/unfold_ops.h>
423
+ #include <ATen/ops/uniform_ops.h>
424
+ #include <ATen/ops/unsafe_chunk_ops.h>
425
+ #include <ATen/ops/unsafe_split_ops.h>
426
+ #include <ATen/ops/unsafe_split_with_sizes_ops.h>
427
+ #include <ATen/ops/unsqueeze_ops.h>
428
+ #include <ATen/ops/values_ops.h>
429
+ #include <ATen/ops/var_ops.h>
430
+ #include <ATen/ops/vdot_ops.h>
431
+ #include <ATen/ops/view_as_ops.h>
432
+ #include <ATen/ops/view_ops.h>
433
+ #include <ATen/ops/vsplit_ops.h>
434
+ #include <ATen/ops/where_ops.h>
435
+ #include <ATen/ops/xlogy_ops.h>
436
+ #include <ATen/ops/xor_ops.h>
437
+ #include <ATen/ops/zero_ops.h>
438
+
439
+ namespace at {
440
+ namespace _ops {
441
+
442
+ } // namespace _ops
443
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/NamedTensor.h ADDED
@@ -0,0 +1 @@
 
 
1
+ #include <ATen/core/NamedTensor.h>
lib/python3.12/site-packages/torch/include/ATen/NativeFunctions.h ADDED
@@ -0,0 +1,1348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ // @generated by torchgen/gen.py from NativeFunctions.h
4
+
5
+ #ifdef TORCH_ASSERT_NO_OPERATORS
6
+ #error This change adds a dependency on native_functions.yaml, \
7
+ meaning the file will need to be re-compiled every time an operator \
8
+ is changed or added. Consider if your change would be better placed in \
9
+ another file, or if a more specific header might achieve the same goal. \
10
+ See NOTE: [Tensor vs. TensorBase]
11
+ #endif
12
+
13
+ #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
14
+ #error This change adds a dependency on all pytorch operators, meaning the \
15
+ file will need to be re-compiled every time an operator is changed or added. \
16
+ Consider including a specific operator from <ATen/ops/{my_operator}_native.h> \
17
+ and see NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
18
+ #endif
19
+
20
+ #include <c10/core/Scalar.h>
21
+ #include <c10/core/Storage.h>
22
+ #include <c10/core/TensorOptions.h>
23
+ #include <c10/util/Deprecated.h>
24
+ #include <optional>
25
+ #include <c10/core/QScheme.h>
26
+ #include <ATen/core/Reduction.h>
27
+ #include <ATen/core/Tensor.h>
28
+ #include <tuple>
29
+ #include <vector>
30
+
31
+ #include <ATen/ops/_adaptive_avg_pool2d_native.h>
32
+ #include <ATen/ops/_adaptive_avg_pool2d_backward_native.h>
33
+ #include <ATen/ops/_adaptive_avg_pool3d_native.h>
34
+ #include <ATen/ops/_adaptive_avg_pool3d_backward_native.h>
35
+ #include <ATen/ops/_add_batch_dim_native.h>
36
+ #include <ATen/ops/_add_relu_native.h>
37
+ #include <ATen/ops/_addmm_activation_native.h>
38
+ #include <ATen/ops/_aminmax_native.h>
39
+ #include <ATen/ops/_amp_foreach_non_finite_check_and_unscale_native.h>
40
+ #include <ATen/ops/_amp_update_scale_native.h>
41
+ #include <ATen/ops/_assert_async_native.h>
42
+ #include <ATen/ops/_assert_scalar_native.h>
43
+ #include <ATen/ops/_assert_tensor_metadata_native.h>
44
+ #include <ATen/ops/_autocast_to_full_precision_native.h>
45
+ #include <ATen/ops/_autocast_to_reduced_precision_native.h>
46
+ #include <ATen/ops/_backward_native.h>
47
+ #include <ATen/ops/_batch_norm_impl_index_native.h>
48
+ #include <ATen/ops/_batch_norm_impl_index_backward_native.h>
49
+ #include <ATen/ops/_batch_norm_no_update_native.h>
50
+ #include <ATen/ops/_batch_norm_with_update_native.h>
51
+ #include <ATen/ops/_cast_Byte_native.h>
52
+ #include <ATen/ops/_cast_Char_native.h>
53
+ #include <ATen/ops/_cast_Double_native.h>
54
+ #include <ATen/ops/_cast_Float_native.h>
55
+ #include <ATen/ops/_cast_Half_native.h>
56
+ #include <ATen/ops/_cast_Int_native.h>
57
+ #include <ATen/ops/_cast_Long_native.h>
58
+ #include <ATen/ops/_cast_Short_native.h>
59
+ #include <ATen/ops/_cdist_backward_native.h>
60
+ #include <ATen/ops/_cdist_forward_native.h>
61
+ #include <ATen/ops/_cholesky_solve_helper_native.h>
62
+ #include <ATen/ops/_choose_qparams_per_tensor_native.h>
63
+ #include <ATen/ops/_chunk_cat_native.h>
64
+ #include <ATen/ops/_coalesce_native.h>
65
+ #include <ATen/ops/_coalesced_native.h>
66
+ #include <ATen/ops/_compute_linear_combination_native.h>
67
+ #include <ATen/ops/_conj_native.h>
68
+ #include <ATen/ops/_conj_copy_native.h>
69
+ #include <ATen/ops/_conj_physical_native.h>
70
+ #include <ATen/ops/_conv_depthwise2d_native.h>
71
+ #include <ATen/ops/_convert_indices_from_coo_to_csr_native.h>
72
+ #include <ATen/ops/_convert_indices_from_csr_to_coo_native.h>
73
+ #include <ATen/ops/_convert_weight_to_int4pack_native.h>
74
+ #include <ATen/ops/_convert_weight_to_int4pack_for_cpu_native.h>
75
+ #include <ATen/ops/_convolution_native.h>
76
+ #include <ATen/ops/_convolution_double_backward_native.h>
77
+ #include <ATen/ops/_convolution_mode_native.h>
78
+ #include <ATen/ops/_copy_from_native.h>
79
+ #include <ATen/ops/_copy_from_and_resize_native.h>
80
+ #include <ATen/ops/_cslt_compress_native.h>
81
+ #include <ATen/ops/_cslt_sparse_mm_native.h>
82
+ #include <ATen/ops/_cslt_sparse_mm_search_native.h>
83
+ #include <ATen/ops/_ctc_loss_native.h>
84
+ #include <ATen/ops/_ctc_loss_backward_native.h>
85
+ #include <ATen/ops/_cudnn_ctc_loss_native.h>
86
+ #include <ATen/ops/_cudnn_init_dropout_state_native.h>
87
+ #include <ATen/ops/_cudnn_rnn_native.h>
88
+ #include <ATen/ops/_cudnn_rnn_backward_native.h>
89
+ #include <ATen/ops/_cudnn_rnn_flatten_weight_native.h>
90
+ #include <ATen/ops/_cufft_clear_plan_cache_native.h>
91
+ #include <ATen/ops/_cufft_get_plan_cache_max_size_native.h>
92
+ #include <ATen/ops/_cufft_get_plan_cache_size_native.h>
93
+ #include <ATen/ops/_cufft_set_plan_cache_max_size_native.h>
94
+ #include <ATen/ops/_cummax_helper_native.h>
95
+ #include <ATen/ops/_cummin_helper_native.h>
96
+ #include <ATen/ops/_debug_has_internal_overlap_native.h>
97
+ #include <ATen/ops/_dimI_native.h>
98
+ #include <ATen/ops/_dimV_native.h>
99
+ #include <ATen/ops/_dim_arange_native.h>
100
+ #include <ATen/ops/_dirichlet_grad_native.h>
101
+ #include <ATen/ops/_efficient_attention_backward_native.h>
102
+ #include <ATen/ops/_efficient_attention_forward_native.h>
103
+ #include <ATen/ops/_efficientzerotensor_native.h>
104
+ #include <ATen/ops/_embedding_bag_native.h>
105
+ #include <ATen/ops/_embedding_bag_backward_native.h>
106
+ #include <ATen/ops/_embedding_bag_dense_backward_native.h>
107
+ #include <ATen/ops/_embedding_bag_forward_only_native.h>
108
+ #include <ATen/ops/_embedding_bag_per_sample_weights_backward_native.h>
109
+ #include <ATen/ops/_embedding_bag_sparse_backward_native.h>
110
+ #include <ATen/ops/_empty_affine_quantized_native.h>
111
+ #include <ATen/ops/_empty_per_channel_affine_quantized_native.h>
112
+ #include <ATen/ops/_euclidean_dist_native.h>
113
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_native.h>
114
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_backward_native.h>
115
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_native.h>
116
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_backward_native.h>
117
+ #include <ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams_native.h>
118
+ #include <ATen/ops/_fft_c2c_native.h>
119
+ #include <ATen/ops/_fft_c2r_native.h>
120
+ #include <ATen/ops/_fft_r2c_native.h>
121
+ #include <ATen/ops/_fill_mem_eff_dropout_mask_native.h>
122
+ #include <ATen/ops/_flash_attention_backward_native.h>
123
+ #include <ATen/ops/_flash_attention_forward_native.h>
124
+ #include <ATen/ops/_foobar_native.h>
125
+ #include <ATen/ops/_foreach_abs_native.h>
126
+ #include <ATen/ops/_foreach_acos_native.h>
127
+ #include <ATen/ops/_foreach_add_native.h>
128
+ #include <ATen/ops/_foreach_addcdiv_native.h>
129
+ #include <ATen/ops/_foreach_addcmul_native.h>
130
+ #include <ATen/ops/_foreach_asin_native.h>
131
+ #include <ATen/ops/_foreach_atan_native.h>
132
+ #include <ATen/ops/_foreach_ceil_native.h>
133
+ #include <ATen/ops/_foreach_clamp_max_native.h>
134
+ #include <ATen/ops/_foreach_clamp_min_native.h>
135
+ #include <ATen/ops/_foreach_copy_native.h>
136
+ #include <ATen/ops/_foreach_cos_native.h>
137
+ #include <ATen/ops/_foreach_cosh_native.h>
138
+ #include <ATen/ops/_foreach_div_native.h>
139
+ #include <ATen/ops/_foreach_erf_native.h>
140
+ #include <ATen/ops/_foreach_erfc_native.h>
141
+ #include <ATen/ops/_foreach_exp_native.h>
142
+ #include <ATen/ops/_foreach_expm1_native.h>
143
+ #include <ATen/ops/_foreach_floor_native.h>
144
+ #include <ATen/ops/_foreach_frac_native.h>
145
+ #include <ATen/ops/_foreach_lerp_native.h>
146
+ #include <ATen/ops/_foreach_lgamma_native.h>
147
+ #include <ATen/ops/_foreach_log_native.h>
148
+ #include <ATen/ops/_foreach_log10_native.h>
149
+ #include <ATen/ops/_foreach_log1p_native.h>
150
+ #include <ATen/ops/_foreach_log2_native.h>
151
+ #include <ATen/ops/_foreach_max_native.h>
152
+ #include <ATen/ops/_foreach_maximum_native.h>
153
+ #include <ATen/ops/_foreach_minimum_native.h>
154
+ #include <ATen/ops/_foreach_mul_native.h>
155
+ #include <ATen/ops/_foreach_neg_native.h>
156
+ #include <ATen/ops/_foreach_norm_native.h>
157
+ #include <ATen/ops/_foreach_pow_native.h>
158
+ #include <ATen/ops/_foreach_reciprocal_native.h>
159
+ #include <ATen/ops/_foreach_round_native.h>
160
+ #include <ATen/ops/_foreach_rsqrt_native.h>
161
+ #include <ATen/ops/_foreach_sigmoid_native.h>
162
+ #include <ATen/ops/_foreach_sign_native.h>
163
+ #include <ATen/ops/_foreach_sin_native.h>
164
+ #include <ATen/ops/_foreach_sinh_native.h>
165
+ #include <ATen/ops/_foreach_sqrt_native.h>
166
+ #include <ATen/ops/_foreach_sub_native.h>
167
+ #include <ATen/ops/_foreach_tan_native.h>
168
+ #include <ATen/ops/_foreach_tanh_native.h>
169
+ #include <ATen/ops/_foreach_trunc_native.h>
170
+ #include <ATen/ops/_foreach_zero_native.h>
171
+ #include <ATen/ops/_functional_assert_async_native.h>
172
+ #include <ATen/ops/_functional_assert_scalar_native.h>
173
+ #include <ATen/ops/_functional_sym_constrain_range_native.h>
174
+ #include <ATen/ops/_functional_sym_constrain_range_for_size_native.h>
175
+ #include <ATen/ops/_fused_adagrad_native.h>
176
+ #include <ATen/ops/_fused_adam_native.h>
177
+ #include <ATen/ops/_fused_adamw_native.h>
178
+ #include <ATen/ops/_fused_dropout_native.h>
179
+ #include <ATen/ops/_fused_moving_avg_obs_fq_helper_native.h>
180
+ #include <ATen/ops/_fused_sdp_choice_native.h>
181
+ #include <ATen/ops/_fused_sgd_native.h>
182
+ #include <ATen/ops/_fw_primal_native.h>
183
+ #include <ATen/ops/_fw_primal_copy_native.h>
184
+ #include <ATen/ops/_gather_sparse_backward_native.h>
185
+ #include <ATen/ops/_grid_sampler_2d_cpu_fallback_native.h>
186
+ #include <ATen/ops/_grid_sampler_2d_cpu_fallback_backward_native.h>
187
+ #include <ATen/ops/_has_compatible_shallow_copy_type_native.h>
188
+ #include <ATen/ops/_has_same_storage_numel_native.h>
189
+ #include <ATen/ops/_histogramdd_bin_edges_native.h>
190
+ #include <ATen/ops/_histogramdd_from_bin_cts_native.h>
191
+ #include <ATen/ops/_histogramdd_from_bin_tensors_native.h>
192
+ #include <ATen/ops/_index_put_impl_native.h>
193
+ #include <ATen/ops/_indices_native.h>
194
+ #include <ATen/ops/_indices_copy_native.h>
195
+ #include <ATen/ops/_int_mm_native.h>
196
+ #include <ATen/ops/_is_all_true_native.h>
197
+ #include <ATen/ops/_is_any_true_native.h>
198
+ #include <ATen/ops/_is_zerotensor_native.h>
199
+ #include <ATen/ops/_jagged_to_padded_dense_forward_native.h>
200
+ #include <ATen/ops/_lazy_clone_native.h>
201
+ #include <ATen/ops/_linalg_check_errors_native.h>
202
+ #include <ATen/ops/_linalg_det_native.h>
203
+ #include <ATen/ops/_linalg_eigh_native.h>
204
+ #include <ATen/ops/_linalg_eigvals_native.h>
205
+ #include <ATen/ops/_linalg_slogdet_native.h>
206
+ #include <ATen/ops/_linalg_solve_ex_native.h>
207
+ #include <ATen/ops/_linalg_svd_native.h>
208
+ #include <ATen/ops/_local_scalar_dense_native.h>
209
+ #include <ATen/ops/_log_softmax_native.h>
210
+ #include <ATen/ops/_log_softmax_backward_data_native.h>
211
+ #include <ATen/ops/_logcumsumexp_native.h>
212
+ #include <ATen/ops/_lstm_mps_native.h>
213
+ #include <ATen/ops/_lu_with_info_native.h>
214
+ #include <ATen/ops/_make_dep_token_native.h>
215
+ #include <ATen/ops/_make_dual_native.h>
216
+ #include <ATen/ops/_make_dual_copy_native.h>
217
+ #include <ATen/ops/_make_per_channel_quantized_tensor_native.h>
218
+ #include <ATen/ops/_make_per_tensor_quantized_tensor_native.h>
219
+ #include <ATen/ops/_masked_scale_native.h>
220
+ #include <ATen/ops/_masked_softmax_native.h>
221
+ #include <ATen/ops/_masked_softmax_backward_native.h>
222
+ #include <ATen/ops/_mixed_dtypes_linear_native.h>
223
+ #include <ATen/ops/_mkldnn_reshape_native.h>
224
+ #include <ATen/ops/_mkldnn_transpose_native.h>
225
+ #include <ATen/ops/_mps_convolution_native.h>
226
+ #include <ATen/ops/_mps_convolution_transpose_native.h>
227
+ #include <ATen/ops/_native_batch_norm_legit_native.h>
228
+ #include <ATen/ops/_native_batch_norm_legit_no_training_native.h>
229
+ #include <ATen/ops/_native_multi_head_attention_native.h>
230
+ #include <ATen/ops/_neg_view_native.h>
231
+ #include <ATen/ops/_neg_view_copy_native.h>
232
+ #include <ATen/ops/_nested_compute_contiguous_strides_offsets_native.h>
233
+ #include <ATen/ops/_nested_from_padded_native.h>
234
+ #include <ATen/ops/_nested_from_padded_and_nested_example_native.h>
235
+ #include <ATen/ops/_nested_from_padded_tensor_native.h>
236
+ #include <ATen/ops/_nested_get_jagged_dummy_native.h>
237
+ #include <ATen/ops/_nested_get_lengths_native.h>
238
+ #include <ATen/ops/_nested_get_max_seqlen_native.h>
239
+ #include <ATen/ops/_nested_get_min_seqlen_native.h>
240
+ #include <ATen/ops/_nested_get_offsets_native.h>
241
+ #include <ATen/ops/_nested_get_ragged_idx_native.h>
242
+ #include <ATen/ops/_nested_get_values_native.h>
243
+ #include <ATen/ops/_nested_get_values_copy_native.h>
244
+ #include <ATen/ops/_nested_select_backward_native.h>
245
+ #include <ATen/ops/_nested_sum_backward_native.h>
246
+ #include <ATen/ops/_nested_tensor_from_mask_native.h>
247
+ #include <ATen/ops/_nested_tensor_from_mask_left_aligned_native.h>
248
+ #include <ATen/ops/_nested_tensor_from_tensor_list_native.h>
249
+ #include <ATen/ops/_nested_tensor_size_native.h>
250
+ #include <ATen/ops/_nested_tensor_softmax_with_shape_native.h>
251
+ #include <ATen/ops/_nested_tensor_storage_offsets_native.h>
252
+ #include <ATen/ops/_nested_tensor_strides_native.h>
253
+ #include <ATen/ops/_nested_view_from_buffer_native.h>
254
+ #include <ATen/ops/_nested_view_from_buffer_copy_native.h>
255
+ #include <ATen/ops/_nested_view_from_jagged_native.h>
256
+ #include <ATen/ops/_nested_view_from_jagged_copy_native.h>
257
+ #include <ATen/ops/_new_zeros_with_same_feature_meta_native.h>
258
+ #include <ATen/ops/_nnpack_available_native.h>
259
+ #include <ATen/ops/_nnpack_spatial_convolution_native.h>
260
+ #include <ATen/ops/_nnz_native.h>
261
+ #include <ATen/ops/_pack_padded_sequence_native.h>
262
+ #include <ATen/ops/_pack_padded_sequence_backward_native.h>
263
+ #include <ATen/ops/_pad_circular_native.h>
264
+ #include <ATen/ops/_pad_enum_native.h>
265
+ #include <ATen/ops/_pad_packed_sequence_native.h>
266
+ #include <ATen/ops/_padded_dense_to_jagged_forward_native.h>
267
+ #include <ATen/ops/_pdist_backward_native.h>
268
+ #include <ATen/ops/_pdist_forward_native.h>
269
+ #include <ATen/ops/_pin_memory_native.h>
270
+ #include <ATen/ops/_prelu_kernel_native.h>
271
+ #include <ATen/ops/_prelu_kernel_backward_native.h>
272
+ #include <ATen/ops/_print_native.h>
273
+ #include <ATen/ops/_propagate_xla_data_native.h>
274
+ #include <ATen/ops/_remove_batch_dim_native.h>
275
+ #include <ATen/ops/_reshape_alias_native.h>
276
+ #include <ATen/ops/_reshape_alias_copy_native.h>
277
+ #include <ATen/ops/_reshape_copy_native.h>
278
+ #include <ATen/ops/_reshape_from_tensor_native.h>
279
+ #include <ATen/ops/_resize_output_native.h>
280
+ #include <ATen/ops/_rowwise_prune_native.h>
281
+ #include <ATen/ops/_safe_softmax_native.h>
282
+ #include <ATen/ops/_sample_dirichlet_native.h>
283
+ #include <ATen/ops/_saturate_weight_to_fp16_native.h>
284
+ #include <ATen/ops/_scaled_dot_product_attention_math_native.h>
285
+ #include <ATen/ops/_scaled_dot_product_attention_math_for_mps_native.h>
286
+ #include <ATen/ops/_scaled_dot_product_cudnn_attention_native.h>
287
+ #include <ATen/ops/_scaled_dot_product_cudnn_attention_backward_native.h>
288
+ #include <ATen/ops/_scaled_dot_product_efficient_attention_native.h>
289
+ #include <ATen/ops/_scaled_dot_product_efficient_attention_backward_native.h>
290
+ #include <ATen/ops/_scaled_dot_product_flash_attention_native.h>
291
+ #include <ATen/ops/_scaled_dot_product_flash_attention_backward_native.h>
292
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_native.h>
293
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_backward_native.h>
294
+ #include <ATen/ops/_scaled_dot_product_fused_attention_overrideable_native.h>
295
+ #include <ATen/ops/_scaled_dot_product_fused_attention_overrideable_backward_native.h>
296
+ #include <ATen/ops/_scaled_mm_native.h>
297
+ #include <ATen/ops/_segment_reduce_backward_native.h>
298
+ #include <ATen/ops/_shape_as_tensor_native.h>
299
+ #include <ATen/ops/_slow_conv2d_backward_native.h>
300
+ #include <ATen/ops/_slow_conv2d_forward_native.h>
301
+ #include <ATen/ops/_sobol_engine_draw_native.h>
302
+ #include <ATen/ops/_sobol_engine_ff_native.h>
303
+ #include <ATen/ops/_sobol_engine_initialize_state_native.h>
304
+ #include <ATen/ops/_sobol_engine_scramble_native.h>
305
+ #include <ATen/ops/_softmax_native.h>
306
+ #include <ATen/ops/_softmax_backward_data_native.h>
307
+ #include <ATen/ops/_sparse_addmm_native.h>
308
+ #include <ATen/ops/_sparse_broadcast_to_native.h>
309
+ #include <ATen/ops/_sparse_broadcast_to_copy_native.h>
310
+ #include <ATen/ops/_sparse_bsc_tensor_unsafe_native.h>
311
+ #include <ATen/ops/_sparse_bsr_tensor_unsafe_native.h>
312
+ #include <ATen/ops/_sparse_compressed_tensor_unsafe_native.h>
313
+ #include <ATen/ops/_sparse_compressed_tensor_with_dims_native.h>
314
+ #include <ATen/ops/_sparse_coo_tensor_unsafe_native.h>
315
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_native.h>
316
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_and_tensors_native.h>
317
+ #include <ATen/ops/_sparse_csc_tensor_unsafe_native.h>
318
+ #include <ATen/ops/_sparse_csr_prod_native.h>
319
+ #include <ATen/ops/_sparse_csr_sum_native.h>
320
+ #include <ATen/ops/_sparse_csr_tensor_unsafe_native.h>
321
+ #include <ATen/ops/_sparse_log_softmax_native.h>
322
+ #include <ATen/ops/_sparse_log_softmax_backward_data_native.h>
323
+ #include <ATen/ops/_sparse_mask_projection_native.h>
324
+ #include <ATen/ops/_sparse_mm_native.h>
325
+ #include <ATen/ops/_sparse_mm_reduce_impl_native.h>
326
+ #include <ATen/ops/_sparse_mm_reduce_impl_backward_native.h>
327
+ #include <ATen/ops/_sparse_semi_structured_addmm_native.h>
328
+ #include <ATen/ops/_sparse_semi_structured_apply_native.h>
329
+ #include <ATen/ops/_sparse_semi_structured_apply_dense_native.h>
330
+ #include <ATen/ops/_sparse_semi_structured_linear_native.h>
331
+ #include <ATen/ops/_sparse_semi_structured_mm_native.h>
332
+ #include <ATen/ops/_sparse_semi_structured_tile_native.h>
333
+ #include <ATen/ops/_sparse_softmax_native.h>
334
+ #include <ATen/ops/_sparse_softmax_backward_data_native.h>
335
+ #include <ATen/ops/_sparse_sparse_matmul_native.h>
336
+ #include <ATen/ops/_sparse_sum_native.h>
337
+ #include <ATen/ops/_sparse_sum_backward_native.h>
338
+ #include <ATen/ops/_spdiags_native.h>
339
+ #include <ATen/ops/_spsolve_native.h>
340
+ #include <ATen/ops/_stack_native.h>
341
+ #include <ATen/ops/_standard_gamma_native.h>
342
+ #include <ATen/ops/_standard_gamma_grad_native.h>
343
+ #include <ATen/ops/_test_ambiguous_defaults_native.h>
344
+ #include <ATen/ops/_test_autograd_multiple_dispatch_native.h>
345
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view_native.h>
346
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view_copy_native.h>
347
+ #include <ATen/ops/_test_check_tensor_native.h>
348
+ #include <ATen/ops/_test_functorch_fallback_native.h>
349
+ #include <ATen/ops/_test_optional_filled_intlist_native.h>
350
+ #include <ATen/ops/_test_optional_floatlist_native.h>
351
+ #include <ATen/ops/_test_optional_intlist_native.h>
352
+ #include <ATen/ops/_test_parallel_materialize_native.h>
353
+ #include <ATen/ops/_test_serialization_subcmul_native.h>
354
+ #include <ATen/ops/_test_string_default_native.h>
355
+ #include <ATen/ops/_test_warn_in_autograd_native.h>
356
+ #include <ATen/ops/_thnn_differentiable_gru_cell_backward_native.h>
357
+ #include <ATen/ops/_thnn_differentiable_lstm_cell_backward_native.h>
358
+ #include <ATen/ops/_thnn_fused_gru_cell_native.h>
359
+ #include <ATen/ops/_thnn_fused_gru_cell_backward_native.h>
360
+ #include <ATen/ops/_thnn_fused_lstm_cell_native.h>
361
+ #include <ATen/ops/_thnn_fused_lstm_cell_backward_native.h>
362
+ #include <ATen/ops/_thnn_fused_lstm_cell_backward_impl_native.h>
363
+ #include <ATen/ops/_to_copy_native.h>
364
+ #include <ATen/ops/_to_cpu_native.h>
365
+ #include <ATen/ops/_to_dense_native.h>
366
+ #include <ATen/ops/_to_sparse_native.h>
367
+ #include <ATen/ops/_to_sparse_bsc_native.h>
368
+ #include <ATen/ops/_to_sparse_bsr_native.h>
369
+ #include <ATen/ops/_to_sparse_csc_native.h>
370
+ #include <ATen/ops/_to_sparse_csr_native.h>
371
+ #include <ATen/ops/_to_sparse_semi_structured_native.h>
372
+ #include <ATen/ops/_transform_bias_rescale_qkv_native.h>
373
+ #include <ATen/ops/_transformer_encoder_layer_fwd_native.h>
374
+ #include <ATen/ops/_trilinear_native.h>
375
+ #include <ATen/ops/_triton_multi_head_attention_native.h>
376
+ #include <ATen/ops/_triton_scaled_dot_attention_native.h>
377
+ #include <ATen/ops/_unique_native.h>
378
+ #include <ATen/ops/_unique2_native.h>
379
+ #include <ATen/ops/_unpack_dual_native.h>
380
+ #include <ATen/ops/_unsafe_index_native.h>
381
+ #include <ATen/ops/_unsafe_index_put_native.h>
382
+ #include <ATen/ops/_unsafe_masked_index_native.h>
383
+ #include <ATen/ops/_unsafe_masked_index_put_accumulate_native.h>
384
+ #include <ATen/ops/_unsafe_view_native.h>
385
+ #include <ATen/ops/_upsample_bicubic2d_aa_native.h>
386
+ #include <ATen/ops/_upsample_bicubic2d_aa_backward_native.h>
387
+ #include <ATen/ops/_upsample_bilinear2d_aa_native.h>
388
+ #include <ATen/ops/_upsample_bilinear2d_aa_backward_native.h>
389
+ #include <ATen/ops/_upsample_nearest_exact1d_native.h>
390
+ #include <ATen/ops/_upsample_nearest_exact1d_backward_native.h>
391
+ #include <ATen/ops/_upsample_nearest_exact2d_native.h>
392
+ #include <ATen/ops/_upsample_nearest_exact2d_backward_native.h>
393
+ #include <ATen/ops/_upsample_nearest_exact3d_native.h>
394
+ #include <ATen/ops/_upsample_nearest_exact3d_backward_native.h>
395
+ #include <ATen/ops/_use_cudnn_ctc_loss_native.h>
396
+ #include <ATen/ops/_use_cudnn_rnn_flatten_weight_native.h>
397
+ #include <ATen/ops/_validate_compressed_sparse_indices_native.h>
398
+ #include <ATen/ops/_validate_sparse_bsc_tensor_args_native.h>
399
+ #include <ATen/ops/_validate_sparse_bsr_tensor_args_native.h>
400
+ #include <ATen/ops/_validate_sparse_compressed_tensor_args_native.h>
401
+ #include <ATen/ops/_validate_sparse_coo_tensor_args_native.h>
402
+ #include <ATen/ops/_validate_sparse_csc_tensor_args_native.h>
403
+ #include <ATen/ops/_validate_sparse_csr_tensor_args_native.h>
404
+ #include <ATen/ops/_values_native.h>
405
+ #include <ATen/ops/_values_copy_native.h>
406
+ #include <ATen/ops/_version_native.h>
407
+ #include <ATen/ops/_weight_int4pack_mm_native.h>
408
+ #include <ATen/ops/_weight_int4pack_mm_for_cpu_native.h>
409
+ #include <ATen/ops/_weight_int8pack_mm_native.h>
410
+ #include <ATen/ops/_weight_norm_native.h>
411
+ #include <ATen/ops/_weight_norm_differentiable_backward_native.h>
412
+ #include <ATen/ops/_weight_norm_interface_native.h>
413
+ #include <ATen/ops/_weight_norm_interface_backward_native.h>
414
+ #include <ATen/ops/_wrapped_linear_prepack_native.h>
415
+ #include <ATen/ops/_wrapped_quantized_linear_prepacked_native.h>
416
+ #include <ATen/ops/abs_native.h>
417
+ #include <ATen/ops/absolute_native.h>
418
+ #include <ATen/ops/acos_native.h>
419
+ #include <ATen/ops/acosh_native.h>
420
+ #include <ATen/ops/adaptive_avg_pool1d_native.h>
421
+ #include <ATen/ops/adaptive_avg_pool2d_native.h>
422
+ #include <ATen/ops/adaptive_avg_pool3d_native.h>
423
+ #include <ATen/ops/adaptive_avg_pool3d_backward_native.h>
424
+ #include <ATen/ops/adaptive_max_pool1d_native.h>
425
+ #include <ATen/ops/adaptive_max_pool2d_native.h>
426
+ #include <ATen/ops/adaptive_max_pool2d_backward_native.h>
427
+ #include <ATen/ops/adaptive_max_pool3d_native.h>
428
+ #include <ATen/ops/adaptive_max_pool3d_backward_native.h>
429
+ #include <ATen/ops/add_native.h>
430
+ #include <ATen/ops/addbmm_native.h>
431
+ #include <ATen/ops/addcdiv_native.h>
432
+ #include <ATen/ops/addcmul_native.h>
433
+ #include <ATen/ops/addmm_native.h>
434
+ #include <ATen/ops/addmv_native.h>
435
+ #include <ATen/ops/addr_native.h>
436
+ #include <ATen/ops/adjoint_native.h>
437
+ #include <ATen/ops/affine_grid_generator_native.h>
438
+ #include <ATen/ops/affine_grid_generator_backward_native.h>
439
+ #include <ATen/ops/alias_native.h>
440
+ #include <ATen/ops/alias_copy_native.h>
441
+ #include <ATen/ops/align_as_native.h>
442
+ #include <ATen/ops/align_tensors_native.h>
443
+ #include <ATen/ops/align_to_native.h>
444
+ #include <ATen/ops/all_native.h>
445
+ #include <ATen/ops/allclose_native.h>
446
+ #include <ATen/ops/alpha_dropout_native.h>
447
+ #include <ATen/ops/amax_native.h>
448
+ #include <ATen/ops/amin_native.h>
449
+ #include <ATen/ops/aminmax_native.h>
450
+ #include <ATen/ops/and_native.h>
451
+ #include <ATen/ops/angle_native.h>
452
+ #include <ATen/ops/any_native.h>
453
+ #include <ATen/ops/arange_native.h>
454
+ #include <ATen/ops/arccos_native.h>
455
+ #include <ATen/ops/arccosh_native.h>
456
+ #include <ATen/ops/arcsin_native.h>
457
+ #include <ATen/ops/arcsinh_native.h>
458
+ #include <ATen/ops/arctan_native.h>
459
+ #include <ATen/ops/arctan2_native.h>
460
+ #include <ATen/ops/arctanh_native.h>
461
+ #include <ATen/ops/argmax_native.h>
462
+ #include <ATen/ops/argmin_native.h>
463
+ #include <ATen/ops/argsort_native.h>
464
+ #include <ATen/ops/argwhere_native.h>
465
+ #include <ATen/ops/as_strided_native.h>
466
+ #include <ATen/ops/as_strided_copy_native.h>
467
+ #include <ATen/ops/as_strided_scatter_native.h>
468
+ #include <ATen/ops/asin_native.h>
469
+ #include <ATen/ops/asinh_native.h>
470
+ #include <ATen/ops/atan_native.h>
471
+ #include <ATen/ops/atan2_native.h>
472
+ #include <ATen/ops/atanh_native.h>
473
+ #include <ATen/ops/atleast_1d_native.h>
474
+ #include <ATen/ops/atleast_2d_native.h>
475
+ #include <ATen/ops/atleast_3d_native.h>
476
+ #include <ATen/ops/avg_pool1d_native.h>
477
+ #include <ATen/ops/avg_pool2d_native.h>
478
+ #include <ATen/ops/avg_pool2d_backward_native.h>
479
+ #include <ATen/ops/avg_pool3d_native.h>
480
+ #include <ATen/ops/avg_pool3d_backward_native.h>
481
+ #include <ATen/ops/baddbmm_native.h>
482
+ #include <ATen/ops/bartlett_window_native.h>
483
+ #include <ATen/ops/batch_norm_native.h>
484
+ #include <ATen/ops/batch_norm_backward_native.h>
485
+ #include <ATen/ops/batch_norm_backward_elemt_native.h>
486
+ #include <ATen/ops/batch_norm_backward_reduce_native.h>
487
+ #include <ATen/ops/batch_norm_elemt_native.h>
488
+ #include <ATen/ops/batch_norm_gather_stats_native.h>
489
+ #include <ATen/ops/batch_norm_gather_stats_with_counts_native.h>
490
+ #include <ATen/ops/batch_norm_stats_native.h>
491
+ #include <ATen/ops/batch_norm_update_stats_native.h>
492
+ #include <ATen/ops/bernoulli_native.h>
493
+ #include <ATen/ops/bilinear_native.h>
494
+ #include <ATen/ops/binary_cross_entropy_native.h>
495
+ #include <ATen/ops/binary_cross_entropy_backward_native.h>
496
+ #include <ATen/ops/binary_cross_entropy_with_logits_native.h>
497
+ #include <ATen/ops/bincount_native.h>
498
+ #include <ATen/ops/binomial_native.h>
499
+ #include <ATen/ops/bitwise_and_native.h>
500
+ #include <ATen/ops/bitwise_left_shift_native.h>
501
+ #include <ATen/ops/bitwise_not_native.h>
502
+ #include <ATen/ops/bitwise_or_native.h>
503
+ #include <ATen/ops/bitwise_right_shift_native.h>
504
+ #include <ATen/ops/bitwise_xor_native.h>
505
+ #include <ATen/ops/blackman_window_native.h>
506
+ #include <ATen/ops/block_diag_native.h>
507
+ #include <ATen/ops/bmm_native.h>
508
+ #include <ATen/ops/broadcast_tensors_native.h>
509
+ #include <ATen/ops/broadcast_to_native.h>
510
+ #include <ATen/ops/bucketize_native.h>
511
+ #include <ATen/ops/can_cast_native.h>
512
+ #include <ATen/ops/cartesian_prod_native.h>
513
+ #include <ATen/ops/cat_native.h>
514
+ #include <ATen/ops/cauchy_native.h>
515
+ #include <ATen/ops/ccol_indices_native.h>
516
+ #include <ATen/ops/ccol_indices_copy_native.h>
517
+ #include <ATen/ops/cdist_native.h>
518
+ #include <ATen/ops/ceil_native.h>
519
+ #include <ATen/ops/celu_native.h>
520
+ #include <ATen/ops/chain_matmul_native.h>
521
+ #include <ATen/ops/chalf_native.h>
522
+ #include <ATen/ops/channel_shuffle_native.h>
523
+ #include <ATen/ops/cholesky_native.h>
524
+ #include <ATen/ops/cholesky_inverse_native.h>
525
+ #include <ATen/ops/cholesky_solve_native.h>
526
+ #include <ATen/ops/choose_qparams_optimized_native.h>
527
+ #include <ATen/ops/chunk_native.h>
528
+ #include <ATen/ops/clamp_native.h>
529
+ #include <ATen/ops/clamp_max_native.h>
530
+ #include <ATen/ops/clamp_min_native.h>
531
+ #include <ATen/ops/clip_native.h>
532
+ #include <ATen/ops/clone_native.h>
533
+ #include <ATen/ops/coalesce_native.h>
534
+ #include <ATen/ops/col2im_native.h>
535
+ #include <ATen/ops/col_indices_native.h>
536
+ #include <ATen/ops/col_indices_copy_native.h>
537
+ #include <ATen/ops/column_stack_native.h>
538
+ #include <ATen/ops/combinations_native.h>
539
+ #include <ATen/ops/complex_native.h>
540
+ #include <ATen/ops/concat_native.h>
541
+ #include <ATen/ops/concatenate_native.h>
542
+ #include <ATen/ops/conj_native.h>
543
+ #include <ATen/ops/conj_physical_native.h>
544
+ #include <ATen/ops/constant_pad_nd_native.h>
545
+ #include <ATen/ops/contiguous_native.h>
546
+ #include <ATen/ops/conv1d_native.h>
547
+ #include <ATen/ops/conv2d_native.h>
548
+ #include <ATen/ops/conv3d_native.h>
549
+ #include <ATen/ops/conv_depthwise3d_native.h>
550
+ #include <ATen/ops/conv_tbc_native.h>
551
+ #include <ATen/ops/conv_tbc_backward_native.h>
552
+ #include <ATen/ops/conv_transpose1d_native.h>
553
+ #include <ATen/ops/conv_transpose2d_native.h>
554
+ #include <ATen/ops/conv_transpose3d_native.h>
555
+ #include <ATen/ops/convolution_native.h>
556
+ #include <ATen/ops/convolution_backward_native.h>
557
+ #include <ATen/ops/convolution_backward_overrideable_native.h>
558
+ #include <ATen/ops/convolution_overrideable_native.h>
559
+ #include <ATen/ops/copy_native.h>
560
+ #include <ATen/ops/copy_sparse_to_sparse_native.h>
561
+ #include <ATen/ops/copysign_native.h>
562
+ #include <ATen/ops/corrcoef_native.h>
563
+ #include <ATen/ops/cos_native.h>
564
+ #include <ATen/ops/cosh_native.h>
565
+ #include <ATen/ops/cosine_embedding_loss_native.h>
566
+ #include <ATen/ops/cosine_similarity_native.h>
567
+ #include <ATen/ops/count_nonzero_native.h>
568
+ #include <ATen/ops/cov_native.h>
569
+ #include <ATen/ops/cross_native.h>
570
+ #include <ATen/ops/cross_entropy_loss_native.h>
571
+ #include <ATen/ops/crow_indices_native.h>
572
+ #include <ATen/ops/crow_indices_copy_native.h>
573
+ #include <ATen/ops/ctc_loss_native.h>
574
+ #include <ATen/ops/cudnn_affine_grid_generator_native.h>
575
+ #include <ATen/ops/cudnn_affine_grid_generator_backward_native.h>
576
+ #include <ATen/ops/cudnn_batch_norm_native.h>
577
+ #include <ATen/ops/cudnn_batch_norm_backward_native.h>
578
+ #include <ATen/ops/cudnn_convolution_native.h>
579
+ #include <ATen/ops/cudnn_convolution_add_relu_native.h>
580
+ #include <ATen/ops/cudnn_convolution_relu_native.h>
581
+ #include <ATen/ops/cudnn_convolution_transpose_native.h>
582
+ #include <ATen/ops/cudnn_grid_sampler_native.h>
583
+ #include <ATen/ops/cudnn_grid_sampler_backward_native.h>
584
+ #include <ATen/ops/cudnn_is_acceptable_native.h>
585
+ #include <ATen/ops/cummax_native.h>
586
+ #include <ATen/ops/cummaxmin_backward_native.h>
587
+ #include <ATen/ops/cummin_native.h>
588
+ #include <ATen/ops/cumprod_native.h>
589
+ #include <ATen/ops/cumprod_backward_native.h>
590
+ #include <ATen/ops/cumsum_native.h>
591
+ #include <ATen/ops/cumulative_trapezoid_native.h>
592
+ #include <ATen/ops/data_native.h>
593
+ #include <ATen/ops/deg2rad_native.h>
594
+ #include <ATen/ops/dense_dim_native.h>
595
+ #include <ATen/ops/dequantize_native.h>
596
+ #include <ATen/ops/det_native.h>
597
+ #include <ATen/ops/detach_native.h>
598
+ #include <ATen/ops/detach_copy_native.h>
599
+ #include <ATen/ops/diag_native.h>
600
+ #include <ATen/ops/diag_embed_native.h>
601
+ #include <ATen/ops/diagflat_native.h>
602
+ #include <ATen/ops/diagonal_native.h>
603
+ #include <ATen/ops/diagonal_backward_native.h>
604
+ #include <ATen/ops/diagonal_copy_native.h>
605
+ #include <ATen/ops/diagonal_scatter_native.h>
606
+ #include <ATen/ops/diff_native.h>
607
+ #include <ATen/ops/digamma_native.h>
608
+ #include <ATen/ops/dist_native.h>
609
+ #include <ATen/ops/div_native.h>
610
+ #include <ATen/ops/divide_native.h>
611
+ #include <ATen/ops/dot_native.h>
612
+ #include <ATen/ops/dropout_native.h>
613
+ #include <ATen/ops/dsplit_native.h>
614
+ #include <ATen/ops/dstack_native.h>
615
+ #include <ATen/ops/einsum_native.h>
616
+ #include <ATen/ops/elu_native.h>
617
+ #include <ATen/ops/elu_backward_native.h>
618
+ #include <ATen/ops/embedding_native.h>
619
+ #include <ATen/ops/embedding_backward_native.h>
620
+ #include <ATen/ops/embedding_bag_native.h>
621
+ #include <ATen/ops/embedding_dense_backward_native.h>
622
+ #include <ATen/ops/embedding_renorm_native.h>
623
+ #include <ATen/ops/embedding_sparse_backward_native.h>
624
+ #include <ATen/ops/empty_native.h>
625
+ #include <ATen/ops/empty_like_native.h>
626
+ #include <ATen/ops/empty_permuted_native.h>
627
+ #include <ATen/ops/empty_quantized_native.h>
628
+ #include <ATen/ops/empty_strided_native.h>
629
+ #include <ATen/ops/eq_native.h>
630
+ #include <ATen/ops/equal_native.h>
631
+ #include <ATen/ops/erf_native.h>
632
+ #include <ATen/ops/erfc_native.h>
633
+ #include <ATen/ops/erfinv_native.h>
634
+ #include <ATen/ops/exp_native.h>
635
+ #include <ATen/ops/exp2_native.h>
636
+ #include <ATen/ops/expand_native.h>
637
+ #include <ATen/ops/expand_as_native.h>
638
+ #include <ATen/ops/expand_copy_native.h>
639
+ #include <ATen/ops/expm1_native.h>
640
+ #include <ATen/ops/exponential_native.h>
641
+ #include <ATen/ops/eye_native.h>
642
+ #include <ATen/ops/fake_quantize_per_channel_affine_native.h>
643
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_native.h>
644
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_backward_native.h>
645
+ #include <ATen/ops/fake_quantize_per_tensor_affine_native.h>
646
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_native.h>
647
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_backward_native.h>
648
+ #include <ATen/ops/fbgemm_linear_fp16_weight_native.h>
649
+ #include <ATen/ops/fbgemm_linear_fp16_weight_fp32_activation_native.h>
650
+ #include <ATen/ops/fbgemm_linear_int8_weight_native.h>
651
+ #include <ATen/ops/fbgemm_linear_int8_weight_fp32_activation_native.h>
652
+ #include <ATen/ops/fbgemm_linear_quantize_weight_native.h>
653
+ #include <ATen/ops/fbgemm_pack_gemm_matrix_fp16_native.h>
654
+ #include <ATen/ops/fbgemm_pack_quantized_matrix_native.h>
655
+ #include <ATen/ops/feature_alpha_dropout_native.h>
656
+ #include <ATen/ops/feature_dropout_native.h>
657
+ #include <ATen/ops/fft_fft_native.h>
658
+ #include <ATen/ops/fft_fft2_native.h>
659
+ #include <ATen/ops/fft_fftfreq_native.h>
660
+ #include <ATen/ops/fft_fftn_native.h>
661
+ #include <ATen/ops/fft_fftshift_native.h>
662
+ #include <ATen/ops/fft_hfft_native.h>
663
+ #include <ATen/ops/fft_hfft2_native.h>
664
+ #include <ATen/ops/fft_hfftn_native.h>
665
+ #include <ATen/ops/fft_ifft_native.h>
666
+ #include <ATen/ops/fft_ifft2_native.h>
667
+ #include <ATen/ops/fft_ifftn_native.h>
668
+ #include <ATen/ops/fft_ifftshift_native.h>
669
+ #include <ATen/ops/fft_ihfft_native.h>
670
+ #include <ATen/ops/fft_ihfft2_native.h>
671
+ #include <ATen/ops/fft_ihfftn_native.h>
672
+ #include <ATen/ops/fft_irfft_native.h>
673
+ #include <ATen/ops/fft_irfft2_native.h>
674
+ #include <ATen/ops/fft_irfftn_native.h>
675
+ #include <ATen/ops/fft_rfft_native.h>
676
+ #include <ATen/ops/fft_rfft2_native.h>
677
+ #include <ATen/ops/fft_rfftfreq_native.h>
678
+ #include <ATen/ops/fft_rfftn_native.h>
679
+ #include <ATen/ops/fill_native.h>
680
+ #include <ATen/ops/fill_diagonal_native.h>
681
+ #include <ATen/ops/fix_native.h>
682
+ #include <ATen/ops/flatten_native.h>
683
+ #include <ATen/ops/flatten_dense_tensors_native.h>
684
+ #include <ATen/ops/flip_native.h>
685
+ #include <ATen/ops/fliplr_native.h>
686
+ #include <ATen/ops/flipud_native.h>
687
+ #include <ATen/ops/float_power_native.h>
688
+ #include <ATen/ops/floor_native.h>
689
+ #include <ATen/ops/floor_divide_native.h>
690
+ #include <ATen/ops/fmax_native.h>
691
+ #include <ATen/ops/fmin_native.h>
692
+ #include <ATen/ops/fmod_native.h>
693
+ #include <ATen/ops/frac_native.h>
694
+ #include <ATen/ops/fractional_max_pool2d_native.h>
695
+ #include <ATen/ops/fractional_max_pool2d_backward_native.h>
696
+ #include <ATen/ops/fractional_max_pool3d_native.h>
697
+ #include <ATen/ops/fractional_max_pool3d_backward_native.h>
698
+ #include <ATen/ops/frexp_native.h>
699
+ #include <ATen/ops/frobenius_norm_native.h>
700
+ #include <ATen/ops/from_file_native.h>
701
+ #include <ATen/ops/full_native.h>
702
+ #include <ATen/ops/full_like_native.h>
703
+ #include <ATen/ops/fused_moving_avg_obs_fake_quant_native.h>
704
+ #include <ATen/ops/gather_native.h>
705
+ #include <ATen/ops/gather_backward_native.h>
706
+ #include <ATen/ops/gcd_native.h>
707
+ #include <ATen/ops/ge_native.h>
708
+ #include <ATen/ops/gelu_native.h>
709
+ #include <ATen/ops/gelu_backward_native.h>
710
+ #include <ATen/ops/geometric_native.h>
711
+ #include <ATen/ops/geqrf_native.h>
712
+ #include <ATen/ops/ger_native.h>
713
+ #include <ATen/ops/glu_native.h>
714
+ #include <ATen/ops/glu_backward_native.h>
715
+ #include <ATen/ops/glu_backward_jvp_native.h>
716
+ #include <ATen/ops/glu_jvp_native.h>
717
+ #include <ATen/ops/gradient_native.h>
718
+ #include <ATen/ops/greater_native.h>
719
+ #include <ATen/ops/greater_equal_native.h>
720
+ #include <ATen/ops/grid_sampler_native.h>
721
+ #include <ATen/ops/grid_sampler_2d_native.h>
722
+ #include <ATen/ops/grid_sampler_2d_backward_native.h>
723
+ #include <ATen/ops/grid_sampler_3d_native.h>
724
+ #include <ATen/ops/grid_sampler_3d_backward_native.h>
725
+ #include <ATen/ops/group_norm_native.h>
726
+ #include <ATen/ops/gru_native.h>
727
+ #include <ATen/ops/gru_cell_native.h>
728
+ #include <ATen/ops/gt_native.h>
729
+ #include <ATen/ops/hamming_window_native.h>
730
+ #include <ATen/ops/hann_window_native.h>
731
+ #include <ATen/ops/hardshrink_native.h>
732
+ #include <ATen/ops/hardshrink_backward_native.h>
733
+ #include <ATen/ops/hardsigmoid_native.h>
734
+ #include <ATen/ops/hardsigmoid_backward_native.h>
735
+ #include <ATen/ops/hardswish_native.h>
736
+ #include <ATen/ops/hardswish_backward_native.h>
737
+ #include <ATen/ops/hardtanh_native.h>
738
+ #include <ATen/ops/hardtanh_backward_native.h>
739
+ #include <ATen/ops/heaviside_native.h>
740
+ #include <ATen/ops/hinge_embedding_loss_native.h>
741
+ #include <ATen/ops/histc_native.h>
742
+ #include <ATen/ops/histogram_native.h>
743
+ #include <ATen/ops/histogramdd_native.h>
744
+ #include <ATen/ops/hsplit_native.h>
745
+ #include <ATen/ops/hspmm_native.h>
746
+ #include <ATen/ops/hstack_native.h>
747
+ #include <ATen/ops/huber_loss_native.h>
748
+ #include <ATen/ops/huber_loss_backward_native.h>
749
+ #include <ATen/ops/hypot_native.h>
750
+ #include <ATen/ops/i0_native.h>
751
+ #include <ATen/ops/igamma_native.h>
752
+ #include <ATen/ops/igammac_native.h>
753
+ #include <ATen/ops/im2col_native.h>
754
+ #include <ATen/ops/imag_native.h>
755
+ #include <ATen/ops/index_native.h>
756
+ #include <ATen/ops/index_add_native.h>
757
+ #include <ATen/ops/index_copy_native.h>
758
+ #include <ATen/ops/index_fill_native.h>
759
+ #include <ATen/ops/index_put_native.h>
760
+ #include <ATen/ops/index_reduce_native.h>
761
+ #include <ATen/ops/index_select_native.h>
762
+ #include <ATen/ops/index_select_backward_native.h>
763
+ #include <ATen/ops/indices_native.h>
764
+ #include <ATen/ops/indices_copy_native.h>
765
+ #include <ATen/ops/infinitely_differentiable_gelu_backward_native.h>
766
+ #include <ATen/ops/inner_native.h>
767
+ #include <ATen/ops/instance_norm_native.h>
768
+ #include <ATen/ops/int_repr_native.h>
769
+ #include <ATen/ops/inverse_native.h>
770
+ #include <ATen/ops/is_coalesced_native.h>
771
+ #include <ATen/ops/is_complex_native.h>
772
+ #include <ATen/ops/is_conj_native.h>
773
+ #include <ATen/ops/is_distributed_native.h>
774
+ #include <ATen/ops/is_floating_point_native.h>
775
+ #include <ATen/ops/is_inference_native.h>
776
+ #include <ATen/ops/is_leaf_native.h>
777
+ #include <ATen/ops/is_neg_native.h>
778
+ #include <ATen/ops/is_nonzero_native.h>
779
+ #include <ATen/ops/is_pinned_native.h>
780
+ #include <ATen/ops/is_same_size_native.h>
781
+ #include <ATen/ops/is_set_to_native.h>
782
+ #include <ATen/ops/is_signed_native.h>
783
+ #include <ATen/ops/is_vulkan_available_native.h>
784
+ #include <ATen/ops/isclose_native.h>
785
+ #include <ATen/ops/isfinite_native.h>
786
+ #include <ATen/ops/isin_native.h>
787
+ #include <ATen/ops/isinf_native.h>
788
+ #include <ATen/ops/isnan_native.h>
789
+ #include <ATen/ops/isneginf_native.h>
790
+ #include <ATen/ops/isposinf_native.h>
791
+ #include <ATen/ops/isreal_native.h>
792
+ #include <ATen/ops/istft_native.h>
793
+ #include <ATen/ops/item_native.h>
794
+ #include <ATen/ops/kaiser_window_native.h>
795
+ #include <ATen/ops/kl_div_native.h>
796
+ #include <ATen/ops/kron_native.h>
797
+ #include <ATen/ops/kthvalue_native.h>
798
+ #include <ATen/ops/l1_loss_native.h>
799
+ #include <ATen/ops/layer_norm_native.h>
800
+ #include <ATen/ops/lcm_native.h>
801
+ #include <ATen/ops/ldexp_native.h>
802
+ #include <ATen/ops/le_native.h>
803
+ #include <ATen/ops/leaky_relu_native.h>
804
+ #include <ATen/ops/leaky_relu_backward_native.h>
805
+ #include <ATen/ops/lerp_native.h>
806
+ #include <ATen/ops/less_native.h>
807
+ #include <ATen/ops/less_equal_native.h>
808
+ #include <ATen/ops/lgamma_native.h>
809
+ #include <ATen/ops/lift_native.h>
810
+ #include <ATen/ops/lift_fresh_native.h>
811
+ #include <ATen/ops/lift_fresh_copy_native.h>
812
+ #include <ATen/ops/linalg_cholesky_native.h>
813
+ #include <ATen/ops/linalg_cholesky_ex_native.h>
814
+ #include <ATen/ops/linalg_cond_native.h>
815
+ #include <ATen/ops/linalg_cross_native.h>
816
+ #include <ATen/ops/linalg_det_native.h>
817
+ #include <ATen/ops/linalg_diagonal_native.h>
818
+ #include <ATen/ops/linalg_eig_native.h>
819
+ #include <ATen/ops/linalg_eigh_native.h>
820
+ #include <ATen/ops/linalg_eigvals_native.h>
821
+ #include <ATen/ops/linalg_eigvalsh_native.h>
822
+ #include <ATen/ops/linalg_householder_product_native.h>
823
+ #include <ATen/ops/linalg_inv_native.h>
824
+ #include <ATen/ops/linalg_inv_ex_native.h>
825
+ #include <ATen/ops/linalg_ldl_factor_native.h>
826
+ #include <ATen/ops/linalg_ldl_factor_ex_native.h>
827
+ #include <ATen/ops/linalg_ldl_solve_native.h>
828
+ #include <ATen/ops/linalg_lstsq_native.h>
829
+ #include <ATen/ops/linalg_lu_native.h>
830
+ #include <ATen/ops/linalg_lu_factor_native.h>
831
+ #include <ATen/ops/linalg_lu_factor_ex_native.h>
832
+ #include <ATen/ops/linalg_lu_solve_native.h>
833
+ #include <ATen/ops/linalg_matmul_native.h>
834
+ #include <ATen/ops/linalg_matrix_exp_native.h>
835
+ #include <ATen/ops/linalg_matrix_norm_native.h>
836
+ #include <ATen/ops/linalg_matrix_power_native.h>
837
+ #include <ATen/ops/linalg_matrix_rank_native.h>
838
+ #include <ATen/ops/linalg_multi_dot_native.h>
839
+ #include <ATen/ops/linalg_norm_native.h>
840
+ #include <ATen/ops/linalg_pinv_native.h>
841
+ #include <ATen/ops/linalg_qr_native.h>
842
+ #include <ATen/ops/linalg_slogdet_native.h>
843
+ #include <ATen/ops/linalg_solve_native.h>
844
+ #include <ATen/ops/linalg_solve_ex_native.h>
845
+ #include <ATen/ops/linalg_solve_triangular_native.h>
846
+ #include <ATen/ops/linalg_svd_native.h>
847
+ #include <ATen/ops/linalg_svdvals_native.h>
848
+ #include <ATen/ops/linalg_tensorinv_native.h>
849
+ #include <ATen/ops/linalg_tensorsolve_native.h>
850
+ #include <ATen/ops/linalg_vander_native.h>
851
+ #include <ATen/ops/linalg_vecdot_native.h>
852
+ #include <ATen/ops/linalg_vector_norm_native.h>
853
+ #include <ATen/ops/linear_native.h>
854
+ #include <ATen/ops/linear_backward_native.h>
855
+ #include <ATen/ops/linspace_native.h>
856
+ #include <ATen/ops/log_native.h>
857
+ #include <ATen/ops/log10_native.h>
858
+ #include <ATen/ops/log1p_native.h>
859
+ #include <ATen/ops/log2_native.h>
860
+ #include <ATen/ops/log_normal_native.h>
861
+ #include <ATen/ops/log_sigmoid_native.h>
862
+ #include <ATen/ops/log_sigmoid_backward_native.h>
863
+ #include <ATen/ops/log_sigmoid_forward_native.h>
864
+ #include <ATen/ops/log_softmax_native.h>
865
+ #include <ATen/ops/logaddexp_native.h>
866
+ #include <ATen/ops/logaddexp2_native.h>
867
+ #include <ATen/ops/logcumsumexp_native.h>
868
+ #include <ATen/ops/logdet_native.h>
869
+ #include <ATen/ops/logical_and_native.h>
870
+ #include <ATen/ops/logical_not_native.h>
871
+ #include <ATen/ops/logical_or_native.h>
872
+ #include <ATen/ops/logical_xor_native.h>
873
+ #include <ATen/ops/logit_native.h>
874
+ #include <ATen/ops/logit_backward_native.h>
875
+ #include <ATen/ops/logspace_native.h>
876
+ #include <ATen/ops/logsumexp_native.h>
877
+ #include <ATen/ops/lshift_native.h>
878
+ #include <ATen/ops/lstm_native.h>
879
+ #include <ATen/ops/lstm_cell_native.h>
880
+ #include <ATen/ops/lstm_mps_backward_native.h>
881
+ #include <ATen/ops/lt_native.h>
882
+ #include <ATen/ops/lu_solve_native.h>
883
+ #include <ATen/ops/lu_unpack_native.h>
884
+ #include <ATen/ops/mH_native.h>
885
+ #include <ATen/ops/mT_native.h>
886
+ #include <ATen/ops/margin_ranking_loss_native.h>
887
+ #include <ATen/ops/masked_fill_native.h>
888
+ #include <ATen/ops/masked_scatter_native.h>
889
+ #include <ATen/ops/masked_scatter_backward_native.h>
890
+ #include <ATen/ops/masked_select_native.h>
891
+ #include <ATen/ops/masked_select_backward_native.h>
892
+ #include <ATen/ops/matmul_native.h>
893
+ #include <ATen/ops/matmul_backward_native.h>
894
+ #include <ATen/ops/matrix_H_native.h>
895
+ #include <ATen/ops/matrix_exp_native.h>
896
+ #include <ATen/ops/matrix_exp_backward_native.h>
897
+ #include <ATen/ops/matrix_power_native.h>
898
+ #include <ATen/ops/max_native.h>
899
+ #include <ATen/ops/max_pool1d_native.h>
900
+ #include <ATen/ops/max_pool1d_with_indices_native.h>
901
+ #include <ATen/ops/max_pool2d_native.h>
902
+ #include <ATen/ops/max_pool2d_backward_native.h>
903
+ #include <ATen/ops/max_pool2d_with_indices_native.h>
904
+ #include <ATen/ops/max_pool2d_with_indices_backward_native.h>
905
+ #include <ATen/ops/max_pool3d_native.h>
906
+ #include <ATen/ops/max_pool3d_with_indices_native.h>
907
+ #include <ATen/ops/max_pool3d_with_indices_backward_native.h>
908
+ #include <ATen/ops/max_unpool2d_native.h>
909
+ #include <ATen/ops/max_unpool3d_native.h>
910
+ #include <ATen/ops/maximum_native.h>
911
+ #include <ATen/ops/mean_native.h>
912
+ #include <ATen/ops/median_native.h>
913
+ #include <ATen/ops/meshgrid_native.h>
914
+ #include <ATen/ops/min_native.h>
915
+ #include <ATen/ops/minimum_native.h>
916
+ #include <ATen/ops/miopen_batch_norm_native.h>
917
+ #include <ATen/ops/miopen_batch_norm_backward_native.h>
918
+ #include <ATen/ops/miopen_convolution_native.h>
919
+ #include <ATen/ops/miopen_convolution_add_relu_native.h>
920
+ #include <ATen/ops/miopen_convolution_relu_native.h>
921
+ #include <ATen/ops/miopen_convolution_transpose_native.h>
922
+ #include <ATen/ops/miopen_depthwise_convolution_native.h>
923
+ #include <ATen/ops/miopen_rnn_native.h>
924
+ #include <ATen/ops/miopen_rnn_backward_native.h>
925
+ #include <ATen/ops/mish_native.h>
926
+ #include <ATen/ops/mish_backward_native.h>
927
+ #include <ATen/ops/mkldnn_adaptive_avg_pool2d_native.h>
928
+ #include <ATen/ops/mkldnn_adaptive_avg_pool2d_backward_native.h>
929
+ #include <ATen/ops/mkldnn_convolution_native.h>
930
+ #include <ATen/ops/mkldnn_linear_native.h>
931
+ #include <ATen/ops/mkldnn_linear_backward_native.h>
932
+ #include <ATen/ops/mkldnn_linear_backward_input_native.h>
933
+ #include <ATen/ops/mkldnn_linear_backward_weights_native.h>
934
+ #include <ATen/ops/mkldnn_max_pool2d_native.h>
935
+ #include <ATen/ops/mkldnn_max_pool2d_backward_native.h>
936
+ #include <ATen/ops/mkldnn_max_pool3d_native.h>
937
+ #include <ATen/ops/mkldnn_max_pool3d_backward_native.h>
938
+ #include <ATen/ops/mkldnn_reorder_conv2d_weight_native.h>
939
+ #include <ATen/ops/mkldnn_reorder_conv3d_weight_native.h>
940
+ #include <ATen/ops/mkldnn_rnn_layer_native.h>
941
+ #include <ATen/ops/mkldnn_rnn_layer_backward_native.h>
942
+ #include <ATen/ops/mm_native.h>
943
+ #include <ATen/ops/mode_native.h>
944
+ #include <ATen/ops/moveaxis_native.h>
945
+ #include <ATen/ops/movedim_native.h>
946
+ #include <ATen/ops/mps_convolution_backward_native.h>
947
+ #include <ATen/ops/mps_convolution_transpose_backward_native.h>
948
+ #include <ATen/ops/mse_loss_native.h>
949
+ #include <ATen/ops/mse_loss_backward_native.h>
950
+ #include <ATen/ops/msort_native.h>
951
+ #include <ATen/ops/mul_native.h>
952
+ #include <ATen/ops/multi_margin_loss_native.h>
953
+ #include <ATen/ops/multi_margin_loss_backward_native.h>
954
+ #include <ATen/ops/multilabel_margin_loss_native.h>
955
+ #include <ATen/ops/multilabel_margin_loss_backward_native.h>
956
+ #include <ATen/ops/multilabel_margin_loss_forward_native.h>
957
+ #include <ATen/ops/multinomial_native.h>
958
+ #include <ATen/ops/multiply_native.h>
959
+ #include <ATen/ops/mv_native.h>
960
+ #include <ATen/ops/mvlgamma_native.h>
961
+ #include <ATen/ops/nan_to_num_native.h>
962
+ #include <ATen/ops/nanmean_native.h>
963
+ #include <ATen/ops/nanmedian_native.h>
964
+ #include <ATen/ops/nanquantile_native.h>
965
+ #include <ATen/ops/nansum_native.h>
966
+ #include <ATen/ops/narrow_native.h>
967
+ #include <ATen/ops/narrow_copy_native.h>
968
+ #include <ATen/ops/native_batch_norm_native.h>
969
+ #include <ATen/ops/native_batch_norm_backward_native.h>
970
+ #include <ATen/ops/native_channel_shuffle_native.h>
971
+ #include <ATen/ops/native_dropout_native.h>
972
+ #include <ATen/ops/native_dropout_backward_native.h>
973
+ #include <ATen/ops/native_group_norm_native.h>
974
+ #include <ATen/ops/native_group_norm_backward_native.h>
975
+ #include <ATen/ops/native_layer_norm_native.h>
976
+ #include <ATen/ops/native_layer_norm_backward_native.h>
977
+ #include <ATen/ops/native_norm_native.h>
978
+ #include <ATen/ops/ne_native.h>
979
+ #include <ATen/ops/neg_native.h>
980
+ #include <ATen/ops/negative_native.h>
981
+ #include <ATen/ops/nested_to_padded_tensor_native.h>
982
+ #include <ATen/ops/new_empty_native.h>
983
+ #include <ATen/ops/new_empty_strided_native.h>
984
+ #include <ATen/ops/new_full_native.h>
985
+ #include <ATen/ops/new_ones_native.h>
986
+ #include <ATen/ops/new_zeros_native.h>
987
+ #include <ATen/ops/nextafter_native.h>
988
+ #include <ATen/ops/nll_loss_native.h>
989
+ #include <ATen/ops/nll_loss2d_native.h>
990
+ #include <ATen/ops/nll_loss2d_backward_native.h>
991
+ #include <ATen/ops/nll_loss2d_forward_native.h>
992
+ #include <ATen/ops/nll_loss_backward_native.h>
993
+ #include <ATen/ops/nll_loss_forward_native.h>
994
+ #include <ATen/ops/nll_loss_nd_native.h>
995
+ #include <ATen/ops/nonzero_native.h>
996
+ #include <ATen/ops/nonzero_numpy_native.h>
997
+ #include <ATen/ops/nonzero_static_native.h>
998
+ #include <ATen/ops/norm_native.h>
999
+ #include <ATen/ops/norm_except_dim_native.h>
1000
+ #include <ATen/ops/normal_native.h>
1001
+ #include <ATen/ops/not_equal_native.h>
1002
+ #include <ATen/ops/nuclear_norm_native.h>
1003
+ #include <ATen/ops/numpy_T_native.h>
1004
+ #include <ATen/ops/one_hot_native.h>
1005
+ #include <ATen/ops/ones_native.h>
1006
+ #include <ATen/ops/ones_like_native.h>
1007
+ #include <ATen/ops/or_native.h>
1008
+ #include <ATen/ops/orgqr_native.h>
1009
+ #include <ATen/ops/ormqr_native.h>
1010
+ #include <ATen/ops/outer_native.h>
1011
+ #include <ATen/ops/output_nr_native.h>
1012
+ #include <ATen/ops/pad_native.h>
1013
+ #include <ATen/ops/pad_sequence_native.h>
1014
+ #include <ATen/ops/pairwise_distance_native.h>
1015
+ #include <ATen/ops/pdist_native.h>
1016
+ #include <ATen/ops/permute_native.h>
1017
+ #include <ATen/ops/permute_copy_native.h>
1018
+ #include <ATen/ops/pin_memory_native.h>
1019
+ #include <ATen/ops/pinverse_native.h>
1020
+ #include <ATen/ops/pixel_shuffle_native.h>
1021
+ #include <ATen/ops/pixel_unshuffle_native.h>
1022
+ #include <ATen/ops/poisson_native.h>
1023
+ #include <ATen/ops/poisson_nll_loss_native.h>
1024
+ #include <ATen/ops/polar_native.h>
1025
+ #include <ATen/ops/polygamma_native.h>
1026
+ #include <ATen/ops/positive_native.h>
1027
+ #include <ATen/ops/pow_native.h>
1028
+ #include <ATen/ops/prelu_native.h>
1029
+ #include <ATen/ops/prod_native.h>
1030
+ #include <ATen/ops/promote_types_native.h>
1031
+ #include <ATen/ops/put_native.h>
1032
+ #include <ATen/ops/q_per_channel_axis_native.h>
1033
+ #include <ATen/ops/q_per_channel_scales_native.h>
1034
+ #include <ATen/ops/q_per_channel_zero_points_native.h>
1035
+ #include <ATen/ops/q_scale_native.h>
1036
+ #include <ATen/ops/q_zero_point_native.h>
1037
+ #include <ATen/ops/qr_native.h>
1038
+ #include <ATen/ops/qscheme_native.h>
1039
+ #include <ATen/ops/quantile_native.h>
1040
+ #include <ATen/ops/quantize_per_channel_native.h>
1041
+ #include <ATen/ops/quantize_per_tensor_native.h>
1042
+ #include <ATen/ops/quantize_per_tensor_dynamic_native.h>
1043
+ #include <ATen/ops/quantized_batch_norm_native.h>
1044
+ #include <ATen/ops/quantized_gru_cell_native.h>
1045
+ #include <ATen/ops/quantized_lstm_cell_native.h>
1046
+ #include <ATen/ops/quantized_max_pool1d_native.h>
1047
+ #include <ATen/ops/quantized_max_pool2d_native.h>
1048
+ #include <ATen/ops/quantized_max_pool3d_native.h>
1049
+ #include <ATen/ops/quantized_rnn_relu_cell_native.h>
1050
+ #include <ATen/ops/quantized_rnn_tanh_cell_native.h>
1051
+ #include <ATen/ops/rad2deg_native.h>
1052
+ #include <ATen/ops/rand_native.h>
1053
+ #include <ATen/ops/rand_like_native.h>
1054
+ #include <ATen/ops/randint_native.h>
1055
+ #include <ATen/ops/randint_like_native.h>
1056
+ #include <ATen/ops/randn_native.h>
1057
+ #include <ATen/ops/randn_like_native.h>
1058
+ #include <ATen/ops/random_native.h>
1059
+ #include <ATen/ops/randperm_native.h>
1060
+ #include <ATen/ops/range_native.h>
1061
+ #include <ATen/ops/ravel_native.h>
1062
+ #include <ATen/ops/real_native.h>
1063
+ #include <ATen/ops/reciprocal_native.h>
1064
+ #include <ATen/ops/record_stream_native.h>
1065
+ #include <ATen/ops/refine_names_native.h>
1066
+ #include <ATen/ops/reflection_pad1d_native.h>
1067
+ #include <ATen/ops/reflection_pad1d_backward_native.h>
1068
+ #include <ATen/ops/reflection_pad2d_native.h>
1069
+ #include <ATen/ops/reflection_pad2d_backward_native.h>
1070
+ #include <ATen/ops/reflection_pad3d_native.h>
1071
+ #include <ATen/ops/reflection_pad3d_backward_native.h>
1072
+ #include <ATen/ops/relu_native.h>
1073
+ #include <ATen/ops/relu6_native.h>
1074
+ #include <ATen/ops/remainder_native.h>
1075
+ #include <ATen/ops/rename_native.h>
1076
+ #include <ATen/ops/renorm_native.h>
1077
+ #include <ATen/ops/repeat_native.h>
1078
+ #include <ATen/ops/repeat_interleave_native.h>
1079
+ #include <ATen/ops/replication_pad1d_native.h>
1080
+ #include <ATen/ops/replication_pad1d_backward_native.h>
1081
+ #include <ATen/ops/replication_pad2d_native.h>
1082
+ #include <ATen/ops/replication_pad2d_backward_native.h>
1083
+ #include <ATen/ops/replication_pad3d_native.h>
1084
+ #include <ATen/ops/replication_pad3d_backward_native.h>
1085
+ #include <ATen/ops/requires_grad_native.h>
1086
+ #include <ATen/ops/reshape_native.h>
1087
+ #include <ATen/ops/reshape_as_native.h>
1088
+ #include <ATen/ops/resize_native.h>
1089
+ #include <ATen/ops/resize_as_native.h>
1090
+ #include <ATen/ops/resize_as_sparse_native.h>
1091
+ #include <ATen/ops/resolve_conj_native.h>
1092
+ #include <ATen/ops/resolve_neg_native.h>
1093
+ #include <ATen/ops/result_type_native.h>
1094
+ #include <ATen/ops/retain_grad_native.h>
1095
+ #include <ATen/ops/retains_grad_native.h>
1096
+ #include <ATen/ops/rms_norm_native.h>
1097
+ #include <ATen/ops/rnn_relu_native.h>
1098
+ #include <ATen/ops/rnn_relu_cell_native.h>
1099
+ #include <ATen/ops/rnn_tanh_native.h>
1100
+ #include <ATen/ops/rnn_tanh_cell_native.h>
1101
+ #include <ATen/ops/roll_native.h>
1102
+ #include <ATen/ops/rot90_native.h>
1103
+ #include <ATen/ops/round_native.h>
1104
+ #include <ATen/ops/row_indices_native.h>
1105
+ #include <ATen/ops/row_indices_copy_native.h>
1106
+ #include <ATen/ops/row_stack_native.h>
1107
+ #include <ATen/ops/rrelu_native.h>
1108
+ #include <ATen/ops/rrelu_with_noise_native.h>
1109
+ #include <ATen/ops/rrelu_with_noise_backward_native.h>
1110
+ #include <ATen/ops/rshift_native.h>
1111
+ #include <ATen/ops/rsqrt_native.h>
1112
+ #include <ATen/ops/rsub_native.h>
1113
+ #include <ATen/ops/scalar_tensor_native.h>
1114
+ #include <ATen/ops/scaled_dot_product_attention_native.h>
1115
+ #include <ATen/ops/scatter_native.h>
1116
+ #include <ATen/ops/scatter_add_native.h>
1117
+ #include <ATen/ops/scatter_reduce_native.h>
1118
+ #include <ATen/ops/searchsorted_native.h>
1119
+ #include <ATen/ops/segment_reduce_native.h>
1120
+ #include <ATen/ops/select_native.h>
1121
+ #include <ATen/ops/select_backward_native.h>
1122
+ #include <ATen/ops/select_copy_native.h>
1123
+ #include <ATen/ops/select_scatter_native.h>
1124
+ #include <ATen/ops/selu_native.h>
1125
+ #include <ATen/ops/set_native.h>
1126
+ #include <ATen/ops/set_data_native.h>
1127
+ #include <ATen/ops/sgn_native.h>
1128
+ #include <ATen/ops/sigmoid_native.h>
1129
+ #include <ATen/ops/sigmoid_backward_native.h>
1130
+ #include <ATen/ops/sign_native.h>
1131
+ #include <ATen/ops/signbit_native.h>
1132
+ #include <ATen/ops/silu_native.h>
1133
+ #include <ATen/ops/silu_backward_native.h>
1134
+ #include <ATen/ops/sin_native.h>
1135
+ #include <ATen/ops/sinc_native.h>
1136
+ #include <ATen/ops/sinh_native.h>
1137
+ #include <ATen/ops/size_native.h>
1138
+ #include <ATen/ops/slice_native.h>
1139
+ #include <ATen/ops/slice_backward_native.h>
1140
+ #include <ATen/ops/slice_copy_native.h>
1141
+ #include <ATen/ops/slice_inverse_native.h>
1142
+ #include <ATen/ops/slice_scatter_native.h>
1143
+ #include <ATen/ops/slogdet_native.h>
1144
+ #include <ATen/ops/slow_conv3d_native.h>
1145
+ #include <ATen/ops/slow_conv3d_forward_native.h>
1146
+ #include <ATen/ops/slow_conv_dilated2d_native.h>
1147
+ #include <ATen/ops/slow_conv_dilated3d_native.h>
1148
+ #include <ATen/ops/slow_conv_transpose2d_native.h>
1149
+ #include <ATen/ops/slow_conv_transpose3d_native.h>
1150
+ #include <ATen/ops/smm_native.h>
1151
+ #include <ATen/ops/smooth_l1_loss_native.h>
1152
+ #include <ATen/ops/smooth_l1_loss_backward_native.h>
1153
+ #include <ATen/ops/soft_margin_loss_native.h>
1154
+ #include <ATen/ops/soft_margin_loss_backward_native.h>
1155
+ #include <ATen/ops/softmax_native.h>
1156
+ #include <ATen/ops/softplus_native.h>
1157
+ #include <ATen/ops/softplus_backward_native.h>
1158
+ #include <ATen/ops/softshrink_native.h>
1159
+ #include <ATen/ops/softshrink_backward_native.h>
1160
+ #include <ATen/ops/sort_native.h>
1161
+ #include <ATen/ops/sparse_bsc_tensor_native.h>
1162
+ #include <ATen/ops/sparse_bsr_tensor_native.h>
1163
+ #include <ATen/ops/sparse_compressed_tensor_native.h>
1164
+ #include <ATen/ops/sparse_coo_tensor_native.h>
1165
+ #include <ATen/ops/sparse_csc_tensor_native.h>
1166
+ #include <ATen/ops/sparse_csr_tensor_native.h>
1167
+ #include <ATen/ops/sparse_dim_native.h>
1168
+ #include <ATen/ops/sparse_mask_native.h>
1169
+ #include <ATen/ops/sparse_resize_native.h>
1170
+ #include <ATen/ops/sparse_resize_and_clear_native.h>
1171
+ #include <ATen/ops/sparse_sampled_addmm_native.h>
1172
+ #include <ATen/ops/special_airy_ai_native.h>
1173
+ #include <ATen/ops/special_bessel_j0_native.h>
1174
+ #include <ATen/ops/special_bessel_j1_native.h>
1175
+ #include <ATen/ops/special_bessel_y0_native.h>
1176
+ #include <ATen/ops/special_bessel_y1_native.h>
1177
+ #include <ATen/ops/special_chebyshev_polynomial_t_native.h>
1178
+ #include <ATen/ops/special_chebyshev_polynomial_u_native.h>
1179
+ #include <ATen/ops/special_chebyshev_polynomial_v_native.h>
1180
+ #include <ATen/ops/special_chebyshev_polynomial_w_native.h>
1181
+ #include <ATen/ops/special_digamma_native.h>
1182
+ #include <ATen/ops/special_entr_native.h>
1183
+ #include <ATen/ops/special_erf_native.h>
1184
+ #include <ATen/ops/special_erfc_native.h>
1185
+ #include <ATen/ops/special_erfcx_native.h>
1186
+ #include <ATen/ops/special_erfinv_native.h>
1187
+ #include <ATen/ops/special_exp2_native.h>
1188
+ #include <ATen/ops/special_expit_native.h>
1189
+ #include <ATen/ops/special_expm1_native.h>
1190
+ #include <ATen/ops/special_gammainc_native.h>
1191
+ #include <ATen/ops/special_gammaincc_native.h>
1192
+ #include <ATen/ops/special_gammaln_native.h>
1193
+ #include <ATen/ops/special_hermite_polynomial_h_native.h>
1194
+ #include <ATen/ops/special_hermite_polynomial_he_native.h>
1195
+ #include <ATen/ops/special_i0_native.h>
1196
+ #include <ATen/ops/special_i0e_native.h>
1197
+ #include <ATen/ops/special_i1_native.h>
1198
+ #include <ATen/ops/special_i1e_native.h>
1199
+ #include <ATen/ops/special_laguerre_polynomial_l_native.h>
1200
+ #include <ATen/ops/special_legendre_polynomial_p_native.h>
1201
+ #include <ATen/ops/special_log1p_native.h>
1202
+ #include <ATen/ops/special_log_ndtr_native.h>
1203
+ #include <ATen/ops/special_log_softmax_native.h>
1204
+ #include <ATen/ops/special_logit_native.h>
1205
+ #include <ATen/ops/special_logsumexp_native.h>
1206
+ #include <ATen/ops/special_modified_bessel_i0_native.h>
1207
+ #include <ATen/ops/special_modified_bessel_i1_native.h>
1208
+ #include <ATen/ops/special_modified_bessel_k0_native.h>
1209
+ #include <ATen/ops/special_modified_bessel_k1_native.h>
1210
+ #include <ATen/ops/special_multigammaln_native.h>
1211
+ #include <ATen/ops/special_ndtr_native.h>
1212
+ #include <ATen/ops/special_ndtri_native.h>
1213
+ #include <ATen/ops/special_polygamma_native.h>
1214
+ #include <ATen/ops/special_psi_native.h>
1215
+ #include <ATen/ops/special_round_native.h>
1216
+ #include <ATen/ops/special_scaled_modified_bessel_k0_native.h>
1217
+ #include <ATen/ops/special_scaled_modified_bessel_k1_native.h>
1218
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_t_native.h>
1219
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_u_native.h>
1220
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_v_native.h>
1221
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_w_native.h>
1222
+ #include <ATen/ops/special_sinc_native.h>
1223
+ #include <ATen/ops/special_softmax_native.h>
1224
+ #include <ATen/ops/special_spherical_bessel_j0_native.h>
1225
+ #include <ATen/ops/special_xlog1py_native.h>
1226
+ #include <ATen/ops/special_xlogy_native.h>
1227
+ #include <ATen/ops/special_zeta_native.h>
1228
+ #include <ATen/ops/split_native.h>
1229
+ #include <ATen/ops/split_copy_native.h>
1230
+ #include <ATen/ops/split_with_sizes_native.h>
1231
+ #include <ATen/ops/split_with_sizes_copy_native.h>
1232
+ #include <ATen/ops/sqrt_native.h>
1233
+ #include <ATen/ops/square_native.h>
1234
+ #include <ATen/ops/squeeze_native.h>
1235
+ #include <ATen/ops/squeeze_copy_native.h>
1236
+ #include <ATen/ops/sspaddmm_native.h>
1237
+ #include <ATen/ops/stack_native.h>
1238
+ #include <ATen/ops/std_native.h>
1239
+ #include <ATen/ops/std_mean_native.h>
1240
+ #include <ATen/ops/stft_native.h>
1241
+ #include <ATen/ops/stride_native.h>
1242
+ #include <ATen/ops/sub_native.h>
1243
+ #include <ATen/ops/subtract_native.h>
1244
+ #include <ATen/ops/sum_native.h>
1245
+ #include <ATen/ops/sum_to_size_native.h>
1246
+ #include <ATen/ops/svd_native.h>
1247
+ #include <ATen/ops/swapaxes_native.h>
1248
+ #include <ATen/ops/swapdims_native.h>
1249
+ #include <ATen/ops/sym_constrain_range_native.h>
1250
+ #include <ATen/ops/sym_constrain_range_for_size_native.h>
1251
+ #include <ATen/ops/sym_numel_native.h>
1252
+ #include <ATen/ops/sym_size_native.h>
1253
+ #include <ATen/ops/sym_storage_offset_native.h>
1254
+ #include <ATen/ops/sym_stride_native.h>
1255
+ #include <ATen/ops/t_native.h>
1256
+ #include <ATen/ops/t_copy_native.h>
1257
+ #include <ATen/ops/take_native.h>
1258
+ #include <ATen/ops/take_along_dim_native.h>
1259
+ #include <ATen/ops/tan_native.h>
1260
+ #include <ATen/ops/tanh_native.h>
1261
+ #include <ATen/ops/tanh_backward_native.h>
1262
+ #include <ATen/ops/tensor_split_native.h>
1263
+ #include <ATen/ops/tensordot_native.h>
1264
+ #include <ATen/ops/thnn_conv2d_native.h>
1265
+ #include <ATen/ops/threshold_native.h>
1266
+ #include <ATen/ops/threshold_backward_native.h>
1267
+ #include <ATen/ops/tile_native.h>
1268
+ #include <ATen/ops/to_native.h>
1269
+ #include <ATen/ops/to_dense_native.h>
1270
+ #include <ATen/ops/to_dense_backward_native.h>
1271
+ #include <ATen/ops/to_mkldnn_native.h>
1272
+ #include <ATen/ops/to_mkldnn_backward_native.h>
1273
+ #include <ATen/ops/to_padded_tensor_native.h>
1274
+ #include <ATen/ops/to_sparse_native.h>
1275
+ #include <ATen/ops/to_sparse_bsc_native.h>
1276
+ #include <ATen/ops/to_sparse_bsr_native.h>
1277
+ #include <ATen/ops/to_sparse_csc_native.h>
1278
+ #include <ATen/ops/to_sparse_csr_native.h>
1279
+ #include <ATen/ops/topk_native.h>
1280
+ #include <ATen/ops/trace_native.h>
1281
+ #include <ATen/ops/trace_backward_native.h>
1282
+ #include <ATen/ops/transpose_native.h>
1283
+ #include <ATen/ops/transpose_copy_native.h>
1284
+ #include <ATen/ops/trapezoid_native.h>
1285
+ #include <ATen/ops/trapz_native.h>
1286
+ #include <ATen/ops/triangular_solve_native.h>
1287
+ #include <ATen/ops/tril_native.h>
1288
+ #include <ATen/ops/tril_indices_native.h>
1289
+ #include <ATen/ops/triplet_margin_loss_native.h>
1290
+ #include <ATen/ops/triu_native.h>
1291
+ #include <ATen/ops/triu_indices_native.h>
1292
+ #include <ATen/ops/true_divide_native.h>
1293
+ #include <ATen/ops/trunc_native.h>
1294
+ #include <ATen/ops/type_as_native.h>
1295
+ #include <ATen/ops/unbind_native.h>
1296
+ #include <ATen/ops/unbind_copy_native.h>
1297
+ #include <ATen/ops/unflatten_native.h>
1298
+ #include <ATen/ops/unflatten_dense_tensors_native.h>
1299
+ #include <ATen/ops/unfold_native.h>
1300
+ #include <ATen/ops/unfold_backward_native.h>
1301
+ #include <ATen/ops/unfold_copy_native.h>
1302
+ #include <ATen/ops/uniform_native.h>
1303
+ #include <ATen/ops/unique_consecutive_native.h>
1304
+ #include <ATen/ops/unique_dim_native.h>
1305
+ #include <ATen/ops/unique_dim_consecutive_native.h>
1306
+ #include <ATen/ops/unsafe_chunk_native.h>
1307
+ #include <ATen/ops/unsafe_split_native.h>
1308
+ #include <ATen/ops/unsafe_split_with_sizes_native.h>
1309
+ #include <ATen/ops/unsqueeze_native.h>
1310
+ #include <ATen/ops/unsqueeze_copy_native.h>
1311
+ #include <ATen/ops/upsample_bicubic2d_native.h>
1312
+ #include <ATen/ops/upsample_bicubic2d_backward_native.h>
1313
+ #include <ATen/ops/upsample_bilinear2d_native.h>
1314
+ #include <ATen/ops/upsample_bilinear2d_backward_native.h>
1315
+ #include <ATen/ops/upsample_linear1d_native.h>
1316
+ #include <ATen/ops/upsample_linear1d_backward_native.h>
1317
+ #include <ATen/ops/upsample_nearest1d_native.h>
1318
+ #include <ATen/ops/upsample_nearest1d_backward_native.h>
1319
+ #include <ATen/ops/upsample_nearest2d_native.h>
1320
+ #include <ATen/ops/upsample_nearest2d_backward_native.h>
1321
+ #include <ATen/ops/upsample_nearest3d_native.h>
1322
+ #include <ATen/ops/upsample_nearest3d_backward_native.h>
1323
+ #include <ATen/ops/upsample_trilinear3d_native.h>
1324
+ #include <ATen/ops/upsample_trilinear3d_backward_native.h>
1325
+ #include <ATen/ops/value_selecting_reduction_backward_native.h>
1326
+ #include <ATen/ops/values_native.h>
1327
+ #include <ATen/ops/values_copy_native.h>
1328
+ #include <ATen/ops/vander_native.h>
1329
+ #include <ATen/ops/var_native.h>
1330
+ #include <ATen/ops/var_mean_native.h>
1331
+ #include <ATen/ops/vdot_native.h>
1332
+ #include <ATen/ops/view_native.h>
1333
+ #include <ATen/ops/view_as_native.h>
1334
+ #include <ATen/ops/view_as_complex_native.h>
1335
+ #include <ATen/ops/view_as_complex_copy_native.h>
1336
+ #include <ATen/ops/view_as_real_native.h>
1337
+ #include <ATen/ops/view_as_real_copy_native.h>
1338
+ #include <ATen/ops/view_copy_native.h>
1339
+ #include <ATen/ops/vsplit_native.h>
1340
+ #include <ATen/ops/vstack_native.h>
1341
+ #include <ATen/ops/where_native.h>
1342
+ #include <ATen/ops/xlogy_native.h>
1343
+ #include <ATen/ops/xor_native.h>
1344
+ #include <ATen/ops/zero_native.h>
1345
+ #include <ATen/ops/zeros_native.h>
1346
+ #include <ATen/ops/zeros_like_native.h>
1347
+
1348
+
lib/python3.12/site-packages/torch/include/ATen/NativeMetaFunctions.h ADDED
@@ -0,0 +1,1334 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ // @generated by torchgen/gen.py from NativeMetaFunctions.h
4
+
5
+ #include <ATen/core/Tensor.h>
6
+ #include <ATen/core/IListRef.h>
7
+ #include <ATen/TensorMeta.h>
8
+ #include <ATen/TensorIterator.h>
9
+
10
+ #include <ATen/ops/_adaptive_avg_pool2d_meta.h>
11
+ #include <ATen/ops/_adaptive_avg_pool2d_backward_meta.h>
12
+ #include <ATen/ops/_adaptive_avg_pool3d_meta.h>
13
+ #include <ATen/ops/_adaptive_avg_pool3d_backward_meta.h>
14
+ #include <ATen/ops/_add_batch_dim_meta.h>
15
+ #include <ATen/ops/_add_relu_meta.h>
16
+ #include <ATen/ops/_addmm_activation_meta.h>
17
+ #include <ATen/ops/_aminmax_meta.h>
18
+ #include <ATen/ops/_amp_foreach_non_finite_check_and_unscale_meta.h>
19
+ #include <ATen/ops/_amp_update_scale_meta.h>
20
+ #include <ATen/ops/_assert_async_meta.h>
21
+ #include <ATen/ops/_assert_scalar_meta.h>
22
+ #include <ATen/ops/_assert_tensor_metadata_meta.h>
23
+ #include <ATen/ops/_autocast_to_full_precision_meta.h>
24
+ #include <ATen/ops/_autocast_to_reduced_precision_meta.h>
25
+ #include <ATen/ops/_backward_meta.h>
26
+ #include <ATen/ops/_batch_norm_impl_index_meta.h>
27
+ #include <ATen/ops/_batch_norm_impl_index_backward_meta.h>
28
+ #include <ATen/ops/_batch_norm_no_update_meta.h>
29
+ #include <ATen/ops/_batch_norm_with_update_meta.h>
30
+ #include <ATen/ops/_cast_Byte_meta.h>
31
+ #include <ATen/ops/_cast_Char_meta.h>
32
+ #include <ATen/ops/_cast_Double_meta.h>
33
+ #include <ATen/ops/_cast_Float_meta.h>
34
+ #include <ATen/ops/_cast_Half_meta.h>
35
+ #include <ATen/ops/_cast_Int_meta.h>
36
+ #include <ATen/ops/_cast_Long_meta.h>
37
+ #include <ATen/ops/_cast_Short_meta.h>
38
+ #include <ATen/ops/_cdist_backward_meta.h>
39
+ #include <ATen/ops/_cdist_forward_meta.h>
40
+ #include <ATen/ops/_cholesky_solve_helper_meta.h>
41
+ #include <ATen/ops/_choose_qparams_per_tensor_meta.h>
42
+ #include <ATen/ops/_chunk_cat_meta.h>
43
+ #include <ATen/ops/_coalesce_meta.h>
44
+ #include <ATen/ops/_coalesced_meta.h>
45
+ #include <ATen/ops/_compute_linear_combination_meta.h>
46
+ #include <ATen/ops/_conj_meta.h>
47
+ #include <ATen/ops/_conj_copy_meta.h>
48
+ #include <ATen/ops/_conj_physical_meta.h>
49
+ #include <ATen/ops/_conv_depthwise2d_meta.h>
50
+ #include <ATen/ops/_convert_indices_from_coo_to_csr_meta.h>
51
+ #include <ATen/ops/_convert_indices_from_csr_to_coo_meta.h>
52
+ #include <ATen/ops/_convert_weight_to_int4pack_meta.h>
53
+ #include <ATen/ops/_convert_weight_to_int4pack_for_cpu_meta.h>
54
+ #include <ATen/ops/_convolution_meta.h>
55
+ #include <ATen/ops/_convolution_double_backward_meta.h>
56
+ #include <ATen/ops/_convolution_mode_meta.h>
57
+ #include <ATen/ops/_copy_from_meta.h>
58
+ #include <ATen/ops/_copy_from_and_resize_meta.h>
59
+ #include <ATen/ops/_cslt_compress_meta.h>
60
+ #include <ATen/ops/_cslt_sparse_mm_meta.h>
61
+ #include <ATen/ops/_cslt_sparse_mm_search_meta.h>
62
+ #include <ATen/ops/_ctc_loss_meta.h>
63
+ #include <ATen/ops/_ctc_loss_backward_meta.h>
64
+ #include <ATen/ops/_cudnn_ctc_loss_meta.h>
65
+ #include <ATen/ops/_cudnn_init_dropout_state_meta.h>
66
+ #include <ATen/ops/_cudnn_rnn_meta.h>
67
+ #include <ATen/ops/_cudnn_rnn_backward_meta.h>
68
+ #include <ATen/ops/_cudnn_rnn_flatten_weight_meta.h>
69
+ #include <ATen/ops/_cufft_clear_plan_cache_meta.h>
70
+ #include <ATen/ops/_cufft_get_plan_cache_max_size_meta.h>
71
+ #include <ATen/ops/_cufft_get_plan_cache_size_meta.h>
72
+ #include <ATen/ops/_cufft_set_plan_cache_max_size_meta.h>
73
+ #include <ATen/ops/_cummax_helper_meta.h>
74
+ #include <ATen/ops/_cummin_helper_meta.h>
75
+ #include <ATen/ops/_debug_has_internal_overlap_meta.h>
76
+ #include <ATen/ops/_dimI_meta.h>
77
+ #include <ATen/ops/_dimV_meta.h>
78
+ #include <ATen/ops/_dim_arange_meta.h>
79
+ #include <ATen/ops/_dirichlet_grad_meta.h>
80
+ #include <ATen/ops/_efficient_attention_backward_meta.h>
81
+ #include <ATen/ops/_efficient_attention_forward_meta.h>
82
+ #include <ATen/ops/_efficientzerotensor_meta.h>
83
+ #include <ATen/ops/_embedding_bag_meta.h>
84
+ #include <ATen/ops/_embedding_bag_backward_meta.h>
85
+ #include <ATen/ops/_embedding_bag_dense_backward_meta.h>
86
+ #include <ATen/ops/_embedding_bag_forward_only_meta.h>
87
+ #include <ATen/ops/_embedding_bag_per_sample_weights_backward_meta.h>
88
+ #include <ATen/ops/_embedding_bag_sparse_backward_meta.h>
89
+ #include <ATen/ops/_empty_affine_quantized_meta.h>
90
+ #include <ATen/ops/_empty_per_channel_affine_quantized_meta.h>
91
+ #include <ATen/ops/_euclidean_dist_meta.h>
92
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_meta.h>
93
+ #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_backward_meta.h>
94
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_meta.h>
95
+ #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_backward_meta.h>
96
+ #include <ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams_meta.h>
97
+ #include <ATen/ops/_fft_c2c_meta.h>
98
+ #include <ATen/ops/_fft_c2r_meta.h>
99
+ #include <ATen/ops/_fft_r2c_meta.h>
100
+ #include <ATen/ops/_fill_mem_eff_dropout_mask_meta.h>
101
+ #include <ATen/ops/_flash_attention_backward_meta.h>
102
+ #include <ATen/ops/_flash_attention_forward_meta.h>
103
+ #include <ATen/ops/_foobar_meta.h>
104
+ #include <ATen/ops/_foreach_abs_meta.h>
105
+ #include <ATen/ops/_foreach_acos_meta.h>
106
+ #include <ATen/ops/_foreach_add_meta.h>
107
+ #include <ATen/ops/_foreach_addcdiv_meta.h>
108
+ #include <ATen/ops/_foreach_addcmul_meta.h>
109
+ #include <ATen/ops/_foreach_asin_meta.h>
110
+ #include <ATen/ops/_foreach_atan_meta.h>
111
+ #include <ATen/ops/_foreach_ceil_meta.h>
112
+ #include <ATen/ops/_foreach_clamp_max_meta.h>
113
+ #include <ATen/ops/_foreach_clamp_min_meta.h>
114
+ #include <ATen/ops/_foreach_copy_meta.h>
115
+ #include <ATen/ops/_foreach_cos_meta.h>
116
+ #include <ATen/ops/_foreach_cosh_meta.h>
117
+ #include <ATen/ops/_foreach_div_meta.h>
118
+ #include <ATen/ops/_foreach_erf_meta.h>
119
+ #include <ATen/ops/_foreach_erfc_meta.h>
120
+ #include <ATen/ops/_foreach_exp_meta.h>
121
+ #include <ATen/ops/_foreach_expm1_meta.h>
122
+ #include <ATen/ops/_foreach_floor_meta.h>
123
+ #include <ATen/ops/_foreach_frac_meta.h>
124
+ #include <ATen/ops/_foreach_lerp_meta.h>
125
+ #include <ATen/ops/_foreach_lgamma_meta.h>
126
+ #include <ATen/ops/_foreach_log_meta.h>
127
+ #include <ATen/ops/_foreach_log10_meta.h>
128
+ #include <ATen/ops/_foreach_log1p_meta.h>
129
+ #include <ATen/ops/_foreach_log2_meta.h>
130
+ #include <ATen/ops/_foreach_max_meta.h>
131
+ #include <ATen/ops/_foreach_maximum_meta.h>
132
+ #include <ATen/ops/_foreach_minimum_meta.h>
133
+ #include <ATen/ops/_foreach_mul_meta.h>
134
+ #include <ATen/ops/_foreach_neg_meta.h>
135
+ #include <ATen/ops/_foreach_norm_meta.h>
136
+ #include <ATen/ops/_foreach_pow_meta.h>
137
+ #include <ATen/ops/_foreach_reciprocal_meta.h>
138
+ #include <ATen/ops/_foreach_round_meta.h>
139
+ #include <ATen/ops/_foreach_rsqrt_meta.h>
140
+ #include <ATen/ops/_foreach_sigmoid_meta.h>
141
+ #include <ATen/ops/_foreach_sign_meta.h>
142
+ #include <ATen/ops/_foreach_sin_meta.h>
143
+ #include <ATen/ops/_foreach_sinh_meta.h>
144
+ #include <ATen/ops/_foreach_sqrt_meta.h>
145
+ #include <ATen/ops/_foreach_sub_meta.h>
146
+ #include <ATen/ops/_foreach_tan_meta.h>
147
+ #include <ATen/ops/_foreach_tanh_meta.h>
148
+ #include <ATen/ops/_foreach_trunc_meta.h>
149
+ #include <ATen/ops/_foreach_zero_meta.h>
150
+ #include <ATen/ops/_functional_assert_async_meta.h>
151
+ #include <ATen/ops/_functional_assert_scalar_meta.h>
152
+ #include <ATen/ops/_functional_sym_constrain_range_meta.h>
153
+ #include <ATen/ops/_functional_sym_constrain_range_for_size_meta.h>
154
+ #include <ATen/ops/_fused_adagrad_meta.h>
155
+ #include <ATen/ops/_fused_adam_meta.h>
156
+ #include <ATen/ops/_fused_adamw_meta.h>
157
+ #include <ATen/ops/_fused_dropout_meta.h>
158
+ #include <ATen/ops/_fused_moving_avg_obs_fq_helper_meta.h>
159
+ #include <ATen/ops/_fused_sdp_choice_meta.h>
160
+ #include <ATen/ops/_fused_sgd_meta.h>
161
+ #include <ATen/ops/_fw_primal_meta.h>
162
+ #include <ATen/ops/_fw_primal_copy_meta.h>
163
+ #include <ATen/ops/_gather_sparse_backward_meta.h>
164
+ #include <ATen/ops/_grid_sampler_2d_cpu_fallback_meta.h>
165
+ #include <ATen/ops/_grid_sampler_2d_cpu_fallback_backward_meta.h>
166
+ #include <ATen/ops/_has_compatible_shallow_copy_type_meta.h>
167
+ #include <ATen/ops/_has_same_storage_numel_meta.h>
168
+ #include <ATen/ops/_histogramdd_bin_edges_meta.h>
169
+ #include <ATen/ops/_histogramdd_from_bin_cts_meta.h>
170
+ #include <ATen/ops/_histogramdd_from_bin_tensors_meta.h>
171
+ #include <ATen/ops/_index_put_impl_meta.h>
172
+ #include <ATen/ops/_indices_meta.h>
173
+ #include <ATen/ops/_indices_copy_meta.h>
174
+ #include <ATen/ops/_int_mm_meta.h>
175
+ #include <ATen/ops/_is_all_true_meta.h>
176
+ #include <ATen/ops/_is_any_true_meta.h>
177
+ #include <ATen/ops/_is_zerotensor_meta.h>
178
+ #include <ATen/ops/_jagged_to_padded_dense_forward_meta.h>
179
+ #include <ATen/ops/_lazy_clone_meta.h>
180
+ #include <ATen/ops/_linalg_check_errors_meta.h>
181
+ #include <ATen/ops/_linalg_det_meta.h>
182
+ #include <ATen/ops/_linalg_eigh_meta.h>
183
+ #include <ATen/ops/_linalg_eigvals_meta.h>
184
+ #include <ATen/ops/_linalg_slogdet_meta.h>
185
+ #include <ATen/ops/_linalg_solve_ex_meta.h>
186
+ #include <ATen/ops/_linalg_svd_meta.h>
187
+ #include <ATen/ops/_local_scalar_dense_meta.h>
188
+ #include <ATen/ops/_log_softmax_meta.h>
189
+ #include <ATen/ops/_log_softmax_backward_data_meta.h>
190
+ #include <ATen/ops/_logcumsumexp_meta.h>
191
+ #include <ATen/ops/_lstm_mps_meta.h>
192
+ #include <ATen/ops/_lu_with_info_meta.h>
193
+ #include <ATen/ops/_make_dep_token_meta.h>
194
+ #include <ATen/ops/_make_dual_meta.h>
195
+ #include <ATen/ops/_make_dual_copy_meta.h>
196
+ #include <ATen/ops/_make_per_channel_quantized_tensor_meta.h>
197
+ #include <ATen/ops/_make_per_tensor_quantized_tensor_meta.h>
198
+ #include <ATen/ops/_masked_scale_meta.h>
199
+ #include <ATen/ops/_masked_softmax_meta.h>
200
+ #include <ATen/ops/_masked_softmax_backward_meta.h>
201
+ #include <ATen/ops/_mixed_dtypes_linear_meta.h>
202
+ #include <ATen/ops/_mkldnn_reshape_meta.h>
203
+ #include <ATen/ops/_mkldnn_transpose_meta.h>
204
+ #include <ATen/ops/_mps_convolution_meta.h>
205
+ #include <ATen/ops/_mps_convolution_transpose_meta.h>
206
+ #include <ATen/ops/_native_batch_norm_legit_meta.h>
207
+ #include <ATen/ops/_native_batch_norm_legit_no_training_meta.h>
208
+ #include <ATen/ops/_native_multi_head_attention_meta.h>
209
+ #include <ATen/ops/_neg_view_meta.h>
210
+ #include <ATen/ops/_neg_view_copy_meta.h>
211
+ #include <ATen/ops/_nested_compute_contiguous_strides_offsets_meta.h>
212
+ #include <ATen/ops/_nested_from_padded_meta.h>
213
+ #include <ATen/ops/_nested_from_padded_and_nested_example_meta.h>
214
+ #include <ATen/ops/_nested_from_padded_tensor_meta.h>
215
+ #include <ATen/ops/_nested_get_jagged_dummy_meta.h>
216
+ #include <ATen/ops/_nested_get_lengths_meta.h>
217
+ #include <ATen/ops/_nested_get_max_seqlen_meta.h>
218
+ #include <ATen/ops/_nested_get_min_seqlen_meta.h>
219
+ #include <ATen/ops/_nested_get_offsets_meta.h>
220
+ #include <ATen/ops/_nested_get_ragged_idx_meta.h>
221
+ #include <ATen/ops/_nested_get_values_meta.h>
222
+ #include <ATen/ops/_nested_get_values_copy_meta.h>
223
+ #include <ATen/ops/_nested_select_backward_meta.h>
224
+ #include <ATen/ops/_nested_sum_backward_meta.h>
225
+ #include <ATen/ops/_nested_tensor_from_mask_meta.h>
226
+ #include <ATen/ops/_nested_tensor_from_mask_left_aligned_meta.h>
227
+ #include <ATen/ops/_nested_tensor_from_tensor_list_meta.h>
228
+ #include <ATen/ops/_nested_tensor_size_meta.h>
229
+ #include <ATen/ops/_nested_tensor_softmax_with_shape_meta.h>
230
+ #include <ATen/ops/_nested_tensor_storage_offsets_meta.h>
231
+ #include <ATen/ops/_nested_tensor_strides_meta.h>
232
+ #include <ATen/ops/_nested_view_from_buffer_meta.h>
233
+ #include <ATen/ops/_nested_view_from_buffer_copy_meta.h>
234
+ #include <ATen/ops/_nested_view_from_jagged_meta.h>
235
+ #include <ATen/ops/_nested_view_from_jagged_copy_meta.h>
236
+ #include <ATen/ops/_new_zeros_with_same_feature_meta_meta.h>
237
+ #include <ATen/ops/_nnpack_available_meta.h>
238
+ #include <ATen/ops/_nnpack_spatial_convolution_meta.h>
239
+ #include <ATen/ops/_nnz_meta.h>
240
+ #include <ATen/ops/_pack_padded_sequence_meta.h>
241
+ #include <ATen/ops/_pack_padded_sequence_backward_meta.h>
242
+ #include <ATen/ops/_pad_circular_meta.h>
243
+ #include <ATen/ops/_pad_enum_meta.h>
244
+ #include <ATen/ops/_pad_packed_sequence_meta.h>
245
+ #include <ATen/ops/_padded_dense_to_jagged_forward_meta.h>
246
+ #include <ATen/ops/_pdist_backward_meta.h>
247
+ #include <ATen/ops/_pdist_forward_meta.h>
248
+ #include <ATen/ops/_pin_memory_meta.h>
249
+ #include <ATen/ops/_prelu_kernel_meta.h>
250
+ #include <ATen/ops/_prelu_kernel_backward_meta.h>
251
+ #include <ATen/ops/_print_meta.h>
252
+ #include <ATen/ops/_propagate_xla_data_meta.h>
253
+ #include <ATen/ops/_remove_batch_dim_meta.h>
254
+ #include <ATen/ops/_reshape_alias_meta.h>
255
+ #include <ATen/ops/_reshape_alias_copy_meta.h>
256
+ #include <ATen/ops/_reshape_copy_meta.h>
257
+ #include <ATen/ops/_reshape_from_tensor_meta.h>
258
+ #include <ATen/ops/_resize_output_meta.h>
259
+ #include <ATen/ops/_rowwise_prune_meta.h>
260
+ #include <ATen/ops/_safe_softmax_meta.h>
261
+ #include <ATen/ops/_sample_dirichlet_meta.h>
262
+ #include <ATen/ops/_saturate_weight_to_fp16_meta.h>
263
+ #include <ATen/ops/_scaled_dot_product_attention_math_meta.h>
264
+ #include <ATen/ops/_scaled_dot_product_attention_math_for_mps_meta.h>
265
+ #include <ATen/ops/_scaled_dot_product_cudnn_attention_meta.h>
266
+ #include <ATen/ops/_scaled_dot_product_cudnn_attention_backward_meta.h>
267
+ #include <ATen/ops/_scaled_dot_product_efficient_attention_meta.h>
268
+ #include <ATen/ops/_scaled_dot_product_efficient_attention_backward_meta.h>
269
+ #include <ATen/ops/_scaled_dot_product_flash_attention_meta.h>
270
+ #include <ATen/ops/_scaled_dot_product_flash_attention_backward_meta.h>
271
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_meta.h>
272
+ #include <ATen/ops/_scaled_dot_product_flash_attention_for_cpu_backward_meta.h>
273
+ #include <ATen/ops/_scaled_dot_product_fused_attention_overrideable_meta.h>
274
+ #include <ATen/ops/_scaled_dot_product_fused_attention_overrideable_backward_meta.h>
275
+ #include <ATen/ops/_scaled_mm_meta.h>
276
+ #include <ATen/ops/_segment_reduce_backward_meta.h>
277
+ #include <ATen/ops/_shape_as_tensor_meta.h>
278
+ #include <ATen/ops/_slow_conv2d_backward_meta.h>
279
+ #include <ATen/ops/_slow_conv2d_forward_meta.h>
280
+ #include <ATen/ops/_sobol_engine_draw_meta.h>
281
+ #include <ATen/ops/_sobol_engine_ff_meta.h>
282
+ #include <ATen/ops/_sobol_engine_initialize_state_meta.h>
283
+ #include <ATen/ops/_sobol_engine_scramble_meta.h>
284
+ #include <ATen/ops/_softmax_meta.h>
285
+ #include <ATen/ops/_softmax_backward_data_meta.h>
286
+ #include <ATen/ops/_sparse_addmm_meta.h>
287
+ #include <ATen/ops/_sparse_broadcast_to_meta.h>
288
+ #include <ATen/ops/_sparse_broadcast_to_copy_meta.h>
289
+ #include <ATen/ops/_sparse_bsc_tensor_unsafe_meta.h>
290
+ #include <ATen/ops/_sparse_bsr_tensor_unsafe_meta.h>
291
+ #include <ATen/ops/_sparse_compressed_tensor_unsafe_meta.h>
292
+ #include <ATen/ops/_sparse_compressed_tensor_with_dims_meta.h>
293
+ #include <ATen/ops/_sparse_coo_tensor_unsafe_meta.h>
294
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_meta.h>
295
+ #include <ATen/ops/_sparse_coo_tensor_with_dims_and_tensors_meta.h>
296
+ #include <ATen/ops/_sparse_csc_tensor_unsafe_meta.h>
297
+ #include <ATen/ops/_sparse_csr_prod_meta.h>
298
+ #include <ATen/ops/_sparse_csr_sum_meta.h>
299
+ #include <ATen/ops/_sparse_csr_tensor_unsafe_meta.h>
300
+ #include <ATen/ops/_sparse_log_softmax_meta.h>
301
+ #include <ATen/ops/_sparse_log_softmax_backward_data_meta.h>
302
+ #include <ATen/ops/_sparse_mask_projection_meta.h>
303
+ #include <ATen/ops/_sparse_mm_meta.h>
304
+ #include <ATen/ops/_sparse_mm_reduce_impl_meta.h>
305
+ #include <ATen/ops/_sparse_mm_reduce_impl_backward_meta.h>
306
+ #include <ATen/ops/_sparse_semi_structured_addmm_meta.h>
307
+ #include <ATen/ops/_sparse_semi_structured_apply_meta.h>
308
+ #include <ATen/ops/_sparse_semi_structured_apply_dense_meta.h>
309
+ #include <ATen/ops/_sparse_semi_structured_linear_meta.h>
310
+ #include <ATen/ops/_sparse_semi_structured_mm_meta.h>
311
+ #include <ATen/ops/_sparse_semi_structured_tile_meta.h>
312
+ #include <ATen/ops/_sparse_softmax_meta.h>
313
+ #include <ATen/ops/_sparse_softmax_backward_data_meta.h>
314
+ #include <ATen/ops/_sparse_sparse_matmul_meta.h>
315
+ #include <ATen/ops/_sparse_sum_meta.h>
316
+ #include <ATen/ops/_sparse_sum_backward_meta.h>
317
+ #include <ATen/ops/_spdiags_meta.h>
318
+ #include <ATen/ops/_spsolve_meta.h>
319
+ #include <ATen/ops/_stack_meta.h>
320
+ #include <ATen/ops/_standard_gamma_meta.h>
321
+ #include <ATen/ops/_standard_gamma_grad_meta.h>
322
+ #include <ATen/ops/_test_ambiguous_defaults_meta.h>
323
+ #include <ATen/ops/_test_autograd_multiple_dispatch_meta.h>
324
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view_meta.h>
325
+ #include <ATen/ops/_test_autograd_multiple_dispatch_view_copy_meta.h>
326
+ #include <ATen/ops/_test_check_tensor_meta.h>
327
+ #include <ATen/ops/_test_functorch_fallback_meta.h>
328
+ #include <ATen/ops/_test_optional_filled_intlist_meta.h>
329
+ #include <ATen/ops/_test_optional_floatlist_meta.h>
330
+ #include <ATen/ops/_test_optional_intlist_meta.h>
331
+ #include <ATen/ops/_test_parallel_materialize_meta.h>
332
+ #include <ATen/ops/_test_serialization_subcmul_meta.h>
333
+ #include <ATen/ops/_test_string_default_meta.h>
334
+ #include <ATen/ops/_test_warn_in_autograd_meta.h>
335
+ #include <ATen/ops/_thnn_differentiable_gru_cell_backward_meta.h>
336
+ #include <ATen/ops/_thnn_differentiable_lstm_cell_backward_meta.h>
337
+ #include <ATen/ops/_thnn_fused_gru_cell_meta.h>
338
+ #include <ATen/ops/_thnn_fused_gru_cell_backward_meta.h>
339
+ #include <ATen/ops/_thnn_fused_lstm_cell_meta.h>
340
+ #include <ATen/ops/_thnn_fused_lstm_cell_backward_meta.h>
341
+ #include <ATen/ops/_thnn_fused_lstm_cell_backward_impl_meta.h>
342
+ #include <ATen/ops/_to_copy_meta.h>
343
+ #include <ATen/ops/_to_cpu_meta.h>
344
+ #include <ATen/ops/_to_dense_meta.h>
345
+ #include <ATen/ops/_to_sparse_meta.h>
346
+ #include <ATen/ops/_to_sparse_bsc_meta.h>
347
+ #include <ATen/ops/_to_sparse_bsr_meta.h>
348
+ #include <ATen/ops/_to_sparse_csc_meta.h>
349
+ #include <ATen/ops/_to_sparse_csr_meta.h>
350
+ #include <ATen/ops/_to_sparse_semi_structured_meta.h>
351
+ #include <ATen/ops/_transform_bias_rescale_qkv_meta.h>
352
+ #include <ATen/ops/_transformer_encoder_layer_fwd_meta.h>
353
+ #include <ATen/ops/_trilinear_meta.h>
354
+ #include <ATen/ops/_triton_multi_head_attention_meta.h>
355
+ #include <ATen/ops/_triton_scaled_dot_attention_meta.h>
356
+ #include <ATen/ops/_unique_meta.h>
357
+ #include <ATen/ops/_unique2_meta.h>
358
+ #include <ATen/ops/_unpack_dual_meta.h>
359
+ #include <ATen/ops/_unsafe_index_meta.h>
360
+ #include <ATen/ops/_unsafe_index_put_meta.h>
361
+ #include <ATen/ops/_unsafe_masked_index_meta.h>
362
+ #include <ATen/ops/_unsafe_masked_index_put_accumulate_meta.h>
363
+ #include <ATen/ops/_unsafe_view_meta.h>
364
+ #include <ATen/ops/_upsample_bicubic2d_aa_meta.h>
365
+ #include <ATen/ops/_upsample_bicubic2d_aa_backward_meta.h>
366
+ #include <ATen/ops/_upsample_bilinear2d_aa_meta.h>
367
+ #include <ATen/ops/_upsample_bilinear2d_aa_backward_meta.h>
368
+ #include <ATen/ops/_upsample_nearest_exact1d_meta.h>
369
+ #include <ATen/ops/_upsample_nearest_exact1d_backward_meta.h>
370
+ #include <ATen/ops/_upsample_nearest_exact2d_meta.h>
371
+ #include <ATen/ops/_upsample_nearest_exact2d_backward_meta.h>
372
+ #include <ATen/ops/_upsample_nearest_exact3d_meta.h>
373
+ #include <ATen/ops/_upsample_nearest_exact3d_backward_meta.h>
374
+ #include <ATen/ops/_use_cudnn_ctc_loss_meta.h>
375
+ #include <ATen/ops/_use_cudnn_rnn_flatten_weight_meta.h>
376
+ #include <ATen/ops/_validate_compressed_sparse_indices_meta.h>
377
+ #include <ATen/ops/_validate_sparse_bsc_tensor_args_meta.h>
378
+ #include <ATen/ops/_validate_sparse_bsr_tensor_args_meta.h>
379
+ #include <ATen/ops/_validate_sparse_compressed_tensor_args_meta.h>
380
+ #include <ATen/ops/_validate_sparse_coo_tensor_args_meta.h>
381
+ #include <ATen/ops/_validate_sparse_csc_tensor_args_meta.h>
382
+ #include <ATen/ops/_validate_sparse_csr_tensor_args_meta.h>
383
+ #include <ATen/ops/_values_meta.h>
384
+ #include <ATen/ops/_values_copy_meta.h>
385
+ #include <ATen/ops/_version_meta.h>
386
+ #include <ATen/ops/_weight_int4pack_mm_meta.h>
387
+ #include <ATen/ops/_weight_int4pack_mm_for_cpu_meta.h>
388
+ #include <ATen/ops/_weight_int8pack_mm_meta.h>
389
+ #include <ATen/ops/_weight_norm_meta.h>
390
+ #include <ATen/ops/_weight_norm_differentiable_backward_meta.h>
391
+ #include <ATen/ops/_weight_norm_interface_meta.h>
392
+ #include <ATen/ops/_weight_norm_interface_backward_meta.h>
393
+ #include <ATen/ops/_wrapped_linear_prepack_meta.h>
394
+ #include <ATen/ops/_wrapped_quantized_linear_prepacked_meta.h>
395
+ #include <ATen/ops/abs_meta.h>
396
+ #include <ATen/ops/absolute_meta.h>
397
+ #include <ATen/ops/acos_meta.h>
398
+ #include <ATen/ops/acosh_meta.h>
399
+ #include <ATen/ops/adaptive_avg_pool1d_meta.h>
400
+ #include <ATen/ops/adaptive_avg_pool2d_meta.h>
401
+ #include <ATen/ops/adaptive_avg_pool3d_meta.h>
402
+ #include <ATen/ops/adaptive_avg_pool3d_backward_meta.h>
403
+ #include <ATen/ops/adaptive_max_pool1d_meta.h>
404
+ #include <ATen/ops/adaptive_max_pool2d_meta.h>
405
+ #include <ATen/ops/adaptive_max_pool2d_backward_meta.h>
406
+ #include <ATen/ops/adaptive_max_pool3d_meta.h>
407
+ #include <ATen/ops/adaptive_max_pool3d_backward_meta.h>
408
+ #include <ATen/ops/add_meta.h>
409
+ #include <ATen/ops/addbmm_meta.h>
410
+ #include <ATen/ops/addcdiv_meta.h>
411
+ #include <ATen/ops/addcmul_meta.h>
412
+ #include <ATen/ops/addmm_meta.h>
413
+ #include <ATen/ops/addmv_meta.h>
414
+ #include <ATen/ops/addr_meta.h>
415
+ #include <ATen/ops/adjoint_meta.h>
416
+ #include <ATen/ops/affine_grid_generator_meta.h>
417
+ #include <ATen/ops/affine_grid_generator_backward_meta.h>
418
+ #include <ATen/ops/alias_meta.h>
419
+ #include <ATen/ops/alias_copy_meta.h>
420
+ #include <ATen/ops/align_as_meta.h>
421
+ #include <ATen/ops/align_tensors_meta.h>
422
+ #include <ATen/ops/align_to_meta.h>
423
+ #include <ATen/ops/all_meta.h>
424
+ #include <ATen/ops/allclose_meta.h>
425
+ #include <ATen/ops/alpha_dropout_meta.h>
426
+ #include <ATen/ops/amax_meta.h>
427
+ #include <ATen/ops/amin_meta.h>
428
+ #include <ATen/ops/aminmax_meta.h>
429
+ #include <ATen/ops/and_meta.h>
430
+ #include <ATen/ops/angle_meta.h>
431
+ #include <ATen/ops/any_meta.h>
432
+ #include <ATen/ops/arange_meta.h>
433
+ #include <ATen/ops/arccos_meta.h>
434
+ #include <ATen/ops/arccosh_meta.h>
435
+ #include <ATen/ops/arcsin_meta.h>
436
+ #include <ATen/ops/arcsinh_meta.h>
437
+ #include <ATen/ops/arctan_meta.h>
438
+ #include <ATen/ops/arctan2_meta.h>
439
+ #include <ATen/ops/arctanh_meta.h>
440
+ #include <ATen/ops/argmax_meta.h>
441
+ #include <ATen/ops/argmin_meta.h>
442
+ #include <ATen/ops/argsort_meta.h>
443
+ #include <ATen/ops/argwhere_meta.h>
444
+ #include <ATen/ops/as_strided_meta.h>
445
+ #include <ATen/ops/as_strided_copy_meta.h>
446
+ #include <ATen/ops/as_strided_scatter_meta.h>
447
+ #include <ATen/ops/asin_meta.h>
448
+ #include <ATen/ops/asinh_meta.h>
449
+ #include <ATen/ops/atan_meta.h>
450
+ #include <ATen/ops/atan2_meta.h>
451
+ #include <ATen/ops/atanh_meta.h>
452
+ #include <ATen/ops/atleast_1d_meta.h>
453
+ #include <ATen/ops/atleast_2d_meta.h>
454
+ #include <ATen/ops/atleast_3d_meta.h>
455
+ #include <ATen/ops/avg_pool1d_meta.h>
456
+ #include <ATen/ops/avg_pool2d_meta.h>
457
+ #include <ATen/ops/avg_pool2d_backward_meta.h>
458
+ #include <ATen/ops/avg_pool3d_meta.h>
459
+ #include <ATen/ops/avg_pool3d_backward_meta.h>
460
+ #include <ATen/ops/baddbmm_meta.h>
461
+ #include <ATen/ops/bartlett_window_meta.h>
462
+ #include <ATen/ops/batch_norm_meta.h>
463
+ #include <ATen/ops/batch_norm_backward_meta.h>
464
+ #include <ATen/ops/batch_norm_backward_elemt_meta.h>
465
+ #include <ATen/ops/batch_norm_backward_reduce_meta.h>
466
+ #include <ATen/ops/batch_norm_elemt_meta.h>
467
+ #include <ATen/ops/batch_norm_gather_stats_meta.h>
468
+ #include <ATen/ops/batch_norm_gather_stats_with_counts_meta.h>
469
+ #include <ATen/ops/batch_norm_stats_meta.h>
470
+ #include <ATen/ops/batch_norm_update_stats_meta.h>
471
+ #include <ATen/ops/bernoulli_meta.h>
472
+ #include <ATen/ops/bilinear_meta.h>
473
+ #include <ATen/ops/binary_cross_entropy_meta.h>
474
+ #include <ATen/ops/binary_cross_entropy_backward_meta.h>
475
+ #include <ATen/ops/binary_cross_entropy_with_logits_meta.h>
476
+ #include <ATen/ops/bincount_meta.h>
477
+ #include <ATen/ops/binomial_meta.h>
478
+ #include <ATen/ops/bitwise_and_meta.h>
479
+ #include <ATen/ops/bitwise_left_shift_meta.h>
480
+ #include <ATen/ops/bitwise_not_meta.h>
481
+ #include <ATen/ops/bitwise_or_meta.h>
482
+ #include <ATen/ops/bitwise_right_shift_meta.h>
483
+ #include <ATen/ops/bitwise_xor_meta.h>
484
+ #include <ATen/ops/blackman_window_meta.h>
485
+ #include <ATen/ops/block_diag_meta.h>
486
+ #include <ATen/ops/bmm_meta.h>
487
+ #include <ATen/ops/broadcast_tensors_meta.h>
488
+ #include <ATen/ops/broadcast_to_meta.h>
489
+ #include <ATen/ops/bucketize_meta.h>
490
+ #include <ATen/ops/can_cast_meta.h>
491
+ #include <ATen/ops/cartesian_prod_meta.h>
492
+ #include <ATen/ops/cat_meta.h>
493
+ #include <ATen/ops/cauchy_meta.h>
494
+ #include <ATen/ops/ccol_indices_meta.h>
495
+ #include <ATen/ops/ccol_indices_copy_meta.h>
496
+ #include <ATen/ops/cdist_meta.h>
497
+ #include <ATen/ops/ceil_meta.h>
498
+ #include <ATen/ops/celu_meta.h>
499
+ #include <ATen/ops/chain_matmul_meta.h>
500
+ #include <ATen/ops/chalf_meta.h>
501
+ #include <ATen/ops/channel_shuffle_meta.h>
502
+ #include <ATen/ops/cholesky_meta.h>
503
+ #include <ATen/ops/cholesky_inverse_meta.h>
504
+ #include <ATen/ops/cholesky_solve_meta.h>
505
+ #include <ATen/ops/choose_qparams_optimized_meta.h>
506
+ #include <ATen/ops/chunk_meta.h>
507
+ #include <ATen/ops/clamp_meta.h>
508
+ #include <ATen/ops/clamp_max_meta.h>
509
+ #include <ATen/ops/clamp_min_meta.h>
510
+ #include <ATen/ops/clip_meta.h>
511
+ #include <ATen/ops/clone_meta.h>
512
+ #include <ATen/ops/coalesce_meta.h>
513
+ #include <ATen/ops/col2im_meta.h>
514
+ #include <ATen/ops/col_indices_meta.h>
515
+ #include <ATen/ops/col_indices_copy_meta.h>
516
+ #include <ATen/ops/column_stack_meta.h>
517
+ #include <ATen/ops/combinations_meta.h>
518
+ #include <ATen/ops/complex_meta.h>
519
+ #include <ATen/ops/concat_meta.h>
520
+ #include <ATen/ops/concatenate_meta.h>
521
+ #include <ATen/ops/conj_meta.h>
522
+ #include <ATen/ops/conj_physical_meta.h>
523
+ #include <ATen/ops/constant_pad_nd_meta.h>
524
+ #include <ATen/ops/contiguous_meta.h>
525
+ #include <ATen/ops/conv1d_meta.h>
526
+ #include <ATen/ops/conv2d_meta.h>
527
+ #include <ATen/ops/conv3d_meta.h>
528
+ #include <ATen/ops/conv_depthwise3d_meta.h>
529
+ #include <ATen/ops/conv_tbc_meta.h>
530
+ #include <ATen/ops/conv_tbc_backward_meta.h>
531
+ #include <ATen/ops/conv_transpose1d_meta.h>
532
+ #include <ATen/ops/conv_transpose2d_meta.h>
533
+ #include <ATen/ops/conv_transpose3d_meta.h>
534
+ #include <ATen/ops/convolution_meta.h>
535
+ #include <ATen/ops/convolution_backward_meta.h>
536
+ #include <ATen/ops/convolution_backward_overrideable_meta.h>
537
+ #include <ATen/ops/convolution_overrideable_meta.h>
538
+ #include <ATen/ops/copy_meta.h>
539
+ #include <ATen/ops/copy_sparse_to_sparse_meta.h>
540
+ #include <ATen/ops/copysign_meta.h>
541
+ #include <ATen/ops/corrcoef_meta.h>
542
+ #include <ATen/ops/cos_meta.h>
543
+ #include <ATen/ops/cosh_meta.h>
544
+ #include <ATen/ops/cosine_embedding_loss_meta.h>
545
+ #include <ATen/ops/cosine_similarity_meta.h>
546
+ #include <ATen/ops/count_nonzero_meta.h>
547
+ #include <ATen/ops/cov_meta.h>
548
+ #include <ATen/ops/cross_meta.h>
549
+ #include <ATen/ops/cross_entropy_loss_meta.h>
550
+ #include <ATen/ops/crow_indices_meta.h>
551
+ #include <ATen/ops/crow_indices_copy_meta.h>
552
+ #include <ATen/ops/ctc_loss_meta.h>
553
+ #include <ATen/ops/cudnn_affine_grid_generator_meta.h>
554
+ #include <ATen/ops/cudnn_affine_grid_generator_backward_meta.h>
555
+ #include <ATen/ops/cudnn_batch_norm_meta.h>
556
+ #include <ATen/ops/cudnn_batch_norm_backward_meta.h>
557
+ #include <ATen/ops/cudnn_convolution_meta.h>
558
+ #include <ATen/ops/cudnn_convolution_add_relu_meta.h>
559
+ #include <ATen/ops/cudnn_convolution_relu_meta.h>
560
+ #include <ATen/ops/cudnn_convolution_transpose_meta.h>
561
+ #include <ATen/ops/cudnn_grid_sampler_meta.h>
562
+ #include <ATen/ops/cudnn_grid_sampler_backward_meta.h>
563
+ #include <ATen/ops/cudnn_is_acceptable_meta.h>
564
+ #include <ATen/ops/cummax_meta.h>
565
+ #include <ATen/ops/cummaxmin_backward_meta.h>
566
+ #include <ATen/ops/cummin_meta.h>
567
+ #include <ATen/ops/cumprod_meta.h>
568
+ #include <ATen/ops/cumprod_backward_meta.h>
569
+ #include <ATen/ops/cumsum_meta.h>
570
+ #include <ATen/ops/cumulative_trapezoid_meta.h>
571
+ #include <ATen/ops/data_meta.h>
572
+ #include <ATen/ops/deg2rad_meta.h>
573
+ #include <ATen/ops/dense_dim_meta.h>
574
+ #include <ATen/ops/dequantize_meta.h>
575
+ #include <ATen/ops/det_meta.h>
576
+ #include <ATen/ops/detach_meta.h>
577
+ #include <ATen/ops/detach_copy_meta.h>
578
+ #include <ATen/ops/diag_meta.h>
579
+ #include <ATen/ops/diag_embed_meta.h>
580
+ #include <ATen/ops/diagflat_meta.h>
581
+ #include <ATen/ops/diagonal_meta.h>
582
+ #include <ATen/ops/diagonal_backward_meta.h>
583
+ #include <ATen/ops/diagonal_copy_meta.h>
584
+ #include <ATen/ops/diagonal_scatter_meta.h>
585
+ #include <ATen/ops/diff_meta.h>
586
+ #include <ATen/ops/digamma_meta.h>
587
+ #include <ATen/ops/dist_meta.h>
588
+ #include <ATen/ops/div_meta.h>
589
+ #include <ATen/ops/divide_meta.h>
590
+ #include <ATen/ops/dot_meta.h>
591
+ #include <ATen/ops/dropout_meta.h>
592
+ #include <ATen/ops/dsplit_meta.h>
593
+ #include <ATen/ops/dstack_meta.h>
594
+ #include <ATen/ops/einsum_meta.h>
595
+ #include <ATen/ops/elu_meta.h>
596
+ #include <ATen/ops/elu_backward_meta.h>
597
+ #include <ATen/ops/embedding_meta.h>
598
+ #include <ATen/ops/embedding_backward_meta.h>
599
+ #include <ATen/ops/embedding_bag_meta.h>
600
+ #include <ATen/ops/embedding_dense_backward_meta.h>
601
+ #include <ATen/ops/embedding_renorm_meta.h>
602
+ #include <ATen/ops/embedding_sparse_backward_meta.h>
603
+ #include <ATen/ops/empty_meta.h>
604
+ #include <ATen/ops/empty_like_meta.h>
605
+ #include <ATen/ops/empty_permuted_meta.h>
606
+ #include <ATen/ops/empty_quantized_meta.h>
607
+ #include <ATen/ops/empty_strided_meta.h>
608
+ #include <ATen/ops/eq_meta.h>
609
+ #include <ATen/ops/equal_meta.h>
610
+ #include <ATen/ops/erf_meta.h>
611
+ #include <ATen/ops/erfc_meta.h>
612
+ #include <ATen/ops/erfinv_meta.h>
613
+ #include <ATen/ops/exp_meta.h>
614
+ #include <ATen/ops/exp2_meta.h>
615
+ #include <ATen/ops/expand_meta.h>
616
+ #include <ATen/ops/expand_as_meta.h>
617
+ #include <ATen/ops/expand_copy_meta.h>
618
+ #include <ATen/ops/expm1_meta.h>
619
+ #include <ATen/ops/exponential_meta.h>
620
+ #include <ATen/ops/eye_meta.h>
621
+ #include <ATen/ops/fake_quantize_per_channel_affine_meta.h>
622
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_meta.h>
623
+ #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_backward_meta.h>
624
+ #include <ATen/ops/fake_quantize_per_tensor_affine_meta.h>
625
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_meta.h>
626
+ #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_backward_meta.h>
627
+ #include <ATen/ops/fbgemm_linear_fp16_weight_meta.h>
628
+ #include <ATen/ops/fbgemm_linear_fp16_weight_fp32_activation_meta.h>
629
+ #include <ATen/ops/fbgemm_linear_int8_weight_meta.h>
630
+ #include <ATen/ops/fbgemm_linear_int8_weight_fp32_activation_meta.h>
631
+ #include <ATen/ops/fbgemm_linear_quantize_weight_meta.h>
632
+ #include <ATen/ops/fbgemm_pack_gemm_matrix_fp16_meta.h>
633
+ #include <ATen/ops/fbgemm_pack_quantized_matrix_meta.h>
634
+ #include <ATen/ops/feature_alpha_dropout_meta.h>
635
+ #include <ATen/ops/feature_dropout_meta.h>
636
+ #include <ATen/ops/fft_fft_meta.h>
637
+ #include <ATen/ops/fft_fft2_meta.h>
638
+ #include <ATen/ops/fft_fftfreq_meta.h>
639
+ #include <ATen/ops/fft_fftn_meta.h>
640
+ #include <ATen/ops/fft_fftshift_meta.h>
641
+ #include <ATen/ops/fft_hfft_meta.h>
642
+ #include <ATen/ops/fft_hfft2_meta.h>
643
+ #include <ATen/ops/fft_hfftn_meta.h>
644
+ #include <ATen/ops/fft_ifft_meta.h>
645
+ #include <ATen/ops/fft_ifft2_meta.h>
646
+ #include <ATen/ops/fft_ifftn_meta.h>
647
+ #include <ATen/ops/fft_ifftshift_meta.h>
648
+ #include <ATen/ops/fft_ihfft_meta.h>
649
+ #include <ATen/ops/fft_ihfft2_meta.h>
650
+ #include <ATen/ops/fft_ihfftn_meta.h>
651
+ #include <ATen/ops/fft_irfft_meta.h>
652
+ #include <ATen/ops/fft_irfft2_meta.h>
653
+ #include <ATen/ops/fft_irfftn_meta.h>
654
+ #include <ATen/ops/fft_rfft_meta.h>
655
+ #include <ATen/ops/fft_rfft2_meta.h>
656
+ #include <ATen/ops/fft_rfftfreq_meta.h>
657
+ #include <ATen/ops/fft_rfftn_meta.h>
658
+ #include <ATen/ops/fill_meta.h>
659
+ #include <ATen/ops/fill_diagonal_meta.h>
660
+ #include <ATen/ops/fix_meta.h>
661
+ #include <ATen/ops/flatten_meta.h>
662
+ #include <ATen/ops/flatten_dense_tensors_meta.h>
663
+ #include <ATen/ops/flip_meta.h>
664
+ #include <ATen/ops/fliplr_meta.h>
665
+ #include <ATen/ops/flipud_meta.h>
666
+ #include <ATen/ops/float_power_meta.h>
667
+ #include <ATen/ops/floor_meta.h>
668
+ #include <ATen/ops/floor_divide_meta.h>
669
+ #include <ATen/ops/fmax_meta.h>
670
+ #include <ATen/ops/fmin_meta.h>
671
+ #include <ATen/ops/fmod_meta.h>
672
+ #include <ATen/ops/frac_meta.h>
673
+ #include <ATen/ops/fractional_max_pool2d_meta.h>
674
+ #include <ATen/ops/fractional_max_pool2d_backward_meta.h>
675
+ #include <ATen/ops/fractional_max_pool3d_meta.h>
676
+ #include <ATen/ops/fractional_max_pool3d_backward_meta.h>
677
+ #include <ATen/ops/frexp_meta.h>
678
+ #include <ATen/ops/frobenius_norm_meta.h>
679
+ #include <ATen/ops/from_file_meta.h>
680
+ #include <ATen/ops/full_meta.h>
681
+ #include <ATen/ops/full_like_meta.h>
682
+ #include <ATen/ops/fused_moving_avg_obs_fake_quant_meta.h>
683
+ #include <ATen/ops/gather_meta.h>
684
+ #include <ATen/ops/gather_backward_meta.h>
685
+ #include <ATen/ops/gcd_meta.h>
686
+ #include <ATen/ops/ge_meta.h>
687
+ #include <ATen/ops/gelu_meta.h>
688
+ #include <ATen/ops/gelu_backward_meta.h>
689
+ #include <ATen/ops/geometric_meta.h>
690
+ #include <ATen/ops/geqrf_meta.h>
691
+ #include <ATen/ops/ger_meta.h>
692
+ #include <ATen/ops/glu_meta.h>
693
+ #include <ATen/ops/glu_backward_meta.h>
694
+ #include <ATen/ops/glu_backward_jvp_meta.h>
695
+ #include <ATen/ops/glu_jvp_meta.h>
696
+ #include <ATen/ops/gradient_meta.h>
697
+ #include <ATen/ops/greater_meta.h>
698
+ #include <ATen/ops/greater_equal_meta.h>
699
+ #include <ATen/ops/grid_sampler_meta.h>
700
+ #include <ATen/ops/grid_sampler_2d_meta.h>
701
+ #include <ATen/ops/grid_sampler_2d_backward_meta.h>
702
+ #include <ATen/ops/grid_sampler_3d_meta.h>
703
+ #include <ATen/ops/grid_sampler_3d_backward_meta.h>
704
+ #include <ATen/ops/group_norm_meta.h>
705
+ #include <ATen/ops/gru_meta.h>
706
+ #include <ATen/ops/gru_cell_meta.h>
707
+ #include <ATen/ops/gt_meta.h>
708
+ #include <ATen/ops/hamming_window_meta.h>
709
+ #include <ATen/ops/hann_window_meta.h>
710
+ #include <ATen/ops/hardshrink_meta.h>
711
+ #include <ATen/ops/hardshrink_backward_meta.h>
712
+ #include <ATen/ops/hardsigmoid_meta.h>
713
+ #include <ATen/ops/hardsigmoid_backward_meta.h>
714
+ #include <ATen/ops/hardswish_meta.h>
715
+ #include <ATen/ops/hardswish_backward_meta.h>
716
+ #include <ATen/ops/hardtanh_meta.h>
717
+ #include <ATen/ops/hardtanh_backward_meta.h>
718
+ #include <ATen/ops/heaviside_meta.h>
719
+ #include <ATen/ops/hinge_embedding_loss_meta.h>
720
+ #include <ATen/ops/histc_meta.h>
721
+ #include <ATen/ops/histogram_meta.h>
722
+ #include <ATen/ops/histogramdd_meta.h>
723
+ #include <ATen/ops/hsplit_meta.h>
724
+ #include <ATen/ops/hspmm_meta.h>
725
+ #include <ATen/ops/hstack_meta.h>
726
+ #include <ATen/ops/huber_loss_meta.h>
727
+ #include <ATen/ops/huber_loss_backward_meta.h>
728
+ #include <ATen/ops/hypot_meta.h>
729
+ #include <ATen/ops/i0_meta.h>
730
+ #include <ATen/ops/igamma_meta.h>
731
+ #include <ATen/ops/igammac_meta.h>
732
+ #include <ATen/ops/im2col_meta.h>
733
+ #include <ATen/ops/imag_meta.h>
734
+ #include <ATen/ops/index_meta.h>
735
+ #include <ATen/ops/index_add_meta.h>
736
+ #include <ATen/ops/index_copy_meta.h>
737
+ #include <ATen/ops/index_fill_meta.h>
738
+ #include <ATen/ops/index_put_meta.h>
739
+ #include <ATen/ops/index_reduce_meta.h>
740
+ #include <ATen/ops/index_select_meta.h>
741
+ #include <ATen/ops/index_select_backward_meta.h>
742
+ #include <ATen/ops/indices_meta.h>
743
+ #include <ATen/ops/indices_copy_meta.h>
744
+ #include <ATen/ops/infinitely_differentiable_gelu_backward_meta.h>
745
+ #include <ATen/ops/inner_meta.h>
746
+ #include <ATen/ops/instance_norm_meta.h>
747
+ #include <ATen/ops/int_repr_meta.h>
748
+ #include <ATen/ops/inverse_meta.h>
749
+ #include <ATen/ops/is_coalesced_meta.h>
750
+ #include <ATen/ops/is_complex_meta.h>
751
+ #include <ATen/ops/is_conj_meta.h>
752
+ #include <ATen/ops/is_distributed_meta.h>
753
+ #include <ATen/ops/is_floating_point_meta.h>
754
+ #include <ATen/ops/is_inference_meta.h>
755
+ #include <ATen/ops/is_leaf_meta.h>
756
+ #include <ATen/ops/is_neg_meta.h>
757
+ #include <ATen/ops/is_nonzero_meta.h>
758
+ #include <ATen/ops/is_pinned_meta.h>
759
+ #include <ATen/ops/is_same_size_meta.h>
760
+ #include <ATen/ops/is_set_to_meta.h>
761
+ #include <ATen/ops/is_signed_meta.h>
762
+ #include <ATen/ops/is_vulkan_available_meta.h>
763
+ #include <ATen/ops/isclose_meta.h>
764
+ #include <ATen/ops/isfinite_meta.h>
765
+ #include <ATen/ops/isin_meta.h>
766
+ #include <ATen/ops/isinf_meta.h>
767
+ #include <ATen/ops/isnan_meta.h>
768
+ #include <ATen/ops/isneginf_meta.h>
769
+ #include <ATen/ops/isposinf_meta.h>
770
+ #include <ATen/ops/isreal_meta.h>
771
+ #include <ATen/ops/istft_meta.h>
772
+ #include <ATen/ops/item_meta.h>
773
+ #include <ATen/ops/kaiser_window_meta.h>
774
+ #include <ATen/ops/kl_div_meta.h>
775
+ #include <ATen/ops/kron_meta.h>
776
+ #include <ATen/ops/kthvalue_meta.h>
777
+ #include <ATen/ops/l1_loss_meta.h>
778
+ #include <ATen/ops/layer_norm_meta.h>
779
+ #include <ATen/ops/lcm_meta.h>
780
+ #include <ATen/ops/ldexp_meta.h>
781
+ #include <ATen/ops/le_meta.h>
782
+ #include <ATen/ops/leaky_relu_meta.h>
783
+ #include <ATen/ops/leaky_relu_backward_meta.h>
784
+ #include <ATen/ops/lerp_meta.h>
785
+ #include <ATen/ops/less_meta.h>
786
+ #include <ATen/ops/less_equal_meta.h>
787
+ #include <ATen/ops/lgamma_meta.h>
788
+ #include <ATen/ops/lift_meta.h>
789
+ #include <ATen/ops/lift_fresh_meta.h>
790
+ #include <ATen/ops/lift_fresh_copy_meta.h>
791
+ #include <ATen/ops/linalg_cholesky_meta.h>
792
+ #include <ATen/ops/linalg_cholesky_ex_meta.h>
793
+ #include <ATen/ops/linalg_cond_meta.h>
794
+ #include <ATen/ops/linalg_cross_meta.h>
795
+ #include <ATen/ops/linalg_det_meta.h>
796
+ #include <ATen/ops/linalg_diagonal_meta.h>
797
+ #include <ATen/ops/linalg_eig_meta.h>
798
+ #include <ATen/ops/linalg_eigh_meta.h>
799
+ #include <ATen/ops/linalg_eigvals_meta.h>
800
+ #include <ATen/ops/linalg_eigvalsh_meta.h>
801
+ #include <ATen/ops/linalg_householder_product_meta.h>
802
+ #include <ATen/ops/linalg_inv_meta.h>
803
+ #include <ATen/ops/linalg_inv_ex_meta.h>
804
+ #include <ATen/ops/linalg_ldl_factor_meta.h>
805
+ #include <ATen/ops/linalg_ldl_factor_ex_meta.h>
806
+ #include <ATen/ops/linalg_ldl_solve_meta.h>
807
+ #include <ATen/ops/linalg_lstsq_meta.h>
808
+ #include <ATen/ops/linalg_lu_meta.h>
809
+ #include <ATen/ops/linalg_lu_factor_meta.h>
810
+ #include <ATen/ops/linalg_lu_factor_ex_meta.h>
811
+ #include <ATen/ops/linalg_lu_solve_meta.h>
812
+ #include <ATen/ops/linalg_matmul_meta.h>
813
+ #include <ATen/ops/linalg_matrix_exp_meta.h>
814
+ #include <ATen/ops/linalg_matrix_norm_meta.h>
815
+ #include <ATen/ops/linalg_matrix_power_meta.h>
816
+ #include <ATen/ops/linalg_matrix_rank_meta.h>
817
+ #include <ATen/ops/linalg_multi_dot_meta.h>
818
+ #include <ATen/ops/linalg_norm_meta.h>
819
+ #include <ATen/ops/linalg_pinv_meta.h>
820
+ #include <ATen/ops/linalg_qr_meta.h>
821
+ #include <ATen/ops/linalg_slogdet_meta.h>
822
+ #include <ATen/ops/linalg_solve_meta.h>
823
+ #include <ATen/ops/linalg_solve_ex_meta.h>
824
+ #include <ATen/ops/linalg_solve_triangular_meta.h>
825
+ #include <ATen/ops/linalg_svd_meta.h>
826
+ #include <ATen/ops/linalg_svdvals_meta.h>
827
+ #include <ATen/ops/linalg_tensorinv_meta.h>
828
+ #include <ATen/ops/linalg_tensorsolve_meta.h>
829
+ #include <ATen/ops/linalg_vander_meta.h>
830
+ #include <ATen/ops/linalg_vecdot_meta.h>
831
+ #include <ATen/ops/linalg_vector_norm_meta.h>
832
+ #include <ATen/ops/linear_meta.h>
833
+ #include <ATen/ops/linear_backward_meta.h>
834
+ #include <ATen/ops/linspace_meta.h>
835
+ #include <ATen/ops/log_meta.h>
836
+ #include <ATen/ops/log10_meta.h>
837
+ #include <ATen/ops/log1p_meta.h>
838
+ #include <ATen/ops/log2_meta.h>
839
+ #include <ATen/ops/log_normal_meta.h>
840
+ #include <ATen/ops/log_sigmoid_meta.h>
841
+ #include <ATen/ops/log_sigmoid_backward_meta.h>
842
+ #include <ATen/ops/log_sigmoid_forward_meta.h>
843
+ #include <ATen/ops/log_softmax_meta.h>
844
+ #include <ATen/ops/logaddexp_meta.h>
845
+ #include <ATen/ops/logaddexp2_meta.h>
846
+ #include <ATen/ops/logcumsumexp_meta.h>
847
+ #include <ATen/ops/logdet_meta.h>
848
+ #include <ATen/ops/logical_and_meta.h>
849
+ #include <ATen/ops/logical_not_meta.h>
850
+ #include <ATen/ops/logical_or_meta.h>
851
+ #include <ATen/ops/logical_xor_meta.h>
852
+ #include <ATen/ops/logit_meta.h>
853
+ #include <ATen/ops/logit_backward_meta.h>
854
+ #include <ATen/ops/logspace_meta.h>
855
+ #include <ATen/ops/logsumexp_meta.h>
856
+ #include <ATen/ops/lshift_meta.h>
857
+ #include <ATen/ops/lstm_meta.h>
858
+ #include <ATen/ops/lstm_cell_meta.h>
859
+ #include <ATen/ops/lstm_mps_backward_meta.h>
860
+ #include <ATen/ops/lt_meta.h>
861
+ #include <ATen/ops/lu_solve_meta.h>
862
+ #include <ATen/ops/lu_unpack_meta.h>
863
+ #include <ATen/ops/mH_meta.h>
864
+ #include <ATen/ops/mT_meta.h>
865
+ #include <ATen/ops/margin_ranking_loss_meta.h>
866
+ #include <ATen/ops/masked_fill_meta.h>
867
+ #include <ATen/ops/masked_scatter_meta.h>
868
+ #include <ATen/ops/masked_scatter_backward_meta.h>
869
+ #include <ATen/ops/masked_select_meta.h>
870
+ #include <ATen/ops/masked_select_backward_meta.h>
871
+ #include <ATen/ops/matmul_meta.h>
872
+ #include <ATen/ops/matmul_backward_meta.h>
873
+ #include <ATen/ops/matrix_H_meta.h>
874
+ #include <ATen/ops/matrix_exp_meta.h>
875
+ #include <ATen/ops/matrix_exp_backward_meta.h>
876
+ #include <ATen/ops/matrix_power_meta.h>
877
+ #include <ATen/ops/max_meta.h>
878
+ #include <ATen/ops/max_pool1d_meta.h>
879
+ #include <ATen/ops/max_pool1d_with_indices_meta.h>
880
+ #include <ATen/ops/max_pool2d_meta.h>
881
+ #include <ATen/ops/max_pool2d_backward_meta.h>
882
+ #include <ATen/ops/max_pool2d_with_indices_meta.h>
883
+ #include <ATen/ops/max_pool2d_with_indices_backward_meta.h>
884
+ #include <ATen/ops/max_pool3d_meta.h>
885
+ #include <ATen/ops/max_pool3d_with_indices_meta.h>
886
+ #include <ATen/ops/max_pool3d_with_indices_backward_meta.h>
887
+ #include <ATen/ops/max_unpool2d_meta.h>
888
+ #include <ATen/ops/max_unpool3d_meta.h>
889
+ #include <ATen/ops/maximum_meta.h>
890
+ #include <ATen/ops/mean_meta.h>
891
+ #include <ATen/ops/median_meta.h>
892
+ #include <ATen/ops/meshgrid_meta.h>
893
+ #include <ATen/ops/min_meta.h>
894
+ #include <ATen/ops/minimum_meta.h>
895
+ #include <ATen/ops/miopen_batch_norm_meta.h>
896
+ #include <ATen/ops/miopen_batch_norm_backward_meta.h>
897
+ #include <ATen/ops/miopen_convolution_meta.h>
898
+ #include <ATen/ops/miopen_convolution_add_relu_meta.h>
899
+ #include <ATen/ops/miopen_convolution_relu_meta.h>
900
+ #include <ATen/ops/miopen_convolution_transpose_meta.h>
901
+ #include <ATen/ops/miopen_depthwise_convolution_meta.h>
902
+ #include <ATen/ops/miopen_rnn_meta.h>
903
+ #include <ATen/ops/miopen_rnn_backward_meta.h>
904
+ #include <ATen/ops/mish_meta.h>
905
+ #include <ATen/ops/mish_backward_meta.h>
906
+ #include <ATen/ops/mkldnn_adaptive_avg_pool2d_meta.h>
907
+ #include <ATen/ops/mkldnn_adaptive_avg_pool2d_backward_meta.h>
908
+ #include <ATen/ops/mkldnn_convolution_meta.h>
909
+ #include <ATen/ops/mkldnn_linear_meta.h>
910
+ #include <ATen/ops/mkldnn_linear_backward_meta.h>
911
+ #include <ATen/ops/mkldnn_linear_backward_input_meta.h>
912
+ #include <ATen/ops/mkldnn_linear_backward_weights_meta.h>
913
+ #include <ATen/ops/mkldnn_max_pool2d_meta.h>
914
+ #include <ATen/ops/mkldnn_max_pool2d_backward_meta.h>
915
+ #include <ATen/ops/mkldnn_max_pool3d_meta.h>
916
+ #include <ATen/ops/mkldnn_max_pool3d_backward_meta.h>
917
+ #include <ATen/ops/mkldnn_reorder_conv2d_weight_meta.h>
918
+ #include <ATen/ops/mkldnn_reorder_conv3d_weight_meta.h>
919
+ #include <ATen/ops/mkldnn_rnn_layer_meta.h>
920
+ #include <ATen/ops/mkldnn_rnn_layer_backward_meta.h>
921
+ #include <ATen/ops/mm_meta.h>
922
+ #include <ATen/ops/mode_meta.h>
923
+ #include <ATen/ops/moveaxis_meta.h>
924
+ #include <ATen/ops/movedim_meta.h>
925
+ #include <ATen/ops/mps_convolution_backward_meta.h>
926
+ #include <ATen/ops/mps_convolution_transpose_backward_meta.h>
927
+ #include <ATen/ops/mse_loss_meta.h>
928
+ #include <ATen/ops/mse_loss_backward_meta.h>
929
+ #include <ATen/ops/msort_meta.h>
930
+ #include <ATen/ops/mul_meta.h>
931
+ #include <ATen/ops/multi_margin_loss_meta.h>
932
+ #include <ATen/ops/multi_margin_loss_backward_meta.h>
933
+ #include <ATen/ops/multilabel_margin_loss_meta.h>
934
+ #include <ATen/ops/multilabel_margin_loss_backward_meta.h>
935
+ #include <ATen/ops/multilabel_margin_loss_forward_meta.h>
936
+ #include <ATen/ops/multinomial_meta.h>
937
+ #include <ATen/ops/multiply_meta.h>
938
+ #include <ATen/ops/mv_meta.h>
939
+ #include <ATen/ops/mvlgamma_meta.h>
940
+ #include <ATen/ops/nan_to_num_meta.h>
941
+ #include <ATen/ops/nanmean_meta.h>
942
+ #include <ATen/ops/nanmedian_meta.h>
943
+ #include <ATen/ops/nanquantile_meta.h>
944
+ #include <ATen/ops/nansum_meta.h>
945
+ #include <ATen/ops/narrow_meta.h>
946
+ #include <ATen/ops/narrow_copy_meta.h>
947
+ #include <ATen/ops/native_batch_norm_meta.h>
948
+ #include <ATen/ops/native_batch_norm_backward_meta.h>
949
+ #include <ATen/ops/native_channel_shuffle_meta.h>
950
+ #include <ATen/ops/native_dropout_meta.h>
951
+ #include <ATen/ops/native_dropout_backward_meta.h>
952
+ #include <ATen/ops/native_group_norm_meta.h>
953
+ #include <ATen/ops/native_group_norm_backward_meta.h>
954
+ #include <ATen/ops/native_layer_norm_meta.h>
955
+ #include <ATen/ops/native_layer_norm_backward_meta.h>
956
+ #include <ATen/ops/native_norm_meta.h>
957
+ #include <ATen/ops/ne_meta.h>
958
+ #include <ATen/ops/neg_meta.h>
959
+ #include <ATen/ops/negative_meta.h>
960
+ #include <ATen/ops/nested_to_padded_tensor_meta.h>
961
+ #include <ATen/ops/new_empty_meta.h>
962
+ #include <ATen/ops/new_empty_strided_meta.h>
963
+ #include <ATen/ops/new_full_meta.h>
964
+ #include <ATen/ops/new_ones_meta.h>
965
+ #include <ATen/ops/new_zeros_meta.h>
966
+ #include <ATen/ops/nextafter_meta.h>
967
+ #include <ATen/ops/nll_loss_meta.h>
968
+ #include <ATen/ops/nll_loss2d_meta.h>
969
+ #include <ATen/ops/nll_loss2d_backward_meta.h>
970
+ #include <ATen/ops/nll_loss2d_forward_meta.h>
971
+ #include <ATen/ops/nll_loss_backward_meta.h>
972
+ #include <ATen/ops/nll_loss_forward_meta.h>
973
+ #include <ATen/ops/nll_loss_nd_meta.h>
974
+ #include <ATen/ops/nonzero_meta.h>
975
+ #include <ATen/ops/nonzero_numpy_meta.h>
976
+ #include <ATen/ops/nonzero_static_meta.h>
977
+ #include <ATen/ops/norm_meta.h>
978
+ #include <ATen/ops/norm_except_dim_meta.h>
979
+ #include <ATen/ops/normal_meta.h>
980
+ #include <ATen/ops/not_equal_meta.h>
981
+ #include <ATen/ops/nuclear_norm_meta.h>
982
+ #include <ATen/ops/numpy_T_meta.h>
983
+ #include <ATen/ops/one_hot_meta.h>
984
+ #include <ATen/ops/ones_meta.h>
985
+ #include <ATen/ops/ones_like_meta.h>
986
+ #include <ATen/ops/or_meta.h>
987
+ #include <ATen/ops/orgqr_meta.h>
988
+ #include <ATen/ops/ormqr_meta.h>
989
+ #include <ATen/ops/outer_meta.h>
990
+ #include <ATen/ops/output_nr_meta.h>
991
+ #include <ATen/ops/pad_meta.h>
992
+ #include <ATen/ops/pad_sequence_meta.h>
993
+ #include <ATen/ops/pairwise_distance_meta.h>
994
+ #include <ATen/ops/pdist_meta.h>
995
+ #include <ATen/ops/permute_meta.h>
996
+ #include <ATen/ops/permute_copy_meta.h>
997
+ #include <ATen/ops/pin_memory_meta.h>
998
+ #include <ATen/ops/pinverse_meta.h>
999
+ #include <ATen/ops/pixel_shuffle_meta.h>
1000
+ #include <ATen/ops/pixel_unshuffle_meta.h>
1001
+ #include <ATen/ops/poisson_meta.h>
1002
+ #include <ATen/ops/poisson_nll_loss_meta.h>
1003
+ #include <ATen/ops/polar_meta.h>
1004
+ #include <ATen/ops/polygamma_meta.h>
1005
+ #include <ATen/ops/positive_meta.h>
1006
+ #include <ATen/ops/pow_meta.h>
1007
+ #include <ATen/ops/prelu_meta.h>
1008
+ #include <ATen/ops/prod_meta.h>
1009
+ #include <ATen/ops/promote_types_meta.h>
1010
+ #include <ATen/ops/put_meta.h>
1011
+ #include <ATen/ops/q_per_channel_axis_meta.h>
1012
+ #include <ATen/ops/q_per_channel_scales_meta.h>
1013
+ #include <ATen/ops/q_per_channel_zero_points_meta.h>
1014
+ #include <ATen/ops/q_scale_meta.h>
1015
+ #include <ATen/ops/q_zero_point_meta.h>
1016
+ #include <ATen/ops/qr_meta.h>
1017
+ #include <ATen/ops/qscheme_meta.h>
1018
+ #include <ATen/ops/quantile_meta.h>
1019
+ #include <ATen/ops/quantize_per_channel_meta.h>
1020
+ #include <ATen/ops/quantize_per_tensor_meta.h>
1021
+ #include <ATen/ops/quantize_per_tensor_dynamic_meta.h>
1022
+ #include <ATen/ops/quantized_batch_norm_meta.h>
1023
+ #include <ATen/ops/quantized_gru_cell_meta.h>
1024
+ #include <ATen/ops/quantized_lstm_cell_meta.h>
1025
+ #include <ATen/ops/quantized_max_pool1d_meta.h>
1026
+ #include <ATen/ops/quantized_max_pool2d_meta.h>
1027
+ #include <ATen/ops/quantized_max_pool3d_meta.h>
1028
+ #include <ATen/ops/quantized_rnn_relu_cell_meta.h>
1029
+ #include <ATen/ops/quantized_rnn_tanh_cell_meta.h>
1030
+ #include <ATen/ops/rad2deg_meta.h>
1031
+ #include <ATen/ops/rand_meta.h>
1032
+ #include <ATen/ops/rand_like_meta.h>
1033
+ #include <ATen/ops/randint_meta.h>
1034
+ #include <ATen/ops/randint_like_meta.h>
1035
+ #include <ATen/ops/randn_meta.h>
1036
+ #include <ATen/ops/randn_like_meta.h>
1037
+ #include <ATen/ops/random_meta.h>
1038
+ #include <ATen/ops/randperm_meta.h>
1039
+ #include <ATen/ops/range_meta.h>
1040
+ #include <ATen/ops/ravel_meta.h>
1041
+ #include <ATen/ops/real_meta.h>
1042
+ #include <ATen/ops/reciprocal_meta.h>
1043
+ #include <ATen/ops/record_stream_meta.h>
1044
+ #include <ATen/ops/refine_names_meta.h>
1045
+ #include <ATen/ops/reflection_pad1d_meta.h>
1046
+ #include <ATen/ops/reflection_pad1d_backward_meta.h>
1047
+ #include <ATen/ops/reflection_pad2d_meta.h>
1048
+ #include <ATen/ops/reflection_pad2d_backward_meta.h>
1049
+ #include <ATen/ops/reflection_pad3d_meta.h>
1050
+ #include <ATen/ops/reflection_pad3d_backward_meta.h>
1051
+ #include <ATen/ops/relu_meta.h>
1052
+ #include <ATen/ops/relu6_meta.h>
1053
+ #include <ATen/ops/remainder_meta.h>
1054
+ #include <ATen/ops/rename_meta.h>
1055
+ #include <ATen/ops/renorm_meta.h>
1056
+ #include <ATen/ops/repeat_meta.h>
1057
+ #include <ATen/ops/repeat_interleave_meta.h>
1058
+ #include <ATen/ops/replication_pad1d_meta.h>
1059
+ #include <ATen/ops/replication_pad1d_backward_meta.h>
1060
+ #include <ATen/ops/replication_pad2d_meta.h>
1061
+ #include <ATen/ops/replication_pad2d_backward_meta.h>
1062
+ #include <ATen/ops/replication_pad3d_meta.h>
1063
+ #include <ATen/ops/replication_pad3d_backward_meta.h>
1064
+ #include <ATen/ops/requires_grad_meta.h>
1065
+ #include <ATen/ops/reshape_meta.h>
1066
+ #include <ATen/ops/reshape_as_meta.h>
1067
+ #include <ATen/ops/resize_meta.h>
1068
+ #include <ATen/ops/resize_as_meta.h>
1069
+ #include <ATen/ops/resize_as_sparse_meta.h>
1070
+ #include <ATen/ops/resolve_conj_meta.h>
1071
+ #include <ATen/ops/resolve_neg_meta.h>
1072
+ #include <ATen/ops/result_type_meta.h>
1073
+ #include <ATen/ops/retain_grad_meta.h>
1074
+ #include <ATen/ops/retains_grad_meta.h>
1075
+ #include <ATen/ops/rms_norm_meta.h>
1076
+ #include <ATen/ops/rnn_relu_meta.h>
1077
+ #include <ATen/ops/rnn_relu_cell_meta.h>
1078
+ #include <ATen/ops/rnn_tanh_meta.h>
1079
+ #include <ATen/ops/rnn_tanh_cell_meta.h>
1080
+ #include <ATen/ops/roll_meta.h>
1081
+ #include <ATen/ops/rot90_meta.h>
1082
+ #include <ATen/ops/round_meta.h>
1083
+ #include <ATen/ops/row_indices_meta.h>
1084
+ #include <ATen/ops/row_indices_copy_meta.h>
1085
+ #include <ATen/ops/row_stack_meta.h>
1086
+ #include <ATen/ops/rrelu_meta.h>
1087
+ #include <ATen/ops/rrelu_with_noise_meta.h>
1088
+ #include <ATen/ops/rrelu_with_noise_backward_meta.h>
1089
+ #include <ATen/ops/rshift_meta.h>
1090
+ #include <ATen/ops/rsqrt_meta.h>
1091
+ #include <ATen/ops/rsub_meta.h>
1092
+ #include <ATen/ops/scalar_tensor_meta.h>
1093
+ #include <ATen/ops/scaled_dot_product_attention_meta.h>
1094
+ #include <ATen/ops/scatter_meta.h>
1095
+ #include <ATen/ops/scatter_add_meta.h>
1096
+ #include <ATen/ops/scatter_reduce_meta.h>
1097
+ #include <ATen/ops/searchsorted_meta.h>
1098
+ #include <ATen/ops/segment_reduce_meta.h>
1099
+ #include <ATen/ops/select_meta.h>
1100
+ #include <ATen/ops/select_backward_meta.h>
1101
+ #include <ATen/ops/select_copy_meta.h>
1102
+ #include <ATen/ops/select_scatter_meta.h>
1103
+ #include <ATen/ops/selu_meta.h>
1104
+ #include <ATen/ops/set_meta.h>
1105
+ #include <ATen/ops/set_data_meta.h>
1106
+ #include <ATen/ops/sgn_meta.h>
1107
+ #include <ATen/ops/sigmoid_meta.h>
1108
+ #include <ATen/ops/sigmoid_backward_meta.h>
1109
+ #include <ATen/ops/sign_meta.h>
1110
+ #include <ATen/ops/signbit_meta.h>
1111
+ #include <ATen/ops/silu_meta.h>
1112
+ #include <ATen/ops/silu_backward_meta.h>
1113
+ #include <ATen/ops/sin_meta.h>
1114
+ #include <ATen/ops/sinc_meta.h>
1115
+ #include <ATen/ops/sinh_meta.h>
1116
+ #include <ATen/ops/size_meta.h>
1117
+ #include <ATen/ops/slice_meta.h>
1118
+ #include <ATen/ops/slice_backward_meta.h>
1119
+ #include <ATen/ops/slice_copy_meta.h>
1120
+ #include <ATen/ops/slice_inverse_meta.h>
1121
+ #include <ATen/ops/slice_scatter_meta.h>
1122
+ #include <ATen/ops/slogdet_meta.h>
1123
+ #include <ATen/ops/slow_conv3d_meta.h>
1124
+ #include <ATen/ops/slow_conv3d_forward_meta.h>
1125
+ #include <ATen/ops/slow_conv_dilated2d_meta.h>
1126
+ #include <ATen/ops/slow_conv_dilated3d_meta.h>
1127
+ #include <ATen/ops/slow_conv_transpose2d_meta.h>
1128
+ #include <ATen/ops/slow_conv_transpose3d_meta.h>
1129
+ #include <ATen/ops/smm_meta.h>
1130
+ #include <ATen/ops/smooth_l1_loss_meta.h>
1131
+ #include <ATen/ops/smooth_l1_loss_backward_meta.h>
1132
+ #include <ATen/ops/soft_margin_loss_meta.h>
1133
+ #include <ATen/ops/soft_margin_loss_backward_meta.h>
1134
+ #include <ATen/ops/softmax_meta.h>
1135
+ #include <ATen/ops/softplus_meta.h>
1136
+ #include <ATen/ops/softplus_backward_meta.h>
1137
+ #include <ATen/ops/softshrink_meta.h>
1138
+ #include <ATen/ops/softshrink_backward_meta.h>
1139
+ #include <ATen/ops/sort_meta.h>
1140
+ #include <ATen/ops/sparse_bsc_tensor_meta.h>
1141
+ #include <ATen/ops/sparse_bsr_tensor_meta.h>
1142
+ #include <ATen/ops/sparse_compressed_tensor_meta.h>
1143
+ #include <ATen/ops/sparse_coo_tensor_meta.h>
1144
+ #include <ATen/ops/sparse_csc_tensor_meta.h>
1145
+ #include <ATen/ops/sparse_csr_tensor_meta.h>
1146
+ #include <ATen/ops/sparse_dim_meta.h>
1147
+ #include <ATen/ops/sparse_mask_meta.h>
1148
+ #include <ATen/ops/sparse_resize_meta.h>
1149
+ #include <ATen/ops/sparse_resize_and_clear_meta.h>
1150
+ #include <ATen/ops/sparse_sampled_addmm_meta.h>
1151
+ #include <ATen/ops/special_airy_ai_meta.h>
1152
+ #include <ATen/ops/special_bessel_j0_meta.h>
1153
+ #include <ATen/ops/special_bessel_j1_meta.h>
1154
+ #include <ATen/ops/special_bessel_y0_meta.h>
1155
+ #include <ATen/ops/special_bessel_y1_meta.h>
1156
+ #include <ATen/ops/special_chebyshev_polynomial_t_meta.h>
1157
+ #include <ATen/ops/special_chebyshev_polynomial_u_meta.h>
1158
+ #include <ATen/ops/special_chebyshev_polynomial_v_meta.h>
1159
+ #include <ATen/ops/special_chebyshev_polynomial_w_meta.h>
1160
+ #include <ATen/ops/special_digamma_meta.h>
1161
+ #include <ATen/ops/special_entr_meta.h>
1162
+ #include <ATen/ops/special_erf_meta.h>
1163
+ #include <ATen/ops/special_erfc_meta.h>
1164
+ #include <ATen/ops/special_erfcx_meta.h>
1165
+ #include <ATen/ops/special_erfinv_meta.h>
1166
+ #include <ATen/ops/special_exp2_meta.h>
1167
+ #include <ATen/ops/special_expit_meta.h>
1168
+ #include <ATen/ops/special_expm1_meta.h>
1169
+ #include <ATen/ops/special_gammainc_meta.h>
1170
+ #include <ATen/ops/special_gammaincc_meta.h>
1171
+ #include <ATen/ops/special_gammaln_meta.h>
1172
+ #include <ATen/ops/special_hermite_polynomial_h_meta.h>
1173
+ #include <ATen/ops/special_hermite_polynomial_he_meta.h>
1174
+ #include <ATen/ops/special_i0_meta.h>
1175
+ #include <ATen/ops/special_i0e_meta.h>
1176
+ #include <ATen/ops/special_i1_meta.h>
1177
+ #include <ATen/ops/special_i1e_meta.h>
1178
+ #include <ATen/ops/special_laguerre_polynomial_l_meta.h>
1179
+ #include <ATen/ops/special_legendre_polynomial_p_meta.h>
1180
+ #include <ATen/ops/special_log1p_meta.h>
1181
+ #include <ATen/ops/special_log_ndtr_meta.h>
1182
+ #include <ATen/ops/special_log_softmax_meta.h>
1183
+ #include <ATen/ops/special_logit_meta.h>
1184
+ #include <ATen/ops/special_logsumexp_meta.h>
1185
+ #include <ATen/ops/special_modified_bessel_i0_meta.h>
1186
+ #include <ATen/ops/special_modified_bessel_i1_meta.h>
1187
+ #include <ATen/ops/special_modified_bessel_k0_meta.h>
1188
+ #include <ATen/ops/special_modified_bessel_k1_meta.h>
1189
+ #include <ATen/ops/special_multigammaln_meta.h>
1190
+ #include <ATen/ops/special_ndtr_meta.h>
1191
+ #include <ATen/ops/special_ndtri_meta.h>
1192
+ #include <ATen/ops/special_polygamma_meta.h>
1193
+ #include <ATen/ops/special_psi_meta.h>
1194
+ #include <ATen/ops/special_round_meta.h>
1195
+ #include <ATen/ops/special_scaled_modified_bessel_k0_meta.h>
1196
+ #include <ATen/ops/special_scaled_modified_bessel_k1_meta.h>
1197
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_t_meta.h>
1198
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_u_meta.h>
1199
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_v_meta.h>
1200
+ #include <ATen/ops/special_shifted_chebyshev_polynomial_w_meta.h>
1201
+ #include <ATen/ops/special_sinc_meta.h>
1202
+ #include <ATen/ops/special_softmax_meta.h>
1203
+ #include <ATen/ops/special_spherical_bessel_j0_meta.h>
1204
+ #include <ATen/ops/special_xlog1py_meta.h>
1205
+ #include <ATen/ops/special_xlogy_meta.h>
1206
+ #include <ATen/ops/special_zeta_meta.h>
1207
+ #include <ATen/ops/split_meta.h>
1208
+ #include <ATen/ops/split_copy_meta.h>
1209
+ #include <ATen/ops/split_with_sizes_meta.h>
1210
+ #include <ATen/ops/split_with_sizes_copy_meta.h>
1211
+ #include <ATen/ops/sqrt_meta.h>
1212
+ #include <ATen/ops/square_meta.h>
1213
+ #include <ATen/ops/squeeze_meta.h>
1214
+ #include <ATen/ops/squeeze_copy_meta.h>
1215
+ #include <ATen/ops/sspaddmm_meta.h>
1216
+ #include <ATen/ops/stack_meta.h>
1217
+ #include <ATen/ops/std_meta.h>
1218
+ #include <ATen/ops/std_mean_meta.h>
1219
+ #include <ATen/ops/stft_meta.h>
1220
+ #include <ATen/ops/stride_meta.h>
1221
+ #include <ATen/ops/sub_meta.h>
1222
+ #include <ATen/ops/subtract_meta.h>
1223
+ #include <ATen/ops/sum_meta.h>
1224
+ #include <ATen/ops/sum_to_size_meta.h>
1225
+ #include <ATen/ops/svd_meta.h>
1226
+ #include <ATen/ops/swapaxes_meta.h>
1227
+ #include <ATen/ops/swapdims_meta.h>
1228
+ #include <ATen/ops/sym_constrain_range_meta.h>
1229
+ #include <ATen/ops/sym_constrain_range_for_size_meta.h>
1230
+ #include <ATen/ops/sym_numel_meta.h>
1231
+ #include <ATen/ops/sym_size_meta.h>
1232
+ #include <ATen/ops/sym_storage_offset_meta.h>
1233
+ #include <ATen/ops/sym_stride_meta.h>
1234
+ #include <ATen/ops/t_meta.h>
1235
+ #include <ATen/ops/t_copy_meta.h>
1236
+ #include <ATen/ops/take_meta.h>
1237
+ #include <ATen/ops/take_along_dim_meta.h>
1238
+ #include <ATen/ops/tan_meta.h>
1239
+ #include <ATen/ops/tanh_meta.h>
1240
+ #include <ATen/ops/tanh_backward_meta.h>
1241
+ #include <ATen/ops/tensor_split_meta.h>
1242
+ #include <ATen/ops/tensordot_meta.h>
1243
+ #include <ATen/ops/thnn_conv2d_meta.h>
1244
+ #include <ATen/ops/threshold_meta.h>
1245
+ #include <ATen/ops/threshold_backward_meta.h>
1246
+ #include <ATen/ops/tile_meta.h>
1247
+ #include <ATen/ops/to_meta.h>
1248
+ #include <ATen/ops/to_dense_meta.h>
1249
+ #include <ATen/ops/to_dense_backward_meta.h>
1250
+ #include <ATen/ops/to_mkldnn_meta.h>
1251
+ #include <ATen/ops/to_mkldnn_backward_meta.h>
1252
+ #include <ATen/ops/to_padded_tensor_meta.h>
1253
+ #include <ATen/ops/to_sparse_meta.h>
1254
+ #include <ATen/ops/to_sparse_bsc_meta.h>
1255
+ #include <ATen/ops/to_sparse_bsr_meta.h>
1256
+ #include <ATen/ops/to_sparse_csc_meta.h>
1257
+ #include <ATen/ops/to_sparse_csr_meta.h>
1258
+ #include <ATen/ops/topk_meta.h>
1259
+ #include <ATen/ops/trace_meta.h>
1260
+ #include <ATen/ops/trace_backward_meta.h>
1261
+ #include <ATen/ops/transpose_meta.h>
1262
+ #include <ATen/ops/transpose_copy_meta.h>
1263
+ #include <ATen/ops/trapezoid_meta.h>
1264
+ #include <ATen/ops/trapz_meta.h>
1265
+ #include <ATen/ops/triangular_solve_meta.h>
1266
+ #include <ATen/ops/tril_meta.h>
1267
+ #include <ATen/ops/tril_indices_meta.h>
1268
+ #include <ATen/ops/triplet_margin_loss_meta.h>
1269
+ #include <ATen/ops/triu_meta.h>
1270
+ #include <ATen/ops/triu_indices_meta.h>
1271
+ #include <ATen/ops/true_divide_meta.h>
1272
+ #include <ATen/ops/trunc_meta.h>
1273
+ #include <ATen/ops/type_as_meta.h>
1274
+ #include <ATen/ops/unbind_meta.h>
1275
+ #include <ATen/ops/unbind_copy_meta.h>
1276
+ #include <ATen/ops/unflatten_meta.h>
1277
+ #include <ATen/ops/unflatten_dense_tensors_meta.h>
1278
+ #include <ATen/ops/unfold_meta.h>
1279
+ #include <ATen/ops/unfold_backward_meta.h>
1280
+ #include <ATen/ops/unfold_copy_meta.h>
1281
+ #include <ATen/ops/uniform_meta.h>
1282
+ #include <ATen/ops/unique_consecutive_meta.h>
1283
+ #include <ATen/ops/unique_dim_meta.h>
1284
+ #include <ATen/ops/unique_dim_consecutive_meta.h>
1285
+ #include <ATen/ops/unsafe_chunk_meta.h>
1286
+ #include <ATen/ops/unsafe_split_meta.h>
1287
+ #include <ATen/ops/unsafe_split_with_sizes_meta.h>
1288
+ #include <ATen/ops/unsqueeze_meta.h>
1289
+ #include <ATen/ops/unsqueeze_copy_meta.h>
1290
+ #include <ATen/ops/upsample_bicubic2d_meta.h>
1291
+ #include <ATen/ops/upsample_bicubic2d_backward_meta.h>
1292
+ #include <ATen/ops/upsample_bilinear2d_meta.h>
1293
+ #include <ATen/ops/upsample_bilinear2d_backward_meta.h>
1294
+ #include <ATen/ops/upsample_linear1d_meta.h>
1295
+ #include <ATen/ops/upsample_linear1d_backward_meta.h>
1296
+ #include <ATen/ops/upsample_nearest1d_meta.h>
1297
+ #include <ATen/ops/upsample_nearest1d_backward_meta.h>
1298
+ #include <ATen/ops/upsample_nearest2d_meta.h>
1299
+ #include <ATen/ops/upsample_nearest2d_backward_meta.h>
1300
+ #include <ATen/ops/upsample_nearest3d_meta.h>
1301
+ #include <ATen/ops/upsample_nearest3d_backward_meta.h>
1302
+ #include <ATen/ops/upsample_trilinear3d_meta.h>
1303
+ #include <ATen/ops/upsample_trilinear3d_backward_meta.h>
1304
+ #include <ATen/ops/value_selecting_reduction_backward_meta.h>
1305
+ #include <ATen/ops/values_meta.h>
1306
+ #include <ATen/ops/values_copy_meta.h>
1307
+ #include <ATen/ops/vander_meta.h>
1308
+ #include <ATen/ops/var_meta.h>
1309
+ #include <ATen/ops/var_mean_meta.h>
1310
+ #include <ATen/ops/vdot_meta.h>
1311
+ #include <ATen/ops/view_meta.h>
1312
+ #include <ATen/ops/view_as_meta.h>
1313
+ #include <ATen/ops/view_as_complex_meta.h>
1314
+ #include <ATen/ops/view_as_complex_copy_meta.h>
1315
+ #include <ATen/ops/view_as_real_meta.h>
1316
+ #include <ATen/ops/view_as_real_copy_meta.h>
1317
+ #include <ATen/ops/view_copy_meta.h>
1318
+ #include <ATen/ops/vsplit_meta.h>
1319
+ #include <ATen/ops/vstack_meta.h>
1320
+ #include <ATen/ops/where_meta.h>
1321
+ #include <ATen/ops/xlogy_meta.h>
1322
+ #include <ATen/ops/xor_meta.h>
1323
+ #include <ATen/ops/zero_meta.h>
1324
+ #include <ATen/ops/zeros_meta.h>
1325
+ #include <ATen/ops/zeros_like_meta.h>
1326
+
1327
+ namespace at {
1328
+
1329
+ namespace meta {
1330
+
1331
+
1332
+
1333
+ } // namespace meta
1334
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/NestedTensorImpl.h ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+ #include <ATen/MemoryOverlap.h>
3
+ #include <ATen/Tensor.h>
4
+ #include <c10/core/DispatchKey.h>
5
+ #include <c10/core/DispatchKeySet.h>
6
+ #include <c10/core/MemoryFormat.h>
7
+ #include <c10/core/TensorImpl.h>
8
+ #include <c10/util/ArrayRef.h>
9
+ #include <c10/util/Exception.h>
10
+ #include <c10/util/Metaprogramming.h>
11
+ #include <c10/util/irange.h>
12
+
13
+ namespace at::native {
14
+ struct NestedTensorImpl;
15
+ inline bool nested_tensor_impl_is_contiguous(const NestedTensorImpl* nt);
16
+ int64_t get_numel_from_nested_size_tensor(const at::Tensor& tensor);
17
+ at::Tensor construct_nested_strides(const at::Tensor& nested_size);
18
+ at::Tensor construct_offsets(const at::Tensor& nested_size);
19
+
20
+ struct TORCH_API NestedTensorImpl : public c10::TensorImpl {
21
+ explicit NestedTensorImpl(
22
+ Storage storage,
23
+ c10::DispatchKeySet key_set,
24
+ const caffe2::TypeMeta data_type,
25
+ at::Tensor nested_sizes,
26
+ at::Tensor nested_strides,
27
+ at::Tensor storage_offsets);
28
+
29
+ explicit NestedTensorImpl(
30
+ const at::Tensor& buffer,
31
+ at::Tensor nested_sizes,
32
+ at::Tensor nested_strides,
33
+ at::Tensor storage_offsets);
34
+ // assume contiguous, `nested_strides` and `offsets`
35
+ // can be infered from `nested_sizes`
36
+ explicit NestedTensorImpl(
37
+ const at::Tensor& buffer,
38
+ const at::Tensor& nested_sizes);
39
+
40
+ // This constructor is used creating view tensors from nested tensors
41
+ explicit NestedTensorImpl(
42
+ c10::TensorImpl::ImplType impl_type,
43
+ const at::Tensor& base_tensor,
44
+ at::Tensor nested_sizes,
45
+ at::Tensor nested_strides,
46
+ at::Tensor storage_offsets);
47
+
48
+ // TODO: don't expose private implementation details like this; in
49
+ // particular, resizing this tensor will mess up our dim() and
50
+ // callers cannot fix it.
51
+ const Tensor& get_nested_sizes() const {
52
+ return nested_sizes_;
53
+ }
54
+ // TODO: don't expose private implementation details like this
55
+ const Tensor& get_nested_strides() const {
56
+ return nested_strides_;
57
+ }
58
+ const Tensor& get_storage_offsets() const {
59
+ return storage_offsets_;
60
+ }
61
+ // Returns nullopt if the ith dimension is irregular. The ith dimension
62
+ // of a NestedTensor is regular if the unbound tensors match in
63
+ // size at the (i-1)th dimension.
64
+ std::optional<int64_t> opt_size(int64_t d) const;
65
+
66
+ int64_t size(int64_t d) const {
67
+ std::optional<int64_t> optional_size = this->opt_size(d);
68
+ TORCH_CHECK(
69
+ optional_size.has_value(),
70
+ "Given dimension ",
71
+ d,
72
+ " is irregular and does not have a size.");
73
+ return *optional_size;
74
+ }
75
+ /**
76
+ * Return a view of the nested tensor as a 1 dimensional contiguous tensor.
77
+ *
78
+ * The buffer tensor created by this function shares the same storage_impl as
79
+ * the original nested tensor, and therefore can be seen as a view.
80
+ *
81
+ * @return A newly constructed view tensor
82
+ */
83
+ at::Tensor get_buffer() const {
84
+ TORCH_CHECK(
85
+ nested_tensor_impl_is_contiguous(this),
86
+ "NestedTensor must be contiguous to get buffer.");
87
+ return get_unsafe_storage_as_tensor();
88
+ }
89
+ /**
90
+ * If possible use get_buffer() instead. This function returns the storage
91
+ * as a tensor directly, which is not safe to use in general. If using this
92
+ * function, The caller must ensure to account for nested_sizes,
93
+ * nested_strides and storage_offsets.
94
+ *
95
+ * @return A newly constructed view tensor
96
+ */
97
+ at::Tensor get_unsafe_storage_as_tensor() const {
98
+ auto buffer_key_set_ = generate_buffer_key_set();
99
+ const auto buffer_size = get_buffer_size();
100
+ auto buffer_tensor_impl = c10::make_intrusive<TensorImpl>(
101
+ c10::TensorImpl::VIEW, Storage(storage_), buffer_key_set_, data_type_);
102
+ buffer_tensor_impl->set_sizes_contiguous(
103
+ c10::makeArrayRef(static_cast<int64_t>(buffer_size)));
104
+ return Tensor(buffer_tensor_impl);
105
+ }
106
+
107
+ size_t get_buffer_size() const {
108
+ return storage_.nbytes() / data_type_.itemsize();
109
+ }
110
+
111
+ protected:
112
+ const char* tensorimpl_type_name() const override;
113
+
114
+ // TODO: numel_custom and is_contiguous_custom can be profitably overridden
115
+ // with real implementations
116
+ int64_t numel_custom() const override;
117
+ c10::SymInt sym_numel_custom() const override;
118
+ bool is_contiguous_custom(MemoryFormat) const override;
119
+ int64_t size_custom(int64_t d) const override {
120
+ return this->size(d);
121
+ }
122
+ c10::SymInt sym_size_custom(int64_t d) const override {
123
+ return c10::SymInt{this->size(d)};
124
+ }
125
+ IntArrayRef sizes_custom() const override;
126
+ c10::SymIntArrayRef sym_sizes_custom() const override;
127
+ IntArrayRef strides_custom() const override;
128
+ c10::SymIntArrayRef sym_strides_custom() const override;
129
+
130
+ // this one is real
131
+ int64_t dim_custom() const override;
132
+
133
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
134
+ const c10::VariableVersion& version_counter,
135
+ bool allow_tensor_metadata_change) const override;
136
+
137
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
138
+ c10::VariableVersion&& version_counter,
139
+ bool allow_tensor_metadata_change) const override;
140
+
141
+ void shallow_copy_from(const c10::intrusive_ptr<TensorImpl>& impl) override {
142
+ copy_tensor_metadata(
143
+ /*src_impl=*/impl.get(),
144
+ /*dest_impl=*/this,
145
+ /*version_counter=*/version_counter(),
146
+ /*allow_tensor_metadata_change=*/allow_tensor_metadata_change());
147
+ }
148
+
149
+ private:
150
+ // Must be called after any changes to our dim() to sync the state
151
+ // to TensorImpl.
152
+ void refresh_dim();
153
+
154
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members)
155
+ const at::Tensor nested_sizes_, nested_strides_;
156
+ // The starting positions of the underlying tensors in contiguous buffer
157
+ // i.e. the buffer memory offsets to get the underlying tensors
158
+ // The reason to keep this metadata is that, without strong enough constraint
159
+ // it cannot be derived from `nested_sizes_`
160
+ // and `nested_strides_`:
161
+ // 1. when buffer has blanks, e.g. [tensor1, blank, tensor2]
162
+ // this can happen e.g. after slicing a nested tensor
163
+ // 2. when multiple tensors share a same memory
164
+ // 3. when the nesting ordering is changed, e.g. [tensor1, tensor3, tensor2]
165
+ // Some strong enough constraints are:
166
+ // 1. every underlying tensor is contiguous in memory
167
+ // && nesting in ascending order
168
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members)
169
+ const at::Tensor storage_offsets_;
170
+ // NOTE: -1 here means the size is missing
171
+ // Optional to allow it to be computed lazily from nested.
172
+ // TODO: maybe we can remove this metadata since
173
+ // we can compute it from `nested_sizes_`
174
+ mutable std::optional<std::vector<int64_t>> opt_sizes_;
175
+
176
+ template <typename VariableVersion>
177
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach_core(
178
+ VariableVersion&& version_counter,
179
+ bool allow_tensor_metadata_change) const;
180
+
181
+ /**
182
+ * Generates a non-nested key_set from a nested tensor.
183
+ *
184
+ * For many nested tensor kernel implementations a buffer tensor
185
+ * is generated and redispatched to a non-nested kernel this function
186
+ * generates the key set used by that buffer tensor
187
+ *
188
+ * @return Appropriate key set for non-nested tensor
189
+ */
190
+ inline c10::DispatchKeySet generate_buffer_key_set() const {
191
+ auto buffer_key_set = this->key_set();
192
+ const bool Autograd = buffer_key_set.has_any(c10::autograd_dispatch_keyset);
193
+ // Remove nested tensor specific keys
194
+ buffer_key_set = buffer_key_set -
195
+ c10::DispatchKeySet{
196
+ c10::DispatchKey::NestedTensor,
197
+ c10::DispatchKey::AutogradNestedTensor};
198
+
199
+ // Add dense tensor specific keys
200
+ buffer_key_set =
201
+ buffer_key_set | c10::DispatchKeySet{c10::DispatchKey::Dense};
202
+ buffer_key_set = Autograd
203
+ ? c10::DispatchKeySet{c10::DispatchKey::Autograd} | buffer_key_set
204
+ : buffer_key_set;
205
+
206
+ return buffer_key_set;
207
+ }
208
+ };
209
+
210
+ inline NestedTensorImpl* get_nested_tensor_impl_or_null(
211
+ const at::Tensor& tensor) {
212
+ if (tensor.is_nested()) {
213
+ return static_cast<NestedTensorImpl*>(tensor.unsafeGetTensorImpl());
214
+ }
215
+ return nullptr;
216
+ }
217
+
218
+ inline NestedTensorImpl* get_nested_tensor_impl(const at::Tensor& tensor) {
219
+ TORCH_CHECK(
220
+ tensor.is_nested(), "get_nested_tensor_impl requires a NestedTensor.");
221
+ return static_cast<NestedTensorImpl*>(tensor.unsafeGetTensorImpl());
222
+ }
223
+
224
+ inline bool nested_tensor_impl_is_contiguous(const NestedTensorImpl* nt) {
225
+ int64_t ntensors = nt->size(0);
226
+ if (ntensors == 0) {
227
+ return true;
228
+ }
229
+ const Tensor &sizemat = nt->get_nested_sizes(),
230
+ &stridemat = nt->get_nested_strides();
231
+ const int64_t* offsets_ptr =
232
+ nt->get_storage_offsets().const_data_ptr<int64_t>();
233
+ int64_t orig_dim = sizemat.size(1);
234
+ // nesting scalars
235
+ if (orig_dim == 0) {
236
+ // each scalar must be contiguous
237
+ // if there is blank memory between underlying scalars
238
+ for (int64_t i = 0; i < ntensors; i++) {
239
+ if (offsets_ptr[i] != i) {
240
+ return false;
241
+ }
242
+ }
243
+ }
244
+ // nesting tensors
245
+ else {
246
+ // if any underlying tensor is non-contiguous
247
+ const int64_t *sizemat_ptr = sizemat.const_data_ptr<int64_t>(),
248
+ *stridemat_ptr = stridemat.const_data_ptr<int64_t>();
249
+ for (int64_t i = 0; i < ntensors; i++) {
250
+ if (stridemat_ptr[orig_dim - 1] != 1) {
251
+ return false;
252
+ }
253
+ int64_t product = sizemat_ptr[orig_dim - 1];
254
+ for (int64_t j = orig_dim - 2; j >= 0; j--) {
255
+ if (stridemat_ptr[j] != product) {
256
+ return false;
257
+ }
258
+ product *= sizemat_ptr[j];
259
+ }
260
+ sizemat_ptr += orig_dim;
261
+ stridemat_ptr += orig_dim;
262
+ }
263
+ // if there is blank memory between underlying tensors
264
+ if (offsets_ptr[0] != 0) {
265
+ return false;
266
+ }
267
+ sizemat_ptr = sizemat.const_data_ptr<int64_t>();
268
+ stridemat_ptr = stridemat.const_data_ptr<int64_t>();
269
+ for (int64_t i = 1; i < ntensors; i++) {
270
+ if (offsets_ptr[i] !=
271
+ offsets_ptr[i - 1] + *sizemat_ptr * *stridemat_ptr) {
272
+ return false;
273
+ }
274
+ sizemat_ptr += orig_dim;
275
+ stridemat_ptr += orig_dim;
276
+ }
277
+ }
278
+ // everything is fine
279
+ return true;
280
+ }
281
+
282
+ inline const at::Tensor& get_nested_sizes(const at::Tensor& tensor) {
283
+ return get_nested_tensor_impl(tensor)->get_nested_sizes();
284
+ }
285
+
286
+ } // namespace at::native
lib/python3.12/site-packages/torch/include/ATen/NumericUtils.h ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #ifdef __HIPCC__
4
+ #include <hip/hip_runtime.h>
5
+ #endif
6
+
7
+ #include <c10/macros/Macros.h>
8
+ #include <c10/util/BFloat16.h>
9
+ #include <c10/util/Float8_e4m3fn.h>
10
+ #include <c10/util/Float8_e4m3fnuz.h>
11
+ #include <c10/util/Float8_e5m2.h>
12
+ #include <c10/util/Float8_e5m2fnuz.h>
13
+ #include <c10/util/Half.h>
14
+ #include <c10/util/complex.h>
15
+
16
+ #include <cmath>
17
+ #include <type_traits>
18
+
19
+ namespace at {
20
+
21
+ // std::isnan isn't performant to use on integral types; it will
22
+ // (uselessly) convert to floating point and then do the test.
23
+ // This function is.
24
+
25
+ template <typename T, std::enable_if_t<std::is_integral_v<T>, int> = 0>
26
+ inline C10_HOST_DEVICE bool _isnan(T /*val*/) {
27
+ return false;
28
+ }
29
+
30
+ template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>
31
+ inline C10_HOST_DEVICE bool _isnan(T val) {
32
+ #if defined(__CUDACC__) || defined(__HIPCC__)
33
+ return ::isnan(val);
34
+ #else
35
+ return std::isnan(val);
36
+ #endif
37
+ }
38
+
39
+ template <typename T, std::enable_if_t<c10::is_complex<T>::value, int> = 0>
40
+ inline C10_HOST_DEVICE bool _isnan(T val) {
41
+ return std::isnan(val.real()) || std::isnan(val.imag());
42
+ }
43
+
44
+ template <typename T, std::enable_if_t<std::is_same_v<T, at::Half>, int> = 0>
45
+ inline C10_HOST_DEVICE bool _isnan(T val) {
46
+ return at::_isnan(static_cast<float>(val));
47
+ }
48
+
49
+ template <
50
+ typename T,
51
+ std::enable_if_t<std::is_same_v<T, at::BFloat16>, int> = 0>
52
+ inline C10_HOST_DEVICE bool _isnan(at::BFloat16 val) {
53
+ return at::_isnan(static_cast<float>(val));
54
+ }
55
+
56
+ inline C10_HOST_DEVICE bool _isnan(at::BFloat16 val) {
57
+ return at::_isnan(static_cast<float>(val));
58
+ }
59
+
60
+ template <
61
+ typename T,
62
+ std::enable_if_t<std::is_same_v<T, at::Float8_e5m2>, int> = 0>
63
+ inline C10_HOST_DEVICE bool _isnan(T val) {
64
+ return val.isnan();
65
+ }
66
+
67
+ template <
68
+ typename T,
69
+ std::enable_if_t<std::is_same_v<T, at::Float8_e4m3fn>, int> = 0>
70
+ inline C10_HOST_DEVICE bool _isnan(T val) {
71
+ return val.isnan();
72
+ }
73
+
74
+ template <
75
+ typename T,
76
+ std::enable_if_t<std::is_same_v<T, at::Float8_e5m2fnuz>, int> = 0>
77
+ inline C10_HOST_DEVICE bool _isnan(T val) {
78
+ return val.isnan();
79
+ }
80
+
81
+ template <
82
+ typename T,
83
+ std::enable_if_t<std::is_same_v<T, at::Float8_e4m3fnuz>, int> = 0>
84
+ inline C10_HOST_DEVICE bool _isnan(T val) {
85
+ return val.isnan();
86
+ }
87
+
88
+ // std::isinf isn't performant to use on integral types; it will
89
+ // (uselessly) convert to floating point and then do the test.
90
+ // This function is.
91
+
92
+ template <typename T, std::enable_if_t<std::is_integral_v<T>, int> = 0>
93
+ inline C10_HOST_DEVICE bool _isinf(T /*val*/) {
94
+ return false;
95
+ }
96
+
97
+ template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>
98
+ inline C10_HOST_DEVICE bool _isinf(T val) {
99
+ #if defined(__CUDACC__) || defined(__HIPCC__)
100
+ return ::isinf(val);
101
+ #else
102
+ return std::isinf(val);
103
+ #endif
104
+ }
105
+
106
+ inline C10_HOST_DEVICE bool _isinf(at::Half val) {
107
+ return at::_isinf(static_cast<float>(val));
108
+ }
109
+
110
+ inline C10_HOST_DEVICE bool _isinf(at::BFloat16 val) {
111
+ return at::_isinf(static_cast<float>(val));
112
+ }
113
+
114
+ inline C10_HOST_DEVICE bool _isinf(at::Float8_e5m2 val) {
115
+ return val.isinf();
116
+ }
117
+
118
+ inline C10_HOST_DEVICE bool _isinf(at::Float8_e4m3fn val [[maybe_unused]]) {
119
+ return false;
120
+ }
121
+
122
+ inline C10_HOST_DEVICE bool _isinf(at::Float8_e5m2fnuz val [[maybe_unused]]) {
123
+ return false;
124
+ }
125
+
126
+ inline C10_HOST_DEVICE bool _isinf(at::Float8_e4m3fnuz val [[maybe_unused]]) {
127
+ return false;
128
+ }
129
+
130
+ template <typename T>
131
+ C10_HOST_DEVICE inline T exp(T x) {
132
+ static_assert(
133
+ !std::is_same_v<T, double>,
134
+ "this template must be used with float or less precise type");
135
+ #if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
136
+ // use __expf fast approximation for peak bandwidth
137
+ return __expf(x);
138
+ #else
139
+ return ::exp(x);
140
+ #endif
141
+ }
142
+
143
+ template <>
144
+ C10_HOST_DEVICE inline double exp<double>(double x) {
145
+ return ::exp(x);
146
+ }
147
+
148
+ template <typename T>
149
+ C10_HOST_DEVICE inline T log(T x) {
150
+ static_assert(
151
+ !std::is_same_v<T, double>,
152
+ "this template must be used with float or less precise type");
153
+ #if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
154
+ // use __logf fast approximation for peak bandwidth
155
+ return __logf(x);
156
+ #else
157
+ return ::log(x);
158
+ #endif
159
+ }
160
+
161
+ template <>
162
+ C10_HOST_DEVICE inline double log<double>(double x) {
163
+ return ::log(x);
164
+ }
165
+
166
+ template <typename T>
167
+ C10_HOST_DEVICE inline T log1p(T x) {
168
+ static_assert(
169
+ !std::is_same_v<T, double>,
170
+ "this template must be used with float or less precise type");
171
+ #if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
172
+ // use __logf fast approximation for peak bandwidth
173
+ // NOTE: There is no __log1pf so unfortunately we lose precision.
174
+ return __logf(1.0f + x);
175
+ #else
176
+ return ::log1p(x);
177
+ #endif
178
+ }
179
+
180
+ template <>
181
+ C10_HOST_DEVICE inline double log1p<double>(double x) {
182
+ return ::log1p(x);
183
+ }
184
+
185
+ template <typename T>
186
+ C10_HOST_DEVICE inline T tan(T x) {
187
+ static_assert(
188
+ !std::is_same_v<T, double>,
189
+ "this template must be used with float or less precise type");
190
+ #if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
191
+ // use __tanf fast approximation for peak bandwidth
192
+ return __tanf(x);
193
+ #else
194
+ return ::tan(x);
195
+ #endif
196
+ }
197
+
198
+ template <>
199
+ C10_HOST_DEVICE inline double tan<double>(double x) {
200
+ return ::tan(x);
201
+ }
202
+
203
+ } // namespace at
lib/python3.12/site-packages/torch/include/ATen/OpaqueTensorImpl.h ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <c10/core/MemoryFormat.h>
4
+ #include <c10/core/SymIntArrayRef.h>
5
+ #include <c10/core/TensorImpl.h>
6
+ #include <c10/util/Exception.h>
7
+
8
+ namespace at {
9
+
10
+ // An "Opaque" TensorImpl -- there are no strides and (for now)
11
+ // even data() is not supported (thus no pointer arithmetic).
12
+
13
+ // NOTE: We could allow data() in the future, but would have to ensure pointer
14
+ // arithmetic code is properly guarded.
15
+ //
16
+ // NOTE: This does not support resize_ (and other metadata-changing ops) because
17
+ // of `shallow_copy_and_detach`. We would need to define an interface to
18
+ // "shallow copy" in order to add support.
19
+
20
+ template <typename OpaqueHandle>
21
+ struct TORCH_API OpaqueTensorImpl : public TensorImpl {
22
+ // public constructor for now...
23
+ OpaqueTensorImpl(
24
+ at::DispatchKeySet key_set,
25
+ const caffe2::TypeMeta data_type,
26
+ c10::Device device,
27
+ OpaqueHandle opaque_handle,
28
+ c10::IntArrayRef sizes,
29
+ bool is_non_overlapping_and_dense = true)
30
+ : TensorImpl(key_set, data_type, device),
31
+ opaque_handle_(std::move(opaque_handle)) {
32
+ set_storage_access_should_throw();
33
+ set_custom_sizes_strides(SizesStridesPolicy::CustomStrides);
34
+ sizes_and_strides_.set_sizes(sizes);
35
+ refresh_numel();
36
+ // NOLINTNEXTLINE(cppcoreguidelines-prefer-member-initializer)
37
+ is_non_overlapping_and_dense_ = is_non_overlapping_and_dense;
38
+ }
39
+
40
+ // Destructor doesn't call release_resources because it's
41
+ // unnecessary; don't forget to change that if needed!
42
+ void release_resources() override {
43
+ TensorImpl::release_resources();
44
+ opaque_handle_ = {};
45
+ }
46
+
47
+ void set_size(int64_t dim, int64_t new_size) override {
48
+ TORCH_CHECK(false, "opaque tensors do not have set_size");
49
+ }
50
+
51
+ void set_stride(int64_t dim, int64_t new_stride) override {
52
+ TORCH_CHECK(false, "opaque tensors do not have set_stride");
53
+ }
54
+
55
+ void set_storage_offset(int64_t storage_offset) override {
56
+ TORCH_CHECK(false, "opaque tensors do not have set_storage_offset");
57
+ }
58
+
59
+ #ifdef DEBUG
60
+ bool has_storage() const override {
61
+ TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
62
+ !storage_, "OpaqueTensorImpl assumes that storage_ is never set");
63
+ return false;
64
+ }
65
+ #endif
66
+
67
+ /**
68
+ * Return a TensorImpl that is a shallow-copy of this TensorImpl.
69
+ *
70
+ * For usage of `version_counter` and `allow_tensor_metadata_change`,
71
+ * see NOTE [ TensorImpl Shallow-Copying ].
72
+ */
73
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
74
+ const c10::VariableVersion& version_counter,
75
+ bool allow_tensor_metadata_change) const override {
76
+ auto impl = c10::make_intrusive<OpaqueTensorImpl<OpaqueHandle>>(
77
+ key_set(),
78
+ dtype(),
79
+ device(),
80
+ opaque_handle_,
81
+ sizes_and_strides_.sizes_arrayref());
82
+ copy_tensor_metadata(
83
+ /*src_opaque_impl=*/this,
84
+ /*dest_opaque_impl=*/impl.get(),
85
+ /*version_counter=*/version_counter,
86
+ /*allow_tensor_metadata_change=*/allow_tensor_metadata_change);
87
+ impl->refresh_numel();
88
+ return impl;
89
+ }
90
+
91
+ /**
92
+ * Return a TensorImpl that is a shallow-copy of this TensorImpl.
93
+ *
94
+ * For usage of `version_counter` and `allow_tensor_metadata_change`,
95
+ * see NOTE [ TensorImpl Shallow-Copying ].
96
+ */
97
+ c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
98
+ c10::VariableVersion&& version_counter,
99
+ bool allow_tensor_metadata_change) const override {
100
+ auto impl = c10::make_intrusive<OpaqueTensorImpl<OpaqueHandle>>(
101
+ key_set(),
102
+ dtype(),
103
+ device(),
104
+ opaque_handle_,
105
+ sizes_and_strides_.sizes_arrayref());
106
+ copy_tensor_metadata(
107
+ /*src_opaque_impl=*/this,
108
+ /*dest_opaque_impl=*/impl.get(),
109
+ /*version_counter=*/std::move(version_counter),
110
+ /*allow_tensor_metadata_change=*/allow_tensor_metadata_change);
111
+ impl->refresh_numel();
112
+ return impl;
113
+ }
114
+
115
+ /**
116
+ * Shallow-copies data from another TensorImpl into this TensorImpl.
117
+ *
118
+ * For why this function doesn't check this TensorImpl's
119
+ * `allow_tensor_metadata_change_`, see NOTE [ TensorImpl Shallow-Copying ].
120
+ */
121
+ void shallow_copy_from(const c10::intrusive_ptr<TensorImpl>& impl) override {
122
+ AT_ASSERT(has_compatible_shallow_copy_type(impl->key_set()));
123
+ auto opaque_impl =
124
+ static_cast<const OpaqueTensorImpl<OpaqueHandle>*>(impl.get());
125
+ copy_tensor_metadata(
126
+ /*src_impl=*/opaque_impl,
127
+ /*dest_impl=*/this,
128
+ /*version_counter=*/version_counter(),
129
+ /*allow_tensor_metadata_change=*/allow_tensor_metadata_change());
130
+ refresh_numel();
131
+ }
132
+
133
+ const OpaqueHandle& opaque_handle() const {
134
+ return opaque_handle_;
135
+ }
136
+
137
+ OpaqueHandle& unsafe_opaque_handle() {
138
+ return opaque_handle_;
139
+ }
140
+
141
+ protected:
142
+ /**
143
+ * Copy the tensor metadata fields (e.g. sizes / strides / storage pointer /
144
+ * storage_offset) from one TensorImpl to another TensorImpl.
145
+ *
146
+ * For usage of `version_counter` and `allow_tensor_metadata_change`, see NOTE
147
+ * [ TensorImpl Shallow-Copying ].
148
+ */
149
+ static void copy_tensor_metadata(
150
+ const OpaqueTensorImpl<OpaqueHandle>* src_opaque_impl,
151
+ OpaqueTensorImpl<OpaqueHandle>* dest_opaque_impl,
152
+ const c10::VariableVersion& version_counter,
153
+ bool allow_tensor_metadata_change) {
154
+ TensorImpl::copy_tensor_metadata(
155
+ src_opaque_impl,
156
+ dest_opaque_impl,
157
+ version_counter,
158
+ allow_tensor_metadata_change);
159
+
160
+ // OpaqueTensorImpl-specific fields.
161
+ dest_opaque_impl->opaque_handle_ = src_opaque_impl->opaque_handle_;
162
+ }
163
+
164
+ static void copy_tensor_metadata(
165
+ const OpaqueTensorImpl<OpaqueHandle>* src_opaque_impl,
166
+ OpaqueTensorImpl<OpaqueHandle>* dest_opaque_impl,
167
+ c10::VariableVersion&& version_counter,
168
+ bool allow_tensor_metadata_change) {
169
+ TensorImpl::copy_tensor_metadata(
170
+ src_opaque_impl,
171
+ dest_opaque_impl,
172
+ std::move(version_counter),
173
+ allow_tensor_metadata_change);
174
+
175
+ // OpaqueTensorImpl-specific fields.
176
+ dest_opaque_impl->opaque_handle_ = src_opaque_impl->opaque_handle_;
177
+ }
178
+
179
+ private:
180
+ const char* tensorimpl_type_name() const override {
181
+ return "OpaqueTensorImpl";
182
+ }
183
+
184
+ OpaqueHandle opaque_handle_;
185
+ };
186
+
187
+ } // namespace at