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

Files changed (65) hide show
  1. biopipen/__init__.py +1 -1
  2. biopipen/core/config.py +0 -5
  3. biopipen/core/config.toml +4 -4
  4. biopipen/core/defaults.py +3 -3
  5. biopipen/core/filters.py +1 -0
  6. biopipen/core/proc.py +1 -3
  7. biopipen/core/testing.py +1 -2
  8. biopipen/ns/bam.py +10 -14
  9. biopipen/ns/bcftools.py +37 -7
  10. biopipen/ns/bed.py +9 -16
  11. biopipen/ns/cnv.py +8 -11
  12. biopipen/ns/cnvkit.py +32 -59
  13. biopipen/ns/cnvkit_pipeline.py +266 -310
  14. biopipen/ns/csv.py +0 -2
  15. biopipen/ns/gene.py +0 -1
  16. biopipen/ns/gsea.py +4 -10
  17. biopipen/ns/misc.py +0 -5
  18. biopipen/ns/plot.py +2 -4
  19. biopipen/ns/rnaseq.py +0 -1
  20. biopipen/ns/scrna.py +78 -120
  21. biopipen/ns/scrna_metabolic_landscape.py +306 -348
  22. biopipen/ns/tcgamaf.py +52 -0
  23. biopipen/ns/tcr.py +5 -15
  24. biopipen/ns/vcf.py +52 -34
  25. biopipen/ns/web.py +8 -19
  26. biopipen/reports/bam/CNAClinic.svelte +1 -1
  27. biopipen/reports/bam/CNVpytor.svelte +2 -2
  28. biopipen/reports/bam/ControlFREEC.svelte +1 -1
  29. biopipen/reports/cnv/AneuploidyScore.svelte +2 -2
  30. biopipen/reports/cnv/AneuploidyScoreSummary.svelte +1 -1
  31. biopipen/reports/cnvkit/CNVkitDiagram.svelte +1 -1
  32. biopipen/reports/cnvkit/CNVkitHeatmap.svelte +1 -1
  33. biopipen/reports/cnvkit/CNVkitScatter.svelte +1 -1
  34. biopipen/reports/gsea/FGSEA.svelte +1 -1
  35. biopipen/reports/gsea/GSEA.svelte +2 -2
  36. biopipen/reports/scrna/CellsDistribution.svelte +1 -1
  37. biopipen/reports/scrna/DimPlots.svelte +1 -1
  38. biopipen/reports/scrna/GeneExpressionInvistigation.svelte +1 -1
  39. biopipen/reports/scrna/MarkersFinder.svelte +42 -39
  40. biopipen/reports/scrna/ScFGSEA.svelte +3 -3
  41. biopipen/reports/scrna/SeuratClusterStats.svelte +3 -3
  42. biopipen/reports/scrna/SeuratPreparing.svelte +2 -2
  43. biopipen/reports/scrna_metabolic_landscape/MetabolicFeaturesIntraSubsets.svelte +2 -2
  44. biopipen/reports/scrna_metabolic_landscape/MetabolicPathwayActivity.svelte +1 -1
  45. biopipen/reports/scrna_metabolic_landscape/MetabolicPathwayHeterogeneity.svelte +1 -1
  46. biopipen/reports/tcr/CloneResidency.svelte +4 -4
  47. biopipen/reports/tcr/Immunarch.svelte +2 -2
  48. biopipen/reports/tcr/SampleDiversity.svelte +2 -2
  49. biopipen/reports/tcr/TCRClusteringStats.svelte +3 -3
  50. biopipen/reports/tcr/VJUsage.svelte +1 -1
  51. biopipen/reports/utils/gsea.liq +1 -1
  52. biopipen/reports/utils/misc.liq +1 -1
  53. biopipen/reports/vcf/TruvariBenchSummary.svelte +1 -1
  54. biopipen/reports/vcf/TruvariConsistency.svelte +3 -3
  55. biopipen/scripts/bcftools/BcftoolsSort.py +19 -0
  56. biopipen/scripts/scrna/MarkersFinder.R +73 -35
  57. biopipen/scripts/tcgamaf/Maf2Vcf.py +22 -0
  58. biopipen/scripts/tcgamaf/MafAddChr.py +14 -0
  59. biopipen/scripts/tcgamaf/maf2vcf.pl +427 -0
  60. biopipen/scripts/vcf/VcfAnno.py +26 -0
  61. biopipen/scripts/vcf/VcfFix_utils.py +3 -2
  62. {biopipen-0.7.0.dist-info → biopipen-0.8.0.dist-info}/METADATA +7 -8
  63. {biopipen-0.7.0.dist-info → biopipen-0.8.0.dist-info}/RECORD +65 -59
  64. {biopipen-0.7.0.dist-info → biopipen-0.8.0.dist-info}/WHEEL +1 -1
  65. {biopipen-0.7.0.dist-info → biopipen-0.8.0.dist-info}/entry_points.txt +2 -1
