code: def persistent(self):
      cls = self._destination_cls
      is_dirty = self.is_dirty()
      pm = super(_PRecordEvolver, self).persistent()
      if is_dirty or not isinstance(pm, cls):
          result = cls(
              _precord_buckets=pm._buckets, _precord_size=pm._size
          )
      else:
          result = pm
  
      if cls._precord_mandatory_fields:
          self._missing_fields += tuple(
              "{0}.{1}".format(cls.__name__, f)
              for f in (
                  cls._precord_mandatory_fields - set(result.keys())
              )
          )
  
      if self._invariant_error_codes or self._missing_fields:
          raise InvariantException(
              tuple(self._invariant_error_codes),
              tuple(self._missing_fields),
              "Field invariant failed",
          )
  
      check_global_invariants(result, cls._precord_invariants)
  
      return result
  
imports: from pyrsistent._checked_types import CheckedType, _restore_pickle, InvariantException, store_invariants
  from pyrsistent._field_common import set_fields, check_type, is_field_ignore_extra_complaint, PFIELD_NO_INITIAL, serialize, check_global_invariants
  from pyrsistent._pmap import PMap, pmap
label_desc: Use image node_id 4 for calling the _PRecordEvolver obj's underlying member method code with example usage: obj.persistent() and returns: result