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