biopipen 0.27.2__py3-none-any.whl → 0.27.3__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.27.2"
1
+ __version__ = "0.27.3"
biopipen/ns/scrna.py CHANGED
@@ -201,6 +201,13 @@ class SeuratPreparing(Proc):
201
201
  - scvi: Same as `scVIIntegration`.
202
202
  - <more>: See <https://satijalab.org/seurat/reference/integratelayers>
203
203
 
204
+ DoubletFinder (ns): Arguments to run [`DoubletFinder`](https://github.com/chris-mcginnis-ucsf/DoubletFinder).
205
+ See also <https://demultiplexing-doublet-detecting-docs.readthedocs.io/en/latest/DoubletFinder.html>.
206
+ To disable `DoubletFinder`, set `envs.DoubletFinder` to `None` or `False`; or set `pcs` to `0`.
207
+ - PCs (type=int): Number of PCs to use for 'doubletFinder' function.
208
+ - doublets (type=float): Number of expected doublets as a proportion of the pool size.
209
+ - pN (type=float): Number of doublets to simulate as a proportion of the pool size.
210
+
204
211
  Requires:
205
212
  r-seurat:
206
213
  - check: {{proc.lang}} <(echo "library(Seurat)")
@@ -227,6 +234,7 @@ class SeuratPreparing(Proc):
227
234
  "min_cells": 5,
228
235
  },
229
236
  "IntegrateLayers": {"method": "harmony"},
237
+ "DoubletFinder": {"PCs": 0, "pN": 0.25, "doublets": 0.075},
230
238
  }
231
239
  script = "file://../scripts/scrna/SeuratPreparing.R"
