\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
vardef sbox primary P = 
    superellipse(1/2[point 1 of bbox P, point 2 of bbox P],
                 1/2[point 2 of bbox P, point 3 of bbox P],
                 1/2[point 3 of bbox P, point 0 of bbox P],
                 1/2[point 0 of bbox P, point 1 of bbox P], 0.75)
             enddef;

beginfig(1);
    r = 0.9;
    z0 = (0, 0);
    z1 = r*(89, -55);
    z2 = r*(42, 30);
    z3 = z1 + z2;

    picture FE, FEV, E, EV, M, N, U, V;
    FE  = thelabel("$f^*E$",   (x0, y0));
    M   = thelabel("$M$",      (x0, y1));
    E   = thelabel("$E$",      (x1, y0));
    N   = thelabel("$N$",      (x1, y1));
    FEV = thelabel("$f^*E_V$", (x2, y2));
    U   = thelabel("$U$",      (x2, y3));
    EV  = thelabel("$E_V$",    (x3, y2));
    V   = thelabel("$V$",      (x3, y3));

    forsuffixes @=E, M, N, U, V, EV, FE, FEV: draw @; endfor

    ahangle := 20;
    vardef connect(expr a, b) = 
        save line; path line; 
        interim bboxmargin := 3;
        line = center a .. center b
            cutbefore sbox a cutafter sbox b;
        cutdraw line withpen pencircle scaled 4 withcolor background;
        drawarrow line
    enddef;

    connect(FEV, EV); 
    connect(FEV, U);
    connect(EV, V);
    connect(U, V);

    connect(FEV, FE);
    connect(EV, E);
    connect(U, M);
    connect(V, N);

    connect(FE, E);
    connect(FE, M);
    connect(E, N);
    connect(M, N);
endfig;
\end{mplibcode}
\end{document}
