The gt.assortativity still seems to be wrong to me. I tried calculating the degree-assortativity using gt.assortativity and gt.scalar_assortativity as well as manually. My code:
import graph_tool.all as gt
# Load a graph
g = gt.collection.data['karate']
# Get the adjacency matrix
adj_mat = gt.adjacency(g).todense()
# Calculate S values
S1 = sum([v.out_degree() for v in g.vertices()])
S2 = sum([(v.out_degree())**2 for v in g.vertices()])
S3 = sum([(v.out_degree())**3 for v in g.vertices()])
Se = 0
for i in range(g.num_vertices()-1):
for j in range(i+1, g.num_vertices()):
Se += adj_mat[i, j] * g.vertex(i).out_degree() * g.vertex(j).out_degree()
Se *= 2
# Calculate the assortativity coefficient
print((S1*Se-S2**2)/(S1*S3-S2**2))
print(gt.assortativity(g, deg = 'out'))
print(gt.scalar_assortativity(g, deg = 'out'))
Results are:
-0.475613097685
(-0.07774502579218864, 0.024258508125118667)
(-0.4756130976846143, 0.1669286053081143)