code: def test_multimodal_data_splitting_is_correct(
      datas_funs, cv_folds, shuffle, stratify
  ):
      mdata = MultiModalData(
          {
              f"data_{i}": data_fun()
              for i, data_fun in enumerate(datas_funs)
          }
      )
      data_splitter = DataSourceSplitter(
          cv_folds=cv_folds, shuffle=shuffle, stratify=stratify
      )
      data_producer = data_splitter.build(mdata)
      keys = tuple(mdata.keys())
      features_dimensity = [
          subdata.features.shape[1:] for subdata in mdata.values()
      ]
  
      for samples in data_producer():
          for sample in samples:
              assert isinstance(sample, MultiModalData)
  
              # keys should be the same
              assert set(keys) == set(sample.keys())
  
              # idx should be the same
              idx = [
                  np.reshape(x.idx, (-1, 1)) for x in sample.values()
              ]
              assert np.all(np.diff(np.concatenate(idx, 1), 1) == 0)
  
              # dimensity of features should be the same
              splitted_data_features_dimensity = [
                  subdata.features.shape[1:]
                  for subdata in sample.values()
              ]
              assert (
                  features_dimensity == splitted_data_features_dimensity
              )
  
              # shuffle should be done
              if shuffle:
                  for key in keys:
                      assert check_shuffle(sample[key])
  
          # stratify should be done
          if stratify:
              for key in keys:
                  assert check_stratify(
                      samples[0][key], samples[1][key]
                  )
  
imports: from functools import partial
  from typing import Callable
  import numpy
  import pandas
  import pytest
  from fedot.core.data.data import InputData
  from fedot.core.data.data_split import train_test_data_setup
  from fedot.core.data.multi_modal import MultiModalData
  from fedot.core.optimisers.objective.data_source_splitter import DataSourceSplitter
  from fedot.core.repository.dataset_types import DataTypesEnum
  from fedot.core.repository.tasks import Task, TaskTypesEnum, TsForecastingParams
  from fedot.core.utils import split_data
  from fedot.core.data.cv_folds import cv_generator
  from test.unit.pipelines.test_decompose_pipelines import get_classification_data
  from test.unit.tasks.test_forecasting import get_ts_data
label_desc: Use image node_id 16 for calling a global function with example usage: test_multimodal_data_splitting_is_correct(datas_funs, cv_folds, shuffle, stratify) without return types