def METHOD_NAME(self, x: np.ndarray, y: Optional[np.ndarray] = None, **kwargs) -> "CLASSIFIER_TYPE":
    """
    Extract a thieved classifier.
    :param x: An array with the source input to the victim classifier.
    :param y: Target values (class labels) one-hot-encoded of shape (nb_samples, nb_classes) or indices of shape
              (nb_samples,). Not used in this attack.
    :param thieved_classifier: A classifier to be stolen, currently always trained on one-hot labels.
    :type thieved_classifier: :class:`.Classifier`
    :return: The stolen classifier.
    """
    # Warning to users if y is not None
    if y is not None:  # pragma: no cover
        logger.warning("This attack does not use the provided label y.")
    # Check the size of the source input vs nb_stolen
    if x.shape[0] < self.nb_stolen:  # pragma: no cover
        logger.warning(
            "The size of the source input is smaller than the expected number of queries submitted "
            "to the victim classifier."
        )
    # Check if there is a thieved classifier provided for training
    thieved_classifier = kwargs["thieved_classifier"]
    if thieved_classifier is None or not isinstance(thieved_classifier, ClassifierMixin):  # pragma: no cover
        raise ValueError("A thieved classifier is needed.")
    # Select data to attack
    selected_x = self._select_data(x)
    # Query the victim classifier
    fake_labels = self._query_label(selected_x)
    # Train the thieved classifier
    thieved_classifier.fit(  # type: ignore
        x=selected_x,
        y=fake_labels,
        batch_size=self.batch_size_fit,
        nb_epochs=self.nb_epochs,
    )
    return thieved_classifier  # type: ignore