  # cython: infer_types=True, profile=True
  from typing import Optional, Tuple, Iterable, Iterator, Callable, Union, Dict
  import srsly
  import warnings
  
  from ..tokens.doc cimport Doc
 
</s> remove             # Try to preserve the original function signature.
 </s> add             # We need to preserve the original function signature so that
            # the original parameters are passed to pydantic for validation downstream. </s> remove                 pass
 </s> add                 # Can fail for Cython methods that do not have bindings.
                warnings.warn(Warnings.W122.format(method=name, pipe=pipe.name))
                continue </s> remove # cython: infer_types=True, profile=True
 </s> add # cython: infer_types=True, profile=True, binding=True
# cython: infer_types=True, profile=True, binding=True
# cython: infer_types=True, profile=True, binding=True
  from typing import Optional, Tuple, Iterable, Iterator, Callable, Union, Dict
  import srsly
  import warnings
  
  from ..tokens.doc cimport Doc
replace keep keep keep keep keep
 Fix config validation failures caused by NVTX pipeline wrappers (#11460)

* Enable Cython<->Python bindings for `Pipe` and `TrainablePipe` methods

* `pipes_with_nvtx_range`: Skip hooking methods whose signature cannot be ascertained

When loading pipelines from a config file, the arguments passed to individual pipeline components is validated by `pydantic` during init. For this, the validation model attempts to parse the function signature of the component's c'tor/entry point so that it can check if all mandatory parameters are present in the config file.

When using the `models_and_pipes_with_nvtx_range` as a `after_pipeline_creation` callback, the methods of all pipeline components get replaced by a NVTX range wrapper **before** the above-mentioned validation takes place. This can be problematic for components that are implemented as Cython extension types - if the extension type is not compiled with Python bindings for its methods, they will have no signatures at runtime. This resulted in `pydantic` matching the *wrapper's* parameters with the those in the config and raising errors.

To avoid this, we now skip applying the wrapper to any (Cython) methods that do not have signatures. 
spacy/pipeline/pipe.pyx