def METHOD_NAME(self, label,  x, y, p, provenance_data):
    """
    Extract and yield synapse provenance.
    :param str label: The label of the node
    :param int x: x coordinate of the chip where this core
    :param int y: y coordinate of the core where this core
    :param int p: virtual id of the core
    :param list(int) provenance_data: A list of data items to interpret
    """
    synapse_prov = SynapseProvenance(*provenance_data)
    with ProvenanceWriter() as db:
        db.insert_core(
            x, y, p, self.TOTAL_PRE_SYNAPTIC_EVENT_NAME,
            synapse_prov.n_pre_synaptic_events)
        db.insert_core(
            x, y, p, self.SATURATION_COUNT_NAME,
            synapse_prov.n_saturations)
        if synapse_prov.n_saturations > 0:
            db.insert_report(
                f"The weights from the synapses for {label} saturated "
                f"{synapse_prov.n_saturations} times. ")
        db.insert_core(
            x, y, p, self.SATURATED_PLASTIC_WEIGHTS_NAME,
            synapse_prov.n_plastic_saturations)
        if synapse_prov.n_plastic_saturations > 0:
            db.insert_report(
                f"The weights from the plastic synapses for {label} "
                f"saturated {synapse_prov.n_plastic_saturations} times. ")
        db.insert_core(
            x, y, p, self.GHOST_SEARCHES, synapse_prov.n_ghost_searches)
        if synapse_prov.n_ghost_searches > 0:
            db.insert_report(
                f"The number of failed population table searches for "
                f"{label} was {synapse_prov.n_ghost_searches}. ")
        db.insert_core(
            x, y, p, self.BIT_FIELDS_NOT_READ,
            synapse_prov.n_failed_bitfield_reads)
        if synapse_prov.n_failed_bitfield_reads:
            db.insert_report(
                f"On {label}, the filter for stopping redundant DMAs "
                f"couldn't be fully filled in; it failed to read "
                f"{synapse_prov.n_failed_bitfield_reads} entries. "
                "Try reducing neurons per core.")
        db.insert_core(
            x, y, p, self.INVALID_MASTER_POP_HITS,
            synapse_prov.n_invalid_pop_table_hits)
        if synapse_prov.n_invalid_pop_table_hits > 0:
            db.insert_report(
                f"On {label}, there were "
                f"{synapse_prov.n_invalid_pop_table_hits} keys received "
                f"that had no master pop entry for them.")
        db.insert_core(
            x, y, p, self.BIT_FIELD_FILTERED_PACKETS,
            synapse_prov.n_filtered_by_bitfield)
        db.insert_core(
            x, y, p, self.SYNAPSES_SKIPPED,
            synapse_prov.n_skipped_synapses)
        if synapse_prov.n_skipped_synapses > 0:
            db.insert_report(
                f"On {label}, there were {synapse_prov.n_skipped_synapses}"
                " that were skipped because a spike was received later"
                " than the delay in the synapse")
        db.insert_core(
            x, y, p, self.LATE_SPIKES, synapse_prov.n_late_spikes)
        db.insert_core(
            x, y, p, self.MAX_LATE_SPIKE, synapse_prov.max_late_spike)