32 atomic_base<Base>& atomicFun_;
70 virtual ~CGAtomicFun() =
default;
72 template <
class ADVector>
76 this->CGAbstractAtomicFun<Base>::operator()(
ax,
ay,
id);
79 bool for_sparse_jac(
size_t q,
83 return atomicFun_.for_sparse_jac(
q,
r, s, sparsityIndeps(x));
86 bool for_sparse_jac(
size_t q,
89 return atomicFun_.for_sparse_jac(
q,
r, s);
92 bool for_sparse_jac(
size_t q,
96 return atomicFun_.for_sparse_jac(
q,
r, s, sparsityIndeps(x));
99 bool for_sparse_jac(
size_t q,
102 return atomicFun_.for_sparse_jac(
q,
r, s);
105 bool rev_sparse_jac(
size_t q,
109 return atomicFun_.rev_sparse_jac(
q,
rt,
st, sparsityIndeps(x));
112 bool rev_sparse_jac(
size_t q,
115 return atomicFun_.rev_sparse_jac(
q,
rt,
st);
118 bool rev_sparse_jac(
size_t q,
122 return atomicFun_.rev_sparse_jac(
q,
rt,
st, sparsityIndeps(x));
125 bool rev_sparse_jac(
size_t q,
128 return atomicFun_.rev_sparse_jac(
q,
rt,
st);
139 return atomicFun_.rev_sparse_hes(
vx, s,
t,
q,
r,
u, v, sparsityIndeps(x));
149 return atomicFun_.rev_sparse_hes(
vx, s,
t,
q,
r,
u, v);
160 return atomicFun_.rev_sparse_hes(
vx, s,
t,
q,
r,
u, v, sparsityIndeps(x));
170 return atomicFun_.rev_sparse_hes(
vx, s,
t,
q,
r,
u, v);
180 size_t m =
vy.size();
181 size_t n =
vx.size();
184 for (
size_t j = 0;
j < m;
j++) {
189 bool ok = rev_sparse_jac(m,
rt,
st, x);
191 throw CGException(
"False returned from rev_sparse_jac() in the atomic function \"", this->
atomic_name(),
"\".");
193 for (
size_t j = 0;
j <
n;
j++) {
194 for (
size_t i : st[
j]) {
207 return atomicFun_.forward(
q,
p,
vx,
vy,
tx,
ty);
215 return atomicFun_.reverse(
p,
tx,
ty,
px,
py);
220 CPPADCG_ASSERT_UNKNOWN(x.size() == xSparsity_.size());
224 for (
size_t i = 0;
i <
n; ++
i) {
225 if (x[
i].isValueDefined()) {
226 out[
i] = x[
i].getValue();
238 for (
size_t i = 0;
i <
out.size(); ++
i) {
246 for (
size_t i = 0;
i <
out.size(); ++
i) {