gsMap 1.65__py3-none-any.whl → 1.67__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
gsMap/latent_to_gene.py CHANGED
@@ -15,119 +15,126 @@ from gsMap.config import LatentToGeneConfig
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
17
 
18
- def find_Neighbors(coor, num_neighbour):
18
+ def find_neighbors(coor, num_neighbour):
19
19
  """
20
- find Neighbors of each cell (based on spatial coordinates)
20
+ Find Neighbors of each cell (based on spatial coordinates).
21
21
  """
22
22
  nbrs = NearestNeighbors(n_neighbors=num_neighbour).fit(coor)
23
23
  distances, indices = nbrs.kneighbors(coor, return_distance=True)
24
-
25
- KNN_list = [pd.DataFrame(zip([it] * indices[it].shape[0], indices[it], distances[it])) for it in
26
- range(indices.shape[0])]
27
- KNN_df = pd.concat(KNN_list)
28
- KNN_df.columns = ['Cell1', 'Cell2', 'Distance']
29
-
30
- spatial_net = KNN_df.copy()
31
- id_cell_trans = dict(zip(range(coor.shape[0]), np.array(coor.index)))
32
-
33
- spatial_net['Cell1'] = spatial_net['Cell1'].map(id_cell_trans)
34
- spatial_net['Cell2'] = spatial_net['Cell2'].map(id_cell_trans)
35
-
24
+ cell_indices = np.arange(coor.shape[0])
25
+ cell1 = np.repeat(cell_indices, indices.shape[1])
26
+ cell2 = indices.flatten()
27
+ distance = distances.flatten()
28
+ spatial_net = pd.DataFrame({'Cell1': cell1, 'Cell2': cell2, 'Distance': distance})
36
29
  return spatial_net
37
30
 
38
31
 
39
- def _build_spatial_net(adata, annotation, num_neighbour):
32
+ def build_spatial_net(adata, annotation, num_neighbour):
40
33
  """
41
- 1 Build spatial neighbourhood matrix for each spot (cell) based on the spatial coord
34
+ Build spatial neighbourhood matrix for each spot (cell) based on the spatial coordinates.
42
35
  """
43
36
  logger.info(f'------Building spatial graph based on spatial coordinates...')
44
37
 
45
- coor = pd.DataFrame(adata.obsm['spatial'])
46
- coor.index = adata.obs.index
47
-
48
- if not annotation is None:
38
+ coor = adata.obsm['spatial']
39
+ if annotation is not None:
49
40
  logger.info(f'Cell annotations are provided...')
50
- spatial_net = pd.DataFrame()
41
+ spatial_net_list = []
51
42
  # Cells with annotations
52
43
  for ct in adata.obs[annotation].dropna().unique():
53
- coor_temp = coor.loc[adata.obs[annotation] == ct, :]
54
- spatial_net_temp = find_Neighbors(coor_temp, min(num_neighbour, coor_temp.shape[0]))
55
- spatial_net = pd.concat((spatial_net, spatial_net_temp), axis=0)
44
+ idx = np.where(adata.obs[annotation] == ct)[0]
45
+ coor_temp = coor[idx, :]
46
+ spatial_net_temp = find_neighbors(coor_temp, min(num_neighbour, coor_temp.shape[0]))
47
+ # Map back to original indices
48
+ spatial_net_temp['Cell1'] = idx[spatial_net_temp['Cell1'].values]
49
+ spatial_net_temp['Cell2'] = idx[spatial_net_temp['Cell2'].values]
50
+ spatial_net_list.append(spatial_net_temp)
56
51
  logger.info(f'{ct}: {coor_temp.shape[0]} cells')
57
52
 
58
53
  # Cells labeled as nan
59
54
  if pd.isnull(adata.obs[annotation]).any():
