code: def test_fitted_preprocessor_without_stats():
      """Tests that Preprocessors can be fitted without needing to set self.stats_."""
  
      class FittablePreprocessor(Preprocessor):
          def _fit(self, ds):
              return ds
  
      preprocessor = FittablePreprocessor()
      ds = ray.data.from_items([1])
      _ = preprocessor.fit(ds)
      assert preprocessor.fit_status() == Preprocessor.FitStatus.FITTED
  
imports: import re
  import warnings
  from typing import Dict, Union
  from unittest.mock import patch
  import numpy
  import pandas
  import pyarrow
  import pytest
  import ray
  from ray.air.constants import MAX_REPR_LENGTH
  from ray.air.util.data_batch_conversion import BatchFormat
  from ray.data.preprocessor import Preprocessor
  from ray.data.preprocessors import BatchMapper, Categorizer, Chain, Concatenator, CountVectorizer, FeatureHasher, HashingVectorizer, LabelEncoder, MaxAbsScaler, MinMaxScaler, MultiHotEncoder, Normalizer, OneHotEncoder, OrdinalEncoder, PowerTransformer, RobustScaler, SimpleImputer, StandardScaler, Tokenizer
label_desc: Use image node_id 3 for calling a global function with example usage: test_fitted_preprocessor_without_stats() and returns: ds