This is my attempt. I made liberal use of rotatedabout
both because it worked nicely, and because rotations led to your question. I couldn't think of a better way to get the arrows other than:
- take the line connecting node centers, and chop of the portions inside (undrawn) circles around the nodes in order to get some separation between the nodes and the arrows.
- take the resulting line and shift it some distance perpendicular to its direction in order to get separation between the forward and backward harpoons.
- rotate this line through an angle about its terminal point and travel back some distance to obtain the harpoon tip.
- rotate the result about the midpoint of the line connecting node centers to obtain the harpoon in the other direction

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\mplibnumbersystem{double}
\begin{mplibcode}
u:=2cm;
vardef harpoons(expr p,q,s,t)=
save a,k; path a[]; clearxy;
ang:=25; % ang = harpoon angle
k:=.07; % k= length of harpoon
a0=fullcircle scaled s; % s = separation btw harpoon tip and node
a1=(p--q) cutbefore (a0 shifted p) cutafter (a0 shifted q); % chop path btw nodes at circles
z0=dir(angle(q-p)+90); % z0 = unitvector perpendicular to line through p and q
a2=a1 shifted (t*z0); % shift p--q perp dist along z0
% a3 = harpoon tip: rotate a2 about endpoint through ang, then move some dist along this line
a3=a2--k[point 1 of a2,point 0 of a2 rotatedabout(point 1 of a2,-ang)];
draw a3 withpen pencircle scaled 1bp;
% once we have one harpoon, the other is just a rotation of it
draw a3 rotatedabout(point .5 of a1,180) withpen pencircle scaled 1bp;
enddef;
% nsep=sep between node and harpoon, nsize= node size, psep=separation between harpoons
vardef dmnd(expr p,q,nsep,nsize,psep)=
clearxy;
z0=p; z1=q;
z2=p reflectedabout (q,q+up); % reflect p about vertical line through q
z3=q reflectedabout (p,p+right); % reflect q about horizontal line through p
for i=0 upto 3:
harpoons(z[i],z[(i+1) mod 4],nsep,psep);
draw z[i] withpen pencircle scaled nsize;
endfor;
harpoons(z1,z3,nsep,psep);
enddef;
beginfig(0);
dmnd(origin,(2u,u),.25u,.1u,.04u);
endfig;
\end{mplibcode}
\end{document}
metapost
has built in operatorsrotatedaround
,dir
andangle
. The first rotates about a point through an angle. The second takes an angle as argument and returns a unitvector in that direction, and the third takes a vector as input and returns its angle as output. If you were aware of those, then disregard, but if not, then they likely could be used to get whatever your desired output is more simply.rotated
which rotates about the origin. To be clear: you want to pass two point, say leftmost and top, and have that diagram drawn?