void mlx_function()

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;
}