def __call__(
        self, x: np.ndarray, column_pos: int | list | None = None, row_pos: int | list | None = None
    ) -> np.ndarray:
        """
        Performs ablation on the input x. If no column_pos is specified a random location will be selected.

        :param x: input image.
        :param column_pos: int indicating the start column to retain across all samples in the batch
                           or list of ints of length equal to the number of samples to have a different
                           column retained per sample. If not supplied a random location will be selected.
                           NB, if row_ablation_mode is true then this will be used to act on the rows through
                           transposing the image.
        :param row_pos: Unused
        :return: ablated image keeping only a column.
        """
        return self.forward(x=x, column_pos=column_pos)

        Performs ablation on the input x. If no column_pos is specified a random location will be selected.

        :param x: input image.
        :param column_pos: int indicating the start column to retain across all samples in the batch
                           or list of ints of length equal to the number of samples to have a different
                           column retained per sample. If not supplied a random location will be selected.
                           NB, if row_ablation_mode is true then this will be used to act on the rows through
                           transposing the image.
        :param row_pos: Unused
        :return: ablated image keeping only a column.
        
art/estimators/certification/derandomized_smoothing/ablators/tensorflow.py