Pensieve Header: The U(I2D) program, extending U(I2D)-PolyTime.nb (“GSeries” version, aborted).

I2DRules = {
u[lft___,1,rgt___]:>u[lft,rgt],
u[lft___,((s_)^(n_.)),((s_)^(m_.)),rgt___]:>u[lft,(s^(n+m)),rgt],
u[lft___,(y^(n_.)),(x^(m_.)),rgt___]:>(∑_(k=0)^m)(((-n))^k) Binomial[m,k] u[lft,(x^(-k+m)),(y^n),rgt],
u[lft___,(py^(n_.)),(px^(m_.)),rgt___]:>u[lft,(px^m),(py^n),rgt],u[lft___,(x^(n_.)),(px^(m_.)),rgt___]:>u[lft,(px^m),(x^n),rgt],
u[lft___,(x^(n_.)),(py^(m_.)),rgt___]:>(∑_(k=0)^n)(((-m))^k) Binomial[n,k] u[lft,(py^m),(x^(-k+n)),rgt],
u[lft___,(y^(n_.)),(px^(m_.)),rgt___]:>u[lft,(px^m),(y^n),rgt],
u[lft___,(y^(n_.)),(py^(m_.)),rgt___]:>(∑_(k=0)^(Min[m,n]))Binomial[n,k] Binomial[m,k] k! u[lft,(px^k),(py^(m-k)),(y^(n-k)),rgt]
};

Outer[u[#1,#2]-u[#2,#1]&, {px,py,x,y}, {px,py,x,y}]//. I2DRules// Expand // MatrixForm

u[y^3, x,x,py^2, px^4] //. I2DRules// Expand

Unprotect[NonCommutativeMultiply];
0**_ = 0;
_**0 = 0;
(c_?NumberQ * a_) ** b_ := Expand[c*(a**b)];
a_ ** (c_?NumberQ * b_) := Expand[c*(a**b)];
a_Plus ** b_ := (# ** b)& /@ a;
a_ ** b_Plus := (a ** #)& /@ b;
T[{m1_, m2_, m3_, m4_}]**T[{n1_, n2_, n3_, n4_}] := Expand[
u[px^m1, py^m2, x^m3, y^m4, px^n1, py^n2, x^n3, y^n4] //. I2DRules
] /. ut_u :> T[Exponent[Times @@ ut, #]& /@ {px, py, x, y}];
T[t1__] ** T[t2__] := Module[
{cc,tt},
Distribute[
OT @@ MapThread[T[#1]**T[#2]&, {{t1}, {t2}}]
] /. ot_OT :> (
cc=1; tt=T[];
Replace[ot, c_.*t_T :> (cc*=c;  AppendTo[tt, t];), {1}];
cc*Flatten[tt]
)
]

T[{2,1,3,4}]**T[{1,1,0,1}]

T[{2,1,3,4},{0,0,0,1}]**T[{1,1,0,1}, {0,0,1,0}]

MakeGSeries[m_Integer, t_T] := Module[
{a,d},
a = GSeries @@ Table[0,{m+1}];
d = Plus @@ Take[Plus@@t, 2];
If[d≤m, a[[d+1]]=t];
a
];
MakeGSeries[m_Integer, a_] := a /. t_T :> MakeGSeries[m, t];
a_GSeries + b_GSeries ^:= GSeries @@ Table[a[[m]]+b[[m]], {m, 1, Min[Length[a], Length[b]]}];
a_GSeries ** b_GSeries := GSeries @@ Table[
Sum[a[[k+1]]**b[[m-k+1]], {k, 0, m}],
{m, 0, Min[Length[a], Length[b]]-1}
];

MakeGSeries[7, T[{3,2,2,5},{0,0,0,1}]]

MakeGSeries[7, T[{2,1,3,4}]**T[{1,1,0,1}]]

MakeGSeries[7,T[{1,0,0,0}]]

MakeGSeries[7, T[{2,1,3,4}]**T[{1,1,0,1}]]**MakeGSeries[7,T[{1,0,0,0}]]

GExp[n_Integer, d_Integer, expr_] := Module[
{total, term, k},
term = MakeGSeries[d, T@@Table[{0,0,0,0}, {n}]];
term + Sum[
term=Expand[term**expr/k],
{k,d}
]
];