def METHOD_NAME(recording, method="naive", method_kwargs={}, extra_outputs=False, **job_kwargs):
    """Find spike from a recording from given templates.
    Parameters
    ----------
    recording: RecordingExtractor
        The recording extractor object
    method: str
        Which method to use ('naive' | 'tridesclous' | 'circus' | 'circus-omp' | 'wobble')
    method_kwargs: dict, optional
        Keyword arguments for the chosen method
    extra_outputs: bool
        If True then method_kwargs is also returned
    job_kwargs: dict
        Parameters for ChunkRecordingExecutor
    Returns
    -------
    spikes: ndarray
        Spikes found from templates.
    method_kwargs:
        Optionaly returns for debug purpose.
    Notes
    -----
    For all methods except 'wobble', templates are represented as a WaveformExtractor in method_kwargs
    so statistics can be extracted.  For 'wobble' templates are represented as a numpy.ndarray.
    """
    from .method_list import matching_methods
    assert method in matching_methods, "The method %s is not a valid one" % method
    job_kwargs = fix_job_kwargs(job_kwargs)
    method_class = matching_methods[method]
    # initialize
    method_kwargs = method_class.initialize_and_check_kwargs(recording, method_kwargs)
    # add
    method_kwargs["margin"] = method_class.get_margin(recording, method_kwargs)
    # serialiaze for worker
    method_kwargs_seralized = method_class.serialize_method_kwargs(method_kwargs)
    # and run
    func = _find_spikes_chunk
    init_func = _init_worker_find_spikes
    init_args = (recording, method, method_kwargs_seralized)
    processor = ChunkRecordingExecutor(
        recording, func, init_func, init_args, handle_returns=True, job_name=f"find spikes ({method})", **job_kwargs
    )
    spikes = processor.run()
    spikes = np.concatenate(spikes)
    if extra_outputs:
        return spikes, method_kwargs
    else:
        return spikes