docstr: Proposes promising candidates for new parents
  :param node: node to propose changes for
  :param possible_operations: list of candidates for replace
  :return: list of candidates with str operations
docstr_tok: ["Proposes","promising","candidates","for","new","parents",":","param","node",":","node","to","propose","changes","for",":","param","possible_operations",":","list","of","candidates","for","replace",":","return",":","list","of","candidates","with","str","operations"]
code: def propose_parent(
      self, node: OptNode, possible_operations: List[str]
  ) -> List[str]:
      """
      Proposes promising candidates for new parents
      :param node: node to propose changes for
      :param possible_operations: list of candidates for replace
      :return: list of candidates with str operations
      """
  
      operation_id = node.content["name"]
      if check_for_specific_operations(operation_id):
          # data source, exog_ts and custom models moving is useless
          return []
  
      parent_operations = [
          str(n.content["name"]) for n in node.nodes_from
      ]
      candidates = set.intersection(
          set(self.data_operations), set(possible_operations)
      )
  
      if operation_id in candidates:
          candidates.remove(operation_id)
      if parent_operations:
          for parent_operation_id in parent_operations:
              if check_for_specific_operations(parent_operation_id):
                  # data source, exog_ts and custom models moving is useless
                  return []
              if parent_operation_id in candidates:
                  # the sequence of the same parent and child is not meaningful
                  candidates.remove(parent_operation_id)
      return candidates
  
file_path: FEDOT/fedot/core/pipelines/pipeline_advisor.py
imports: from typing import List
  from golem.core.optimisers.advisor import DefaultChangeAdvisor, RemoveType
  from golem.core.optimisers.graph import OptNode
  from fedot.core.repository.operation_types_repository import get_operations_for_task
label_desc: Use image node_id 4 for calling the PipelineChangeAdvisor obj's underlying member method code with example usage: obj.propose_parent(node, possible_operations) and returns: candidates, list, list