void mlx_function()

in tools/MuPad/example_gmm_objective_mex_d2_K5.cxx [14:279]


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 == 30);
    mlx_assert(data.rows == 5);

    mwSize out_rows = 1 + (do_jacobian ? 30 : 0);
    mwSize out_cols = 1 * 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 = 30 + 1;
        const mwSize out_step = (30 + 1) * 1;
        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 x16 = in_ptr[15];
    double x17 = in_ptr[16];
    double x18 = in_ptr[17];
    double x19 = in_ptr[18];
    double x20 = in_ptr[19];
    double x21 = in_ptr[20];
    double x22 = in_ptr[21];
    double x23 = in_ptr[22];
    double x24 = in_ptr[23];
    double x25 = in_ptr[24];
    double x26 = in_ptr[25];
    double x27 = in_ptr[26];
    double x28 = in_ptr[27];
    double x29 = in_ptr[28];
    double x30 = in_ptr[29];
    double data1 = data_ptr[0];
    double data2 = data_ptr[1];
    double data3 = data_ptr[2];
    double data4 = data_ptr[3];
    double data5 = data_ptr[4];
    double t3 = data1-x6;
    double t22 = exp(x17);
    double t33 = t3*x18;
    double t34 = data2-x7;
    double t35 = t22*t34;
    double t2 = t33+t35;
    double t5 = data1-x8;
    double t23 = exp(x20);
    double t42 = t5*x21;
    double t43 = data2-x9;
    double t44 = t23*t43;
    double t4 = t42+t44;
    double t7 = data1-x10;
    double t24 = exp(x23);
    double t49 = t7*x24;
    double t50 = data2-x11;
    double t51 = t24*t50;
    double t6 = t49+t51;
    double t9 = data1-x12;
    double t25 = exp(x26);
    double t56 = t9*x27;
    double t57 = data2-x13;
    double t58 = t25*t57;
    double t8 = t56+t58;
    double t11 = data1-x14;
    double t26 = exp(x29);
    double t63 = t11*x30;
    double t64 = data2-x15;
    double t65 = t26*t64;
    double t10 = t63+t65;
    double t12 = x16*2.0;
    double t13 = exp(t12);
    double t14 = x19*2.0;
    double t15 = exp(t14);
    double t16 = x22*2.0;
    double t17 = exp(t16);
    double t18 = x25*2.0;
    double t19 = exp(t18);
    double t20 = x28*2.0;
    double t21 = exp(t20);
    double t27 = exp(x1);
    double t28 = exp(x2);
    double t29 = exp(x3);
    double t30 = exp(x4);
    double t31 = exp(x5);
    double t32 = t27+t28+t29+t30+t31;
    double t36 = t2*t2;
    double t37 = t3*t3;
    double t40 = t36*(1.0/2.0);
    double t41 = t13*t37*(1.0/2.0);
    double t38 = -data3-t40-t41+x1+x16+x17;
    double t39 = exp(t38);
    double t45 = t4*t4;
    double t46 = t5*t5;
    double t72 = t45*(1.0/2.0);
    double t73 = t15*t46*(1.0/2.0);
    double t47 = -data3-t72-t73+x2+x19+x20;
    double t48 = exp(t47);
    double t52 = t6*t6;
    double t53 = t7*t7;
    double t74 = t52*(1.0/2.0);
    double t75 = t17*t53*(1.0/2.0);
    double t54 = -data3-t74-t75+x3+x22+x23;
    double t55 = exp(t54);
    double t59 = t8*t8;
    double t60 = t9*t9;
    double t76 = t59*(1.0/2.0);
    double t77 = t19*t60*(1.0/2.0);
    double t61 = -data3-t76-t77+x4+x25+x26;
    double t62 = exp(t61);
    double t66 = t10*t10;
    double t67 = t11*t11;
    double t78 = t66*(1.0/2.0);
    double t79 = t21*t67*(1.0/2.0);
    double t68 = -data3-t78-t79+x5+x28+x29;
    double t69 = exp(t68);
    double t70 = t39+t48+t55+t62+t69;
    double t71 = 1.0/t32;
    double t80 = 1.0/t70;
    double t81 = data1*2.0;
    double t82 = exp(x16);
    double t83 = x17*2.0;
    double t84 = exp(t83);
    double t85 = exp(x19);
    double t86 = x20*2.0;
    double t87 = exp(t86);
    double t88 = exp(x22);
    double t89 = x23*2.0;
    double t90 = exp(t89);
    double t91 = exp(x25);
    double t92 = x26*2.0;
    double t93 = exp(t92);
    double t94 = exp(x28);
    double t95 = x29*2.0;
    double t96 = exp(t95);
  out_ptr[0] = data3-log(t32)+log(t70)-data5*(t22+t82)-data5*(t23+t85)-data5*(t24+t88)-data5*(t25+t91)-data5*(t26+t94)+data4*(t13+t84+x18*x18)+data4*(t15+t87+x21*x21)+data4*(t17+t90+x24*x24)+data4*(t19+t93+x27*x27)+data4*(t21+t96+x30*x30);
  out_ptr[1] = -t27*t71+t39*t80;
  out_ptr[2] = -t28*t71+t48*t80;
  out_ptr[3] = -t29*t71+t55*t80;
  out_ptr[4] = -t30*t71+t62*t80;
  out_ptr[5] = -t31*t71+t69*t80;
  out_ptr[6] = t39*t80*(t2*x18+t13*(t81-x6*2.0)*(1.0/2.0));
  out_ptr[7] = t2*t22*t39*t80;
  out_ptr[8] = t48*t80*(t4*x21+t15*(t81-x8*2.0)*(1.0/2.0));
  out_ptr[9] = t4*t23*t48*t80;
  out_ptr[10] = t55*t80*(t6*x24+t17*(t81-x10*2.0)*(1.0/2.0));
  out_ptr[11] = t6*t24*t55*t80;
  out_ptr[12] = t62*t80*(t8*x27+t19*(t81-x12*2.0)*(1.0/2.0));
  out_ptr[13] = t8*t25*t62*t80;
  out_ptr[14] = t69*t80*(t10*x30+t21*(t81-x14*2.0)*(1.0/2.0));
  out_ptr[15] = t10*t26*t69*t80;
  out_ptr[16] = data4*t13*2.0-data5*t82-t39*t80*(t13*t37-1.0);
  out_ptr[17] = -data5*t22+data4*t84*2.0-t39*t80*(t2*t22*t34-1.0);
  out_ptr[18] = data4*x18*2.0-t2*t3*t39*t80;
  out_ptr[19] = data4*t15*2.0-data5*t85-t48*t80*(t15*t46-1.0);
  out_ptr[20] = -data5*t23+data4*t87*2.0-t48*t80*(t4*t23*t43-1.0);
  out_ptr[21] = data4*x21*2.0-t4*t5*t48*t80;
  out_ptr[22] = data4*t17*2.0-data5*t88-t55*t80*(t17*t53-1.0);
  out_ptr[23] = -data5*t24+data4*t90*2.0-t55*t80*(t6*t24*t50-1.0);
  out_ptr[24] = data4*x24*2.0-t6*t7*t55*t80;
  out_ptr[25] = data4*t19*2.0-data5*t91-t62*t80*(t19*t60-1.0);
  out_ptr[26] = -data5*t25+data4*t93*2.0-t62*t80*(t8*t25*t57-1.0);
  out_ptr[27] = data4*x27*2.0-t8*t9*t62*t80;
  out_ptr[28] = data4*t21*2.0-data5*t94-t69*t80*(t21*t67-1.0);
  out_ptr[29] = -data5*t26+data4*t96*2.0-t69*t80*(t10*t26*t64-1.0);
  out_ptr[30] = data4*x30*2.0-t10*t11*t69*t80;

