If we cluster or otherwise divide a collection and create a subcollection with some or all of the particles from the parent collection, we don't actually want to remove those particles from the parent collection. That's because the parent collection would get really pockmarked: it starts containing strange fragmented holes of what it contained originally. And if we do many many queries on the same collection, the same atoms get duplicated many times over in lots of subcollections, so the overhead in this case of keeping a copy of the atom in the parent collection doesn't add much.
I think it should actually look like:
From a collection (#2) of 100 Atoms, clustering (into collection #3 WHERE #3
IS A SUBCOLLECTION OF #2) for
Atoms 50-80 would produce:
AtomMembership: (c => CollectionID, a => AtomID)
c a
2 1
2 2
...
2 99
2 100
3 50
3 51
...
3 79
3 80
InternalAtomOrder: (c => CollectionID, a => AtomID)
c a
2 1
2 2
...
2 99
2 100
3 50
3 51
...
3 79
3 80
BUT BEFORE IMPLEMENTING THIS, we should first carefully think about wherever collections are divided to make sure that this is correct.
I removed from the title of the bug the fact that this is about CollectionDivider.