docs: def execute(self, input_args=None, monitor=False):
          """Executes the workflow.
  
          :param input_args: External input arguments to the workflow. They have to be in a form of a dictionary where
              each key is an EOTask used in the workflow and each value is a dictionary or a tuple of arguments.
          :type input_args: dict(EOTask: dict(str: object) or tuple(object))
          :param monitor: If True workflow execution will be monitored
          :type monitor: bool
          :return: An immutable mapping containing results of terminal tasks
          :rtype: WorkflowResults
          """
          out_degs = dict(self.dag.get_outdegrees())
  
          input_args = self.parse_input_args(input_args)
  
          _, intermediate_results = self._execute_tasks(input_args=input_args, out_degs=out_degs, monitor=monitor)
  
          return WorkflowResults(intermediate_results)