The problem is that add_edge() never clears boolvar - it is always true, even when I coerce redundant edges, as in the following code:

the problem is that your graph allows parallel edges, therefor the adding always succeeds. you would have to check for existing edges via out_edges(va).
cheers,
moritz