<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_experiment_info(self):
 """Get a dictionary with information about this experiment. Contains: * *name*: the name * *sources*: a list of sources (filename, md5) * *dependencies*: a list of package dependencies (name, version) :return: experiment information :rtype: dict """

        dependencies = set()
        sources = set()
        for ing, _ in self.traverse_ingredients():
            dependencies |= ing.dependencies
            sources |= ing.sources

        for dep in dependencies:
            dep.fill_missing_version()

        mainfile = (self.mainfile.to_json(self.base_dir)[0]
                    if self.mainfile else None)

        def name_lower(d):
            return d.name.lower()

        return dict(
            name=self.path,
            base_dir=self.base_dir,
            sources=[s.to_json(self.base_dir) for s in sorted(sources)],
            dependencies=[d.to_json()
                          for d in sorted(dependencies, key=name_lower)],
            repositories=collect_repositories(sources),
            mainfile=mainfile
        )