code: def fit(self, pairs: TrainingExamples, y: LabelsLike) -> None:
      y = self._verify_fit_args(pairs, y)
      dupes = [pair for label, pair in zip(y, pairs) if label]
  
      new_dupes = [
          pair for pair in dupes if pair not in self._old_dupes
      ]
      new_uncovered = not all(self._predict(new_dupes))
  
      if new_uncovered:
          self.current_predicates = self.block_learner.learn(
              dupes,
              recall=1.0,
              index_predicates=True,
              candidate_types="simple",
          )
          self._cached_scores = None
          self._old_dupes = dupes
      self._fitted = True
  
imports: from __future__ import annotations
  import logging
  import random
  from abc import ABC, abstractmethod
  from typing import TYPE_CHECKING, overload
  from warnings import warn
  import numpy
  import numpy.typing
  import sklearn.linear_model
  import dedupe.core
  import dedupe.training
label_desc: Use image node_id 2 for calling the BlockLearner obj's underlying member method code with example usage: obj.fit(pairs, y) without return types