code: def check_recreate(self, factory, newtype):
      name = factory.__name__
      name = name.replace("Get_value_index", "Create_value_index")
      NAME = name.replace("Create_", "").upper()
      symbol = getattr(MPI, "COMBINER_" + NAME)
      if symbol == MPI.UNDEFINED:
          return
      if combiner_map is None:
          return
      symbol = combiner_map.get(symbol, symbol)
      if symbol is None:
          return
      self.assertEqual(symbol, newtype.combiner)
      decoded1 = newtype.decode()
      oldtype, constructor, kwargs = decoded1
      prefix = "create" if constructor != "VALUE_INDEX" else "get"
      constructor = prefix.title() + "_" + constructor.lower()
      newtype2 = getattr(oldtype, constructor)(**kwargs)
      decoded2 = newtype2.decode()
      types1 = decoded1[2].pop("datatypes", [])
      types2 = decoded2[2].pop("datatypes", [])
      for dt1, dt2 in zip(types1, types2):
          self.assertEqual(dt1.combiner, dt2.combiner)
          self.assertEqual(dt1.typechar, dt2.typechar)
          self.assertEqual(dt1.typestr, dt2.typestr)
          self.free(dt1)
          self.free(dt2)
      self.assertEqual(decoded1[1], decoded2[1])
      self.assertEqual(decoded2[2], decoded2[2])
      for dec in (decoded1, decoded2):
          self.free(dec[0])
      self.free(newtype2)
  
imports: from mpi4py import MPI
  import mpiunittest
  import struct
label_desc: Use image node_id 3 for calling the BaseTestDatatypeCreateMixin obj's underlying member method code with example usage: obj.check_recreate(factory, newtype) without return types