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