code: def testAlltoallwBottom(self):
      size = self.COMM.Get_size()
      rank = self.COMM.Get_rank()
      for array, typecode in arrayimpl.loop():
          if unittest.is_mpi_gpu("openmpi", array):
              continue
          for n in range(1, size + 1):
              check = arrayimpl.scalar(n)
              sbuf = array(n, typecode, (size, n))
              rbuf = array(-1, typecode, (size, n))
              saddr = MPI.Get_address(sbuf.as_raw())
              raddr = MPI.Get_address(rbuf.as_raw())
              sdt, rdt = sbuf.mpidtype, rbuf.mpidtype
              stypes = [
                  MPI.Datatype.Create_struct(
                      [n], [saddr + d], [sdt]
                  ).Commit()
                  for d in list(
                      range(0, size * n * sdt.extent, n * sdt.extent)
                  )
              ]
              rtypes = [
                  MPI.Datatype.Create_struct(
                      [n], [raddr + d], [sdt]
                  ).Commit()
                  for d in list(
                      range(0, size * n * rdt.extent, n * rdt.extent)
                  )
              ]
              smsg = (MPI.BOTTOM, ([1] * size, [0] * size), stypes)
              rmsg = (MPI.BOTTOM, ([1] * size, [0] * size), rtypes)
              try:
                  self.COMM.Alltoallw(smsg, rmsg)
              except NotImplementedError:
                  self.skipTest("mpi-alltoallw")
              finally:
                  for t in stypes:
                      t.Free()
                  for t in rtypes:
                      t.Free()
              for value in rbuf.flat:
                  self.assertEqual(value, check)
  
imports: from mpi4py import MPI
  import mpiunittest
  import arrayimpl
label_desc: Use image node_id 14 for calling the BaseTestCCOVec obj's underlying member method code with example usage: obj.testAlltoallwBottom() without return types