232
240
  plugin_opts = {
@@ -120,7 +120,7 @@ expand_each <- function(name, case) {
120
120
  pull(case$each) %>% na.omit() %>% unique() %>% as.vector()
121
121
  }
122
122
  for (each in eachs) {
123
- by <- make.names(paste0(".", name, "_", case$each,"_", each))
123
+ by <- make.names(paste0("..", name, "_", case$each,"_", each))
124
124
  srtobj@meta.data <<- srtobj@meta.data %>% mutate(
125
125
  !!sym(by) := if_else(
126
126
  !!sym(case$each) == each,
@@ -364,6 +364,16 @@ add_case_report <- function(info, sigmarkers, siggenes) {
364
364
  }
365
365
  }
366
366
 
367
+ ensure_sobj <- function(expr, allow_empty) {
368
+ tryCatch({ expr }, error = function(e) {
369
+ if (allow_empty) {
370
+ log_warn(" Ignoring this case: {e$message}")
371
+ return(NULL)
372
+ } else {
373
+ stop(e)
374
+ }
375
+ })
376
+ }
367
377
 
368
378
  do_case_findall <- function(casename) {
369
379
  # casename
@@ -382,10 +392,17 @@ do_case_findall <- function(casename) {
382
392
  # args$min.cells.group <- args$min.cells.group %||% 1
383
393
  # args$min.cells.feature <- args$min.cells.feature %||% 1
384
394
  # args$min.pct <- args$min.pct %||% 0
395
+ allow_empty = startsWith(case$group.by, "..")
385
396
  if (!is.null(case$subset)) {
386
- args$object <- srtobj %>% filter(!!parse_expr(case$subset) & !is.na(!!sym(case$group.by)))
397
+ args$object <- ensure_sobj({
398
+ srtobj %>% filter(!!parse_expr(case$subset) & !is.na(!!sym(case$group.by)))
399
+ }, allow_empty)
400
+ if (is.null(args$object)) { return() }
387
401
  } else {
388
- args$object <- srtobj %>% filter(!is.na(!!sym(case$group.by)))
402
+ args$object <- ensure_sobj({
403
+ srtobj %>% filter(!is.na(!!sym(case$group.by)))
404
+ }, allow_empty)
405
+ if (is.null(args$object)) { return() }
389
406
  }
390
407
  Idents(args$object) <- case$group.by
391
408
 
@@ -486,11 +503,19 @@ do_case <- function(casename) {
486
503
  # sigmarkers
487
504
  # rest
488
505
  args <- case$rest
506
+ allow_empty = startsWith(case$group.by, "..")
489
507
  if (!is.null(case$subset)) {
490
- args$object <- srtobj %>% filter(!!parse_expr(case$subset) & !is.na(!!sym(case$group.by)))
508
+ args$object <- ensure_sobj({
509
+ srtobj %>% filter(!!parse_expr(case$subset) & !is.na(!!sym(case$group.by)))
510
+ }, allow_empty)
511
+ if (is.null(args$object)) { return() }
491
512
  } else {
492
- args$object <- srtobj %>% filter(!is.na(!!sym(case$group.by)))
513
+ args$object <- ensure_sobj({
514
+ srtobj %>% filter(!is.na(!!sym(case$group.by)))
515
+ }, allow_empty)
516
+ if (is.null(args$object)) { return() }
493
517
  }
518
+
494
519
  args$assay <- case$assay
495
520
  args$group.by <- case$group.by
496
521
  args$ident.1 <- case$ident.1
@@ -76,7 +76,7 @@ expand_each <- function(name, case) {
76
76
  pull(case$each) %>% unique() %>% na.omit()
77
77
  }
78
78
  for (each in eachs) {
79
- by = make.names(paste0(".", name, "_", case$each, "_", each))
79
+ by = make.names(paste0("..", name, "_", case$each, "_", each))
80
80
  idents <- case$idents
81
81
  if (is.null(idents) || length(idents) == 0) {
82
82
  srtobj@meta.data = srtobj@meta.data %>%
@@ -169,17 +169,31 @@ do_enrich <- function(info, markers, sig) {
169
169
  }
170
170
  }
171
171
 
172
+ ensure_sobj <- function(expr, allow_empty) {
173
+ tryCatch({ expr }, error = function(e) {
174
+ if (allow_empty) {
175
+ log_warn(" Ignoring this case: {e$message}")
176
+ return(NULL)
177
+ } else {
178
+ stop(e)
179
+ }
180
+ })
181
+ }
182
+
172
183
  do_case <- function(casename) {
173
184
  log_info("- Dealing with case: {casename} ...")
174
185
  info <- casename_info(casename, cases, outdir, create = TRUE)
175
186
  case <- cases[[casename]]
187
+ allow_empty = startsWith(case$group_by, "..")
176
188
 
177
189
  if (sum(!is.na(srtobj@meta.data[[case$group_by]])) == 0) {
178
190
  msg = "Not enough cells to run tests."
179
191
  } else {
180
- sobj <- srtobj %>% filter(!is.na(!!sym(case$group_by)))
192
+ sobj <- ensure_sobj({ srtobj %>% filter(!is.na(!!sym(case$group_by))) }, allow_empty)
193
+ if (is.null(sobj)) { return() }
181
194
  if (!is.null(case$subset)) {
182
- sobj <- srtobj %>% filter(!is.na(!!sym(case$group_by)), !!parse_expr(case$subset))
195
+ sobj <- ensure_sobj({ sobj %>% filter(!!parse_expr(case$subset)) }, allow_empty)
196
+ if (is.null(sobj)) { return() }
183
197
  }
184
198
  df <- tryCatch({
185
199
  GetAssayData(sobj, layer = "data")
@@ -72,7 +72,7 @@ expand_each <- function(name, case) {
72
72
  pull(case$each) %>% na.omit() %>% unique() %>% as.vector()
73
73
  }
74
74
  for (each in eachs) {
75
- by <- make.names(paste0(".", name, "_", case$each,"_", each))
75
+ by <- make.names(paste0("..", name, "_", case$each,"_", each))
76
76
  srtobj@meta.data <<- srtobj@meta.data %>%
77
77
  mutate(!!sym(by) := if_else(
78
78
  !!sym(case$each) == each,
@@ -97,18 +97,35 @@ log_info("- Expanding cases...")
97
97
  cases <- expand_cases(cases, defaults, expand_each)
98
98
 
99
99
 
100
+ ensure_sobj <- function(expr, allow_empty) {
101
+ tryCatch({ expr }, error = function(e) {
102
+ if (allow_empty) {
103
+ log_warn(" Ignoring this case: {e$message}")
104
+ return(NULL)
105
+ } else {
106
+ stop(e)
107
+ }
108
+ })
109
+ }
110
+
111
+
100
112
  do_case <- function(name, case) {
101
113
  log_info("- Handling case: {name} ...")
102
114
  info <- casename_info(name, cases, outdir, create = TRUE)
103
115
 
116
+ allow_empty = startsWith(case$group.by, "..")
104
117
  # prepare expression matrix
105
118
  log_info(" Preparing expression matrix...")
106
- sobj <- srtobj %>% filter(!is.na(!!sym(case$group.by)))
119
+ sobj <- ensure_sobj({ srtobj %>% filter(!is.na(!!sym(case$group.by))) }, allow_empty)
120
+ if (is.null(sobj)) { return() }
121
+
107
122
  if (!is.null(case$subset)) {
108
- sobj <- sobj %>% filter(!!!parse_exprs(case$subset))
123
+ sobj <- ensure_sobj({ sobj %>% filter(!!!parse_exprs(case$subset)) }, allow_empty)
124
+ if (is.null(sobj)) { return() }
109
125
  }
110
126
  if (!is.null(case$ident.2)) {
111
- sobj <- sobj %>% filter(!!sym(case$group.by) %in% c(case$ident.1, case$ident.2))
127
+ sobj <- ensure_sobj({ sobj %>% filter(!!sym(case$group.by) %in% c(case$ident.1, case$ident.2)) }, allow_empty)
128
+ if (is.null(sobj)) { return() }
112
129
  }
113
130
 
114
131
  allclasses <- sobj@meta.data[, case$group.by, drop = TRUE]
@@ -13,6 +13,7 @@ envs = {{envs | r: todot = "-", skip = 1}}
13
13
 
14
14
  set.seed(8525)
15
15
  options(future.globals.maxSize = 80000 * 1024^2)
16
+ options(future.rng.onMisuse="ignore")
16
17
  options(Seurat.object.assay.version = "v5")
17
18
  plan(strategy = "multicore", workers = envs$ncores)
18
19
 
@@ -342,7 +343,7 @@ RunPCAArgs$object <- sobj
342
343
  sobj <- do_call(RunPCA, RunPCAArgs)
343
344
 
344
345
  if (!envs$no_integration) {
345
- log_info("- Running IntegrateLayers ...")
346
+ log_info("- Running IntegrateLayers (method = {envs$IntegrateLayers$method}) ...")
346
347
  IntegrateLayersArgs <- envs$IntegrateLayers
347
348
  method <- IntegrateLayersArgs$method
348
349
  if (!is.null(IntegrateLayersArgs$reference) && is.character(IntegrateLayersArgs$reference)) {
@@ -383,6 +384,117 @@ if (!envs$use_sct) {
383
384
  sobj <- JoinLayers(sobj)
384
385
  }
385
386
 
387
+ if (!is.null(envs$DoubletFinder) && is.list(envs$DoubletFinder) && envs$DoubletFinder$PCs > 0) {
388
+ library(DoubletFinder)
389
+
390
+ log_info("Running DoubletFinder ...")
391
+ log_info("- Preparing Seurat object ...")
392
+ # More controls from envs?
393
+ sobj <- FindNeighbors(sobj, dims = 1:envs$DoubletFinder$PCs)
394
+ sobj <- FindClusters(sobj)
395
+
396
+ log_info("- pK Indentification ...")
397
+ sweep.res.list <- paramSweep(
398
+ sobj,
399
+ PCs = 1:envs$DoubletFinder$PCs,
400
+ sct = envs$use_sct,
401
+ num.cores = envs$ncores
402
+ )
403
+ sweep.stats <- summarizeSweep(sweep.res.list, GT = FALSE)
404
+ bcmvn <- find.pK(sweep.stats)
405
+
406
+ bcmvn$Selected <- bcmvn$pK == bcmvn$pK[which.max(bcmvn$BCmetric)[1]]
407
+ plot <- ggplot(bcmvn, aes(x = pK, y = BCmetric, color = Selected)) +
408
+ geom_point() +
409
+ # rotate x axis labels
410
+ theme(axis.text.x = element_text(angle = 90, hjust = 1))
411
+ ggsave(plot, filename = file.path(plotsdir, "pK_BCmetric.png"))
412
+
413
+ pK <- bcmvn$pK[which.max(bcmvn$BCmetric)[1]]
414
+ pK <- as.numeric(as.character(pK))
415
+ pN <- envs$DoubletFinder$pN
416
+ log_info("- Homotypic Doublet Proportion Estimate ...")
417
+ homotypic.prop <- modelHomotypic(Idents(sobj))
418
+ nExp_poi <- round(nrow(sobj@meta.data) * envs$DoubletFinder$doublets)
419
+ nExp_poi.adj <- round(nExp_poi * (1 - homotypic.prop))
420
+
421
+ log_info("- Running DoubletFinder ...")
422
+ sobj <- doubletFinder(
423
+ sobj,
424
+ PCs = 1:envs$DoubletFinder$PCs,
425
+ pN = pN,
426
+ pK = pK,
427
+ nExp = nExp_poi.adj,
428
+ reuse.pANN = FALSE,
429
+ sct = envs$use_sct
430
+ )
431
+ pANN_col <- paste0("pANN_", pN, "_", pK)
432
+ pANN_col <- colnames(sobj@meta.data)[grepl(pANN_col, colnames(sobj@meta.data))]
433
+ DF_col <- paste0("DF.classifications_", pN, "_", pK)
434
+ DF_col <- colnames(sobj@meta.data)[grepl(DF_col, colnames(sobj@meta.data))]
435
+ doublets <- as.data.frame(
436
+ cbind(
437
+ colnames(sobj),
438
+ sobj@meta.data[, pANN_col],
439
+ sobj@meta.data[, DF_col]
440
+ )
441
+ )
442
+ colnames(doublets) <- c("Barcode","DoubletFinder_score","DoubletFinder_DropletType")
443
+ write.table(
444
+ doublets,
445
+ file.path(joboutdir, "DoubletFinder_doublets_singlets.txt"),
446
+ row.names = FALSE,
447
+ quote = FALSE,
448
+ sep = "\t"
449
+ )
450
+
451
+ summary <- as.data.frame(table(doublets$DoubletFinder_DropletType))
452
+ colnames(summary) <- c("Classification", "Droplet_N")
453
+ write.table(
454
+ summary,
455
+ file.path(joboutdir, "DoubletFinder_summary.txt"),
456
+ row.names = FALSE,
457
+ quote = FALSE,
458
+ sep = "\t"
459
+ )
460
+
461
+ # Do a dimplot
462
+ log_info("- Plotting dimension reduction ...")
463
+ dimp <- DimPlot(
464
+ sobj, group.by = DF_col, order = "Doublet",
465
+ cols = c("#333333", "#FF3333"), pt.size = 0.8, alpha = 0.5)
466
+ ggsave(dimp, filename = file.path(plotsdir, "DoubletFinder_dimplot.png"))
467
+
468
+ log_info("- Filtering doublets ...")
469
+ sobj <- subset(sobj, cells = doublets$Barcode[doublets$DoubletFinder_DropletType == "Singlet"])
470
+
471
+ add_report(
472
+ list(
473
+ kind = "descr",
474
+ content = "The table contains the number of cells classified as singlets and doublets."
475
+ ),
476
+ list(
477
+ kind = "table",
478
+ data = list(path = file.path(joboutdir, "DoubletFinder_summary.txt"))
479
+ ),
480
+ h1 = "DoubletFinder Results",
481
+ h2 = "The DoubletFinder Summary"
482
+ )
483
+ add_report(
484
+ list(
485
+ name = "pK vs BCmetric",
486
+ src = file.path(plotsdir, "pK_BCmetric.png")
487
+ ),
488
+ list(
489
+ name = "Dimension Reduction Plot",
490
+ src = file.path(plotsdir, "DoubletFinder_dimplot.png")
491
+ ),
492
+ ui = "table_of_images",
493
+ h1 = "DoubletFinder Results",
494
+ h2 = "Plots"
495
+ )
496
+ }
497
+
386
498
  log_info("Saving filtered seurat object ...")
387
499
  saveRDS(sobj, rdsfile)
388
500
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: biopipen
3
- Version: 0.27.2
3
+ Version: 0.27.3
4
4
  Summary: Bioinformatics processes/pipelines that can be run from `pipen run`
5
5
  License: MIT
6
6
  Author: pwwang
@@ -17,6 +17,7 @@ Requires-Dist: datar[pandas] (>=0.15.6,<0.16.0)
17
17
  Requires-Dist: pipen-board[report] (>=0.15,<0.16)
18
18
  Requires-Dist: pipen-cli-run (>=0.13,<0.14)
19
19
  Requires-Dist: pipen-filters (>=0.12,<0.13)
20
- Requires-Dist: pipen-poplog (>=0.1,<0.2)
20
+ Requires-Dist: pipen-poplog (>=0.1.2,<0.2.0)
21
21
  Requires-Dist: pipen-runinfo (>=0.6,<0.7) ; extra == "runinfo"
22
22
  Requires-Dist: pipen-verbose (>=0.11,<0.12)
23
+ Requires-Dist: pyyaml-include (==1.*)
@@ -1,4 +1,4 @@
1
- biopipen/__init__.py,sha256=_CerHyxnUJ2hU0sB7noT3JBjjI0ohEM5boAPBoFxOg4,23
1
+ biopipen/__init__.py,sha256=lxhjPOOCzhlHB02EzaqTtDdBFZSOLV3WLWw2HC0DYvo,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=20RCI30Peee1EQdfb_UbV3Hf74XUPndJnYZlUThytsw,1781
@@ -21,7 +21,7 @@ biopipen/ns/gsea.py,sha256=EsNRAPYsagaV2KYgr4Jv0KCnZGqayM209v4yOGGTIOI,7423
21
21
  biopipen/ns/misc.py,sha256=fzn0pXvdghMkQhu-e3MMapPNMyO6IAJbtTzVU3GbFa0,3246
22
22
  biopipen/ns/plot.py,sha256=yguxmErUOH-hOM10JfuI_sXw2p49XF8yGR_gXfbd5yQ,4066
23
23
  biopipen/ns/rnaseq.py,sha256=bKAa6friFWof4yDTWZQahm1MS-lrdetO1GqDKdfxXYc,7708
24
- biopipen/ns/scrna.py,sha256=eLCXGyVcgq3vQ-br5SFHHmfIVPaJN4kSFxtCiJiYamg,102716
24
+ biopipen/ns/scrna.py,sha256=i9h0xNOII3SqJ_cJOZ5epn8breAsc-yXH_Us04DoZvg,103401
25
25
  biopipen/ns/scrna_metabolic_landscape.py,sha256=9s1NvH3aMaNDXyfwy9TdzGcSP_lIW4JqhLgknNZcIKE,28313
26
26
  biopipen/ns/snp.py,sha256=Nq20NJzQ9YiqE9mhtCUH6dfs7528o1e4N-j9PewjAsQ,3016
27
27
  biopipen/ns/stats.py,sha256=yJ6C1CXF84T7DDs9mgufqUOr89Rl6kybE5ji8Vnx6cw,13693
@@ -129,12 +129,12 @@ biopipen/scripts/scrna/ExprImpution-alra.R,sha256=w3W1txJcdWg52-SETY2Z0lO7maDNfi
129
129
  biopipen/scripts/scrna/ExprImpution-rmagic.R,sha256=jYIfqZpnvjKJkvItLnemPVtUApHBYQi1_L8rHVbEe1M,735
130
130
  biopipen/scripts/scrna/ExprImpution-scimpute.R,sha256=mg40qCUW7-nP5oHPvARq7dmtoahM0GRFWXQpum0BXVk,1082
131
131
  biopipen/scripts/scrna/ExprImpution.R,sha256=7768ezrr59xUZDXq8lO9jj2XhnkSsx-xxBmOD9_DO7c,313
132
- biopipen/scripts/scrna/MarkersFinder.R,sha256=TvLVozCsgL_R-EMW7SbkCRdpchxt9k7Ewwz5nb3TOYo,22172
133
- biopipen/scripts/scrna/MetaMarkers.R,sha256=J__ZZ4K4P-Jdty1lZhRldu4rAErLxMtDZkRUlOqZea4,10852
132
+ biopipen/scripts/scrna/MarkersFinder.R,sha256=M7fHTbHHErZ9JbLmjDkx-6yVIay0_h0MkvgFegnqL44,22918
133
+ biopipen/scripts/scrna/MetaMarkers.R,sha256=9ve1X0TrDzS_ZEW6HtU3n8R-uPx7q-hYMMNFVDSE8wQ,11272
134
134
  biopipen/scripts/scrna/ModuleScoreCalculator.R,sha256=JSHd-_-KiFqW8avCGxgU4T-C5BtDr2u0kwIvEu2lFIg,4188
135
135
  biopipen/scripts/scrna/RadarPlots.R,sha256=TGPUTUcHOHgd9rsNtLYT-N6WHiFNDBZsiIoqkyAJh0A,13020
136
136
  biopipen/scripts/scrna/SCImpute.R,sha256=dSJOHhmJ3x_72LBRXT72dbCti5oiB85CJ-OjWtqONbk,2958
137
- biopipen/scripts/scrna/ScFGSEA.R,sha256=M6YeqUNa_0bq1qmL8dutQR3o5v2jy_gICCLaWw5c3A4,5738
137
+ biopipen/scripts/scrna/ScFGSEA.R,sha256=2UCTCIydVkPGvn7WP-_fcE7857iKKDxY56-j-ruyO8o,6254
138
138
  biopipen/scripts/scrna/Seurat2AnnData.R,sha256=qz4u-B5J3GMwttubnNnByJXreziFbrP5Mak0L0q7eG0,1557
139
139
  biopipen/scripts/scrna/SeuratClusterStats-dimplots.R,sha256=gViDgQ8NorYD64iK0FgcODOrDOw0tExZmhuPRuLNp4g,2354
140
140
  biopipen/scripts/scrna/SeuratClusterStats-features.R,sha256=SaKTJloP1fttRXZQeb2ApX0ej7al13wOoEYkthSk13k,15489
@@ -147,7 +147,7 @@ biopipen/scripts/scrna/SeuratFilter.R,sha256=BrYK0MLdaTtQvInMaQsmOt7oH_hlks0M1zy
147
147
  biopipen/scripts/scrna/SeuratLoading.R,sha256=ekWKnHIqtQb3kHVQiVymAHXXqiUxs6KKefjZKjaykmk,900
148
148
  biopipen/scripts/scrna/SeuratMap2Ref.R,sha256=Xn3VnvKqShuC0Ju05380wjuLVSdW0uWVzntdxjme244,4359
149
149
  biopipen/scripts/scrna/SeuratMetadataMutater.R,sha256=Pp4GsF3hZ6ZC2vroC3LSBmVa4B1p2L3hbh981yaAIeQ,1093
150
- biopipen/scripts/scrna/SeuratPreparing.R,sha256=cgXWon2it6g4y-yrYk_zhivViOX8ZVf36u3wb9lKtj0,13133
150
+ biopipen/scripts/scrna/SeuratPreparing.R,sha256=c_aBM0mugBNyYJ5OjNVDR_Cj0sGqkiJZXCOk3pesFDk,16990
151
151
  biopipen/scripts/scrna/SeuratSplit.R,sha256=vdK11V39_Uo_NaOh76QWCtxObGaEr5Ynxqq0hTiSvsU,754
152
152
  biopipen/scripts/scrna/SeuratSubClustering.R,sha256=L1SwKhNNKvsQGrcj0ZjScW9BLuvdO2pg7U48Ospsot8,6096
153
153
  biopipen/scripts/scrna/SeuratSubset.R,sha256=yVA11NVE2FSSw-DhxQcJRapns0tNNHdyDYi5epO6SKM,1776
@@ -238,7 +238,7 @@ biopipen/utils/reference.py,sha256=6bPSwQa-GiDfr7xLR9a5T64Ey40y24yn3QfQ5wDFZkU,4
238
238
  biopipen/utils/rnaseq.R,sha256=Ro2B2dG-Z2oVaT5tkwp9RHBz4dp_RF-JcizlM5GYXFs,1298
239
239
  biopipen/utils/single_cell.R,sha256=pJjYP8bIZpNAtTQ32rOXhZxaM1Y-6D-xUcK3pql9tbk,4316
240
240
  biopipen/utils/vcf.py,sha256=ajXs0M_QghEctlvUlSRjWQIABVF02wPdYd-0LP4mIsU,9377
241
- biopipen-0.27.2.dist-info/METADATA,sha256=G3Cij0e6iDpAZ87kUeVZabL8MHa689YLGzIFIjaLmG4,878
242
- biopipen-0.27.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
243
- biopipen-0.27.2.dist-info/entry_points.txt,sha256=wu70aoBcv1UahVbB_5237MY-9M9_mzqmWjDD-oi3yz0,621
244
- biopipen-0.27.2.dist-info/RECORD,,
241
+ biopipen-0.27.3.dist-info/METADATA,sha256=4DeAjhBZHdg7pZXoTNPiQkzGsx6hSm7VwgWgyYKMY18,920
242
+ biopipen-0.27.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
243
+ biopipen-0.27.3.dist-info/entry_points.txt,sha256=wu70aoBcv1UahVbB_5237MY-9M9_mzqmWjDD-oi3yz0,621
244
+ biopipen-0.27.3.dist-info/RECORD,,