#line 39 "au_autodiff_generate_template.cpp"
        }
    } else {
        const mwSize out_step = 1;
        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 x16 = in_ptr[15];
    double x17 = in_ptr[16];
    double x18 = in_ptr[17];
    double x19 = in_ptr[18];
    double x20 = in_ptr[19];
    double x21 = in_ptr[20];
    double x22 = in_ptr[21];
    double x23 = in_ptr[22];
    double x24 = in_ptr[23];
    double x25 = in_ptr[24];
    double x26 = in_ptr[25];
    double x27 = in_ptr[26];
    double x28 = in_ptr[27];
    double x29 = in_ptr[28];
    double x30 = in_ptr[29];
    double data1 = data_ptr[0];
    double data2 = data_ptr[1];
    double data3 = data_ptr[2];
    double data4 = data_ptr[3];
    double data5 = data_ptr[4];
    double t3 = data1-x6;
    double t22 = exp(x17);
    double t2 = t3*x18+t22*(data2-x7);
    double t5 = data1-x8;
    double t23 = exp(x20);
    double t4 = t5*x21+t23*(data2-x9);
    double t7 = data1-x10;
    double t24 = exp(x23);
    double t6 = t7*x24+t24*(data2-x11);
    double t9 = data1-x12;
    double t25 = exp(x26);
    double t8 = t9*x27+t25*(data2-x13);
    double t11 = data1-x14;
    double t26 = exp(x29);
    double t10 = t11*x30+t26*(data2-x15);
    double t12 = x16*2.0;
    double t13 = exp(t12);
    double t14 = x19*2.0;
    double t15 = exp(t14);
    double t16 = x22*2.0;
    double t17 = exp(t16);
    double t18 = x25*2.0;
    double t19 = exp(t18);
    double t20 = x28*2.0;
    double t21 = exp(t20);
    out_ptr[0] = data3-log(exp(x1)+exp(x2)+exp(x3)+exp(x4)+exp(x5))+log(exp(-data3+x1+x16+x17-(t3*t3)*t13*(1.0/2.0)-(t2*t2)*(1.0/2.0))+exp(-data3+x2+x19+x20-(t5*t5)*t15*(1.0/2.0)-(t4*t4)*(1.0/2.0))+exp(-data3+x3+x22+x23-(t7*t7)*t17*(1.0/2.0)-(t6*t6)*(1.0/2.0))+exp(-data3+x4+x25+x26-(t9*t9)*t19*(1.0/2.0)-(t8*t8)*(1.0/2.0))+exp(-data3+x5+x28+x29-(t11*t11)*t21*(1.0/2.0)-(t10*t10)*(1.0/2.0)))-data5*(t22+exp(x16))-data5*(t23+exp(x19))-data5*(t24+exp(x22))-data5*(t25+exp(x25))-data5*(t26+exp(x28))+data4*(t13+exp(x17*2.0)+x18*x18)+data4*(t15+exp(x20*2.0)+x21*x21)+data4*(t17+exp(x23*2.0)+x24*x24)+data4*(t19+exp(x26*2.0)+x27*x27)+data4*(t21+exp(x29*2.0)+x30*x30);

#line 48 "au_autodiff_generate_template.cpp"
        }
    }
    
    outs[0] = out;
}