in tools/MuPad/mupad_ba_compute_reproj_err_mex.cxx [14:405]
void mlx_function(mlx_inputs& ins, mlx_outputs& outs)
{
mlx_array<mlx_double> in(ins[0]);
mlx_array<mlx_double> data(ins[1]);
mlx_array<mlx_logical> jacobian(ins[2]);
bool do_jacobian = jacobian[0];
mlx_assert(in.cols == data.cols);
mlx_assert(in.rows == 15);
mlx_assert(data.rows == 2);
mwSize out_rows = 1 + (do_jacobian ? 15 : 0);
mwSize out_cols = 2 * in.cols;
mlx_make_array<mlx_double> out(out_rows, out_cols);
double const* in_ptr = in.data;
double const* data_ptr = data.data;
double* out_ptr = out.data;
if (do_jacobian) {
// const mwSize out_rows = 15 + 1;
const mwSize out_step = (15 + 1) * 2;
for(mwSize c_in = 0; c_in < in.cols; ++c_in,
in_ptr += in.rows,
data_ptr += data.rows,
out_ptr += out_step) {
/* inner loop do_jac=1 */
double x1 = in_ptr[0];
double x2 = in_ptr[1];
double x3 = in_ptr[2];
double x4 = in_ptr[3];
double x5 = in_ptr[4];
double x6 = in_ptr[5];
double x7 = in_ptr[6];
double x8 = in_ptr[7];
double x9 = in_ptr[8];
double x10 = in_ptr[9];
double x11 = in_ptr[10];
double x12 = in_ptr[11];
double x13 = in_ptr[12];
double x14 = in_ptr[13];
double x15 = in_ptr[14];
double data1 = data_ptr[0];
double data2 = data_ptr[1];
double t2 = x1*x1;
double t3 = x2*x2;
double t4 = x3*x3;
double t5 = t2+t3+t4;
double t6 = 1.0/sqrt(t5);
double t7 = sqrt(t5);
double t8 = cos(t7);
double t9 = x4-x12;
double t10 = x5-x13;
double t11 = x6-x14;
double t12 = sin(t7);
double t13 = t8-1.0;
double t14 = t6*t9*x1;
double t15 = t6*t10*x2;
double t16 = t6*t11*x3;
double t17 = t14+t15+t16;
double t29 = t6*t9*x3;
double t30 = t6*t11*x1;
double t31 = t29-t30;
double t32 = t12*t31;
double t33 = t8*t10;
double t34 = t6*t13*t17*x2;
double t18 = t32+t33-t34;
double t19 = t6*t9*x2;
double t27 = t6*t10*x1;
double t20 = t19-t27;
double t21 = t12*t20;
double t22 = t6*t13*t17*x3;
double t28 = t8*t11;
double t23 = t21+t22-t28;
double t24 = 1.0/(t23*t23);
double t37 = t6*t10*x3;
double t38 = t6*t11*x2;
double t39 = t37-t38;
double t40 = t12*t39;
double t41 = t8*t9;
double t42 = t6*t13*t17*x1;
double t25 = t40-t41+t42;
double t35 = t18*t18;
double t36 = t24*t35;
double t43 = t25*t25;
double t44 = t24*t43;
double t26 = t36+t44;
double t45 = t26*t26;
double t46 = t45*x11;
double t47 = t26*x10;
double t48 = t46+t47+1.0;
double t49 = 1.0/t23;
double t50 = 1.0/pow(t5,3.0/2.0);
double t51 = t2*t9*t50;
double t52 = t10*t50*x1*x2;
double t53 = t11*t50*x1*x3;
double t61 = t6*t9;
double t54 = t51+t52+t53-t61;
double t55 = 1.0/t5;
double t56 = 1.0/(t23*t23*t23);
double t57 = t6*t10;
double t58 = t9*t50*x1*x2;
double t73 = t2*t10*t50;
double t59 = t57+t58-t73;
double t60 = t12*t59;
double t62 = t6*t13*t54*x3;
double t63 = t12*t17*t55*x1*x3;
double t64 = t13*t17*t50*x1*x3;
double t74 = t6*t11*t12*x1;
double t75 = t6*t8*t20*x1;
double t65 = t60+t62+t63+t64-t74-t75;
double t66 = t10*t50*x1*x3;
double t87 = t11*t50*x1*x2;
double t67 = t66-t87;
double t68 = t12*t67;
double t69 = t2*t13*t17*t50;
double t70 = t6*t13*t54*x1;
double t71 = t2*t12*t17*t55;
double t88 = t6*t13*t17;
double t89 = t6*t9*t12*x1;
double t90 = t6*t8*t39*x1;
double t72 = t68+t69+t70+t71-t88-t89-t90;
double t76 = t35*t56*t65*2.0;
double t77 = t43*t56*t65*2.0;
double t78 = t6*t11;
double t79 = t9*t50*x1*x3;
double t92 = t2*t11*t50;
double t80 = t78+t79-t92;
double t81 = t6*t13*t54*x2;
double t82 = t6*t8*t31*x1;
double t83 = t12*t17*t55*x1*x2;
double t84 = t13*t17*t50*x1*x2;
double t93 = t12*t80;
double t94 = t6*t10*t12*x1;
double t85 = t81+t82+t83+t84-t93-t94;
double t86 = t18*t24*t85*2.0;
double t95 = t24*t25*t72*2.0;
double t91 = t76+t77+t86-t95;
double t96 = t91*x10;
double t97 = t26*t91*x11*2.0;
double t98 = t96+t97;
double t99 = t3*t10*t50;
double t100 = t11*t50*x2*x3;
double t101 = -t57+t58+t99+t100;
double t112 = t3*t9*t50;
double t102 = t52+t61-t112;
double t103 = t12*t102;
double t104 = t6*t11*t12*x2;
double t105 = t6*t8*t20*x2;
double t113 = t6*t13*t101*x3;
double t114 = t12*t17*t55*x2*x3;
double t115 = t13*t17*t50*x2*x3;
double t106 = t103+t104+t105-t113-t114-t115;
double t107 = t10*t50*x2*x3;
double t118 = t3*t11*t50;
double t108 = t78+t107-t118;
double t109 = t12*t108;
double t110 = t6*t13*t101*x1;
double t119 = t6*t9*t12*x2;
double t120 = t6*t8*t39*x2;
double t111 = t83+t84+t109+t110-t119-t120;
double t116 = t35*t56*t106*2.0;
double t117 = t43*t56*t106*2.0;
double t121 = t24*t25*t111*2.0;
double t129 = t9*t50*x2*x3;
double t122 = t12*(t87-t129);
double t123 = t3*t13*t17*t50;
double t124 = t6*t13*t101*x2;
double t125 = t6*t8*t31*x2;
double t126 = t3*t12*t17*t55;
double t130 = t6*t10*t12*x2;
double t127 = -t88+t122+t123+t124+t125+t126-t130;
double t131 = t18*t24*t127*2.0;
double t128 = t116+t117+t121-t131;
double t132 = t128*x10;
double t133 = t26*t128*x11*2.0;
double t134 = t132+t133;
double t135 = t4*t11*t50;
double t136 = -t78+t79+t107+t135;
double t137 = t66-t129;
double t138 = t12*t137;
double t139 = t6*t11*t12*x3;
double t140 = t6*t8*t20*x3;
double t145 = t4*t13*t17*t50;
double t146 = t6*t13*t136*x3;
double t147 = t4*t12*t17*t55;
double t141 = t88+t138+t139+t140-t145-t146-t147;
double t155 = t4*t10*t50;
double t142 = t57+t100-t155;
double t143 = t6*t13*t136*x1;
double t156 = t12*t142;
double t157 = t6*t9*t12*x3;
double t158 = t6*t8*t39*x3;
double t144 = t63+t64+t143-t156-t157-t158;
double t148 = t35*t56*t141*2.0;
double t149 = t43*t56*t141*2.0;
double t161 = t4*t9*t50;
double t150 = t53+t61-t161;
double t151 = t12*t150;
double t152 = t6*t13*t136*x2;
double t153 = t6*t8*t31*x3;
double t162 = t6*t10*t12*x3;
double t154 = t114+t115+t151+t152+t153-t162;
double t159 = t24*t25*t144*2.0;
double t163 = t18*t24*t154*2.0;
double t160 = t148+t149+t159-t163;
double t164 = t160*x10;
double t165 = t26*t160*x11*2.0;
double t166 = t164+t165;
double t167 = t6*t12*x2;
double t168 = t13*t55*x1*x3;
double t169 = t167+t168;
double t170 = t35*t56*t169*2.0;
double t171 = t43*t56*t169*2.0;
double t177 = t2*t13*t55;
double t172 = t8-t177;
double t173 = t24*t25*t172*2.0;
double t174 = t6*t12*x3;
double t178 = t13*t55*x1*x2;
double t175 = t174-t178;
double t179 = t18*t24*t175*2.0;
double t176 = t170+t171+t173-t179;
double t180 = t176*x10;
double t181 = t26*t176*x11*2.0;
double t182 = t180+t181;
double t183 = t6*t12*x1;
double t185 = t13*t55*x2*x3;
double t184 = t183-t185;
double t186 = t35*t56*t184*2.0;
double t187 = t43*t56*t184*2.0;
double t193 = t3*t13*t55;
double t188 = t8-t193;
double t189 = t18*t24*t188*2.0;
double t190 = t174+t178;
double t191 = t24*t25*t190*2.0;
double t192 = t186+t187+t189+t191;
double t194 = t192*x10;
double t195 = t26*t192*x11*2.0;
double t196 = t194+t195;
double t197 = t167-t168;
double t202 = t4*t13*t55;
double t198 = t8-t202;
double t199 = t183+t185;
double t200 = t18*t24*t199*2.0;
double t201 = t24*t25*t197*2.0;
double t204 = t35*t56*t198*2.0;
double t205 = t43*t56*t198*2.0;
double t203 = t200+t201-t204-t205;
double t206 = t203*x10;
double t207 = t26*t203*x11*2.0;
double t208 = t206+t207;
double t209 = t25*t49*t182*x7;
double t210 = t48*t49*t172*x7;
double t211 = t24*t25*t48*t169*x7;
double t212 = t209+t210+t211;
double t213 = t18*t49*t182*x7;
double t214 = t18*t24*t48*t169*x7;
double t215 = t213+t214-t48*t49*t175*x7;
double t216 = t215*x15;
double t217 = t25*t49*t196*x7;
double t218 = t48*t49*t190*x7;
double t219 = t24*t25*t48*t184*x7;
double t220 = t217+t218+t219;
double t221 = t220*x15;
double t222 = t18*t49*t196*x7;
double t223 = t48*t49*t188*x7;
double t224 = t18*t24*t48*t184*x7;
double t225 = t222+t223+t224;
double t226 = t48*t49*t197*x7;
double t227 = t25*t49*t208*x7;
double t228 = t226+t227-t24*t25*t48*t198*x7;
double t229 = t48*t49*t199*x7;
double t230 = t18*t49*t208*x7;
double t231 = t229+t230-t18*t24*t48*t198*x7;
double t232 = t231*x15;
double t233 = t25*t48*t49*x7;
double t234 = -data1+t233+x8;
double t235 = t18*t48*t49*x7;
out_ptr[0] = t234*x15;
out_ptr[1 * out_rows + 0] = -x15*(data2+t235-x9);
out_ptr[1] = x15*(-t48*t49*t72*x7+t25*t49*t98*x7+t24*t25*t48*t65*x7);
out_ptr[1 * out_rows + 1] = -x15*(t18*t49*t98*x7+t48*t49*t85*x7+t18*t24*t48*t65*x7);
out_ptr[2] = -x15*(t25*t49*t134*x7+t48*t49*t111*x7+t24*t25*t48*t106*x7);
out_ptr[1 * out_rows + 2] = x15*(t18*t49*t134*x7-t48*t49*t127*x7+t18*t24*t48*t106*x7);
out_ptr[3] = -x15*(t25*t49*t166*x7+t48*t49*t144*x7+t24*t25*t48*t141*x7);
out_ptr[1 * out_rows + 3] = x15*(t18*t49*t166*x7-t48*t49*t154*x7+t18*t24*t48*t141*x7);
out_ptr[4] = -t212*x15;
out_ptr[1 * out_rows + 4] = t216;
out_ptr[5] = t221;
out_ptr[1 * out_rows + 5] = -t225*x15;
out_ptr[6] = -t228*x15;
out_ptr[1 * out_rows + 6] = t232;
out_ptr[7] = t25*t48*t49*x15;
out_ptr[1 * out_rows + 7] = -t18*t48*t49*x15;
out_ptr[8] = x15;
out_ptr[1 * out_rows + 9] = x15;
out_ptr[10] = t25*t26*t49*x7*x15;
out_ptr[1 * out_rows + 10] = -t18*t26*t49*x7*x15;
out_ptr[11] = t25*t45*t49*x7*x15;
out_ptr[1 * out_rows + 11] = -t18*t45*t49*x7*x15;
out_ptr[12] = t212*x15;
out_ptr[1 * out_rows + 12] = -t216;
out_ptr[13] = -t221;
out_ptr[1 * out_rows + 13] = t225*x15;
out_ptr[14] = t228*x15;
out_ptr[1 * out_rows + 14] = -t232;
out_ptr[15] = t234;
out_ptr[1 * out_rows + 15] = -data2-t235+x9;
#line 39 "au_autodiff_generate_template.cpp"
}
} else {
const mwSize out_step = 2;
for(mwSize c_in = 0; c_in < in.cols; ++c_in,
in_ptr += in.rows,
data_ptr += data.rows,
out_ptr += out_step) {
/* inner loop do_jac=0 */
double x1 = in_ptr[0];
double x2 = in_ptr[1];
double x3 = in_ptr[2];
double x4 = in_ptr[3];
double x5 = in_ptr[4];
double x6 = in_ptr[5];
double x7 = in_ptr[6];
double x8 = in_ptr[7];
double x9 = in_ptr[8];
double x10 = in_ptr[9];
double x11 = in_ptr[10];
double x12 = in_ptr[11];
double x13 = in_ptr[12];
double x14 = in_ptr[13];
double x15 = in_ptr[14];
double data1 = data_ptr[0];
double data2 = data_ptr[1];
double t2 = x1*x1;
double t3 = x2*x2;
double t4 = x3*x3;
double t5 = t2+t3+t4;
double t6 = 1.0/sqrt(t5);
double t7 = sqrt(t5);
double t8 = cos(t7);
double t9 = x4-x12;
double t10 = x5-x13;
double t11 = x6-x14;
double t12 = sin(t7);
double t13 = t8-1.0;
double t14 = t6*t9*x1;
double t15 = t6*t10*x2;
double t16 = t6*t11*x3;
double t17 = t14+t15+t16;
double t29 = t6*t9*x3;
double t30 = t6*t11*x1;
double t31 = t29-t30;
double t32 = t12*t31;
double t33 = t8*t10;
double t34 = t6*t13*t17*x2;
double t18 = t32+t33-t34;
double t19 = t6*t9*x2;
double t27 = t6*t10*x1;
double t20 = t19-t27;
double t21 = t12*t20;
double t22 = t6*t13*t17*x3;
double t28 = t8*t11;
double t23 = t21+t22-t28;
double t24 = 1.0/(t23*t23);
double t37 = t6*t10*x3;
double t38 = t6*t11*x2;
double t39 = t37-t38;
double t40 = t12*t39;
double t41 = t8*t9;
double t42 = t6*t13*t17*x1;
double t25 = t40-t41+t42;
double t35 = t18*t18;
double t36 = t24*t35;
double t43 = t25*t25;
double t44 = t24*t43;
double t26 = t36+t44;
double t45 = t26*t26;
double t46 = t45*x11;
double t47 = t26*x10;
double t48 = t46+t47+1.0;
double t49 = 1.0/t23;
out_ptr[0] = x15*(-data1+x8+t25*t48*t49*x7);
out_ptr[1] = -x15*(data2-x9+t18*t48*t49*x7);
#line 48 "au_autodiff_generate_template.cpp"
}
}
outs[0] = out;
}