def METHOD_NAME(self):
    cls = self._destination_cls
    is_dirty = self.is_dirty()
    pm = super(_PRecordEvolver, self).METHOD_NAME()
    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