60
- cell_nan = adata.obs.index[np.where(pd.isnull(adata.obs[annotation]))[0]]
61
- logger.info(f'Nan: {len(cell_nan)} cells')
62
-
63
- spatial_net_temp = find_Neighbors(coor, num_neighbour)
64
- spatial_net_temp = spatial_net_temp.loc[spatial_net_temp.Cell1.isin(cell_nan), :]
65
- spatial_net = pd.concat((spatial_net, spatial_net_temp), axis=0)
55
+ idx_nan = np.where(pd.isnull(adata.obs[annotation]))[0]
56
+ logger.info(f'Nan: {len(idx_nan)} cells')
57
+ spatial_net_temp = find_neighbors(coor, num_neighbour)
58
+ spatial_net_temp = spatial_net_temp[spatial_net_temp['Cell1'].isin(idx_nan)]
59
+ spatial_net_list.append(spatial_net_temp)
60
+ spatial_net = pd.concat(spatial_net_list, axis=0)
66
61
  else:
67
62
  logger.info(f'Cell annotations are not provided...')
68
- spatial_net = find_Neighbors(coor, num_neighbour)
63
+ spatial_net = find_neighbors(coor, num_neighbour)
69
64
 
70
65
  return spatial_net
71
66
 
72
67
 
73
- def find_Neighbors_Regional(cell):
74
- cell_use = spatial_net_dict[cell]
75
- similarity = cosine_similarity(coor_latent.loc[cell].values.reshape(1, -1),
76
- coor_latent.loc[cell_use].values).reshape(-1)
77
- if not args.annotation is None:
78
- annotation = adata.obs[args.annotation]
79
- df = pd.DataFrame({'Cell2': cell_use, 'Similarity': similarity, 'Annotation': annotation[cell_use]})
80
- df = df.loc[df.loc[cell_use, 'Annotation'] == df.loc[cell, 'Annotation']]
81
- else:
82
- df = pd.DataFrame({'Cell2': cell_use, 'Similarity': similarity})
68
+ def find_neighbors_regional(cell_pos, spatial_net_dict, coor_latent, config, cell_annotations):
69
+ num_neighbour = config.num_neighbour
70
+ annotations = config.annotation
71
+
72
+ cell_use_pos = spatial_net_dict.get(cell_pos, [])
73
+ if len(cell_use_pos) == 0:
74
+ return []
75
+
76
+ cell_latent = coor_latent[cell_pos, :].reshape(1, -1)
77
+ neighbors_latent = coor_latent[cell_use_pos, :]
78
+ similarity = cosine_similarity(cell_latent, neighbors_latent).reshape(-1)
83
79
 
84
- df = df.sort_values(by='Similarity', ascending=False)
85
- cell_select = df.Cell2[0:args.num_neighbour].to_list()
80
+ if annotations is not None:
81
+ cell_annotation = cell_annotations[cell_pos]
82
+ neighbor_annotations = cell_annotations[cell_use_pos]
83
+ mask = neighbor_annotations == cell_annotation
84
+ if not np.any(mask):
85
+ return []
86
+ similarity = similarity[mask]
87
+ cell_use_pos = cell_use_pos[mask]
86
88
 
87
- return cell_select
89
+ if len(similarity) == 0:
90
+ return []
88
91
 
92
+ indices = np.argsort(-similarity) # descending order
93
+ top_indices = indices[:num_neighbour]
94
+ cell_select_pos = cell_use_pos[top_indices]
95
+ return cell_select_pos
89
96
 
90
- def _compute_regional_mkscore(cell_tg, ):
97
+
98
+ def compute_regional_mkscore(cell_pos, spatial_net_dict, coor_latent, config, cell_annotations,
99
+ ranks, frac_whole, adata_X_bool):
91
100
  """
92
- compute gmean ranks of a region
101
+ Compute gmean ranks of a region.
93
102
  """
94
- cell_select = find_Neighbors_Regional(cell_tg)
103
+ cell_select_pos = find_neighbors_regional(
104
+ cell_pos, spatial_net_dict, coor_latent, config, cell_annotations
105
+ )
106
+ if len(cell_select_pos) == 0:
107
+ return np.zeros(ranks.shape[1], dtype=np.float16)
95
108
 