biopipen/ns/csv.py CHANGED
@@ -1,6 +1,4 @@
1
1
  """Tools to deal with csv/tsv files"""
2
-
3
-
4
2
  from ..core.proc import Proc
5
3
 
6
4
 
biopipen/ns/gene.py CHANGED
@@ -38,7 +38,6 @@ class GeneNameConversion(Proc):
38
38
  Supported: human, mouse, rat, fruitfly, nematode, zebrafish,
39
39
  thale-cress, frog and pig
40
40
  """ # noqa: E501
41
-
42
41
  input = "infile:file"
43
42
  output = "outfile:file:{{in.infile | basename}}"
44
43
  lang = config.lang.python
biopipen/ns/gsea.py CHANGED
@@ -1,5 +1,4 @@
1
1
  """Gene set enrichment analysis"""
2
-
3
2
  from ..core.proc import Proc
4
3
  from ..core.config import config
5
4
 
@@ -35,9 +34,8 @@ class GSEA(Proc):
35
34
  Other configs passed to `GSEA()` directly
36
35
 
37
36
  Requires:
38
- - name: GSEA-MSigDB/GSEA_R
39
- check: |
40
- {{proc.lang}} <(echo "library(GSEA)")
37
+ GSEA-MSigDB/GSEA_R:
38
+ - check: {{proc.lang}} <(echo "library(GSEA)")
41
39
  """
42
40
 
43
41
  input = "infile:file, metafile:file, gmtfile:file, configfile:file"
@@ -86,7 +84,6 @@ class PreRank(Proc):
86
84
  the first one is pos and second is neg. Or you can have multiple
87
85
  pairs of labels (e.g. `[["CASE1", "CNTRL"], ["CASE2", "CNTRL"]]`)
88
86
  """
89
-
90
87
  input = "infile:file, metafile:file, configfile:file"
91
88
  output = "outfile:file:{{in.infile | stem}}.rank"
92
89
  lang = config.lang.rscript
@@ -139,11 +136,9 @@ class FGSEA(Proc):
139
136
  `<rest>`: Rest arguments for `fgsea()`
140
137
 
141
138
  Requires:
142
- - name: bioconductor-fgsea
143
- check: |
144
- {{proc.lang}} -e "library(fgsea)"
139
+ bioconductor-fgsea:
140
+ - check: {{proc.lang}} -e "library(fgsea)"
145
141
  """
146
-
147
142
  input = "infile:file, metafile:file, gmtfile:file, configfile:file"
148
143
  output = "outdir:dir:{{in.infile | stem}}.fgsea"
149
144
  lang = config.lang.rscript
@@ -183,7 +178,6 @@ class Enrichr(Proc):
183
178
  See https://maayanlab.cloud/Enrichr/#libraries for all available
184
179
  databases/libaries
185
180
  """
186
-
187
181
  input = "infile:file"
188
182
  output = "outdir:dir:{{in.infile | stem}}.enrichr"
189
183
  lang = config.lang.rscript
biopipen/ns/misc.py CHANGED
@@ -12,7 +12,6 @@ class File2Proc(Proc):
12
12
  Output:
13
13
  outfile: The output symbolic link to the input file
14
14
  """
15
-
16
15
  input = "infile:file"
17
16
  output = "outfile:file:{{in.infile | basename}}"
18
17
  script = """
@@ -25,7 +24,6 @@ class File2Proc(Proc):
25
24
  class Glob2Dir(Proc):
26
25
  """Create symbolic links in output directory for the files given
27
26
  by the glob pattern"""
28
-
29
27
  input = "pattern:var"
30
28
  output = "outdir:dir:from_glob"
31
29
  script = """
