Based on the GitHub issue description, I need to provide a patch for the scikit-learn Pipeline class to implement `__len__`. Let me create a patch based on the standard scikit-learn codebase structure. The Pipeline class is in `sklearn/pipeline.py` and I need to add a `__len__` method that returns the number of steps in the pipeline.

Looking at the issue:
- Pipeline supports indexing with `pipe[:len(pipe)]`
- But `len(pipe)` raises an error because `__len__` is not implemented
- The fix is to add a `__len__` method that returns the number of steps

Based on the scikit-learn Pipeline implementation, the steps are stored in `self.steps` which is a list of (name, estimator) tuples. The `__len__` method should return the length of this list.

--- a/sklearn/pipeline.py
+++ b/sklearn/pipeline.py
@@ -155,6 +155,10 @@ class Pipeline(_BaseComposition):
     def __getitem__(self, ind):
         """Returns a sub-pipeline or a single esimtator in the pipeline
 
+        Indexing with an integer will return an estimator; using a slice
+        returns another Pipeline instance copying a slice of the estimators
+        list.
+        """
         if isinstance(ind, slice):
             if ind.step not in (1, None):
                 raise ValueError('Pipeline slicing only supports a step of 1')
@@ -162,6 +166,10 @@ class Pipeline(_BaseComposition):
         try:
             return self.steps[ind][1]
         except TypeError:
             return self.named_steps[ind]
 
+    def __len__(self):
+        """Returns the length of the Pipeline"""
+        return len(self.steps)
+
     @property
     def _estimator_type(self):