96
109
  # Ratio of expression ranks
97
- ranks_tg = ranks.loc[cell_select]
110
+ ranks_tg = ranks[cell_select_pos, :]
98
111
  gene_ranks_region = gmean(ranks_tg, axis=0)
99
112
  gene_ranks_region[gene_ranks_region <= 1] = 0
100
113
 
101
- if not args.no_expression_fraction:
114
+ if not config.no_expression_fraction:
102
115
  # Ratio of expression fractions
103
- frac_focal = expressed_mask.loc[cell_select].sum(0) / len(cell_select)
116
+ frac_focal = adata_X_bool[cell_select_pos, :].sum(axis=0).A1 / len(cell_select_pos)
104
117
  frac_region = frac_focal / frac_whole
105
118
  frac_region[frac_region <= 1] = 0
106
119
  frac_region[frac_region > 1] = 1
107
120
 
108
121
  # Simultaneously consider the ratio of expression fractions and ranks
109
- gene_ranks_region = (gene_ranks_region * frac_region).values
122
+ gene_ranks_region = gene_ranks_region * frac_region
110
123
 
111
124
  mkscore = np.exp(gene_ranks_region ** 1.5) - 1
112
125
  return mkscore.astype(np.float16, copy=False)
113
126
 
114
127
 
115
128
  def run_latent_to_gene(config: LatentToGeneConfig):
116
- global adata, coor_latent, spatial_net, ranks, frac_whole, args, spatial_net_dict, expressed_mask
117
- args = config
118
- # Load and process the spatial data
119
129
  logger.info('------Loading the spatial data...')
120
130
  adata = sc.read_h5ad(config.hdf5_with_latent_path)
121
131
 
122
- logger.info('------Ranking the spatial data...')
123
- adata.layers['rank'] = rankdata(adata.X.toarray().astype(np.float32), axis=1).astype(np.float32)
124
-
125
- if not config.annotation is None:
132
+ if config.annotation is not None:
126
133
  logger.info(f'------Cell annotations are provided as {config.annotation}...')
127
134
  adata = adata[~pd.isnull(adata.obs[config.annotation]), :]
128
135
 
129
136
  # Homologs transformation
130
- if not config.homolog_file is None:
137
+ if config.homolog_file is not None:
131
138
  logger.info(f'------Transforming the {config.species} to HUMAN_GENE_SYM...')
132
139
  homologs = pd.read_csv(config.homolog_file, sep='\t')
133
140
  if homologs.shape[1] != 2:
@@ -137,34 +144,42 @@ def run_latent_to_gene(config: LatentToGeneConfig):
137
144
  homologs.columns = [config.species, 'HUMAN_GENE_SYM']
138
145
  homologs.set_index(config.species, inplace=True)
139
146
  adata = adata[:, adata.var_names.isin(homologs.index)]
140
- # Log the number of genes left after homolog transformation
141
147
  logger.info(f"{adata.shape[1]} genes retained after homolog transformation.")
142
148
  if adata.shape[1] < 100:
143
149
  raise ValueError("Too few genes retained in ST data (<100).")
144
150
  adata.var_names = homologs.loc[adata.var_names, 'HUMAN_GENE_SYM'].values
145
- # drop duplicated genes
146
151
  adata = adata[:, ~adata.var_names.duplicated()]
147
152
 