@@ -54,7 +52,6 @@ class Config2File(Proc):
54
52
  infmt: The input format. `json` or `toml`.
55
53
  outfmt: The output format. `json` or `toml`.
56
54
  """
57
-
58
55
  input = "config:var, name:var"
59
56
  output = "outfile:file:{{(in.name or 'config') | slugify}}.{{envs.outfmt}}"
60
57
  envs = {"infmt": "toml", "outfmt": "toml"}
@@ -76,7 +73,6 @@ class Str2File(Proc):
76
73
  Envs:
77
74
  name: The name of the output file
78
75
  """
79
-
80
76
  input = "str, name"
81
77
  output = "outfile:file:{{in.name}}"
82
78
  lang = config.lang.python
@@ -99,7 +95,6 @@ class Shell(Proc):
99
95
  outdir: Whether the `out.outfile` should be a directory.
100
96
  If so a directory will be created before running the command.
101
97
  """
102
-
103
98
  input = "infile:file"
104
99
  output = "outfile:file:{{in.infile | basename}}"
105
100
  envs = {"cmd": "", "outdir": False}
biopipen/ns/plot.py CHANGED
@@ -94,11 +94,9 @@ class Heatmap(Proc):
94
94
  globals: Some globals for the expression in `args` to be evaluated
95
95
 
96
96
  Requires:
97
- - name: bioconductor-complexheatmap
98
- check: |
99
- {{proc.lang}} <(echo "library(ComplexHeatmap)")
97
+ bioconductor-complexheatmap:
98
+ - check: {{proc.lang}} <(echo "library(ComplexHeatmap)")
100
99
  """
101
-
102
100
  input = "infile:file, annofiles:files"
103
101
  output = """
104
102
  {%- set outdir = in.infile | stem0 | append: ".heatmap" -%}
biopipen/ns/rnaseq.py CHANGED
@@ -6,7 +6,6 @@ from ..core.config import config
6
6
 
7
7
  class UnitConversion(Proc):
8
8
  """Convert expression value units back and forth"""
9
-
10
9
  input = "infile:file"
11
10
  output = "outfile:file:{{in.infile | basename}}"
12
11
  lang = config.lang.rscript
biopipen/ns/scrna.py CHANGED
@@ -71,17 +71,13 @@ class SeuratPreparing(Proc):
71
71
  `gene_qc` is applied after `cell_qc`.
72
72
 
73
73
  Requires:
74
- - name: r-seurat
75
- check: |
76
- {{proc.lang}} <(echo "library(Seurat)")
77
- - name: r-future
78
- check: |
79
- {{proc.lang}} <(echo "library(future)")
80
- - name: r-bracer
81
- check: |
82
- {{proc.lang}} <(echo "library(bracer)")
74
+ r-seurat:
75
+ - check: {{proc.lang}} <(echo "library(Seurat)")
76
+ r-future:
77
+ - check: {{proc.lang}} <(echo "library(future)")
78
+ r-bracer:
79
+ - check: {{proc.lang}} <(echo "library(bracer)")
83
80
  """
84
-
85
81
  input = "metafile:file"
86
82
  output = "rdsfile:file:{{in.metafile | stem}}.seurat.RDS"
87
83
  lang = config.lang.rscript
@@ -113,17 +109,13 @@ class SeuratClustering(Proc):
113
109
  Note that `dims = 30` will be expanded as `dims = 1:30`
114
110
 
115
111
  Requires:
116
- - name: r-seurat
117
- check: |
118
- {{proc.lang}} <(echo "library(Seurat)")
119
- - name: r-tidyr
120
- check: |
121
- {{proc.lang}} <(echo "library(tidyr)")
122
- - name: r-dplyr
123
- check: |
124
- {{proc.lang}} <(echo "library(dplyr)")
112
+ r-seurat:
113
+ - check: {{proc.lang}} <(echo "library(Seurat)")
114
+ r-tidyr:
115
+ - check: {{proc.lang}} <(echo "library(tidyr)")
116
+ r-dplyr:
117
+ - check: {{proc.lang}} <(echo "library(dplyr)")
125
118
  """
126
-
127
119
  input = "srtobj:file"
128
120
  output = "rdsfile:file:{{in.srtobj | stem}}.RDS"
129
121
  lang = config.lang.rscript
@@ -196,9 +188,8 @@ class SeuratClusterStats(Proc):
196
188
  `Seurat::Dimplot()`, add `devpars`.
197
189
 
198
190
  Requires:
199
- - name: r-seurat
200
- check: |
201
- {{proc.lang}} -e "library(Seurat)"
191
+ r-seurat:
192
+ - check: {{proc.lang}} -e "library(Seurat)"
202
193
  """
