code: def consolidate_dependencies(needs_ipython, child_program,
                               requirement_files, manual_dependencies):
      
      # We get the logger here because it's not defined at module level
      logger = logging.getLogger('fades')
  
      if needs_ipython:
          logger.debug("Adding ipython dependency because --ipython was detected")
          ipython_dep = parsing.parse_manual(['ipython'])
      else:
          ipython_dep = {}
  
      if child_program:
          srcfile_deps = parsing.parse_srcfile(child_program)
          logger.debug("Dependencies from source file: %s", srcfile_deps)
          docstring_deps = parsing.parse_docstring(child_program)
          logger.debug("Dependencies from docstrings: %s", docstring_deps)
      else:
          srcfile_deps = {}
          docstring_deps = {}
  
      all_dependencies = [ipython_dep, srcfile_deps, docstring_deps]
  
      if requirement_files is not None:
          for rf_path in requirement_files:
              rf_deps = parsing.parse_reqfile(rf_path)
              logger.debug('Dependencies from requirements file %r: %s', rf_path, rf_deps)
              all_dependencies.append(rf_deps)
  
      manual_deps = parsing.parse_manual(manual_dependencies)
      logger.debug("Dependencies from parameters: %s", manual_deps)
      all_dependencies.append(manual_deps)
  
      # Merge dependencies
      indicated_deps = {}
      for dep in all_dependencies:
          for repo, info in dep.items():
              indicated_deps.setdefault(repo, set()).update(info)
  
      return indicated_deps
docs: Parse files, get deps and merge them. Deps read later overwrite those read earlier.