biopipen 0.23.5__py3-none-any.whl → 0.23.6__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.

Potentially problematic release.


This version of biopipen might be problematic. Click here for more details.

biopipen/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.23.5"
1
+ __version__ = "0.23.6"
biopipen/ns/scrna.py CHANGED
@@ -77,6 +77,7 @@ class SeuratPreparing(Proc):
77
77
 
78
78
  /// Note
79
79
  When using `SCTransform`, the default Assay will be set to `SCT` in output, rather than `RNA`.
80
+ If you are using `cca` or `rpca` interation, the default assay will be `integrated`.
80
81
  ///
81
82
 
82
83
  /// Note
@@ -771,6 +772,10 @@ class ModuleScoreCalculator(Proc):
771
772
  >>> "Proliferation": {"features": "STMN1,TUBB"}
772
773
  >>> }
773
774
 
775
+ For `CellCycle`, the columns `S.Score`, `G2M.Score` and `Phase` will
776
+ be added to the metadata. `S.Score` and `G2M.Score` are the cell cycle
777
+ scores for each cell, and `Phase` is the cell cycle phase for each cell.
778
+
774
779
  You can also add Diffusion Components (DC) to the modules
775
780
  >>> {"DC": {"features": 2, "kind": "diffmap"}}
776
781
  will perform diffusion map as a reduction and add the first 2
@@ -1460,7 +1465,8 @@ class ScFGSEA(Proc):
1460
1465
  each: The column name in metadata to separate the cells into different subsets to do the analysis.
1461
1466
  section: The section name for the report. Worked only when `each` is not specified. Otherwise, the section name will be constructed from `each` and its value.
1462
1467
  This allows different cases to be put into the same section in the report.
1463
- gmtfile: The pathways in GMT format, with the gene names/ids in the same format as the seurat object
1468
+ gmtfile: The pathways in GMT format, with the gene names/ids in the same format as the seurat object.
1469
+ One could also use a URL to a GMT file. For example, from <https://download.baderlab.org/EM_Genesets/current_release/Human/symbol/Pathways/>.
1464
1470
  method (choice): The method to do the preranking.
1465
1471
  - signal_to_noise: Signal to noise.
1466
1472
  The larger the differences of the means (scaled by the standard deviations);
@@ -402,7 +402,10 @@ class ScrnaMetabolicLandscape(ProcGroup):
402
402
  If False, the values will be left as is.
403
403
  gmtfile: The GMT file with the metabolic pathways. The gene names should
404
404
  match the gene names in the gene list in RNAData or
405
- the Seurat object
405
+ the Seurat object.
406
+ You can also provide a URL to the GMT file.
407
+ For example, from
408
+ <https://download.baderlab.org/EM_Genesets/current_release/Human/symbol/>.
406
409
  grouping: defines the basic groups to investigate the metabolic activity
407
410
  Typically the clusters.
408
411
  grouping_prefix: Working as a prefix to group names
@@ -143,6 +143,7 @@ if (is.null(resolution) || length(resolution) == 1) {
143
143
  }
144
144
 
145
145
  if (DefaultAssay(sobj) == "SCT") {
146
+ # https://github.com/satijalab/seurat/issues/6968
146
147
  log_info("Running PrepSCTFindMarkers ...")
147
148
  sobj <- PrepSCTFindMarkers(sobj)
148
149
  }