203
194
 
204
195
  input = "srtobj:file"
@@ -235,7 +226,6 @@ class CellsDistribution(Proc):
235
226
  Input:
236
227
  srtobj: The seurat object generated by SeuratClustering
237
228
  casefile: The file with the cases
238
-
239
229
  >>> # The name of the job, used in report, optional
240
230
  >>> # If not given, will use `{{in.srtobj | stem}}`, ...
241
231
  >>> name = ""
@@ -284,17 +274,13 @@ class CellsDistribution(Proc):
284
274
  will be used.
285
275
 
286
276
  Requires:
287
- - name: r-seurat
288
- check: |
289
- {{proc.lang}} -e "library(Seurat)"
290
- - name: r-dplyr
291
- check: |
292
- {{proc.lang}} -e "library(dplyr)"
293
- - name: r-tidyr
294
- check: |
295
- {{proc.lang}} -e "library(tidyr)"
277
+ r-seurat:
278
+ - check: {{proc.lang}} -e "library(Seurat)"
279
+ r-dplyr:
280
+ - check: {{proc.lang}} -e "library(dplyr)"
281
+ r-tidyr:
282
+ - check: {{proc.lang}} -e "library(tidyr)"
296
283
  """
297
-
298
284
  input = "srtobj:file, casefile:file"
299
285
  output = "outdir:dir:{{in.srtobj | stem}}.cells_distribution"
300
286
  lang = config.lang.rscript
@@ -320,17 +306,13 @@ class SeuratMetadataMutater(Proc):
320
306
  rdsfile: The seurat object with the additional metadata
321
307
 
322
308
  Requires:
323
- - name: r-seurat
324
- check: |
325
- {{proc.lang}} <(echo "library(Seurat)")
326
- - name: r-tibble
327
- check: |
328
- {{proc.lang}} <(echo "library(tibble)")
329
- - name: r-dplyr
330
- check: |
331
- {{proc.lang}} <(echo "library(dplyr)")
309
+ r-seurat:
310
+ - check: {{proc.lang}} <(echo "library(Seurat)")
311
+ r-tibble:
312
+ - check: {{proc.lang}} <(echo "library(tibble)")
313
+ r-dplyr:
314
+ - check: {{proc.lang}} <(echo "library(dplyr)")
332
315
  """
333
-
334
316
  input = "srtobj:file, metafile:file, mutaters:var"
335
317
  output = "rdsfile:file:{{in.srtobj | stem}}.RDS"
336
318
  lang = config.lang.rscript
@@ -372,7 +354,6 @@ class GeneExpressionInvestigation(Proc):
372
354
  - `res`, `height` and `width` the parameters for `png()`
373
355
  - other arguments for `ComplexHeatmap::Heatmap()`
374
356
  """
375
-
376
357
  input = "srtobj:file, genefile:file, configfile:file"
377
358
  output = "outdir:dir:{{in.configfile | stem0}}.gei"
378
359
  lang = config.lang.rscript
@@ -409,7 +390,6 @@ class DimPlots(Proc):
409
390
  Keys are the names and values are the arguments to
410
391
  `Seurat::Dimplots`
411
392
  """
412
-
413
393
  input = "srtobj:file, configfile:file, name:var"
414
394
  output = "outdir:dir:{{in.srtobj | stem}}.dimplots"
415
395
  lang = config.lang.rscript
@@ -444,6 +424,8 @@ class MarkersFinder(Proc):
444
424
  >>> "ident.1" = "Case"
445
425
  >>> "ident.2" = "Control"
446
426
  >>> "group.by" = "Group"
427
+ >>> # Do the comparison in each cluster
428
+ >>> each = "seurat_clusters"
447
429
  >>> # other arguments for Seruat::FindMarkers()
448
430
  >>> # Filter after mutaters
449
431
  >>> filter2 = "SampleType != 'Control'"
@@ -473,13 +455,11 @@ class MarkersFinder(Proc):
473
455
  `p_val_adj`
