Currently, the ModulePairSGID LUT is a 2D (always symmetric?) array, whereas the module type combinations are encoded as list of lists.
The latter leaves ambiguity whether for a scanner with two module types, to take into account module type combinations:
or
The latter makes most sense to me because of symmetry.
To avoid ambiguities, the possible combinations could be stored as a dict with two int keys instead of using lists of lists or 2D arrays.