def METHOD_NAME(self, my_task, force=False):
    # Look at the tree to find all places where this task is used.
    tasks = my_task.workflow.get_tasks_from_spec_name(self.name)
    # Look up which tasks have parents completed.
    completed_inputs = set([ task.parent.task_spec for task in tasks if task.parent.state == TaskState.COMPLETED ])
    # Find waiting tasks 
    # Exclude tasks whose specs have already been completed
    # A spec only has to complete once, even if on multiple paths
    waiting_tasks = []
    for task in tasks:
        if task.parent._has_state(TaskState.DEFINITE_MASK) and task.parent.task_spec not in completed_inputs:
            waiting_tasks.append(task.parent)
    if force:
        # If force is true, complete the task
        complete = True
    elif len(waiting_tasks) > 0:
        # If we have waiting tasks, we're obviously not done
        complete = False
    else:
        # Handle the case where there are paths from active tasks that must go through waiting inputs
        waiting_inputs = [i for i in self.inputs if i not in completed_inputs]
        sources = [t.task_spec for t in my_task.workflow.get_tasks(TaskState.READY | TaskState.WAITING)]
        # This will go back through a task spec's ancestors and return the source, if applicable
        def check(spec): 
            for parent in spec.inputs:
                return parent if parent in sources else check(parent)
        # If we can get to a completed input from this task, we don't have to wait for it
        for spec in completed_inputs:
            source = check(spec)
            if source is not None:
                sources.remove(source)
        # Now check the rest of the waiting inputs and see if they can be reached from any of the remaining tasks
        unfinished_paths = []
        for spec in waiting_inputs:
            if check(spec) is not None:
                unfinished_paths.append(spec)
                break
        complete = len(unfinished_paths) == 0
    return complete, waiting_tasks