474
456
  Example - `"p_val_adj < 0.05 & abs(avg_log2FC) > 1"`
475
457
  """
476
-
477
458
  input = "srtobj:file, casefile:file"
478
459
  output = "outdir:dir:{{(in.casefile or in.srtobj) | stem0}}.markers"
479
460
  lang = config.lang.rscript
480
461
  envs = {
481
462
  "ncores": config.misc.ncores,
482
- "name": "Markers for all clusters",
483
463
  "cases": {
484
464
  "Cluster": {"group.by": "seurat_clusters"},
485
465
  },
@@ -519,39 +499,33 @@ class ExprImpute(Proc):
519
499
  python: The python path where magic-impute is installed.
520
500
 
521
501
  Requires:
522
- - name: r-scimpute
523
- if: {{proc.envs.tool == "scimpute"}}
524
- check: |
525
- {{proc.lang}} <(echo "library(scImpute)")
526
- - name: r-rmagic
527
- if: {{proc.envs.tool == "rmagic"}}
528
- check: |
529
- {{proc.lang}} <(\
530
- echo "\
531
- tryCatch(\
532
- { setwd(dirname(Sys.getenv('CONDA_PREFIX'))) }, \
533
- error = function(e) NULL \
534
- ); \
535
- library(Rmagic)\
536
- "\
537
- )
538
- - name: magic-impute
539
- if: {{proc.envs.tool == "rmagic"}}
540
- check: |
541
- {{proc.envs.rmagic_args.python}} -c "import magic")
542
- - name: r-dplyr
543
- if: {{proc.envs.tool == "scimpute"}}
544
- check: |
545
- {{proc.lang}} <(echo "library(dplyr)")
546
- - name: r-seurat
547
- check: |
548
- {{proc.lang}} <(echo "library(Seurat)")
549
- - name: r-seuratwrappers
550
- if: {{proc.envs.tool == "alra"}}
551
- check: |
552
- {{proc.lang}} <(echo "library(SeuratWrappers)")
502
+ r-scimpute:
503
+ - if: {{proc.envs.tool == "scimpute"}}
504
+ - check: {{proc.lang}} <(echo "library(scImpute)")
505
+ r-rmagic:
506
+ - if: {{proc.envs.tool == "rmagic"}}
507
+ - check: |
508
+ {{proc.lang}} <(\
509
+ echo "\
510
+ tryCatch(\
511
+ { setwd(dirname(Sys.getenv('CONDA_PREFIX'))) }, \
512
+ error = function(e) NULL \
513
+ ); \
514
+ library(Rmagic)\
515
+ "\
516
+ )
517
+ magic-impute:
518
+ - if: {{proc.envs.tool == "rmagic"}}
519
+ - check: {{proc.envs.rmagic_args.python}} -c "import magic")
520
+ r-dplyr:
521
+ - if: {{proc.envs.tool == "scimpute"}}
522
+ - check: {{proc.lang}} <(echo "library(dplyr)")
523
+ r-seurat:
524
+ - check: {{proc.lang}} <(echo "library(Seurat)")
525
+ r-seuratwrappers:
526
+ - if: {{proc.envs.tool == "alra"}}
527
+ - check: {{proc.lang}} <(echo "library(SeuratWrappers)")
553
528
  """
554
-
555
529
  input = "infile:file"
556
530
  output = "outfile:file:{{in.infile | stem}}.imputed.RDS"
557
531
  lang = config.lang.rscript
@@ -587,7 +561,6 @@ class SCImpute(Proc):
587
561
  infmt: The input format.
588
562
  Either `seurat` or `matrix`
589
563
  """
590
-
591
564
  input = "infile:file, groupfile:file"
592
565
  output = [
593
566
  "outfile:file:{{in.infile | stem | replace: '.seurat', ''}}."
@@ -624,14 +597,11 @@ class SeuratFilter(Proc):
624
597
  invert: Invert the selection?
625
598
 
626
599
  Requires:
627
- - name: r-seurat
628
- check: |
629
- {{proc.lang}} <(echo "library('Seurat')")
630
- - name: r-dplyr
631
- check: |
632
- {{proc.lang}} <(echo "library('dplyr')")
600
+ r-seurat:
601
+ - check: {{proc.lang}} <(echo "library('Seurat')")
602
+ r-dplyr:
603
+ - check: {{proc.lang}} <(echo "library('dplyr')")
633
604
  """
