import random import warnings import numpy as np from scipy.sparse import coo_matrix from torch.utils.data import Dataset from scipy.sparse import SparseEfficiencyWarning warnings.filterwarnings("ignore", category=SparseEfficiencyWarning) def getLocal(mat, i, jj, w, N): if i >= 0 and jj >= 0 and i+w <= N and jj+w <= N: mat = mat[i:i+w,jj:jj+w].toarray() # print(f"global: {mat.shape}") return mat[None,...] # pad_width = ((up, down), (left, right)) slice_pos = [[i, i+w], [jj, jj+w]] pad_width = [[0, 0], [0, 0]] if i < 0: pad_width[0][0] = -i slice_pos[0][0] = 0 if jj < 0: pad_width[1][0] = -jj slice_pos[1][0] = 0 if i+w > N: pad_width[0][1] = i+w-N slice_pos[0][1] = N if jj+w > N: pad_width[1][1] = jj+w-N slice_pos[1][1] = N _mat = mat[slice_pos[0][0]:slice_pos[0][1],slice_pos[1][0]:slice_pos[1][1]].toarray() padded_mat = np.pad(_mat, pad_width, mode='constant', constant_values=0) # print(f"global: {padded_mat.shape}",slice_pos, pad_width) return padded_mat[None,...] def upperCoo2symm(row,col,data,N=None): # print(np.max(row),np.max(col),N) if N: shape=(N,N) else: shape=(row.max() + 1,col.max() + 1) sparse_matrix = coo_matrix((data, (row, col)), shape=shape) symm = sparse_matrix + sparse_matrix.T diagVal = symm.diagonal(0)/2 symm = symm.tocsr() symm.setdiag(diagVal) return symm def shuffleIFWithCount(df): shuffled_df = df.copy() shuffled_df[['oe', 'balanced']] = df[['oe', 'balanced']].sample(frac=1).reset_index(drop=True) return shuffled_df def shuffleIF(df): if len(df)<10: df = shuffleIFWithCount(df) return df min=np.min(df['bin1_id']) max=np.max(df['bin1_id']) distance = df['distance'].iloc[0] bin1_id = np.random.randint(min, high=max, size=int(len(df)*1.5)) bin2_id = bin1_id + distance pair_id = set(zip(bin1_id,bin2_id)) if len(pair_id)