106 size_t n = vx.size();
108 for (
size_t j = 0; j < n; j++) {
109 x[j] = tx[j * (p + 1)];
112 zeroOrderDependency(vx, vy, x);
118 if (!evalForwardValues(q, p, tx, tyb, ty.size()))
121 CPPADCG_ASSERT_UNKNOWN(tyb.size() == ty.size())
122 for (
size_t i = 0; i < ty.size(); i++) {
128 size_t m = ty.size() / (p + 1);
139 size_t n = tx.size() / (p + 1);
142 for (
size_t j = 0; j < n; j++) {
143 if (!tx[j * (p + 1) + 1].isIdenticalZero())
150 for (
size_t j = 0; j < n; j++) {
151 x[j] = tx[j * (p + 1)];
155 bool good = this->for_sparse_jac(1, r, s, x);
159 vyLocal.resize(ty.size());
160 for (
size_t i = 0; i < vyLocal.size(); i++) {
164 for (
size_t i = 0; i < m; i++) {
165 vyLocal[i * (p + 1) + 1] = !s[i].empty();
170 for (
size_t i = 0; i < vyLocal.size(); i++) {
178 for (
size_t i = 0; i < ty.size(); i++) {
188 if (!evalForwardValues(q, p, tx, tyb, ty.size()))
193 CPPADCG_ASSERT_UNKNOWN(handler !=
nullptr)
198 for (
size_t k = 0;
k <
p1;
k++) {
206 std::vector<Argument<Base> >
args(2 *
p1);
207 for (
size_t k = 0;
k <
p1;
k++) {
213 handler->registerAtomicFunction(*
this);
215 for (
size_t k = 0;
k <
p1;
k++) {
216 for (
size_t i = 0;
i < m;
i++) {
219 ty[
pos] =
CGB(*
handler->makeNode(CGOpCode::ArrayElement, {i}, {*tyArray[k], *atomicOp}));