def schedule()

in torchx/schedulers/local_scheduler.py [0:0]


    def schedule(self, dryrun_info: AppDryRunInfo[PopenRequest]) -> str:
        if len(self._apps) == self._cache_size:
            if not self._evict_lru():
                raise IndexError(
                    f"App cache size ({self._cache_size}) exceeded. Increase the cache size"
                )

        request: PopenRequest = dryrun_info.request
        app_id = request.app_id
        app_log_dir = request.log_dir
        assert (
            app_id not in self._apps
        ), "no app_id collisions expected since uuid4 suffix is used"

        os.makedirs(app_log_dir)
        local_app = _LocalAppDef(app_id, app_log_dir)

        for role_name in request.role_params.keys():
            role_params = request.role_params[role_name]
            role_log_dirs = request.role_log_dirs[role_name]
            for replica_id in range(len(role_params)):
                replica_params = role_params[replica_id]
                replica_log_dir = role_log_dirs[replica_id]

                os.makedirs(replica_log_dir)
                replica = self._popen(
                    role_name,
                    replica_id,
                    replica_params,
                    # pyre-ignore[6] cfg type checked by runopt.resolve()
                    dryrun_info._cfg.get("prepend_cwd"),
                )
                local_app.add_replica(role_name, replica)
        self._apps[app_id] = local_app
        return app_id