634
-
635
605
  input = "srtobj:file, filters:var"
636
606
  output = "outfile:file:{{in.srtobj | stem}}.filtered.RDS"
637
607
  lang = config.lang.rscript
@@ -661,14 +631,11 @@ class SeuratSubset(Proc):
661
631
  ignore_nas: Ignore NA values?
662
632
 
663
633
  Requires:
664
- - name: r-seurat
665
- check: |
666
- {{proc.lang}} <(echo "library('Seurat')")
667
- - name: r-dplyr
668
- check: |
669
- {{proc.lang}} <(echo "library('dplyr')")
634
+ r-seurat:
635
+ - check: {{proc.lang}} <(echo "library('Seurat')")
636
+ r-dplyr:
637
+ - check: {{proc.lang}} <(echo "library('dplyr')")
670
638
  """
671
-
672
639
  input = "srtobj:file, subsets:var"
673
640
  output = "outdir:dir:{{in.srtobj | stem}}.subsets"
674
641
  envs = {"ignore_nas": True}
@@ -722,7 +689,6 @@ class Subset10X(Proc):
722
689
  feats_to_keep: The features/genes to keep.
723
690
  The final features list will be `feats_to_keep` + `nfeats`
724
691
  """
725
-
726
692
  input = "indir:dir"
727
693
  output = "outdir:dir:{{in.indir | stem}}"
728
694
  envs = {
@@ -749,7 +715,6 @@ class Write10X(Proc):
749
715
  Envs:
750
716
  version: The version of 10X format
751
717
  """
752
-
753
718
  input = "srtobj:file"
754
719
  output = "outdir:dir:{{in.srtobj | stem}}"
755
720
  envs = {"version": "3"}
@@ -789,14 +754,11 @@ class ScFGSEA(Proc):
789
754
 
790
755
 
791
756
  Requires:
792
- - name: bioconductor-fgsea
793
- check: |
794
- {{proc.lang}} -e "library(fgsea)"
795
- - name: r-seurat
796
- check: |
797
- {{proc.lang}} -e "library(seurat)"
757
+ bioconductor-fgsea:
758
+ - check: {{proc.lang}} -e "library(fgsea)"
759
+ r-seurat:
760
+ - check: {{proc.lang}} -e "library(seurat)"
798
761
  """
799
-
800
762
  input = "srtobj:file, casefile:file"
801
763
  output = "outdir:dir:{{(in.casefile or in.srtobj) | stem0}}.fgsea"
802
764
  lang = config.lang.rscript
@@ -836,22 +798,18 @@ class CellTypeAnnotate(Proc):
836
798
  identity and values as the new cell type.
837
799
 
838
800
  Requires:
839
- - name: r-HGNChelper
840
- if: {{proc.envs.tool == 'sctype'}}
841
- check: |
842
- {{proc.lang}} -e "library(HGNChelper)"
843
- - name: r-seurat
844
- if: {{proc.envs.tool == 'sctype'}}
845
- check: |
846
- {{proc.lang}} -e "library(Seurat)"
847
- - name: r-dplyr
848
- if: {{proc.envs.tool == 'sctype'}}
849
- check: |
850
- {{proc.lang}} -e "library(dplyr)"
851
- - name: r-openxlsx
852
- if: {{proc.envs.tool == 'sctype'}}
853
- check: |
854
- {{proc.lang}} -e "library(openxlsx)"
801
+ r-HGNChelper:
802
+ - if: {{proc.envs.tool == 'sctype'}}
803
+ - check: {{proc.lang}} -e "library(HGNChelper)"
804
+ r-seurat:
805
+ - if: {{proc.envs.tool == 'sctype'}}
806
+ - check: {{proc.lang}} -e "library(Seurat)"
807
+ r-dplyr:
808
+ - if: {{proc.envs.tool == 'sctype'}}
809
+ - check: {{proc.lang}} -e "library(dplyr)"
810
+ r-openxlsx:
811
+ - if: {{proc.envs.tool == 'sctype'}}
812
+ - check: {{proc.lang}} -e "library(openxlsx)"
855
813
  """
856
814
  input = "sobjfile:file"
857
815
  output = "outfile:file:{{in.sobjfile | stem}}.annotated.RDS"