148
- # Remove cells that do not express any genes after transformation, and genes that are not expressed in any cells.
149
- logger.info(f'Number of cells, genes of the input data: {adata.shape[0]},{adata.shape[1]}')
150
- adata = adata[adata.X.sum(axis=1) > 0, adata.X.sum(axis=0) > 0]
151
- logger.info(f'Number of cells, genes after transformation: {adata.shape[0]},{adata.shape[1]}')
152
- # Buid the spatial graph
153
- spatial_net = _build_spatial_net(adata, config.annotation, config.num_neighbour_spatial)
154
- spatial_net.set_index('Cell1', inplace=True)
155
- # convert the spatial graph to a dictionary cell1 to cells in the neighbourhood
156
- spatial_net_dict = spatial_net.groupby(spatial_net.index).Cell2.apply(list).to_dict()
153
+ # Create mappings
154
+ n_cells = adata.n_obs
155
+ n_genes = adata.n_vars
156
+
157
+ if config.annotation is not None:
158
+ cell_annotations = adata.obs[config.annotation].values
159
+ else:
160
+ cell_annotations = None
161
+
162
+ # Build the spatial graph
163
+ spatial_net = build_spatial_net(adata, config.annotation, config.num_neighbour_spatial)
164
+ spatial_net_dict = spatial_net.groupby('Cell1')['Cell2'].apply(np.array).to_dict()
157
165
 
158
166
  # Extract the latent representation
159
- coor_latent = pd.DataFrame(adata.obsm[config.latent_representation])
160
- coor_latent.index = adata.obs.index
161
- # Find marker genes
162
- cell_list = adata.obs.index.tolist()
167
+ coor_latent = adata.obsm[config.latent_representation]
168
+ coor_latent = coor_latent.astype(np.float32)
169
+
170
+ # Compute ranks
171
+ logger.info('------Ranking the spatial data...')
172
+ adata_X = adata.X.tocsr()
173
+ ranks = np.zeros((n_cells, n_genes), dtype=np.float32)
174
+
175
+ for i in tqdm(range(n_cells), desc="Computing ranks per cell"):
176
+ data = adata_X[i, :].toarray().flatten()
177
+ ranks[i, :] = rankdata(data, method='average')
163
178
 
164
- # Load the geometrical mean across slices
179
+ # Geometric mean across slices
165
180
  if config.gM_slices is not None:
166
181
  logger.info('Geometrical mean across multiple slices is provided.')
167
- gM = pd.read_parquet(config.gM_slices)
182
+ gM_df = pd.read_parquet(config.gM_slices)
168
183
  if config.species is not None:
169
184
  homologs = pd.read_csv(config.homolog_file, sep='\t', header=None)
170
185
  if homologs.shape[1] < 2:
@@ -172,47 +187,48 @@ def run_latent_to_gene(config: LatentToGeneConfig):
172
187
  "Homologs file must have at least two columns: one for the species and one for the human gene symbol.")
173
188
  homologs.columns = [config.species, 'HUMAN_GENE_SYM']
174
189
  homologs.set_index(config.species, inplace=True)
175
- gM = gM.loc[gM.index.isin(homologs.index)]
176
- gM.index = homologs.loc[gM.index, 'HUMAN_GENE_SYM'].values
177
- common_gene = np.intersect1d(adata.var_names, gM.index)
178
- gM = gM.loc[common_gene]
179
- gM = gM['G_Mean'].to_numpy()
180
- adata = adata[:, common_gene]
190
+ gM_df = gM_df.loc[gM_df.index.isin(homologs.index)]
191
+ gM_df.index = homologs.loc[gM_df.index, 'HUMAN_GENE_SYM'].values
192
+ common_genes = np.intersect1d(adata.var_names, gM_df.index)
193
+ gM_df = gM_df.loc[common_genes]
194
+ gM = gM_df['G_Mean'].values
195
+ adata = adata[:, common_genes]
196
+ ranks = ranks[:, np.isin(adata.var_names, common_genes)]
181
197
  else:
182
- gM = gmean(adata.layers['rank'], axis=0)
198
+ gM = gmean(ranks, axis=0)
183
199
 
184
200
  # Compute the fraction of each gene across cells
