code: def testCreateMany(self):
      MAX_USER_OP = 32  # max user-defined operations
      # create
      ops = []
      for i in range(MAX_USER_OP):
          o = MPI.Op.Create(mysum)
          ops.append(o)
      with self.assertRaises(RuntimeError):
          MPI.Op.Create(mysum)
      # cleanup
      for o in ops:
          o.Free()
      # another round
      ops = []
      for i in range(MAX_USER_OP):
          op = MPI.Op.Create(mybor)
          ops.append(op)
      with self.assertRaises(RuntimeError):
          MPI.Op.Create(mybor)
      # local reductions
      try:
          b1 = bytearray([2] * 3)
          b2 = bytearray([4] * 3)
          for op in ops:
              ibuf = [b1, MPI.BYTE]
              obuf = [b2, MPI.BYTE]
              op.Reduce_local(ibuf, obuf)
              for c1, c2 in zip(b1, b2):
                  self.assertEqual(c1, 2)
                  self.assertEqual(c2, 6)
      except NotImplementedError:
          pass
      # pickling support
      try:
          for op in ops:
              op.__reduce__()
              clon = MPI.Op.f2py(op.py2f())
              with self.assertRaises(ValueError):
                  clon.__reduce__()
      except NotImplementedError:
          pass
      # cleanup
      for op in ops:
          op.Free()
  
imports: from mpi4py import MPI
  import mpiunittest
label_desc: Use image node_id 3 for calling the TestOp obj's underlying member method code with example usage: obj.testCreateMany() without return types