code: def yield_train_step(self):
      if self.train_state is None:
          # Fresh run
          train_iterator = self.runner.run_train_context(
              verbose=self.verbose
          )
      else:
          train_iterator = self.runner.resume_train_context(
              train_state=self.train_state,
              verbose=self.verbose,
          )
      for train_state in train_iterator:
          self.train_state = train_state
          self.inject_at_step()
          yield
  
imports: from dataclasses import dataclass
  from typing import Dict
  import torch.nn
  import jiant.proj.main.runner
  import jiant.proj.main.components.task_sampler
  from jiant.shared.runner import save_model_with_metadata, compare_steps_max_steps
  from jiant.utils.python.datastructures import ExtendedDataClassMixin
  from jiant.utils.python.functional import always_false
  from jiant.utils.torch_utils import copy_state_dict, CPU_DEVICE, get_model_for_saving
  from jiant.utils.zlog import BaseZLogger, PRINT_LOGGER
  from jiant.shared.metarunner import AbstractMetarunner
label_desc: Use image node_id 3 for calling the JiantMetarunner obj's underlying member method code with example usage: obj.yield_train_step() without return types