Analyse isomorphisms of a set of orthogonal arrays with N=56

In this example, we show how to identify isomorphic arrays from a list of two-level strength-2 orthogonal arrays with 56 runs and 28 factors.

import numpy as np
import oapackage
import oapackage.graphtools
from oapackage.graphtools import selectIsomorphismClasses

Read the arrays from a file and determine their class.

print('loaded %d arrays' % len(sols))
arrayclass: N 56, k 28, strength 2, s {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, order 0
loaded 9 arrays

Determine the unique isomorphism classes using Nauty.

b,mm=selectIsomorphismClasses(sols, verbose=0)

print('from %d arrays selected %d unique isomorphism classes' % (len(mm),np.unique(b).size))
print('indices: %s' % str(b) )
from 9 arrays selected 6 unique isomorphism classes
indices: [0 4 5 3 1 5 3 2 4]

Verify that the first two arrays are indeed non-isomorphic:

n0, _=np.histogram(jj, [0,8,16,24])
n1, _=np.histogram(jj, [0,8,16,24])
[    0 18018  2457]
[    0 18032  2436]

Since the first two arrays have different \(J\)-characteristics (see the section Statistical properties of orthogonal arrays for details), they are non-isomorphic. For the isomorphic arrays, it is possible to obtain the array transformation to make the arrays identical using the function reduceConferenceTransformation.