185
- expressed_mask = pd.DataFrame((adata.X > 0).toarray(), index=adata.obs.index, columns=adata.var.index)
186
- # frac_whole = np.array((adata_layer > 0).sum(axis=0))[0] / (adata.shape[0])
187
- frac_whole = np.array(expressed_mask.sum(axis=0)) / (adata.shape[0])
188
- # Normalize the geometrical mean
189
- ranks = adata.layers['rank'] / gM
190
- ranks = pd.DataFrame(ranks, index=adata.obs_names)
191
- ranks.columns = adata.var.index
192
- mk_score = [
193
- _compute_regional_mkscore(cell_tg)
194
- for cell_tg in tqdm(cell_list,
195
- desc="Finding markers (Rank-based approach) | cells")
196
- ]
197
- # Normalize the marker scores
198
- mk_score = pd.DataFrame(np.vstack(mk_score).T, index=adata.var_names, columns=cell_list)
199
- # mk_score_normalized = mk_score.div(mk_score.sum())*1e+2
200
-
201
- # Remove the mitochondrial genes from mk_score
202
- mt_gene_mask = ~adata.var_names.str.startswith(('MT-', 'mt-'))
203
- mk_score = mk_score[mt_gene_mask]
204
- adata = adata[:, mt_gene_mask]
205
-
206
- # # Save the mk_score DataFrame to an adata layer
207
- # adata.layers['mkscore'] = mk_score.values.T
201
+ adata_X_bool = adata_X.astype(bool)
202
+ frac_whole = np.asarray(adata_X_bool.sum(axis=0)).flatten() / n_cells
203
+
204
+ # Normalize the ranks
205
+ ranks = ranks / gM
206
+
207
+ # Compute marker scores in parallel
208
+ logger.info('------Computing marker scores...')
209
+
210
+ def compute_mk_score_wrapper(cell_pos):
211
+ return compute_regional_mkscore(
212
+ cell_pos, spatial_net_dict, coor_latent, config, cell_annotations, ranks, frac_whole, adata_X_bool
213
+ )
214
+
215
+ mk_scores = [compute_mk_score_wrapper(cell_pos) for cell_pos in tqdm(range(n_cells), desc="Calculating marker scores")]
216
+ mk_score = np.vstack(mk_scores).T
217
+
218
+ # Remove mitochondrial genes
219
+ gene_names = adata.var_names.values.astype(str)
220
+ mt_gene_mask = ~(np.char.startswith(gene_names, 'MT-') | np.char.startswith(gene_names, 'mt-'))
221
+ mk_score = mk_score[mt_gene_mask, :]
222
+ gene_names = gene_names[mt_gene_mask]
208
223
 
209
224
  # Save the marker scores
210
225
  logger.info(f'------Saving marker scores ...')
211
226
  output_file_path = Path(config.mkscore_feather_path)
212
227
  output_file_path.parent.mkdir(parents=True, exist_ok=True, mode=0o755)
213
- mk_score.reset_index(inplace=True)
214
- mk_score.rename(columns={mk_score.columns[0]: 'HUMAN_GENE_SYM'}, inplace=True)
215
- mk_score.to_feather(output_file_path)
228
+ mk_score_df = pd.DataFrame(mk_score, index=gene_names, columns=adata.obs_names)
229
+ mk_score_df.reset_index(inplace=True)
230
+ mk_score_df.rename(columns={'index': 'HUMAN_GENE_SYM'}, inplace=True)
231
+ mk_score_df.to_feather(output_file_path)
216
232
 
217
233
  # Save the modified adata object to disk
218
234
  adata.write(config.hdf5_with_latent_path)
@@ -20,8 +20,6 @@ logger = logging.getLogger('gsMap.spatial_ldsc')
20
20
 
21
21
  # %%
22
22
  def _coef_new(jknife):
23
- # return coef[0], coef_se[0], z[0]]
24
- # est_ = jknife.est[0, 0] / Nbar
25
23
  est_ = jknife.jknife_est[0, 0] / Nbar
26
24
  se_ = jknife.jknife_se[0, 0] / Nbar
