Poincare series

EfficientNormalSubgroups(G)
EfficientNormalSubgroups(G,k)

Inputs a prime-power group G and, optionally, a positive integer k. The default is k=4. The function returns a list of normal subgroups N in G such that the Poincare series for G equals the Poincare series for the direct product (N \times (G/N)) up to degree k.
ExpansionOfRationalFunction
ExpansionOfRationalFunction(f,n)

Inputs a positive integer n and a rational function f(x)=p(x)/q(x) where the degree of the polynomial p(x) is less than that of q(x). It returns a list [a_0 , a_1 , a_2 , a_3 , \ldots ,a_n] of the first n+1 coefficients of the infinite expansion

f(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + \ldots
.
PoincareSeries
PoincareSeries(G,n)
PoincareSeries(R,n)
PoincareSeries(L,n)
PoincareSeries(G)

Inputs a finite p-group G and a positive integer n. It returns a quotient of polynomials f(x)=P(x)/Q(x) whose coefficient of x^k equals the rank of the vector space H_k(G,Z_p) for all k in the range k=1 to k=n. (The second input variable can be omitted, in which case the function tries to choose a "reasonable" value for n.)

In place of the group G the function can also input (at least n terms of) a minimal mod p resolution R for G.

Alternatively, the first input variable can be a list L of integers. In this case the coefficient of x^k in f(x) is equal to the (k+1)st term in the list.
PoincareSeriesPrimePart
PoincareSeriesPrimePart(G,p,n)

Inputs a finite group G, a prime p, and a positive integer n. It returns a quotient of polynomials f(x)=P(x)/Q(x) whose coefficient of x^k equals the rank of the vector space H_k(G,Z_p) for all k in the range k=1 to k=n.

The efficiency of this function needs to be improved.
Prank
Prank(G)

Inputs a p-group G and returns the rank of the largest elementary abelian subgroup.