code: def test_data_preprocessor_inits_supplementary_preprocessors_only_once():
      input_data = data_with_only_categorical_features()
  
      preprocessor = DataPreprocessor()
  
      preprocessor._init_supplementary_preprocessors(input_data)
      prev = [
          {
              k: id(v)
              for k, v in preprocessor.binary_categorical_processors.items()
          },
          {k: id(v) for k, v in preprocessor.types_correctors.items()},
      ]
      preprocessor._init_supplementary_preprocessors(input_data)
      cur = [
          {
              k: id(v)
              for k, v in preprocessor.binary_categorical_processors.items()
          },
          {k: id(v) for k, v in preprocessor.types_correctors.items()},
      ]
      are_equal = [dct1 == dct2 for dct1, dct2 in zip(prev, cur)]
      assert are_equal[0]
      assert are_equal[1]
  
file_path: FEDOT/test/integration/preprocessing/test_pipeline_preprocessing.py
imports: from typing import Tuple, Callable
  import pandas
  import pytest
  from fedot.core.data.data import InputData
  from fedot.core.pipelines.node import PipelineNode
  from fedot.core.pipelines.pipeline import Pipeline
  from fedot.preprocessing.dummy_preprocessing import DummyPreprocessor
  from fedot.preprocessing.preprocessing import DataPreprocessor
  from test.unit.preprocessing.test_pipeline_preprocessing import data_with_mixed_types_in_each_column, data_with_only_categorical_features
label_desc: Use image node_id 4 for calling a global function with example usage: test_data_preprocessor_inits_supplementary_preprocessors_only_once() without return types