27
25
  return est_, se_
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gsMap
3
- Version: 1.65
3
+ Version: 1.67
4
4
  Summary: Genetics-informed pathogenic spatial mapping
5
5
  Author-email: liyang <songliyang@westlake.edu.cn>, wenhao <chenwenhao@westlake.edu.cn>
6
6
  Requires-Python: >=3.8
@@ -27,7 +27,7 @@ Requires-Dist: pyfiglet
27
27
  Requires-Dist: plotly
28
28
  Requires-Dist: kaleido
29
29
  Requires-Dist: jinja2
30
- Requires-Dist: scanpy
30
+ Requires-Dist: scanpy >=1.8.0
31
31
  Requires-Dist: zarr
32
32
  Requires-Dist: bitarray
33
33
  Requires-Dist: pyarrow
@@ -1,22 +1,22 @@
1
- gsMap/__init__.py,sha256=NYWCyAKqoOz2vzIYw1ANwlhl7o8CrEyE60d5Oraeyto,78
1
+ gsMap/__init__.py,sha256=dO26Gwp-UoxhNp0ZHWuBVMGsjg6EVy09d93LGJ7pjqA,78
2
2
  gsMap/__main__.py,sha256=jR-HT42Zzfj2f-7kFJy0bkWjNxcV1MyfQHXFpef2nSE,62
3
3
  gsMap/cauchy_combination_test.py,sha256=zBPR7DOaNkr7rRoua4tAjRZL7ArjCyMRSQlPSUdHNSE,5694
4
- gsMap/config.py,sha256=hMUvlwlKZXeRdTJZfMINz_8DadVhEIT6X6fyJf11M9E,41134
4
+ gsMap/config.py,sha256=xHSIAdt5_4Vdr_2CA-YR1Wbn7i0FW70Eokd0cbi4hqU,41109
5
5
  gsMap/diagnosis.py,sha256=pp3ONVaWCOoNCog1_6eud38yicBFxL-XhH7D8iTBgF4,13220
6
- gsMap/find_latent_representation.py,sha256=BVv4dyTolrlciHG3I-vwNDh2ruPpTf9jiT1hMKZnpto,6044
7
- gsMap/format_sumstats.py,sha256=9OBxuunoOLml3LKZvvRsPEEjQvT1Cuqb0w6lqsRIYPw,13714
6
+ gsMap/find_latent_representation.py,sha256=SOGSEHyi7XAPJnTUIRWHv-fCXHR3K9UYcyJI_nuPHFY,4834
7
+ gsMap/format_sumstats.py,sha256=00VLNbfjXRqIgFn44WM-mMIboLTYTRn_3JiEtqJDfeQ,13846
8
8
  gsMap/generate_ldscore.py,sha256=2JfQoMWeQ0-B-zRHakmwq8ovkeewlnWHUCnih6od6ZE,29089
9
- gsMap/latent_to_gene.py,sha256=6TlOWDhzzrj18o9gJk2b-WMOkeXqscK8CJJKxCtilHg,9640
9
+ gsMap/latent_to_gene.py,sha256=oRYtRcq1TLXpzkoP_l93CwPDPc6LZvw6_MGrdPJhC_o,9686
10
10
  gsMap/main.py,sha256=skyBtESdjvuXd9HNq5c83OPxQTNgLVErkYhwuJm8tE4,1285
11
11
  gsMap/report.py,sha256=H0uYAru2L5-d41_LFHPPdoJbtiTzP4f8kX-mirUNAfc,6963
12
12
  gsMap/run_all_mode.py,sha256=sPEct9fRw7aAQuU7BNChxk-I8YQcXuq--mtBn-2wTTY,8388
13
13
  gsMap/setup.py,sha256=eOoPalGAHTY06_7a35nvbOaKQhq0SBE5GK4pc4bp3wc,102
