hunk.code_window:     assert not torch.isnan(outputs).any(), 'Output included NaNs'
   @pytest.mark.timeout(120)
   @pytest.mark.parametrize('model_name', list_models(exclude_filters=EXCLUDE_FILTERS))
   @pytest.mark.parametrize('batch_size', [2])
   def test_model_backward(model_name, batch_size):
       """Run a single forward pass with each model"""
  
hunk.labels: keep keep keep keep replace keep keep keep
hunk.after_edit: @pytest.mark.parametrize('model_name', list_models(exclude_filters=EXCLUDE_FILTERS, name_matches_cfg=True))
  
hunk.file_path: tests/test_models.py
hunk.type: replace
file: """ Summary utilities
  
  Hacked together by / Copyright 2020 Ross Wightman
  """
  import csv
  import os
  from collections import OrderedDict
  try: 
      import wandb
  except ImportError:
      pass
  
  def get_outdir(path, *paths, inc=False):
      outdir = os.path.join(path, *paths)
      if not os.path.exists(outdir):
          os.makedirs(outdir)
      elif inc:
          count = 1
          outdir_inc = outdir + '-' + str(count)
          while os.path.exists(outdir_inc):
              count = count + 1
              outdir_inc = outdir + '-' + str(count)
              assert count < 100
          outdir = outdir_inc
          os.makedirs(outdir)
      return outdir
  
  
  def update_summary(epoch, train_metrics, eval_metrics, filename, write_header=False, log_wandb=False):
      rowd = OrderedDict(epoch=epoch)
      rowd.update([('train_' + k, v) for k, v in train_metrics.items()])
      rowd.update([('eval_' + k, v) for k, v in eval_metrics.items()])
      if log_wandb:
          wandb.log(rowd)
      with open(filename, mode='a') as cf:
          dw = csv.DictWriter(cf, fieldnames=rowd.keys())
          if write_header:  # first iteration (epoch == 1 can't be used)
              dw.writeheader()
          dw.writerow(rowd)
  