code: def execute_train_task_with_dependencies(self, task_cls, **kwargs):
          
          log.info("Task {0}".format(get_task_name(task_cls)))
          #Instantiate the task
          task_inst = task_cls()
          #Grab arguments from the task instance and set them
          for arg in task_inst.args:
              if arg not in kwargs:
                  kwargs[arg] = task_inst.args[arg]
          #Check for dependencies defined by the task
          if hasattr(task_inst, "dependencies"):
              deps = task_inst.dependencies
              dep_results = []
              #Run the dependencies through recursion (in case of dependencies of dependencies, etc)
              for dep in deps:
                  log.info("Dependency {0}".format(get_task_name(dep)))
                  dep_results.append(self.execute_train_task_with_dependencies(dep.cls, **dep.args))
              trained_dependencies = []
              #Add executed dependency to trained_dependencies list on the task
              for i in xrange(0,len(deps)):
                  dep = deps[i]
                  dep_result = dep_results[i]
                  name = dep.name
                  namespace = dep.namespace
                  category = dep.category
                  trained_dependencies.append(TrainedDependency(category=category, namespace=namespace, name = name, inst = dep))
              task_inst.trained_dependencies = trained_dependencies
          #Finally, run the task
          task_inst.train(**kwargs)
          return task_inst
docs: Run the training, as well as any dependencies of the training
          task_cls - class of a task