docs: def fix_paths(self, d, root=None, project=None):
          """
          Fix the paths in the given dictionary to get absolute paths
  
          Parameters
          ----------
          %(ExperimentsConfig.fix_paths.parameters)s
  
          Returns
          -------
          %(ExperimentsConfig.fix_paths.returns)s
  
          Notes
          -----
          d is modified in place!"""
          if root is None and project is None:
              project = d.get('project')
              if project is not None:
                  root = self[project]['root']
              else:
                  root = d['root']
          elif root is None:
              root = self[project]['root']
          elif project is None:
              pass
          paths = self.paths
          for key, val in d.items():
              if isinstance(val, dict):
                  d[key] = self.fix_paths(val, root, project)
              elif key in paths:
                  val = d[key]
                  if isinstance(val, six.string_types) and not osp.isabs(val):
                      d[key] = osp.join(root, val)
                  elif (isinstance(utils.safe_list(val)[0], six.string_types) and
                        not osp.isabs(val[0])):
                      for i in range(len(val)):
                          val[i] = osp.join(root, val[i])
          return d