Thank you for the bug report. I committed a fix into the internal visone repository just now. It will be included in the next release.
Some background: For purposes of density calculation, visone treated all networks as undirected. So the calculated value was the density of the underlying undirected graph, but not of the directed graph itself.
After the fix, visone will now calculate the percentage of occupied dyads without loops. That means:
* The denominator is n(n-1).
* Directed edges are counted once.
* Undirected edges are counted twice (i.e., like two directed edges).
* Parallel edges are treated like a single edge.
* Loops are not considered, neither in the numerator nor in the denominator.