@@ -101,7 +101,6 @@ load_sample = function(sample) {
101
101
  # filter the cells that don't have any gene expressions
102
102
  cell_exprs = colSums(obj@assays$RNA)
103
103
  obj = subset(obj, cells = names(cell_exprs[cell_exprs > 0]))
104
- # obj = SCTransform(object=obj, return.only.var.genes=FALSE, verbose=FALSE)
105
104
  obj = RenameCells(obj, add.cell.id = sample)
106
105
  # Attach meta data
107
106
  for (mname in names(mdata)) {
@@ -110,9 +109,15 @@ load_sample = function(sample) {
110
109
  if (is.factor(mdt)) { mdt = levels(mdt)[mdt] }
111
110
  obj[[mname]] = mdt
112
111
  }
113
- # obj_list[[sample]] = obj
114
112
 
115
- # obj_list
113
+ if (isTRUE(envs$use_sct)) {
114
+ # so that we have data and scale.data layers on RNA assay
115
+ # useful for visualization in case some genes are not in
116
+ # the SCT assay
117
+ obj = NormalizeData(obj, verbose = FALSE)
118
+ obj = FindVariableFeatures(obj, verbose = FALSE)
119
+ obj = ScaleData(obj, verbose = FALSE)
120
+ }
116
121
  obj
117
122
  }
118
123
 
@@ -329,6 +334,11 @@ if (!envs$no_integration) {
329
334
  IntegrateLayersArgs <- envs$IntegrateLayers
330
335
  IntegrateLayersArgs$object <- sobj
331
336
  method <- IntegrateLayersArgs$method
337
+ if (!is.null(IntegrateLayersArgs$reference) && is.character(IntegrateLayersArgs$reference)) {
338
+ log_info(" Using reference samples: {paste(IntegrateLayersArgs$reference, collapse = ', ')}")
339
+ IntegrateLayersArgs$reference <- match(IntegrateLayersArgs$reference, samples)
340
+ log_info(" Transferred to indices: {paste(IntegrateLayersArgs$reference, collapse = ', ')}")
341
+ }
332
342
  if (method %in% c("CCA", "cca")) { method <- "CCAIntegration" } else
333
343
  if (method %in% c("RPCA", "rpca")) { method <- "RPCAIntegration" } else
334
344
  if (method %in% c("Harmony", "harmony")) { method <- "HarmonyIntegration" } else
@@ -36,6 +36,7 @@ gmt_pathways <- function(gmt_file) {
36
36
  pathways
37
37
  }
38
38
 
39
+ gmtfile <- localizeGmtfile(gmtfile)
39
40
  pathways <- gmt_pathways(gmtfile)
40
41
  metabolics <- unique(as.vector(unname(unlist(pathways))))
41
42
  sobj <- readRDS(sobjfile)
@@ -38,6 +38,7 @@ gmt_pathways <- function(gmt_file) {
38
38
  pathways
39
39
  }
40
40
 
41
+ gmtfile <- localizeGmtfile(gmtfile)
41
42
  pathways <- gmt_pathways(gmtfile)
42
43
  metabolics <- unique(as.vector(unname(unlist(pathways))))
43
44
  sobj <- readRDS(sobjfile)
@@ -39,6 +39,7 @@ gmt_pathways <- function(gmt_file) {
39
39
  pathways
40
40
  }
41
41
 
42
+ gmtfile <- localizeGmtfile(gmtfile)
42
43
  pathways <- gmt_pathways(gmtfile)
43
44
  pathway_names <- names(pathways)
44
45
  metabolics <- unique(as.vector(unname(unlist(pathways))))
@@ -41,6 +41,7 @@ gmt_pathways <- function(gmt_file) {
41
41
  pathways
42
42
  }
43
43
 
44
+ gmtfile <- localizeGmtfile(gmtfile)
44
45
  pathways <- gmt_pathways(gmtfile)
45
46
  metabolics <- unique(as.vector(unname(unlist(pathways))))
46
47
  sobj <- readRDS(sobjfile)
@@ -647,6 +647,12 @@ run_div_case = function(casename) {
647
647
  # Filter
648
648
  if (!is.null(case$subset)) {
649
649
  d = immdata_from_expanded(filter_expanded_immdata(exdata, case$subset))
650
+ if (nrow(d$meta) == 0) {
651
+ stop(paste0(
652
+ "No samples/cells left after filtering. ",
653
+ "Do you have the correct `subset` for case: ",
654
+ casename, "?"))
655
+ }
650
656
  } else {
651
657
  d = immdata
652
658
  }
biopipen/utils/gsea.R CHANGED
@@ -1,8 +1,48 @@
1
1
  library(ggplot2)
2
2
  library(dplyr)
3
3
  library(tibble)
4
+ library(slugify)
4
5
 
5
- prerank = function(
6
+
7
+ localizeGmtfile <- function(gmturl, cachedir = tempdir()) {
8
+ # Download the GMT file and save it to cachedir
9
+ # Return the path to the GMT file
10
+ if (!startsWith(gmturl, "http") && !startsWith(gmturl, "ftp")) {
11
+ return(gmturl)
12
+ }
13
+ gmtfile = file.path(cachedir, basename(gmturl))
14
+ if (!file.exists(gmtfile)) {
15
+ download.file(gmturl, gmtfile)
16
+ items <- read.delim(gmtfile, header = FALSE, stringsAsFactors = FALSE, sep = "\t")
17
+ if (ncol(items) < 3) {
18
+ stop(paste0("Invalid GMT file: ", gmtfile, ", from ", gmturl))
19
+ }
20
+ if (nrow(items) == 0) {
21
+ stop(paste0("Empty GMT file: ", gmtfile, ", from ", gmturl))
22
+ }
23
+ if (nchar(items$V2[1]) < nchar(items$V1[1]) && nchar(items$V2[1]) > 0) {
24
+ warning(paste0(
25
+ "The second column is shorter, switching the first and second columns in GMT file ",
26
+ gmtfile,
27
+ " from ",
28
+ gmturl
29
+ ))
30
+ items <- items[, c(2, 1, 3:ncol(items))]
31
+ write.table(
32
+ items,
33
+ gmtfile,
34
+ row.names = F,
35
+ col.names = F,
36
+ sep = "\t",
37
+ quote = F
38
+ )
39
+ }
40
+ }
41
+ return(gmtfile)
42
+ }
43
+
44
+
45
+ prerank <- function(
6
46
  exprdata,
7
47
  pos,
8
48
  neg,
@@ -100,6 +140,7 @@ runFGSEA = function(
100
140
  ranks = unlist(ranks)
101
141
  }
102
142
 
143
+ gmtfile = localizeGmtfile(gmtfile)
103
144
  envs$pathways = gmtPathways(gmtfile)
104
145
  envs$stats = ranks
105
146
  gsea_res = do.call(fgsea::fgsea, envs)
@@ -135,7 +176,7 @@ runFGSEA = function(
135
176
  dev.off()
136
177
 
137
178
  for (pathway in topPathways) {
138
- enrfig = file.path(outdir, paste0("fgsea_", gsub("/", "-", pathway, fixed=T), ".png"))
179
+ enrfig = file.path(outdir, paste0("fgsea_", slugify(pathway), ".png"))
139
180
  png(enrfig, res=100, width=1000, height=800)
140
181
  print(plotEnrichment(
141
182
  envs$pathways[[pathway]],
@@ -191,7 +232,7 @@ runGSEA = function(
191
232
 
192
233
  envs$input.ds = gctfile
193
234
  envs$input.cls = clsfile
194
- envs$gs.db = gmtfile
235
+ envs$gs.db = localizeGmtfile(gmtfile)
195
236
  envs$output.directory = outdir
196
237
 
197
238
  do.call(GSEA, envs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: biopipen
3
- Version: 0.23.5
3
+ Version: 0.23.6
4
4
  Summary: Bioinformatics processes/pipelines that can be run from `pipen run`
5
5
  License: MIT
6
6
  Author: pwwang
@@ -1,4 +1,4 @@
1
- biopipen/__init__.py,sha256=NmV-LR0j--svKElD-cVKR1iKjk_Puucfm1d0VLr-Zto,23
1
+ biopipen/__init__.py,sha256=9os9lpDN2FpOV8_or7nYXNev84mb1sZPOVtGXewiSXw,23
2
2
  biopipen/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  biopipen/core/config.py,sha256=edK5xnDhM8j27srDzsxubi934NMrglLoKrdcC8qsEPk,1069
4
4
  biopipen/core/config.toml,sha256=Rn7Cta7WsMtmQkKGC4h9d5dU_STaIVBgR8UliiGgL6o,1757
@@ -20,8 +20,8 @@ biopipen/ns/gsea.py,sha256=EsNRAPYsagaV2KYgr4Jv0KCnZGqayM209v4yOGGTIOI,7423
20
20
  biopipen/ns/misc.py,sha256=fzn0pXvdghMkQhu-e3MMapPNMyO6IAJbtTzVU3GbFa0,3246
21
21
  biopipen/ns/plot.py,sha256=yguxmErUOH-hOM10JfuI_sXw2p49XF8yGR_gXfbd5yQ,4066
22
22
  biopipen/ns/rnaseq.py,sha256=l4vFeRasGhkexopGTM_VfSyIFewOxg-9L5niFzhWUNA,565
23
- biopipen/ns/scrna.py,sha256=qunKNFrehZZvY1RO1eUYZLNVL3T1jxIo1UUtE2dLKLo,95314
24
- biopipen/ns/scrna_metabolic_landscape.py,sha256=dSL-y1Gx1fcgebX7vk3wcSbm9aBALfCZKz0vjcDxQ_8,28139
23
+ biopipen/ns/scrna.py,sha256=42cM6n7rNy8sze9Lhl90RNkpxWT5w6LKPDrGsAK_Y7U,95808
24
+ biopipen/ns/scrna_metabolic_landscape.py,sha256=9s1NvH3aMaNDXyfwy9TdzGcSP_lIW4JqhLgknNZcIKE,28313
25
25
  biopipen/ns/tcgamaf.py,sha256=AFbUJIxiMSvsVY3RcHgjRFuMnNh2DG3Mr5slLNEyz6o,1455
26
26
  biopipen/ns/tcr.py,sha256=IcP1uD8U9XD6UbOgdjA_Lk5PK6r4R84Gi7511uvXoy8,84411
27
27
  biopipen/ns/vcf.py,sha256=cdkKroii0_nl_bSP2cnO09qESUAhHqu6btOiTSKS79Y,15314
@@ -131,12 +131,12 @@ biopipen/scripts/scrna/SeuratClusterStats-hists.R,sha256=GTZfs1yOkuoMUM1Zb19i_My
131
131
  biopipen/scripts/scrna/SeuratClusterStats-ngenes.R,sha256=GVKIXFNS_syCuSN8oxoBkjxxAeI5LdSxh-qLVkUsbDA,2146
132
132
  biopipen/scripts/scrna/SeuratClusterStats-stats.R,sha256=CE9989SaO75_KYEEVqivEbUoTcUOtiTkRGWLNtWzxI8,6450
133
133
  biopipen/scripts/scrna/SeuratClusterStats.R,sha256=PeXa3r2VTo0Q1rdXpSfAOIbYSJAcA8WUNM-tJkNUcPg,1284
134
- biopipen/scripts/scrna/SeuratClustering.R,sha256=Awc_aryIRabmGiRXe5mwug7I98_yDz4atzF7EQbMBnY,5131
134
+ biopipen/scripts/scrna/SeuratClustering.R,sha256=Q3XGg0Rq1xqswyQSsj8AmarmiT9ZFdoolXy2g9ibiTo,5185
135
135
  biopipen/scripts/scrna/SeuratFilter.R,sha256=BrYK0MLdaTtQvInMaQsmOt7oH_hlks0M1zykkJtg2lM,509
136
136
  biopipen/scripts/scrna/SeuratLoading.R,sha256=ekWKnHIqtQb3kHVQiVymAHXXqiUxs6KKefjZKjaykmk,900
137
137
  biopipen/scripts/scrna/SeuratMap2Ref.R,sha256=tisYmoSaCX8Kl8y6euuuUroWdDsJ2NGI27J5AWr9Niw,4392
138
138
  biopipen/scripts/scrna/SeuratMetadataMutater.R,sha256=Pp4GsF3hZ6ZC2vroC3LSBmVa4B1p2L3hbh981yaAIeQ,1093
139
- biopipen/scripts/scrna/SeuratPreparing.R,sha256=O1aQHMn7xwwHCKt2tjN9vKRMyvHgW-GYmB6sTi5unrg,11597
139
+ biopipen/scripts/scrna/SeuratPreparing.R,sha256=wdAjqD4tD0jTiiSlOHFVJHjPzJvNkQq4N2IxdjmDlcM,12213
140
140
  biopipen/scripts/scrna/SeuratSplit.R,sha256=vdK11V39_Uo_NaOh76QWCtxObGaEr5Ynxqq0hTiSvsU,754
141
141
  biopipen/scripts/scrna/SeuratSubClustering.R,sha256=6b1J98YYK2gwJ_qkpuvYIdlj6uWxJA8IpUXvaCjgC_U,6334
142
142
  biopipen/scripts/scrna/SeuratSubset.R,sha256=yVA11NVE2FSSw-DhxQcJRapns0tNNHdyDYi5epO6SKM,1776
@@ -144,10 +144,10 @@ biopipen/scripts/scrna/SeuratTo10X.R,sha256=T2nJBTwOe12AIKC2FZsMSv6xx3s-67CYZokp
144
144
  biopipen/scripts/scrna/TopExpressingGenes.R,sha256=m1BEpDfrzD9rJ2wEwA355GMqBq8Wfc_PzCjtLavB68Q,7754
145
145
  biopipen/scripts/scrna/Write10X.R,sha256=OMhXvJwvaH-aWsMpijKrvXQVabc1qUu5ZEwiLAhkDeY,285
146
146
  biopipen/scripts/scrna/sctype.R,sha256=NaUJkABwF5G1UVm1CCtcMbwLSj94Mo24mbYCKFqo1Bw,6524
147
- biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R,sha256=4KVbBlk2fKBXlrA31HUc3zHPEE74ixTYF6YX0CcomW8,4805
148
- biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R,sha256=nxsaTnK2zk98adUUtxInU_7mRuS21lAQP5nIE6vVDn4,5197
149
- biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayActivity.R,sha256=pF7XJheGXgx1i4BXng5KMukmicgni_XilkWp6pnwgrY,16169
150
- biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R,sha256=t0QHXrlnursqyvGn6Bf8xualNnlA3EqaOWj68pq7qyY,9820
147
+ biopipen/scripts/scrna_metabolic_landscape/MetabolicFeatures.R,sha256=UbNoyspFB8166VgbkkFyTS6tkA-7ybylfvO50eqNnBU,4841
148
+ biopipen/scripts/scrna_metabolic_landscape/MetabolicFeaturesIntraSubset.R,sha256=dpyzIZU78zLHPLIEg9mAz8mK4XazxVuUm2CN33HGPpw,5233
149
+ biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayActivity.R,sha256=hq4UroRpg4p5pvXMXs9uOJTY1r0M5KzNAwhCOTLYFVQ,16205
150
+ biopipen/scripts/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.R,sha256=0MIRrUjCtTDkUiL6GfKbtjC7bLlt50AGWFv4fl4e72k,9856
151
151
  biopipen/scripts/tcgamaf/Maf2Vcf.py,sha256=Cxh7fiSNCxWDTfIJqZDOOnaSrw-85S_fH2U-PWY03hc,704
152
152
  biopipen/scripts/tcgamaf/MafAddChr.py,sha256=V10HMisl12O3ZfXuRmFNdy5p-3mr43WCvy0GHxSpwfA,494
153
153
  biopipen/scripts/tcgamaf/maf2vcf.pl,sha256=hJKcH-NbgWK6fmK7f3qex7ozJJl-PqCNPXqpwfcHwJg,22707
@@ -161,7 +161,7 @@ biopipen/scripts/tcr/GIANA/Imgt_Human_TRBV.fasta,sha256=XUwDPXJxVH5O9Q0gCL6EILKX
161
161
  biopipen/scripts/tcr/GIANA/query.py,sha256=5NWSEDNrJomMt48tzLGpRwJTZB0zQxvMVTilyG8osX8,7298
162
162
  biopipen/scripts/tcr/Immunarch-basic.R,sha256=lPmh8Il3bEvOHEpb4FN4BokRsq6cS2h47cT15YBv6fg,3194
163
163
  biopipen/scripts/tcr/Immunarch-clonality.R,sha256=ZPOSPNAVamHyM6yskx2MVAMNw051yuTaZllj3mUwxEM,3927
164
- biopipen/scripts/tcr/Immunarch-diversity.R,sha256=dcV32A4yBxKcjAezk6UHfPX3mS79TrVq9ApxryWkRgA,27375
164
+ biopipen/scripts/tcr/Immunarch-diversity.R,sha256=Wk7b7435r4y4g3ItReTEAleHHfRXZtabRi3nNtqfo4A,27597
165
165
  biopipen/scripts/tcr/Immunarch-geneusage.R,sha256=30gJdMfe36enjIsn-tJayrU8YAowS_4EtVm5cj6FxUQ,6885
166
166
  biopipen/scripts/tcr/Immunarch-kmer.R,sha256=VmuXKI9AplyAj2NUnGV7utjgyu-ZuKRnry2ghf-9eQ0,6302
167
167
  biopipen/scripts/tcr/Immunarch-overlap.R,sha256=6RxXTjGhWzUC_1BxojMFrbrTq2PI_EAo9vpWxxbIs_o,7536
@@ -208,7 +208,7 @@ biopipen/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
208
  biopipen/utils/common_docstrs.py,sha256=ro9dUXeHMXBaqb-hTafwrG6xW5IOBEeiUM2_REjFoCo,5842
209
209
  biopipen/utils/gene.R,sha256=BzAwlLA8hO12vF-3t6IwEuTEeLa_jBll4zm_5qe3qoE,1243
210
210
  biopipen/utils/gene.py,sha256=qE_BqTayrJWxRdniffhcz6OhZcw9GUoOrj2EtFWH9Gw,2246
211
- biopipen/utils/gsea.R,sha256=FPH9H7V8mrZmqj30rBac5xBR7gu7UIKqLOT4W7lpA8E,5936
211
+ biopipen/utils/gsea.R,sha256=rB_wHUBrn9SihMy_ICSRSgj-e48SGm_ZYs1oZtFgroA,7284
212
212
  biopipen/utils/io.R,sha256=jIYdqdn0iRWfQYAZa5CjXi3fikqmYvPPLIXhobRe8sw,537
213
213
  biopipen/utils/misc.R,sha256=nkjiAsEsilq0AeiKRDNqrhTx-1Grqg-rFlkjOEOEDYg,5224
214
214
  biopipen/utils/misc.py,sha256=Pmh3CBiKJ3vC_RqorfOfRAvTVKXrGDJT8DMLfYbTivs,3055
@@ -218,7 +218,7 @@ biopipen/utils/reference.py,sha256=6bPSwQa-GiDfr7xLR9a5T64Ey40y24yn3QfQ5wDFZkU,4
218
218
  biopipen/utils/rnaseq.R,sha256=Ro2B2dG-Z2oVaT5tkwp9RHBz4dp_RF-JcizlM5GYXFs,1298
219
219
  biopipen/utils/single_cell.R,sha256=bKduqOQjSC8BtZJuwfUShR49omoEMbB57n3Gi6dYlqA,4147
220
220
  biopipen/utils/vcf.py,sha256=ajXs0M_QghEctlvUlSRjWQIABVF02wPdYd-0LP4mIsU,9377
221
- biopipen-0.23.5.dist-info/METADATA,sha256=R_O6RD_bSRRJZhYGObJS-zwXQfzU3HEnaGro0RoCXxQ,886
222
- biopipen-0.23.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
223
- biopipen-0.23.5.dist-info/entry_points.txt,sha256=16Apdku3RFwghe1nb0JR7eVo4IzLae6hCWjU1VxYUn0,525
224
- biopipen-0.23.5.dist-info/RECORD,,
221
+ biopipen-0.23.6.dist-info/METADATA,sha256=TMEpW8CrUWJfOaZufAWkrBwktO2uvWa-nbmAT_5FnOU,886
222
+ biopipen-0.23.6.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
223
+ biopipen-0.23.6.dist-info/entry_points.txt,sha256=16Apdku3RFwghe1nb0JR7eVo4IzLae6hCWjU1VxYUn0,525
224
+ biopipen-0.23.6.dist-info/RECORD,,