27#include <ATen/TensorOperators.h>
29#include "neml2/misc/types.h"
30#include "neml2/tensors/macros.h"
31#include "neml2/tensors/tensors_fwd.h"
36#define FORWARD_DECLARATION(T) class T
37FOR_ALL_TENSORBASE(FORWARD_DECLARATION);
40#define DECLARE_UNARY_OP(op, T, TR) TR op(const T & a)
41#define DECLARE_BINARY_OP(op, T1, T2, TR) TR op(const T1 & a, const T2 & b)
42#define DECLARE_BINARY_OP_SELF(op, T) DECLARE_BINARY_OP(op, T, T, T)
43#define DECLARE_BINARY_OP_SYM(op, T1, T2, TR) \
44 DECLARE_BINARY_OP(op, T1, T2, TR); \
45 DECLARE_BINARY_OP(op, T2, T1, TR)
46#define DECLARE_BINARY_OP_NONCONST(op, T1, T2, TR) TR op(T1 & a, const T2 & b)
57#define DECLARE_ADD_SELF(T) DECLARE_BINARY_OP_SELF(operator+, T)
58#define DECLARE_ADD_SYM_SCALAR(T) DECLARE_BINARY_OP_SYM(operator+, T, Scalar, T)
59#define DECLARE_ADD_SYM_CSCALAR(T) DECLARE_BINARY_OP_SYM(operator+, T, CScalar, T)
60FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_ADD_SELF);
61FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_ADD_SYM_SCALAR);
62FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_ADD_SYM_CSCALAR);
64DECLARE_ADD_SYM_SCALAR(
Tensor);
65DECLARE_ADD_SYM_CSCALAR(
Tensor);
67DECLARE_ADD_SYM_CSCALAR(
Scalar);
68#undef DECLARE_ADD_SELF
69#undef DECLARE_ADD_SYM_SCALAR
70#undef DECLARE_ADD_SYM_CSCALAR
81#define DECLARE_SUB_SELF(T) DECLARE_BINARY_OP_SELF(operator-, T)
82#define DECLARE_SUB_SYM_SCALAR(T) DECLARE_BINARY_OP_SYM(operator-, T, Scalar, T)
83#define DECLARE_SUB_SYM_CSCALAR(T) DECLARE_BINARY_OP_SYM(operator-, T, CScalar, T)
84FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_SUB_SELF);
85FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_SUB_SYM_SCALAR);
86FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_SUB_SYM_CSCALAR);
88DECLARE_SUB_SYM_SCALAR(
Tensor);
89DECLARE_SUB_SYM_CSCALAR(
Tensor);
91DECLARE_SUB_SYM_CSCALAR(
Scalar);
92#undef DECLARE_SUB_SELF
93#undef DECLARE_SUB_SYM_SCALAR
94#undef DECLARE_SUB_SYM_CSCALAR
105#define DECLARE_MUL_SELF(T) DECLARE_BINARY_OP_SELF(operator*, T)
106#define DECLARE_MUL_SYM_SCALAR(T) DECLARE_BINARY_OP_SYM(operator*, T, Scalar, T)
107#define DECLARE_MUL_SYM_CSCALAR(T) DECLARE_BINARY_OP_SYM(operator*, T, CScalar, T)
108FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_MUL_SYM_SCALAR);
109FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_MUL_SYM_CSCALAR);
111DECLARE_MUL_SYM_SCALAR(
Tensor);
112DECLARE_MUL_SYM_CSCALAR(
Tensor);
114DECLARE_MUL_SYM_CSCALAR(
Scalar);
115#undef DECLARE_MUL_SELF
116#undef DECLARE_MUL_SYM_SCALAR
117#undef DECLARE_MUL_SYM_CSCALAR
128#define DECLARE_DIV_SELF(T) DECLARE_BINARY_OP_SELF(operator/, T)
129#define DECLARE_DIV_SYM_SCALAR(T) DECLARE_BINARY_OP_SYM(operator/, T, Scalar, T)
130#define DECLARE_DIV_SYM_CSCALAR(T) DECLARE_BINARY_OP_SYM(operator/, T, CScalar, T)
131FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_DIV_SYM_SCALAR);
132FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_DIV_SYM_CSCALAR);
134DECLARE_DIV_SYM_SCALAR(
Tensor);
135DECLARE_DIV_SYM_CSCALAR(
Tensor);
137DECLARE_DIV_SYM_CSCALAR(
Scalar);
138#undef DECLARE_DIV_SELF
139#undef DECLARE_DIV_SYM_SCALAR
140#undef DECLARE_DIV_SYM_CSCALAR
151#define DECLARE_ADD_EQ(T) DECLARE_BINARY_OP_NONCONST(operator+=, T, CScalar, T &)
152FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_ADD_EQ);
166#define DECLARE_SUB_EQ(T) DECLARE_BINARY_OP_NONCONST(operator-=, T, CScalar, T &)
167FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_SUB_EQ);
181#define DECLARE_MUL_EQ(T) DECLARE_BINARY_OP_NONCONST(operator*=, T, CScalar, T &)
182FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_MUL_EQ);
196#define DECLARE_DIV_EQ(T) DECLARE_BINARY_OP_NONCONST(operator/=, T, CScalar, T &)
197FOR_ALL_NONSCALAR_PRIMITIVETENSOR(DECLARE_DIV_EQ);
203#undef DECLARE_BINARY_OP
204#undef DECLARE_BINARY_OP_SELF
205#undef DECLARE_BINARY_OP_SYM
Scalar.
Definition Scalar.h:38
Definition DiagnosticsInterface.cxx:30