diff options
author | Zach DeVito <zdevito@fb.com> | 2017-06-20 19:15:26 -0700 |
---|---|---|
committer | Edward Z. Yang <ezyang@mit.edu> | 2017-11-02 19:53:36 -0400 |
commit | e32210658de4dc01d95b1fdfe95725d1154950e9 (patch) | |
tree | f85423d870e7544a93caf05173a7250395d3bf6c | |
parent | 7a5987123fe8b758a45fd83cf9fc6407ae44ce95 (diff) | |
download | pytorch-e32210658de4dc01d95b1fdfe95725d1154950e9.tar.gz pytorch-e32210658de4dc01d95b1fdfe95725d1154950e9.tar.bz2 pytorch-e32210658de4dc01d95b1fdfe95725d1154950e9.zip |
add readme and generated files for Type/Tensor/Functions to a doc folder to make it possible to view headers without building the library
-rw-r--r-- | aten/README.md | 121 | ||||
-rw-r--r-- | aten/doc/Functions.h | 2483 | ||||
-rw-r--r-- | aten/doc/Tensor.h | 1586 | ||||
-rw-r--r-- | aten/doc/Type.h | 901 | ||||
-rw-r--r-- | aten/src/ATen/templates/Type.h | 6 | ||||
-rwxr-xr-x | aten/tools/update_doc.sh | 3 |
6 files changed, 5097 insertions, 3 deletions
diff --git a/aten/README.md b/aten/README.md new file mode 100644 index 0000000000..6d2ddd5f50 --- /dev/null +++ b/aten/README.md @@ -0,0 +1,121 @@ +# ATen: A TENsor library + +ATen is a simple tensor library thats exposes the Tensor operations in Torch +and PyTorch directly in C++11. The wrapper respects the semantics of operators +in PyTorch, except minor details due to differences between C++ in Python in +the way default arguments are handled. See the [documentation for tensors](http://pytorch.org/docs/tensors.html) in PyTorch for what these operations do. +ATen's API is auto-generated from the same declarations PyTorch uses so the +two APIs will track each other over time. + +Tensor types are resolved dynamically, such that the API is generic and +does not include templates. That is, there is one `Tensor` type. It can hold a +CPU or CUDA Tensor, and the tensor may have Doubles, Float, Ints, etc. This design +makes it easy to write generic code without templating everything. + +See the _generated_ [`Tensor.h` file](doc/Tensor.h) and [`Functions.h` file](doc/Tensor.h) for the provided API. Excerpt: +```c++ +Tensor atan2(const Tensor & other) const; +Tensor & atan2_(const Tensor & other); +Tensor pow(Scalar exponent) const; +Tensor pow(const Tensor & exponent) const; +Tensor & pow_(Scalar exponent); +Tensor & pow_(const Tensor & exponent); +Tensor lerp(const Tensor & end, Scalar weight) const; +Tensor & lerp_(const Tensor & end, Scalar weight); +Tensor histc() const; +Tensor histc(int64_t bins) const; +Tensor histc(int64_t bins, Scalar min) const; +Tensor histc(int64_t bins, Scalar min, Scalar max) const; +``` + +Inplace operations are also provided, and always suffixed by `_` to indicate they will modify the Tensor. + +### Installation + +TH/THC/THNN/THCUNN are provided (as git subtrees), so the repo is standalone. You will need a C++11 compiler, cmake, and the pyyaml python package. +``` + +# Install pyyaml used by python code generation to read API declarations + +# OSX: if you don't have pip +sudo easy_install pip +# Ubuntu: if you don't have pip +apt-get -y install python-pip + +# if you don't have pyyaml +sudo pip install pyyaml + +mkdir build +cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/where/you/want # specify your dest directory +make install +``` + +### Example usage + +Here is a simple example; again, the syntax follows Torch semantics. + +```c++ +using namespace at; // assumed in the following + +Tensor d = CPU(kFloat).ones({3, 4}); +Tensor r = CPU(kFloat).zeros({3,4}) +for(auto i = 0; i < 100000; i++) { + r = r.add(d); + // equivalently + r = r + d; + // or + r += d; +} +``` + +Want this running on the GPU? +```c++ +using namespace at; // assumed in the following + +Tensor d = CUDA(kFloat).ones({3, 4}); +Tensor r = CUDA(kFloat).zeros({3,4}) +for(auto i = 0; i < 100000; i++) { + r = r.add(d); + // equivalently + r = r + d; + // or + r += d; +} +``` + +Expressions like `CUDA(kFloat)` are first-class `at::Type` objects that represent +the type of a Tensor and are used to create Tensors when their type cannot be +inferred. See the _generated_ [Type header](doc/Type.h) for its API. + +See more in [sample files](src/ATen/test). + +### Creating your kernel + +It is easy to create new kernels, thanks to the `dispatch<>()` templated function. Example: +```c++ + +// a simple sum kernel (for CPU only) +template<typename T> +struct sum_op { + // dispatch handles variable arguments for you + Tensor CPU(const Type & t, Tensor & x_) + { + Tensor x = x_.contiguous(); + auto x_p = x.data<T>(); + int64_t size = x.numel(); + T sum = 0; + for(int64_t i = 0; i < size; i++) { + sum += x_p[i]; + } + return sum; + }; + Tensor CUDA(Tensor& x) { + throw std::invalid_argument("device not supported"); + }; +}; + +Tensor a = CPU(kFloat).rand({3, 7}); +std::cout << a << std::endl; +std::cout << dispatch<sum_op>(a.type(),a) << " == " << a.sum() << std::endl; +``` diff --git a/aten/doc/Functions.h b/aten/doc/Functions.h new file mode 100644 index 0000000000..bb7e1f6dcf --- /dev/null +++ b/aten/doc/Functions.h @@ -0,0 +1,2483 @@ +#pragma once + +#include "ATen/Scalar.h" +#include "ATen/Type.h" +#include "ATen/Tensor.h" +#include "ATen/Storage.h" +#include "ATen/Generator.h" + + + +namespace at { + +static inline Tensor & copy_out(const Tensor & src, Tensor & dst) { + dst.resize_(src.sizes()); + dst.type().copy(src,dst); +} + +static inline Tensor & zeros_out(IntList size, Tensor & result); +static inline Tensor & ones_out(IntList size, Tensor & result); +static inline int64_t numel(const Tensor & self); +static inline Tensor & masked_select_out(const Tensor & self, const Tensor & mask, Tensor & result); +static inline Tensor masked_select(const Tensor & self, const Tensor & mask); +static inline Tensor transpose(const Tensor & self, int64_t dim0, int64_t dim1); +static inline Tensor t(const Tensor & self); +static inline Tensor & squeeze_out(const Tensor & self, int64_t dim, Tensor & result); +static inline Tensor squeeze(const Tensor & self, int64_t dim); +static inline Tensor & squeeze_out(const Tensor & self, Tensor & result); +static inline Tensor squeeze(const Tensor & self); +static inline Tensor & unsqueeze_out(const Tensor & self, int64_t dim, Tensor & result); +static inline Tensor unsqueeze(const Tensor & self, int64_t dim); +static inline Tensor & nonzero_out(const Tensor & self, Tensor & result); +static inline Tensor nonzero(const Tensor & self); +static inline Tensor & index_select_out(const Tensor & self, int64_t dim, const Tensor & index, Tensor & result); +static inline Tensor index_select(const Tensor & self, int64_t dim, const Tensor & index); +static inline Tensor & range_out(Scalar start, Scalar end, Scalar step, Tensor & result); +static inline Tensor & range_out(Scalar start, Scalar end, Tensor & result); +static inline Tensor & gather_out(const Tensor & self, int64_t dim, const Tensor & index, Tensor & result); +static inline Tensor gather(const Tensor & self, int64_t dim, const Tensor & index); +static inline bool equal(const Tensor & self, const Tensor & other); +static inline Tensor & __and___out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor __and__(const Tensor & self, Scalar value); +static inline Tensor & __and___out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor __and__(const Tensor & self, const Tensor & other); +static inline Tensor & __iand__(Tensor & self, Scalar value); +static inline Tensor & __iand__(Tensor & self, const Tensor & other); +static inline Tensor & __or___out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor __or__(const Tensor & self, Scalar value); +static inline Tensor & __or___out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor __or__(const Tensor & self, const Tensor & other); +static inline Tensor & __ior__(Tensor & self, Scalar value); +static inline Tensor & __ior__(Tensor & self, const Tensor & other); +static inline Tensor & __xor___out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor __xor__(const Tensor & self, Scalar value); +static inline Tensor & __xor___out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor __xor__(const Tensor & self, const Tensor & other); +static inline Tensor & __ixor__(Tensor & self, Scalar value); +static inline Tensor & __ixor__(Tensor & self, const Tensor & other); +static inline Tensor & __lshift___out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor __lshift__(const Tensor & self, Scalar value); +static inline Tensor & __lshift___out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor __lshift__(const Tensor & self, const Tensor & other); +static inline Tensor & __ilshift__(Tensor & self, Scalar value); +static inline Tensor & __ilshift__(Tensor & self, const Tensor & other); +static inline Tensor & __rshift___out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor __rshift__(const Tensor & self, Scalar value); +static inline Tensor & __rshift___out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor __rshift__(const Tensor & self, const Tensor & other); +static inline Tensor & __irshift__(Tensor & self, Scalar value); +static inline Tensor & __irshift__(Tensor & self, const Tensor & other); +static inline Tensor & lt_out(const Tensor & tensor, Scalar value, Tensor & result); +static inline Tensor lt(const Tensor & tensor, Scalar value); +static inline Tensor & lt_out(const Tensor & tensor, const Tensor & other, Tensor & result); +static inline Tensor lt(const Tensor & tensor, const Tensor & other); +static inline Tensor & gt_out(const Tensor & tensor, Scalar value, Tensor & result); +static inline Tensor gt(const Tensor & tensor, Scalar value); +static inline Tensor & gt_out(const Tensor & tensor, const Tensor & other, Tensor & result); +static inline Tensor gt(const Tensor & tensor, const Tensor & other); +static inline Tensor & le_out(const Tensor & tensor, Scalar value, Tensor & result); +static inline Tensor le(const Tensor & tensor, Scalar value); +static inline Tensor & le_out(const Tensor & tensor, const Tensor & other, Tensor & result); +static inline Tensor le(const Tensor & tensor, const Tensor & other); +static inline Tensor & ge_out(const Tensor & tensor, Scalar value, Tensor & result); +static inline Tensor ge(const Tensor & tensor, Scalar value); +static inline Tensor & ge_out(const Tensor & tensor, const Tensor & other, Tensor & result); +static inline Tensor ge(const Tensor & tensor, const Tensor & other); +static inline Tensor & eq_out(const Tensor & tensor, Scalar value, Tensor & result); +static inline Tensor eq(const Tensor & tensor, Scalar value); +static inline Tensor & eq_out(const Tensor & tensor, const Tensor & other, Tensor & result); +static inline Tensor eq(const Tensor & tensor, const Tensor & other); +static inline Tensor & ne_out(const Tensor & tensor, Scalar value, Tensor & result); +static inline Tensor ne(const Tensor & tensor, Scalar value); +static inline Tensor & ne_out(const Tensor & tensor, const Tensor & other, Tensor & result); +static inline Tensor ne(const Tensor & tensor, const Tensor & other); +static inline std::tuple<Tensor &,Tensor &> min_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & min, Tensor & min_indices); +static inline std::tuple<Tensor,Tensor> min(const Tensor & self, int64_t dim, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> min_out(const Tensor & self, int64_t dim, Tensor & min, Tensor & min_indices); +static inline std::tuple<Tensor,Tensor> min(const Tensor & self, int64_t dim); +static inline Tensor & min_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor min(const Tensor & self, const Tensor & other); +static inline Scalar min(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> max_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & max, Tensor & max_indices); +static inline std::tuple<Tensor,Tensor> max(const Tensor & self, int64_t dim, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> max_out(const Tensor & self, int64_t dim, Tensor & max, Tensor & max_indices); +static inline std::tuple<Tensor,Tensor> max(const Tensor & self, int64_t dim); +static inline Tensor & max_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor max(const Tensor & self, const Tensor & other); +static inline Scalar max(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, bool keepdim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k); +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, int64_t dim, bool keepdim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, int64_t dim, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, int64_t dim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, int64_t dim); +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, bool keepdim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self, int64_t dim, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self, int64_t dim); +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, bool keepdim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> median(const Tensor & self, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> median(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> median(const Tensor & self, int64_t dim); +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> median(const Tensor & self, int64_t dim, bool keepdim); +static inline std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> sort(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> sort(const Tensor & self, int64_t dim); +static inline std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, int64_t dim, bool descending, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> sort(const Tensor & self, int64_t dim, bool descending); +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k); +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, bool largest, bool sorted, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim, bool largest, bool sorted); +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, bool largest, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim, bool largest); +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, Tensor & values, Tensor & indices); +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim); +static inline Tensor & abs_out(const Tensor & self, Tensor & destination); +static inline Tensor abs(const Tensor & self); +static inline Tensor & sigmoid_out(const Tensor & self, Tensor & result); +static inline Tensor sigmoid(const Tensor & self); +static inline Tensor & log_out(const Tensor & self, Tensor & result); +static inline Tensor log(const Tensor & self); +static inline Tensor & log1p_out(const Tensor & self, Tensor & result); +static inline Tensor log1p(const Tensor & self); +static inline Tensor & lgamma_out(const Tensor & self, Tensor & result); +static inline Tensor lgamma(const Tensor & self); +static inline Tensor & exp_out(const Tensor & self, Tensor & result); +static inline Tensor exp(const Tensor & self); +static inline Tensor & cos_out(const Tensor & self, Tensor & result); +static inline Tensor cos(const Tensor & self); +static inline Tensor & acos_out(const Tensor & self, Tensor & result); +static inline Tensor acos(const Tensor & self); +static inline Tensor & cosh_out(const Tensor & self, Tensor & result); +static inline Tensor cosh(const Tensor & self); +static inline Tensor & sin_out(const Tensor & self, Tensor & result); +static inline Tensor sin(const Tensor & self); +static inline Tensor & asin_out(const Tensor & self, Tensor & result); +static inline Tensor asin(const Tensor & self); +static inline Tensor & sinh_out(const Tensor & self, Tensor & result); +static inline Tensor sinh(const Tensor & self); +static inline Tensor & tan_out(const Tensor & self, Tensor & result); +static inline Tensor tan(const Tensor & self); +static inline Tensor & atan_out(const Tensor & self, Tensor & result); +static inline Tensor atan(const Tensor & self); +static inline Tensor & tanh_out(const Tensor & self, Tensor & result); +static inline Tensor tanh(const Tensor & self); +static inline Tensor & sqrt_out(const Tensor & self, Tensor & result); +static inline Tensor sqrt(const Tensor & self); +static inline Tensor & rsqrt_out(const Tensor & self, Tensor & result); +static inline Tensor rsqrt(const Tensor & self); +static inline Tensor & ceil_out(const Tensor & self, Tensor & result); +static inline Tensor ceil(const Tensor & self); +static inline Tensor & floor_out(const Tensor & self, Tensor & result); +static inline Tensor floor(const Tensor & self); +static inline Tensor & round_out(const Tensor & self, Tensor & result); +static inline Tensor round(const Tensor & self); +static inline Tensor & trunc_out(const Tensor & self, Tensor & result); +static inline Tensor trunc(const Tensor & self); +static inline Tensor & frac_out(const Tensor & self, Tensor & result); +static inline Tensor frac(const Tensor & self); +static inline Tensor & mean_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination); +static inline Tensor mean(const Tensor & self, int64_t dim, bool keepdim); +static inline Tensor & mean_out(const Tensor & self, int64_t dim, Tensor & destination); +static inline Tensor mean(const Tensor & self, int64_t dim); +static inline Scalar mean(const Tensor & self); +static inline Tensor & var_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination); +static inline Tensor var(const Tensor & self, int64_t dim, bool keepdim); +static inline Tensor & var_out(const Tensor & self, int64_t dim, Tensor & destination); +static inline Tensor var(const Tensor & self, int64_t dim); +static inline Scalar var(const Tensor & self); +static inline Tensor & std_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination); +static inline Tensor std(const Tensor & self, int64_t dim, bool keepdim); +static inline Tensor & std_out(const Tensor & self, int64_t dim, Tensor & destination); +static inline Tensor std(const Tensor & self, int64_t dim); +static inline Scalar std(const Tensor & self); +static inline Tensor & norm_out(const Tensor & self, Scalar p, int64_t dim, bool keepdim, Tensor & destination); +static inline Tensor norm(const Tensor & self, Scalar p, int64_t dim, bool keepdim); +static inline Tensor & norm_out(const Tensor & self, Scalar p, int64_t dim, Tensor & destination); +static inline Tensor norm(const Tensor & self, Scalar p, int64_t dim); +static inline Scalar norm(const Tensor & self, Scalar p); +static inline Scalar norm(const Tensor & self); +static inline Tensor & renorm_out(const Tensor & self, Scalar p, int64_t dim, Scalar maxnorm, Tensor & destination); +static inline Tensor renorm(const Tensor & self, Scalar p, int64_t dim, Scalar maxnorm); +static inline Scalar dist(const Tensor & self, const Tensor & other, Scalar p); +static inline Scalar dist(const Tensor & self, const Tensor & other); +static inline Tensor & reciprocal_out(const Tensor & self, Tensor & destination); +static inline Tensor reciprocal(const Tensor & self); +static inline Tensor & neg_out(const Tensor & self, Tensor & destination); +static inline Tensor neg(const Tensor & self); +static inline Tensor & atan2_out(const Tensor & self, const Tensor & other, Tensor & destination); +static inline Tensor atan2(const Tensor & self, const Tensor & other); +static inline Tensor & pow_out(const Tensor & self, Scalar exponent, Tensor & destination); +static inline Tensor pow(const Tensor & self, Scalar exponent); +static inline Tensor & pow_out(const Tensor & self, const Tensor & exponent, Tensor & destination); +static inline Tensor pow(const Tensor & self, const Tensor & exponent); +static inline Tensor & lerp_out(const Tensor & self, const Tensor & end, Scalar weight, Tensor & destination); +static inline Tensor lerp(const Tensor & self, const Tensor & end, Scalar weight); +static inline Tensor & linspace_out(Scalar start, Scalar end, int64_t steps, Tensor & result); +static inline Tensor & linspace_out(Scalar start, Scalar end, Tensor & result); +static inline Tensor & logspace_out(Scalar start, Scalar end, int64_t steps, Tensor & result); +static inline Tensor & logspace_out(Scalar start, Scalar end, Tensor & result); +static inline Tensor & histc_out(const Tensor & self, Tensor & destination); +static inline Tensor histc(const Tensor & self); +static inline Tensor & histc_out(const Tensor & self, int64_t bins, Tensor & destination); +static inline Tensor histc(const Tensor & self, int64_t bins); +static inline Tensor & histc_out(const Tensor & self, int64_t bins, Scalar min, Tensor & destination); +static inline Tensor histc(const Tensor & self, int64_t bins, Scalar min); +static inline Tensor & histc_out(const Tensor & self, int64_t bins, Scalar min, Scalar max, Tensor & destination); +static inline Tensor histc(const Tensor & self, int64_t bins, Scalar min, Scalar max); +static inline Tensor & sum_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & result); +static inline Tensor sum(const Tensor & self, int64_t dim, bool keepdim); +static inline Tensor & sum_out(const Tensor & self, int64_t dim, Tensor & result); +static inline Tensor sum(const Tensor & self, int64_t dim); +static inline Scalar sum(const Tensor & self); +static inline Tensor & prod_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & result); +static inline Tensor prod(const Tensor & self, int64_t dim, bool keepdim); +static inline Tensor & prod_out(const Tensor & self, int64_t dim, Tensor & result); +static inline Tensor prod(const Tensor & self, int64_t dim); +static inline Scalar prod(const Tensor & self); +static inline Tensor & cumsum_out(const Tensor & self, int64_t dim, Tensor & result); +static inline Tensor cumsum(const Tensor & self, int64_t dim); +static inline Tensor & cumprod_out(const Tensor & self, int64_t dim, Tensor & result); +static inline Tensor cumprod(const Tensor & self, int64_t dim); +static inline Tensor & sign_out(const Tensor & self, Tensor & result); +static inline Tensor sign(const Tensor & self); +static inline Scalar trace(const Tensor & self); +static inline Tensor & add_out(const Tensor & self, Scalar value, const Tensor & other, Tensor & result); +static inline Tensor add(const Tensor & self, Scalar value, const Tensor & other); +static inline Tensor & add_out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor add(const Tensor & self, Scalar value); +static inline Tensor & add_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor add(const Tensor & self, const Tensor & other); +static inline Tensor & sub_out(const Tensor & self, Scalar value, const Tensor & other, Tensor & result); +static inline Tensor sub(const Tensor & self, Scalar value, const Tensor & other); +static inline Tensor & sub_out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor sub(const Tensor & self, Scalar value); +static inline Tensor & sub_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor sub(const Tensor & self, const Tensor & other); +static inline Tensor & mul_out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor mul(const Tensor & self, Scalar value); +static inline Tensor & mul_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor mul(const Tensor & self, const Tensor & other); +static inline Tensor & div_out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor div(const Tensor & self, Scalar value); +static inline Tensor & div_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor div(const Tensor & self, const Tensor & other); +static inline Tensor & fmod_out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor fmod(const Tensor & self, Scalar value); +static inline Tensor & fmod_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor fmod(const Tensor & self, const Tensor & other); +static inline Tensor & remainder_out(const Tensor & self, Scalar value, Tensor & result); +static inline Tensor remainder(const Tensor & self, Scalar value); +static inline Tensor & remainder_out(const Tensor & self, const Tensor & other, Tensor & result); +static inline Tensor remainder(const Tensor & self, const Tensor & other); +static inline Tensor & clamp_out(const Tensor & self, Scalar min, Scalar max, Tensor & destination); +static inline Tensor clamp(const Tensor & self, Scalar min, Scalar max); +static inline Tensor & clamp_out(const Tensor & self, Scalar min, Tensor & result); +static inline Tensor clamp(const Tensor & self, Scalar min); +static inline Scalar dot(const Tensor & self, const Tensor & tensor); +static inline Tensor & tril_out(const Tensor & self, int64_t k, Tensor & destination); +static inline Tensor tril(const Tensor & self, int64_t k); +static inline Tensor & tril_out(const Tensor & self, Tensor & destination); +static inline Tensor tril(const Tensor & self); +static inline Tensor & triu_out(const Tensor & self, int64_t k, Tensor & destination); +static inline Tensor triu(const Tensor & self, int64_t k); +static inline Tensor & triu_out(const Tensor & self, Tensor & destination); +static inline Tensor triu(const Tensor & self); +static inline Tensor & cross_out(const Tensor & self, const Tensor & other, int64_t dim, Tensor & destination); +static inline Tensor cross(const Tensor & self, const Tensor & other, int64_t dim); +static inline Tensor & cross_out(const Tensor & self, const Tensor & other, Tensor & destination); +static inline Tensor cross(const Tensor & self, const Tensor & other); +static inline Tensor & eye_out(int64_t n, Tensor & result); +static inline Tensor & eye_out(int64_t n, int64_t m, Tensor & result); +static inline Tensor & diag_out(const Tensor & self, int64_t diagonal, Tensor & result); +static inline Tensor diag(const Tensor & self, int64_t diagonal); +static inline Tensor & diag_out(const Tensor & self, Tensor & result); +static inline Tensor diag(const Tensor & self); +static inline Tensor & addmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat1, const Tensor & mat2, Tensor & result); +static inline Tensor addmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat1, const Tensor & mat2); +static inline Tensor & addmm_out(Scalar beta, const Tensor & self, const Tensor & mat1, const Tensor & mat2, Tensor & result); +static inline Tensor addmm(Scalar beta, const Tensor & self, const Tensor & mat1, const Tensor & mat2); +static inline Tensor & addmm_out(const Tensor & self, const Tensor & mat1, const Tensor & mat2, Tensor & result); +static inline Tensor addmm(const Tensor & self, const Tensor & mat1, const Tensor & mat2); +static inline Tensor & addmv_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat, const Tensor & vec, Tensor & result); +static inline Tensor addmv(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat, const Tensor & vec); +static inline Tensor & addmv_out(Scalar beta, const Tensor & self, const Tensor & mat, const Tensor & vec, Tensor & result); +static inline Tensor addmv(Scalar beta, const Tensor & self, const Tensor & mat, const Tensor & vec); +static inline Tensor & addmv_out(const Tensor & self, const Tensor & mat, const Tensor & vec, Tensor & result); +static inline Tensor addmv(const Tensor & self, const Tensor & mat, const Tensor & vec); +static inline Tensor & addr_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & vec1, const Tensor & vec2, Tensor & result); +static inline Tensor addr(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & vec1, const Tensor & vec2); +static inline Tensor & addr_out(Scalar beta, const Tensor & self, const Tensor & vec1, const Tensor & vec2, Tensor & result); +static inline Tensor addr(Scalar beta, const Tensor & self, const Tensor & vec1, const Tensor & vec2); +static inline Tensor & addr_out(const Tensor & self, const Tensor & vec1, const Tensor & vec2, Tensor & result); +static inline Tensor addr(const Tensor & self, const Tensor & vec1, const Tensor & vec2); +static inline Tensor & ger_out(const Tensor & self, const Tensor & vec2, Tensor & result); +static inline Tensor ger(const Tensor & self, const Tensor & vec2); +static inline Tensor & mv_out(const Tensor & self, const Tensor & vec, Tensor & result); +static inline Tensor mv(const Tensor & self, const Tensor & vec); +static inline Tensor & mm_out(const Tensor & self, const Tensor & mat2, Tensor & result); +static inline Tensor mm(const Tensor & self, const Tensor & mat2); +static inline Tensor & bmm_out(const Tensor & self, const Tensor & mat2, Tensor & result); +static inline Tensor bmm(const Tensor & self, const Tensor & mat2); +static inline Tensor & addbmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2, Tensor & result); +static inline Tensor addbmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2); +static inline Tensor & addbmm_out(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result); +static inline Tensor addbmm(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2); +static inline Tensor & addbmm_out(const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result); +static inline Tensor addbmm(const Tensor & self, const Tensor & batch1, const Tensor & batch2); +static inline Tensor & baddbmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2, Tensor & result); +static inline Tensor baddbmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2); +static inline Tensor & baddbmm_out(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result); +static inline Tensor baddbmm(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2); +static inline Tensor & baddbmm_out(const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result); +static inline Tensor baddbmm(const Tensor & self, const Tensor & batch1, const Tensor & batch2); +static inline Tensor & addcmul_out(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2, Tensor & result); +static inline Tensor addcmul(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2); +static inline Tensor & addcmul_out(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2, Tensor & result); +static inline Tensor addcmul(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2); +static inline Tensor & addcdiv_out(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2, Tensor & result); +static inline Tensor addcdiv(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2); +static inline Tensor & addcdiv_out(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2, Tensor & result); +static inline Tensor addcdiv(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2); +static inline std::tuple<Tensor &,Tensor &> gesv_out(const Tensor & self, const Tensor & A, Tensor & solution, Tensor & lu); +static inline std::tuple<Tensor,Tensor> gesv(const Tensor & self, const Tensor & A); +static inline std::tuple<Tensor &,Tensor &> gels_out(const Tensor & self, const Tensor & A, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> gels(const Tensor & self, const Tensor & A); +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, bool transpose, bool unitriangular, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper, bool transpose, bool unitriangular); +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, bool transpose, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper, bool transpose); +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper); +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A); +static inline std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, bool eigenvectors, bool upper, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> symeig(const Tensor & self, bool eigenvectors, bool upper); +static inline std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, bool eigenvectors, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> symeig(const Tensor & self, bool eigenvectors); +static inline std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> symeig(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> eig_out(const Tensor & self, bool eigenvectors, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> eig(const Tensor & self, bool eigenvectors); +static inline std::tuple<Tensor &,Tensor &> eig_out(const Tensor & self, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> eig(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &,Tensor &> svd_out(const Tensor & self, bool some, Tensor & res1, Tensor & res2, Tensor & res3); +static inline std::tuple<Tensor,Tensor,Tensor> svd(const Tensor & self, bool some); +static inline std::tuple<Tensor &,Tensor &,Tensor &> svd_out(const Tensor & self, Tensor & res1, Tensor & res2, Tensor & res3); +static inline std::tuple<Tensor,Tensor,Tensor> svd(const Tensor & self); +static inline Tensor & inverse_out(const Tensor & self, Tensor & output); +static inline Tensor inverse(const Tensor & self); +static inline Tensor & potrf_out(const Tensor & self, bool upper, Tensor & output); +static inline Tensor potrf(const Tensor & self, bool upper); +static inline Tensor & potrf_out(const Tensor & self, Tensor & output); +static inline Tensor potrf(const Tensor & self); +static inline Tensor & potrs_out(const Tensor & self, const Tensor & input2, bool upper, Tensor & result); +static inline Tensor potrs(const Tensor & self, const Tensor & input2, bool upper); +static inline Tensor & potrs_out(const Tensor & self, const Tensor & input2, Tensor & result); +static inline Tensor potrs(const Tensor & self, const Tensor & input2); +static inline Tensor & potri_out(const Tensor & self, bool upper, Tensor & output); +static inline Tensor potri(const Tensor & self, bool upper); +static inline Tensor & potri_out(const Tensor & self, Tensor & output); +static inline Tensor potri(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, bool upper, Scalar tol, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self, bool upper, Scalar tol); +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, bool upper, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self, bool upper); +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, Scalar tol, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self, Scalar tol); +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> qr_out(const Tensor & self, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> qr(const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> geqrf_out(const Tensor & self, Tensor & res1, Tensor & res2); +static inline std::tuple<Tensor,Tensor> geqrf(const Tensor & self); +static inline std::tuple<Tensor &,const Tensor &> orgqr_out(const Tensor & self, const Tensor & input2, Tensor & result); +static inline std::tuple<Tensor,const Tensor &> orgqr(const Tensor & self, const Tensor & input2); +static inline std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, bool transpose, Tensor & result); +static inline std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, bool transpose); +static inline std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, Tensor & result); +static inline std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left); +static inline std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, Tensor & result); +static inline std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3); +static inline std::tuple<Tensor &,Tensor &> btrifact_out(const Tensor & info, const Tensor & self, Tensor & result, Tensor & pivots); +static inline std::tuple<Tensor,Tensor> btrifact(const Tensor & info, const Tensor & self); +static inline std::tuple<Tensor &,Tensor &> btrifact_out(const Tensor & self, Tensor & result, Tensor & pivots); +static inline std::tuple<Tensor,Tensor> btrifact(const Tensor & self); +static inline Tensor & btrisolve_out(const Tensor & self, const Tensor & LU_data, const Tensor & LU_pivots, Tensor & result); +static inline Tensor btrisolve(const Tensor & self, const Tensor & LU_data, const Tensor & LU_pivots); +static inline Tensor & randperm_out(Generator & generator, int64_t n, Tensor & result); +static inline Tensor & randperm_out(int64_t n, Tensor & result); +static inline Tensor & multinomial_out(Generator & generator, const Tensor & self, int64_t num_samples, bool replacement, Tensor & result); +static inline Tensor multinomial(Generator & generator, const Tensor & self, int64_t num_samples, bool replacement); +static inline Tensor & multinomial_out(Generator & generator, const Tensor & self, int64_t num_samples, Tensor & result); +static inline Tensor multinomial(Generator & generator, const Tensor & self, int64_t num_samples); +static inline Tensor & multinomial_out(const Tensor & self, int64_t num_samples, bool replacement, Tensor & result); +static inline Tensor multinomial(const Tensor & self, int64_t num_samples, bool replacement); +static inline Tensor & multinomial_out(const Tensor & self, int64_t num_samples, Tensor & result); +static inline Tensor multinomial(const Tensor & self, int64_t num_samples); +static inline Tensor & rand_out(Generator & generator, IntList size, Tensor & result); +static inline Tensor & rand_out(IntList size, Tensor & result); +static inline Tensor & randn_out(Generator & generator, IntList size, Tensor & result); +static inline Tensor & randn_out(IntList size, Tensor & result); +static inline Tensor & select_out(const Tensor & self, int dim, int64_t sliceIndex, Tensor & result); +static inline Tensor select(const Tensor & self, int dim, int64_t sliceIndex); +static inline void Abs_updateOutput(const Tensor & input, const Tensor & output); +static inline void Abs_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput); +static inline void AbsCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage); +static inline void AbsCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage); +static inline void BCECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights); +static inline void BCECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage); +static inline void BCECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights); +static inline void BCECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage); +static inline void ClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights, const Tensor & total_weight, int64_t ignore_index); +static inline void ClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & total_weight, int64_t ignore_index); +static inline void ClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights, const Tensor & total_weight, int64_t ignore_index); +static inline void ClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & total_weight, int64_t ignore_index); +static inline void SpatialClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights, const Tensor & total_weight); +static inline void SpatialClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & total_weight); +static inline void SpatialClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights, const Tensor & total_weight); +static inline void SpatialClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & total_weight); +static inline void ELU_updateOutput(const Tensor & input, const Tensor & output, Scalar alpha, bool inplace); +static inline void ELU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output, Scalar alpha, bool inplace); +static inline void DistKLDivCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage); +static inline void DistKLDivCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage); +static inline void GatedLinear_updateOutput(const Tensor & input, const Tensor & output, int dim); +static inline void GatedLinear_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int dim); +static inline void HardShrink_updateOutput(const Tensor & input, const Tensor & output, Scalar lambda); +static inline void HardShrink_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar lambda); +static inline void HardTanh_updateOutput(const Tensor & input, const Tensor & output, Scalar min_val, Scalar max_val, bool inplace); +static inline void HardTanh_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar min_val, Scalar max_val, bool inplace); +static inline void L1Cost_updateOutput(const Tensor & input, const Tensor & output); +static inline void L1Cost_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput); +static inline void L1Cost_updateGradInput(const Tensor & input, const Tensor & gradInput); +static inline void LeakyReLU_updateOutput(const Tensor & input, const Tensor & output, Scalar negval, bool inplace); +static inline void LeakyReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar negval, bool inplace); +static inline void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & bias2, const Tensor & hx, const Tensor & output, const Tensor & storage); +static inline void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & hx, const Tensor & output, const Tensor & storage); +static inline void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & hx, const Tensor & output, const Tensor & storage); +static inline void GRUFused_updateGradInput(const Tensor & gradInInput, const Tensor & gradInHidden, const Tensor & gradOutput, const Tensor & gradInputHx, const Tensor & storage); +static inline void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & bias2, const Tensor & cell, const Tensor & output, const Tensor & outputCell); +static inline void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & cell, const Tensor & output, const Tensor & outputCell); +static inline void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & cell, const Tensor & output, const Tensor & outputCell); +static inline void LSTMFused_updateGradInput(const Tensor & storage, const Tensor & gradInGates, const Tensor & cx, const Tensor & cy, const Tensor & gradOutput, const Tensor & gradOutputCell, const Tensor & gradInputCx); +static inline void LogSigmoid_updateOutput(const Tensor & input, const Tensor & output, const Tensor & buffer); +static inline void LogSigmoid_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & buffer); +static inline void LogSoftMax_updateOutput(const Tensor & input, const Tensor & output); +static inline void LogSoftMax_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void MarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, Scalar margin); +static inline void MarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, Scalar margin); +static inline void SoftMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage); +static inline void SoftMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage); +static inline void MSECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage); +static inline void MSECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage); +static inline void MultiLabelMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, const Tensor & isTarget, bool sizeAverage); +static inline void MultiLabelMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, const Tensor & isTarget, bool sizeAverage); +static inline void MultiMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, int p, const Tensor & weights, Scalar margin); +static inline void MultiMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, int p, Scalar margin); +static inline void MultiMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, int p, const Tensor & weights, Scalar margin); +static inline void MultiMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, int p, Scalar margin); +static inline void PReLU_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, int64_t nOutputPlane); +static inline void PReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int64_t nOutputPlane); +static inline void PReLU_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradWeight, const Tensor & gradWeightBuf, const Tensor & gradWeightBuf2, int64_t nOutputPlane, Scalar scale); +static inline void Linear_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & addBuffer); +static inline void Linear_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight); +static inline void Linear_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & addBuffer, Scalar scale); +static inline void RReLU_updateOutput(const Tensor & input, const Tensor & output, const Tensor & noise, Scalar lower, Scalar upper, bool train, bool inplace, Generator & generator); +static inline void RReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & noise, Scalar lower, Scalar upper, bool train, bool inplace); +static inline void Sigmoid_updateOutput(const Tensor & input, const Tensor & output); +static inline void Sigmoid_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void Sigmoid_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void SmoothL1Criterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage); +static inline void SmoothL1Criterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage); +static inline void SoftMax_updateOutput(const Tensor & input, const Tensor & output); +static inline void SoftMax_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void SoftPlus_updateOutput(const Tensor & input, const Tensor & output, Scalar beta, Scalar threshold); +static inline void SoftPlus_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output, Scalar beta, Scalar threshold); +static inline void SoftShrink_updateOutput(const Tensor & input, const Tensor & output, Scalar lambda); +static inline void SoftShrink_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar lambda); +static inline void IndexLinear_updateOutput(const Tensor & keys, int64_t keysOffset, const Tensor & values, const Tensor & sizes, const Tensor & cumSumSizes, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & normalizedValues, int train); +static inline void IndexLinear_accGradParameters(const Tensor & keys, int64_t keysOffset, const Tensor & values, const Tensor & sizes, const Tensor & cumSumSizes, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & bias, const Tensor & valuesBuffer, Scalar weightDecay, Scalar scale); +static inline void SparseLinear_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias); +static inline void SparseLinear_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & bias, Scalar weightDecay, Scalar scale); +static inline void Sqrt_updateOutput(const Tensor & input, const Tensor & output, Scalar eps); +static inline void Sqrt_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void Square_updateOutput(const Tensor & input, const Tensor & output); +static inline void Square_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput); +static inline void Tanh_updateOutput(const Tensor & input, const Tensor & output); +static inline void Tanh_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void Tanh_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output); +static inline void Threshold_updateOutput(const Tensor & input, const Tensor & output, Scalar threshold, Scalar val, bool inplace); +static inline void Threshold_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar threshold, Scalar val, bool inplace); +static inline void TemporalConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int dW, int inputFrameSize, int outputFrameSize); +static inline void TemporalConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int dW); +static inline void TemporalConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int dW, Scalar scale); +static inline void TemporalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int dW); +static inline void TemporalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int dW); +static inline void TemporalSubSampling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int dW, int inputFrameSize); +static inline void TemporalSubSampling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int dW); +static inline void TemporalSubSampling_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int dW, Scalar scale); +static inline void TemporalRowConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst); +static inline void TemporalRowConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst); +static inline void TemporalRowConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst, Scalar scale); +static inline void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps); +static inline void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps); +static inline void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps); +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps); +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps); +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps); +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps); +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps); +static inline void SpatialConvolutionMap_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH); +static inline void SpatialConvolutionMap_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH); +static inline void SpatialConvolutionMap_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH, Scalar scale); +static inline void SpatialConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH); +static inline void SpatialConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH); +static inline void SpatialConvolutionMM_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH); +static inline void SpatialConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale); +static inline void SpatialConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale); +static inline void SpatialDepthWiseConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH); +static inline void SpatialDepthWiseConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH); +static inline void SpatialDepthWiseConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH); +static inline void SpatialDepthWiseConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale); +static inline void SpatialDepthWiseConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale); +static inline void SpatialConvolutionLocal_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight); +static inline void SpatialConvolutionLocal_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight); +static inline void SpatialConvolutionLocal_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight, Scalar scale); +static inline void SpatialAdaptiveMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int owidth, int oheight); +static inline void SpatialAdaptiveMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices); +static inline void SpatialAdaptiveAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int owidth, int oheight); +static inline void SpatialAdaptiveAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput); +static inline void SpatialAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode, bool count_include_pad); +static inline void SpatialAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode, bool count_include_pad); +static inline void SpatialFractionalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, int outputW, int outputH, int poolSizeW, int poolSizeH, const Tensor & indices, const Tensor & randomSamples); +static inline void SpatialFractionalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int outputW, int outputH, int poolSizeW, int poolSizeH, const Tensor & indices); +static inline void SpatialFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH); +static inline void SpatialFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH); +static inline void SpatialFullConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH); +static inline void SpatialFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH, Scalar scale); +static inline void SpatialFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH, Scalar scale); +static inline void SpatialFullConvolutionMap_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH); +static inline void SpatialFullConvolutionMap_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH); +static inline void SpatialFullConvolutionMap_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH, Scalar scale); +static inline void SpatialDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH); +static inline void SpatialDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH); +static inline void SpatialDilatedConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH); +static inline void SpatialDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, Scalar scale); +static inline void SpatialDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, Scalar scale); +static inline void SpatialMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode); +static inline void SpatialMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode); +static inline void SpatialDilatedMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, bool ceil_mode); +static inline void SpatialDilatedMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, bool ceil_mode); +static inline void SpatialMaxUnpooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int owidth, int oheight); +static inline void SpatialMaxUnpooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int owidth, int oheight); +static inline void SpatialSubSampling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int kH, int dW, int dH); +static inline void SpatialSubSampling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int kH, int dW, int dH); +static inline void SpatialSubSampling_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int kH, int dW, int dH, Scalar scale); +static inline void SpatialUpSamplingNearest_updateOutput(const Tensor & input, const Tensor & output, int scale_factor); +static inline void SpatialUpSamplingNearest_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int scale_factor); +static inline void SpatialUpSamplingBilinear_updateOutput(const Tensor & input, const Tensor & output, int outputHeight, int outputWidth); +static inline void SpatialUpSamplingBilinear_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, int nbatch, int nchannels, int inputHeight, int inputWidth, int outputHeight, int outputWidth); +static inline void VolumetricAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int kT, int kW, int kH, int dT, int dW, int dH); +static inline void VolumetricAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int kT, int kW, int kH, int dT, int dW, int dH); +static inline void VolumetricConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale); +static inline void VolumetricConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale); +static inline void VolumetricConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricConvolutionMM_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale); +static inline void VolumetricConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale); +static inline void VolumetricFractionalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, int outputT, int outputW, int outputH, int poolSizeT, int poolSizeW, int poolSizeH, const Tensor & indices, const Tensor & randomSamples); +static inline void VolumetricFractionalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int outputT, int outputW, int outputH, int poolSizeT, int poolSizeW, int poolSizeH, const Tensor & indices); +static inline void VolumetricFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH); +static inline void VolumetricFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH); +static inline void VolumetricFullConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH); +static inline void VolumetricFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH, Scalar scale); +static inline void VolumetricFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH, Scalar scale); +static inline void VolumetricDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH); +static inline void VolumetricDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH); +static inline void VolumetricDilatedConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH); +static inline void VolumetricDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH, Scalar scale); +static inline void VolumetricDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH, Scalar scale); +static inline void VolumetricMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, bool ceilMode); +static inline void VolumetricMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, bool ceilMode); +static inline void VolumetricDilatedMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, int dilationT, int dilationW, int dilationH, bool ceilMode); +static inline void VolumetricDilatedMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, int dilationT, int dilationW, int dilationH, bool ceilMode); +static inline void VolumetricMaxUnpooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int oT, int oW, int oH, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void VolumetricMaxUnpooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int oT, int oW, int oH, int dT, int dW, int dH, int pT, int pW, int pH); +static inline void SpatialReflectionPadding_updateOutput(const Tensor & input, const Tensor & output, int pad_l, int pad_r, int pad_t, int pad_b); +static inline void SpatialReflectionPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pad_l, int pad_r, int pad_t, int pad_b); +static inline void SpatialReplicationPadding_updateOutput(const Tensor & input, const Tensor & output, int pad_l, int pad_r, int pad_t, int pad_b); +static inline void SpatialReplicationPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pad_l, int pad_r, int pad_t, int pad_b); +static inline void VolumetricReplicationPadding_updateOutput(const Tensor & input, const Tensor & output, int pleft, int pright, int ptop, int pbottom, int pfront, int pback); +static inline void VolumetricReplicationPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pleft, int pright, int ptop, int pbottom, int pfront, int pback); +static inline void VolumetricUpSamplingNearest_updateOutput(const Tensor & input, const Tensor & output, int scale_factor); +static inline void VolumetricUpSamplingNearest_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int scale_factor); +static inline void VolumetricUpSamplingTrilinear_updateOutput(const Tensor & input, const Tensor & output, int outputDepth, int outputHeight, int outputWidth); +static inline void VolumetricUpSamplingTrilinear_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, int nbatch, int nchannels, int inputDepth, int inputHeight, int inputWidth, int outputDepth, int outputHeight, int outputWidth); +static inline void SpatialCrossMapLRN_updateOutput(const Tensor & input, const Tensor & output, const Tensor & scale, int size, Scalar alpha, Scalar beta, Scalar k); +static inline void SpatialCrossMapLRN_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & scale, const Tensor & output, int size, Scalar alpha, Scalar beta, Scalar k); + +// function definitions are all static inline because +// they are one-line statically dispatched functions that +// invoke the actual dynamic dispatch on the correct argument +static inline Tensor & zeros_out(IntList size, Tensor & result) { + return result.type().zeros_out(size, result); +} +static inline Tensor & ones_out(IntList size, Tensor & result) { + return result.type().ones_out(size, result); +} +static inline int64_t numel(const Tensor & self) { + return self.type().numel(self); +} +static inline Tensor & masked_select_out(const Tensor & self, const Tensor & mask, Tensor & result) { + return self.type().masked_select_out(self, mask, result); +} +static inline Tensor masked_select(const Tensor & self, const Tensor & mask) { + return self.type().masked_select(self, mask); +} +static inline Tensor transpose(const Tensor & self, int64_t dim0, int64_t dim1) { + return self.type().transpose(self, dim0, dim1); +} +static inline Tensor t(const Tensor & self) { + return self.type().t(self); +} +static inline Tensor & squeeze_out(const Tensor & self, int64_t dim, Tensor & result) { + return self.type().squeeze_out(self, dim, result); +} +static inline Tensor squeeze(const Tensor & self, int64_t dim) { + return self.type().squeeze(self, dim); +} +static inline Tensor & squeeze_out(const Tensor & self, Tensor & result) { + return self.type().squeeze_out(self, result); +} +static inline Tensor squeeze(const Tensor & self) { + return self.type().squeeze(self); +} +static inline Tensor & unsqueeze_out(const Tensor & self, int64_t dim, Tensor & result) { + return self.type().unsqueeze_out(self, dim, result); +} +static inline Tensor unsqueeze(const Tensor & self, int64_t dim) { + return self.type().unsqueeze(self, dim); +} +static inline Tensor & nonzero_out(const Tensor & self, Tensor & result) { + return self.type().nonzero_out(self, result); +} +static inline Tensor nonzero(const Tensor & self) { + return self.type().nonzero(self); +} +static inline Tensor & index_select_out(const Tensor & self, int64_t dim, const Tensor & index, Tensor & result) { + return self.type().index_select_out(self, dim, index, result); +} +static inline Tensor index_select(const Tensor & self, int64_t dim, const Tensor & index) { + return self.type().index_select(self, dim, index); +} +static inline Tensor & range_out(Scalar start, Scalar end, Scalar step, Tensor & result) { + return result.type().range_out(start, end, step, result); +} +static inline Tensor & range_out(Scalar start, Scalar end, Tensor & result) { + return result.type().range_out(start, end, result); +} +static inline Tensor & gather_out(const Tensor & self, int64_t dim, const Tensor & index, Tensor & result) { + return self.type().gather_out(self, dim, index, result); +} +static inline Tensor gather(const Tensor & self, int64_t dim, const Tensor & index) { + return self.type().gather(self, dim, index); +} +static inline bool equal(const Tensor & self, const Tensor & other) { + return self.type().equal(self, other); +} +static inline Tensor & __and___out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().__and___out(self, value, result); +} +static inline Tensor __and__(const Tensor & self, Scalar value) { + return self.type().__and__(self, value); +} +static inline Tensor & __and___out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().__and___out(self, other, result); +} +static inline Tensor __and__(const Tensor & self, const Tensor & other) { + return self.type().__and__(self, other); +} +static inline Tensor & __iand__(Tensor & self, Scalar value) { + return self.type().__iand__(self, value); +} +static inline Tensor & __iand__(Tensor & self, const Tensor & other) { + return self.type().__iand__(self, other); +} +static inline Tensor & __or___out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().__or___out(self, value, result); +} +static inline Tensor __or__(const Tensor & self, Scalar value) { + return self.type().__or__(self, value); +} +static inline Tensor & __or___out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().__or___out(self, other, result); +} +static inline Tensor __or__(const Tensor & self, const Tensor & other) { + return self.type().__or__(self, other); +} +static inline Tensor & __ior__(Tensor & self, Scalar value) { + return self.type().__ior__(self, value); +} +static inline Tensor & __ior__(Tensor & self, const Tensor & other) { + return self.type().__ior__(self, other); +} +static inline Tensor & __xor___out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().__xor___out(self, value, result); +} +static inline Tensor __xor__(const Tensor & self, Scalar value) { + return self.type().__xor__(self, value); +} +static inline Tensor & __xor___out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().__xor___out(self, other, result); +} +static inline Tensor __xor__(const Tensor & self, const Tensor & other) { + return self.type().__xor__(self, other); +} +static inline Tensor & __ixor__(Tensor & self, Scalar value) { + return self.type().__ixor__(self, value); +} +static inline Tensor & __ixor__(Tensor & self, const Tensor & other) { + return self.type().__ixor__(self, other); +} +static inline Tensor & __lshift___out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().__lshift___out(self, value, result); +} +static inline Tensor __lshift__(const Tensor & self, Scalar value) { + return self.type().__lshift__(self, value); +} +static inline Tensor & __lshift___out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().__lshift___out(self, other, result); +} +static inline Tensor __lshift__(const Tensor & self, const Tensor & other) { + return self.type().__lshift__(self, other); +} +static inline Tensor & __ilshift__(Tensor & self, Scalar value) { + return self.type().__ilshift__(self, value); +} +static inline Tensor & __ilshift__(Tensor & self, const Tensor & other) { + return self.type().__ilshift__(self, other); +} +static inline Tensor & __rshift___out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().__rshift___out(self, value, result); +} +static inline Tensor __rshift__(const Tensor & self, Scalar value) { + return self.type().__rshift__(self, value); +} +static inline Tensor & __rshift___out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().__rshift___out(self, other, result); +} +static inline Tensor __rshift__(const Tensor & self, const Tensor & other) { + return self.type().__rshift__(self, other); +} +static inline Tensor & __irshift__(Tensor & self, Scalar value) { + return self.type().__irshift__(self, value); +} +static inline Tensor & __irshift__(Tensor & self, const Tensor & other) { + return self.type().__irshift__(self, other); +} +static inline Tensor & lt_out(const Tensor & tensor, Scalar value, Tensor & result) { + return tensor.type().lt_out(tensor, value, result); +} +static inline Tensor lt(const Tensor & tensor, Scalar value) { + return tensor.type().lt(tensor, value); +} +static inline Tensor & lt_out(const Tensor & tensor, const Tensor & other, Tensor & result) { + return tensor.type().lt_out(tensor, other, result); +} +static inline Tensor lt(const Tensor & tensor, const Tensor & other) { + return tensor.type().lt(tensor, other); +} +static inline Tensor & gt_out(const Tensor & tensor, Scalar value, Tensor & result) { + return tensor.type().gt_out(tensor, value, result); +} +static inline Tensor gt(const Tensor & tensor, Scalar value) { + return tensor.type().gt(tensor, value); +} +static inline Tensor & gt_out(const Tensor & tensor, const Tensor & other, Tensor & result) { + return tensor.type().gt_out(tensor, other, result); +} +static inline Tensor gt(const Tensor & tensor, const Tensor & other) { + return tensor.type().gt(tensor, other); +} +static inline Tensor & le_out(const Tensor & tensor, Scalar value, Tensor & result) { + return tensor.type().le_out(tensor, value, result); +} +static inline Tensor le(const Tensor & tensor, Scalar value) { + return tensor.type().le(tensor, value); +} +static inline Tensor & le_out(const Tensor & tensor, const Tensor & other, Tensor & result) { + return tensor.type().le_out(tensor, other, result); +} +static inline Tensor le(const Tensor & tensor, const Tensor & other) { + return tensor.type().le(tensor, other); +} +static inline Tensor & ge_out(const Tensor & tensor, Scalar value, Tensor & result) { + return tensor.type().ge_out(tensor, value, result); +} +static inline Tensor ge(const Tensor & tensor, Scalar value) { + return tensor.type().ge(tensor, value); +} +static inline Tensor & ge_out(const Tensor & tensor, const Tensor & other, Tensor & result) { + return tensor.type().ge_out(tensor, other, result); +} +static inline Tensor ge(const Tensor & tensor, const Tensor & other) { + return tensor.type().ge(tensor, other); +} +static inline Tensor & eq_out(const Tensor & tensor, Scalar value, Tensor & result) { + return tensor.type().eq_out(tensor, value, result); +} +static inline Tensor eq(const Tensor & tensor, Scalar value) { + return tensor.type().eq(tensor, value); +} +static inline Tensor & eq_out(const Tensor & tensor, const Tensor & other, Tensor & result) { + return tensor.type().eq_out(tensor, other, result); +} +static inline Tensor eq(const Tensor & tensor, const Tensor & other) { + return tensor.type().eq(tensor, other); +} +static inline Tensor & ne_out(const Tensor & tensor, Scalar value, Tensor & result) { + return tensor.type().ne_out(tensor, value, result); +} +static inline Tensor ne(const Tensor & tensor, Scalar value) { + return tensor.type().ne(tensor, value); +} +static inline Tensor & ne_out(const Tensor & tensor, const Tensor & other, Tensor & result) { + return tensor.type().ne_out(tensor, other, result); +} +static inline Tensor ne(const Tensor & tensor, const Tensor & other) { + return tensor.type().ne(tensor, other); +} +static inline std::tuple<Tensor &,Tensor &> min_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & min, Tensor & min_indices) { + return self.type().min_out(self, dim, keepdim, min, min_indices); +} +static inline std::tuple<Tensor,Tensor> min(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().min(self, dim, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> min_out(const Tensor & self, int64_t dim, Tensor & min, Tensor & min_indices) { + return self.type().min_out(self, dim, min, min_indices); +} +static inline std::tuple<Tensor,Tensor> min(const Tensor & self, int64_t dim) { + return self.type().min(self, dim); +} +static inline Tensor & min_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().min_out(self, other, result); +} +static inline Tensor min(const Tensor & self, const Tensor & other) { + return self.type().min(self, other); +} +static inline Scalar min(const Tensor & self) { + return self.type().min(self); +} +static inline std::tuple<Tensor &,Tensor &> max_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & max, Tensor & max_indices) { + return self.type().max_out(self, dim, keepdim, max, max_indices); +} +static inline std::tuple<Tensor,Tensor> max(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().max(self, dim, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> max_out(const Tensor & self, int64_t dim, Tensor & max, Tensor & max_indices) { + return self.type().max_out(self, dim, max, max_indices); +} +static inline std::tuple<Tensor,Tensor> max(const Tensor & self, int64_t dim) { + return self.type().max(self, dim); +} +static inline Tensor & max_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().max_out(self, other, result); +} +static inline Tensor max(const Tensor & self, const Tensor & other) { + return self.type().max(self, other); +} +static inline Scalar max(const Tensor & self) { + return self.type().max(self); +} +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, bool keepdim, Tensor & values, Tensor & indices) { + return self.type().kthvalue_out(self, k, keepdim, values, indices); +} +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, bool keepdim) { + return self.type().kthvalue(self, k, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, Tensor & values, Tensor & indices) { + return self.type().kthvalue_out(self, k, values, indices); +} +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k) { + return self.type().kthvalue(self, k); +} +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, int64_t dim, bool keepdim, Tensor & values, Tensor & indices) { + return self.type().kthvalue_out(self, k, dim, keepdim, values, indices); +} +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, int64_t dim, bool keepdim) { + return self.type().kthvalue(self, k, dim, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, int64_t dim, Tensor & values, Tensor & indices) { + return self.type().kthvalue_out(self, k, dim, values, indices); +} +static inline std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, int64_t dim) { + return self.type().kthvalue(self, k, dim); +} +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, bool keepdim, Tensor & values, Tensor & indices) { + return self.type().mode_out(self, keepdim, values, indices); +} +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self, bool keepdim) { + return self.type().mode(self, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, Tensor & values, Tensor & indices) { + return self.type().mode_out(self, values, indices); +} +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self) { + return self.type().mode(self); +} +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & values, Tensor & indices) { + return self.type().mode_out(self, dim, keepdim, values, indices); +} +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().mode(self, dim, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices) { + return self.type().mode_out(self, dim, values, indices); +} +static inline std::tuple<Tensor,Tensor> mode(const Tensor & self, int64_t dim) { + return self.type().mode(self, dim); +} +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, bool keepdim, Tensor & values, Tensor & indices) { + return self.type().median_out(self, keepdim, values, indices); +} +static inline std::tuple<Tensor,Tensor> median(const Tensor & self, bool keepdim) { + return self.type().median(self, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, Tensor & values, Tensor & indices) { + return self.type().median_out(self, values, indices); +} +static inline std::tuple<Tensor,Tensor> median(const Tensor & self) { + return self.type().median(self); +} +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices) { + return self.type().median_out(self, dim, values, indices); +} +static inline std::tuple<Tensor,Tensor> median(const Tensor & self, int64_t dim) { + return self.type().median(self, dim); +} +static inline std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & values, Tensor & indices) { + return self.type().median_out(self, dim, keepdim, values, indices); +} +static inline std::tuple<Tensor,Tensor> median(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().median(self, dim, keepdim); +} +static inline std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, Tensor & values, Tensor & indices) { + return self.type().sort_out(self, values, indices); +} +static inline std::tuple<Tensor,Tensor> sort(const Tensor & self) { + return self.type().sort(self); +} +static inline std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices) { + return self.type().sort_out(self, dim, values, indices); +} +static inline std::tuple<Tensor,Tensor> sort(const Tensor & self, int64_t dim) { + return self.type().sort(self, dim); +} +static inline std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, int64_t dim, bool descending, Tensor & values, Tensor & indices) { + return self.type().sort_out(self, dim, descending, values, indices); +} +static inline std::tuple<Tensor,Tensor> sort(const Tensor & self, int64_t dim, bool descending) { + return self.type().sort(self, dim, descending); +} +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, Tensor & values, Tensor & indices) { + return self.type().topk_out(self, k, values, indices); +} +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k) { + return self.type().topk(self, k); +} +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, bool largest, bool sorted, Tensor & values, Tensor & indices) { + return self.type().topk_out(self, k, dim, largest, sorted, values, indices); +} +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim, bool largest, bool sorted) { + return self.type().topk(self, k, dim, largest, sorted); +} +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, bool largest, Tensor & values, Tensor & indices) { + return self.type().topk_out(self, k, dim, largest, values, indices); +} +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim, bool largest) { + return self.type().topk(self, k, dim, largest); +} +static inline std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, Tensor & values, Tensor & indices) { + return self.type().topk_out(self, k, dim, values, indices); +} +static inline std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim) { + return self.type().topk(self, k, dim); +} +static inline Tensor & abs_out(const Tensor & self, Tensor & destination) { + return self.type().abs_out(self, destination); +} +static inline Tensor abs(const Tensor & self) { + return self.type().abs(self); +} +static inline Tensor & sigmoid_out(const Tensor & self, Tensor & result) { + return self.type().sigmoid_out(self, result); +} +static inline Tensor sigmoid(const Tensor & self) { + return self.type().sigmoid(self); +} +static inline Tensor & log_out(const Tensor & self, Tensor & result) { + return self.type().log_out(self, result); +} +static inline Tensor log(const Tensor & self) { + return self.type().log(self); +} +static inline Tensor & log1p_out(const Tensor & self, Tensor & result) { + return self.type().log1p_out(self, result); +} +static inline Tensor log1p(const Tensor & self) { + return self.type().log1p(self); +} +static inline Tensor & lgamma_out(const Tensor & self, Tensor & result) { + return self.type().lgamma_out(self, result); +} +static inline Tensor lgamma(const Tensor & self) { + return self.type().lgamma(self); +} +static inline Tensor & exp_out(const Tensor & self, Tensor & result) { + return self.type().exp_out(self, result); +} +static inline Tensor exp(const Tensor & self) { + return self.type().exp(self); +} +static inline Tensor & cos_out(const Tensor & self, Tensor & result) { + return self.type().cos_out(self, result); +} +static inline Tensor cos(const Tensor & self) { + return self.type().cos(self); +} +static inline Tensor & acos_out(const Tensor & self, Tensor & result) { + return self.type().acos_out(self, result); +} +static inline Tensor acos(const Tensor & self) { + return self.type().acos(self); +} +static inline Tensor & cosh_out(const Tensor & self, Tensor & result) { + return self.type().cosh_out(self, result); +} +static inline Tensor cosh(const Tensor & self) { + return self.type().cosh(self); +} +static inline Tensor & sin_out(const Tensor & self, Tensor & result) { + return self.type().sin_out(self, result); +} +static inline Tensor sin(const Tensor & self) { + return self.type().sin(self); +} +static inline Tensor & asin_out(const Tensor & self, Tensor & result) { + return self.type().asin_out(self, result); +} +static inline Tensor asin(const Tensor & self) { + return self.type().asin(self); +} +static inline Tensor & sinh_out(const Tensor & self, Tensor & result) { + return self.type().sinh_out(self, result); +} +static inline Tensor sinh(const Tensor & self) { + return self.type().sinh(self); +} +static inline Tensor & tan_out(const Tensor & self, Tensor & result) { + return self.type().tan_out(self, result); +} +static inline Tensor tan(const Tensor & self) { + return self.type().tan(self); +} +static inline Tensor & atan_out(const Tensor & self, Tensor & result) { + return self.type().atan_out(self, result); +} +static inline Tensor atan(const Tensor & self) { + return self.type().atan(self); +} +static inline Tensor & tanh_out(const Tensor & self, Tensor & result) { + return self.type().tanh_out(self, result); +} +static inline Tensor tanh(const Tensor & self) { + return self.type().tanh(self); +} +static inline Tensor & sqrt_out(const Tensor & self, Tensor & result) { + return self.type().sqrt_out(self, result); +} +static inline Tensor sqrt(const Tensor & self) { + return self.type().sqrt(self); +} +static inline Tensor & rsqrt_out(const Tensor & self, Tensor & result) { + return self.type().rsqrt_out(self, result); +} +static inline Tensor rsqrt(const Tensor & self) { + return self.type().rsqrt(self); +} +static inline Tensor & ceil_out(const Tensor & self, Tensor & result) { + return self.type().ceil_out(self, result); +} +static inline Tensor ceil(const Tensor & self) { + return self.type().ceil(self); +} +static inline Tensor & floor_out(const Tensor & self, Tensor & result) { + return self.type().floor_out(self, result); +} +static inline Tensor floor(const Tensor & self) { + return self.type().floor(self); +} +static inline Tensor & round_out(const Tensor & self, Tensor & result) { + return self.type().round_out(self, result); +} +static inline Tensor round(const Tensor & self) { + return self.type().round(self); +} +static inline Tensor & trunc_out(const Tensor & self, Tensor & result) { + return self.type().trunc_out(self, result); +} +static inline Tensor trunc(const Tensor & self) { + return self.type().trunc(self); +} +static inline Tensor & frac_out(const Tensor & self, Tensor & result) { + return self.type().frac_out(self, result); +} +static inline Tensor frac(const Tensor & self) { + return self.type().frac(self); +} +static inline Tensor & mean_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination) { + return self.type().mean_out(self, dim, keepdim, destination); +} +static inline Tensor mean(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().mean(self, dim, keepdim); +} +static inline Tensor & mean_out(const Tensor & self, int64_t dim, Tensor & destination) { + return self.type().mean_out(self, dim, destination); +} +static inline Tensor mean(const Tensor & self, int64_t dim) { + return self.type().mean(self, dim); +} +static inline Scalar mean(const Tensor & self) { + return self.type().mean(self); +} +static inline Tensor & var_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination) { + return self.type().var_out(self, dim, keepdim, destination); +} +static inline Tensor var(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().var(self, dim, keepdim); +} +static inline Tensor & var_out(const Tensor & self, int64_t dim, Tensor & destination) { + return self.type().var_out(self, dim, destination); +} +static inline Tensor var(const Tensor & self, int64_t dim) { + return self.type().var(self, dim); +} +static inline Scalar var(const Tensor & self) { + return self.type().var(self); +} +static inline Tensor & std_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination) { + return self.type().std_out(self, dim, keepdim, destination); +} +static inline Tensor std(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().std(self, dim, keepdim); +} +static inline Tensor & std_out(const Tensor & self, int64_t dim, Tensor & destination) { + return self.type().std_out(self, dim, destination); +} +static inline Tensor std(const Tensor & self, int64_t dim) { + return self.type().std(self, dim); +} +static inline Scalar std(const Tensor & self) { + return self.type().std(self); +} +static inline Tensor & norm_out(const Tensor & self, Scalar p, int64_t dim, bool keepdim, Tensor & destination) { + return self.type().norm_out(self, p, dim, keepdim, destination); +} +static inline Tensor norm(const Tensor & self, Scalar p, int64_t dim, bool keepdim) { + return self.type().norm(self, p, dim, keepdim); +} +static inline Tensor & norm_out(const Tensor & self, Scalar p, int64_t dim, Tensor & destination) { + return self.type().norm_out(self, p, dim, destination); +} +static inline Tensor norm(const Tensor & self, Scalar p, int64_t dim) { + return self.type().norm(self, p, dim); +} +static inline Scalar norm(const Tensor & self, Scalar p) { + return self.type().norm(self, p); +} +static inline Scalar norm(const Tensor & self) { + return self.type().norm(self); +} +static inline Tensor & renorm_out(const Tensor & self, Scalar p, int64_t dim, Scalar maxnorm, Tensor & destination) { + return self.type().renorm_out(self, p, dim, maxnorm, destination); +} +static inline Tensor renorm(const Tensor & self, Scalar p, int64_t dim, Scalar maxnorm) { + return self.type().renorm(self, p, dim, maxnorm); +} +static inline Scalar dist(const Tensor & self, const Tensor & other, Scalar p) { + return self.type().dist(self, other, p); +} +static inline Scalar dist(const Tensor & self, const Tensor & other) { + return self.type().dist(self, other); +} +static inline Tensor & reciprocal_out(const Tensor & self, Tensor & destination) { + return self.type().reciprocal_out(self, destination); +} +static inline Tensor reciprocal(const Tensor & self) { + return self.type().reciprocal(self); +} +static inline Tensor & neg_out(const Tensor & self, Tensor & destination) { + return self.type().neg_out(self, destination); +} +static inline Tensor neg(const Tensor & self) { + return self.type().neg(self); +} +static inline Tensor & atan2_out(const Tensor & self, const Tensor & other, Tensor & destination) { + return self.type().atan2_out(self, other, destination); +} +static inline Tensor atan2(const Tensor & self, const Tensor & other) { + return self.type().atan2(self, other); +} +static inline Tensor & pow_out(const Tensor & self, Scalar exponent, Tensor & destination) { + return self.type().pow_out(self, exponent, destination); +} +static inline Tensor pow(const Tensor & self, Scalar exponent) { + return self.type().pow(self, exponent); +} +static inline Tensor & pow_out(const Tensor & self, const Tensor & exponent, Tensor & destination) { + return self.type().pow_out(self, exponent, destination); +} +static inline Tensor pow(const Tensor & self, const Tensor & exponent) { + return self.type().pow(self, exponent); +} +static inline Tensor & lerp_out(const Tensor & self, const Tensor & end, Scalar weight, Tensor & destination) { + return self.type().lerp_out(self, end, weight, destination); +} +static inline Tensor lerp(const Tensor & self, const Tensor & end, Scalar weight) { + return self.type().lerp(self, end, weight); +} +static inline Tensor & linspace_out(Scalar start, Scalar end, int64_t steps, Tensor & result) { + return result.type().linspace_out(start, end, steps, result); +} +static inline Tensor & linspace_out(Scalar start, Scalar end, Tensor & result) { + return result.type().linspace_out(start, end, result); +} +static inline Tensor & logspace_out(Scalar start, Scalar end, int64_t steps, Tensor & result) { + return result.type().logspace_out(start, end, steps, result); +} +static inline Tensor & logspace_out(Scalar start, Scalar end, Tensor & result) { + return result.type().logspace_out(start, end, result); +} +static inline Tensor & histc_out(const Tensor & self, Tensor & destination) { + return self.type().histc_out(self, destination); +} +static inline Tensor histc(const Tensor & self) { + return self.type().histc(self); +} +static inline Tensor & histc_out(const Tensor & self, int64_t bins, Tensor & destination) { + return self.type().histc_out(self, bins, destination); +} +static inline Tensor histc(const Tensor & self, int64_t bins) { + return self.type().histc(self, bins); +} +static inline Tensor & histc_out(const Tensor & self, int64_t bins, Scalar min, Tensor & destination) { + return self.type().histc_out(self, bins, min, destination); +} +static inline Tensor histc(const Tensor & self, int64_t bins, Scalar min) { + return self.type().histc(self, bins, min); +} +static inline Tensor & histc_out(const Tensor & self, int64_t bins, Scalar min, Scalar max, Tensor & destination) { + return self.type().histc_out(self, bins, min, max, destination); +} +static inline Tensor histc(const Tensor & self, int64_t bins, Scalar min, Scalar max) { + return self.type().histc(self, bins, min, max); +} +static inline Tensor & sum_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & result) { + return self.type().sum_out(self, dim, keepdim, result); +} +static inline Tensor sum(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().sum(self, dim, keepdim); +} +static inline Tensor & sum_out(const Tensor & self, int64_t dim, Tensor & result) { + return self.type().sum_out(self, dim, result); +} +static inline Tensor sum(const Tensor & self, int64_t dim) { + return self.type().sum(self, dim); +} +static inline Scalar sum(const Tensor & self) { + return self.type().sum(self); +} +static inline Tensor & prod_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & result) { + return self.type().prod_out(self, dim, keepdim, result); +} +static inline Tensor prod(const Tensor & self, int64_t dim, bool keepdim) { + return self.type().prod(self, dim, keepdim); +} +static inline Tensor & prod_out(const Tensor & self, int64_t dim, Tensor & result) { + return self.type().prod_out(self, dim, result); +} +static inline Tensor prod(const Tensor & self, int64_t dim) { + return self.type().prod(self, dim); +} +static inline Scalar prod(const Tensor & self) { + return self.type().prod(self); +} +static inline Tensor & cumsum_out(const Tensor & self, int64_t dim, Tensor & result) { + return self.type().cumsum_out(self, dim, result); +} +static inline Tensor cumsum(const Tensor & self, int64_t dim) { + return self.type().cumsum(self, dim); +} +static inline Tensor & cumprod_out(const Tensor & self, int64_t dim, Tensor & result) { + return self.type().cumprod_out(self, dim, result); +} +static inline Tensor cumprod(const Tensor & self, int64_t dim) { + return self.type().cumprod(self, dim); +} +static inline Tensor & sign_out(const Tensor & self, Tensor & result) { + return self.type().sign_out(self, result); +} +static inline Tensor sign(const Tensor & self) { + return self.type().sign(self); +} +static inline Scalar trace(const Tensor & self) { + return self.type().trace(self); +} +static inline Tensor & add_out(const Tensor & self, Scalar value, const Tensor & other, Tensor & result) { + return self.type().add_out(self, value, other, result); +} +static inline Tensor add(const Tensor & self, Scalar value, const Tensor & other) { + return self.type().add(self, value, other); +} +static inline Tensor & add_out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().add_out(self, value, result); +} +static inline Tensor add(const Tensor & self, Scalar value) { + return self.type().add(self, value); +} +static inline Tensor & add_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().add_out(self, other, result); +} +static inline Tensor add(const Tensor & self, const Tensor & other) { + return self.type().add(self, other); +} +static inline Tensor & sub_out(const Tensor & self, Scalar value, const Tensor & other, Tensor & result) { + return self.type().sub_out(self, value, other, result); +} +static inline Tensor sub(const Tensor & self, Scalar value, const Tensor & other) { + return self.type().sub(self, value, other); +} +static inline Tensor & sub_out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().sub_out(self, value, result); +} +static inline Tensor sub(const Tensor & self, Scalar value) { + return self.type().sub(self, value); +} +static inline Tensor & sub_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().sub_out(self, other, result); +} +static inline Tensor sub(const Tensor & self, const Tensor & other) { + return self.type().sub(self, other); +} +static inline Tensor & mul_out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().mul_out(self, value, result); +} +static inline Tensor mul(const Tensor & self, Scalar value) { + return self.type().mul(self, value); +} +static inline Tensor & mul_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().mul_out(self, other, result); +} +static inline Tensor mul(const Tensor & self, const Tensor & other) { + return self.type().mul(self, other); +} +static inline Tensor & div_out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().div_out(self, value, result); +} +static inline Tensor div(const Tensor & self, Scalar value) { + return self.type().div(self, value); +} +static inline Tensor & div_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().div_out(self, other, result); +} +static inline Tensor div(const Tensor & self, const Tensor & other) { + return self.type().div(self, other); +} +static inline Tensor & fmod_out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().fmod_out(self, value, result); +} +static inline Tensor fmod(const Tensor & self, Scalar value) { + return self.type().fmod(self, value); +} +static inline Tensor & fmod_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().fmod_out(self, other, result); +} +static inline Tensor fmod(const Tensor & self, const Tensor & other) { + return self.type().fmod(self, other); +} +static inline Tensor & remainder_out(const Tensor & self, Scalar value, Tensor & result) { + return self.type().remainder_out(self, value, result); +} +static inline Tensor remainder(const Tensor & self, Scalar value) { + return self.type().remainder(self, value); +} +static inline Tensor & remainder_out(const Tensor & self, const Tensor & other, Tensor & result) { + return self.type().remainder_out(self, other, result); +} +static inline Tensor remainder(const Tensor & self, const Tensor & other) { + return self.type().remainder(self, other); +} +static inline Tensor & clamp_out(const Tensor & self, Scalar min, Scalar max, Tensor & destination) { + return self.type().clamp_out(self, min, max, destination); +} +static inline Tensor clamp(const Tensor & self, Scalar min, Scalar max) { + return self.type().clamp(self, min, max); +} +static inline Tensor & clamp_out(const Tensor & self, Scalar min, Tensor & result) { + return self.type().clamp_out(self, min, result); +} +static inline Tensor clamp(const Tensor & self, Scalar min) { + return self.type().clamp(self, min); +} +static inline Scalar dot(const Tensor & self, const Tensor & tensor) { + return self.type().dot(self, tensor); +} +static inline Tensor & tril_out(const Tensor & self, int64_t k, Tensor & destination) { + return self.type().tril_out(self, k, destination); +} +static inline Tensor tril(const Tensor & self, int64_t k) { + return self.type().tril(self, k); +} +static inline Tensor & tril_out(const Tensor & self, Tensor & destination) { + return self.type().tril_out(self, destination); +} +static inline Tensor tril(const Tensor & self) { + return self.type().tril(self); +} +static inline Tensor & triu_out(const Tensor & self, int64_t k, Tensor & destination) { + return self.type().triu_out(self, k, destination); +} +static inline Tensor triu(const Tensor & self, int64_t k) { + return self.type().triu(self, k); +} +static inline Tensor & triu_out(const Tensor & self, Tensor & destination) { + return self.type().triu_out(self, destination); +} +static inline Tensor triu(const Tensor & self) { + return self.type().triu(self); +} +static inline Tensor & cross_out(const Tensor & self, const Tensor & other, int64_t dim, Tensor & destination) { + return self.type().cross_out(self, other, dim, destination); +} +static inline Tensor cross(const Tensor & self, const Tensor & other, int64_t dim) { + return self.type().cross(self, other, dim); +} +static inline Tensor & cross_out(const Tensor & self, const Tensor & other, Tensor & destination) { + return self.type().cross_out(self, other, destination); +} +static inline Tensor cross(const Tensor & self, const Tensor & other) { + return self.type().cross(self, other); +} +static inline Tensor & eye_out(int64_t n, Tensor & result) { + return result.type().eye_out(n, result); +} +static inline Tensor & eye_out(int64_t n, int64_t m, Tensor & result) { + return result.type().eye_out(n, m, result); +} +static inline Tensor & diag_out(const Tensor & self, int64_t diagonal, Tensor & result) { + return self.type().diag_out(self, diagonal, result); +} +static inline Tensor diag(const Tensor & self, int64_t diagonal) { + return self.type().diag(self, diagonal); +} +static inline Tensor & diag_out(const Tensor & self, Tensor & result) { + return self.type().diag_out(self, result); +} +static inline Tensor diag(const Tensor & self) { + return self.type().diag(self); +} +static inline Tensor & addmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat1, const Tensor & mat2, Tensor & result) { + return self.type().addmm_out(beta, self, alpha, mat1, mat2, result); +} +static inline Tensor addmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat1, const Tensor & mat2) { + return self.type().addmm(beta, self, alpha, mat1, mat2); +} +static inline Tensor & addmm_out(Scalar beta, const Tensor & self, const Tensor & mat1, const Tensor & mat2, Tensor & result) { + return self.type().addmm_out(beta, self, mat1, mat2, result); +} +static inline Tensor addmm(Scalar beta, const Tensor & self, const Tensor & mat1, const Tensor & mat2) { + return self.type().addmm(beta, self, mat1, mat2); +} +static inline Tensor & addmm_out(const Tensor & self, const Tensor & mat1, const Tensor & mat2, Tensor & result) { + return self.type().addmm_out(self, mat1, mat2, result); +} +static inline Tensor addmm(const Tensor & self, const Tensor & mat1, const Tensor & mat2) { + return self.type().addmm(self, mat1, mat2); +} +static inline Tensor & addmv_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat, const Tensor & vec, Tensor & result) { + return self.type().addmv_out(beta, self, alpha, mat, vec, result); +} +static inline Tensor addmv(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat, const Tensor & vec) { + return self.type().addmv(beta, self, alpha, mat, vec); +} +static inline Tensor & addmv_out(Scalar beta, const Tensor & self, const Tensor & mat, const Tensor & vec, Tensor & result) { + return self.type().addmv_out(beta, self, mat, vec, result); +} +static inline Tensor addmv(Scalar beta, const Tensor & self, const Tensor & mat, const Tensor & vec) { + return self.type().addmv(beta, self, mat, vec); +} +static inline Tensor & addmv_out(const Tensor & self, const Tensor & mat, const Tensor & vec, Tensor & result) { + return self.type().addmv_out(self, mat, vec, result); +} +static inline Tensor addmv(const Tensor & self, const Tensor & mat, const Tensor & vec) { + return self.type().addmv(self, mat, vec); +} +static inline Tensor & addr_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & vec1, const Tensor & vec2, Tensor & result) { + return self.type().addr_out(beta, self, alpha, vec1, vec2, result); +} +static inline Tensor addr(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & vec1, const Tensor & vec2) { + return self.type().addr(beta, self, alpha, vec1, vec2); +} +static inline Tensor & addr_out(Scalar beta, const Tensor & self, const Tensor & vec1, const Tensor & vec2, Tensor & result) { + return self.type().addr_out(beta, self, vec1, vec2, result); +} +static inline Tensor addr(Scalar beta, const Tensor & self, const Tensor & vec1, const Tensor & vec2) { + return self.type().addr(beta, self, vec1, vec2); +} +static inline Tensor & addr_out(const Tensor & self, const Tensor & vec1, const Tensor & vec2, Tensor & result) { + return self.type().addr_out(self, vec1, vec2, result); +} +static inline Tensor addr(const Tensor & self, const Tensor & vec1, const Tensor & vec2) { + return self.type().addr(self, vec1, vec2); +} +static inline Tensor & ger_out(const Tensor & self, const Tensor & vec2, Tensor & result) { + return self.type().ger_out(self, vec2, result); +} +static inline Tensor ger(const Tensor & self, const Tensor & vec2) { + return self.type().ger(self, vec2); +} +static inline Tensor & mv_out(const Tensor & self, const Tensor & vec, Tensor & result) { + return self.type().mv_out(self, vec, result); +} +static inline Tensor mv(const Tensor & self, const Tensor & vec) { + return self.type().mv(self, vec); +} +static inline Tensor & mm_out(const Tensor & self, const Tensor & mat2, Tensor & result) { + return self.type().mm_out(self, mat2, result); +} +static inline Tensor mm(const Tensor & self, const Tensor & mat2) { + return self.type().mm(self, mat2); +} +static inline Tensor & bmm_out(const Tensor & self, const Tensor & mat2, Tensor & result) { + return self.type().bmm_out(self, mat2, result); +} +static inline Tensor bmm(const Tensor & self, const Tensor & mat2) { + return self.type().bmm(self, mat2); +} +static inline Tensor & addbmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2, Tensor & result) { + return self.type().addbmm_out(beta, self, alpha, batch1, batch2, result); +} +static inline Tensor addbmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2) { + return self.type().addbmm(beta, self, alpha, batch1, batch2); +} +static inline Tensor & addbmm_out(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) { + return self.type().addbmm_out(beta, self, batch1, batch2, result); +} +static inline Tensor addbmm(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2) { + return self.type().addbmm(beta, self, batch1, batch2); +} +static inline Tensor & addbmm_out(const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) { + return self.type().addbmm_out(self, batch1, batch2, result); +} +static inline Tensor addbmm(const Tensor & self, const Tensor & batch1, const Tensor & batch2) { + return self.type().addbmm(self, batch1, batch2); +} +static inline Tensor & baddbmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2, Tensor & result) { + return self.type().baddbmm_out(beta, self, alpha, batch1, batch2, result); +} +static inline Tensor baddbmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2) { + return self.type().baddbmm(beta, self, alpha, batch1, batch2); +} +static inline Tensor & baddbmm_out(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) { + return self.type().baddbmm_out(beta, self, batch1, batch2, result); +} +static inline Tensor baddbmm(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2) { + return self.type().baddbmm(beta, self, batch1, batch2); +} +static inline Tensor & baddbmm_out(const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) { + return self.type().baddbmm_out(self, batch1, batch2, result); +} +static inline Tensor baddbmm(const Tensor & self, const Tensor & batch1, const Tensor & batch2) { + return self.type().baddbmm(self, batch1, batch2); +} +static inline Tensor & addcmul_out(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) { + return self.type().addcmul_out(self, value, tensor1, tensor2, result); +} +static inline Tensor addcmul(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2) { + return self.type().addcmul(self, value, tensor1, tensor2); +} +static inline Tensor & addcmul_out(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) { + return self.type().addcmul_out(self, tensor1, tensor2, result); +} +static inline Tensor addcmul(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2) { + return self.type().addcmul(self, tensor1, tensor2); +} +static inline Tensor & addcdiv_out(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) { + return self.type().addcdiv_out(self, value, tensor1, tensor2, result); +} +static inline Tensor addcdiv(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2) { + return self.type().addcdiv(self, value, tensor1, tensor2); +} +static inline Tensor & addcdiv_out(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) { + return self.type().addcdiv_out(self, tensor1, tensor2, result); +} +static inline Tensor addcdiv(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2) { + return self.type().addcdiv(self, tensor1, tensor2); +} +static inline std::tuple<Tensor &,Tensor &> gesv_out(const Tensor & self, const Tensor & A, Tensor & solution, Tensor & lu) { + return self.type().gesv_out(self, A, solution, lu); +} +static inline std::tuple<Tensor,Tensor> gesv(const Tensor & self, const Tensor & A) { + return self.type().gesv(self, A); +} +static inline std::tuple<Tensor &,Tensor &> gels_out(const Tensor & self, const Tensor & A, Tensor & res1, Tensor & res2) { + return self.type().gels_out(self, A, res1, res2); +} +static inline std::tuple<Tensor,Tensor> gels(const Tensor & self, const Tensor & A) { + return self.type().gels(self, A); +} +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, bool transpose, bool unitriangular, Tensor & res1, Tensor & res2) { + return self.type().trtrs_out(self, A, upper, transpose, unitriangular, res1, res2); +} +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper, bool transpose, bool unitriangular) { + return self.type().trtrs(self, A, upper, transpose, unitriangular); +} +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, bool transpose, Tensor & res1, Tensor & res2) { + return self.type().trtrs_out(self, A, upper, transpose, res1, res2); +} +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper, bool transpose) { + return self.type().trtrs(self, A, upper, transpose); +} +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, Tensor & res1, Tensor & res2) { + return self.type().trtrs_out(self, A, upper, res1, res2); +} +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper) { + return self.type().trtrs(self, A, upper); +} +static inline std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, Tensor & res1, Tensor & res2) { + return self.type().trtrs_out(self, A, res1, res2); +} +static inline std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A) { + return self.type().trtrs(self, A); +} +static inline std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, bool eigenvectors, bool upper, Tensor & res1, Tensor & res2) { + return self.type().symeig_out(self, eigenvectors, upper, res1, res2); +} +static inline std::tuple<Tensor,Tensor> symeig(const Tensor & self, bool eigenvectors, bool upper) { + return self.type().symeig(self, eigenvectors, upper); +} +static inline std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, bool eigenvectors, Tensor & res1, Tensor & res2) { + return self.type().symeig_out(self, eigenvectors, res1, res2); +} +static inline std::tuple<Tensor,Tensor> symeig(const Tensor & self, bool eigenvectors) { + return self.type().symeig(self, eigenvectors); +} +static inline std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, Tensor & res1, Tensor & res2) { + return self.type().symeig_out(self, res1, res2); +} +static inline std::tuple<Tensor,Tensor> symeig(const Tensor & self) { + return self.type().symeig(self); +} +static inline std::tuple<Tensor &,Tensor &> eig_out(const Tensor & self, bool eigenvectors, Tensor & res1, Tensor & res2) { + return self.type().eig_out(self, eigenvectors, res1, res2); +} +static inline std::tuple<Tensor,Tensor> eig(const Tensor & self, bool eigenvectors) { + return self.type().eig(self, eigenvectors); +} +static inline std::tuple<Tensor &,Tensor &> eig_out(const Tensor & self, Tensor & res1, Tensor & res2) { + return self.type().eig_out(self, res1, res2); +} +static inline std::tuple<Tensor,Tensor> eig(const Tensor & self) { + return self.type().eig(self); +} +static inline std::tuple<Tensor &,Tensor &,Tensor &> svd_out(const Tensor & self, bool some, Tensor & res1, Tensor & res2, Tensor & res3) { + return self.type().svd_out(self, some, res1, res2, res3); +} +static inline std::tuple<Tensor,Tensor,Tensor> svd(const Tensor & self, bool some) { + return self.type().svd(self, some); +} +static inline std::tuple<Tensor &,Tensor &,Tensor &> svd_out(const Tensor & self, Tensor & res1, Tensor & res2, Tensor & res3) { + return self.type().svd_out(self, res1, res2, res3); +} +static inline std::tuple<Tensor,Tensor,Tensor> svd(const Tensor & self) { + return self.type().svd(self); +} +static inline Tensor & inverse_out(const Tensor & self, Tensor & output) { + return self.type().inverse_out(self, output); +} +static inline Tensor inverse(const Tensor & self) { + return self.type().inverse(self); +} +static inline Tensor & potrf_out(const Tensor & self, bool upper, Tensor & output) { + return self.type().potrf_out(self, upper, output); +} +static inline Tensor potrf(const Tensor & self, bool upper) { + return self.type().potrf(self, upper); +} +static inline Tensor & potrf_out(const Tensor & self, Tensor & output) { + return self.type().potrf_out(self, output); +} +static inline Tensor potrf(const Tensor & self) { + return self.type().potrf(self); +} +static inline Tensor & potrs_out(const Tensor & self, const Tensor & input2, bool upper, Tensor & result) { + return self.type().potrs_out(self, input2, upper, result); +} +static inline Tensor potrs(const Tensor & self, const Tensor & input2, bool upper) { + return self.type().potrs(self, input2, upper); +} +static inline Tensor & potrs_out(const Tensor & self, const Tensor & input2, Tensor & result) { + return self.type().potrs_out(self, input2, result); +} +static inline Tensor potrs(const Tensor & self, const Tensor & input2) { + return self.type().potrs(self, input2); +} +static inline Tensor & potri_out(const Tensor & self, bool upper, Tensor & output) { + return self.type().potri_out(self, upper, output); +} +static inline Tensor potri(const Tensor & self, bool upper) { + return self.type().potri(self, upper); +} +static inline Tensor & potri_out(const Tensor & self, Tensor & output) { + return self.type().potri_out(self, output); +} +static inline Tensor potri(const Tensor & self) { + return self.type().potri(self); +} +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, bool upper, Scalar tol, Tensor & res1, Tensor & res2) { + return self.type().pstrf_out(self, upper, tol, res1, res2); +} +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self, bool upper, Scalar tol) { + return self.type().pstrf(self, upper, tol); +} +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, bool upper, Tensor & res1, Tensor & res2) { + return self.type().pstrf_out(self, upper, res1, res2); +} +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self, bool upper) { + return self.type().pstrf(self, upper); +} +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, Scalar tol, Tensor & res1, Tensor & res2) { + return self.type().pstrf_out(self, tol, res1, res2); +} +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self, Scalar tol) { + return self.type().pstrf(self, tol); +} +static inline std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, Tensor & res1, Tensor & res2) { + return self.type().pstrf_out(self, res1, res2); +} +static inline std::tuple<Tensor,Tensor> pstrf(const Tensor & self) { + return self.type().pstrf(self); +} +static inline std::tuple<Tensor &,Tensor &> qr_out(const Tensor & self, Tensor & res1, Tensor & res2) { + return self.type().qr_out(self, res1, res2); +} +static inline std::tuple<Tensor,Tensor> qr(const Tensor & self) { + return self.type().qr(self); +} +static inline std::tuple<Tensor &,Tensor &> geqrf_out(const Tensor & self, Tensor & res1, Tensor & res2) { + return self.type().geqrf_out(self, res1, res2); +} +static inline std::tuple<Tensor,Tensor> geqrf(const Tensor & self) { + return self.type().geqrf(self); +} +static inline std::tuple<Tensor &,const Tensor &> orgqr_out(const Tensor & self, const Tensor & input2, Tensor & result) { + return self.type().orgqr_out(self, input2, result); +} +static inline std::tuple<Tensor,const Tensor &> orgqr(const Tensor & self, const Tensor & input2) { + return self.type().orgqr(self, input2); +} +static inline std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, bool transpose, Tensor & result) { + return self.type().ormqr_out(self, input2, input3, left, transpose, result); +} +static inline std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, bool transpose) { + return self.type().ormqr(self, input2, input3, left, transpose); +} +static inline std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, Tensor & result) { + return self.type().ormqr_out(self, input2, input3, left, result); +} +static inline std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left) { + return self.type().ormqr(self, input2, input3, left); +} +static inline std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, Tensor & result) { + return self.type().ormqr_out(self, input2, input3, result); +} +static inline std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3) { + return self.type().ormqr(self, input2, input3); +} +static inline std::tuple<Tensor &,Tensor &> btrifact_out(const Tensor & info, const Tensor & self, Tensor & result, Tensor & pivots) { + return self.type().btrifact_out(info, self, result, pivots); +} +static inline std::tuple<Tensor,Tensor> btrifact(const Tensor & info, const Tensor & self) { + return self.type().btrifact(info, self); +} +static inline std::tuple<Tensor &,Tensor &> btrifact_out(const Tensor & self, Tensor & result, Tensor & pivots) { + return self.type().btrifact_out(self, result, pivots); +} +static inline std::tuple<Tensor,Tensor> btrifact(const Tensor & self) { + return self.type().btrifact(self); +} +static inline Tensor & btrisolve_out(const Tensor & self, const Tensor & LU_data, const Tensor & LU_pivots, Tensor & result) { + return self.type().btrisolve_out(self, LU_data, LU_pivots, result); +} +static inline Tensor btrisolve(const Tensor & self, const Tensor & LU_data, const Tensor & LU_pivots) { + return self.type().btrisolve(self, LU_data, LU_pivots); +} +static inline Tensor & randperm_out(Generator & generator, int64_t n, Tensor & result) { + return result.type().randperm_out(generator, n, result); +} +static inline Tensor & randperm_out(int64_t n, Tensor & result) { + return result.type().randperm_out(n, result); +} +static inline Tensor & multinomial_out(Generator & generator, const Tensor & self, int64_t num_samples, bool replacement, Tensor & result) { + return self.type().multinomial_out(generator, self, num_samples, replacement, result); +} +static inline Tensor multinomial(Generator & generator, const Tensor & self, int64_t num_samples, bool replacement) { + return self.type().multinomial(generator, self, num_samples, replacement); +} +static inline Tensor & multinomial_out(Generator & generator, const Tensor & self, int64_t num_samples, Tensor & result) { + return self.type().multinomial_out(generator, self, num_samples, result); +} +static inline Tensor multinomial(Generator & generator, const Tensor & self, int64_t num_samples) { + return self.type().multinomial(generator, self, num_samples); +} +static inline Tensor & multinomial_out(const Tensor & self, int64_t num_samples, bool replacement, Tensor & result) { + return self.type().multinomial_out(self, num_samples, replacement, result); +} +static inline Tensor multinomial(const Tensor & self, int64_t num_samples, bool replacement) { + return self.type().multinomial(self, num_samples, replacement); +} +static inline Tensor & multinomial_out(const Tensor & self, int64_t num_samples, Tensor & result) { + return self.type().multinomial_out(self, num_samples, result); +} +static inline Tensor multinomial(const Tensor & self, int64_t num_samples) { + return self.type().multinomial(self, num_samples); +} +static inline Tensor & rand_out(Generator & generator, IntList size, Tensor & result) { + return result.type().rand_out(generator, size, result); +} +static inline Tensor & rand_out(IntList size, Tensor & result) { + return result.type().rand_out(size, result); +} +static inline Tensor & randn_out(Generator & generator, IntList size, Tensor & result) { + return result.type().randn_out(generator, size, result); +} +static inline Tensor & randn_out(IntList size, Tensor & result) { + return result.type().randn_out(size, result); +} +static inline Tensor & select_out(const Tensor & self, int dim, int64_t sliceIndex, Tensor & result) { + return self.type().select_out(self, dim, sliceIndex, result); +} +static inline Tensor select(const Tensor & self, int dim, int64_t sliceIndex) { + return self.type().select(self, dim, sliceIndex); +} +static inline void Abs_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().Abs_updateOutput(input, output); +} +static inline void Abs_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) { + return input.type().Abs_updateGradInput(input, gradOutput, gradInput); +} +static inline void AbsCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) { + return input.type().AbsCriterion_updateOutput(input, target, output, sizeAverage); +} +static inline void AbsCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) { + return input.type().AbsCriterion_updateGradInput(input, target, gradInput, sizeAverage); +} +static inline void BCECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights) { + return input.type().BCECriterion_updateOutput(input, target, output, sizeAverage, weights); +} +static inline void BCECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) { + return input.type().BCECriterion_updateOutput(input, target, output, sizeAverage); +} +static inline void BCECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights) { + return input.type().BCECriterion_updateGradInput(input, target, gradInput, sizeAverage, weights); +} +static inline void BCECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) { + return input.type().BCECriterion_updateGradInput(input, target, gradInput, sizeAverage); +} +static inline void ClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights, const Tensor & total_weight, int64_t ignore_index) { + return input.type().ClassNLLCriterion_updateOutput(input, target, output, sizeAverage, weights, total_weight, ignore_index); +} +static inline void ClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & total_weight, int64_t ignore_index) { + return input.type().ClassNLLCriterion_updateOutput(input, target, output, sizeAverage, total_weight, ignore_index); +} +static inline void ClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights, const Tensor & total_weight, int64_t ignore_index) { + return input.type().ClassNLLCriterion_updateGradInput(input, target, gradInput, sizeAverage, weights, total_weight, ignore_index); +} +static inline void ClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & total_weight, int64_t ignore_index) { + return input.type().ClassNLLCriterion_updateGradInput(input, target, gradInput, sizeAverage, total_weight, ignore_index); +} +static inline void SpatialClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights, const Tensor & total_weight) { + return input.type().SpatialClassNLLCriterion_updateOutput(input, target, output, sizeAverage, weights, total_weight); +} +static inline void SpatialClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & total_weight) { + return input.type().SpatialClassNLLCriterion_updateOutput(input, target, output, sizeAverage, total_weight); +} +static inline void SpatialClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights, const Tensor & total_weight) { + return input.type().SpatialClassNLLCriterion_updateGradInput(input, target, gradInput, sizeAverage, weights, total_weight); +} +static inline void SpatialClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & total_weight) { + return input.type().SpatialClassNLLCriterion_updateGradInput(input, target, gradInput, sizeAverage, total_weight); +} +static inline void ELU_updateOutput(const Tensor & input, const Tensor & output, Scalar alpha, bool inplace) { + return input.type().ELU_updateOutput(input, output, alpha, inplace); +} +static inline void ELU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output, Scalar alpha, bool inplace) { + return input.type().ELU_updateGradInput(input, gradOutput, gradInput, output, alpha, inplace); +} +static inline void DistKLDivCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) { + return input.type().DistKLDivCriterion_updateOutput(input, target, output, sizeAverage); +} +static inline void DistKLDivCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) { + return input.type().DistKLDivCriterion_updateGradInput(input, target, gradInput, sizeAverage); +} +static inline void GatedLinear_updateOutput(const Tensor & input, const Tensor & output, int dim) { + return input.type().GatedLinear_updateOutput(input, output, dim); +} +static inline void GatedLinear_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int dim) { + return input.type().GatedLinear_updateGradInput(input, gradOutput, gradInput, dim); +} +static inline void HardShrink_updateOutput(const Tensor & input, const Tensor & output, Scalar lambda) { + return input.type().HardShrink_updateOutput(input, output, lambda); +} +static inline void HardShrink_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar lambda) { + return input.type().HardShrink_updateGradInput(input, gradOutput, gradInput, lambda); +} +static inline void HardTanh_updateOutput(const Tensor & input, const Tensor & output, Scalar min_val, Scalar max_val, bool inplace) { + return input.type().HardTanh_updateOutput(input, output, min_val, max_val, inplace); +} +static inline void HardTanh_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar min_val, Scalar max_val, bool inplace) { + return input.type().HardTanh_updateGradInput(input, gradOutput, gradInput, min_val, max_val, inplace); +} +static inline void L1Cost_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().L1Cost_updateOutput(input, output); +} +static inline void L1Cost_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) { + return input.type().L1Cost_updateGradInput(input, gradOutput, gradInput); +} +static inline void L1Cost_updateGradInput(const Tensor & input, const Tensor & gradInput) { + return input.type().L1Cost_updateGradInput(input, gradInput); +} +static inline void LeakyReLU_updateOutput(const Tensor & input, const Tensor & output, Scalar negval, bool inplace) { + return input.type().LeakyReLU_updateOutput(input, output, negval, inplace); +} +static inline void LeakyReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar negval, bool inplace) { + return input.type().LeakyReLU_updateGradInput(input, gradOutput, gradInput, negval, inplace); +} +static inline void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & bias2, const Tensor & hx, const Tensor & output, const Tensor & storage) { + return input.type().GRUFused_updateOutput(input, hidden, bias1, bias2, hx, output, storage); +} +static inline void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & hx, const Tensor & output, const Tensor & storage) { + return input.type().GRUFused_updateOutput(input, hidden, bias1, hx, output, storage); +} +static inline void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & hx, const Tensor & output, const Tensor & storage) { + return input.type().GRUFused_updateOutput(input, hidden, hx, output, storage); +} +static inline void GRUFused_updateGradInput(const Tensor & gradInInput, const Tensor & gradInHidden, const Tensor & gradOutput, const Tensor & gradInputHx, const Tensor & storage) { + return gradInInput.type().GRUFused_updateGradInput(gradInInput, gradInHidden, gradOutput, gradInputHx, storage); +} +static inline void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & bias2, const Tensor & cell, const Tensor & output, const Tensor & outputCell) { + return input.type().LSTMFused_updateOutput(input, hidden, bias1, bias2, cell, output, outputCell); +} +static inline void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & cell, const Tensor & output, const Tensor & outputCell) { + return input.type().LSTMFused_updateOutput(input, hidden, bias1, cell, output, outputCell); +} +static inline void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & cell, const Tensor & output, const Tensor & outputCell) { + return input.type().LSTMFused_updateOutput(input, hidden, cell, output, outputCell); +} +static inline void LSTMFused_updateGradInput(const Tensor & storage, const Tensor & gradInGates, const Tensor & cx, const Tensor & cy, const Tensor & gradOutput, const Tensor & gradOutputCell, const Tensor & gradInputCx) { + return storage.type().LSTMFused_updateGradInput(storage, gradInGates, cx, cy, gradOutput, gradOutputCell, gradInputCx); +} +static inline void LogSigmoid_updateOutput(const Tensor & input, const Tensor & output, const Tensor & buffer) { + return input.type().LogSigmoid_updateOutput(input, output, buffer); +} +static inline void LogSigmoid_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & buffer) { + return input.type().LogSigmoid_updateGradInput(input, gradOutput, gradInput, buffer); +} +static inline void LogSoftMax_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().LogSoftMax_updateOutput(input, output); +} +static inline void LogSoftMax_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return input.type().LogSoftMax_updateGradInput(input, gradOutput, gradInput, output); +} +static inline void MarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, Scalar margin) { + return input.type().MarginCriterion_updateOutput(input, target, output, sizeAverage, margin); +} +static inline void MarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, Scalar margin) { + return input.type().MarginCriterion_updateGradInput(input, target, gradInput, sizeAverage, margin); +} +static inline void SoftMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) { + return input.type().SoftMarginCriterion_updateOutput(input, target, output, sizeAverage); +} +static inline void SoftMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) { + return input.type().SoftMarginCriterion_updateGradInput(input, target, gradInput, sizeAverage); +} +static inline void MSECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) { + return input.type().MSECriterion_updateOutput(input, target, output, sizeAverage); +} +static inline void MSECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) { + return input.type().MSECriterion_updateGradInput(input, target, gradInput, sizeAverage); +} +static inline void MultiLabelMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, const Tensor & isTarget, bool sizeAverage) { + return input.type().MultiLabelMarginCriterion_updateOutput(input, target, output, isTarget, sizeAverage); +} +static inline void MultiLabelMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, const Tensor & isTarget, bool sizeAverage) { + return input.type().MultiLabelMarginCriterion_updateGradInput(input, target, gradInput, isTarget, sizeAverage); +} +static inline void MultiMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, int p, const Tensor & weights, Scalar margin) { + return input.type().MultiMarginCriterion_updateOutput(input, target, output, sizeAverage, p, weights, margin); +} +static inline void MultiMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, int p, Scalar margin) { + return input.type().MultiMarginCriterion_updateOutput(input, target, output, sizeAverage, p, margin); +} +static inline void MultiMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, int p, const Tensor & weights, Scalar margin) { + return input.type().MultiMarginCriterion_updateGradInput(input, target, gradInput, sizeAverage, p, weights, margin); +} +static inline void MultiMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, int p, Scalar margin) { + return input.type().MultiMarginCriterion_updateGradInput(input, target, gradInput, sizeAverage, p, margin); +} +static inline void PReLU_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, int64_t nOutputPlane) { + return input.type().PReLU_updateOutput(input, output, weight, nOutputPlane); +} +static inline void PReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int64_t nOutputPlane) { + return input.type().PReLU_updateGradInput(input, gradOutput, gradInput, weight, nOutputPlane); +} +static inline void PReLU_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradWeight, const Tensor & gradWeightBuf, const Tensor & gradWeightBuf2, int64_t nOutputPlane, Scalar scale) { + return input.type().PReLU_accGradParameters(input, gradOutput, gradInput, weight, gradWeight, gradWeightBuf, gradWeightBuf2, nOutputPlane, scale); +} +static inline void Linear_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & addBuffer) { + return input.type().Linear_updateOutput(input, output, weight, bias, addBuffer); +} +static inline void Linear_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight) { + return input.type().Linear_updateGradInput(input, gradOutput, gradInput, weight); +} +static inline void Linear_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & addBuffer, Scalar scale) { + return input.type().Linear_accGradParameters(input, gradOutput, gradInput, weight, bias, gradWeight, gradBias, addBuffer, scale); +} +static inline void RReLU_updateOutput(const Tensor & input, const Tensor & output, const Tensor & noise, Scalar lower, Scalar upper, bool train, bool inplace, Generator & generator) { + return input.type().RReLU_updateOutput(input, output, noise, lower, upper, train, inplace, generator); +} +static inline void RReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & noise, Scalar lower, Scalar upper, bool train, bool inplace) { + return input.type().RReLU_updateGradInput(input, gradOutput, gradInput, noise, lower, upper, train, inplace); +} +static inline void Sigmoid_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().Sigmoid_updateOutput(input, output); +} +static inline void Sigmoid_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return input.type().Sigmoid_updateGradInput(input, gradOutput, gradInput, output); +} +static inline void Sigmoid_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return gradOutput.type().Sigmoid_updateGradInput(gradOutput, gradInput, output); +} +static inline void SmoothL1Criterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) { + return input.type().SmoothL1Criterion_updateOutput(input, target, output, sizeAverage); +} +static inline void SmoothL1Criterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) { + return input.type().SmoothL1Criterion_updateGradInput(input, target, gradInput, sizeAverage); +} +static inline void SoftMax_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().SoftMax_updateOutput(input, output); +} +static inline void SoftMax_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return input.type().SoftMax_updateGradInput(input, gradOutput, gradInput, output); +} +static inline void SoftPlus_updateOutput(const Tensor & input, const Tensor & output, Scalar beta, Scalar threshold) { + return input.type().SoftPlus_updateOutput(input, output, beta, threshold); +} +static inline void SoftPlus_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output, Scalar beta, Scalar threshold) { + return input.type().SoftPlus_updateGradInput(input, gradOutput, gradInput, output, beta, threshold); +} +static inline void SoftShrink_updateOutput(const Tensor & input, const Tensor & output, Scalar lambda) { + return input.type().SoftShrink_updateOutput(input, output, lambda); +} +static inline void SoftShrink_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar lambda) { + return input.type().SoftShrink_updateGradInput(input, gradOutput, gradInput, lambda); +} +static inline void IndexLinear_updateOutput(const Tensor & keys, int64_t keysOffset, const Tensor & values, const Tensor & sizes, const Tensor & cumSumSizes, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & normalizedValues, int train) { + return values.type().IndexLinear_updateOutput(keys, keysOffset, values, sizes, cumSumSizes, output, weight, bias, normalizedValues, train); +} +static inline void IndexLinear_accGradParameters(const Tensor & keys, int64_t keysOffset, const Tensor & values, const Tensor & sizes, const Tensor & cumSumSizes, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & bias, const Tensor & valuesBuffer, Scalar weightDecay, Scalar scale) { + return values.type().IndexLinear_accGradParameters(keys, keysOffset, values, sizes, cumSumSizes, gradOutput, gradWeight, gradBias, weight, bias, valuesBuffer, weightDecay, scale); +} +static inline void SparseLinear_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias) { + return input.type().SparseLinear_updateOutput(input, output, weight, bias); +} +static inline void SparseLinear_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & bias, Scalar weightDecay, Scalar scale) { + return input.type().SparseLinear_accGradParameters(input, gradOutput, gradWeight, gradBias, weight, bias, weightDecay, scale); +} +static inline void Sqrt_updateOutput(const Tensor & input, const Tensor & output, Scalar eps) { + return input.type().Sqrt_updateOutput(input, output, eps); +} +static inline void Sqrt_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return input.type().Sqrt_updateGradInput(input, gradOutput, gradInput, output); +} +static inline void Square_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().Square_updateOutput(input, output); +} +static inline void Square_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) { + return input.type().Square_updateGradInput(input, gradOutput, gradInput); +} +static inline void Tanh_updateOutput(const Tensor & input, const Tensor & output) { + return input.type().Tanh_updateOutput(input, output); +} +static inline void Tanh_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return input.type().Tanh_updateGradInput(input, gradOutput, gradInput, output); +} +static inline void Tanh_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) { + return gradOutput.type().Tanh_updateGradInput(gradOutput, gradInput, output); +} +static inline void Threshold_updateOutput(const Tensor & input, const Tensor & output, Scalar threshold, Scalar val, bool inplace) { + return input.type().Threshold_updateOutput(input, output, threshold, val, inplace); +} +static inline void Threshold_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar threshold, Scalar val, bool inplace) { + return input.type().Threshold_updateGradInput(input, gradOutput, gradInput, threshold, val, inplace); +} +static inline void TemporalConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int dW, int inputFrameSize, int outputFrameSize) { + return input.type().TemporalConvolution_updateOutput(input, output, weight, bias, kW, dW, inputFrameSize, outputFrameSize); +} +static inline void TemporalConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int dW) { + return input.type().TemporalConvolution_updateGradInput(input, gradOutput, gradInput, weight, kW, dW); +} +static inline void TemporalConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int dW, Scalar scale) { + return input.type().TemporalConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, kW, dW, scale); +} +static inline void TemporalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int dW) { + return input.type().TemporalMaxPooling_updateOutput(input, output, indices, kW, dW); +} +static inline void TemporalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int dW) { + return input.type().TemporalMaxPooling_updateGradInput(input, gradOutput, gradInput, indices, kW, dW); +} +static inline void TemporalSubSampling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int dW, int inputFrameSize) { + return input.type().TemporalSubSampling_updateOutput(input, output, weight, bias, kW, dW, inputFrameSize); +} +static inline void TemporalSubSampling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int dW) { + return input.type().TemporalSubSampling_updateGradInput(input, gradOutput, gradInput, weight, kW, dW); +} +static inline void TemporalSubSampling_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int dW, Scalar scale) { + return input.type().TemporalSubSampling_accGradParameters(input, gradOutput, gradWeight, gradBias, kW, dW, scale); +} +static inline void TemporalRowConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst) { + return input.type().TemporalRowConvolution_updateOutput(input, output, weight, bias, finput, fgradInput, kW, dW, padW, featFirst); +} +static inline void TemporalRowConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst) { + return input.type().TemporalRowConvolution_updateGradInput(input, gradOutput, gradInput, weight, finput, fgradInput, kW, dW, padW, featFirst); +} +static inline void TemporalRowConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst, Scalar scale) { + return input.type().TemporalRowConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, fgradInput, kW, dW, padW, featFirst, scale); +} +static inline void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps) { + return input.type().BatchNormalization_updateOutput(input, output, weight, bias, running_mean, running_var, save_mean, save_std, train, momentum, eps); +} +static inline void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps) { + return input.type().BatchNormalization_updateOutput(input, output, weight, running_mean, running_var, save_mean, save_std, train, momentum, eps); +} +static inline void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps) { + return input.type().BatchNormalization_updateOutput(input, output, running_mean, running_var, save_mean, save_std, train, momentum, eps); +} +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) { + return input.type().BatchNormalization_backward(input, gradOutput, gradInput, gradWeight, gradBias, weight, running_mean, running_var, save_mean, save_std, train, scale, eps); +} +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) { + return input.type().BatchNormalization_backward(input, gradOutput, gradInput, gradWeight, gradBias, running_mean, running_var, save_mean, save_std, train, scale, eps); +} +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) { + return input.type().BatchNormalization_backward(input, gradOutput, gradInput, gradWeight, running_mean, running_var, save_mean, save_std, train, scale, eps); +} +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) { + return input.type().BatchNormalization_backward(input, gradOutput, gradInput, running_mean, running_var, save_mean, save_std, train, scale, eps); +} +static inline void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) { + return input.type().BatchNormalization_backward(input, gradOutput, running_mean, running_var, save_mean, save_std, train, scale, eps); +} +static inline void SpatialConvolutionMap_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) { + return input.type().SpatialConvolutionMap_updateOutput(input, output, weight, bias, connTable, nInputPlane, nOutputPlane, dW, dH); +} +static inline void SpatialConvolutionMap_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) { + return input.type().SpatialConvolutionMap_updateGradInput(input, gradOutput, gradInput, weight, bias, connTable, nInputPlane, nOutputPlane, dW, dH); +} +static inline void SpatialConvolutionMap_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH, Scalar scale) { + return input.type().SpatialConvolutionMap_accGradParameters(input, gradOutput, gradWeight, gradBias, connTable, nInputPlane, nOutputPlane, dW, dH, scale); +} +static inline void SpatialConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) { + return input.type().SpatialConvolutionMM_updateOutput(input, output, weight, bias, finput, fgradInput, kW, kH, dW, dH, padW, padH); +} +static inline void SpatialConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) { + return input.type().SpatialConvolutionMM_updateOutput(input, output, weight, finput, fgradInput, kW, kH, dW, dH, padW, padH); +} +static inline void SpatialConvolutionMM_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) { + return input.type().SpatialConvolutionMM_updateGradInput(input, gradOutput, gradInput, weight, finput, fgradInput, kW, kH, dW, dH, padW, padH); +} +static inline void SpatialConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) { + return input.type().SpatialConvolutionMM_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, fgradInput, kW, kH, dW, dH, padW, padH, scale); +} +static inline void SpatialConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) { + return input.type().SpatialConvolutionMM_accGradParameters(input, gradOutput, gradWeight, finput, fgradInput, kW, kH, dW, dH, padW, padH, scale); +} +static inline void SpatialDepthWiseConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) { + return input.type().SpatialDepthWiseConvolution_updateOutput(input, output, weight, bias, finput, fgradInput, kW, kH, dW, dH, padW, padH); +} +static inline void SpatialDepthWiseConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) { + return input.type().SpatialDepthWiseConvolution_updateOutput(input, output, weight, finput, fgradInput, kW, kH, dW, dH, padW, padH); +} +static inline void SpatialDepthWiseConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) { + return input.type().SpatialDepthWiseConvolution_updateGradInput(input, gradOutput, gradInput, weight, finput, fgradInput, kW, kH, dW, dH, padW, padH); +} +static inline void SpatialDepthWiseConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) { + return input.type().SpatialDepthWiseConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, fgradInput, kW, kH, dW, dH, padW, padH, scale); +} +static inline void SpatialDepthWiseConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) { + return input.type().SpatialDepthWiseConvolution_accGradParameters(input, gradOutput, gradWeight, finput, fgradInput, kW, kH, dW, dH, padW, padH, scale); +} +static inline void SpatialConvolutionLocal_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight) { + return input.type().SpatialConvolutionLocal_updateOutput(input, output, weight, bias, finput, fgradInput, kW, kH, dW, dH, padW, padH, inputWidth, inputHeight, outputWidth, outputHeight); +} +static inline void SpatialConvolutionLocal_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight) { + return input.type().SpatialConvolutionLocal_updateGradInput(input, gradOutput, gradInput, weight, finput, fgradInput, kW, kH, dW, dH, padW, padH, inputWidth, inputHeight, outputWidth, outputHeight); +} +static inline void SpatialConvolutionLocal_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight, Scalar scale) { + return input.type().SpatialConvolutionLocal_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, fgradInput, kW, kH, dW, dH, padW, padH, inputWidth, inputHeight, outputWidth, outputHeight, scale); +} +static inline void SpatialAdaptiveMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int owidth, int oheight) { + return input.type().SpatialAdaptiveMaxPooling_updateOutput(input, output, indices, owidth, oheight); +} +static inline void SpatialAdaptiveMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices) { + return input.type().SpatialAdaptiveMaxPooling_updateGradInput(input, gradOutput, gradInput, indices); +} +static inline void SpatialAdaptiveAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int owidth, int oheight) { + return input.type().SpatialAdaptiveAveragePooling_updateOutput(input, output, owidth, oheight); +} +static inline void SpatialAdaptiveAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) { + return input.type().SpatialAdaptiveAveragePooling_updateGradInput(input, gradOutput, gradInput); +} +static inline void SpatialAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode, bool count_include_pad) { + return input.type().SpatialAveragePooling_updateOutput(input, output, kW, kH, dW, dH, padW, padH, ceil_mode, count_include_pad); +} +static inline void SpatialAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode, bool count_include_pad) { + return input.type().SpatialAveragePooling_updateGradInput(input, gradOutput, gradInput, kW, kH, dW, dH, padW, padH, ceil_mode, count_include_pad); +} +static inline void SpatialFractionalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, int outputW, int outputH, int poolSizeW, int poolSizeH, const Tensor & indices, const Tensor & randomSamples) { + return input.type().SpatialFractionalMaxPooling_updateOutput(input, output, outputW, outputH, poolSizeW, poolSizeH, indices, randomSamples); +} +static inline void SpatialFractionalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int outputW, int outputH, int poolSizeW, int poolSizeH, const Tensor & indices) { + return input.type().SpatialFractionalMaxPooling_updateGradInput(input, gradOutput, gradInput, outputW, outputH, poolSizeW, poolSizeH, indices); +} +static inline void SpatialFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH) { + return input.type().SpatialFullConvolution_updateOutput(input, output, weight, bias, columns, ones, kW, kH, dW, dH, padW, padH, adjW, adjH); +} +static inline void SpatialFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH) { + return input.type().SpatialFullConvolution_updateOutput(input, output, weight, columns, ones, kW, kH, dW, dH, padW, padH, adjW, adjH); +} +static inline void SpatialFullConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH) { + return input.type().SpatialFullConvolution_updateGradInput(input, gradOutput, gradInput, weight, gradColumns, kW, kH, dW, dH, padW, padH, adjW, adjH); +} +static inline void SpatialFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH, Scalar scale) { + return input.type().SpatialFullConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, columns, ones, kW, kH, dW, dH, padW, padH, adjW, adjH, scale); +} +static inline void SpatialFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH, Scalar scale) { + return input.type().SpatialFullConvolution_accGradParameters(input, gradOutput, gradWeight, columns, ones, kW, kH, dW, dH, padW, padH, adjW, adjH, scale); +} +static inline void SpatialFullConvolutionMap_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) { + return input.type().SpatialFullConvolutionMap_updateOutput(input, output, weight, bias, connTable, nInputPlane, nOutputPlane, dW, dH); +} +static inline void SpatialFullConvolutionMap_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) { + return input.type().SpatialFullConvolutionMap_updateGradInput(input, gradOutput, gradInput, weight, bias, connTable, nInputPlane, nOutputPlane, dW, dH); +} +static inline void SpatialFullConvolutionMap_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH, Scalar scale) { + return input.type().SpatialFullConvolutionMap_accGradParameters(input, gradOutput, gradWeight, gradBias, connTable, nInputPlane, nOutputPlane, dW, dH, scale); +} +static inline void SpatialDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH) { + return input.type().SpatialDilatedConvolution_updateOutput(input, output, weight, bias, columns, ones, kW, kH, dW, dH, padW, padH, dilationW, dilationH); +} +static inline void SpatialDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH) { + return input.type().SpatialDilatedConvolution_updateOutput(input, output, weight, columns, ones, kW, kH, dW, dH, padW, padH, dilationW, dilationH); +} +static inline void SpatialDilatedConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH) { + return input.type().SpatialDilatedConvolution_updateGradInput(input, gradOutput, gradInput, weight, gradColumns, kW, kH, dW, dH, padW, padH, dilationW, dilationH); +} +static inline void SpatialDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, Scalar scale) { + return input.type().SpatialDilatedConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, columns, ones, kW, kH, dW, dH, padW, padH, dilationW, dilationH, scale); +} +static inline void SpatialDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, Scalar scale) { + return input.type().SpatialDilatedConvolution_accGradParameters(input, gradOutput, gradWeight, columns, ones, kW, kH, dW, dH, padW, padH, dilationW, dilationH, scale); +} +static inline void SpatialMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode) { + return input.type().SpatialMaxPooling_updateOutput(input, output, indices, kW, kH, dW, dH, padW, padH, ceil_mode); +} +static inline void SpatialMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode) { + return input.type().SpatialMaxPooling_updateGradInput(input, gradOutput, gradInput, indices, kW, kH, dW, dH, padW, padH, ceil_mode); +} +static inline void SpatialDilatedMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, bool ceil_mode) { + return input.type().SpatialDilatedMaxPooling_updateOutput(input, output, indices, kW, kH, dW, dH, padW, padH, dilationW, dilationH, ceil_mode); +} +static inline void SpatialDilatedMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, bool ceil_mode) { + return input.type().SpatialDilatedMaxPooling_updateGradInput(input, gradOutput, gradInput, indices, kW, kH, dW, dH, padW, padH, dilationW, dilationH, ceil_mode); +} +static inline void SpatialMaxUnpooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int owidth, int oheight) { + return input.type().SpatialMaxUnpooling_updateOutput(input, output, indices, owidth, oheight); +} +static inline void SpatialMaxUnpooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int owidth, int oheight) { + return input.type().SpatialMaxUnpooling_updateGradInput(input, gradOutput, gradInput, indices, owidth, oheight); +} +static inline void SpatialSubSampling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int kH, int dW, int dH) { + return input.type().SpatialSubSampling_updateOutput(input, output, weight, bias, kW, kH, dW, dH); +} +static inline void SpatialSubSampling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int kH, int dW, int dH) { + return input.type().SpatialSubSampling_updateGradInput(input, gradOutput, gradInput, weight, kW, kH, dW, dH); +} +static inline void SpatialSubSampling_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int kH, int dW, int dH, Scalar scale) { + return input.type().SpatialSubSampling_accGradParameters(input, gradOutput, gradWeight, gradBias, kW, kH, dW, dH, scale); +} +static inline void SpatialUpSamplingNearest_updateOutput(const Tensor & input, const Tensor & output, int scale_factor) { + return input.type().SpatialUpSamplingNearest_updateOutput(input, output, scale_factor); +} +static inline void SpatialUpSamplingNearest_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int scale_factor) { + return input.type().SpatialUpSamplingNearest_updateGradInput(input, gradOutput, gradInput, scale_factor); +} +static inline void SpatialUpSamplingBilinear_updateOutput(const Tensor & input, const Tensor & output, int outputHeight, int outputWidth) { + return input.type().SpatialUpSamplingBilinear_updateOutput(input, output, outputHeight, outputWidth); +} +static inline void SpatialUpSamplingBilinear_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, int nbatch, int nchannels, int inputHeight, int inputWidth, int outputHeight, int outputWidth) { + return gradOutput.type().SpatialUpSamplingBilinear_updateGradInput(gradOutput, gradInput, nbatch, nchannels, inputHeight, inputWidth, outputHeight, outputWidth); +} +static inline void VolumetricAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int kT, int kW, int kH, int dT, int dW, int dH) { + return input.type().VolumetricAveragePooling_updateOutput(input, output, kT, kW, kH, dT, dW, dH); +} +static inline void VolumetricAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int kT, int kW, int kH, int dT, int dW, int dH) { + return input.type().VolumetricAveragePooling_updateGradInput(input, gradOutput, gradInput, kT, kW, kH, dT, dW, dH); +} +static inline void VolumetricConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricConvolution_updateOutput(input, output, weight, bias, finput, fgradInput, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricConvolution_updateOutput(input, output, weight, finput, fgradInput, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricConvolution_updateGradInput(input, gradOutput, gradInput, weight, finput, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) { + return input.type().VolumetricConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, fgradInput, dT, dW, dH, pT, pW, pH, scale); +} +static inline void VolumetricConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) { + return input.type().VolumetricConvolution_accGradParameters(input, gradOutput, gradWeight, finput, fgradInput, dT, dW, dH, pT, pW, pH, scale); +} +static inline void VolumetricConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricConvolutionMM_updateOutput(input, output, weight, bias, finput, kT, kW, kH, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricConvolutionMM_updateOutput(input, output, weight, finput, kT, kW, kH, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricConvolutionMM_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricConvolutionMM_updateGradInput(input, gradOutput, gradInput, weight, finput, fgradInput, kT, kW, kH, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) { + return input.type().VolumetricConvolutionMM_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, kT, kW, kH, dT, dW, dH, pT, pW, pH, scale); +} +static inline void VolumetricConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) { + return input.type().VolumetricConvolutionMM_accGradParameters(input, gradOutput, gradWeight, finput, kT, kW, kH, dT, dW, dH, pT, pW, pH, scale); +} +static inline void VolumetricFractionalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, int outputT, int outputW, int outputH, int poolSizeT, int poolSizeW, int poolSizeH, const Tensor & indices, const Tensor & randomSamples) { + return input.type().VolumetricFractionalMaxPooling_updateOutput(input, output, outputT, outputW, outputH, poolSizeT, poolSizeW, poolSizeH, indices, randomSamples); +} +static inline void VolumetricFractionalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int outputT, int outputW, int outputH, int poolSizeT, int poolSizeW, int poolSizeH, const Tensor & indices) { + return input.type().VolumetricFractionalMaxPooling_updateGradInput(input, gradOutput, gradInput, outputT, outputW, outputH, poolSizeT, poolSizeW, poolSizeH, indices); +} +static inline void VolumetricFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH) { + return input.type().VolumetricFullConvolution_updateOutput(input, output, weight, bias, finput, fgradInput, dT, dW, dH, pT, pW, pH, aT, aW, aH); +} +static inline void VolumetricFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH) { + return input.type().VolumetricFullConvolution_updateOutput(input, output, weight, finput, fgradInput, dT, dW, dH, pT, pW, pH, aT, aW, aH); +} +static inline void VolumetricFullConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH) { + return input.type().VolumetricFullConvolution_updateGradInput(input, gradOutput, gradInput, weight, finput, fgradInput, dT, dW, dH, pT, pW, pH, aT, aW, aH); +} +static inline void VolumetricFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH, Scalar scale) { + return input.type().VolumetricFullConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, finput, fgradInput, dT, dW, dH, pT, pW, pH, aT, aW, aH, scale); +} +static inline void VolumetricFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH, Scalar scale) { + return input.type().VolumetricFullConvolution_accGradParameters(input, gradOutput, gradWeight, finput, fgradInput, dT, dW, dH, pT, pW, pH, aT, aW, aH, scale); +} +static inline void VolumetricDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH) { + return input.type().VolumetricDilatedConvolution_updateOutput(input, output, weight, bias, columns, ones, kT, kW, kH, dT, dW, dH, padT, padW, padH, dilationT, dilationW, dilationH); +} +static inline void VolumetricDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH) { + return input.type().VolumetricDilatedConvolution_updateOutput(input, output, weight, columns, ones, kT, kW, kH, dT, dW, dH, padT, padW, padH, dilationT, dilationW, dilationH); +} +static inline void VolumetricDilatedConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH) { + return input.type().VolumetricDilatedConvolution_updateGradInput(input, gradOutput, gradInput, weight, gradColumns, kT, kW, kH, dT, dW, dH, padT, padW, padH, dilationT, dilationW, dilationH); +} +static inline void VolumetricDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH, Scalar scale) { + return input.type().VolumetricDilatedConvolution_accGradParameters(input, gradOutput, gradWeight, gradBias, columns, ones, kT, kW, kH, dT, dW, dH, padT, padW, padH, dilationT, dilationW, dilationH, scale); +} +static inline void VolumetricDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH, Scalar scale) { + return input.type().VolumetricDilatedConvolution_accGradParameters(input, gradOutput, gradWeight, columns, ones, kT, kW, kH, dT, dW, dH, padT, padW, padH, dilationT, dilationW, dilationH, scale); +} +static inline void VolumetricMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, bool ceilMode) { + return input.type().VolumetricMaxPooling_updateOutput(input, output, indices, kT, kW, kH, dT, dW, dH, pT, pW, pH, ceilMode); +} +static inline void VolumetricMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, bool ceilMode) { + return input.type().VolumetricMaxPooling_updateGradInput(input, gradOutput, gradInput, indices, kT, kW, kH, dT, dW, dH, pT, pW, pH, ceilMode); +} +static inline void VolumetricDilatedMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, int dilationT, int dilationW, int dilationH, bool ceilMode) { + return input.type().VolumetricDilatedMaxPooling_updateOutput(input, output, indices, kT, kW, kH, dT, dW, dH, pT, pW, pH, dilationT, dilationW, dilationH, ceilMode); +} +static inline void VolumetricDilatedMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, int dilationT, int dilationW, int dilationH, bool ceilMode) { + return input.type().VolumetricDilatedMaxPooling_updateGradInput(input, gradOutput, gradInput, indices, kT, kW, kH, dT, dW, dH, pT, pW, pH, dilationT, dilationW, dilationH, ceilMode); +} +static inline void VolumetricMaxUnpooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int oT, int oW, int oH, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricMaxUnpooling_updateOutput(input, output, indices, oT, oW, oH, dT, dW, dH, pT, pW, pH); +} +static inline void VolumetricMaxUnpooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int oT, int oW, int oH, int dT, int dW, int dH, int pT, int pW, int pH) { + return input.type().VolumetricMaxUnpooling_updateGradInput(input, gradOutput, gradInput, indices, oT, oW, oH, dT, dW, dH, pT, pW, pH); +} +static inline void SpatialReflectionPadding_updateOutput(const Tensor & input, const Tensor & output, int pad_l, int pad_r, int pad_t, int pad_b) { + return input.type().SpatialReflectionPadding_updateOutput(input, output, pad_l, pad_r, pad_t, pad_b); +} +static inline void SpatialReflectionPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pad_l, int pad_r, int pad_t, int pad_b) { + return input.type().SpatialReflectionPadding_updateGradInput(input, gradOutput, gradInput, pad_l, pad_r, pad_t, pad_b); +} +static inline void SpatialReplicationPadding_updateOutput(const Tensor & input, const Tensor & output, int pad_l, int pad_r, int pad_t, int pad_b) { + return input.type().SpatialReplicationPadding_updateOutput(input, output, pad_l, pad_r, pad_t, pad_b); +} +static inline void SpatialReplicationPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pad_l, int pad_r, int pad_t, int pad_b) { + return input.type().SpatialReplicationPadding_updateGradInput(input, gradOutput, gradInput, pad_l, pad_r, pad_t, pad_b); +} +static inline void VolumetricReplicationPadding_updateOutput(const Tensor & input, const Tensor & output, int pleft, int pright, int ptop, int pbottom, int pfront, int pback) { + return input.type().VolumetricReplicationPadding_updateOutput(input, output, pleft, pright, ptop, pbottom, pfront, pback); +} +static inline void VolumetricReplicationPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pleft, int pright, int ptop, int pbottom, int pfront, int pback) { + return input.type().VolumetricReplicationPadding_updateGradInput(input, gradOutput, gradInput, pleft, pright, ptop, pbottom, pfront, pback); +} +static inline void VolumetricUpSamplingNearest_updateOutput(const Tensor & input, const Tensor & output, int scale_factor) { + return input.type().VolumetricUpSamplingNearest_updateOutput(input, output, scale_factor); +} +static inline void VolumetricUpSamplingNearest_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int scale_factor) { + return input.type().VolumetricUpSamplingNearest_updateGradInput(input, gradOutput, gradInput, scale_factor); +} +static inline void VolumetricUpSamplingTrilinear_updateOutput(const Tensor & input, const Tensor & output, int outputDepth, int outputHeight, int outputWidth) { + return input.type().VolumetricUpSamplingTrilinear_updateOutput(input, output, outputDepth, outputHeight, outputWidth); +} +static inline void VolumetricUpSamplingTrilinear_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, int nbatch, int nchannels, int inputDepth, int inputHeight, int inputWidth, int outputDepth, int outputHeight, int outputWidth) { + return gradOutput.type().VolumetricUpSamplingTrilinear_updateGradInput(gradOutput, gradInput, nbatch, nchannels, inputDepth, inputHeight, inputWidth, outputDepth, outputHeight, outputWidth); +} +static inline void SpatialCrossMapLRN_updateOutput(const Tensor & input, const Tensor & output, const Tensor & scale, int size, Scalar alpha, Scalar beta, Scalar k) { + return input.type().SpatialCrossMapLRN_updateOutput(input, output, scale, size, alpha, beta, k); +} +static inline void SpatialCrossMapLRN_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & scale, const Tensor & output, int size, Scalar alpha, Scalar beta, Scalar k) { + return input.type().SpatialCrossMapLRN_updateGradInput(input, gradOutput, gradInput, scale, output, size, alpha, beta, k); +} + +} diff --git a/aten/doc/Tensor.h b/aten/doc/Tensor.h new file mode 100644 index 0000000000..f090122cbc --- /dev/null +++ b/aten/doc/Tensor.h @@ -0,0 +1,1586 @@ +#pragma once + +#include "ATen/Scalar.h" +#include "ATen/Type.h" +#include "ATen/TensorImpl.h" +#include "ATen/Utils.h" +#include "ATen/TensorAccessor.h" + +namespace at { +class Type; + +struct Tensor { + + Tensor() + : pImpl(nullptr){} + explicit Tensor(TensorImpl * self, bool retain = true) + : pImpl(self) { + if(pImpl != nullptr && retain) + pImpl->retain(); + } + Tensor(Tensor const & rhs) + : pImpl(rhs.pImpl) { + if(pImpl != nullptr) + pImpl->retain(); + } + Tensor(Tensor && rhs) + : pImpl(rhs.pImpl) { + rhs.pImpl = nullptr; + } + ~Tensor() { + if(pImpl != nullptr) + pImpl->release(); + } + Tensor & operator=(Tensor && rhs) { + rhs.swap(*this); + return *this; + } + Tensor & operator=(Tensor const & rhs) { + //Tensor ctor retains original rhs.pImpl + //then rhs.pImpl is swapped with this->pImpl + //finally Tensor dtor releases rhs.pImpl, which was originally this->pImpl + Tensor(rhs).swap(*this); + return *this; + } + void reset() { + Tensor().swap(*this); + } + void reset(TensorImpl * rhs) { + Tensor(rhs).swap(*this); + } + void reset(TensorImpl * rhs, bool retain) { + Tensor(rhs, retain).swap(*this ); + } + TensorImpl * get() { + return pImpl; + } + TensorImpl * detach() { + TensorImpl * ret = pImpl; + pImpl = nullptr; + return ret; + } + bool defined() const { + return pImpl != nullptr; + } + void swap(Tensor & rhs) { + TensorImpl * tmp = pImpl; + pImpl = rhs.pImpl; + rhs.pImpl = tmp; + } + const char * toString() const { + return pImpl->toString(); + } + IntList sizes() const { + return pImpl->sizes(); + } + IntList strides() const { + return pImpl->strides(); + } + Type & type() const { + return pImpl->type(); + } + Tensor toType(Type & t) const { + if(type().ID() ==t.ID()) + return *this; + return t.copy(*this); + } + Tensor & copy_(const Tensor & src) { + resize_(src.sizes()); + type().copy(src,*this); + return *this; + } + Tensor toType(ScalarType t) { + return toType(type().toScalarType(t)); + } + Tensor toBackend(Backend b) { + return toType(type().toBackend(b)); + } + int64_t dim() const { + return ndimension(); + } + template<typename T> + T * data() const; + + template<typename T, size_t N> + TensorAccessor<T,N> accessor() { + static_assert(N > 0, "accessor is used for indexing tensor, for scalars use *data<T>()"); + AT_ASSERT(dim() == N, "expected %d dims but tensor has %d",N,dim()); + return TensorAccessor<T,N>(data<T>(),sizes().data(),strides().data()); + } + + Tensor operator-() { + return neg(); + } + Tensor& operator+=(const Tensor & other) { + add_(other); + } + Tensor& operator+=(Scalar other) { + add_(other); + } + Tensor& operator-=(const Tensor & other) { + sub_(other); + } + Tensor& operator-=(Scalar other) { + sub_(other); + } + Tensor& operator*=(const Tensor & other) { + mul_(other); + } + Tensor& operator*=(Scalar other) { + mul_(other); + } + Tensor& operator/=(const Tensor & other) { + div_(other); + } + Tensor& operator/=(Scalar other) { + div_(other); + } + Tensor operator[](int64_t idx) { + return select(0,idx); + } + + //example + //Tensor * add(Tensor & b); + int64_t storage_offset() const; + int64_t ndimension() const; + Tensor & resize_(IntList size); + int64_t numel() const; + Tensor & set_(Storage & storage); + Tensor & set_(Storage & sourceStorage, int64_t storage_offset, IntList size, IntList stride); + Tensor & set_(Storage & sourceStorage, int64_t storage_offset, IntList size); + Tensor & set_(const Tensor & source); + Tensor & set_(); + Tensor & fill_(Scalar value); + bool is_same_size(const Tensor & other) const; + bool is_contiguous() const; + bool is_set_to(const Tensor & tensor) const; + Tensor & masked_fill_(const Tensor & mask, Scalar value); + Tensor & masked_scatter_(const Tensor & mask, const Tensor & source); + Tensor masked_select(const Tensor & mask) const; + Tensor transpose(int64_t dim0, int64_t dim1) const; + Tensor & transpose_(int64_t dim0, int64_t dim1); + Tensor t() const; + Tensor & t_(); + Tensor squeeze(int64_t dim) const; + Tensor squeeze() const; + Tensor & squeeze_(int64_t dim); + Tensor & squeeze_(); + Tensor unsqueeze(int64_t dim) const; + Tensor & unsqueeze_(int64_t dim); + Tensor nonzero() const; + Tensor contiguous() const; + Tensor clone() const; + Tensor view(IntList size) const; + Tensor expand(IntList size) const; + Tensor & resize_as_(const Tensor & the_template); + Tensor index_select(int64_t dim, const Tensor & index) const; + Tensor & index_copy_(int64_t dim, const Tensor & index, const Tensor & source); + Tensor & index_add_(int64_t dim, const Tensor & index, const Tensor & source); + Tensor & index_fill_(int64_t dim, const Tensor & index, Scalar value); + Tensor narrow(int64_t dimension, int64_t start, int64_t length) const; + Tensor unfold(int64_t dimension, int64_t size, int64_t step) const; + Tensor & scatter_(int64_t dim, const Tensor & index, const Tensor & src); + Tensor & scatter_(int64_t dim, const Tensor & index, Scalar value); + Tensor & scatter_add_(int64_t dim, const Tensor & index, const Tensor & src); + Tensor gather(int64_t dim, const Tensor & index) const; + void* data_ptr() const; + bool equal(const Tensor & other) const; + Tensor __and__(Scalar value) const; + Tensor __and__(const Tensor & other) const; + Tensor & __iand__(Scalar value); + Tensor & __iand__(const Tensor & other); + Tensor __or__(Scalar value) const; + Tensor __or__(const Tensor & other) const; + Tensor & __ior__(Scalar value); + Tensor & __ior__(const Tensor & other); + Tensor __xor__(Scalar value) const; + Tensor __xor__(const Tensor & other) const; + Tensor & __ixor__(Scalar value); + Tensor & __ixor__(const Tensor & other); + Tensor __lshift__(Scalar value) const; + Tensor __lshift__(const Tensor & other) const; + Tensor & __ilshift__(Scalar value); + Tensor & __ilshift__(const Tensor & other); + Tensor __rshift__(Scalar value) const; + Tensor __rshift__(const Tensor & other) const; + Tensor & __irshift__(Scalar value); + Tensor & __irshift__(const Tensor & other); + Tensor lt(Scalar value) const; + Tensor lt(const Tensor & other) const; + Tensor & lt_(Scalar value); + Tensor & lt_(const Tensor & other); + Tensor gt(Scalar value) const; + Tensor gt(const Tensor & other) const; + Tensor & gt_(Scalar value); + Tensor & gt_(const Tensor & other); + Tensor le(Scalar value) const; + Tensor le(const Tensor & other) const; + Tensor & le_(Scalar value); + Tensor & le_(const Tensor & other); + Tensor ge(Scalar value) const; + Tensor ge(const Tensor & other) const; + Tensor & ge_(Scalar value); + Tensor & ge_(const Tensor & other); + Tensor eq(Scalar value) const; + Tensor eq(const Tensor & other) const; + Tensor & eq_(Scalar value); + Tensor & eq_(const Tensor & other); + Tensor ne(Scalar value) const; + Tensor ne(const Tensor & other) const; + Tensor & ne_(Scalar value); + Tensor & ne_(const Tensor & other); + std::tuple<Tensor,Tensor> min(int64_t dim, bool keepdim) const; + std::tuple<Tensor,Tensor> min(int64_t dim) const; + Tensor min(const Tensor & other) const; + Scalar min() const; + std::tuple<Tensor,Tensor> max(int64_t dim, bool keepdim) const; + std::tuple<Tensor,Tensor> max(int64_t dim) const; + Tensor max(const Tensor & other) const; + Scalar max() const; + std::tuple<Tensor,Tensor> kthvalue(int64_t k, bool keepdim) const; + std::tuple<Tensor,Tensor> kthvalue(int64_t k) const; + std::tuple<Tensor,Tensor> kthvalue(int64_t k, int64_t dim, bool keepdim) const; + std::tuple<Tensor,Tensor> kthvalue(int64_t k, int64_t dim) const; + std::tuple<Tensor,Tensor> mode(bool keepdim) const; + std::tuple<Tensor,Tensor> mode() const; + std::tuple<Tensor,Tensor> mode(int64_t dim, bool keepdim) const; + std::tuple<Tensor,Tensor> mode(int64_t dim) const; + std::tuple<Tensor,Tensor> median(bool keepdim) const; + std::tuple<Tensor,Tensor> median() const; + std::tuple<Tensor,Tensor> median(int64_t dim) const; + std::tuple<Tensor,Tensor> median(int64_t dim, bool keepdim) const; + std::tuple<Tensor,Tensor> sort() const; + std::tuple<Tensor,Tensor> sort(int64_t dim) const; + std::tuple<Tensor,Tensor> sort(int64_t dim, bool descending) const; + std::tuple<Tensor,Tensor> topk(int64_t k) const; + std::tuple<Tensor,Tensor> topk(int64_t k, int64_t dim, bool largest, bool sorted) const; + std::tuple<Tensor,Tensor> topk(int64_t k, int64_t dim, bool largest) const; + std::tuple<Tensor,Tensor> topk(int64_t k, int64_t dim) const; + bool all() const; + bool any() const; + int64_t get_device() const; + Tensor abs() const; + Tensor & abs_(); + Tensor & sigmoid_(); + Tensor sigmoid() const; + Tensor & log_(); + Tensor log() const; + Tensor & log1p_(); + Tensor log1p() const; + Tensor lgamma() const; + Tensor & lgamma_(); + Tensor & exp_(); + Tensor exp() const; + Tensor & cos_(); + Tensor cos() const; + Tensor & acos_(); + Tensor acos() const; + Tensor & cosh_(); + Tensor cosh() const; + Tensor & sin_(); + Tensor sin() const; + Tensor & asin_(); + Tensor asin() const; + Tensor & sinh_(); + Tensor sinh() const; + Tensor & tan_(); + Tensor tan() const; + Tensor & atan_(); + Tensor atan() const; + Tensor & tanh_(); + Tensor tanh() const; + Tensor & sqrt_(); + Tensor sqrt() const; + Tensor & rsqrt_(); + Tensor rsqrt() const; + Tensor & ceil_(); + Tensor ceil() const; + Tensor & floor_(); + Tensor floor() const; + Tensor & round_(); + Tensor round() const; + Tensor & trunc_(); + Tensor trunc() const; + Tensor & frac_(); + Tensor frac() const; + Tensor mean(int64_t dim, bool keepdim) const; + Tensor mean(int64_t dim) const; + Scalar mean() const; + Tensor var(int64_t dim, bool keepdim) const; + Tensor var(int64_t dim) const; + Scalar var() const; + Tensor std(int64_t dim, bool keepdim) const; + Tensor std(int64_t dim) const; + Scalar std() const; + Tensor norm(Scalar p, int64_t dim, bool keepdim) const; + Tensor norm(Scalar p, int64_t dim) const; + Scalar norm(Scalar p) const; + Scalar norm() const; + Tensor renorm(Scalar p, int64_t dim, Scalar maxnorm) const; + Tensor & renorm_(Scalar p, int64_t dim, Scalar maxnorm); + Scalar dist(const Tensor & other, Scalar p) const; + Scalar dist(const Tensor & other) const; + Tensor reciprocal() const; + Tensor & reciprocal_(); + Tensor neg() const; + Tensor & neg_(); + Tensor atan2(const Tensor & other) const; + Tensor & atan2_(const Tensor & other); + Tensor pow(Scalar exponent) const; + Tensor pow(const Tensor & exponent) const; + Tensor & pow_(Scalar exponent); + Tensor & pow_(const Tensor & exponent); + Tensor lerp(const Tensor & end, Scalar weight) const; + Tensor & lerp_(const Tensor & end, Scalar weight); + Tensor histc() const; + Tensor histc(int64_t bins) const; + Tensor histc(int64_t bins, Scalar min) const; + Tensor histc(int64_t bins, Scalar min, Scalar max) const; + Tensor & zero_(); + Tensor sum(int64_t dim, bool keepdim) const; + Tensor sum(int64_t dim) const; + Scalar sum() const; + Tensor prod(int64_t dim, bool keepdim) const; + Tensor prod(int64_t dim) const; + Scalar prod() const; + Tensor cumsum(int64_t dim) const; + Tensor cumprod(int64_t dim) const; + Tensor sign() const; + Tensor & sign_(); + Scalar trace() const; + Tensor add(Scalar value, const Tensor & other) const; + Tensor add(Scalar value) const; + Tensor add(const Tensor & other) const; + Tensor & add_(Scalar value, const Tensor & other); + Tensor & add_(Scalar value); + Tensor & add_(const Tensor & other); + Tensor sub(Scalar value, const Tensor & other) const; + Tensor sub(Scalar value) const; + Tensor sub(const Tensor & other) const; + Tensor & sub_(Scalar value, const Tensor & other); + Tensor & sub_(Scalar value); + Tensor & sub_(const Tensor & other); + Tensor mul(Scalar value) const; + Tensor mul(const Tensor & other) const; + Tensor & mul_(Scalar value); + Tensor & mul_(const Tensor & other); + Tensor div(Scalar value) const; + Tensor div(const Tensor & other) const; + Tensor & div_(Scalar value); + Tensor & div_(const Tensor & other); + Tensor fmod(Scalar value) const; + Tensor fmod(const Tensor & other) const; + Tensor & fmod_(Scalar value); + Tensor & fmod_(const Tensor & other); + Tensor remainder(Scalar value) const; + Tensor remainder(const Tensor & other) const; + Tensor & remainder_(Scalar value); + Tensor & remainder_(const Tensor & other); + Tensor clamp(Scalar min, Scalar max) const; + Tensor clamp(Scalar min) const; + Tensor & clamp_(Scalar min, Scalar max); + Tensor & clamp_(Scalar min); + Scalar dot(const Tensor & tensor) const; + Tensor tril(int64_t k) const; + Tensor tril() const; + Tensor & tril_(int64_t k); + Tensor & tril_(); + Tensor triu(int64_t k) const; + Tensor triu() const; + Tensor & triu_(int64_t k); + Tensor & triu_(); + Tensor cross(const Tensor & other, int64_t dim) const; + Tensor cross(const Tensor & other) const; + Tensor diag(int64_t diagonal) const; + Tensor diag() const; + Tensor addmm(Scalar beta, Scalar alpha, const Tensor & mat1, const Tensor & mat2) const; + Tensor addmm(Scalar beta, const Tensor & mat1, const Tensor & mat2) const; + Tensor addmm(const Tensor & mat1, const Tensor & mat2) const; + Tensor & addmm_(Scalar beta, Scalar alpha, const Tensor & mat1, const Tensor & mat2); + Tensor & addmm_(Scalar beta, const Tensor & mat1, const Tensor & mat2); + Tensor & addmm_(const Tensor & mat1, const Tensor & mat2); + Tensor addmv(Scalar beta, Scalar alpha, const Tensor & mat, const Tensor & vec) const; + Tensor addmv(Scalar beta, const Tensor & mat, const Tensor & vec) const; + Tensor addmv(const Tensor & mat, const Tensor & vec) const; + Tensor & addmv_(Scalar beta, Scalar alpha, const Tensor & mat, const Tensor & vec); + Tensor & addmv_(Scalar beta, const Tensor & mat, const Tensor & vec); + Tensor & addmv_(const Tensor & mat, const Tensor & vec); + Tensor addr(Scalar beta, Scalar alpha, const Tensor & vec1, const Tensor & vec2) const; + Tensor addr(Scalar beta, const Tensor & vec1, const Tensor & vec2) const; + Tensor addr(const Tensor & vec1, const Tensor & vec2) const; + Tensor & addr_(Scalar beta, Scalar alpha, const Tensor & vec1, const Tensor & vec2); + Tensor & addr_(Scalar beta, const Tensor & vec1, const Tensor & vec2); + Tensor & addr_(const Tensor & vec1, const Tensor & vec2); + Tensor ger(const Tensor & vec2) const; + Tensor mv(const Tensor & vec) const; + Tensor mm(const Tensor & mat2) const; + Tensor bmm(const Tensor & mat2) const; + Tensor addbmm(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) const; + Tensor addbmm(Scalar beta, const Tensor & batch1, const Tensor & batch2) const; + Tensor addbmm(const Tensor & batch1, const Tensor & batch2) const; + Tensor & addbmm_(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2); + Tensor & addbmm_(Scalar beta, const Tensor & batch1, const Tensor & batch2); + Tensor & addbmm_(const Tensor & batch1, const Tensor & batch2); + Tensor baddbmm(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) const; + Tensor baddbmm(Scalar beta, const Tensor & batch1, const Tensor & batch2) const; + Tensor baddbmm(const Tensor & batch1, const Tensor & batch2) const; + Tensor & baddbmm_(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2); + Tensor & baddbmm_(Scalar beta, const Tensor & batch1, const Tensor & batch2); + Tensor & baddbmm_(const Tensor & batch1, const Tensor & batch2); + Tensor addcmul(Scalar value, const Tensor & tensor1, const Tensor & tensor2) const; + Tensor addcmul(const Tensor & tensor1, const Tensor & tensor2) const; + Tensor & addcmul_(Scalar value, const Tensor & tensor1, const Tensor & tensor2); + Tensor & addcmul_(const Tensor & tensor1, const Tensor & tensor2); + Tensor addcdiv(Scalar value, const Tensor & tensor1, const Tensor & tensor2) const; + Tensor addcdiv(const Tensor & tensor1, const Tensor & tensor2) const; + Tensor & addcdiv_(Scalar value, const Tensor & tensor1, const Tensor & tensor2); + Tensor & addcdiv_(const Tensor & tensor1, const Tensor & tensor2); + std::tuple<Tensor,Tensor> gesv(const Tensor & A) const; + std::tuple<Tensor,Tensor> gels(const Tensor & A) const; + std::tuple<Tensor,Tensor> trtrs(const Tensor & A, bool upper, bool transpose, bool unitriangular) const; + std::tuple<Tensor,Tensor> trtrs(const Tensor & A, bool upper, bool transpose) const; + std::tuple<Tensor,Tensor> trtrs(const Tensor & A, bool upper) const; + std::tuple<Tensor,Tensor> trtrs(const Tensor & A) const; + std::tuple<Tensor,Tensor> symeig(bool eigenvectors, bool upper) const; + std::tuple<Tensor,Tensor> symeig(bool eigenvectors) const; + std::tuple<Tensor,Tensor> symeig() const; + std::tuple<Tensor,Tensor> eig(bool eigenvectors) const; + std::tuple<Tensor,Tensor> eig() const; + std::tuple<Tensor,Tensor,Tensor> svd(bool some) const; + std::tuple<Tensor,Tensor,Tensor> svd() const; + Tensor inverse() const; + Tensor potrf(bool upper) const; + Tensor potrf() const; + Tensor potrs(const Tensor & input2, bool upper) const; + Tensor potrs(const Tensor & input2) const; + Tensor potri(bool upper) const; + Tensor potri() const; + std::tuple<Tensor,Tensor> pstrf(bool upper, Scalar tol) const; + std::tuple<Tensor,Tensor> pstrf(bool upper) const; + std::tuple<Tensor,Tensor> pstrf(Scalar tol) const; + std::tuple<Tensor,Tensor> pstrf() const; + std::tuple<Tensor,Tensor> qr() const; + std::tuple<Tensor,Tensor> geqrf() const; + std::tuple<Tensor,const Tensor &> orgqr(const Tensor & input2) const; + std::tuple<Tensor,const Tensor &> ormqr(const Tensor & input2, const Tensor & input3, bool left, bool transpose) const; + std::tuple<Tensor,const Tensor &> ormqr(const Tensor & input2, const Tensor & input3, bool left) const; + std::tuple<Tensor,const Tensor &> ormqr(const Tensor & input2, const Tensor & input3) const; + std::tuple<Tensor,Tensor> btrifact(const Tensor & info) const; + std::tuple<Tensor,Tensor> btrifact() const; + Tensor btrisolve(const Tensor & LU_data, const Tensor & LU_pivots) const; + Tensor multinomial(Generator & generator, int64_t num_samples, bool replacement) const; + Tensor multinomial(Generator & generator, int64_t num_samples) const; + Tensor multinomial(int64_t num_samples, bool replacement) const; + Tensor multinomial(int64_t num_samples) const; + Tensor & uniform_(Generator & generator, double from, double to); + Tensor & uniform_(Generator & generator, double from); + Tensor & uniform_(double from, double to); + Tensor & uniform_(Generator & generator); + Tensor & uniform_(double from); + Tensor & uniform_(); + Tensor & cauchy_(Generator & generator, double median, double sigma); + Tensor & cauchy_(Generator & generator, double median); + Tensor & cauchy_(double median, double sigma); + Tensor & cauchy_(Generator & generator); + Tensor & cauchy_(double median); + Tensor & cauchy_(); + Tensor & log_normal_(Generator & generator, double mean, double std); + Tensor & log_normal_(Generator & generator, double mean); + Tensor & log_normal_(double mean, double std); + Tensor & log_normal_(Generator & generator); + Tensor & log_normal_(double mean); + Tensor & log_normal_(); + Tensor & geometric_(Generator & generator, double p); + Tensor & geometric_(double p); + int64_t size(int64_t dim) const; + int64_t stride(int64_t dim) const; + Tensor select(int dim, int64_t sliceIndex) const; + + friend class Type; + +//TODO(zach): sort out friend classes +public: + TensorImpl * pImpl; +}; + +// all static inline to allow for inlining of the non-dynamic part of dispatch +inline int64_t Tensor::storage_offset() const { + return type().m_storage_offset(*this); +} +inline int64_t Tensor::ndimension() const { + return type().m_ndimension(*this); +} +inline Tensor & Tensor::resize_(IntList size) { + return type().m_resize_(*this, size); +} +inline int64_t Tensor::numel() const { + return type().numel(*this); +} +inline Tensor & Tensor::set_(Storage & storage) { + return type().m_set_(*this, storage); +} +inline Tensor & Tensor::set_(Storage & sourceStorage, int64_t storage_offset, IntList size, IntList stride) { + return type().m_set_(*this, sourceStorage, storage_offset, size, stride); +} +inline Tensor & Tensor::set_(Storage & sourceStorage, int64_t storage_offset, IntList size) { + return type().m_set_(*this, sourceStorage, storage_offset, size); +} +inline Tensor & Tensor::set_(const Tensor & source) { + return type().m_set_(*this, source); +} +inline Tensor & Tensor::set_() { + return type().m_set_(*this); +} +inline Tensor & Tensor::fill_(Scalar value) { + return type().m_fill_(*this, value); +} +inline bool Tensor::is_same_size(const Tensor & other) const { + return type().m_is_same_size(*this, other); +} +inline bool Tensor::is_contiguous() const { + return type().m_is_contiguous(*this); +} +inline bool Tensor::is_set_to(const Tensor & tensor) const { + return type().m_is_set_to(*this, tensor); +} +inline Tensor & Tensor::masked_fill_(const Tensor & mask, Scalar value) { + return type().m_masked_fill_(*this, mask, value); +} +inline Tensor & Tensor::masked_scatter_(const Tensor & mask, const Tensor & source) { + return type().m_masked_scatter_(*this, mask, source); +} +inline Tensor Tensor::masked_select(const Tensor & mask) const { + return type().masked_select(*this, mask); +} +inline Tensor Tensor::transpose(int64_t dim0, int64_t dim1) const { + return type().transpose(*this, dim0, dim1); +} +inline Tensor & Tensor::transpose_(int64_t dim0, int64_t dim1) { + return type().m_transpose_(*this, dim0, dim1); +} +inline Tensor Tensor::t() const { + return type().t(*this); +} +inline Tensor & Tensor::t_() { + return type().m_t_(*this); +} +inline Tensor Tensor::squeeze(int64_t dim) const { + return type().squeeze(*this, dim); +} +inline Tensor Tensor::squeeze() const { + return type().squeeze(*this); +} +inline Tensor & Tensor::squeeze_(int64_t dim) { + return type().m_squeeze_(*this, dim); +} +inline Tensor & Tensor::squeeze_() { + return type().m_squeeze_(*this); +} +inline Tensor Tensor::unsqueeze(int64_t dim) const { + return type().unsqueeze(*this, dim); +} +inline Tensor & Tensor::unsqueeze_(int64_t dim) { + return type().m_unsqueeze_(*this, dim); +} +inline Tensor Tensor::nonzero() const { + return type().nonzero(*this); +} +inline Tensor Tensor::contiguous() const { + return type().m_contiguous(*this); +} +inline Tensor Tensor::clone() const { + return type().m_clone(*this); +} +inline Tensor Tensor::view(IntList size) const { + return type().m_view(*this, size); +} +inline Tensor Tensor::expand(IntList size) const { + return type().m_expand(*this, size); +} +inline Tensor & Tensor::resize_as_(const Tensor & the_template) { + return type().m_resize_as_(*this, the_template); +} +inline Tensor Tensor::index_select(int64_t dim, const Tensor & index) const { + return type().index_select(*this, dim, index); +} +inline Tensor & Tensor::index_copy_(int64_t dim, const Tensor & index, const Tensor & source) { + return type().m_index_copy_(*this, dim, index, source); +} +inline Tensor & Tensor::index_add_(int64_t dim, const Tensor & index, const Tensor & source) { + return type().m_index_add_(*this, dim, index, source); +} +inline Tensor & Tensor::index_fill_(int64_t dim, const Tensor & index, Scalar value) { + return type().m_index_fill_(*this, dim, index, value); +} +inline Tensor Tensor::narrow(int64_t dimension, int64_t start, int64_t length) const { + return type().m_narrow(*this, dimension, start, length); +} +inline Tensor Tensor::unfold(int64_t dimension, int64_t size, int64_t step) const { + return type().m_unfold(*this, dimension, size, step); +} +inline Tensor & Tensor::scatter_(int64_t dim, const Tensor & index, const Tensor & src) { + return type().m_scatter_(*this, dim, index, src); +} +inline Tensor & Tensor::scatter_(int64_t dim, const Tensor & index, Scalar value) { + return type().m_scatter_(*this, dim, index, value); +} +inline Tensor & Tensor::scatter_add_(int64_t dim, const Tensor & index, const Tensor & src) { + return type().m_scatter_add_(*this, dim, index, src); +} +inline Tensor Tensor::gather(int64_t dim, const Tensor & index) const { + return type().gather(*this, dim, index); +} +inline void* Tensor::data_ptr() const { + return type().m_data_ptr(*this); +} +inline bool Tensor::equal(const Tensor & other) const { + return type().equal(*this, other); +} +inline Tensor Tensor::__and__(Scalar value) const { + return type().__and__(*this, value); +} +inline Tensor Tensor::__and__(const Tensor & other) const { + return type().__and__(*this, other); +} +inline Tensor & Tensor::__iand__(Scalar value) { + return type().__iand__(*this, value); +} +inline Tensor & Tensor::__iand__(const Tensor & other) { + return type().__iand__(*this, other); +} +inline Tensor Tensor::__or__(Scalar value) const { + return type().__or__(*this, value); +} +inline Tensor Tensor::__or__(const Tensor & other) const { + return type().__or__(*this, other); +} +inline Tensor & Tensor::__ior__(Scalar value) { + return type().__ior__(*this, value); +} +inline Tensor & Tensor::__ior__(const Tensor & other) { + return type().__ior__(*this, other); +} +inline Tensor Tensor::__xor__(Scalar value) const { + return type().__xor__(*this, value); +} +inline Tensor Tensor::__xor__(const Tensor & other) const { + return type().__xor__(*this, other); +} +inline Tensor & Tensor::__ixor__(Scalar value) { + return type().__ixor__(*this, value); +} +inline Tensor & Tensor::__ixor__(const Tensor & other) { + return type().__ixor__(*this, other); +} +inline Tensor Tensor::__lshift__(Scalar value) const { + return type().__lshift__(*this, value); +} +inline Tensor Tensor::__lshift__(const Tensor & other) const { + return type().__lshift__(*this, other); +} +inline Tensor & Tensor::__ilshift__(Scalar value) { + return type().__ilshift__(*this, value); +} +inline Tensor & Tensor::__ilshift__(const Tensor & other) { + return type().__ilshift__(*this, other); +} +inline Tensor Tensor::__rshift__(Scalar value) const { + return type().__rshift__(*this, value); +} +inline Tensor Tensor::__rshift__(const Tensor & other) const { + return type().__rshift__(*this, other); +} +inline Tensor & Tensor::__irshift__(Scalar value) { + return type().__irshift__(*this, value); +} +inline Tensor & Tensor::__irshift__(const Tensor & other) { + return type().__irshift__(*this, other); +} +inline Tensor Tensor::lt(Scalar value) const { + return type().m_lt(*this, value); +} +inline Tensor Tensor::lt(const Tensor & other) const { + return type().m_lt(*this, other); +} +inline Tensor & Tensor::lt_(Scalar value) { + return type().m_lt_(*this, value); +} +inline Tensor & Tensor::lt_(const Tensor & other) { + return type().m_lt_(*this, other); +} +inline Tensor Tensor::gt(Scalar value) const { + return type().m_gt(*this, value); +} +inline Tensor Tensor::gt(const Tensor & other) const { + return type().m_gt(*this, other); +} +inline Tensor & Tensor::gt_(Scalar value) { + return type().m_gt_(*this, value); +} +inline Tensor & Tensor::gt_(const Tensor & other) { + return type().m_gt_(*this, other); +} +inline Tensor Tensor::le(Scalar value) const { + return type().m_le(*this, value); +} +inline Tensor Tensor::le(const Tensor & other) const { + return type().m_le(*this, other); +} +inline Tensor & Tensor::le_(Scalar value) { + return type().m_le_(*this, value); +} +inline Tensor & Tensor::le_(const Tensor & other) { + return type().m_le_(*this, other); +} +inline Tensor Tensor::ge(Scalar value) const { + return type().m_ge(*this, value); +} +inline Tensor Tensor::ge(const Tensor & other) const { + return type().m_ge(*this, other); +} +inline Tensor & Tensor::ge_(Scalar value) { + return type().m_ge_(*this, value); +} +inline Tensor & Tensor::ge_(const Tensor & other) { + return type().m_ge_(*this, other); +} +inline Tensor Tensor::eq(Scalar value) const { + return type().m_eq(*this, value); +} +inline Tensor Tensor::eq(const Tensor & other) const { + return type().m_eq(*this, other); +} +inline Tensor & Tensor::eq_(Scalar value) { + return type().m_eq_(*this, value); +} +inline Tensor & Tensor::eq_(const Tensor & other) { + return type().m_eq_(*this, other); +} +inline Tensor Tensor::ne(Scalar value) const { + return type().m_ne(*this, value); +} +inline Tensor Tensor::ne(const Tensor & other) const { + return type().m_ne(*this, other); +} +inline Tensor & Tensor::ne_(Scalar value) { + return type().m_ne_(*this, value); +} +inline Tensor & Tensor::ne_(const Tensor & other) { + return type().m_ne_(*this, other); +} +inline std::tuple<Tensor,Tensor> Tensor::min(int64_t dim, bool keepdim) const { + return type().min(*this, dim, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::min(int64_t dim) const { + return type().min(*this, dim); +} +inline Tensor Tensor::min(const Tensor & other) const { + return type().min(*this, other); +} +inline Scalar Tensor::min() const { + return type().min(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::max(int64_t dim, bool keepdim) const { + return type().max(*this, dim, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::max(int64_t dim) const { + return type().max(*this, dim); +} +inline Tensor Tensor::max(const Tensor & other) const { + return type().max(*this, other); +} +inline Scalar Tensor::max() const { + return type().max(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::kthvalue(int64_t k, bool keepdim) const { + return type().kthvalue(*this, k, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::kthvalue(int64_t k) const { + return type().kthvalue(*this, k); +} +inline std::tuple<Tensor,Tensor> Tensor::kthvalue(int64_t k, int64_t dim, bool keepdim) const { + return type().kthvalue(*this, k, dim, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::kthvalue(int64_t k, int64_t dim) const { + return type().kthvalue(*this, k, dim); +} +inline std::tuple<Tensor,Tensor> Tensor::mode(bool keepdim) const { + return type().mode(*this, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::mode() const { + return type().mode(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::mode(int64_t dim, bool keepdim) const { + return type().mode(*this, dim, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::mode(int64_t dim) const { + return type().mode(*this, dim); +} +inline std::tuple<Tensor,Tensor> Tensor::median(bool keepdim) const { + return type().median(*this, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::median() const { + return type().median(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::median(int64_t dim) const { + return type().median(*this, dim); +} +inline std::tuple<Tensor,Tensor> Tensor::median(int64_t dim, bool keepdim) const { + return type().median(*this, dim, keepdim); +} +inline std::tuple<Tensor,Tensor> Tensor::sort() const { + return type().sort(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::sort(int64_t dim) const { + return type().sort(*this, dim); +} +inline std::tuple<Tensor,Tensor> Tensor::sort(int64_t dim, bool descending) const { + return type().sort(*this, dim, descending); +} +inline std::tuple<Tensor,Tensor> Tensor::topk(int64_t k) const { + return type().topk(*this, k); +} +inline std::tuple<Tensor,Tensor> Tensor::topk(int64_t k, int64_t dim, bool largest, bool sorted) const { + return type().topk(*this, k, dim, largest, sorted); +} +inline std::tuple<Tensor,Tensor> Tensor::topk(int64_t k, int64_t dim, bool largest) const { + return type().topk(*this, k, dim, largest); +} +inline std::tuple<Tensor,Tensor> Tensor::topk(int64_t k, int64_t dim) const { + return type().topk(*this, k, dim); +} +inline bool Tensor::all() const { + return type().m_all(*this); +} +inline bool Tensor::any() const { + return type().m_any(*this); +} +inline int64_t Tensor::get_device() const { + return type().m_get_device(*this); +} +inline Tensor Tensor::abs() const { + return type().abs(*this); +} +inline Tensor & Tensor::abs_() { + return type().m_abs_(*this); +} +inline Tensor & Tensor::sigmoid_() { + return type().m_sigmoid_(*this); +} +inline Tensor Tensor::sigmoid() const { + return type().sigmoid(*this); +} +inline Tensor & Tensor::log_() { + return type().m_log_(*this); +} +inline Tensor Tensor::log() const { + return type().log(*this); +} +inline Tensor & Tensor::log1p_() { + return type().m_log1p_(*this); +} +inline Tensor Tensor::log1p() const { + return type().log1p(*this); +} +inline Tensor Tensor::lgamma() const { + return type().lgamma(*this); +} +inline Tensor & Tensor::lgamma_() { + return type().m_lgamma_(*this); +} +inline Tensor & Tensor::exp_() { + return type().m_exp_(*this); +} +inline Tensor Tensor::exp() const { + return type().exp(*this); +} +inline Tensor & Tensor::cos_() { + return type().m_cos_(*this); +} +inline Tensor Tensor::cos() const { + return type().cos(*this); +} +inline Tensor & Tensor::acos_() { + return type().m_acos_(*this); +} +inline Tensor Tensor::acos() const { + return type().acos(*this); +} +inline Tensor & Tensor::cosh_() { + return type().m_cosh_(*this); +} +inline Tensor Tensor::cosh() const { + return type().cosh(*this); +} +inline Tensor & Tensor::sin_() { + return type().m_sin_(*this); +} +inline Tensor Tensor::sin() const { + return type().sin(*this); +} +inline Tensor & Tensor::asin_() { + return type().m_asin_(*this); +} +inline Tensor Tensor::asin() const { + return type().asin(*this); +} +inline Tensor & Tensor::sinh_() { + return type().m_sinh_(*this); +} +inline Tensor Tensor::sinh() const { + return type().sinh(*this); +} +inline Tensor & Tensor::tan_() { + return type().m_tan_(*this); +} +inline Tensor Tensor::tan() const { + return type().tan(*this); +} +inline Tensor & Tensor::atan_() { + return type().m_atan_(*this); +} +inline Tensor Tensor::atan() const { + return type().atan(*this); +} +inline Tensor & Tensor::tanh_() { + return type().m_tanh_(*this); +} +inline Tensor Tensor::tanh() const { + return type().tanh(*this); +} +inline Tensor & Tensor::sqrt_() { + return type().m_sqrt_(*this); +} +inline Tensor Tensor::sqrt() const { + return type().sqrt(*this); +} +inline Tensor & Tensor::rsqrt_() { + return type().m_rsqrt_(*this); +} +inline Tensor Tensor::rsqrt() const { + return type().rsqrt(*this); +} +inline Tensor & Tensor::ceil_() { + return type().m_ceil_(*this); +} +inline Tensor Tensor::ceil() const { + return type().ceil(*this); +} +inline Tensor & Tensor::floor_() { + return type().m_floor_(*this); +} +inline Tensor Tensor::floor() const { + return type().floor(*this); +} +inline Tensor & Tensor::round_() { + return type().m_round_(*this); +} +inline Tensor Tensor::round() const { + return type().round(*this); +} +inline Tensor & Tensor::trunc_() { + return type().m_trunc_(*this); +} +inline Tensor Tensor::trunc() const { + return type().trunc(*this); +} +inline Tensor & Tensor::frac_() { + return type().m_frac_(*this); +} +inline Tensor Tensor::frac() const { + return type().frac(*this); +} +inline Tensor Tensor::mean(int64_t dim, bool keepdim) const { + return type().mean(*this, dim, keepdim); +} +inline Tensor Tensor::mean(int64_t dim) const { + return type().mean(*this, dim); +} +inline Scalar Tensor::mean() const { + return type().mean(*this); +} +inline Tensor Tensor::var(int64_t dim, bool keepdim) const { + return type().var(*this, dim, keepdim); +} +inline Tensor Tensor::var(int64_t dim) const { + return type().var(*this, dim); +} +inline Scalar Tensor::var() const { + return type().var(*this); +} +inline Tensor Tensor::std(int64_t dim, bool keepdim) const { + return type().std(*this, dim, keepdim); +} +inline Tensor Tensor::std(int64_t dim) const { + return type().std(*this, dim); +} +inline Scalar Tensor::std() const { + return type().std(*this); +} +inline Tensor Tensor::norm(Scalar p, int64_t dim, bool keepdim) const { + return type().norm(*this, p, dim, keepdim); +} +inline Tensor Tensor::norm(Scalar p, int64_t dim) const { + return type().norm(*this, p, dim); +} +inline Scalar Tensor::norm(Scalar p) const { + return type().norm(*this, p); +} +inline Scalar Tensor::norm() const { + return type().norm(*this); +} +inline Tensor Tensor::renorm(Scalar p, int64_t dim, Scalar maxnorm) const { + return type().renorm(*this, p, dim, maxnorm); +} +inline Tensor & Tensor::renorm_(Scalar p, int64_t dim, Scalar maxnorm) { + return type().m_renorm_(*this, p, dim, maxnorm); +} +inline Scalar Tensor::dist(const Tensor & other, Scalar p) const { + return type().dist(*this, other, p); +} +inline Scalar Tensor::dist(const Tensor & other) const { + return type().dist(*this, other); +} +inline Tensor Tensor::reciprocal() const { + return type().reciprocal(*this); +} +inline Tensor & Tensor::reciprocal_() { + return type().m_reciprocal_(*this); +} +inline Tensor Tensor::neg() const { + return type().neg(*this); +} +inline Tensor & Tensor::neg_() { + return type().m_neg_(*this); +} +inline Tensor Tensor::atan2(const Tensor & other) const { + return type().atan2(*this, other); +} +inline Tensor & Tensor::atan2_(const Tensor & other) { + return type().m_atan2_(*this, other); +} +inline Tensor Tensor::pow(Scalar exponent) const { + return type().pow(*this, exponent); +} +inline Tensor Tensor::pow(const Tensor & exponent) const { + return type().pow(*this, exponent); +} +inline Tensor & Tensor::pow_(Scalar exponent) { + return type().m_pow_(*this, exponent); +} +inline Tensor & Tensor::pow_(const Tensor & exponent) { + return type().m_pow_(*this, exponent); +} +inline Tensor Tensor::lerp(const Tensor & end, Scalar weight) const { + return type().lerp(*this, end, weight); +} +inline Tensor & Tensor::lerp_(const Tensor & end, Scalar weight) { + return type().m_lerp_(*this, end, weight); +} +inline Tensor Tensor::histc() const { + return type().histc(*this); +} +inline Tensor Tensor::histc(int64_t bins) const { + return type().histc(*this, bins); +} +inline Tensor Tensor::histc(int64_t bins, Scalar min) const { + return type().histc(*this, bins, min); +} +inline Tensor Tensor::histc(int64_t bins, Scalar min, Scalar max) const { + return type().histc(*this, bins, min, max); +} +inline Tensor & Tensor::zero_() { + return type().m_zero_(*this); +} +inline Tensor Tensor::sum(int64_t dim, bool keepdim) const { + return type().sum(*this, dim, keepdim); +} +inline Tensor Tensor::sum(int64_t dim) const { + return type().sum(*this, dim); +} +inline Scalar Tensor::sum() const { + return type().sum(*this); +} +inline Tensor Tensor::prod(int64_t dim, bool keepdim) const { + return type().prod(*this, dim, keepdim); +} +inline Tensor Tensor::prod(int64_t dim) const { + return type().prod(*this, dim); +} +inline Scalar Tensor::prod() const { + return type().prod(*this); +} +inline Tensor Tensor::cumsum(int64_t dim) const { + return type().cumsum(*this, dim); +} +inline Tensor Tensor::cumprod(int64_t dim) const { + return type().cumprod(*this, dim); +} +inline Tensor Tensor::sign() const { + return type().sign(*this); +} +inline Tensor & Tensor::sign_() { + return type().m_sign_(*this); +} +inline Scalar Tensor::trace() const { + return type().trace(*this); +} +inline Tensor Tensor::add(Scalar value, const Tensor & other) const { + return type().add(*this, value, other); +} +inline Tensor Tensor::add(Scalar value) const { + return type().add(*this, value); +} +inline Tensor Tensor::add(const Tensor & other) const { + return type().add(*this, other); +} +inline Tensor & Tensor::add_(Scalar value, const Tensor & other) { + return type().m_add_(*this, value, other); +} +inline Tensor & Tensor::add_(Scalar value) { + return type().m_add_(*this, value); +} +inline Tensor & Tensor::add_(const Tensor & other) { + return type().m_add_(*this, other); +} +inline Tensor Tensor::sub(Scalar value, const Tensor & other) const { + return type().sub(*this, value, other); +} +inline Tensor Tensor::sub(Scalar value) const { + return type().sub(*this, value); +} +inline Tensor Tensor::sub(const Tensor & other) const { + return type().sub(*this, other); +} +inline Tensor & Tensor::sub_(Scalar value, const Tensor & other) { + return type().m_sub_(*this, value, other); +} +inline Tensor & Tensor::sub_(Scalar value) { + return type().m_sub_(*this, value); +} +inline Tensor & Tensor::sub_(const Tensor & other) { + return type().m_sub_(*this, other); +} +inline Tensor Tensor::mul(Scalar value) const { + return type().mul(*this, value); +} +inline Tensor Tensor::mul(const Tensor & other) const { + return type().mul(*this, other); +} +inline Tensor & Tensor::mul_(Scalar value) { + return type().m_mul_(*this, value); +} +inline Tensor & Tensor::mul_(const Tensor & other) { + return type().m_mul_(*this, other); +} +inline Tensor Tensor::div(Scalar value) const { + return type().div(*this, value); +} +inline Tensor Tensor::div(const Tensor & other) const { + return type().div(*this, other); +} +inline Tensor & Tensor::div_(Scalar value) { + return type().m_div_(*this, value); +} +inline Tensor & Tensor::div_(const Tensor & other) { + return type().m_div_(*this, other); +} +inline Tensor Tensor::fmod(Scalar value) const { + return type().fmod(*this, value); +} +inline Tensor Tensor::fmod(const Tensor & other) const { + return type().fmod(*this, other); +} +inline Tensor & Tensor::fmod_(Scalar value) { + return type().m_fmod_(*this, value); +} +inline Tensor & Tensor::fmod_(const Tensor & other) { + return type().m_fmod_(*this, other); +} +inline Tensor Tensor::remainder(Scalar value) const { + return type().remainder(*this, value); +} +inline Tensor Tensor::remainder(const Tensor & other) const { + return type().remainder(*this, other); +} +inline Tensor & Tensor::remainder_(Scalar value) { + return type().m_remainder_(*this, value); +} +inline Tensor & Tensor::remainder_(const Tensor & other) { + return type().m_remainder_(*this, other); +} +inline Tensor Tensor::clamp(Scalar min, Scalar max) const { + return type().clamp(*this, min, max); +} +inline Tensor Tensor::clamp(Scalar min) const { + return type().clamp(*this, min); +} +inline Tensor & Tensor::clamp_(Scalar min, Scalar max) { + return type().m_clamp_(*this, min, max); +} +inline Tensor & Tensor::clamp_(Scalar min) { + return type().m_clamp_(*this, min); +} +inline Scalar Tensor::dot(const Tensor & tensor) const { + return type().dot(*this, tensor); +} +inline Tensor Tensor::tril(int64_t k) const { + return type().tril(*this, k); +} +inline Tensor Tensor::tril() const { + return type().tril(*this); +} +inline Tensor & Tensor::tril_(int64_t k) { + return type().m_tril_(*this, k); +} +inline Tensor & Tensor::tril_() { + return type().m_tril_(*this); +} +inline Tensor Tensor::triu(int64_t k) const { + return type().triu(*this, k); +} +inline Tensor Tensor::triu() const { + return type().triu(*this); +} +inline Tensor & Tensor::triu_(int64_t k) { + return type().m_triu_(*this, k); +} +inline Tensor & Tensor::triu_() { + return type().m_triu_(*this); +} +inline Tensor Tensor::cross(const Tensor & other, int64_t dim) const { + return type().cross(*this, other, dim); +} +inline Tensor Tensor::cross(const Tensor & other) const { + return type().cross(*this, other); +} +inline Tensor Tensor::diag(int64_t diagonal) const { + return type().diag(*this, diagonal); +} +inline Tensor Tensor::diag() const { + return type().diag(*this); +} +inline Tensor Tensor::addmm(Scalar beta, Scalar alpha, const Tensor & mat1, const Tensor & mat2) const { + return type().addmm(beta, *this, alpha, mat1, mat2); +} +inline Tensor Tensor::addmm(Scalar beta, const Tensor & mat1, const Tensor & mat2) const { + return type().addmm(beta, *this, mat1, mat2); +} +inline Tensor Tensor::addmm(const Tensor & mat1, const Tensor & mat2) const { + return type().addmm(*this, mat1, mat2); +} +inline Tensor & Tensor::addmm_(Scalar beta, Scalar alpha, const Tensor & mat1, const Tensor & mat2) { + return type().m_addmm_(*this, beta, alpha, mat1, mat2); +} +inline Tensor & Tensor::addmm_(Scalar beta, const Tensor & mat1, const Tensor & mat2) { + return type().m_addmm_(*this, beta, mat1, mat2); +} +inline Tensor & Tensor::addmm_(const Tensor & mat1, const Tensor & mat2) { + return type().m_addmm_(*this, mat1, mat2); +} +inline Tensor Tensor::addmv(Scalar beta, Scalar alpha, const Tensor & mat, const Tensor & vec) const { + return type().addmv(beta, *this, alpha, mat, vec); +} +inline Tensor Tensor::addmv(Scalar beta, const Tensor & mat, const Tensor & vec) const { + return type().addmv(beta, *this, mat, vec); +} +inline Tensor Tensor::addmv(const Tensor & mat, const Tensor & vec) const { + return type().addmv(*this, mat, vec); +} +inline Tensor & Tensor::addmv_(Scalar beta, Scalar alpha, const Tensor & mat, const Tensor & vec) { + return type().m_addmv_(*this, beta, alpha, mat, vec); +} +inline Tensor & Tensor::addmv_(Scalar beta, const Tensor & mat, const Tensor & vec) { + return type().m_addmv_(*this, beta, mat, vec); +} +inline Tensor & Tensor::addmv_(const Tensor & mat, const Tensor & vec) { + return type().m_addmv_(*this, mat, vec); +} +inline Tensor Tensor::addr(Scalar beta, Scalar alpha, const Tensor & vec1, const Tensor & vec2) const { + return type().addr(beta, *this, alpha, vec1, vec2); +} +inline Tensor Tensor::addr(Scalar beta, const Tensor & vec1, const Tensor & vec2) const { + return type().addr(beta, *this, vec1, vec2); +} +inline Tensor Tensor::addr(const Tensor & vec1, const Tensor & vec2) const { + return type().addr(*this, vec1, vec2); +} +inline Tensor & Tensor::addr_(Scalar beta, Scalar alpha, const Tensor & vec1, const Tensor & vec2) { + return type().m_addr_(*this, beta, alpha, vec1, vec2); +} +inline Tensor & Tensor::addr_(Scalar beta, const Tensor & vec1, const Tensor & vec2) { + return type().m_addr_(*this, beta, vec1, vec2); +} +inline Tensor & Tensor::addr_(const Tensor & vec1, const Tensor & vec2) { + return type().m_addr_(*this, vec1, vec2); +} +inline Tensor Tensor::ger(const Tensor & vec2) const { + return type().ger(*this, vec2); +} +inline Tensor Tensor::mv(const Tensor & vec) const { + return type().mv(*this, vec); +} +inline Tensor Tensor::mm(const Tensor & mat2) const { + return type().mm(*this, mat2); +} +inline Tensor Tensor::bmm(const Tensor & mat2) const { + return type().bmm(*this, mat2); +} +inline Tensor Tensor::addbmm(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) const { + return type().addbmm(beta, *this, alpha, batch1, batch2); +} +inline Tensor Tensor::addbmm(Scalar beta, const Tensor & batch1, const Tensor & batch2) const { + return type().addbmm(beta, *this, batch1, batch2); +} +inline Tensor Tensor::addbmm(const Tensor & batch1, const Tensor & batch2) const { + return type().addbmm(*this, batch1, batch2); +} +inline Tensor & Tensor::addbmm_(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) { + return type().m_addbmm_(*this, beta, alpha, batch1, batch2); +} +inline Tensor & Tensor::addbmm_(Scalar beta, const Tensor & batch1, const Tensor & batch2) { + return type().m_addbmm_(*this, beta, batch1, batch2); +} +inline Tensor & Tensor::addbmm_(const Tensor & batch1, const Tensor & batch2) { + return type().m_addbmm_(*this, batch1, batch2); +} +inline Tensor Tensor::baddbmm(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) const { + return type().baddbmm(beta, *this, alpha, batch1, batch2); +} +inline Tensor Tensor::baddbmm(Scalar beta, const Tensor & batch1, const Tensor & batch2) const { + return type().baddbmm(beta, *this, batch1, batch2); +} +inline Tensor Tensor::baddbmm(const Tensor & batch1, const Tensor & batch2) const { + return type().baddbmm(*this, batch1, batch2); +} +inline Tensor & Tensor::baddbmm_(Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) { + return type().m_baddbmm_(*this, beta, alpha, batch1, batch2); +} +inline Tensor & Tensor::baddbmm_(Scalar beta, const Tensor & batch1, const Tensor & batch2) { + return type().m_baddbmm_(*this, beta, batch1, batch2); +} +inline Tensor & Tensor::baddbmm_(const Tensor & batch1, const Tensor & batch2) { + return type().m_baddbmm_(*this, batch1, batch2); +} +inline Tensor Tensor::addcmul(Scalar value, const Tensor & tensor1, const Tensor & tensor2) const { + return type().addcmul(*this, value, tensor1, tensor2); +} +inline Tensor Tensor::addcmul(const Tensor & tensor1, const Tensor & tensor2) const { + return type().addcmul(*this, tensor1, tensor2); +} +inline Tensor & Tensor::addcmul_(Scalar value, const Tensor & tensor1, const Tensor & tensor2) { + return type().m_addcmul_(*this, value, tensor1, tensor2); +} +inline Tensor & Tensor::addcmul_(const Tensor & tensor1, const Tensor & tensor2) { + return type().m_addcmul_(*this, tensor1, tensor2); +} +inline Tensor Tensor::addcdiv(Scalar value, const Tensor & tensor1, const Tensor & tensor2) const { + return type().addcdiv(*this, value, tensor1, tensor2); +} +inline Tensor Tensor::addcdiv(const Tensor & tensor1, const Tensor & tensor2) const { + return type().addcdiv(*this, tensor1, tensor2); +} +inline Tensor & Tensor::addcdiv_(Scalar value, const Tensor & tensor1, const Tensor & tensor2) { + return type().m_addcdiv_(*this, value, tensor1, tensor2); +} +inline Tensor & Tensor::addcdiv_(const Tensor & tensor1, const Tensor & tensor2) { + return type().m_addcdiv_(*this, tensor1, tensor2); +} +inline std::tuple<Tensor,Tensor> Tensor::gesv(const Tensor & A) const { + return type().gesv(*this, A); +} +inline std::tuple<Tensor,Tensor> Tensor::gels(const Tensor & A) const { + return type().gels(*this, A); +} +inline std::tuple<Tensor,Tensor> Tensor::trtrs(const Tensor & A, bool upper, bool transpose, bool unitriangular) const { + return type().trtrs(*this, A, upper, transpose, unitriangular); +} +inline std::tuple<Tensor,Tensor> Tensor::trtrs(const Tensor & A, bool upper, bool transpose) const { + return type().trtrs(*this, A, upper, transpose); +} +inline std::tuple<Tensor,Tensor> Tensor::trtrs(const Tensor & A, bool upper) const { + return type().trtrs(*this, A, upper); +} +inline std::tuple<Tensor,Tensor> Tensor::trtrs(const Tensor & A) const { + return type().trtrs(*this, A); +} +inline std::tuple<Tensor,Tensor> Tensor::symeig(bool eigenvectors, bool upper) const { + return type().symeig(*this, eigenvectors, upper); +} +inline std::tuple<Tensor,Tensor> Tensor::symeig(bool eigenvectors) const { + return type().symeig(*this, eigenvectors); +} +inline std::tuple<Tensor,Tensor> Tensor::symeig() const { + return type().symeig(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::eig(bool eigenvectors) const { + return type().eig(*this, eigenvectors); +} +inline std::tuple<Tensor,Tensor> Tensor::eig() const { + return type().eig(*this); +} +inline std::tuple<Tensor,Tensor,Tensor> Tensor::svd(bool some) const { + return type().svd(*this, some); +} +inline std::tuple<Tensor,Tensor,Tensor> Tensor::svd() const { + return type().svd(*this); +} +inline Tensor Tensor::inverse() const { + return type().inverse(*this); +} +inline Tensor Tensor::potrf(bool upper) const { + return type().potrf(*this, upper); +} +inline Tensor Tensor::potrf() const { + return type().potrf(*this); +} +inline Tensor Tensor::potrs(const Tensor & input2, bool upper) const { + return type().potrs(*this, input2, upper); +} +inline Tensor Tensor::potrs(const Tensor & input2) const { + return type().potrs(*this, input2); +} +inline Tensor Tensor::potri(bool upper) const { + return type().potri(*this, upper); +} +inline Tensor Tensor::potri() const { + return type().potri(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::pstrf(bool upper, Scalar tol) const { + return type().pstrf(*this, upper, tol); +} +inline std::tuple<Tensor,Tensor> Tensor::pstrf(bool upper) const { + return type().pstrf(*this, upper); +} +inline std::tuple<Tensor,Tensor> Tensor::pstrf(Scalar tol) const { + return type().pstrf(*this, tol); +} +inline std::tuple<Tensor,Tensor> Tensor::pstrf() const { + return type().pstrf(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::qr() const { + return type().qr(*this); +} +inline std::tuple<Tensor,Tensor> Tensor::geqrf() const { + return type().geqrf(*this); +} +inline std::tuple<Tensor,const Tensor &> Tensor::orgqr(const Tensor & input2) const { + return type().orgqr(*this, input2); +} +inline std::tuple<Tensor,const Tensor &> Tensor::ormqr(const Tensor & input2, const Tensor & input3, bool left, bool transpose) const { + return type().ormqr(*this, input2, input3, left, transpose); +} +inline std::tuple<Tensor,const Tensor &> Tensor::ormqr(const Tensor & input2, const Tensor & input3, bool left) const { + return type().ormqr(*this, input2, input3, left); +} +inline std::tuple<Tensor,const Tensor &> Tensor::ormqr(const Tensor & input2, const Tensor & input3) const { + return type().ormqr(*this, input2, input3); +} +inline std::tuple<Tensor,Tensor> Tensor::btrifact(const Tensor & info) const { + return type().btrifact(info, *this); +} +inline std::tuple<Tensor,Tensor> Tensor::btrifact() const { + return type().btrifact(*this); +} +inline Tensor Tensor::btrisolve(const Tensor & LU_data, const Tensor & LU_pivots) const { + return type().btrisolve(*this, LU_data, LU_pivots); +} +inline Tensor Tensor::multinomial(Generator & generator, int64_t num_samples, bool replacement) const { + return type().multinomial(generator, *this, num_samples, replacement); +} +inline Tensor Tensor::multinomial(Generator & generator, int64_t num_samples) const { + return type().multinomial(generator, *this, num_samples); +} +inline Tensor Tensor::multinomial(int64_t num_samples, bool replacement) const { + return type().multinomial(*this, num_samples, replacement); +} +inline Tensor Tensor::multinomial(int64_t num_samples) const { + return type().multinomial(*this, num_samples); +} +inline Tensor & Tensor::uniform_(Generator & generator, double from, double to) { + return type().m_uniform_(*this, generator, from, to); +} +inline Tensor & Tensor::uniform_(Generator & generator, double from) { + return type().m_uniform_(*this, generator, from); +} +inline Tensor & Tensor::uniform_(double from, double to) { + return type().m_uniform_(*this, from, to); +} +inline Tensor & Tensor::uniform_(Generator & generator) { + return type().m_uniform_(*this, generator); +} +inline Tensor & Tensor::uniform_(double from) { + return type().m_uniform_(*this, from); +} +inline Tensor & Tensor::uniform_() { + return type().m_uniform_(*this); +} +inline Tensor & Tensor::cauchy_(Generator & generator, double median, double sigma) { + return type().m_cauchy_(*this, generator, median, sigma); +} +inline Tensor & Tensor::cauchy_(Generator & generator, double median) { + return type().m_cauchy_(*this, generator, median); +} +inline Tensor & Tensor::cauchy_(double median, double sigma) { + return type().m_cauchy_(*this, median, sigma); +} +inline Tensor & Tensor::cauchy_(Generator & generator) { + return type().m_cauchy_(*this, generator); +} +inline Tensor & Tensor::cauchy_(double median) { + return type().m_cauchy_(*this, median); +} +inline Tensor & Tensor::cauchy_() { + return type().m_cauchy_(*this); +} +inline Tensor & Tensor::log_normal_(Generator & generator, double mean, double std) { + return type().m_log_normal_(*this, generator, mean, std); +} +inline Tensor & Tensor::log_normal_(Generator & generator, double mean) { + return type().m_log_normal_(*this, generator, mean); +} +inline Tensor & Tensor::log_normal_(double mean, double std) { + return type().m_log_normal_(*this, mean, std); +} +inline Tensor & Tensor::log_normal_(Generator & generator) { + return type().m_log_normal_(*this, generator); +} +inline Tensor & Tensor::log_normal_(double mean) { + return type().m_log_normal_(*this, mean); +} +inline Tensor & Tensor::log_normal_() { + return type().m_log_normal_(*this); +} +inline Tensor & Tensor::geometric_(Generator & generator, double p) { + return type().m_geometric_(*this, generator, p); +} +inline Tensor & Tensor::geometric_(double p) { + return type().m_geometric_(*this, p); +} +inline int64_t Tensor::size(int64_t dim) const { + return type().m_size(*this, dim); +} +inline int64_t Tensor::stride(int64_t dim) const { + return type().m_stride(*this, dim); +} +inline Tensor Tensor::select(int dim, int64_t sliceIndex) const { + return type().select(*this, dim, sliceIndex); +} + +template<typename T> +inline T* Tensor::data() const { + runtime_error("data() cast to unexpected type."); +} +#define DEFINE_CAST(T,name,_) \ +template<> \ +inline T* Tensor::data() const { \ + AT_ASSERT(type().scalarType() == ScalarType::name, \ + "expected scalar type % s but found %s", #name, \ + at::toString(type().scalarType())); \ + return static_cast<T*>(this->data_ptr()); \ +} + +AT_FORALL_SCALAR_TYPES(DEFINE_CAST) +#undef DEFINE_CAST + +} //namespace at diff --git a/aten/doc/Type.h b/aten/doc/Type.h new file mode 100644 index 0000000000..7105558b61 --- /dev/null +++ b/aten/doc/Type.h @@ -0,0 +1,901 @@ +#pragma once + +#include <memory> + +#include "ATen/Scalar.h" +#include "ATen/ArrayRef.h" + +namespace at { + +class Context; +class Storage; +class Tensor; +class TensorRef; +class Generator; + +enum class ScalarType { +#define DEFINE_ENUM(_1,n,_2) \ + n, + AT_FORALL_SCALAR_TYPES(DEFINE_ENUM) +#undef DEFINE_ENUM + NumOptions +}; + +enum class Backend { + CPU, + CUDA, + NumOptions +}; + +constexpr Backend kCPU = Backend::CPU; +constexpr Backend kCUDA = Backend::CUDA; + +static inline const char * toString(Backend b) { + switch(b) { + case Backend::CPU: return "CPU"; + case Backend::CUDA: return "CUDA"; + default: return "UNKNOWN_BACKEND"; + } +} + +#define DEFINE_CONSTANT(_,name,_2) \ +constexpr ScalarType k##name = ScalarType::name; + +AT_FORALL_SCALAR_TYPES(DEFINE_CONSTANT) +#undef DEFINE_CONSTANT + +static inline const char * toString(ScalarType t) { +#define DEFINE_CASE(_,name,_2) \ + case ScalarType:: name : return #name; + + switch(t) { + AT_FORALL_SCALAR_TYPES(DEFINE_CASE) + default: + return "UNKNOWN_SCALAR_TYPE"; + } +#undef DEFINE_CASE +} + +struct CPUTag { + static constexpr Backend value = Backend::CPU; +}; +struct CUDATag { + static constexpr Backend value = Backend::CUDA; +}; + +enum class TypeID { + CPUByte, + CPUChar, + CPUDouble, + CPUFloat, + CPUInt, + CPULong, + CPUShort, + CPUHalf, + CUDAByte, + CUDAChar, + CUDADouble, + CUDAFloat, + CUDAInt, + CUDALong, + CUDAShort, + CUDAHalf, + NumOptions +}; + + +typedef ArrayRef<int64_t> IntList; + +struct Type { + Type(Context * context) + : context(context) {} + virtual ScalarType scalarType() = 0; + virtual Backend backend() = 0; + virtual bool isSparse() = 0; + virtual bool isDistributed() = 0; + static void registerAll(Context * context); + virtual std::unique_ptr<Storage> storage() = 0; + virtual std::unique_ptr<Storage> storage(size_t size) = 0; + virtual std::unique_ptr<Generator> generator() = 0; + virtual const char * toString() const = 0; + Type & toBackend(Backend b); + Type & toScalarType(ScalarType s); + + // contingious IDs for all types in the system + // for external dispatch + virtual TypeID ID() const = 0; + + // example + // virtual Tensor * add(Tensor & a, Tensor & b) = 0; + virtual void copy(const Tensor & src, Tensor & dst) = 0; + Tensor copy(const Tensor & src); + virtual int64_t m_storage_offset(const Tensor & self) ; + virtual int64_t m_ndimension(const Tensor & self) ; + virtual Tensor & m_resize_(Tensor & self, IntList size) ; + virtual Tensor & zeros_out(IntList size, Tensor & result) ; + virtual Tensor zeros(IntList size) ; + virtual Tensor & ones_out(IntList size, Tensor & result) ; + virtual Tensor ones(IntList size) ; + virtual int64_t numel(const Tensor & self) ; + virtual Tensor & m_set_(Tensor & self, Storage & storage) ; + virtual Tensor & m_set_(Tensor & self, Storage & sourceStorage, int64_t storage_offset, IntList size, IntList stride) ; + virtual Tensor & m_set_(Tensor & self, Storage & sourceStorage, int64_t storage_offset, IntList size) ; + virtual Tensor & m_set_(Tensor & self, const Tensor & source) ; + virtual Tensor & m_set_(Tensor & self) ; + virtual Tensor & m_fill_(Tensor & self, Scalar value) ; + virtual bool m_is_same_size(const Tensor & self, const Tensor & other) ; + virtual bool m_is_contiguous(const Tensor & self) ; + virtual bool m_is_set_to(const Tensor & self, const Tensor & tensor) ; + virtual Tensor & m_masked_fill_(Tensor & self, const Tensor & mask, Scalar value) ; + virtual Tensor & m_masked_scatter_(Tensor & self, const Tensor & mask, const Tensor & source) ; + virtual Tensor & masked_select_out(const Tensor & self, const Tensor & mask, Tensor & result) ; + virtual Tensor masked_select(const Tensor & self, const Tensor & mask) ; + virtual Tensor transpose(const Tensor & self, int64_t dim0, int64_t dim1) ; + virtual Tensor & m_transpose_(Tensor & self, int64_t dim0, int64_t dim1) ; + virtual Tensor t(const Tensor & self) ; + virtual Tensor & m_t_(Tensor & self) ; + virtual Tensor & squeeze_out(const Tensor & self, int64_t dim, Tensor & result) ; + virtual Tensor squeeze(const Tensor & self, int64_t dim) ; + virtual Tensor & squeeze_out(const Tensor & self, Tensor & result) ; + virtual Tensor squeeze(const Tensor & self) ; + virtual Tensor & m_squeeze_(Tensor & self, int64_t dim) ; + virtual Tensor & m_squeeze_(Tensor & self) ; + virtual Tensor & unsqueeze_out(const Tensor & self, int64_t dim, Tensor & result) ; + virtual Tensor unsqueeze(const Tensor & self, int64_t dim) ; + virtual Tensor & m_unsqueeze_(Tensor & self, int64_t dim) ; + virtual Tensor & nonzero_out(const Tensor & self, Tensor & result) ; + virtual Tensor nonzero(const Tensor & self) ; + virtual Tensor m_contiguous(const Tensor & self) ; + virtual Tensor m_clone(const Tensor & self) ; + virtual Tensor m_view(const Tensor & self, IntList size) ; + virtual Tensor m_expand(const Tensor & self, IntList size) ; + virtual Tensor & m_resize_as_(Tensor & self, const Tensor & the_template) ; + virtual Tensor & index_select_out(const Tensor & self, int64_t dim, const Tensor & index, Tensor & result) ; + virtual Tensor index_select(const Tensor & self, int64_t dim, const Tensor & index) ; + virtual Tensor & m_index_copy_(Tensor & self, int64_t dim, const Tensor & index, const Tensor & source) ; + virtual Tensor & m_index_add_(Tensor & self, int64_t dim, const Tensor & index, const Tensor & source) ; + virtual Tensor & m_index_fill_(Tensor & self, int64_t dim, const Tensor & index, Scalar value) ; + virtual Tensor m_narrow(const Tensor & self, int64_t dimension, int64_t start, int64_t length) ; + virtual Tensor m_unfold(const Tensor & self, int64_t dimension, int64_t size, int64_t step) ; + virtual Tensor & range_out(Scalar start, Scalar end, Scalar step, Tensor & result) ; + virtual Tensor range(Scalar start, Scalar end, Scalar step) ; + virtual Tensor & range_out(Scalar start, Scalar end, Tensor & result) ; + virtual Tensor range(Scalar start, Scalar end) ; + virtual Tensor & m_scatter_(Tensor & self, int64_t dim, const Tensor & index, const Tensor & src) ; + virtual Tensor & m_scatter_(Tensor & self, int64_t dim, const Tensor & index, Scalar value) ; + virtual Tensor & m_scatter_add_(Tensor & self, int64_t dim, const Tensor & index, const Tensor & src) ; + virtual Tensor & gather_out(const Tensor & self, int64_t dim, const Tensor & index, Tensor & result) ; + virtual Tensor gather(const Tensor & self, int64_t dim, const Tensor & index) ; + virtual void* m_data_ptr(const Tensor & self) ; + virtual bool equal(const Tensor & self, const Tensor & other) ; + virtual Tensor & __and___out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor __and__(const Tensor & self, Scalar value) ; + virtual Tensor & __and___out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor __and__(const Tensor & self, const Tensor & other) ; + virtual Tensor & __iand__(Tensor & self, Scalar value) ; + virtual Tensor & __iand__(Tensor & self, const Tensor & other) ; + virtual Tensor & __or___out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor __or__(const Tensor & self, Scalar value) ; + virtual Tensor & __or___out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor __or__(const Tensor & self, const Tensor & other) ; + virtual Tensor & __ior__(Tensor & self, Scalar value) ; + virtual Tensor & __ior__(Tensor & self, const Tensor & other) ; + virtual Tensor & __xor___out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor __xor__(const Tensor & self, Scalar value) ; + virtual Tensor & __xor___out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor __xor__(const Tensor & self, const Tensor & other) ; + virtual Tensor & __ixor__(Tensor & self, Scalar value) ; + virtual Tensor & __ixor__(Tensor & self, const Tensor & other) ; + virtual Tensor & __lshift___out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor __lshift__(const Tensor & self, Scalar value) ; + virtual Tensor & __lshift___out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor __lshift__(const Tensor & self, const Tensor & other) ; + virtual Tensor & __ilshift__(Tensor & self, Scalar value) ; + virtual Tensor & __ilshift__(Tensor & self, const Tensor & other) ; + virtual Tensor & __rshift___out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor __rshift__(const Tensor & self, Scalar value) ; + virtual Tensor & __rshift___out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor __rshift__(const Tensor & self, const Tensor & other) ; + virtual Tensor & __irshift__(Tensor & self, Scalar value) ; + virtual Tensor & __irshift__(Tensor & self, const Tensor & other) ; + virtual Tensor m_lt(const Tensor & self, Scalar value) ; + virtual Tensor m_lt(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_lt_(Tensor & self, Scalar value) ; + virtual Tensor & m_lt_(Tensor & self, const Tensor & other) ; + virtual Tensor & lt_out(const Tensor & tensor, Scalar value, Tensor & result) ; + virtual Tensor lt(const Tensor & tensor, Scalar value) ; + virtual Tensor & lt_out(const Tensor & tensor, const Tensor & other, Tensor & result) ; + virtual Tensor lt(const Tensor & tensor, const Tensor & other) ; + virtual Tensor m_gt(const Tensor & self, Scalar value) ; + virtual Tensor m_gt(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_gt_(Tensor & self, Scalar value) ; + virtual Tensor & m_gt_(Tensor & self, const Tensor & other) ; + virtual Tensor & gt_out(const Tensor & tensor, Scalar value, Tensor & result) ; + virtual Tensor gt(const Tensor & tensor, Scalar value) ; + virtual Tensor & gt_out(const Tensor & tensor, const Tensor & other, Tensor & result) ; + virtual Tensor gt(const Tensor & tensor, const Tensor & other) ; + virtual Tensor m_le(const Tensor & self, Scalar value) ; + virtual Tensor m_le(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_le_(Tensor & self, Scalar value) ; + virtual Tensor & m_le_(Tensor & self, const Tensor & other) ; + virtual Tensor & le_out(const Tensor & tensor, Scalar value, Tensor & result) ; + virtual Tensor le(const Tensor & tensor, Scalar value) ; + virtual Tensor & le_out(const Tensor & tensor, const Tensor & other, Tensor & result) ; + virtual Tensor le(const Tensor & tensor, const Tensor & other) ; + virtual Tensor m_ge(const Tensor & self, Scalar value) ; + virtual Tensor m_ge(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_ge_(Tensor & self, Scalar value) ; + virtual Tensor & m_ge_(Tensor & self, const Tensor & other) ; + virtual Tensor & ge_out(const Tensor & tensor, Scalar value, Tensor & result) ; + virtual Tensor ge(const Tensor & tensor, Scalar value) ; + virtual Tensor & ge_out(const Tensor & tensor, const Tensor & other, Tensor & result) ; + virtual Tensor ge(const Tensor & tensor, const Tensor & other) ; + virtual Tensor m_eq(const Tensor & self, Scalar value) ; + virtual Tensor m_eq(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_eq_(Tensor & self, Scalar value) ; + virtual Tensor & m_eq_(Tensor & self, const Tensor & other) ; + virtual Tensor & eq_out(const Tensor & tensor, Scalar value, Tensor & result) ; + virtual Tensor eq(const Tensor & tensor, Scalar value) ; + virtual Tensor & eq_out(const Tensor & tensor, const Tensor & other, Tensor & result) ; + virtual Tensor eq(const Tensor & tensor, const Tensor & other) ; + virtual Tensor m_ne(const Tensor & self, Scalar value) ; + virtual Tensor m_ne(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_ne_(Tensor & self, Scalar value) ; + virtual Tensor & m_ne_(Tensor & self, const Tensor & other) ; + virtual Tensor & ne_out(const Tensor & tensor, Scalar value, Tensor & result) ; + virtual Tensor ne(const Tensor & tensor, Scalar value) ; + virtual Tensor & ne_out(const Tensor & tensor, const Tensor & other, Tensor & result) ; + virtual Tensor ne(const Tensor & tensor, const Tensor & other) ; + virtual std::tuple<Tensor &,Tensor &> min_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & min, Tensor & min_indices) ; + virtual std::tuple<Tensor,Tensor> min(const Tensor & self, int64_t dim, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> min_out(const Tensor & self, int64_t dim, Tensor & min, Tensor & min_indices) ; + virtual std::tuple<Tensor,Tensor> min(const Tensor & self, int64_t dim) ; + virtual Tensor & min_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor min(const Tensor & self, const Tensor & other) ; + virtual Scalar min(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> max_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & max, Tensor & max_indices) ; + virtual std::tuple<Tensor,Tensor> max(const Tensor & self, int64_t dim, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> max_out(const Tensor & self, int64_t dim, Tensor & max, Tensor & max_indices) ; + virtual std::tuple<Tensor,Tensor> max(const Tensor & self, int64_t dim) ; + virtual Tensor & max_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor max(const Tensor & self, const Tensor & other) ; + virtual Scalar max(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, bool keepdim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k) ; + virtual std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, int64_t dim, bool keepdim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, int64_t dim, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> kthvalue_out(const Tensor & self, int64_t k, int64_t dim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> kthvalue(const Tensor & self, int64_t k, int64_t dim) ; + virtual std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, bool keepdim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> mode(const Tensor & self, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> mode(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> mode(const Tensor & self, int64_t dim, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> mode_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> mode(const Tensor & self, int64_t dim) ; + virtual std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, bool keepdim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> median(const Tensor & self, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> median(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> median(const Tensor & self, int64_t dim) ; + virtual std::tuple<Tensor &,Tensor &> median_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> median(const Tensor & self, int64_t dim, bool keepdim) ; + virtual std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> sort(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, int64_t dim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> sort(const Tensor & self, int64_t dim) ; + virtual std::tuple<Tensor &,Tensor &> sort_out(const Tensor & self, int64_t dim, bool descending, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> sort(const Tensor & self, int64_t dim, bool descending) ; + virtual std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k) ; + virtual std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, bool largest, bool sorted, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim, bool largest, bool sorted) ; + virtual std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, bool largest, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim, bool largest) ; + virtual std::tuple<Tensor &,Tensor &> topk_out(const Tensor & self, int64_t k, int64_t dim, Tensor & values, Tensor & indices) ; + virtual std::tuple<Tensor,Tensor> topk(const Tensor & self, int64_t k, int64_t dim) ; + virtual bool m_all(const Tensor & self) ; + virtual bool m_any(const Tensor & self) ; + virtual int64_t m_get_device(const Tensor & self) ; + virtual Tensor & abs_out(const Tensor & self, Tensor & destination) ; + virtual Tensor abs(const Tensor & self) ; + virtual Tensor & m_abs_(Tensor & self) ; + virtual Tensor & m_sigmoid_(Tensor & self) ; + virtual Tensor & sigmoid_out(const Tensor & self, Tensor & result) ; + virtual Tensor sigmoid(const Tensor & self) ; + virtual Tensor & m_log_(Tensor & self) ; + virtual Tensor & log_out(const Tensor & self, Tensor & result) ; + virtual Tensor log(const Tensor & self) ; + virtual Tensor & m_log1p_(Tensor & self) ; + virtual Tensor & log1p_out(const Tensor & self, Tensor & result) ; + virtual Tensor log1p(const Tensor & self) ; + virtual Tensor & lgamma_out(const Tensor & self, Tensor & result) ; + virtual Tensor lgamma(const Tensor & self) ; + virtual Tensor & m_lgamma_(Tensor & self) ; + virtual Tensor & m_exp_(Tensor & self) ; + virtual Tensor & exp_out(const Tensor & self, Tensor & result) ; + virtual Tensor exp(const Tensor & self) ; + virtual Tensor & m_cos_(Tensor & self) ; + virtual Tensor & cos_out(const Tensor & self, Tensor & result) ; + virtual Tensor cos(const Tensor & self) ; + virtual Tensor & m_acos_(Tensor & self) ; + virtual Tensor & acos_out(const Tensor & self, Tensor & result) ; + virtual Tensor acos(const Tensor & self) ; + virtual Tensor & m_cosh_(Tensor & self) ; + virtual Tensor & cosh_out(const Tensor & self, Tensor & result) ; + virtual Tensor cosh(const Tensor & self) ; + virtual Tensor & m_sin_(Tensor & self) ; + virtual Tensor & sin_out(const Tensor & self, Tensor & result) ; + virtual Tensor sin(const Tensor & self) ; + virtual Tensor & m_asin_(Tensor & self) ; + virtual Tensor & asin_out(const Tensor & self, Tensor & result) ; + virtual Tensor asin(const Tensor & self) ; + virtual Tensor & m_sinh_(Tensor & self) ; + virtual Tensor & sinh_out(const Tensor & self, Tensor & result) ; + virtual Tensor sinh(const Tensor & self) ; + virtual Tensor & m_tan_(Tensor & self) ; + virtual Tensor & tan_out(const Tensor & self, Tensor & result) ; + virtual Tensor tan(const Tensor & self) ; + virtual Tensor & m_atan_(Tensor & self) ; + virtual Tensor & atan_out(const Tensor & self, Tensor & result) ; + virtual Tensor atan(const Tensor & self) ; + virtual Tensor & m_tanh_(Tensor & self) ; + virtual Tensor & tanh_out(const Tensor & self, Tensor & result) ; + virtual Tensor tanh(const Tensor & self) ; + virtual Tensor & m_sqrt_(Tensor & self) ; + virtual Tensor & sqrt_out(const Tensor & self, Tensor & result) ; + virtual Tensor sqrt(const Tensor & self) ; + virtual Tensor & m_rsqrt_(Tensor & self) ; + virtual Tensor & rsqrt_out(const Tensor & self, Tensor & result) ; + virtual Tensor rsqrt(const Tensor & self) ; + virtual Tensor & m_ceil_(Tensor & self) ; + virtual Tensor & ceil_out(const Tensor & self, Tensor & result) ; + virtual Tensor ceil(const Tensor & self) ; + virtual Tensor & m_floor_(Tensor & self) ; + virtual Tensor & floor_out(const Tensor & self, Tensor & result) ; + virtual Tensor floor(const Tensor & self) ; + virtual Tensor & m_round_(Tensor & self) ; + virtual Tensor & round_out(const Tensor & self, Tensor & result) ; + virtual Tensor round(const Tensor & self) ; + virtual Tensor & m_trunc_(Tensor & self) ; + virtual Tensor & trunc_out(const Tensor & self, Tensor & result) ; + virtual Tensor trunc(const Tensor & self) ; + virtual Tensor & m_frac_(Tensor & self) ; + virtual Tensor & frac_out(const Tensor & self, Tensor & result) ; + virtual Tensor frac(const Tensor & self) ; + virtual Tensor & mean_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination) ; + virtual Tensor mean(const Tensor & self, int64_t dim, bool keepdim) ; + virtual Tensor & mean_out(const Tensor & self, int64_t dim, Tensor & destination) ; + virtual Tensor mean(const Tensor & self, int64_t dim) ; + virtual Scalar mean(const Tensor & self) ; + virtual Tensor & var_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination) ; + virtual Tensor var(const Tensor & self, int64_t dim, bool keepdim) ; + virtual Tensor & var_out(const Tensor & self, int64_t dim, Tensor & destination) ; + virtual Tensor var(const Tensor & self, int64_t dim) ; + virtual Scalar var(const Tensor & self) ; + virtual Tensor & std_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & destination) ; + virtual Tensor std(const Tensor & self, int64_t dim, bool keepdim) ; + virtual Tensor & std_out(const Tensor & self, int64_t dim, Tensor & destination) ; + virtual Tensor std(const Tensor & self, int64_t dim) ; + virtual Scalar std(const Tensor & self) ; + virtual Tensor & norm_out(const Tensor & self, Scalar p, int64_t dim, bool keepdim, Tensor & destination) ; + virtual Tensor norm(const Tensor & self, Scalar p, int64_t dim, bool keepdim) ; + virtual Tensor & norm_out(const Tensor & self, Scalar p, int64_t dim, Tensor & destination) ; + virtual Tensor norm(const Tensor & self, Scalar p, int64_t dim) ; + virtual Scalar norm(const Tensor & self, Scalar p) ; + virtual Scalar norm(const Tensor & self) ; + virtual Tensor & renorm_out(const Tensor & self, Scalar p, int64_t dim, Scalar maxnorm, Tensor & destination) ; + virtual Tensor renorm(const Tensor & self, Scalar p, int64_t dim, Scalar maxnorm) ; + virtual Tensor & m_renorm_(Tensor & self, Scalar p, int64_t dim, Scalar maxnorm) ; + virtual Scalar dist(const Tensor & self, const Tensor & other, Scalar p) ; + virtual Scalar dist(const Tensor & self, const Tensor & other) ; + virtual Tensor & reciprocal_out(const Tensor & self, Tensor & destination) ; + virtual Tensor reciprocal(const Tensor & self) ; + virtual Tensor & m_reciprocal_(Tensor & self) ; + virtual Tensor & neg_out(const Tensor & self, Tensor & destination) ; + virtual Tensor neg(const Tensor & self) ; + virtual Tensor & m_neg_(Tensor & self) ; + virtual Tensor & atan2_out(const Tensor & self, const Tensor & other, Tensor & destination) ; + virtual Tensor atan2(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_atan2_(Tensor & self, const Tensor & other) ; + virtual Tensor & pow_out(const Tensor & self, Scalar exponent, Tensor & destination) ; + virtual Tensor pow(const Tensor & self, Scalar exponent) ; + virtual Tensor & pow_out(const Tensor & self, const Tensor & exponent, Tensor & destination) ; + virtual Tensor pow(const Tensor & self, const Tensor & exponent) ; + virtual Tensor & m_pow_(Tensor & self, Scalar exponent) ; + virtual Tensor & m_pow_(Tensor & self, const Tensor & exponent) ; + virtual Tensor & lerp_out(const Tensor & self, const Tensor & end, Scalar weight, Tensor & destination) ; + virtual Tensor lerp(const Tensor & self, const Tensor & end, Scalar weight) ; + virtual Tensor & m_lerp_(Tensor & self, const Tensor & end, Scalar weight) ; + virtual Tensor & linspace_out(Scalar start, Scalar end, int64_t steps, Tensor & result) ; + virtual Tensor linspace(Scalar start, Scalar end, int64_t steps) ; + virtual Tensor & linspace_out(Scalar start, Scalar end, Tensor & result) ; + virtual Tensor linspace(Scalar start, Scalar end) ; + virtual Tensor & logspace_out(Scalar start, Scalar end, int64_t steps, Tensor & result) ; + virtual Tensor logspace(Scalar start, Scalar end, int64_t steps) ; + virtual Tensor & logspace_out(Scalar start, Scalar end, Tensor & result) ; + virtual Tensor logspace(Scalar start, Scalar end) ; + virtual Tensor & histc_out(const Tensor & self, Tensor & destination) ; + virtual Tensor histc(const Tensor & self) ; + virtual Tensor & histc_out(const Tensor & self, int64_t bins, Tensor & destination) ; + virtual Tensor histc(const Tensor & self, int64_t bins) ; + virtual Tensor & histc_out(const Tensor & self, int64_t bins, Scalar min, Tensor & destination) ; + virtual Tensor histc(const Tensor & self, int64_t bins, Scalar min) ; + virtual Tensor & histc_out(const Tensor & self, int64_t bins, Scalar min, Scalar max, Tensor & destination) ; + virtual Tensor histc(const Tensor & self, int64_t bins, Scalar min, Scalar max) ; + virtual Tensor & m_zero_(Tensor & self) ; + virtual Tensor & sum_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & result) ; + virtual Tensor sum(const Tensor & self, int64_t dim, bool keepdim) ; + virtual Tensor & sum_out(const Tensor & self, int64_t dim, Tensor & result) ; + virtual Tensor sum(const Tensor & self, int64_t dim) ; + virtual Scalar sum(const Tensor & self) ; + virtual Tensor & prod_out(const Tensor & self, int64_t dim, bool keepdim, Tensor & result) ; + virtual Tensor prod(const Tensor & self, int64_t dim, bool keepdim) ; + virtual Tensor & prod_out(const Tensor & self, int64_t dim, Tensor & result) ; + virtual Tensor prod(const Tensor & self, int64_t dim) ; + virtual Scalar prod(const Tensor & self) ; + virtual Tensor & cumsum_out(const Tensor & self, int64_t dim, Tensor & result) ; + virtual Tensor cumsum(const Tensor & self, int64_t dim) ; + virtual Tensor & cumprod_out(const Tensor & self, int64_t dim, Tensor & result) ; + virtual Tensor cumprod(const Tensor & self, int64_t dim) ; + virtual Tensor & sign_out(const Tensor & self, Tensor & result) ; + virtual Tensor sign(const Tensor & self) ; + virtual Tensor & m_sign_(Tensor & self) ; + virtual Scalar trace(const Tensor & self) ; + virtual Tensor & add_out(const Tensor & self, Scalar value, const Tensor & other, Tensor & result) ; + virtual Tensor add(const Tensor & self, Scalar value, const Tensor & other) ; + virtual Tensor & add_out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor add(const Tensor & self, Scalar value) ; + virtual Tensor & add_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor add(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_add_(Tensor & self, Scalar value, const Tensor & other) ; + virtual Tensor & m_add_(Tensor & self, Scalar value) ; + virtual Tensor & m_add_(Tensor & self, const Tensor & other) ; + virtual Tensor & sub_out(const Tensor & self, Scalar value, const Tensor & other, Tensor & result) ; + virtual Tensor sub(const Tensor & self, Scalar value, const Tensor & other) ; + virtual Tensor & sub_out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor sub(const Tensor & self, Scalar value) ; + virtual Tensor & sub_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor sub(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_sub_(Tensor & self, Scalar value, const Tensor & other) ; + virtual Tensor & m_sub_(Tensor & self, Scalar value) ; + virtual Tensor & m_sub_(Tensor & self, const Tensor & other) ; + virtual Tensor & mul_out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor mul(const Tensor & self, Scalar value) ; + virtual Tensor & mul_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor mul(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_mul_(Tensor & self, Scalar value) ; + virtual Tensor & m_mul_(Tensor & self, const Tensor & other) ; + virtual Tensor & div_out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor div(const Tensor & self, Scalar value) ; + virtual Tensor & div_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor div(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_div_(Tensor & self, Scalar value) ; + virtual Tensor & m_div_(Tensor & self, const Tensor & other) ; + virtual Tensor & fmod_out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor fmod(const Tensor & self, Scalar value) ; + virtual Tensor & fmod_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor fmod(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_fmod_(Tensor & self, Scalar value) ; + virtual Tensor & m_fmod_(Tensor & self, const Tensor & other) ; + virtual Tensor & remainder_out(const Tensor & self, Scalar value, Tensor & result) ; + virtual Tensor remainder(const Tensor & self, Scalar value) ; + virtual Tensor & remainder_out(const Tensor & self, const Tensor & other, Tensor & result) ; + virtual Tensor remainder(const Tensor & self, const Tensor & other) ; + virtual Tensor & m_remainder_(Tensor & self, Scalar value) ; + virtual Tensor & m_remainder_(Tensor & self, const Tensor & other) ; + virtual Tensor & clamp_out(const Tensor & self, Scalar min, Scalar max, Tensor & destination) ; + virtual Tensor clamp(const Tensor & self, Scalar min, Scalar max) ; + virtual Tensor & clamp_out(const Tensor & self, Scalar min, Tensor & result) ; + virtual Tensor clamp(const Tensor & self, Scalar min) ; + virtual Tensor & m_clamp_(Tensor & self, Scalar min, Scalar max) ; + virtual Tensor & m_clamp_(Tensor & self, Scalar min) ; + virtual Scalar dot(const Tensor & self, const Tensor & tensor) ; + virtual Tensor & tril_out(const Tensor & self, int64_t k, Tensor & destination) ; + virtual Tensor tril(const Tensor & self, int64_t k) ; + virtual Tensor & tril_out(const Tensor & self, Tensor & destination) ; + virtual Tensor tril(const Tensor & self) ; + virtual Tensor & m_tril_(Tensor & self, int64_t k) ; + virtual Tensor & m_tril_(Tensor & self) ; + virtual Tensor & triu_out(const Tensor & self, int64_t k, Tensor & destination) ; + virtual Tensor triu(const Tensor & self, int64_t k) ; + virtual Tensor & triu_out(const Tensor & self, Tensor & destination) ; + virtual Tensor triu(const Tensor & self) ; + virtual Tensor & m_triu_(Tensor & self, int64_t k) ; + virtual Tensor & m_triu_(Tensor & self) ; + virtual Tensor & cross_out(const Tensor & self, const Tensor & other, int64_t dim, Tensor & destination) ; + virtual Tensor cross(const Tensor & self, const Tensor & other, int64_t dim) ; + virtual Tensor & cross_out(const Tensor & self, const Tensor & other, Tensor & destination) ; + virtual Tensor cross(const Tensor & self, const Tensor & other) ; + virtual Tensor & eye_out(int64_t n, Tensor & result) ; + virtual Tensor eye(int64_t n) ; + virtual Tensor & eye_out(int64_t n, int64_t m, Tensor & result) ; + virtual Tensor eye(int64_t n, int64_t m) ; + virtual Tensor & diag_out(const Tensor & self, int64_t diagonal, Tensor & result) ; + virtual Tensor diag(const Tensor & self, int64_t diagonal) ; + virtual Tensor & diag_out(const Tensor & self, Tensor & result) ; + virtual Tensor diag(const Tensor & self) ; + virtual Tensor & addmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat1, const Tensor & mat2, Tensor & result) ; + virtual Tensor addmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat1, const Tensor & mat2) ; + virtual Tensor & addmm_out(Scalar beta, const Tensor & self, const Tensor & mat1, const Tensor & mat2, Tensor & result) ; + virtual Tensor addmm(Scalar beta, const Tensor & self, const Tensor & mat1, const Tensor & mat2) ; + virtual Tensor & addmm_out(const Tensor & self, const Tensor & mat1, const Tensor & mat2, Tensor & result) ; + virtual Tensor addmm(const Tensor & self, const Tensor & mat1, const Tensor & mat2) ; + virtual Tensor & m_addmm_(Tensor & self, Scalar beta, Scalar alpha, const Tensor & mat1, const Tensor & mat2) ; + virtual Tensor & m_addmm_(Tensor & self, Scalar beta, const Tensor & mat1, const Tensor & mat2) ; + virtual Tensor & m_addmm_(Tensor & self, const Tensor & mat1, const Tensor & mat2) ; + virtual Tensor & addmv_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat, const Tensor & vec, Tensor & result) ; + virtual Tensor addmv(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & mat, const Tensor & vec) ; + virtual Tensor & addmv_out(Scalar beta, const Tensor & self, const Tensor & mat, const Tensor & vec, Tensor & result) ; + virtual Tensor addmv(Scalar beta, const Tensor & self, const Tensor & mat, const Tensor & vec) ; + virtual Tensor & addmv_out(const Tensor & self, const Tensor & mat, const Tensor & vec, Tensor & result) ; + virtual Tensor addmv(const Tensor & self, const Tensor & mat, const Tensor & vec) ; + virtual Tensor & m_addmv_(Tensor & self, Scalar beta, Scalar alpha, const Tensor & mat, const Tensor & vec) ; + virtual Tensor & m_addmv_(Tensor & self, Scalar beta, const Tensor & mat, const Tensor & vec) ; + virtual Tensor & m_addmv_(Tensor & self, const Tensor & mat, const Tensor & vec) ; + virtual Tensor & addr_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & vec1, const Tensor & vec2, Tensor & result) ; + virtual Tensor addr(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & vec1, const Tensor & vec2) ; + virtual Tensor & addr_out(Scalar beta, const Tensor & self, const Tensor & vec1, const Tensor & vec2, Tensor & result) ; + virtual Tensor addr(Scalar beta, const Tensor & self, const Tensor & vec1, const Tensor & vec2) ; + virtual Tensor & addr_out(const Tensor & self, const Tensor & vec1, const Tensor & vec2, Tensor & result) ; + virtual Tensor addr(const Tensor & self, const Tensor & vec1, const Tensor & vec2) ; + virtual Tensor & m_addr_(Tensor & self, Scalar beta, Scalar alpha, const Tensor & vec1, const Tensor & vec2) ; + virtual Tensor & m_addr_(Tensor & self, Scalar beta, const Tensor & vec1, const Tensor & vec2) ; + virtual Tensor & m_addr_(Tensor & self, const Tensor & vec1, const Tensor & vec2) ; + virtual Tensor & ger_out(const Tensor & self, const Tensor & vec2, Tensor & result) ; + virtual Tensor ger(const Tensor & self, const Tensor & vec2) ; + virtual Tensor & mv_out(const Tensor & self, const Tensor & vec, Tensor & result) ; + virtual Tensor mv(const Tensor & self, const Tensor & vec) ; + virtual Tensor & mm_out(const Tensor & self, const Tensor & mat2, Tensor & result) ; + virtual Tensor mm(const Tensor & self, const Tensor & mat2) ; + virtual Tensor & bmm_out(const Tensor & self, const Tensor & mat2, Tensor & result) ; + virtual Tensor bmm(const Tensor & self, const Tensor & mat2) ; + virtual Tensor & addbmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2, Tensor & result) ; + virtual Tensor addbmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & addbmm_out(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) ; + virtual Tensor addbmm(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & addbmm_out(const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) ; + virtual Tensor addbmm(const Tensor & self, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & m_addbmm_(Tensor & self, Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & m_addbmm_(Tensor & self, Scalar beta, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & m_addbmm_(Tensor & self, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & baddbmm_out(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2, Tensor & result) ; + virtual Tensor baddbmm(Scalar beta, const Tensor & self, Scalar alpha, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & baddbmm_out(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) ; + virtual Tensor baddbmm(Scalar beta, const Tensor & self, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & baddbmm_out(const Tensor & self, const Tensor & batch1, const Tensor & batch2, Tensor & result) ; + virtual Tensor baddbmm(const Tensor & self, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & m_baddbmm_(Tensor & self, Scalar beta, Scalar alpha, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & m_baddbmm_(Tensor & self, Scalar beta, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & m_baddbmm_(Tensor & self, const Tensor & batch1, const Tensor & batch2) ; + virtual Tensor & addcmul_out(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) ; + virtual Tensor addcmul(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & addcmul_out(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) ; + virtual Tensor addcmul(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & m_addcmul_(Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & m_addcmul_(Tensor & self, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & addcdiv_out(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) ; + virtual Tensor addcdiv(const Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & addcdiv_out(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2, Tensor & result) ; + virtual Tensor addcdiv(const Tensor & self, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & m_addcdiv_(Tensor & self, Scalar value, const Tensor & tensor1, const Tensor & tensor2) ; + virtual Tensor & m_addcdiv_(Tensor & self, const Tensor & tensor1, const Tensor & tensor2) ; + virtual std::tuple<Tensor &,Tensor &> gesv_out(const Tensor & self, const Tensor & A, Tensor & solution, Tensor & lu) ; + virtual std::tuple<Tensor,Tensor> gesv(const Tensor & self, const Tensor & A) ; + virtual std::tuple<Tensor &,Tensor &> gels_out(const Tensor & self, const Tensor & A, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> gels(const Tensor & self, const Tensor & A) ; + virtual std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, bool transpose, bool unitriangular, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper, bool transpose, bool unitriangular) ; + virtual std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, bool transpose, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper, bool transpose) ; + virtual std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, bool upper, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A, bool upper) ; + virtual std::tuple<Tensor &,Tensor &> trtrs_out(const Tensor & self, const Tensor & A, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> trtrs(const Tensor & self, const Tensor & A) ; + virtual std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, bool eigenvectors, bool upper, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> symeig(const Tensor & self, bool eigenvectors, bool upper) ; + virtual std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, bool eigenvectors, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> symeig(const Tensor & self, bool eigenvectors) ; + virtual std::tuple<Tensor &,Tensor &> symeig_out(const Tensor & self, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> symeig(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> eig_out(const Tensor & self, bool eigenvectors, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> eig(const Tensor & self, bool eigenvectors) ; + virtual std::tuple<Tensor &,Tensor &> eig_out(const Tensor & self, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> eig(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &,Tensor &> svd_out(const Tensor & self, bool some, Tensor & res1, Tensor & res2, Tensor & res3) ; + virtual std::tuple<Tensor,Tensor,Tensor> svd(const Tensor & self, bool some) ; + virtual std::tuple<Tensor &,Tensor &,Tensor &> svd_out(const Tensor & self, Tensor & res1, Tensor & res2, Tensor & res3) ; + virtual std::tuple<Tensor,Tensor,Tensor> svd(const Tensor & self) ; + virtual Tensor & inverse_out(const Tensor & self, Tensor & output) ; + virtual Tensor inverse(const Tensor & self) ; + virtual Tensor & potrf_out(const Tensor & self, bool upper, Tensor & output) ; + virtual Tensor potrf(const Tensor & self, bool upper) ; + virtual Tensor & potrf_out(const Tensor & self, Tensor & output) ; + virtual Tensor potrf(const Tensor & self) ; + virtual Tensor & potrs_out(const Tensor & self, const Tensor & input2, bool upper, Tensor & result) ; + virtual Tensor potrs(const Tensor & self, const Tensor & input2, bool upper) ; + virtual Tensor & potrs_out(const Tensor & self, const Tensor & input2, Tensor & result) ; + virtual Tensor potrs(const Tensor & self, const Tensor & input2) ; + virtual Tensor & potri_out(const Tensor & self, bool upper, Tensor & output) ; + virtual Tensor potri(const Tensor & self, bool upper) ; + virtual Tensor & potri_out(const Tensor & self, Tensor & output) ; + virtual Tensor potri(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, bool upper, Scalar tol, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> pstrf(const Tensor & self, bool upper, Scalar tol) ; + virtual std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, bool upper, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> pstrf(const Tensor & self, bool upper) ; + virtual std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, Scalar tol, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> pstrf(const Tensor & self, Scalar tol) ; + virtual std::tuple<Tensor &,Tensor &> pstrf_out(const Tensor & self, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> pstrf(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> qr_out(const Tensor & self, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> qr(const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> geqrf_out(const Tensor & self, Tensor & res1, Tensor & res2) ; + virtual std::tuple<Tensor,Tensor> geqrf(const Tensor & self) ; + virtual std::tuple<Tensor &,const Tensor &> orgqr_out(const Tensor & self, const Tensor & input2, Tensor & result) ; + virtual std::tuple<Tensor,const Tensor &> orgqr(const Tensor & self, const Tensor & input2) ; + virtual std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, bool transpose, Tensor & result) ; + virtual std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, bool transpose) ; + virtual std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left, Tensor & result) ; + virtual std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3, bool left) ; + virtual std::tuple<Tensor &,const Tensor &> ormqr_out(const Tensor & self, const Tensor & input2, const Tensor & input3, Tensor & result) ; + virtual std::tuple<Tensor,const Tensor &> ormqr(const Tensor & self, const Tensor & input2, const Tensor & input3) ; + virtual std::tuple<Tensor &,Tensor &> btrifact_out(const Tensor & info, const Tensor & self, Tensor & result, Tensor & pivots) ; + virtual std::tuple<Tensor,Tensor> btrifact(const Tensor & info, const Tensor & self) ; + virtual std::tuple<Tensor &,Tensor &> btrifact_out(const Tensor & self, Tensor & result, Tensor & pivots) ; + virtual std::tuple<Tensor,Tensor> btrifact(const Tensor & self) ; + virtual Tensor & btrisolve_out(const Tensor & self, const Tensor & LU_data, const Tensor & LU_pivots, Tensor & result) ; + virtual Tensor btrisolve(const Tensor & self, const Tensor & LU_data, const Tensor & LU_pivots) ; + virtual Tensor & randperm_out(Generator & generator, int64_t n, Tensor & result) ; + virtual Tensor randperm(Generator & generator, int64_t n) ; + virtual Tensor & randperm_out(int64_t n, Tensor & result) ; + virtual Tensor randperm(int64_t n) ; + virtual Tensor & multinomial_out(Generator & generator, const Tensor & self, int64_t num_samples, bool replacement, Tensor & result) ; + virtual Tensor multinomial(Generator & generator, const Tensor & self, int64_t num_samples, bool replacement) ; + virtual Tensor & multinomial_out(Generator & generator, const Tensor & self, int64_t num_samples, Tensor & result) ; + virtual Tensor multinomial(Generator & generator, const Tensor & self, int64_t num_samples) ; + virtual Tensor & multinomial_out(const Tensor & self, int64_t num_samples, bool replacement, Tensor & result) ; + virtual Tensor multinomial(const Tensor & self, int64_t num_samples, bool replacement) ; + virtual Tensor & multinomial_out(const Tensor & self, int64_t num_samples, Tensor & result) ; + virtual Tensor multinomial(const Tensor & self, int64_t num_samples) ; + virtual Tensor & m_uniform_(Tensor & self, Generator & generator, double from, double to) ; + virtual Tensor & m_uniform_(Tensor & self, Generator & generator, double from) ; + virtual Tensor & m_uniform_(Tensor & self, double from, double to) ; + virtual Tensor & m_uniform_(Tensor & self, Generator & generator) ; + virtual Tensor & m_uniform_(Tensor & self, double from) ; + virtual Tensor & m_uniform_(Tensor & self) ; + virtual Tensor & m_cauchy_(Tensor & self, Generator & generator, double median, double sigma) ; + virtual Tensor & m_cauchy_(Tensor & self, Generator & generator, double median) ; + virtual Tensor & m_cauchy_(Tensor & self, double median, double sigma) ; + virtual Tensor & m_cauchy_(Tensor & self, Generator & generator) ; + virtual Tensor & m_cauchy_(Tensor & self, double median) ; + virtual Tensor & m_cauchy_(Tensor & self) ; + virtual Tensor & m_log_normal_(Tensor & self, Generator & generator, double mean, double std) ; + virtual Tensor & m_log_normal_(Tensor & self, Generator & generator, double mean) ; + virtual Tensor & m_log_normal_(Tensor & self, double mean, double std) ; + virtual Tensor & m_log_normal_(Tensor & self, Generator & generator) ; + virtual Tensor & m_log_normal_(Tensor & self, double mean) ; + virtual Tensor & m_log_normal_(Tensor & self) ; + virtual Tensor & rand_out(Generator & generator, IntList size, Tensor & result) ; + virtual Tensor rand(Generator & generator, IntList size) ; + virtual Tensor & rand_out(IntList size, Tensor & result) ; + virtual Tensor rand(IntList size) ; + virtual Tensor & randn_out(Generator & generator, IntList size, Tensor & result) ; + virtual Tensor randn(Generator & generator, IntList size) ; + virtual Tensor & randn_out(IntList size, Tensor & result) ; + virtual Tensor randn(IntList size) ; + virtual Tensor & m_geometric_(Tensor & self, Generator & generator, double p) ; + virtual Tensor & m_geometric_(Tensor & self, double p) ; + virtual int64_t m_size(const Tensor & self, int64_t dim) ; + virtual int64_t m_stride(const Tensor & self, int64_t dim) ; + virtual Tensor tensor() ; + virtual Tensor & select_out(const Tensor & self, int dim, int64_t sliceIndex, Tensor & result) ; + virtual Tensor select(const Tensor & self, int dim, int64_t sliceIndex) ; + virtual void Abs_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void Abs_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) ; + virtual void AbsCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) ; + virtual void AbsCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) ; + virtual void BCECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights) ; + virtual void BCECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) ; + virtual void BCECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights) ; + virtual void BCECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) ; + virtual void ClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights, const Tensor & total_weight, int64_t ignore_index) ; + virtual void ClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & total_weight, int64_t ignore_index) ; + virtual void ClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights, const Tensor & total_weight, int64_t ignore_index) ; + virtual void ClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & total_weight, int64_t ignore_index) ; + virtual void SpatialClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & weights, const Tensor & total_weight) ; + virtual void SpatialClassNLLCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, const Tensor & total_weight) ; + virtual void SpatialClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & weights, const Tensor & total_weight) ; + virtual void SpatialClassNLLCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, const Tensor & total_weight) ; + virtual void ELU_updateOutput(const Tensor & input, const Tensor & output, Scalar alpha, bool inplace) ; + virtual void ELU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output, Scalar alpha, bool inplace) ; + virtual void DistKLDivCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) ; + virtual void DistKLDivCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) ; + virtual void GatedLinear_updateOutput(const Tensor & input, const Tensor & output, int dim) ; + virtual void GatedLinear_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int dim) ; + virtual void HardShrink_updateOutput(const Tensor & input, const Tensor & output, Scalar lambda) ; + virtual void HardShrink_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar lambda) ; + virtual void HardTanh_updateOutput(const Tensor & input, const Tensor & output, Scalar min_val, Scalar max_val, bool inplace) ; + virtual void HardTanh_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar min_val, Scalar max_val, bool inplace) ; + virtual void L1Cost_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void L1Cost_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) ; + virtual void L1Cost_updateGradInput(const Tensor & input, const Tensor & gradInput) ; + virtual void LeakyReLU_updateOutput(const Tensor & input, const Tensor & output, Scalar negval, bool inplace) ; + virtual void LeakyReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar negval, bool inplace) ; + virtual void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & bias2, const Tensor & hx, const Tensor & output, const Tensor & storage) ; + virtual void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & hx, const Tensor & output, const Tensor & storage) ; + virtual void GRUFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & hx, const Tensor & output, const Tensor & storage) ; + virtual void GRUFused_updateGradInput(const Tensor & gradInInput, const Tensor & gradInHidden, const Tensor & gradOutput, const Tensor & gradInputHx, const Tensor & storage) ; + virtual void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & bias2, const Tensor & cell, const Tensor & output, const Tensor & outputCell) ; + virtual void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & bias1, const Tensor & cell, const Tensor & output, const Tensor & outputCell) ; + virtual void LSTMFused_updateOutput(const Tensor & input, const Tensor & hidden, const Tensor & cell, const Tensor & output, const Tensor & outputCell) ; + virtual void LSTMFused_updateGradInput(const Tensor & storage, const Tensor & gradInGates, const Tensor & cx, const Tensor & cy, const Tensor & gradOutput, const Tensor & gradOutputCell, const Tensor & gradInputCx) ; + virtual void LogSigmoid_updateOutput(const Tensor & input, const Tensor & output, const Tensor & buffer) ; + virtual void LogSigmoid_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & buffer) ; + virtual void LogSoftMax_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void LogSoftMax_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void MarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, Scalar margin) ; + virtual void MarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, Scalar margin) ; + virtual void SoftMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) ; + virtual void SoftMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) ; + virtual void MSECriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) ; + virtual void MSECriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) ; + virtual void MultiLabelMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, const Tensor & isTarget, bool sizeAverage) ; + virtual void MultiLabelMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, const Tensor & isTarget, bool sizeAverage) ; + virtual void MultiMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, int p, const Tensor & weights, Scalar margin) ; + virtual void MultiMarginCriterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage, int p, Scalar margin) ; + virtual void MultiMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, int p, const Tensor & weights, Scalar margin) ; + virtual void MultiMarginCriterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage, int p, Scalar margin) ; + virtual void PReLU_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, int64_t nOutputPlane) ; + virtual void PReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int64_t nOutputPlane) ; + virtual void PReLU_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradWeight, const Tensor & gradWeightBuf, const Tensor & gradWeightBuf2, int64_t nOutputPlane, Scalar scale) ; + virtual void Linear_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & addBuffer) ; + virtual void Linear_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight) ; + virtual void Linear_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & addBuffer, Scalar scale) ; + virtual void RReLU_updateOutput(const Tensor & input, const Tensor & output, const Tensor & noise, Scalar lower, Scalar upper, bool train, bool inplace, Generator & generator) ; + virtual void RReLU_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & noise, Scalar lower, Scalar upper, bool train, bool inplace) ; + virtual void Sigmoid_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void Sigmoid_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void Sigmoid_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void SmoothL1Criterion_updateOutput(const Tensor & input, const Tensor & target, const Tensor & output, bool sizeAverage) ; + virtual void SmoothL1Criterion_updateGradInput(const Tensor & input, const Tensor & target, const Tensor & gradInput, bool sizeAverage) ; + virtual void SoftMax_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void SoftMax_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void SoftPlus_updateOutput(const Tensor & input, const Tensor & output, Scalar beta, Scalar threshold) ; + virtual void SoftPlus_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output, Scalar beta, Scalar threshold) ; + virtual void SoftShrink_updateOutput(const Tensor & input, const Tensor & output, Scalar lambda) ; + virtual void SoftShrink_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar lambda) ; + virtual void IndexLinear_updateOutput(const Tensor & keys, int64_t keysOffset, const Tensor & values, const Tensor & sizes, const Tensor & cumSumSizes, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & normalizedValues, int train) ; + virtual void IndexLinear_accGradParameters(const Tensor & keys, int64_t keysOffset, const Tensor & values, const Tensor & sizes, const Tensor & cumSumSizes, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & bias, const Tensor & valuesBuffer, Scalar weightDecay, Scalar scale) ; + virtual void SparseLinear_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias) ; + virtual void SparseLinear_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & bias, Scalar weightDecay, Scalar scale) ; + virtual void Sqrt_updateOutput(const Tensor & input, const Tensor & output, Scalar eps) ; + virtual void Sqrt_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void Square_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void Square_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) ; + virtual void Tanh_updateOutput(const Tensor & input, const Tensor & output) ; + virtual void Tanh_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void Tanh_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, const Tensor & output) ; + virtual void Threshold_updateOutput(const Tensor & input, const Tensor & output, Scalar threshold, Scalar val, bool inplace) ; + virtual void Threshold_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, Scalar threshold, Scalar val, bool inplace) ; + virtual void TemporalConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int dW, int inputFrameSize, int outputFrameSize) ; + virtual void TemporalConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int dW) ; + virtual void TemporalConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int dW, Scalar scale) ; + virtual void TemporalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int dW) ; + virtual void TemporalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int dW) ; + virtual void TemporalSubSampling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int dW, int inputFrameSize) ; + virtual void TemporalSubSampling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int dW) ; + virtual void TemporalSubSampling_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int dW, Scalar scale) ; + virtual void TemporalRowConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst) ; + virtual void TemporalRowConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst) ; + virtual void TemporalRowConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int dW, int padW, bool featFirst, Scalar scale) ; + virtual void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps) ; + virtual void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps) ; + virtual void BatchNormalization_updateOutput(const Tensor & input, const Tensor & output, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double momentum, double eps) ; + virtual void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & weight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) ; + virtual void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) ; + virtual void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & gradWeight, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) ; + virtual void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) ; + virtual void BatchNormalization_backward(const Tensor & input, const Tensor & gradOutput, const Tensor & running_mean, const Tensor & running_var, const Tensor & save_mean, const Tensor & save_std, bool train, double scale, double eps) ; + virtual void SpatialConvolutionMap_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) ; + virtual void SpatialConvolutionMap_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) ; + virtual void SpatialConvolutionMap_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH, Scalar scale) ; + virtual void SpatialConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) ; + virtual void SpatialConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) ; + virtual void SpatialConvolutionMM_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) ; + virtual void SpatialConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) ; + virtual void SpatialConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) ; + virtual void SpatialDepthWiseConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) ; + virtual void SpatialDepthWiseConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) ; + virtual void SpatialDepthWiseConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH) ; + virtual void SpatialDepthWiseConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) ; + virtual void SpatialDepthWiseConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, Scalar scale) ; + virtual void SpatialConvolutionLocal_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight) ; + virtual void SpatialConvolutionLocal_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight) ; + virtual void SpatialConvolutionLocal_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int kW, int kH, int dW, int dH, int padW, int padH, int64_t inputWidth, int64_t inputHeight, int64_t outputWidth, int64_t outputHeight, Scalar scale) ; + virtual void SpatialAdaptiveMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int owidth, int oheight) ; + virtual void SpatialAdaptiveMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices) ; + virtual void SpatialAdaptiveAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int owidth, int oheight) ; + virtual void SpatialAdaptiveAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput) ; + virtual void SpatialAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode, bool count_include_pad) ; + virtual void SpatialAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode, bool count_include_pad) ; + virtual void SpatialFractionalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, int outputW, int outputH, int poolSizeW, int poolSizeH, const Tensor & indices, const Tensor & randomSamples) ; + virtual void SpatialFractionalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int outputW, int outputH, int poolSizeW, int poolSizeH, const Tensor & indices) ; + virtual void SpatialFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH) ; + virtual void SpatialFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH) ; + virtual void SpatialFullConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH) ; + virtual void SpatialFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH, Scalar scale) ; + virtual void SpatialFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int adjW, int adjH, Scalar scale) ; + virtual void SpatialFullConvolutionMap_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) ; + virtual void SpatialFullConvolutionMap_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & bias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH) ; + virtual void SpatialFullConvolutionMap_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & connTable, int nInputPlane, int nOutputPlane, int dW, int dH, Scalar scale) ; + virtual void SpatialDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH) ; + virtual void SpatialDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH) ; + virtual void SpatialDilatedConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH) ; + virtual void SpatialDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, Scalar scale) ; + virtual void SpatialDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, Scalar scale) ; + virtual void SpatialMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode) ; + virtual void SpatialMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, bool ceil_mode) ; + virtual void SpatialDilatedMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, bool ceil_mode) ; + virtual void SpatialDilatedMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kW, int kH, int dW, int dH, int padW, int padH, int dilationW, int dilationH, bool ceil_mode) ; + virtual void SpatialMaxUnpooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int owidth, int oheight) ; + virtual void SpatialMaxUnpooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int owidth, int oheight) ; + virtual void SpatialSubSampling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, int kW, int kH, int dW, int dH) ; + virtual void SpatialSubSampling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, int kW, int kH, int dW, int dH) ; + virtual void SpatialSubSampling_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, int kW, int kH, int dW, int dH, Scalar scale) ; + virtual void SpatialUpSamplingNearest_updateOutput(const Tensor & input, const Tensor & output, int scale_factor) ; + virtual void SpatialUpSamplingNearest_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int scale_factor) ; + virtual void SpatialUpSamplingBilinear_updateOutput(const Tensor & input, const Tensor & output, int outputHeight, int outputWidth) ; + virtual void SpatialUpSamplingBilinear_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, int nbatch, int nchannels, int inputHeight, int inputWidth, int outputHeight, int outputWidth) ; + virtual void VolumetricAveragePooling_updateOutput(const Tensor & input, const Tensor & output, int kT, int kW, int kH, int dT, int dW, int dH) ; + virtual void VolumetricAveragePooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int kT, int kW, int kH, int dT, int dW, int dH) ; + virtual void VolumetricConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) ; + virtual void VolumetricConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) ; + virtual void VolumetricConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricConvolutionMM_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricConvolutionMM_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) ; + virtual void VolumetricConvolutionMM_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, Scalar scale) ; + virtual void VolumetricFractionalMaxPooling_updateOutput(const Tensor & input, const Tensor & output, int outputT, int outputW, int outputH, int poolSizeT, int poolSizeW, int poolSizeH, const Tensor & indices, const Tensor & randomSamples) ; + virtual void VolumetricFractionalMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int outputT, int outputW, int outputH, int poolSizeT, int poolSizeW, int poolSizeH, const Tensor & indices) ; + virtual void VolumetricFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH) ; + virtual void VolumetricFullConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH) ; + virtual void VolumetricFullConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH) ; + virtual void VolumetricFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH, Scalar scale) ; + virtual void VolumetricFullConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & finput, const Tensor & fgradInput, int dT, int dW, int dH, int pT, int pW, int pH, int aT, int aW, int aH, Scalar scale) ; + virtual void VolumetricDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & bias, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH) ; + virtual void VolumetricDilatedConvolution_updateOutput(const Tensor & input, const Tensor & output, const Tensor & weight, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH) ; + virtual void VolumetricDilatedConvolution_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & weight, const Tensor & gradColumns, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH) ; + virtual void VolumetricDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & gradBias, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH, Scalar scale) ; + virtual void VolumetricDilatedConvolution_accGradParameters(const Tensor & input, const Tensor & gradOutput, const Tensor & gradWeight, const Tensor & columns, const Tensor & ones, int kT, int kW, int kH, int dT, int dW, int dH, int padT, int padW, int padH, int dilationT, int dilationW, int dilationH, Scalar scale) ; + virtual void VolumetricMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, bool ceilMode) ; + virtual void VolumetricMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, bool ceilMode) ; + virtual void VolumetricDilatedMaxPooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, int dilationT, int dilationW, int dilationH, bool ceilMode) ; + virtual void VolumetricDilatedMaxPooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int kT, int kW, int kH, int dT, int dW, int dH, int pT, int pW, int pH, int dilationT, int dilationW, int dilationH, bool ceilMode) ; + virtual void VolumetricMaxUnpooling_updateOutput(const Tensor & input, const Tensor & output, const Tensor & indices, int oT, int oW, int oH, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void VolumetricMaxUnpooling_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & indices, int oT, int oW, int oH, int dT, int dW, int dH, int pT, int pW, int pH) ; + virtual void SpatialReflectionPadding_updateOutput(const Tensor & input, const Tensor & output, int pad_l, int pad_r, int pad_t, int pad_b) ; + virtual void SpatialReflectionPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pad_l, int pad_r, int pad_t, int pad_b) ; + virtual void SpatialReplicationPadding_updateOutput(const Tensor & input, const Tensor & output, int pad_l, int pad_r, int pad_t, int pad_b) ; + virtual void SpatialReplicationPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pad_l, int pad_r, int pad_t, int pad_b) ; + virtual void VolumetricReplicationPadding_updateOutput(const Tensor & input, const Tensor & output, int pleft, int pright, int ptop, int pbottom, int pfront, int pback) ; + virtual void VolumetricReplicationPadding_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int pleft, int pright, int ptop, int pbottom, int pfront, int pback) ; + virtual void VolumetricUpSamplingNearest_updateOutput(const Tensor & input, const Tensor & output, int scale_factor) ; + virtual void VolumetricUpSamplingNearest_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, int scale_factor) ; + virtual void VolumetricUpSamplingTrilinear_updateOutput(const Tensor & input, const Tensor & output, int outputDepth, int outputHeight, int outputWidth) ; + virtual void VolumetricUpSamplingTrilinear_updateGradInput(const Tensor & gradOutput, const Tensor & gradInput, int nbatch, int nchannels, int inputDepth, int inputHeight, int inputWidth, int outputDepth, int outputHeight, int outputWidth) ; + virtual void SpatialCrossMapLRN_updateOutput(const Tensor & input, const Tensor & output, const Tensor & scale, int size, Scalar alpha, Scalar beta, Scalar k) ; + virtual void SpatialCrossMapLRN_updateGradInput(const Tensor & input, const Tensor & gradOutput, const Tensor & gradInput, const Tensor & scale, const Tensor & output, int size, Scalar alpha, Scalar beta, Scalar k) ; +protected: + Context* context; +}; + + +} diff --git a/aten/src/ATen/templates/Type.h b/aten/src/ATen/templates/Type.h index a60f4db524..18316b9ee3 100644 --- a/aten/src/ATen/templates/Type.h +++ b/aten/src/ATen/templates/Type.h @@ -10,7 +10,6 @@ namespace at { class Context; class Storage; class Tensor; -class TensorRef; class Generator; enum class ScalarType { @@ -90,10 +89,11 @@ struct Type { // for external dispatch virtual TypeID ID() const = 0; - // example - // virtual Tensor * add(Tensor & a, Tensor & b) = 0; virtual void copy(const Tensor & src, Tensor & dst) = 0; Tensor copy(const Tensor & src); + + // example + // virtual Tensor * add(Tensor & a, Tensor & b) = 0; ${type_method_declarations} protected: Context* context; diff --git a/aten/tools/update_doc.sh b/aten/tools/update_doc.sh new file mode 100755 index 0000000000..f8fb6c3e56 --- /dev/null +++ b/aten/tools/update_doc.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cp build/src/ATen/ATen/{Tensor,Type,Functions}.h doc + |