14
- gsMap/spatial_ldsc_multiple_sumstats.py,sha256=09j2zG98JUjQvSHPaRIDQVMZZLYDd1JBFaZTkW7tdvY,18470
14
+ gsMap/spatial_ldsc_multiple_sumstats.py,sha256=qyKLeWz-_78WMjkpnMtoSJyJcDLnfp-armyY_mzlwkI,18391
15
15
  gsMap/visualize.py,sha256=FLIRHHj1KntLMFDjAhg1jZnJUdvrncR74pCW2Kj5pus,7453
16
16
  gsMap/GNN_VAE/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- gsMap/GNN_VAE/adjacency_matrix.py,sha256=pmSfK9TTwdrsWTmHvCqVrbRE0PAiq1lvgmxzrdQgpiU,3500
18
- gsMap/GNN_VAE/model.py,sha256=Fixl8-2zN3T5MmMtpMIvxsBYydM3QVR4uC3Hhsg0DzI,3349
19
- gsMap/GNN_VAE/train.py,sha256=KnvZYHImRzTwJl1H0dkZZqWASdZ5VgYTCifQVW8TavM,3389
17
+ gsMap/GNN_VAE/adjacency_matrix.py,sha256=TJzf5JGPDfC0-50xRP1Tdf7xqEPBLBl9E9VvQq5FE1g,3333
18
+ gsMap/GNN_VAE/model.py,sha256=6c_zw_PTg9uBnRng9fNoU3HlbrjEP1j5cxFzwPJEW5s,2959
19
+ gsMap/GNN_VAE/train.py,sha256=Etro9QKA5jU14uO17wI_gzV0Nl4YFubk9A--jpRrM4w,3095
20
20
  gsMap/templates/report_template.html,sha256=pdxHFl_W0W351NUzuJTf_Ay_BfKlEbD_fztNabAGmmg,8214
21
21
  gsMap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  gsMap/utils/generate_r2_matrix.py,sha256=A1BrUnlTrYjRwEKxK0I1FbZ5SCQzcviWVM-JzFHHRkw,29352
@@ -24,8 +24,8 @@ gsMap/utils/jackknife.py,sha256=nEDPVQJOPQ_uqfUCGX_v5cQwokgCqUmJTT_8rVFuIQo,1824
24
24
  gsMap/utils/make_annotations.py,sha256=lCbtahT27WFOwLgZrEUE5QcNRuMXmAFYUfsFR-cT-m0,22197
25
25
  gsMap/utils/manhattan_plot.py,sha256=k3n-NNgMsov9-8UQrirVqG560FUfJ4d6wNG8C0OeCjY,26235
26
26
  gsMap/utils/regression_read.py,sha256=n_hZZzQXHU-CSLvSofXmQM5Jw4Zpufv3U2HoUW344ko,8768
27
- gsmap-1.65.dist-info/entry_points.txt,sha256=s_P2Za22O077tc1FPLKMinbdRVXaN_HTcDBgWMYpqA4,41
28
- gsmap-1.65.dist-info/LICENSE,sha256=Ni2F-lLSv_H1xaVT3CoSrkiKzMvlgwh-dq8PE1esGyI,1094
29
- gsmap-1.65.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
30
- gsmap-1.65.dist-info/METADATA,sha256=mhbeULrpbr0ymhFID-_b-dO7q872vu3oyR9KQT9sO4o,3376
31
- gsmap-1.65.dist-info/RECORD,,
27
+ gsmap-1.67.dist-info/entry_points.txt,sha256=s_P2Za22O077tc1FPLKMinbdRVXaN_HTcDBgWMYpqA4,41
28
+ gsmap-1.67.dist-info/LICENSE,sha256=Ni2F-lLSv_H1xaVT3CoSrkiKzMvlgwh-dq8PE1esGyI,1094
29
+ gsmap-1.67.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
30
+ gsmap-1.67.dist-info/METADATA,sha256=YgGfS9s8cnWLy7fWpptkcMUKsMqcFdMod_V_RlMp0dM,3384
31
+ gsmap-1.67.dist-info/RECORD,,
File without changes
File without changes