code: def testPairStruct(self):
      cases = [mpipairtypes] * 3 + [[False, True]]
      for mt1, mt2, mt3, dup in itertools.product(*cases):
          with self.subTest(mt1=mt1.name, mt2=mt2.name, mt3=mt3.name):
              if dup:
                  mt1 = mt1.Dup()
                  mt2 = mt2.Dup()
                  mt3 = mt3.Dup()
              align = max(mt.extent for mt in (mt1, mt2, mt3))
              structtype = MPI.Datatype.Create_struct(
                  [1, 1, 1],
                  [0, align, align * 2],
                  [mt1, mt2, mt3],
              )
              if dup:
                  mt1.Free()
                  mt2.Free()
                  mt3.Free()
              dt = tonumpy(structtype)
              structtype.Free()
              if np_dtype is not None:
                  self.assertTrue(dt.isalignedstruct)
  
imports: from mpi4py import MPI
  from mpi4py.util.dtlib import from_numpy_dtype
  from mpi4py.util.dtlib import to_numpy_dtype
  import sys, os
  import itertools
label_desc: Use image node_id 21 for calling the TestUtilDTLib obj's underlying member method code with example usage: obj.testPairStruct() without return types