  # cython: infer_types=True, profile=True
  from typing import Iterable, Iterator, Optional, Dict, Tuple, Callable
  import srsly
  from thinc.api import set_dropout_rate, Model, Optimizer
  
  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 Iterable, Iterator, Optional, Dict, Tuple, Callable
  import srsly
  from thinc.api import set_dropout_rate, Model, Optimizer
  
  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/trainable_pipe.pyx