class_docstr: Class for connecting models and data operations with json files with
  its descriptions and metadata
docstr: Method returns operations from repository for desired task and / or
  tags. Filtering method.
  
  Args:
      task_type: task to filter
      data_type: data type to filter
      tags: operations with which tags are required
      is_full_match: requires all tags to match, or at least one
      forbidden_tags: operations with such tags shouldn't be returned
      preset: return operations from desired preset
docstr_tok: ["Method","returns","operations","from","repository","for","desired","task","and","\/","or","tags",".","Filtering","method",".","Args",":","task_type",":","task","to","filter","data_type",":","data","type","to","filter","tags",":","operations","with","which","tags","are","required","is_full_match",":","requires","all","tags","to","match",",","or","at","least","one","forbidden_tags",":","operations","with","such","tags","should","n't","be","returned","preset",":","return","operations","from","desired","preset"]
code: def suitable_operation(
      self,
      task_type: TaskTypesEnum = None,
      data_type: DataTypesEnum = None,
      tags: List[str] = None,
      is_full_match: bool = False,
      forbidden_tags: List[str] = None,
      preset: str = None,
  ) -> List[str]:
      """Method returns operations from repository for desired task and / or
      tags. Filtering method.
  
      Args:
          task_type: task to filter
          data_type: data type to filter
          tags: operations with which tags are required
          is_full_match: requires all tags to match, or at least one
          forbidden_tags: operations with such tags shouldn't be returned
          preset: return operations from desired preset
      """
  
      if not forbidden_tags:
          forbidden_tags = []
  
      if not tags:
          for excluded_default_tag in self._tags_excluded_by_default:
              # Forbidden tags by default
              forbidden_tags.append(excluded_default_tag)
  
      no_task = task_type is None
      operations_info = []
      for o in self._repo:
          is_desired_task = task_type in o.task_type or no_task
          tags_good = not tags or _is_operation_contains_tag(
              tags, o.tags, is_full_match
          )
          tags_bad = (
              not forbidden_tags
              or not _is_operation_contains_tag(
                  forbidden_tags, o.tags, False
              )
          )
          is_desired_preset = _is_operation_contains_preset(
              o.presets, preset
          )
          if (
              is_desired_task
              and tags_good
              and tags_bad
              and is_desired_preset
          ):
              operations_info.append(o)
  
      if data_type:
          # ignore text and image data types: there are no operations with these `input_type`
          ignore_data_type = data_type in [
              DataTypesEnum.text,
              DataTypesEnum.image,
          ]
          if data_type == DataTypesEnum.ts:
              valid_data_types = [DataTypesEnum.ts, DataTypesEnum.table]
          else:
              valid_data_types = ensure_wrapped_in_sequence(data_type)
          if not ignore_data_type:
              operations_info = [
                  o
                  for o in operations_info
                  if np.any(
                      [
                          data_type in o.input_types
                          for data_type in valid_data_types
                      ]
                  )
              ]
  
      return [m.id for m in operations_info]
  
imports: import json
  import os
  from collections import defaultdict
  from dataclasses import dataclass
  from typing import Dict, List, Optional, TYPE_CHECKING, Union
  import numpy
  from golem.core.log import default_log
  from golem.utilities.data_structures import ensure_wrapped_in_sequence
  from fedot.core.constants import AUTO_PRESET_NAME, BEST_QUALITY_PRESET_NAME
  from fedot.core.repository.dataset_types import DataTypesEnum
  from fedot.core.repository.json_evaluation import import_enums_from_str, import_strategy_from_str, read_field
  from fedot.core.repository.tasks import Task, TaskTypesEnum
label_desc: Use image node_id 14 for calling the OperationTypesRepository obj's underlying member method code with example usage: obj.suitable_operation(task_type, data_type, tags, is_full_match, forbidden_tags, preset) and returns: unknown