class_docstr: Gets dict of NumPy arrays or InputData sources as input data
  and returns MultiModalData object with source names defined by data type
code: def define_data(
      self,
      features: dict,
      task: Task,
      target: str = None,
      is_predict: bool = False,
      idx=None,
  ) -> MultiModalData:
      # change data type to InputData
      for source, inner_data in features.items():
          if not isinstance(inner_data, InputData):
              features[source] = array_to_input_data(
                  features_array=inner_data,
                  target_array=target,
                  task=task,
                  idx=idx,
              )
      # create labels for data sources
      sources = dict(
          (
              f"{self.source_name_by_type.get(features[data_part_key].data_type.name)}/{data_part_key}",
              data_part,
          )
          for (data_part_key, data_part) in features.items()
      )
      data = MultiModalData(sources)
      return data
  
imports: from abc import ABC, abstractmethod
  from copy import deepcopy
  from os import PathLike
  from typing import Union, Optional
  import numpy
  import pandas
  from fedot.core.data.data import InputData, array_to_input_data
  from fedot.core.data.multi_modal import MultiModalData
  from fedot.core.repository.dataset_types import DataTypesEnum
  from fedot.core.repository.tasks import Task, TaskTypesEnum
label_desc: Use image node_id 1 for calling the MultimodalStrategy obj's underlying member method code with example usage: obj.define_data(features, task, target, is_predict, idx) and returns: data