Let $G$ be a finite non-abelian $p$-group, where $p$ is a prime. An automorphism $\alpha$ of $G$ is called a class-preserving if for each $x\in G$, there exists an element $g_x\in G$ such that $\alpha(x)=g_x^{-1}xg_x$. An automorphism $\alpha$ of $G$ is called a $2$nd class-preserving if for each $x\in G$, there exists an element $g_x\in G'=[G,G]$ such that $\alpha(x)=g_x^{-1}xg_x$. Let $\mathrm{Aut_c}(G)$ and $\mathrm{Aut_c^2}(G)$ respectively denote the group of all class-preserving and $2$nd class-preserving automorphisms of $G$.

I have made a GAP program to find the structure of $\mathrm{Aut_c}(G)$ but I failed to make a GAP program to find the structure of $\mathrm{Aut_c^2}(G)$. The GAP program to find the structure of $\mathrm{Aut_c}(G)$ is following:

ClassPreservingAuts:= function(G)

local A,I,cc,gens,auts,a,ok,i,hom;

A:=AutomorphismGroup(G);

I:=InnerAutomorphismsAutomorphismGroup(A);

hom:=NaturalHomomorphismByNormalSubgroup(A,I);

cc:=ConjugacyClasses(G);

gens:=[];

auts:=Group([One(A)]);

$\sharp$ check for class preserving

for a in Elements(A) do

ok:=true;

$\sharp$ run through classes

i:=0;

while i$<$Length(cc) and ok=true do

i:=i+1;

if not (Representative(cc[i])^a in cc[i]) then

ok:=false;

fi;

od;

$\sharp$ a is class preserving

if ok=true and not (a in auts) then

Add (gens,a);

auts:= Group(gens);

$\sharp$inng:=Image(hom(x));

$\sharp$gens:=GeneratorsOfGroup(inng);

fi;

od;

return auts;

return auts/I;

return Size(auts)/Size(I);

end;

My question is the following:

Can anybody help me to make a GAP program to find the structure of $\mathrm{Aut_c^2}(G)$?