def is_PPR_file_exists()

in para_graph_sampler/graph_engine/frontend/samplers_cpp.py [0:0]


    def is_PPR_file_exists(self, file_mode):
        """
        Check if there exist files for previously computed PPR values. 
        """
        assert file_mode in self.mode2str.keys()
        if self.dir_data is None or self.dir_data['is_adj_changed']:
            return False, "", ""        # This will make C++ to compute PPR without storing it in file
        str_trans = "transductive" if self.is_transductive else "inductive"
        dir_data_local = self.dir_data['local']
        folder = dir_data_local
        dir_prefix = f"{self.name_data}/ppr_float"
        dir_suffix = f"{str_trans}_{self.mode2str[file_mode]}_{self.alpha}_{self.epsilon}"
        # ==
        fname_neighs_all = f"{folder}/{dir_prefix}/neighs_{dir_suffix}_*"
        fname_scores_all = f"{folder}/{dir_prefix}/scores_{dir_suffix}_*"
        fname_neighs_pattern = f"{folder}/{dir_prefix}/neighs_{dir_suffix}" + "_{}.bin"
        fname_scores_pattern = f"{folder}/{dir_prefix}/scores_{dir_suffix}" + "_{}.bin"
        k_required = self.k if not hasattr(self, 'k_required') else self.k_required
        fname_neighs = f"{folder}/{dir_prefix}/neighs_{dir_suffix}_{k_required}.bin"
        fname_scores = f"{folder}/{dir_prefix}/scores_{dir_suffix}_{k_required}.bin"
        # check if meet the condition
        candy_neighs = sorted(glob.glob(fname_neighs_all))      # will return [] if dir `ppr` doesn't exist
        candy_scores = sorted(glob.glob(fname_scores_all))
        is_found = False
        for cn in candy_neighs:
            _, __, k_meta = cn.split("/")[-1].split(".bin")[0].split("_")[-3:]
            if k_required <= int(k_meta):
                fname_neighs = fname_neighs_pattern.format(k_meta)
                fname_scores = fname_scores_pattern.format(k_meta)
                if fname_scores in candy_scores:
                    is_found = True
                    break
        dir_target = f"{dir_data_local}/{self.name_data}/ppr_float"
        if not os.path.exists(dir_target):
            os.makedirs(dir_target)
        return is_found, fname_neighs, fname_scores