From 2e352bf2cdbec6325f546795938e5919254398dc Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 31 Jul 2024 11:05:37 -0700
Subject: [PATCH 001/145] update
---
workflow/rules/track-hub.smk | 6 ------
1 file changed, 6 deletions(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 4a2eb5f86..414b1395e 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -125,13 +125,7 @@ rule hap_differences_track:
rule trackhub:
input:
- fai=ancient(FAI),
- fire=rules.fdr_peaks_by_fire_elements_to_bb.output.bb,
cov=rules.coverage.output.cov,
- hap_diffs=rules.hap_differences_track.output.bb,
- wide=rules.wide_fdr_peaks.output.bb,
- decorators_1=rules.decorate_fibers_1.output.bb,
- decorators_2=rules.decorate_fibers_2.output.bb,
output:
hub="results/{sm}/trackHub/hub.txt",
resources:
From 98cc5447570de62d1fedcb8815b897ab09a55995 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 31 Jul 2024 11:14:07 -0700
Subject: [PATCH 002/145] update
---
workflow/Snakefile | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index d26e47011..77dd202bc 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -105,11 +105,11 @@ rule all:
el_type=el_types,
),
# FDR results
- expand(rules.fdr_track.output, sm=MANIFEST.index),
- expand(rules.fdr_peaks_by_fire_elements.output, sm=MANIFEST.index),
- expand(rules.wide_fdr_peaks.output, sm=MANIFEST.index),
- expand(rules.peaks_vs_percent.output, sm=MANIFEST.index),
- expand(rules.one_percent_fdr_peaks.output, sm=MANIFEST.index),
+ expand(rules.fdr_track.output.bed, sm=MANIFEST.index),
+ expand(rules.fdr_peaks_by_fire_elements.output.bed, sm=MANIFEST.index),
+ expand(rules.wide_fdr_peaks.output.bed, sm=MANIFEST.index),
+ expand(rules.one_percent_fdr_peaks.output.bed, sm=MANIFEST.index),
+ expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index),
expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
# trackhub
expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
@@ -121,4 +121,4 @@ rule all:
hp=not_unk,
el_type=el_types,
),
- expand(rules.trackhub.output, sm=MANIFEST.index),
+ expand(rules.trackhub.output.hub, sm=MANIFEST.index),
From d3449ea2a01e92e695278dead94e707d4a1206bf Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 31 Jul 2024 11:16:42 -0700
Subject: [PATCH 003/145] update
---
workflow/Snakefile | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 77dd202bc..0845bb93a 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -58,7 +58,11 @@ FT_EXE = config.get("ft_exe", "ft")
ONT = config.get("ont", False)
USE_ONT = ""
if ONT:
- USE_ONT = " --ont --ml 225 "
+ ont_ml = config.get("ont_ml", None)
+ if ont_ml is not None:
+ USE_ONT = f" --ont --ml {ont_ml} "
+ else:
+ USE_ONT = " --ont "
MIN_UNRELIABLE_COVERAGE_LEN = config.get("min_unreliable_coverage_len", 50)
From e748559baa3bd4dc4de63878e059bb79b8c24d24 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 31 Jul 2024 14:06:45 -0700
Subject: [PATCH 004/145] update
---
workflow/Snakefile | 3 +++
1 file changed, 3 insertions(+)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 0845bb93a..39ec447c3 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -119,6 +119,9 @@ rule all:
expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
expand(rules.fdr_peaks_by_fire_elements_to_bb.output.bb, sm=MANIFEST.index),
expand(rules.percent_accessible.output.bw, hp=not_unk, sm=MANIFEST.index),
+ expand(rules.decorate_fibers_1.output.bb, sm=MANIFEST.index),
+ expand(rules.decorate_fibers_2.output.bb, sm=MANIFEST.index),
+ expand(rules.hap_differences_track.output.bb, sm=MANIFEST.index),
expand(
rules.element_coverages_bw.output.bw,
sm=MANIFEST.index,
From f237c3aa090402984e421dfcd478c518a217654b Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 12 Aug 2024 15:26:37 -0700
Subject: [PATCH 005/145] ylines
---
workflow/scripts/trackhub.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index 76c8d1216..0e35cc2b5 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -63,6 +63,9 @@
visibility full
maxHeightPixels 100:50:8
priority 1
+yLineOnOff on
+yLineMark 100
+gridDefault on
"""
PER_ACC_TEMPLATE = """
From 181eb91c96593db1d7fc76759cb662db4cc074e6 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 13 Aug 2024 17:04:31 -0700
Subject: [PATCH 006/145] bigtools
---
workflow/envs/env.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index 7b5b60d44..b7c8cf8bd 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -18,4 +18,4 @@ dependencies:
- parallel
- mosdepth==0.3.7
- bedops
- - bioconda::bigtools==0.5.1
+ - bioconda::bigtools==0.5.2
From eba593730cfcd9f565e5230f06b82ed9a7b4f398 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 10:43:49 -0700
Subject: [PATCH 007/145] bigtools
---
workflow/envs/env.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index b7c8cf8bd..7b5b60d44 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -18,4 +18,4 @@ dependencies:
- parallel
- mosdepth==0.3.7
- bedops
- - bioconda::bigtools==0.5.2
+ - bioconda::bigtools==0.5.1
From ff828197b83830adf9e40ea8812cca3a617779b3 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 11:22:16 -0700
Subject: [PATCH 008/145] bigtools
---
workflow/rules/decorated-reads.smk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index d05a9fcee..7012e8a89 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -33,7 +33,7 @@ rule decorate_fibers_1:
bb="results/{sm}/trackHub/bb/fire-fibers.bb",
benchmark:
"results/{sm}/benchmarks/decorate_fibers_1/{sm}.txt"
- threads: 1
+ threads: 8
resources:
runtime=240,
conda:
@@ -63,7 +63,7 @@ rule decorate_fibers_2:
bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb",
benchmark:
"results/{sm}/benchmarks/decorate_fibers_2/{sm}.txt"
- threads: 1
+ threads: 8
resources:
runtime=60 * 16,
conda:
From 5b5414260b4781d787dff2ddeeb1485eb52082bb Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 11:22:43 -0700
Subject: [PATCH 009/145] bigtools
---
workflow/rules/track-hub.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 414b1395e..743b29d3a 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -103,7 +103,7 @@ rule hap_differences_track:
fai=ancient(FAI),
output:
bb="results/{sm}/trackHub/bb/hap_differences.bb",
- threads: 1
+ threads: 4
resources:
mem_mb=get_mem_mb,
conda:
From a31671d7acb09dca3f1ac2e0ddcf260fbf8d65d6 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 11:27:48 -0700
Subject: [PATCH 010/145] bigtools
---
workflow/rules/decorated-reads.smk | 2 ++
1 file changed, 2 insertions(+)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 7012e8a89..e9752c277 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -46,6 +46,7 @@ rule decorate_fibers_1:
bgzip -cd -@ {threads} {output.bed} \
| bigtools bedtobigbed \
+ --nzooms 9 \
-s start -a {params.bed_as} \
- {input.fai} {output.bb}
"""
@@ -76,6 +77,7 @@ rule decorate_fibers_2:
| bgzip -cd -@ {threads} \
| rg -v '^#' \
| bigtools bedtobigbed \
+ --nzooms 9 \
-a {params.dec_as} -s start \
- {input.fai} {output.bb}
"""
From 52a0ed23bfea8af4e340932cc6c01bba39876931 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 13:04:06 -0700
Subject: [PATCH 011/145] bigtools
---
workflow/rules/track-hub.smk | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 743b29d3a..dbfa60239 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -14,6 +14,7 @@ rule percent_accessible:
mem_mb=get_mem_mb,
params:
cols=hap_hck_columns,
+ chrom=get_chroms()[0],
shell:
"""
zcat {input.bed} \
@@ -22,19 +23,25 @@ rule percent_accessible:
| awk -v OFS='\t' '$5 > 0 {{print $1,$2,$3,$4*100/$5}}' \
> {output.tmp}
- # skip if the file is empty
+ # add fake if file is empty
if [[ -s {output.tmp} ]]; then
- bigtools bedgraphtobigwig \
- --nzooms 10 -s start \
- {output.tmp} {input.fai} {output.bw}
- else
- touch {output.bw}
+ printf "{params.chrom}\t0\t1\t0\\n" > {output.tmp}
fi
-
+
+ bigtools bedgraphtobigwig \
+ --nzooms 10 -s start \
+ {output.tmp} {input.fai} {output.bw}
+
bgzip -@{threads} -c {output.tmp} > {output.bed}
tabix -p bed {output.bed}
"""
+ params:
+ bed9_as=workflow.source_path("../templates/bed9.as"),
+ shell:
+ """
+ ( \
+ bedtools sort -i {input.bed9} \
rule element_coverages_bw:
input:
From f4b8c619659f19213c290ef71aa5b6df6b5b063b Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 13:04:59 -0700
Subject: [PATCH 012/145] bigtools
---
workflow/rules/track-hub.smk | 7 -------
1 file changed, 7 deletions(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index dbfa60239..41e3893f1 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -36,13 +36,6 @@ rule percent_accessible:
tabix -p bed {output.bed}
"""
- params:
- bed9_as=workflow.source_path("../templates/bed9.as"),
- shell:
- """
- ( \
- bedtools sort -i {input.bed9} \
-
rule element_coverages_bw:
input:
bed=rules.element_coverages.output.bed,
From 95c23ef8277f19992f38fb3699f950872148c3c5 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 13:20:25 -0700
Subject: [PATCH 013/145] bigtools
---
workflow/rules/track-hub.smk | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 41e3893f1..e449bcc16 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -25,9 +25,13 @@ rule percent_accessible:
# add fake if file is empty
if [[ -s {output.tmp} ]]; then
+ echo "File is not empty"
+ else
+ echo "File is empty"
printf "{params.chrom}\t0\t1\t0\\n" > {output.tmp}
fi
+
bigtools bedgraphtobigwig \
--nzooms 10 -s start \
{output.tmp} {input.fai} {output.bw}
From 474a84313c828a06951aa5238551c4694a559994 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 13:39:04 -0700
Subject: [PATCH 014/145] bigtools
---
workflow/Snakefile | 3 +++
workflow/rules/decorated-reads.smk | 6 ++++--
workflow/rules/track-hub.smk | 11 ++++++++---
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 39ec447c3..9420002d3 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -44,6 +44,9 @@ else:
MAX_PEAK_FDR = 1.0
MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0)
+# Misc options
+NZOOMS = config.get("nzooms", 20)
+
# Misc sets of wildcards
haps = ["all", "hap1", "hap2", "unk"]
not_unk = ["all", "hap1", "hap2"]
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index e9752c277..d877dc5b7 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -40,13 +40,14 @@ rule decorate_fibers_1:
DEFAULT_ENV
params:
bed_as=workflow.source_path("../templates/bed12_filter.as"),
+ nzooms=NZOOMS,
shell:
"""
cat {input.bed} > {output.bed}
bgzip -cd -@ {threads} {output.bed} \
| bigtools bedtobigbed \
- --nzooms 9 \
+ --nzooms {params.nzooms} \
-s start -a {params.bed_as} \
- {input.fai} {output.bb}
"""
@@ -71,13 +72,14 @@ rule decorate_fibers_2:
DEFAULT_ENV
params:
dec_as=workflow.source_path("../templates/decoration.as"),
+ nzooms=NZOOMS,
shell:
"""
cat {input.decorated} \
| bgzip -cd -@ {threads} \
| rg -v '^#' \
| bigtools bedtobigbed \
- --nzooms 9 \
+ --nzooms {params.nzooms} \
-a {params.dec_as} -s start \
- {input.fai} {output.bb}
"""
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index e449bcc16..1486f9e8c 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -14,6 +14,7 @@ rule percent_accessible:
mem_mb=get_mem_mb,
params:
cols=hap_hck_columns,
+ nzooms=NZOOMS,
chrom=get_chroms()[0],
shell:
"""
@@ -33,7 +34,7 @@ rule percent_accessible:
bigtools bedgraphtobigwig \
- --nzooms 10 -s start \
+ --nzooms {params.nzooms} -s start \
{output.tmp} {input.fai} {output.bw}
bgzip -@{threads} -c {output.tmp} > {output.bed}
@@ -48,13 +49,15 @@ rule element_coverages_bw:
bw="results/{sm}/trackHub/bw/{hp}.{el_type}.coverage.bw",
conda:
DEFAULT_ENV
+ params:
+ nzooms=NZOOMS,
shell:
"""
zcat {input.bed} \
| hck -f 1-3 -F {wildcards.el_type} \
| grep -v "^#" \
| bigtools bedgraphtobigwig \
- -s start --nzooms 10 \
+ -s start --nzooms {params.nzooms} \
- {input.fai} {output.bw}
"""
@@ -68,12 +71,14 @@ rule fdr_track_to_bw:
threads: 4
conda:
DEFAULT_ENV
+ params:
+ nzooms=NZOOMS,
shell:
"""
hck -z -f 1-3 -F {wildcards.col} {input.bed} \
| grep -v "^#" \
| bigtools bedgraphtobigwig \
- -s start --nzooms 10 \
+ -s start --nzooms {params.nzooms} \
- {input.fai} {output.bw}
"""
From b2cd5a25b28493bd4fd59505cf3784d12492aa93 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 13:40:54 -0700
Subject: [PATCH 015/145] bigtools
---
workflow/Snakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 9420002d3..6dd39b5c9 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -45,7 +45,7 @@ else:
MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0)
# Misc options
-NZOOMS = config.get("nzooms", 20)
+NZOOMS = config.get("nzooms", 15)
# Misc sets of wildcards
haps = ["all", "hap1", "hap2", "unk"]
From e9db2a69d77a80e6c87b510bce3bb262f55a41b2 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 14:02:18 -0700
Subject: [PATCH 016/145] bigtools
---
workflow/Snakefile | 2 +-
workflow/rules/decorated-reads.smk | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 6dd39b5c9..87d2cab2b 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -45,7 +45,7 @@ else:
MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0)
# Misc options
-NZOOMS = config.get("nzooms", 15)
+NZOOMS = config.get("nzooms", 12)
# Misc sets of wildcards
haps = ["all", "hap1", "hap2", "unk"]
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index d877dc5b7..5715437a7 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -1,3 +1,8 @@
+# Number of items to bundle in r-tree [default: 256]
+BLOCK_SIZE = 256 * 4
+#Number of data points bundled at lowest level [default: 1024]
+ITEMS_PER_SLOT = 1024 * 4
+
rule decorate_fibers_chromosome:
input:
cram=rules.merged_fire_bam.output.cram,
@@ -41,12 +46,15 @@ rule decorate_fibers_1:
params:
bed_as=workflow.source_path("../templates/bed12_filter.as"),
nzooms=NZOOMS,
+ items=ITEMS_PER_SLOT,
+ block_size=BLOCK_SIZE,
shell:
"""
cat {input.bed} > {output.bed}
bgzip -cd -@ {threads} {output.bed} \
| bigtools bedtobigbed \
+ --inmemory --block-size {params.block_size} --items-per-slot {params.items} \
--nzooms {params.nzooms} \
-s start -a {params.bed_as} \
- {input.fai} {output.bb}
@@ -73,12 +81,15 @@ rule decorate_fibers_2:
params:
dec_as=workflow.source_path("../templates/decoration.as"),
nzooms=NZOOMS,
+ items=ITEMS_PER_SLOT,
+ block_size=BLOCK_SIZE,
shell:
"""
cat {input.decorated} \
| bgzip -cd -@ {threads} \
| rg -v '^#' \
| bigtools bedtobigbed \
+ --inmemory --block-size {params.block_size} --items-per-slot {params.items} \
--nzooms {params.nzooms} \
-a {params.dec_as} -s start \
- {input.fai} {output.bb}
From 951be2b26d0059463da01c92ab50db91bb6a480e Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 14:03:28 -0700
Subject: [PATCH 017/145] bigtools
---
workflow/rules/decorated-reads.smk | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 5715437a7..5c9a79e2f 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -46,7 +46,7 @@ rule decorate_fibers_1:
params:
bed_as=workflow.source_path("../templates/bed12_filter.as"),
nzooms=NZOOMS,
- items=ITEMS_PER_SLOT,
+ items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
shell:
"""
@@ -54,7 +54,8 @@ rule decorate_fibers_1:
bgzip -cd -@ {threads} {output.bed} \
| bigtools bedtobigbed \
- --inmemory --block-size {params.block_size} --items-per-slot {params.items} \
+ --inmemory \
+ --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
--nzooms {params.nzooms} \
-s start -a {params.bed_as} \
- {input.fai} {output.bb}
@@ -81,7 +82,7 @@ rule decorate_fibers_2:
params:
dec_as=workflow.source_path("../templates/decoration.as"),
nzooms=NZOOMS,
- items=ITEMS_PER_SLOT,
+ items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
shell:
"""
@@ -89,7 +90,8 @@ rule decorate_fibers_2:
| bgzip -cd -@ {threads} \
| rg -v '^#' \
| bigtools bedtobigbed \
- --inmemory --block-size {params.block_size} --items-per-slot {params.items} \
+ --inmemory \
+ --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
--nzooms {params.nzooms} \
-a {params.dec_as} -s start \
- {input.fai} {output.bb}
From 2a3625e848b18f863dac2284311a3e128874eee4 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 14:03:36 -0700
Subject: [PATCH 018/145] bigtools
---
workflow/rules/decorated-reads.smk | 3 ++-
workflow/rules/track-hub.smk | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 5c9a79e2f..49f575a11 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -1,8 +1,9 @@
# Number of items to bundle in r-tree [default: 256]
BLOCK_SIZE = 256 * 4
-#Number of data points bundled at lowest level [default: 1024]
+# Number of data points bundled at lowest level [default: 1024]
ITEMS_PER_SLOT = 1024 * 4
+
rule decorate_fibers_chromosome:
input:
cram=rules.merged_fire_bam.output.cram,
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 1486f9e8c..a2ed5457e 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -41,6 +41,7 @@ rule percent_accessible:
tabix -p bed {output.bed}
"""
+
rule element_coverages_bw:
input:
bed=rules.element_coverages.output.bed,
From 24ee367f680999d7d4045389e988044dfd7b10f5 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 14:15:18 -0700
Subject: [PATCH 019/145] bigtools
---
workflow/Snakefile | 2 +-
workflow/rules/decorated-reads.smk | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 87d2cab2b..691e63f88 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -45,7 +45,7 @@ else:
MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0)
# Misc options
-NZOOMS = config.get("nzooms", 12)
+NZOOMS = config.get("nzooms", 14)
# Misc sets of wildcards
haps = ["all", "hap1", "hap2", "unk"]
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 49f575a11..da1ed727d 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -1,7 +1,7 @@
# Number of items to bundle in r-tree [default: 256]
-BLOCK_SIZE = 256 * 4
+BLOCK_SIZE = 256 * 8
# Number of data points bundled at lowest level [default: 1024]
-ITEMS_PER_SLOT = 1024 * 4
+ITEMS_PER_SLOT = 1024 * 8
rule decorate_fibers_chromosome:
From 302abc91a5938b0ab38ab59d484169e0f2c837d0 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 17:26:47 -0700
Subject: [PATCH 020/145] bigtools
---
workflow/rules/decorated-reads.smk | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index da1ed727d..11499f962 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -53,6 +53,12 @@ rule decorate_fibers_1:
"""
cat {input.bed} > {output.bed}
+ bedToBigBed \
+ -allow1bpOverlap -type=bed12+ -as={params.bed_as} \
+ {output.bed} {input.fai} {output.bb}
+ """
+ # bigtools version
+ """
bgzip -cd -@ {threads} {output.bed} \
| bigtools bedtobigbed \
--inmemory \
@@ -73,6 +79,7 @@ rule decorate_fibers_2:
fai=ancient(FAI),
output:
bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb",
+ bed=temp("results/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
benchmark:
"results/{sm}/benchmarks/decorate_fibers_2/{sm}.txt"
threads: 8
@@ -86,6 +93,13 @@ rule decorate_fibers_2:
items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
shell:
+ """
+ cat {input.decorated} > {output.bed}
+ bedToBigBed \
+ -allow1bpOverlap -type=bed12+ -as={params.dec_as} \
+ {output.bed} {input.fai} {output.bb}
+ """
+ # bigtools version
"""
cat {input.decorated} \
| bgzip -cd -@ {threads} \
From c81bae8240543cdbdc71e52b0ac31abd41fecf61 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 14 Aug 2024 17:29:20 -0700
Subject: [PATCH 021/145] bigtools
---
workflow/rules/decorated-reads.smk | 44 +++++++++++++++---------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 11499f962..6bb77d1a9 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -57,16 +57,16 @@ rule decorate_fibers_1:
-allow1bpOverlap -type=bed12+ -as={params.bed_as} \
{output.bed} {input.fai} {output.bb}
"""
- # bigtools version
- """
- bgzip -cd -@ {threads} {output.bed} \
- | bigtools bedtobigbed \
- --inmemory \
- --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
- --nzooms {params.nzooms} \
- -s start -a {params.bed_as} \
- - {input.fai} {output.bb}
- """
+# bigtools version
+"""
+bgzip -cd -@ {threads} {output.bed} \
+ | bigtools bedtobigbed \
+ --inmemory \
+ --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
+ --nzooms {params.nzooms} \
+ -s start -a {params.bed_as} \
+ - {input.fai} {output.bb}
+"""
rule decorate_fibers_2:
@@ -99,15 +99,15 @@ rule decorate_fibers_2:
-allow1bpOverlap -type=bed12+ -as={params.dec_as} \
{output.bed} {input.fai} {output.bb}
"""
- # bigtools version
- """
- cat {input.decorated} \
- | bgzip -cd -@ {threads} \
- | rg -v '^#' \
- | bigtools bedtobigbed \
- --inmemory \
- --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
- --nzooms {params.nzooms} \
- -a {params.dec_as} -s start \
- - {input.fai} {output.bb}
- """
+# bigtools version
+"""
+cat {input.decorated} \
+ | bgzip -cd -@ {threads} \
+ | rg -v '^#' \
+ | bigtools bedtobigbed \
+ --inmemory \
+ --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
+ --nzooms {params.nzooms} \
+ -a {params.dec_as} -s start \
+ - {input.fai} {output.bb}
+"""
From b03cc80b16ccaa724a833e1e6207c57d7fa62319 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 11:07:38 -0700
Subject: [PATCH 022/145] trakchub updates
---
workflow/rules/track-hub.smk | 3 +
workflow/scripts/trackhub.py | 164 +++++++----------------
workflow/templates/fire-description.html | 69 ++++++++++
3 files changed, 122 insertions(+), 114 deletions(-)
create mode 100644 workflow/templates/fire-description.html
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index a2ed5457e..7d86663c5 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -138,6 +138,7 @@ rule trackhub:
cov=rules.coverage.output.cov,
output:
hub="results/{sm}/trackHub/hub.txt",
+ description="results/{sm}/trackHub/fire-description.html",
resources:
load=get_load,
threads: 4
@@ -146,6 +147,7 @@ rule trackhub:
params:
ref=REF_NAME,
script=workflow.source_path("../scripts/trackhub.py"),
+ description=workflow.source_path("../templates/fire-description.html"),
shell:
"""
python {params.script} -v 2 \
@@ -153,4 +155,5 @@ rule trackhub:
--reference {params.ref} \
--sample {wildcards.sm} \
--average-coverage $(cat {input.cov})
+ cp {params.description} {output.description}
"""
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index 0e35cc2b5..b9bba625e 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -8,9 +8,9 @@
HUB = """
-hub {sample}-fiberseq
-shortLabel {sample}-fiberseq
-longLabel {sample}-fiberseq
+hub {sample}-FIRE-fiberseq
+shortLabel {sample}-FIRE-fiberseq
+longLabel {sample}-FIRE-fiberseq
genomesFile genomes.txt
email mvollger.edu
"""
@@ -21,35 +21,11 @@
"""
-BW_COMP = """
-track {sample}-{hap}-FDR
-compositeTrack on
-shortLabel {hap} FDR tracks
-longLabel {hap} FDR tracks
-type bigWig 0 1000
-autoScale off
-viewLimits {FDR_min}:{FDR_max}
-maxItems 100000
-maxHeightPixels 50:50:1
-"""
-
-BW_TEMPLATE = """
- track FDR.{sample}.{hap}.{nm}
- parent {sample}-{hap}-FDR
- bigDataUrl {file}
- shortLabel FDR.{sample}.{hap}.{nm}
- longLabel FDR.{sample}.{hap}.{nm}
- type bigWig
- visibility {viz}
- priority {i}
- maxHeightPixels 50:50:1
-"""
-
# transparentOverlay
PER_ACC_COMP = """
-track {sample}-percent-accessible
-shortLabel {sample}-percent-accessible
-longLabel {sample}-percent-accessible
+track {sample}-FIRE-percent-accessible
+shortLabel {sample}-FIRE-percent-accessible
+longLabel {sample}-FIRE-percent-accessible
graphTypeDefault points
aggregate transparentOverlay
container multiWig
@@ -69,52 +45,23 @@
"""
PER_ACC_TEMPLATE = """
- track {sample}-{hap}-percent-accessible
- parent {sample}-percent-accessible
- shortLabel {sample}-{hap}-percent-accessible
- longLabel {sample}-{hap}-percent-accessible
+ track {sample}-{hap}-FIRE-percent-accessible
+ parent {sample}-FIRE-percent-accessible
+ shortLabel {sample}-{hap}-FIRE-percent-accessible
+ longLabel {sample}-{hap}-FIRE-percent-accessible
bigDataUrl {file}
type bigWig
visibility {viz}
color {color}
"""
-FIRE_SCORE_COMP = """
-track {sample}-FIRE-score
-shortLabel {sample}-FIRE-score
-longLabel {sample}-FIRE-score
-graphTypeDefault points
-aggregate transparentOverlay
-container multiWig
-aggregate none
-showSubtrackColorOnUi on
-type bigWig 0 1000
-alwaysZero on
-viewLimits 0:100
-autoScale off
-maxItems 100000
-visibility full
-maxHeightPixels 100:50:8
-priority 100
-"""
-
-FIRE_SCORE = """
- track {sample}-{hap}-FIRE-score
- parent {sample}-FIRE-score
- shortLabel {sample}-{hap}-FIRE-score
- longLabel {sample}-{hap}-FIRE-score
- bigDataUrl {file}
- type bigWig
- visibility {viz}
- color {color}
-"""
MULTI_WIG = """
-track {sample}-{hap}-coverage
-parent {sample}-coverage
-longLabel {sample}-{hap}-coverage
-shortLabel {sample}-{hap}-coverage
+track {sample}-{hap}-FIRE-coverage
+parent {sample}-FIRE-coverage
+longLabel {sample}-{hap}-FIRE-coverage
+shortLabel {sample}-{hap}-FIRE-coverage
container multiWig
aggregate stacked
showSubtrackColorOnUi on
@@ -126,20 +73,20 @@
maxHeightPixels 100:50:8
priority 90
- track {sample}-{hap}-accessible
- parent {sample}-{hap}-coverage
+ track {sample}-{hap}-FIRE-accessible
+ parent {sample}-{hap}-FIRE-coverage
bigDataUrl {acc}
type bigWig
color 139,0,0
- track {sample}-{hap}-linker
- parent {sample}-{hap}-coverage
+ track {sample}-{hap}-FIRE-linker
+ parent {sample}-{hap}-FIRE-coverage
bigDataUrl {link}
type bigWig
color 147,112,219
- track {sample}-{hap}-nucleosome
- parent {sample}-{hap}-coverage
+ track {sample}-{hap}-FIRE-nucleosome
+ parent {sample}-{hap}-FIRE-coverage
bigDataUrl {nuc}
type bigWig
color 169,169,169
@@ -158,7 +105,7 @@
alwaysZero on
priority 10
- track {sample}-log-fdr
+ track {sample}-log-FIRE-FDR
parent {sample}-FIRE-FDR
bigDataUrl {fdr}
shortLabel {sample} -10log10 FDR
@@ -172,48 +119,48 @@
TRACK_GROUPS = """
# grouping for fibers
-track {sample}-fibers
+track {sample}-FIRE-fibers
compositeTrack on
-shortLabel {sample}-fibers
-longLabel {sample}-fibers
+shortLabel {sample}-FIRE-fibers
+longLabel {sample}-FIRE-fibers
type bigBed 12 +
maxItems 100000
visibility dense
priority 80
# grouping for peaks
-track {sample}-peaks
+track {sample}-FIRE-peaks
compositeTrack on
-shortLabel {sample}-peaks
-longLabel {sample}-peaks
+shortLabel {sample}-FIRE-peaks
+longLabel {sample}-FIRE-peaks
type bigBed 12 +
maxItems 100000
visibility dense
priority 30
# track of unreliable regions just above the peak tracks
- track {sample}-unreliable-coverage-regions
- parent {sample}-peaks
- shortLabel {sample}-unreliable-coverage-regions
- longLabel {sample}-unreliable-coverage-regions
+ track {sample}-unreliable-FIRE-coverage-regions
+ parent {sample}-FIRE-peaks
+ shortLabel {sample}-unreliable-FIRE-coverage-regions
+ longLabel {sample}-unreliable-FIRE-coverage-regions
type bigBed
bigDataUrl bb/unreliable-coverage-regions.bb
visibility dense
priority 29
# grouping for coverage
-track {sample}-coverage
+track {sample}-FIRE-coverage
superTrack on show
-shortLabel {sample}-coverage
-longLabel {sample}-coverage
+shortLabel {sample}-FIRE-coverage
+longLabel {sample}-FIRE-coverage
priority 90
"""
DECORATED = """
- track {sample}-{hap}-fibers
- parent {sample}-fibers
- shortLabel {sample}-{hap}-fibers
- longLabel {sample}-{hap}-fibers
+ track {sample}-{hap}-FIRE-fibers
+ parent {sample}-FIRE-fibers
+ shortLabel {sample}-{hap}-FIRE-fibers
+ longLabel {sample}-{hap}-FIRE-fibers
visibility dense
type bigBed 12 +
itemRgb On
@@ -227,8 +174,8 @@
# type bigBed 6 + 4
FIRE_TEMPLATE = """
- track {sample}-FIRE-peaks
- parent {sample}-peaks
+ track {sample}-narrow-FIRE-peaks
+ parent {sample}-FIRE-peaks
type bigNarrowPeak
bigDataUrl {file}
shortLabel {sample}-FIRE-peaks
@@ -238,10 +185,10 @@
"""
WIDE_TEMPLATE = """
- track {sample}-{name}
- parent {sample}-peaks
- shortLabel {sample}-{name}
- longLabel {sample}-{name}
+ track {sample}-wide-FIRE-peaks
+ parent {sample}-FIRE-peaks
+ shortLabel {sample}-wide-FIRE-peaks
+ longLabel {sample}-wide-FIRE-peaks
type bigBed
bigDataUrl {file}
visibility dense
@@ -250,13 +197,13 @@
"""
HAP_TEMPLATE = """
- track {sample}-hap-differences
- parent {sample}-peaks
+ track {sample}-FIRE-hap-differences
+ parent {sample}-FIRE-peaks
type bigBed 9 +
itemRgb on
bigDataUrl {file}
- shortLabel {sample}-hap-differences
- longLabel {sample}-hap-differences
+ shortLabel {sample}-FIRE-hap-differences
+ longLabel {sample}-FIRE-hap-differences
visibility dense
maxHeightPixels 25:25:1
"""
@@ -303,7 +250,7 @@ def generate_trackhub(
trackDb.write(HAP_TEMPLATE.format(file=file, sample=sample))
file = "bb/FDR-wide-peaks.bb"
trackDb.write(
- WIDE_TEMPLATE.format(file=file, name="FDR-wide-peaks", sample=sample)
+ WIDE_TEMPLATE.format(file=file, sample=sample)
)
# add percent accessible tracks
@@ -311,7 +258,6 @@ def generate_trackhub(
if hap == "all":
color = "0,0,0"
trackDb.write(PER_ACC_COMP.format(sample=sample))
- # trackDb.write(FIRE_SCORE_COMP.format(sample=sample, file=f"bw/score.bw"))
elif hap == "hap1":
color = "0,0,255"
elif hap == "hap2":
@@ -324,17 +270,7 @@ def generate_trackhub(
sample=sample, hap=hap, file=file, color=color, viz=viz
)
)
- # zhap = "" if hap == "all" else f"_{hap}".replace("hap", "H")
- # trackDb.write(
- # FIRE_SCORE.format(
- # sample=sample,
- # hap=hap,
- # file=f"bw/score{zhap}.bw",
- # viz=viz,
- # color=color,
- # )
- # )
-
+
# new bin files
if hap == "all":
for z in ["H1", "H2", "UNK"]:
diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html
new file mode 100644
index 000000000..3f8592d45
--- /dev/null
+++ b/workflow/templates/fire-description.html
@@ -0,0 +1,69 @@
+Description
+Fiber-seq Inferred Regulatory Elements
+
+
+ These tracks represent
+ FIRE peak calls
+ inferred from regulatory elements in Fiber-seq data.
+
+
+
+ FIREs are MTase sensitive patches (MSPs) that are inferred to be regulatory
+ elements on single chromatin fibers. To do this we used semi-supervised
+ machine learning to identify MSPs that are likely to be regulatory elements
+ using the Mokapot framework and XGBoost. Every
+ individual FIRE element is associated with a precision value, which indicates
+ the probability that the FIRE element is a true regulatory element. The
+ precision of FIREs elements are estimated using Mokapot and
+ validation data not used in training. We train our model targeting FIRE
+ elements with at least 90% precision, MSPs with less than 90% precision are
+ considered to have average level of accessibility expected between two
+ nucleosomes, and are referred to as linker regions. Semi-superivized machine
+ learning with Mokapot requires a mixed-positive training set and
+ a clean negative training set. To create mixed positive training data we
+ selected MSPs that overlapped DNase hypersensitive sites (DHSs) and CTCF
+ ChIP-seq peaks. And to create a clean negative training set we selected MSPs
+ that did not overlap DHSs or CTCF ChIP-seq peaks.
+
+
+
+ FIRE peaks: Peaks are called by identifying FIRE score local-maxima
+ that have FDR values below a threshold. By default the pipeline reports
+ results for both 1% and 5% FDR thresholds. Once a local-maxima is
+ identified, the start and end positions of the peak are determined by the
+ median start and end positions of the underlying FIRE elements. We also
+ calculate and report wide peaks by taking the union of the FIRE peaks and
+ all regions below the FDR threshold and then merging resulting regions that
+ are within one nucleosome (147 bp) of one another.
+
+
+
+ FIRE peak FDR: FDR calculation begins by shuffling the locations of
+ all the fibers across the genome and recalculating the FIRE score for each
+ position in the genome. The FDR is then defined as the number of bases that
+ have shuffled FIRE scores above a threshold divided by the number of bases
+ in the un-shuffled data.
+
+
+
+Methods
+
+ Please refer to
+ https://fiberseq.github.io/
+ for more details.
+
+
+Credits
+Tracks were generated by Mitchell Vollger (mvollger_at_uw.edu) and Andrew
+Stergachis (absterga_at_uw.edu).
+
+References
+
+ Vollger, M. R., Swanson, et al. (2024). A haplotype-resolved view of human
+ gene regulation. bioRxiv (p. 2024.06.14.599122).
+ DOI: https://doi.org/10.1101/2024.06.14.599122
+
From f3c77dbbd8cfeb949070f4eff2626cbb408a6517 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 11:09:16 -0700
Subject: [PATCH 023/145] ref full path
---
workflow/rules/common.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk
index bcf267d4b..d9ca9d74d 100644
--- a/workflow/rules/common.smk
+++ b/workflow/rules/common.smk
@@ -11,7 +11,7 @@ def get_ref():
ref = config["ref"]
if not os.path.exists(ref):
raise ValueError(f"FIRE: reference file {ref} does not exist")
- return ref
+ return os.path.abspath(ref)
def get_fai():
From 9367a11afbb60facfba0484f453a4d0a4be1c1bd Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 11:14:42 -0700
Subject: [PATCH 024/145] ref full path
---
workflow/scripts/trackhub.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index b9bba625e..1fde15417 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -13,6 +13,7 @@
longLabel {sample}-FIRE-fiberseq
genomesFile genomes.txt
email mvollger.edu
+descriptionUrl fire-description.html
"""
GENOMES = """
From b2f0188057441407183010a1334fa4f5634d7b64 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 12:45:15 -0700
Subject: [PATCH 025/145] description
---
workflow/templates/fire-description.html | 42 ++++++++++++++++++++----
1 file changed, 35 insertions(+), 7 deletions(-)
diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html
index 3f8592d45..9dfcce6ab 100644
--- a/workflow/templates/fire-description.html
+++ b/workflow/templates/fire-description.html
@@ -25,24 +25,52 @@ Description
ChIP-seq peaks. And to create a clean negative training set we selected MSPs
that did not overlap DHSs or CTCF ChIP-seq peaks.
+
+Track Descriptions
FIRE peaks: Peaks are called by identifying FIRE score local-maxima
that have FDR values below a threshold. By default the pipeline reports
results for both 1% and 5% FDR thresholds. Once a local-maxima is
identified, the start and end positions of the peak are determined by the
- median start and end positions of the underlying FIRE elements. We also
- calculate and report wide peaks by taking the union of the FIRE peaks and
- all regions below the FDR threshold and then merging resulting regions that
- are within one nucleosome (147 bp) of one another.
+ median start and end positions of the underlying FIRE elements.
+
+
+
+ Wide FIRE peaks: Wide peaks are the union of the FIRE peaks and all
+ regions below the FDR threshold. We then merge resulting regions that are
+ within one nucleosome (147 bp) of one another.
- FIRE peak FDR: FDR calculation begins by shuffling the locations of
- all the fibers across the genome and recalculating the FIRE score for each
+ FIRE FDR: FDR calculation begins by shuffling the locations of all
+ the fibers across the genome and recalculating the FIRE score for each
position in the genome. The FDR is then defined as the number of bases that
have shuffled FIRE scores above a threshold divided by the number of bases
- in the un-shuffled data.
+ in the un-shuffled data. Displayed in the track is the -10log10
+ transformation of this FDR value so the more significant FIRE scores appear
+ as higher values.
+
+
+
+ FIRE coverage: The FIRE coverage track shows the number of fibers
+ that are MSPs (purple), FIREs (red), and nucleosomes (gray) at each position
+ in the genome. The coverage track is calculated by counting the number of
+ fibers that have a MSP, FIRE, or nucleosome at each position in the genome.
+
+
+
+ Percent accessible: The percent of fibers that contain a FIRE element
+ overlaping a given position in the genome. The percent accessible for
+ haplotype one is displayed as a red line, haplotype 2 as a blue line, and
+ both haplotypes as a black line.
+
+
+
+ FIRE fibers : A decorator track that shows individual Fiber-seq
+ reads (fibers) along the genome. Each fiber is colored by the MSPs (purple),
+ FIREs (red), and nucleosomes (gray) that it contains. Optionally, you can
+ also display the raw 5mC or m6A information using the track configuration.
From 6e43accb9c1a3d1955e8f89cd227b2e25514fb91 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 12:46:09 -0700
Subject: [PATCH 026/145] description
---
workflow/scripts/trackhub.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index 1fde15417..b5885b961 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -42,6 +42,7 @@
priority 1
yLineOnOff on
yLineMark 100
+html fire-description.html
gridDefault on
"""
@@ -72,6 +73,7 @@
viewLimits 0:{upper_coverage}
visibility full
maxHeightPixels 100:50:8
+html fire-description.html
priority 90
track {sample}-{hap}-FIRE-accessible
@@ -105,6 +107,7 @@
maxHeightPixels 100:50:1
alwaysZero on
priority 10
+html fire-description.html
track {sample}-log-FIRE-FDR
parent {sample}-FIRE-FDR
@@ -128,6 +131,7 @@
maxItems 100000
visibility dense
priority 80
+html fire-description.html
# grouping for peaks
track {sample}-FIRE-peaks
@@ -138,6 +142,7 @@
maxItems 100000
visibility dense
priority 30
+html fire-description.html
# track of unreliable regions just above the peak tracks
track {sample}-unreliable-FIRE-coverage-regions
@@ -155,6 +160,7 @@
shortLabel {sample}-FIRE-coverage
longLabel {sample}-FIRE-coverage
priority 90
+html fire-description.html
"""
DECORATED = """
From 5d7595cef776e0c2df61131e83c0e2d8b4cd60b9 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 12:52:51 -0700
Subject: [PATCH 027/145] description
---
workflow/Snakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 691e63f88..fcaaa42fb 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -45,7 +45,7 @@ else:
MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0)
# Misc options
-NZOOMS = config.get("nzooms", 14)
+NZOOMS = config.get("nzooms", 10)
# Misc sets of wildcards
haps = ["all", "hap1", "hap2", "unk"]
From 7403054f2537f5e51ebf9b936422544315839a3f Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 13:00:39 -0700
Subject: [PATCH 028/145] description
---
workflow/templates/fire-description.html | 36 +++++++++++++-----------
1 file changed, 19 insertions(+), 17 deletions(-)
diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html
index 9dfcce6ab..750e7c0fc 100644
--- a/workflow/templates/fire-description.html
+++ b/workflow/templates/fire-description.html
@@ -4,26 +4,21 @@ Description
These tracks represent
FIRE peak calls
- inferred from regulatory elements in Fiber-seq data.
+ inferred from regulatory elements in Fiber-seq data. If you are unframiliar
+ with Fiber-seq please see the references below for a detailed description, but
+ in short it is useful to think of it as a long-read version of DNaseI/ATAC-seq
+ that can be used to identify regions of chromatin accessibility.
- FIREs are MTase sensitive patches (MSPs) that are inferred to be regulatory
- elements on single chromatin fibers. To do this we used semi-supervised
- machine learning to identify MSPs that are likely to be regulatory elements
- using the Mokapot framework and XGBoost. Every
- individual FIRE element is associated with a precision value, which indicates
- the probability that the FIRE element is a true regulatory element. The
- precision of FIREs elements are estimated using Mokapot and
- validation data not used in training. We train our model targeting FIRE
- elements with at least 90% precision, MSPs with less than 90% precision are
- considered to have average level of accessibility expected between two
- nucleosomes, and are referred to as linker regions. Semi-superivized machine
- learning with Mokapot requires a mixed-positive training set and
- a clean negative training set. To create mixed positive training data we
- selected MSPs that overlapped DNase hypersensitive sites (DHSs) and CTCF
- ChIP-seq peaks. And to create a clean negative training set we selected MSPs
- that did not overlap DHSs or CTCF ChIP-seq peaks.
+ FIREs are MTase sensitive patches (MSPs) on Fiber-seq reads that are inferred
+ to be regulatory elements on single chromatin fibers. To do this we used
+ semi-supervised machine learning to identify MSPs that are likely to be
+ regulatory elements using the Mokapot framework and
+ XGBoost. Every individual FIRE element is associated with a
+ precision value, which indicates the probability that the FIRE element is a
+ true regulatory element. Significantly more detail is avalible in our
+ manuscript and fiberseq website both of which are linked below.
Track Descriptions
@@ -52,6 +47,13 @@ Track Descriptions
as higher values.
+
+ Unreliable FIRE coverage regions: The unreliable FIRE coverage track
+ shows regions that were exlcuded from the FDR calculations due to low or
+ high sequencing depth. Defined as deviating from the median sequencing depth
+ by 5 or more standard deviations.
+
+
FIRE coverage: The FIRE coverage track shows the number of fibers
that are MSPs (purple), FIREs (red), and nucleosomes (gray) at each position
From 3de3d95662f3f842d68236c47703c4696037c91a Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 13:02:02 -0700
Subject: [PATCH 029/145] description
---
workflow/templates/fire-description.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html
index 750e7c0fc..26d464583 100644
--- a/workflow/templates/fire-description.html
+++ b/workflow/templates/fire-description.html
@@ -38,8 +38,8 @@ Track Descriptions
- FIRE FDR: FDR calculation begins by shuffling the locations of all
- the fibers across the genome and recalculating the FIRE score for each
+ log FIRE FDR: FDR calculation begins by shuffling the locations of
+ all the fibers across the genome and recalculating the FIRE score for each
position in the genome. The FDR is then defined as the number of bases that
have shuffled FIRE scores above a threshold divided by the number of bases
in the un-shuffled data. Displayed in the track is the -10log10
From a7bfe0d7e1e98e0243723379f9146bc5abf1681f Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 13:06:15 -0700
Subject: [PATCH 030/145] description
---
workflow/templates/fire-description.html | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html
index 26d464583..9662ae93e 100644
--- a/workflow/templates/fire-description.html
+++ b/workflow/templates/fire-description.html
@@ -33,8 +33,8 @@ Track Descriptions
Wide FIRE peaks: Wide peaks are the union of the FIRE peaks and all
- regions below the FDR threshold. We then merge resulting regions that are
- within one nucleosome (147 bp) of one another.
+ regions below the FDR threshold. We then merge the resulting regions that
+ are within one nucleosome (147 bp) of one another.
@@ -63,9 +63,9 @@ Track Descriptions
Percent accessible: The percent of fibers that contain a FIRE element
- overlaping a given position in the genome. The percent accessible for
- haplotype one is displayed as a red line, haplotype 2 as a blue line, and
- both haplotypes as a black line.
+ overlaping a given position in the genome. The percent of accessible fibers
+ for haplotype one is displayed as a red line, haplotype 2 as a blue line,
+ and both haplotypes as a black line.
From 7c6d032fe6dcdbd4171ef7025ceab2b886abb082 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 14:00:54 -0700
Subject: [PATCH 031/145] description
---
workflow/scripts/trackhub.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index b5885b961..a3f7ab9cd 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -71,7 +71,7 @@
autoScale off
alwaysZero on
viewLimits 0:{upper_coverage}
-visibility full
+visibility {viz}
maxHeightPixels 100:50:8
html fire-description.html
priority 90
@@ -233,6 +233,10 @@ def generate_trackhub(
trackDb.write(TRACK_GROUPS.format(sample=sample))
for hap in ["all", "hap1", "hap2", "unk"]:
+ if hap == "all":
+ viz = "full"
+ else:
+ viz = "hide"
# add coverage tracks
if hap != "unk":
acc = f"bw/{hap}.fire.coverage.bw"
@@ -245,6 +249,7 @@ def generate_trackhub(
nuc=nuc,
sample=sample,
hap=hap,
+ viz=viz,
upper_coverage=upper_coverage,
)
)
From d01c642e9fef64e22903916099e4fdcad5910cbf Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 14:01:43 -0700
Subject: [PATCH 032/145] description
---
workflow/scripts/trackhub.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index a3f7ab9cd..a0ee8e77e 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -224,6 +224,8 @@ def generate_trackhub(
):
if ref == "T2Tv2.0":
ref = "GCA_009914755.4"
+ elif ref == "HG002v1.1":
+ ref = "HG002v1.1.PAT"
upper_coverage = int(ave_coverage + 5 * np.sqrt(ave_coverage))
os.makedirs(f"{trackhub_dir}/", exist_ok=True)
From b92ceacba6a804c5a268c840de0951ee784267b8 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 14:04:46 -0700
Subject: [PATCH 033/145] description
---
workflow/scripts/trackhub.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index a0ee8e77e..a2e55d6eb 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -115,7 +115,7 @@
shortLabel {sample} -10log10 FDR
longLabel {sample} -10log10 FDR
autoScale on
- visibility full
+ visibility hide
yLineOnOff on
yLineMark {y_line}
gridDefault on
From b6897685cd28e25eefaaeadadfea0ee5ad94a4f2 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 14:07:06 -0700
Subject: [PATCH 034/145] description
---
workflow/scripts/trackhub.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index a2e55d6eb..fc5c0e5ab 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -101,7 +101,6 @@
compositeTrack on
shortLabel {sample}-FIRE-FDR
longLabel {sample}-FIRE-FDR
-visibility full
type bigWig 0 1000
maxItems 100000
maxHeightPixels 100:50:1
From 28c027104e5abfdbcc1791fddb6da34b59342312 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 19 Aug 2024 14:12:57 -0700
Subject: [PATCH 035/145] description
---
workflow/templates/fire-description.html | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html
index 9662ae93e..ada2528c8 100644
--- a/workflow/templates/fire-description.html
+++ b/workflow/templates/fire-description.html
@@ -25,8 +25,7 @@ Track Descriptions
FIRE peaks: Peaks are called by identifying FIRE score local-maxima
- that have FDR values below a threshold. By default the pipeline reports
- results for both 1% and 5% FDR thresholds. Once a local-maxima is
+ that have FDR values below a 5% threshold. Once a local-maxima is
identified, the start and end positions of the peak are determined by the
median start and end positions of the underlying FIRE elements.
From ec30dbdc31a9e1356fd7f11d99bd29aeb448baf6 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 21 Aug 2024 12:36:05 -0700
Subject: [PATCH 036/145] empty file check
---
workflow/rules/FDR-peaks.smk | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/workflow/rules/FDR-peaks.smk b/workflow/rules/FDR-peaks.smk
index bbe1fa331..fc48e5126 100644
--- a/workflow/rules/FDR-peaks.smk
+++ b/workflow/rules/FDR-peaks.smk
@@ -93,6 +93,10 @@ rule fdr_track_chromosome:
echo "No FIRE sites for {wildcards.chrom}"
touch {output}
exit 0
+ elif [ ! -s {output.fiber} ]; then
+ echo "No unfiltered fibers for {wildcards.chrom}"
+ touch {output}
+ exit 0
fi
python {params.script} -v 1 \
From c05680fce799ef5dad5f15c05cbdbe55af97388e Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 9 Sep 2024 14:37:45 -0700
Subject: [PATCH 037/145] Add ft qc
---
workflow/Snakefile | 6 ++++--
workflow/rules/{peak-stats.smk => stats.smk} | 14 ++++++++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
rename workflow/rules/{peak-stats.smk => stats.smk} (88%)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index fcaaa42fb..dceb9f4b5 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -72,7 +72,7 @@ MIN_UNRELIABLE_COVERAGE_LEN = config.get("min_unreliable_coverage_len", 50)
include: "rules/apply-model.smk"
include: "rules/coverages.smk"
include: "rules/FDR-peaks.smk"
-include: "rules/peak-stats.smk"
+include: "rules/stats.smk"
include: "rules/decorated-reads.smk"
include: "rules/track-hub.smk"
@@ -111,13 +111,15 @@ rule all:
hp=not_unk,
el_type=el_types,
),
+ # Stats and Tables
+ expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
+ expand(rules.ft_qc.output.tbl, sm=MANIFEST.index),
# FDR results
expand(rules.fdr_track.output.bed, sm=MANIFEST.index),
expand(rules.fdr_peaks_by_fire_elements.output.bed, sm=MANIFEST.index),
expand(rules.wide_fdr_peaks.output.bed, sm=MANIFEST.index),
expand(rules.one_percent_fdr_peaks.output.bed, sm=MANIFEST.index),
expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index),
- expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
# trackhub
expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
expand(rules.fdr_peaks_by_fire_elements_to_bb.output.bb, sm=MANIFEST.index),
diff --git a/workflow/rules/peak-stats.smk b/workflow/rules/stats.smk
similarity index 88%
rename from workflow/rules/peak-stats.smk
rename to workflow/rules/stats.smk
index 2348e4237..ad14bc45c 100644
--- a/workflow/rules/peak-stats.smk
+++ b/workflow/rules/stats.smk
@@ -50,6 +50,20 @@ rule fires_in_peaks:
"""
+rule ft_qc:
+ input:
+ cram=rules.merged_fire_bam.output.cram,
+ output:
+ tbl="results/{sm}/fire/{sm}.fire.qc.tbl.gz",
+ conda:
+ DEFAULT_ENV
+ threads: 16
+ shell:
+ """
+ {FT_EXE} qc --acf -t {threads} {input.cram} {output.tbl}
+ """
+
+
rule hap_differences:
input:
bed=rules.fdr_peaks_by_fire_elements.output.bed,
From e52e1e33e70e42d4c496d226678d63b3bf702bc8 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 10 Sep 2024 07:14:31 -0700
Subject: [PATCH 038/145] Add ft qc
---
workflow/envs/env.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index 7b5b60d44..c19a869c6 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -7,7 +7,7 @@ dependencies:
- samtools==1.19.1
- htslib==1.19.1
- bedtools==2.31
- - bioconda::fibertools-rs==0.5.3
+ - bioconda::fibertools-rs==0.5.4
- bioconda::gia
- seqtk
- hck>=0.9.2
From a742a20da1b055cb39c1be2bb044ac07ed689bb1 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 10 Sep 2024 07:58:43 -0700
Subject: [PATCH 039/145] Add ft qc
---
workflow/profiles/default/config.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index 0634954bd..e5ba7d2e7 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -9,3 +9,4 @@ printshellcmds: True
show-failed-logs: True
cores: 32
local-cores: 4
+quiet: rules
\ No newline at end of file
From 0489f860bd46e940bb885d1a0dec150d68ea45cc Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 10 Sep 2024 08:01:09 -0700
Subject: [PATCH 040/145] Add ft qc
---
workflow/profiles/default/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index e5ba7d2e7..aa7ae2d26 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -9,4 +9,4 @@ printshellcmds: True
show-failed-logs: True
cores: 32
local-cores: 4
-quiet: rules
\ No newline at end of file
+quiet: rules # all rules or progress
\ No newline at end of file
From 3bdf4d198d9bb7f22be94d3f265f7c79025c5e32 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 10 Sep 2024 08:26:31 -0700
Subject: [PATCH 041/145] Add ft qc
---
workflow/profiles/default/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index aa7ae2d26..d0881f693 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -9,4 +9,4 @@ printshellcmds: True
show-failed-logs: True
cores: 32
local-cores: 4
-quiet: rules # all rules or progress
\ No newline at end of file
+quiet: all # all rules or progress
\ No newline at end of file
From e30cc5c4242cd498ad5509ab2e86faca0f2ed4c1 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 10 Sep 2024 17:26:40 -0700
Subject: [PATCH 042/145] Add ft qc
---
workflow/profiles/default/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index d0881f693..afc4b5a3a 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -9,4 +9,4 @@ printshellcmds: True
show-failed-logs: True
cores: 32
local-cores: 4
-quiet: all # all rules or progress
\ No newline at end of file
+quiet: rules # all rules or progress, cannot use all because it hides the unlock error message (and others?)
\ No newline at end of file
From b489bc1b9c4ef3c5abf72c8bc8b7cfc70a9e80b4 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 13 Sep 2024 14:24:22 -0700
Subject: [PATCH 043/145] refactor to use ft pileup and replace zcat with bgzip
---
workflow/Snakefile | 4 +-
workflow/rules/FDR-peaks.smk | 15 ++-
workflow/rules/apply-model.smk | 191 +++--------------------------
workflow/rules/common.smk | 20 +++
workflow/rules/coverages.smk | 6 +-
workflow/rules/decorated-reads.smk | 7 +-
workflow/rules/stats.smk | 2 +-
workflow/rules/track-hub.smk | 16 +--
8 files changed, 61 insertions(+), 200 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index dceb9f4b5..f173d403c 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -106,10 +106,8 @@ rule all:
expand(rules.filtered_and_shuffled_fiber_locations.output, sm=MANIFEST.index),
# coverage of elements
expand(
- rules.element_coverages.output,
+ rules.pileup.output.bed,
sm=MANIFEST.index,
- hp=not_unk,
- el_type=el_types,
),
# Stats and Tables
expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
diff --git a/workflow/rules/FDR-peaks.smk b/workflow/rules/FDR-peaks.smk
index fc48e5126..929b3f1bc 100644
--- a/workflow/rules/FDR-peaks.smk
+++ b/workflow/rules/FDR-peaks.smk
@@ -156,10 +156,9 @@ rule fdr_track_filtered:
"""
MIN=$(cat {input.minimum})
MAX=$(cat {input.maximum})
-
( \
- zcat {input.bed} | head -n 1 || true; \
- zcat {input.bed} | bioawk -tc hdr -v MAX=$MAX -v MIN=$MIN '$coverage > MIN && $coverage < MAX' \
+ bgzip -cd {input.bed} | head -n 1 || true; \
+ bgzip -cd {input.bed} | bioawk -tc hdr -v MAX=$MAX -v MIN=$MIN '$coverage > MIN && $coverage < MAX' \
) \
| bgzip -@ {threads} \
> {output.bed}
@@ -183,7 +182,7 @@ rule helper_fdr_peaks_by_fire_elements:
min_per_acc_peak=MIN_PER_ACC_PEAK,
shell:
"""
- HEADER=$(zcat {input.bed} | head -n 1 || true)
+ HEADER=$(bgzip -cd {input.bed} | head -n 1 || true)
NC=$(echo $HEADER | awk '{{print NF}}' || true)
FIRE_CT=$((NC+1))
FIRE_ST=$((NC+2))
@@ -233,7 +232,7 @@ rule fdr_peaks_by_fire_elements_chromosome:
min_frac_accessible=MIN_FRAC_ACCESSIBLE,
shell:
"""
- zcat {input.bed} \
+ bgzip -cd {input.bed} \
| python {params.script} -v 1 \
--max-cov $(cat {input.maximum}) \
--min-cov $(cat {input.minimum}) \
@@ -295,7 +294,7 @@ rule wide_fdr_peaks:
shell:
"""
( \
- zcat {input.bed}; \
+ bgzip -cd {input.bed}; \
bioawk -tc hdr 'NR==1 || $FDR<={params.max_peak_fdr}' {input.track} \
| bioawk -tc hdr 'NR==1 || $coverage>0' \
| bioawk -tc hdr 'NR==1 || ($fire_coverage/$coverage>={params.min_frac_acc})' \
@@ -331,14 +330,14 @@ rule one_percent_fdr_peaks:
nuc_size=config.get("nucleosome_size", 147),
shell:
"""
- zcat {input.bed} \
+ bgzip -cd {input.bed} \
| csvtk filter -tT -C '$' -f "FDR<=0.01" \
| bgzip -@ {threads} \
> {output.bed}
tabix -f -p bed {output.bed}
( \
- zcat {output.bed}; \
+ bgzip -cd {output.bed}; \
bioawk -tc hdr '$FDR<=0.01' {input.track} \
) \
| cut -f 1-3 \
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index bd1e82a02..29d1c2edc 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -55,7 +55,7 @@ rule merged_fire_bam:
"""
-rule extract_from_fire:
+rule fire_sites_chrom:
input:
bam=rules.fire.output.bam,
output:
@@ -65,70 +65,17 @@ rule extract_from_fire:
DEFAULT_ENV
resources:
mem_mb=16 * 1024,
- priority: 10
- shell:
- """
- {FT_EXE} fire -t {threads} --all --extract {input.bam} \
- | LC_ALL=C sort \
- --parallel={threads} \
- -k1,1 -k2,2n -k3,3n -k4,4 \
- | bgzip -@ {threads} \
- > {output.bed}
- """
-
-
-rule merge_model_results:
- input:
- beds=expand(
- rules.extract_from_fire.output.bed, chrom=get_chroms(), allow_missing=True
- ),
- output:
- bed=temp("temp/{sm}/fiber-calls/model.results.bed.gz"),
- threads: 8
- conda:
- DEFAULT_ENV
- params:
- n_chunks=len(get_chroms()) + 1,
- benchmark:
- "results/{sm}/benchmarks/merge_model_results/{sm}.txt"
- priority: 20
- shell:
- """
- cat {input.beds} > {output.bed}
- """
-
-
-rule index_model_results:
- input:
- bed=rules.merge_model_results.output.bed,
- output:
- tbi=temp(rules.merge_model_results.output.bed + ".tbi"),
- conda:
- DEFAULT_ENV
- shell:
- """
- tabix -p bed {input.bed}
- """
-
-
-rule fire_sites_chrom:
- input:
- bed=rules.merge_model_results.output.bed,
- tbi=rules.index_model_results.output.tbi,
- output:
- bed=temp("temp/{sm}/fiber-calls/{chrom}/FIRE.bed.gz"),
- threads: 4
- conda:
- DEFAULT_ENV
params:
min_fdr=MIN_FIRE_FDR,
shell:
"""
- tabix {input.bed} {wildcards.chrom} \
+ {FT_EXE} fire -t {threads} --extract {input.bam} \
+ | LC_ALL=C sort --parallel={threads} \
+ -k1,1 -k2,2n -k3,3n -k4,4 \
| bioawk -tc hdr '$10<={params.min_fdr}' \
| (grep '\\S' || true) \
| (grep -v '^#' || true) \
- | bgzip -@{threads} \
+ | bgzip -@ {threads} \
> {output.bed}
"""
@@ -139,12 +86,10 @@ rule fire_sites:
rules.fire_sites_chrom.output.bed, chrom=get_chroms(), allow_missing=True
),
output:
- bed="results/{sm}/fiber-calls/FIRE.bed.gz",
+ bed="results/{sm}/fire/FIRE.bed.gz",
threads: 8
conda:
DEFAULT_ENV
- params:
- min_fdr=MIN_FIRE_FDR,
shell:
"""
cat {input.beds} > {output.bed}
@@ -165,124 +110,24 @@ rule fire_sites_index:
"""
-rule split_by_hap_per_chrom:
+# Colnames made by this
+# #chrom start end
+# coverage fire_coverage score nuc_coverage msp_coverage
+# coverage_H1 fire_coverage_H1 score_H1 nuc_coverage_H1 msp_coverage_H1
+# coverage_H2 fire_coverage_H2 score_H2 nuc_coverage_H2 msp_coverage_H2
+rule pileup:
input:
- bed=rules.merge_model_results.output.bed,
- tbi=rules.index_model_results.output.tbi,
- fai=ancient(FAI),
- output:
- both=pipe("temp/{sm}/coverage/all/{chrom}.bed"),
- H1=pipe("temp/{sm}/coverage/hap1/{chrom}.bed"),
- H2=pipe("temp/{sm}/coverage/hap2/{chrom}.bed"),
- conda:
- DEFAULT_ENV
- resources:
- disk_mb=100,
- runtime=240,
- mem_mb=4 * 1024,
- shell:
- """
- tabix {input.bed} {wildcards.chrom} | tee \
- >( (rg -w H1 || true) > {output.H1} ) \
- >( (rg -w H2 || true) > {output.H2} ) \
- > {output.both}
- """
-
-
-rule split_hap_by_element_type_per_chrom:
- input:
- bed="temp/{sm}/coverage/{hp}/{chrom}.bed",
- fai=ancient(FAI),
- output:
- fire=temp("temp/{sm}/coverage/{hp}/fire_{chrom}.bed.gz"),
- link=temp("temp/{sm}/coverage/{hp}/linker_{chrom}.bed.gz"),
- nuc=temp("temp/{sm}/coverage/{hp}/nucleosome_{chrom}.bed.gz"),
- params:
- min_fire_fdr=MIN_FIRE_FDR,
- threads: 2
- conda:
- DEFAULT_ENV
- resources:
- disk_mb=100,
- mem_mb=8 * 1024,
- shell:
- """
- cat {input.bed} | tee \
- >( awk '$10<={params.min_fire_fdr}' \
- | bedtools genomecov -bg -i - -g {input.fai} \
- | bgzip > {output.fire} \
- ) \
- >( awk '$10<=1.0 && $10>{params.min_fire_fdr}' \
- | bedtools genomecov -bg -i - -g {input.fai} \
- | bgzip > {output.link} \
- ) \
- | awk '$10>1.0' \
- | bedtools genomecov -bg -i - -g {input.fai} \
- | bgzip > {output.nuc}
-
- # check if files are empty and if they are add a fake data line
- for f in {output.fire} {output.link} {output.nuc}; do
- HAS_LINES=$(zcat $f | head | grep -cv '^#') || true
- if [ $HAS_LINES -eq 0 ]; then
- printf "{wildcards.chrom}\\t0\\t1\\t0\\n" \
- | bgzip -@{threads} > $f
- fi
- done
- """
-
-
-rule element_coverages_per_chrom:
- input:
- beds=expand(
- "temp/{sm}/coverage/{hp}/{el_type}_{chrom}.bed.gz",
- el_type=el_types,
- allow_missing=True,
- ),
+ bam=rules.merged_fire_bam.output.cram,
output:
- bed=temp("temp/{sm}/coverage/{hp}_{chrom}_element_coverages.bed.gz"),
+ bed="results/{sm}/coverage/{sm}.pileup.bed.gz",
+ tbi="results/{sm}/coverage/{sm}.pileup.bed.gz.tbi",
+ threads: 12
conda:
DEFAULT_ENV
- params:
- names="\t".join(el_types),
- resources:
- runtime=300,
- threads: 2
shell:
"""
- HAS_LINES=$(zcat {input.beds} | head | grep -cv '^#') || true
- if [ $HAS_LINES -eq 0 ]; then
- echo "No element coverages found for {wildcards.sm} {wildcards.hp} {wildcards.chrom}"
- printf "#chrom\\tstart\\tend\\t{params.names}\\n{wildcards.chrom}\\t0\\t1\\t0\\t0\\t0\\n" \
- | bgzip -@{threads} \
- > {output.bed}
- else
- # bedtools unionbedg -header -i {input.beds} -names {params.names}
- # | sed 's/^chrom/#chrom/'
- ( \
- printf "#chrom\\tstart\\tend\\t{params.names}\\n"; \
- gia unionbedg -s -i {input.beds} \
- ) \
- | bgzip -@ {threads} \
+ ft pileup --haps -t {threads} {input.bam} \
+ | bgzip -@ {threads} \
> {output.bed}
- fi
- """
-
-
-rule element_coverages:
- input:
- beds=expand(
- rules.element_coverages_per_chrom.output.bed,
- chrom=get_chroms(),
- allow_missing=True,
- ),
- output:
- bed="results/{sm}/coverage/{hp}_element_coverages.bed.gz",
- tbi="results/{sm}/coverage/{hp}_element_coverages.bed.gz.tbi",
- conda:
- DEFAULT_ENV
- threads: 1
- shell:
- """
- cat {input.beds} > {output.bed}
tabix -p bed {output.bed}
"""
diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk
index d9ca9d74d..5a31b8ac0 100644
--- a/workflow/rules/common.smk
+++ b/workflow/rules/common.smk
@@ -136,3 +136,23 @@ def hap_hck_columns(wc):
return "-F fire_coverage_H2 -F coverage_H2"
else:
raise ValueError(f"Unknown haplotype {wc.hp}")
+
+
+def pileup_cut_cmd(wc):
+ if wc.hp == "all":
+ tail = ""
+ elif wc.hp == "hap1":
+ tail = "_H1"
+ elif wc.hp == "hap2":
+ tail = "_H2"
+ else:
+ raise ValueError(f"Unknown haplotype {wc.hp}")
+ if wc.el_type == "nucleosome":
+ col = f"nuc_coverage{tail}"
+ elif wc.el_type == "linker":
+ col = f"msp_coverage{tail}-fire_coverage{tail}"
+ elif wc.el_type == "fire":
+ col = f"fire_coverage{tail}"
+ else:
+ raise ValueError(f"Unknown element type {wc.el_type}")
+ return f"bioawk -tc hdr '{{print $1,$2,$3,{col}}}'"
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index 990416c9a..aa2835874 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -20,7 +20,7 @@ rule genome_bedgraph:
shell:
"""
mosdepth -f {input.ref} -t {threads} tmp {input.cram}
- zcat tmp.per-base.bed.gz \
+ bgzip -cd tmp.per-base.bed.gz \
| LC_ALL=C sort --parallel={threads} -k1,1 -k2,2n -k3,3n -k4,4 \
| bgzip -@ {threads} \
> {output.bg}
@@ -102,7 +102,7 @@ rule fiber_locations:
MAX=$(cat {input.maximum})
bedtools intersect -header -sorted -v -f 0.2 \
-a {output.bed} \
- -b <(zcat {input.bg} | awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX') \
+ -b <(bgzip -cd {input.bg} | awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX') \
| bgzip -@ {threads} \
> {output.filtered}
tabix -f -p bed {output.filtered}
@@ -158,7 +158,7 @@ rule unreliable_coverage_regions:
"""
MIN=$(cat {input.minimum})
MAX=$(cat {input.maximum})
- zcat {input.bg} \
+ bgzip -cd {input.bg} \
| awk '$4>0' \
| awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX' \
| bedtools merge -i - \
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 6bb77d1a9..ff9b6cf97 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -35,7 +35,7 @@ rule decorate_fibers_1:
),
fai=ancient(FAI),
output:
- bed="results/{sm}/fiber-calls/fire-fibers.bed.gz",
+ bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"),
bb="results/{sm}/trackHub/bb/fire-fibers.bb",
benchmark:
"results/{sm}/benchmarks/decorate_fibers_1/{sm}.txt"
@@ -52,11 +52,12 @@ rule decorate_fibers_1:
shell:
"""
cat {input.bed} > {output.bed}
-
bedToBigBed \
-allow1bpOverlap -type=bed12+ -as={params.bed_as} \
{output.bed} {input.fai} {output.bb}
"""
+
+
# bigtools version
"""
bgzip -cd -@ {threads} {output.bed} \
@@ -99,6 +100,8 @@ rule decorate_fibers_2:
-allow1bpOverlap -type=bed12+ -as={params.dec_as} \
{output.bed} {input.fai} {output.bb}
"""
+
+
# bigtools version
"""
cat {input.decorated} \
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index ad14bc45c..9cd433871 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -32,7 +32,7 @@ rule fires_in_peaks:
peaks=rules.fdr_peaks_by_fire_elements.output.bed,
output:
tmp=temp("temp/{sm}/tmp.FIREs-in-peaks.bed"),
- txt="results/{sm}/tables/FIREs-in-peaks.txt",
+ txt="results/{sm}/FDR-peaks/FIREs-in-peaks.txt",
threads: 8
conda:
DEFAULT_ENV
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 7d86663c5..47daf6d77 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -5,8 +5,6 @@ rule percent_accessible:
output:
tmp=temp("temp/{sm}/{hp}/percent.accessible.bed"),
bw="results/{sm}/trackHub/bw/{hp}.percent.accessible.bw",
- bed="results/{sm}/{hp}/percent.accessible.bed.gz",
- tbi="results/{sm}/{hp}/percent.accessible.bed.gz.tbi",
threads: 4
conda:
DEFAULT_ENV
@@ -18,7 +16,7 @@ rule percent_accessible:
chrom=get_chroms()[0],
shell:
"""
- zcat {input.bed} \
+ bgzip -cd {input.bed} \
| hck -f 1-3 {params.cols} \
| grep -v "^#" \
| awk -v OFS='\t' '$5 > 0 {{print $1,$2,$3,$4*100/$5}}' \
@@ -36,15 +34,12 @@ rule percent_accessible:
bigtools bedgraphtobigwig \
--nzooms {params.nzooms} -s start \
{output.tmp} {input.fai} {output.bw}
-
- bgzip -@{threads} -c {output.tmp} > {output.bed}
- tabix -p bed {output.bed}
"""
rule element_coverages_bw:
input:
- bed=rules.element_coverages.output.bed,
+ bed=rules.pileup.output.bed,
fai=ancient(FAI),
output:
bw="results/{sm}/trackHub/bw/{hp}.{el_type}.coverage.bw",
@@ -52,10 +47,11 @@ rule element_coverages_bw:
DEFAULT_ENV
params:
nzooms=NZOOMS,
+ cut_cmd=pileup_cut_cmd,
shell:
"""
- zcat {input.bed} \
- | hck -f 1-3 -F {wildcards.el_type} \
+ bgzip -cd {input.bed} \
+ | {params.cut_cmd} \
| grep -v "^#" \
| bigtools bedgraphtobigwig \
-s start --nzooms {params.nzooms} \
@@ -97,7 +93,7 @@ rule fdr_peaks_by_fire_elements_to_bb:
bedfmt=workflow.source_path("../templates/fire_peak.as"),
shell:
"""
- zcat {input.bed} \
+ bgzip -cd {input.bed} \
| bioawk -tc hdr '{{print $1,$2,$3,"peak-"NR,int($score*10),".",$score,"-1",$log_FDR,int($start/2+$end/2)-$peak_start}}' \
| bioawk -tc hdr '$5<=1000' \
| rg -v '^#' \
From 95ea662f92c996b7d10f163745032b69eeb27342 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 13 Sep 2024 15:22:29 -0700
Subject: [PATCH 044/145] drop qual from cram to half the size of file
---
workflow/Snakefile | 14 +++++++++-----
workflow/rules/apply-model.smk | 12 +++++++-----
workflow/rules/stats.smk | 2 +-
3 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index f173d403c..9cd7096ca 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -99,16 +99,16 @@ rule all:
expand(rules.coverage.output, sm=MANIFEST.index),
expand(rules.exclude_from_shuffle.output, sm=MANIFEST.index),
expand(rules.unreliable_coverage_regions.output, sm=MANIFEST.index),
+ expand(
+ rules.pileup.output.bed,
+ sm=MANIFEST.index,
+ ),
# model results
+ expand(rules.merged_fire_bam.output.cram, sm=MANIFEST.index),
expand(rules.fire_sites.output, sm=MANIFEST.index),
# fiber locations
expand(rules.fiber_locations.output, sm=MANIFEST.index),
expand(rules.filtered_and_shuffled_fiber_locations.output, sm=MANIFEST.index),
- # coverage of elements
- expand(
- rules.pileup.output.bed,
- sm=MANIFEST.index,
- ),
# Stats and Tables
expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
expand(rules.ft_qc.output.tbl, sm=MANIFEST.index),
@@ -118,6 +118,10 @@ rule all:
expand(rules.wide_fdr_peaks.output.bed, sm=MANIFEST.index),
expand(rules.one_percent_fdr_peaks.output.bed, sm=MANIFEST.index),
expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index),
+ # haplotype differences
+ expand(rules.hap_differences.output.fig1, sm=MANIFEST.index),
+ expand(rules.hap_differences.output.fig2, sm=MANIFEST.index),
+ expand(rules.hap_differences.output.bed, sm=MANIFEST.index),
# trackhub
expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
expand(rules.fdr_peaks_by_fire_elements_to_bb.output.bb, sm=MANIFEST.index),
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 29d1c2edc..3b5445706 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -46,12 +46,14 @@ rule merged_fire_bam:
shell:
"""
samtools merge -@ {threads} -u {input.bams} -o - \
- | samtools view \
- -C -@ {threads} \
- -T {input.ref} \
+ | samtools view -C -@ {threads} -T {input.ref} \
--output-fmt-option embed_ref=1 \
- --write-index \
- -o {output.cram}
+ | samtools view -C -@ {threads} -T {input.ref} \
+ --output-fmt-option embed_ref=1 \
+ --input-fmt-option required_fields=0x1bff \
+ --write-index -o {output.cram}
+ # the second samtools view of CRAM file is needed to drop the quality scores
+ # this halves the size of the CRAM file
"""
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index 9cd433871..ddfebe2e3 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -77,7 +77,7 @@ rule hap_differences:
category="Haplotype selectivity",
),
bed="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed",
- bed9="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9",
+ bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9"),
threads: 8
conda:
"../envs/R.yaml"
From 5b4aeee6377466a3cd74afbbf6e73de5abd4ec79 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 13 Sep 2024 15:57:41 -0700
Subject: [PATCH 045/145] add sup filter by default, used to be within ft
---
workflow/rules/apply-model.smk | 3 ++-
workflow/rules/coverages.smk | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 3b5445706..d83ad5b38 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -13,11 +13,12 @@ rule fire:
min_msp=config.get("min_msp", 10),
min_ave_msp_size=config.get("min_ave_msp_size", 10),
use_ont=USE_ONT,
+ flag=config.get("samtools-filter-flag", "2308"),
conda:
DEFAULT_ENV
shell:
"""
- samtools view -u -@ {threads} {input.bam} {wildcards.chrom} \
+ samtools view -F {params.flag} -u -@ {threads} {input.bam} {wildcards.chrom} \
| {FT_EXE} fire -t {threads} \
{params.use_ont} \
--min-msp {params.min_msp} \
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index aa2835874..d3c4661ea 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -62,10 +62,12 @@ rule fiber_locations_chromosome:
threads: 8
conda:
DEFAULT_ENV
+ params:
+ flag=config.get("samtools-filter-flag", "2308"),
shell:
"""
# get fiber locations
- (samtools view -@ {threads} -F 2308 -u {input.cram} {wildcards.chrom} \
+ (samtools view -@ {threads} -F {params.flag} -u {input.cram} {wildcards.chrom} \
| {FT_EXE} extract -t {threads} -s --all - \
| hck -F '#ct' -F st -F en -F fiber -F strand -F HP ) \
| (grep -v "^#" || true) \
From 13830a092995fc77fcd2fd2f76ffb8734d3ca770 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 13 Sep 2024 19:46:52 -0700
Subject: [PATCH 046/145] add sup filter by default, used to be within ft
---
workflow/rules/common.smk | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk
index 5a31b8ac0..147b4f06f 100644
--- a/workflow/rules/common.smk
+++ b/workflow/rules/common.smk
@@ -148,11 +148,11 @@ def pileup_cut_cmd(wc):
else:
raise ValueError(f"Unknown haplotype {wc.hp}")
if wc.el_type == "nucleosome":
- col = f"nuc_coverage{tail}"
+ col = f"$nuc_coverage{tail}"
elif wc.el_type == "linker":
- col = f"msp_coverage{tail}-fire_coverage{tail}"
+ col = f"$msp_coverage{tail}-$fire_coverage{tail}"
elif wc.el_type == "fire":
- col = f"fire_coverage{tail}"
+ col = f"$fire_coverage{tail}"
else:
raise ValueError(f"Unknown element type {wc.el_type}")
return f"bioawk -tc hdr '{{print $1,$2,$3,{col}}}'"
From 1ec93ccdd1465229054441e76956dffd75ba623d Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 20 Sep 2024 14:22:50 -0700
Subject: [PATCH 047/145] Major refactor to prepare for DSA
---
workflow/Snakefile | 40 +-
workflow/envs/python.yaml | 2 +-
workflow/profiles/default/config.yaml | 2 +-
workflow/rules/FDR-peaks.smk | 364 -------------
workflow/rules/apply-model.smk | 48 +-
workflow/rules/coverages.smk | 14 +-
workflow/rules/stats.smk | 10 +-
workflow/rules/track-hub.smk | 10 +-
workflow/scripts/decorated-bed12.py | 163 ------
workflow/scripts/fdr-table.py | 263 ++++++++++
workflow/scripts/fire-null-distribution.py | 565 ---------------------
workflow/scripts/merge_fire_peaks.py | 4 +-
workflow/scripts/percent-in-clusters.sh | 8 +-
workflow/scripts/trackhub.py | 13 +-
14 files changed, 334 insertions(+), 1172 deletions(-)
delete mode 100644 workflow/rules/FDR-peaks.smk
delete mode 100755 workflow/scripts/decorated-bed12.py
create mode 100644 workflow/scripts/fdr-table.py
delete mode 100755 workflow/scripts/fire-null-distribution.py
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 9cd7096ca..82b296f1a 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -18,6 +18,10 @@ conda: "envs/runner.yaml"
include: "rules/common.smk"
+# thread options
+MAX_THREADS = config.get("max_threads", 4)
+SORT_THREADS = config.get("sort_threads", 8)
+
# reference genome and reference regions
REF = get_ref()
FAI = get_fai()
@@ -44,6 +48,9 @@ else:
MAX_PEAK_FDR = 1.0
MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0)
+# data filtering
+FILTER_FLAG = config.get("samtools-filter-flag", "260") # 2308
+
# Misc options
NZOOMS = config.get("nzooms", 10)
@@ -53,16 +60,23 @@ not_unk = ["all", "hap1", "hap2"]
types = ["fdr", "acc", "link", "nuc"]
types_to_col = {"fdr": 4, "acc": 5, "link": 6, "nuc": 7}
bw_types = ["log_FDR"] # "score", "FDR",
-bw_types = bw_types + [f"{t}_H1" for t in bw_types] + [f"{t}_H2" for t in bw_types]
el_types = ["fire", "linker", "nucleosome"]
+
+# DSA options
+DSA_CHAIN = config.get("chain", None)
+DSA = DSA_CHAIN is not None
+LEVIO_EXE = config.get("levio_exe", "leviosam2")
+
# developer options
FT_EXE = config.get("ft_exe", "ft")
+if FT_EXE is not "ft":
+ print(f"INFO: Using FT_EXE: {FT_EXE}", file=sys.stderr)
ONT = config.get("ont", False)
USE_ONT = ""
if ONT:
- ont_ml = config.get("ont_ml", None)
- if ont_ml is not None:
+ ont_ml = config.get("ont_ml", 0)
+ if ont_ml != 0:
USE_ONT = f" --ont --ml {ont_ml} "
else:
USE_ONT = " --ont "
@@ -71,12 +85,17 @@ MIN_UNRELIABLE_COVERAGE_LEN = config.get("min_unreliable_coverage_len", 50)
include: "rules/apply-model.smk"
include: "rules/coverages.smk"
-include: "rules/FDR-peaks.smk"
+include: "rules/fire-peaks.smk"
include: "rules/stats.smk"
include: "rules/decorated-reads.smk"
include: "rules/track-hub.smk"
+if DSA:
+
+ include: "rules/levio.smk"
+
+
wildcard_constraints:
chrom="|".join(get_chroms()),
call="|".join(["msp", "m6a"]),
@@ -106,17 +125,14 @@ rule all:
# model results
expand(rules.merged_fire_bam.output.cram, sm=MANIFEST.index),
expand(rules.fire_sites.output, sm=MANIFEST.index),
- # fiber locations
- expand(rules.fiber_locations.output, sm=MANIFEST.index),
- expand(rules.filtered_and_shuffled_fiber_locations.output, sm=MANIFEST.index),
# Stats and Tables
expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
expand(rules.ft_qc.output.tbl, sm=MANIFEST.index),
# FDR results
- expand(rules.fdr_track.output.bed, sm=MANIFEST.index),
- expand(rules.fdr_peaks_by_fire_elements.output.bed, sm=MANIFEST.index),
- expand(rules.wide_fdr_peaks.output.bed, sm=MANIFEST.index),
- expand(rules.one_percent_fdr_peaks.output.bed, sm=MANIFEST.index),
+ expand(rules.pileup.output.bed, sm=MANIFEST.index),
+ expand(rules.fire_peaks.output.bed, sm=MANIFEST.index),
+ expand(rules.wide_fire_peaks.output.bed, sm=MANIFEST.index),
+ expand(rules.one_percent_fire_peaks.output.bed, sm=MANIFEST.index),
expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index),
# haplotype differences
expand(rules.hap_differences.output.fig1, sm=MANIFEST.index),
@@ -124,7 +140,7 @@ rule all:
expand(rules.hap_differences.output.bed, sm=MANIFEST.index),
# trackhub
expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
- expand(rules.fdr_peaks_by_fire_elements_to_bb.output.bb, sm=MANIFEST.index),
+ expand(rules.fire_peaks_bb.output.bb, sm=MANIFEST.index),
expand(rules.percent_accessible.output.bw, hp=not_unk, sm=MANIFEST.index),
expand(rules.decorate_fibers_1.output.bb, sm=MANIFEST.index),
expand(rules.decorate_fibers_2.output.bb, sm=MANIFEST.index),
diff --git a/workflow/envs/python.yaml b/workflow/envs/python.yaml
index 8d338cbca..792dedd26 100644
--- a/workflow/envs/python.yaml
+++ b/workflow/envs/python.yaml
@@ -14,4 +14,4 @@ dependencies:
- htslib==1.19.1
- pip
- pip:
- - polars[pyarrow]==0.19
+ - polars-lts-cpu[pyarrow]==1.7.1
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index afc4b5a3a..6773ddd28 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -1,7 +1,7 @@
rerun-incomplete: True
show-failed-logs: True
rerun-triggers: mtime
-restart-times: 1
+restart-times: 0
software-deployment-method:
- apptainer
- conda
diff --git a/workflow/rules/FDR-peaks.smk b/workflow/rules/FDR-peaks.smk
deleted file mode 100644
index 929b3f1bc..000000000
--- a/workflow/rules/FDR-peaks.smk
+++ /dev/null
@@ -1,364 +0,0 @@
-rule filtered_and_shuffled_fiber_locations_chromosome:
- input:
- filtered=rules.fiber_locations.output.filtered,
- exclude=rules.exclude_from_shuffle.output.bed,
- fai=ancient(FAI),
- output:
- shuffled=temp("temp/{sm}/coverage/{chrom}.fiber-locations-shuffled.bed.gz"),
- threads: 4
- conda:
- DEFAULT_ENV
- shell:
- """
- tabix -h {input.filtered} {wildcards.chrom} \
- | bedtools shuffle -chrom -seed 42 \
- -excl {input.exclude} \
- -i - \
- -g {input.fai} \
- | sort -k1,1 -k2,2n -k3,3n -k4,4 \
- | bgzip -@ {threads} \
- > {output.shuffled}
- """
-
-
-rule filtered_and_shuffled_fiber_locations:
- input:
- shuffled=expand(
- rules.filtered_and_shuffled_fiber_locations_chromosome.output.shuffled,
- chrom=get_chroms(),
- allow_missing=True,
- ),
- output:
- shuffled="results/{sm}/coverage/filtered-for-coverage/fiber-locations-shuffled.bed.gz",
- threads: 1
- conda:
- DEFAULT_ENV
- shell:
- """
- cat {input.shuffled} > {output.shuffled}
- """
-
-
-#
-# FIRE sites and FDR tracks
-#
-rule fdr_table:
- input:
- fire=rules.fire_sites.output.bed,
- fiber_locations=rules.fiber_locations.output.filtered,
- shuffled=rules.filtered_and_shuffled_fiber_locations.output.shuffled,
- fai=ancient(FAI),
- output:
- tbl="results/{sm}/FDR-peaks/FIRE.score.to.FDR.tbl",
- benchmark:
- "results/{sm}/benchmarks/fdr_table/{sm}.txt"
- threads: 8
- conda:
- "../envs/python.yaml"
- params:
- script=workflow.source_path("../scripts/fire-null-distribution.py"),
- resources:
- mem_mb=get_mem_mb,
- shell:
- """
- python {params.script} -v 1 {input.fire} {input.fiber_locations} {input.fai} -s {input.shuffled} -o {output.tbl}
- """
-
-
-rule fdr_track_chromosome:
- input:
- fire=rules.fire_sites.output.bed,
- fire_tbi=rules.fire_sites_index.output.tbi,
- fiber_locations=rules.fiber_locations.output.bed,
- fai=ancient(FAI),
- fdr_tbl=rules.fdr_table.output.tbl,
- output:
- fire=temp("temp/{sm}/FDR-peaks/{chrom}-fire.bed"),
- fiber=temp("temp/{sm}/FDR-peaks/{chrom}-fiber.bed"),
- bed=temp("temp/{sm}/FDR-peaks/{chrom}-FDR.track.bed"),
- threads: 8
- conda:
- "../envs/python.yaml"
- params:
- script=workflow.source_path("../scripts/fire-null-distribution.py"),
- resources:
- mem_mb=get_mem_mb_xl,
- shell:
- """
- tabix -h {input.fire} {wildcards.chrom} > {output.fire}
- tabix -h {input.fiber_locations} {wildcards.chrom} > {output.fiber}
-
- # check if file is empty
- if [ ! -s {output.fire} ]; then
- echo "No FIRE sites for {wildcards.chrom}"
- touch {output}
- exit 0
- elif [ ! -s {output.fiber} ]; then
- echo "No unfiltered fibers for {wildcards.chrom}"
- touch {output}
- exit 0
- fi
-
- python {params.script} -v 1 \
- {output.fire} {output.fiber} \
- {input.fai} -f {input.fdr_tbl} \
- -o {output.bed}
- """
-
-
-rule fdr_track:
- input:
- beds=expand(
- rules.fdr_track_chromosome.output.bed,
- chrom=get_chroms(),
- allow_missing=True,
- ),
- output:
- fofn=temp("temp/{sm}/FDR-peaks/FDR.track.fofn"),
- bed="results/{sm}/FDR-peaks/FDR.track.bed.gz",
- tbi="results/{sm}/FDR-peaks/FDR.track.bed.gz.tbi",
- threads: 8
- conda:
- DEFAULT_ENV
- shell:
- """
- printf '\nMaking FOFN\n'
- echo {input.beds} > {output.fofn}
-
- printf '\nMake header\n'
- ((cat $(cat {output.fofn}) | grep "^#" | head -n 1) || true) \
- | bgzip -@ {threads} \
- > {output.bed}
-
- printf '\nConcatenating\n'
- cat $(cat {output.fofn}) \
- | grep -v "^#" \
- | bgzip -@ {threads} \
- >> {output.bed}
-
- printf '\nIndexing\n'
- tabix -f -p bed {output.bed}
- """
-
-
-rule fdr_track_filtered:
- input:
- bed=rules.fdr_track.output.bed,
- minimum=rules.coverage.output.minimum,
- maximum=rules.coverage.output.maximum,
- output:
- bed="results/{sm}/FDR-peaks/FDR.track.coverage.filtered.bed.gz",
- tbi="results/{sm}/FDR-peaks/FDR.track.coverage.filtered.bed.gz.tbi",
- threads: 8
- conda:
- DEFAULT_ENV
- shell:
- """
- MIN=$(cat {input.minimum})
- MAX=$(cat {input.maximum})
- ( \
- bgzip -cd {input.bed} | head -n 1 || true; \
- bgzip -cd {input.bed} | bioawk -tc hdr -v MAX=$MAX -v MIN=$MIN '$coverage > MIN && $coverage < MAX' \
- ) \
- | bgzip -@ {threads} \
- > {output.bed}
- tabix -f -p bed {output.bed}
- """
-
-
-rule helper_fdr_peaks_by_fire_elements:
- input:
- bed=rules.fdr_track.output.bed,
- tbi=rules.fdr_track.output.tbi,
- fire=rules.fire_sites.output.bed,
- fire_tbi=rules.fire_sites_index.output.tbi,
- output:
- bed=temp("temp/{sm}/FDR-peaks/{chrom}-FDR-FIRE-peaks.bed.gz"),
- threads: 2
- conda:
- DEFAULT_ENV
- params:
- max_peak_fdr=MAX_PEAK_FDR,
- min_per_acc_peak=MIN_PER_ACC_PEAK,
- shell:
- """
- HEADER=$(bgzip -cd {input.bed} | head -n 1 || true)
- NC=$(echo $HEADER | awk '{{print NF}}' || true)
- FIRE_CT=$((NC+1))
- FIRE_ST=$((NC+2))
- FIRE_EN=$((NC+3))
- FIRE_SIZE=$((NC+4))
- FIRE_ID=$((NC+5))
-
- OUT_HEADER=$(printf "$HEADER\\tpeak_chrom\\tpeak_start\\tpeak_end\\tFIRE_IDs\\tFIRE_size_mean\\tFIRE_size_ssd\\tFIRE_start_ssd\\tFIRE_end_ssd")
- echo $OUT_HEADER
-
- ( \
- printf "$OUT_HEADER\\n"; \
- tabix -h {input.bed} {wildcards.chrom} \
- | rg -w "#chrom|True" \
- | csvtk filter -tT -C '$' -f "FDR<={params.max_peak_fdr}" \
- | csvtk filter -tT -C '$' -f "fire_coverage>1" \
- | bioawk -tc hdr 'NR==1 || ($fire_coverage/$coverage>={params.min_per_acc_peak})' \
- | bedtools intersect -wa -wb -sorted -a - \
- -b <(tabix {input.fire} {wildcards.chrom} \
- | cut -f 1-3 \
- | awk -v OFMT="%f" '{{print $0"\t"$3-$2"\t"NR}}' \
- ) \
- | bedtools groupby -g 1-$NC \
- -o first,median,median,collapse,mean,sstdev,sstdev,sstdev \
- -c $FIRE_CT,$FIRE_ST,$FIRE_EN,$FIRE_ID,$FIRE_SIZE,$FIRE_SIZE,$FIRE_ST,$FIRE_EN \
- ) \
- | hck -f 1,$FIRE_ST,$FIRE_EN,2-$NC,$FIRE_SIZE- \
- | csvtk round -tT -C '$' -n 0 -f 2,3 \
- | bedtools sort -header -i - \
- | bgzip -@ {threads} \
- > {output.bed}
- """
-
-
-rule fdr_peaks_by_fire_elements_chromosome:
- input:
- bed=rules.helper_fdr_peaks_by_fire_elements.output.bed,
- minimum=rules.coverage.output.minimum,
- maximum=rules.coverage.output.maximum,
- output:
- bed=temp("temp/{sm}/FDR-peaks/grouped-{chrom}-FDR-FIRE-peaks.bed.gz"),
- threads: 8
- conda:
- "../envs/python.yaml"
- params:
- script=workflow.source_path("../scripts/merge_fire_peaks.py"),
- min_frac_accessible=MIN_FRAC_ACCESSIBLE,
- shell:
- """
- bgzip -cd {input.bed} \
- | python {params.script} -v 1 \
- --max-cov $(cat {input.maximum}) \
- --min-cov $(cat {input.minimum}) \
- --min-frac-accessible {params.min_frac_accessible} \
- | bgzip -@ {threads} \
- > {output.bed}
- """
-
-
-rule fdr_peaks_by_fire_elements:
- input:
- beds=expand(
- rules.fdr_peaks_by_fire_elements_chromosome.output.bed,
- chrom=get_chroms(),
- allow_missing=True,
- ),
- output:
- fofn=temp("temp/{sm}/FDR-peaks/FDR-FIRE-peaks.fofn"),
- bed="results/{sm}/FDR-peaks/FDR-FIRE-peaks.bed.gz",
- tbi="results/{sm}/FDR-peaks/FDR-FIRE-peaks.bed.gz.tbi",
- threads: 8
- conda:
- DEFAULT_ENV
- shell:
- """
- printf "\nMaking FOFN\n"
- echo {input.beds} > {output.fofn}
-
- printf "\nMaking header\n"
- ((cat $(cat {output.fofn}) | bgzip -cd | grep "^#" | head -n 1) || true) \
- | bgzip -@ {threads} > {output.bed}
-
- printf "\nConcatenating\n"
- cat $(cat {output.fofn}) | bgzip -cd -@ {threads} | grep -v "^#" \
- | bgzip -@ {threads} >> {output.bed}
-
- printf "\nIndexing\n"
- tabix -f -p bed {output.bed}
- """
-
-
-rule wide_fdr_peaks:
- input:
- bed=rules.fdr_peaks_by_fire_elements.output.bed,
- track=rules.fdr_track.output.bed,
- fai=ancient(FAI),
- output:
- bed="results/{sm}/FDR-peaks/FDR-wide-peaks.bed.gz",
- tbi="results/{sm}/FDR-peaks/FDR-wide-peaks.bed.gz.tbi",
- bb="results/{sm}/trackHub/bb/FDR-wide-peaks.bb",
- conda:
- DEFAULT_ENV
- threads: 4
- params:
- nuc_size=config.get("nucleosome_size", 147),
- max_peak_fdr=MAX_PEAK_FDR,
- min_frac_acc=max(MIN_FRAC_ACCESSIBLE, MIN_PER_ACC_PEAK),
- bed3_as=workflow.source_path("../templates/bed3.as"),
- shell:
- """
- ( \
- bgzip -cd {input.bed}; \
- bioawk -tc hdr 'NR==1 || $FDR<={params.max_peak_fdr}' {input.track} \
- | bioawk -tc hdr 'NR==1 || $coverage>0' \
- | bioawk -tc hdr 'NR==1 || ($fire_coverage/$coverage>={params.min_frac_acc})' \
- ) \
- | cut -f 1-3 \
- | bedtools sort \
- | bedtools merge -d {params.nuc_size} \
- | bgzip -@ {threads} \
- > {output.bed}
-
- bgzip -cd -@ 16 {output.bed} \
- | bigtools bedtobigbed \
- -s start -a {params.bed3_as} \
- - {input.fai} {output.bb}
-
- tabix -p bed {output.bed}
- """
-
-
-rule one_percent_fdr_peaks:
- input:
- bed=rules.fdr_peaks_by_fire_elements.output.bed,
- track=rules.fdr_track.output.bed,
- output:
- bed="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-peaks.bed.gz",
- tbi="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-peaks.bed.gz.tbi",
- wide="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-wide-peaks.bed.gz",
- wide_tbi="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-wide-peaks.bed.gz.tbi",
- threads: 4
- conda:
- DEFAULT_ENV
- params:
- nuc_size=config.get("nucleosome_size", 147),
- shell:
- """
- bgzip -cd {input.bed} \
- | csvtk filter -tT -C '$' -f "FDR<=0.01" \
- | bgzip -@ {threads} \
- > {output.bed}
- tabix -f -p bed {output.bed}
-
- ( \
- bgzip -cd {output.bed}; \
- bioawk -tc hdr '$FDR<=0.01' {input.track} \
- ) \
- | cut -f 1-3 \
- | bedtools sort \
- | bedtools merge -d {params.nuc_size} \
- | bgzip -@ {threads} \
- > {output.wide}
- tabix -f -p bed {output.wide}
- """
-
-
-rule peaks_vs_percent:
- input:
- bed=rules.fdr_peaks_by_fire_elements.output.bed,
- output:
- fig1=report(
- "results/{sm}/FDR-peaks/{sm}.peaks-vs-percent.pdf",
- category="Peak calls",
- ),
- threads: 8
- conda:
- "../envs/R.yaml"
- script:
- "../scripts/peaks-vs-percent.R"
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index d83ad5b38..a84067c7d 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -13,7 +13,7 @@ rule fire:
min_msp=config.get("min_msp", 10),
min_ave_msp_size=config.get("min_ave_msp_size", 10),
use_ont=USE_ONT,
- flag=config.get("samtools-filter-flag", "2308"),
+ flag=FILTER_FLAG,
conda:
DEFAULT_ENV
shell:
@@ -34,8 +34,8 @@ rule merged_fire_bam:
fai=ancient(FAI),
bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True),
output:
- cram="results/{sm}/fire/{sm}.fire.cram",
- crai="results/{sm}/fire/{sm}.fire.cram.crai",
+ cram="results/{sm}/{sm}.fire.cram",
+ crai="results/{sm}/{sm}.fire.cram.crai",
threads: 16
resources:
mem_mb=16 * 1024,
@@ -60,7 +60,7 @@ rule merged_fire_bam:
rule fire_sites_chrom:
input:
- bam=rules.fire.output.bam,
+ cram=rules.merged_fire_bam.output.cram,
output:
bed=temp("temp/{sm}/chrom/{chrom}.sorted.bed.gz"),
threads: 4
@@ -72,13 +72,14 @@ rule fire_sites_chrom:
min_fdr=MIN_FIRE_FDR,
shell:
"""
- {FT_EXE} fire -t {threads} --extract {input.bam} \
- | LC_ALL=C sort --parallel={threads} \
- -k1,1 -k2,2n -k3,3n -k4,4 \
- | bioawk -tc hdr '$10<={params.min_fdr}' \
- | (grep '\\S' || true) \
- | (grep -v '^#' || true) \
- | bgzip -@ {threads} \
+ samtools view -@ {threads} -u {input.cram} {wildcards.chrom} \
+ | {FT_EXE} fire -t {threads} --extract - \
+ | LC_ALL=C sort --parallel={threads} \
+ -k1,1 -k2,2n -k3,3n -k4,4 \
+ | bioawk -tc hdr '$10<={params.min_fdr}' \
+ | (grep '\\S' || true) \
+ | (grep -v '^#' || true) \
+ | bgzip -@ {threads} \
> {output.bed}
"""
@@ -89,7 +90,7 @@ rule fire_sites:
rules.fire_sites_chrom.output.bed, chrom=get_chroms(), allow_missing=True
),
output:
- bed="results/{sm}/fire/FIRE.bed.gz",
+ bed="results/{sm}/{sm}-fire-elements.bed.gz",
threads: 8
conda:
DEFAULT_ENV
@@ -111,26 +112,3 @@ rule fire_sites_index:
"""
tabix -p bed {input.bed}
"""
-
-
-# Colnames made by this
-# #chrom start end
-# coverage fire_coverage score nuc_coverage msp_coverage
-# coverage_H1 fire_coverage_H1 score_H1 nuc_coverage_H1 msp_coverage_H1
-# coverage_H2 fire_coverage_H2 score_H2 nuc_coverage_H2 msp_coverage_H2
-rule pileup:
- input:
- bam=rules.merged_fire_bam.output.cram,
- output:
- bed="results/{sm}/coverage/{sm}.pileup.bed.gz",
- tbi="results/{sm}/coverage/{sm}.pileup.bed.gz.tbi",
- threads: 12
- conda:
- DEFAULT_ENV
- shell:
- """
- ft pileup --haps -t {threads} {input.bam} \
- | bgzip -@ {threads} \
- > {output.bed}
- tabix -p bed {output.bed}
- """
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index d3c4661ea..52fac4c05 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -62,12 +62,10 @@ rule fiber_locations_chromosome:
threads: 8
conda:
DEFAULT_ENV
- params:
- flag=config.get("samtools-filter-flag", "2308"),
shell:
"""
# get fiber locations
- (samtools view -@ {threads} -F {params.flag} -u {input.cram} {wildcards.chrom} \
+ (samtools view -@ {threads} -u {input.cram} {wildcards.chrom} \
| {FT_EXE} extract -t {threads} -s --all - \
| hck -F '#ct' -F st -F en -F fiber -F strand -F HP ) \
| (grep -v "^#" || true) \
@@ -87,10 +85,12 @@ rule fiber_locations:
minimum=rules.coverage.output.minimum,
maximum=rules.coverage.output.maximum,
output:
- bed="results/{sm}/coverage/fiber-locations.bed.gz",
- bed_tbi="results/{sm}/coverage/fiber-locations.bed.gz.tbi",
- filtered="results/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz",
- filtered_tbi="results/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz.tbi",
+ bed=temp("temp/{sm}/coverage/fiber-locations.bed.gz"),
+ bed_tbi=temp("temp/{sm}/coverage/fiber-locations.bed.gz.tbi"),
+ filtered=temp("temp/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz"),
+ filtered_tbi=temp(
+ "temp/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz.tbi"
+ ),
threads: 4
conda:
DEFAULT_ENV
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index ddfebe2e3..6fda2d7d9 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -29,10 +29,10 @@ rule fires_in_peaks:
input:
fire=rules.fire_sites.output.bed,
exclude=rules.unreliable_coverage_regions.output.bed,
- peaks=rules.fdr_peaks_by_fire_elements.output.bed,
+ peaks=rules.fire_peaks.output.bed,
output:
tmp=temp("temp/{sm}/tmp.FIREs-in-peaks.bed"),
- txt="results/{sm}/FDR-peaks/FIREs-in-peaks.txt",
+ txt="results/{sm}/fire-peaks/fires-in-peaks.txt",
threads: 8
conda:
DEFAULT_ENV
@@ -54,7 +54,7 @@ rule ft_qc:
input:
cram=rules.merged_fire_bam.output.cram,
output:
- tbl="results/{sm}/fire/{sm}.fire.qc.tbl.gz",
+ tbl="results/{sm}/{sm}.fire.qc.tbl.gz",
conda:
DEFAULT_ENV
threads: 16
@@ -66,7 +66,7 @@ rule ft_qc:
rule hap_differences:
input:
- bed=rules.fdr_peaks_by_fire_elements.output.bed,
+ bed=rules.fire_peaks.output.bed,
output:
fig1=report(
"results/{sm}/hap1-vs-hap2/hap1-vs-hap2.pdf",
@@ -76,7 +76,7 @@ rule hap_differences:
"results/{sm}/hap1-vs-hap2/hap1-vs-hap2-volcano.pdf",
category="Haplotype selectivity",
),
- bed="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed",
+ bed="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed.gz",
bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9"),
threads: 8
conda:
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 47daf6d77..028846dcb 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -1,6 +1,6 @@
rule percent_accessible:
input:
- bed=rules.fdr_track.output.bed,
+ bed=rules.pileup.output.bed,
fai=ancient(FAI),
output:
tmp=temp("temp/{sm}/{hp}/percent.accessible.bed"),
@@ -61,7 +61,7 @@ rule element_coverages_bw:
rule fdr_track_to_bw:
input:
- bed=rules.fdr_track.output.bed,
+ bed=rules.pileup.output.bed,
fai=ancient(FAI),
output:
bw="results/{sm}/trackHub/bw/{col}.bw",
@@ -80,12 +80,12 @@ rule fdr_track_to_bw:
"""
-rule fdr_peaks_by_fire_elements_to_bb:
+rule fire_peaks_bb:
input:
- bed=rules.fdr_peaks_by_fire_elements.output.bed,
+ bed=rules.fire_peaks.output.bed,
fai=ancient(FAI),
output:
- bb="results/{sm}/trackHub/bb/FDR-FIRE-peaks.bb",
+ bb="results/{sm}/trackHub/bb/fire-peaks.bb",
threads: 4
conda:
DEFAULT_ENV
diff --git a/workflow/scripts/decorated-bed12.py b/workflow/scripts/decorated-bed12.py
deleted file mode 100755
index 59669c6e5..000000000
--- a/workflow/scripts/decorated-bed12.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env python
-import defopt
-import sys
-import gc
-import logging
-from pathlib import Path
-from typing import Optional
-import pandas as pd
-import polars as pl
-import numpy as np
-from numba import njit
-import io
-
-# from pyinstrument import Profiler
-
-
-def chunker(seq, size):
- return (seq[pos : pos + size] for pos in range(0, len(seq), size))
-
-
-def make_decorator(ct, fiber, score, strand, color, el_type, hp, st, en, starts, ends):
- start = starts[0]
- end = ends[-1]
- lengths = ",".join(map(str, ends - starts))
- offsets = ",".join(map(str, starts - start))
- block_count = len(starts)
- # chr1 12 9985 block 1000 + 12 9985 200,0,150
- # 382, 1 , 1
- # chr1:1-10000:LongRead
- # block 255,0,0,180 Ignored TypeA
- # 1 is transparent
- prime_color = "200,200,200,1"
- return (
- # bed9
- f"{ct}\t{start}\t{end}\t{el_type}\t{score}\t{strand}\t{start}\t{end}\t{prime_color}\t"
- # bed12
- f"{block_count}\t{lengths}\t{offsets}\t"
- # read tag for the decorator
- f"{ct}:{st}-{en}:{fiber}\t"
- # decorator
- f"block\t{color},0\tIgnored\t{el_type}"
- )
-
-
-def subgroup(df, ct, fiber, strand, hp):
- st = df["st"].min()
- en = df["en"].max()
- # tmp = df.filter(pl.col("color") != "230,230,230")
- # linker = df.filter(pl.col("color") == "147,112,219")
- # fire = df.filter(pl.col("color") == "255,0,0")
- # for el_type, tdf in zip(["Linker", "FIRE"], [linker, fire]):
- for (color, score), gdf in df.group_by(["color", "score"]):
- if gdf.shape[0] == 0 or color == "230,230,230":
- continue
- elif color == "147,112,219":
- el_type = "Linker"
- else:
- el_type = "FIRE"
- decorator = make_decorator(
- ct,
- fiber,
- score,
- strand,
- color,
- el_type,
- hp,
- st,
- en,
- gdf["st"],
- gdf["en"],
- )
- print(decorator)
-
- return (
- ct,
- st,
- en,
- fiber,
- 1,
- strand,
- 0,
- 0,
- "0,0,0,200",
- 2,
- "1,1",
- f"0,{en-st-1}",
- hp,
- )
-
-
-def process(df, outfile, group_size=5_000):
- data = []
- fibers = df["fiber"].unique()
- n_fibers = len(fibers)
- n = 0
- mode = "w"
- for (ct, fiber, hp), gdf in df.group_by(
- ["#ct", "fiber", "HP"], maintain_order=True
- ):
- strand = "."
- data.append(subgroup(gdf, ct, fiber, strand, hp))
- n += 1
- if n % group_size == 0 or n == n_fibers:
- logging.info(f"processed {n:,} fibers of {n_fibers:,}")
- pd.DataFrame(data).sort_values([0, 1, 2]).to_csv(
- outfile, sep="\t", header=False, index=False, mode=mode
- )
- mode = "a"
- data = []
- gc.collect()
-
-
-def main(
- infile: str,
- outfile: Optional[Path],
- *,
- verbose: int = 0,
-):
- """
- Author Mitchell R. Vollger
- :param infile: Input file, stdin by default
- :param outfile: Output file, stdout by default
- :param verbose: Set the logging level of the function
- """
- if infile == "-":
- infile = io.StringIO(sys.stdin.read())
-
- logger = logging.getLogger()
- log_format = "[%(levelname)s][Time elapsed (ms) %(relativeCreated)d]: %(message)s"
- log_level = 10 * (3 - verbose)
- logging.basicConfig(format=log_format)
- logger.setLevel(log_level)
-
- df = pl.read_csv(
- infile,
- separator="\t",
- low_memory=True,
- columns=[
- "#ct",
- "st",
- "en",
- "fiber",
- "score",
- # "strand",
- "HP",
- "color",
- ],
- )
- if df.shape[0] == 0:
- outfile = open(outfile, "w")
- return 0
- # df = df.filter(pl.col("color") != "230,230,230")
-
- # with Profiler(interval=0.1) as profiler:
- logging.info(f"{df}")
- process(df, outfile)
- # profiler.print()
- # profiler.open_in_browser()
- return 0
-
-
-if __name__ == "__main__":
- defopt.run(main, show_types=True, version="0.0.1")
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
new file mode 100644
index 000000000..3f3e689d7
--- /dev/null
+++ b/workflow/scripts/fdr-table.py
@@ -0,0 +1,263 @@
+#!/usr/bin/env python
+import defopt
+import sys
+import gc
+import logging
+from pathlib import Path
+from typing import Optional
+import pandas as pd
+import polars as pl
+import numpy as np
+import polars.selectors as cs
+from datetime import datetime
+
+# from numba import njit
+ROLLING_FIRE_SCORE_WINDOW_SIZE = 200
+
+
+def find_nearest(array, value):
+ idx = np.searchsorted(array, value, side="left")
+ idx[idx < 0] = 0
+ idx[idx >= len(array)] = len(array) - 1
+ return idx
+
+
+def read_pileup_file(infile, nrows):
+ # get the header from the first line of the file
+ header = pl.read_csv(infile, separator="\t", n_rows=1).columns
+ logging.info(f"Header of the pileup file:\n{header}")
+ # read the file
+ pileup = pl.read_csv(
+ infile,
+ separator="\t",
+ has_header=False,
+ new_columns=header,
+ comment_prefix="#",
+ n_rows=nrows,
+ infer_schema_length=100000,
+ )
+ logging.info(f"Done reading pileup file:\n{pileup}")
+ return pileup
+
+
+# @njit
+def fdr_from_fire_scores(fire_scores):
+ Vs = []
+ Rs = []
+ Ts = []
+ cur_R = 0.0
+ cur_V = 0.0
+ pre_score = -1.0
+ first = True
+ for score, is_real, bp in fire_scores.iter_rows():
+ # save the counts and thresholds as long as we have counts
+ if score != pre_score and cur_R > 0 and not first:
+ Rs.append(cur_R)
+ Vs.append(cur_V)
+ Ts.append(pre_score)
+ # don't add negative scores to the fdr data, since they have no coverage.
+ if score < 0.0:
+ break
+ # update the counts
+ if is_real:
+ cur_R += bp
+ else:
+ cur_V += bp
+ # prepare for next iteration
+ pre_score = score
+ first = False
+
+ # add the last threshold with an FDR of 1
+ Rs.append(1)
+ Vs.append(1)
+ Ts.append(-1.0)
+
+ # set up return values
+ Vs = np.array(Vs)
+ Rs = np.array(Rs)
+ Ts = np.array(Ts)
+ FDRs = Vs / Rs
+ FDRs[FDRs > 1] = 1.0
+
+ return (Ts, FDRs, Vs, Rs)
+
+
+def fdr_table_from_scores(fire_scores):
+ # Calculate FDR thresholds
+ Ts, FDRs, Vs, Rs = fdr_from_fire_scores(fire_scores)
+ results = pd.DataFrame(
+ {
+ "threshold": Ts,
+ "FDR": FDRs,
+ "shuffled_bp": Vs,
+ "real_bp": Rs,
+ }
+ )
+ # simplify the results a little, don't want 100,000s of thresholds
+ results = results.groupby("FDR", sort=False).tail(1).reset_index(drop=True)
+ results = results.groupby("shuffled_bp", sort=False).tail(1).reset_index(drop=True)
+ results = results.groupby("real_bp", sort=False).tail(1).reset_index(drop=True)
+ # limit the number of thresholds that can be in the table
+ results["threshold"] = results["threshold"].round(2)
+ results = results.groupby("threshold", sort=False).tail(1).reset_index(drop=True)
+ # sort the results by threshold so that they are now acceding
+ # which is needed for the find_nearest function
+ results = results.sort_values("threshold")
+ logging.info(f"FDR results\n{results}")
+ return results
+
+
+def make_fdr_table(infile, outfile, nrows):
+ # read the pileup file
+ pileup = read_pileup_file(infile, nrows)
+ # aggregate by the score and weight the score by the number of bases
+ fire_scores = (
+ pileup.melt(
+ value_vars=["score", "score_shuffled"],
+ id_vars=["#chrom", "start", "end"],
+ variable_name="type",
+ value_name="score",
+ )
+ .with_columns(
+ pl.when(pl.col("type") == "score")
+ .then(True)
+ .otherwise(False)
+ .alias("is_real"),
+ pl.col("end").sub(pl.col("start")).alias("bp"),
+ )
+ .group_by(["score", "is_real"])
+ .agg(pl.sum("bp").alias("bp"))
+ .sort("score", descending=True)
+ )
+ logging.info(f"Done aggregating pileup file:\n{fire_scores}")
+ fdr_table = fdr_table_from_scores(fire_scores)
+ fdr_table.to_csv(outfile, sep="\t", index=False)
+ return fdr_table
+
+
+def read_fdr_table(infile):
+ fdr_table = pl.read_csv(infile, separator="\t").to_pandas()
+ logging.info(f"Read FDR table:\n{fdr_table}")
+ return fdr_table
+
+
+def apply_fdr_table(infile, outfile, fdr_table, nrows):
+ pileup = read_pileup_file(infile, nrows)
+ logging.info(f"Applying FDR table to pileup file:\n{pileup}")
+ # add a new column that reports the largest score in a centered window of with ROLLING_FIRE_SCORE_WINDOW_SIZE number of bases
+ rolling_max_score = (
+ pileup.rolling(
+ index_column="start",
+ period=f"{ROLLING_FIRE_SCORE_WINDOW_SIZE}i",
+ offset=f"-{ROLLING_FIRE_SCORE_WINDOW_SIZE // 2}i",
+ closed="both",
+ group_by="#chrom",
+ )
+ .agg(
+ pl.max("score").alias("max_window_score").fill_null(-1.0),
+ )
+ .drop("#chrom")
+ )
+
+ # add the max window score to the pileup
+ pileup = (
+ pileup.with_columns(rolling_max_score)
+ .with_columns(
+ pl.when(
+ (pl.col("score") == pl.col("max_window_score"))
+ & (pl.col("score") > 0.0)
+ )
+ .then(True)
+ .otherwise(False)
+ .alias("is_local_max"),
+ )
+ .with_columns(
+ pl.col("is_local_max").rle_id().alias("local_max_group"),
+ )
+ )
+
+ # group by local_max_group and find the midpoint (bp) of the group
+ middle = (
+ pileup.group_by(["#chrom", "local_max_group"])
+ .agg(
+ pl.col("end").sub(pl.col("start")).sum().alias("width"),
+ pl.min("start").alias("first_start"),
+ )
+ .with_columns(
+ # find the middle of the group
+ pl.col("first_start").add(pl.col("width") // 2).alias("middle"),
+ )
+ .drop("width", "first_start")
+ )
+
+ # find the middle row of local max groups
+ pileup = (
+ pileup.join(middle, on=["#chrom", "local_max_group"], how="left")
+ .with_columns(
+ (
+ (pl.col("start") <= pl.col("middle"))
+ & (pl.col("end") > pl.col("middle"))
+ ).alias("is_middle"),
+ )
+ .with_columns(
+ # only keep the local maxes that are in the middle of the group
+ (pl.col("is_local_max") & pl.col("is_middle")).alias("is_local_max"),
+ )
+ .drop("middle", "is_middle", "local_max_group", "max_window_score")
+ .drop(cs.ends_with("_shuffled"))
+ )
+
+ # find the FDRs for the thresholds
+ fdr_idx = find_nearest(fdr_table.threshold.values, pileup["score"].to_numpy())
+ FDRs = fdr_table.FDR.values[fdr_idx]
+ pileup = (
+ pileup.with_columns(
+ FDR=FDRs,
+ )
+ .with_columns(
+ pl.when(pl.col("score") >= 0.0)
+ .then(pl.col("FDR"))
+ .otherwise(1.0)
+ .alias("FDR"),
+ )
+ .with_columns(
+ (-10 * np.log10(pl.col("FDR"))).alias("log_FDR").replace(float("inf"), 100),
+ )
+ )
+
+ logging.info(f"Done calculating max window score:\n{pileup}")
+ # write the pileup to a file
+ pileup.write_csv(outfile, separator="\t")
+
+
+def main(
+ infile: Path,
+ outfile: Path,
+ *,
+ fdr_table: Path = None,
+ nrows: Optional[int] = None,
+ verbose: int = 0,
+):
+ """
+ Author Mitchell R. Vollger
+
+ :param infile: ft pileup track with shuffled fiber data
+ :param outfile: FIRE score to FDR table
+ :param verbose: Set the logging level of the function
+ """
+ logger = logging.getLogger()
+ log_format = "[%(levelname)s][Time elapsed (ms) %(relativeCreated)d]: %(message)s"
+ log_level = 10 * (3 - verbose)
+ logging.basicConfig(format=log_format)
+ logger.setLevel(log_level)
+
+ if fdr_table is not None:
+ fdr_table = read_fdr_table(fdr_table)
+ apply_fdr_table(infile, outfile, fdr_table, nrows)
+ else:
+ fdr_table = make_fdr_table(infile, outfile, nrows)
+ return 0
+
+
+if __name__ == "__main__":
+ defopt.run(main, show_types=True, version="0.0.1")
diff --git a/workflow/scripts/fire-null-distribution.py b/workflow/scripts/fire-null-distribution.py
deleted file mode 100755
index db9f563c9..000000000
--- a/workflow/scripts/fire-null-distribution.py
+++ /dev/null
@@ -1,565 +0,0 @@
-#!/usr/bin/env python
-import defopt
-import sys
-import gc
-import logging
-from pathlib import Path
-from typing import Optional
-import pandas as pd
-import polars as pl
-import numpy as np
-from numba import njit
-
-ROLLING_FIRE_SCORE_WINDOW_SIZE = 200
-
-FIRE_COLUMNS = [
- "chrom",
- "start",
- "end",
- "fiber",
- "score",
- "strand",
- "thick_start",
- "thick_end",
- "item_rgb",
- "fdr",
- "hap",
-]
-FIBER_COLUMNS = [
- "chrom",
- "fiber",
- "fiber_start",
- "fiber_end",
- "null_fiber_start",
- "null_fiber_end",
-]
-HAPS = ["H1", "H2"]
-
-
-def rle(inarray):
- """run length encoding. Partial credit to R rle function.
- Multi datatype arrays catered for including non Numpy
- returns: tuple (runlengths, startpositions, values)"""
- ia = np.asarray(inarray) # force numpy
- if ia.size == 0:
- return (ia, ia, ia)
- else:
- n = ia.shape[0]
- y = ia[1:] != ia[:-1] # pairwise unequal (string safe)
- i = np.append(np.where(y), n - 1) # must include last element posi
- z = np.diff(np.append(-1, i)) # run lengths
- p = np.cumsum(np.append(0, z))[:-1] # positions
- return (z, p, ia[i])
-
-
-def bed_rle(inarray):
- run_lengths, starts, scores = rle(inarray)
- starts = starts.astype(int)
- ends = starts + run_lengths.astype(int)
- return np.array([starts, ends, scores]).transpose()
-
-
-@njit
-def is_local_max(array):
- output = []
- for idx in range(array.shape[0]):
- if idx - 1 < 0 or idx + 1 >= array.shape[0]:
- output.append(False)
- continue
- cur_res = False
- pre = array[idx - 1]
- cur = array[idx]
- next = array[idx + 1]
- if cur >= pre and cur >= next:
- cur_res = True
- output.append(cur_res)
-
- return output
-
-
-@njit
-def fire_scores_per_chrom(
- starts,
- ends,
- q_values,
- chrom_length,
- coverage_array,
- min_allowed_q=0.01,
- min_coverage=4,
-):
- fire_scores = np.zeros(int(chrom_length), dtype=np.float64)
-
- multi = -50.0 # a multi of -50 and a min_allowed_q of 0.01 gives a max score of 100
- max_add = multi * np.log10(min_allowed_q)
- q_values_t = multi * np.log10(q_values)
- for start, end, q in zip(starts, ends, q_values_t):
- if end >= chrom_length:
- continue
- fire_scores[start:end] += min(q, max_add)
-
- # correct for coverage
- fire_scores = fire_scores / coverage_array
- # correct divide by zeros
- fire_scores[np.isnan(fire_scores)] = 0.0
- # drop the scores that have no coverage
- fire_scores[coverage_array < min_coverage] = -1.0
- return fire_scores
-
-
-@njit
-def fdr_from_fire_scores(fire_scores):
- Vs = []
- Rs = []
- Ts = []
- cur_R = 0.0
- cur_V = 0.0
- pre_score = -1.0
- first = True
- for start, end, score, is_real in fire_scores:
- # save the counts and thresholds as long as we have counts
- if score != pre_score and cur_R > 0 and not first:
- Rs.append(cur_R)
- Vs.append(cur_V)
- Ts.append(pre_score)
- # don't add negative scores to the fdr data, since they have no coverage.
- if score < 0.0:
- break
- # update the counts
- counts = end - start
- if is_real:
- cur_R += counts
- else:
- cur_V += counts
- # prepare for next iteration
- pre_score = score
- first = False
- # set up return values
- Vs = np.array(Vs)
- Rs = np.array(Rs)
- Ts = np.array(Ts)
- FDRs = Vs / Rs
- FDRs[FDRs > 1] = 1.0
- return (Ts, FDRs, Vs, Rs)
-
-
-@njit
-def get_coverage_from_array(starts, ends, coverage_array, stat="median"):
- out_coverage = np.zeros(starts.shape[0], dtype=np.float64)
- idx = 0
- for start, end in zip(starts, ends):
- if stat == "median":
- val = np.median(coverage_array[start:end])
- elif stat == "max":
- val = np.max(coverage_array[start:end])
- else:
- val = np.mean(coverage_array[start:end])
- out_coverage[idx] = val
- idx += 1
- return out_coverage
-
-
-@njit
-def make_coverage_array(starts, ends, chrom_length):
- coverage_array = np.zeros(int(chrom_length), dtype=np.float64)
- for start, end in zip(starts, ends):
- coverage_array[start:end] += 1
- return coverage_array
-
-
-def fire_tracks(fire, outfile, min_coverage=4):
- null_s = []
- fire_s = []
- logging.info(f"Fire data\n{fire}")
- # number of elements where start and fiber_start are null
- null_count = fire.filter(
- pl.col("start").is_null() & pl.col("fiber_start").is_null()
- ).shape[0]
- if null_count > 0:
- logging.warn(f"Null count: {null_count}")
-
- for chrom, g in fire.group_by("chrom", maintain_order=True):
- logging.info(f"Processing {chrom}")
- # fibers for this chromosome
- fibers = (
- g[FIBER_COLUMNS]
- .filter(~pl.col("fiber_start").is_null())
- .unique()
- .to_pandas()
- )
- # convert to pandas for easier manipulation
- g = (
- g.filter(~pl.col("start").is_null())
- .filter(~pl.col("fiber_start").is_null())
- .to_pandas()
- )
- logging.debug(f"Grouped fire data\n{g}\n{g.dtypes}")
-
- if g.shape[0] == 0:
- logging.warning(f"No data for {chrom}")
- continue
-
- # get coverage for this chromosome and the shuffled fibers
- chrom_length = g.length[0].astype(int)
- coverage_array = make_coverage_array(
- fibers.fiber_start.values, fibers.fiber_end.values, chrom_length
- )
- null_coverage_array = make_coverage_array(
- fibers.null_fiber_start.values, fibers.null_fiber_end.values, chrom_length
- )
- expected_median_coverage = np.median(
- null_coverage_array[null_coverage_array > 0]
- )
-
- # find offset to use based on the shuffled fiber
- g["offset"] = g.null_fiber_start - g.fiber_start
- g["null_start"] = g.start + g.offset
- g["null_end"] = g.end + g.offset
-
- logging.info(
- f"real bp: {(g.end-g.start).sum():,}\t"
- f"null bp: {(g.null_end-g.null_start).sum():,}"
- )
-
- #
- rle_fire_scores = bed_rle(
- fire_scores_per_chrom(
- g.start.values,
- g.end.values,
- g.fdr.values,
- g.length.max(),
- coverage_array,
- min_coverage=min_coverage,
- )
- )
- rle_null_scores = bed_rle(
- fire_scores_per_chrom(
- g.null_start.values,
- g.null_end.values,
- g.fdr.values,
- g.length.max(),
- null_coverage_array,
- min_coverage=min_coverage,
- )
- )
- n_bp_considered = (coverage_array >= min_coverage).sum()
- logging.info(
- f"{chrom}: {n_bp_considered:,} of {chrom_length:,}\t"
- f"Max real FIRE score: {rle_fire_scores[:,2].max():,.8}\t"
- f"Max null FIRE score: {rle_null_scores[:,2].max():,.8}\t"
- f"Expected median coverage: {expected_median_coverage}"
- )
- fire_s.append(rle_fire_scores)
- null_s.append(rle_null_scores)
-
- # all data
- fire_scores = np.concatenate(fire_s)
- null_fire_scores = np.concatenate(null_s)
- logging.debug(f"rle fire score shape: {fire_scores.shape}")
- logging.info(
- f"all: {fire_scores.shape[0]:,}\t"
- f"Max real FIRE score: {fire_scores[:,2].max():,.8}\t"
- f"Max null FIRE score: {null_fire_scores[:,2].max():,.8}"
- )
-
- # convert to pandas for easier manipulation
- fire_scores = pd.DataFrame(fire_scores, columns=["start", "end", "score"])
- fire_scores["is_real"] = 1.0
- null_fire_scores = pd.DataFrame(null_fire_scores, columns=["start", "end", "score"])
- null_fire_scores["is_real"] = 0.0
- fire_scores = (
- pd.concat([fire_scores, null_fire_scores])
- .sort_values("score", ascending=False)
- .to_numpy()
- )
- logging.debug(f"Fire scores\n{fire_scores}")
-
- # Calculate FDR thresholds
- Ts, FDRs, Vs, Rs = fdr_from_fire_scores(fire_scores)
- results = pd.DataFrame(
- {
- "threshold": Ts,
- "FDR": FDRs,
- "shuffled_peaks": Vs,
- "peaks": Rs,
- }
- )
- # simplify the results a little, don't want 100,000s of thresholds
- results = results[results.threshold > 0.0]
- results = results.groupby("FDR", sort=False).tail(1).reset_index(drop=True)
- results = (
- results.groupby("shuffled_peaks", sort=False).tail(1).reset_index(drop=True)
- )
- results = results.groupby("peaks", sort=False).tail(1).reset_index(drop=True)
- # limit the number of thresholds that can be in the table
- results["threshold"] = results["threshold"].round(2)
- results = results.groupby("threshold", sort=False).tail(1).reset_index(drop=True)
- logging.info(f"FDR results\n{results}")
- results.to_csv(outfile, sep="\t", index=False)
-
-
-def make_fdr_table(fire, outfile, min_coverage=4):
- logging.info("Starting analysis")
- logging.debug(f"Joined fibers\n{fire}")
- fire_tracks(fire, outfile, min_coverage=min_coverage)
- return 0
-
-
-def find_nearest(array, value):
- idx = np.searchsorted(array, value, side="left")
- idx[idx < 0] = 0
- idx[idx >= len(array)] = len(array) - 1
- return idx
-
-
-def write_bed(chrom, output_dict, out, first=True):
- chrom_length = output_dict["coverage"].shape[0]
- # make df
- if first:
- header = True
- mode = "w"
- else:
- header = False
- mode = "a"
- logging.info("Making data frame")
- df = pl.DataFrame(output_dict)
- del output_dict
- gc.collect()
-
- # finding maxes within windows
- df = df.with_columns(
- max_window_score=pl.col("score").rolling_max(
- window_size=ROLLING_FIRE_SCORE_WINDOW_SIZE,
- center=True,
- )
- )
- original_columns = df.columns
- # find and clear the duplicates
- logging.info("Finding duplicates")
- # float array that says if a row is different from the previous row
- diff = (((df != df.shift(periods=1)).sum(axis=1)) > 0) * 1.0
- # turn the diff array into a group number
- logging.info("Merging duplicates")
- df = (
- df.with_columns(
- diff.cumsum().alias("group"),
- )
- .with_row_count(name="end", offset=1)
- .unique(keep="last", subset=original_columns + ["group"], maintain_order=True)
- .with_columns(
- pl.col("end").shift_and_fill(periods=1, fill_value=0).alias("start"),
- pl.lit(chrom).alias("#chrom"),
- )
- .select(["#chrom", "start", "end"] + original_columns)
- .sort(["#chrom", "start", "end"])
- ).to_pandas()
-
- # can only find local maxes after de duplicating
- # window_score = (
- # df.rolling(ROLLING_FIRE_SCORE_WINDOW_SIZE, on="start", center=True)
- # .score.max()
- # .values
- # )
- # df["is_local_max"] = df["score"] == window_score # df["score"].values
- df["is_local_max"] = (df["score"] == df["max_window_score"]) & (df["score"] > 0.0)
-
- logging.info(f"Found {df.is_local_max.sum():,} local maximums.")
-
- # checks
- final_end = df.end.max()
- assert final_end == chrom_length, f"{final_end} != {chrom_length}"
-
- logging.info(f"Writing {chrom}")
- df.to_csv(out, mode=mode, header=header, index=False, sep="\t")
- logging.info(f"Done writing {chrom}")
- return
-
-
-def extra_output_columns(fire, fibers, fdr_table, min_coverage=4):
- return_data = {}
- # get the inital data
- chrom_length = fire.length[0]
-
- # get fire info per haplotype
- for hap in [""] + HAPS:
- # select data we are working with
- if hap == "":
- logging.info("Processing all haplotypes")
- tag = ""
- cur_fire = fire
- cur_fibers = fibers
- else:
- logging.info(f"Processing {hap}")
- tag = f"_{hap}"
- cur_fibers = fibers[fibers.hap == hap]
- cur_fire = fire[fire.hap == hap]
- # if no data in the hap write empty values
- if cur_fire.shape[0] == 0:
- for x in [
- "fire_coverage",
- "coverage",
- "score",
- "FDR",
- "log_FDR",
- ]:
- return_data[f"{x}{tag}"] = -1
- continue
-
- cur_coverage_array = make_coverage_array(
- cur_fibers.fiber_start.values, cur_fibers.fiber_end.values, chrom_length
- )
- # get the FIRE scores in bed format
- cur_fire_scores = fire_scores_per_chrom(
- cur_fire.start.values,
- cur_fire.end.values,
- cur_fire.fdr.values,
- cur_fire.length.max(),
- cur_coverage_array,
- min_coverage=min_coverage,
- )
- # fire coverage
- fire_coverage = make_coverage_array(
- cur_fire.start.values, cur_fire.end.values, chrom_length
- )
- return_data[f"fire_coverage{tag}"] = fire_coverage
-
- # total coverage
- return_data[f"coverage{tag}"] = cur_coverage_array
-
- # save the scores
- return_data[f"score{tag}"] = cur_fire_scores
-
- # find the FDRs for the thresholds
- fdr_idx = find_nearest(fdr_table.threshold.values, cur_fire_scores)
- FDRs = fdr_table.FDR.values[fdr_idx]
- return_data[f"FDR{tag}"] = FDRs
-
- # log the FDRs
- tmp_FDR = FDRs.copy()
- tmp_FDR[tmp_FDR <= 0] = tmp_FDR[tmp_FDR > 0].min()
- log_FDRs = -10 * np.log10(tmp_FDR)
- return_data[f"log_FDR{tag}"] = log_FDRs
-
- for key, data in return_data.items():
- if isinstance(data, np.ndarray):
- assert (
- data.shape[0] == chrom_length
- ), f"{key} is not the expected size: {data.shape} instead of {chrom_length.shape}."
- return return_data
-
-
-def write_scores(fire, fdr_table, outfile, min_coverage=4):
- first = True
- for chrom, g in fire.group_by("chrom", maintain_order=True):
- logging.info(f"Processing {chrom}")
- # fibers for this chromosome
- fibers = (
- g[["chrom", "fiber", "fiber_start", "fiber_end", "hap"]]
- .unique()
- .to_pandas()
- )
- # convert to pandas for easier manipulation
- g = g.to_pandas()
-
- # get a bunch of extra columns + per haplotype
- output_dict = extra_output_columns(
- g, fibers, fdr_table, min_coverage=min_coverage
- )
-
- # write data
- write_bed(chrom, output_dict, outfile, first=first)
- first = False
-
-
-def main(
- infile: Path,
- fiber_locations_file: Path,
- genome_file: Path,
- *,
- outfile: Optional[Path] = None,
- shuffled_locations_file: Optional[Path] = None,
- fdr_table_file: Optional[Path] = None,
- n_rows: Optional[int] = None,
- min_coverage: Optional[int] = 4,
- verbose: int = 0,
-):
- """
- Author Mitchell R. Vollger
-
- :param infile: Input file, stdin by default
- :param outfile: Output file, stdout by default
- :param count: Number of times to display the greeting
- :param verbose: Set the logging level of the function
- """
- if infile is None:
- infile = sys.stdin
- if outfile is None:
- outfile = sys.stdout
-
- logger = logging.getLogger()
- log_format = "[%(levelname)s][Time elapsed (ms) %(relativeCreated)d]: %(message)s"
- log_level = 10 * (3 - verbose)
- logging.basicConfig(format=log_format)
- logger.setLevel(log_level)
-
- logging.info(f"Reading FIRE file: {infile}")
- fire = pl.read_csv(
- infile,
- separator="\t",
- has_header=False,
- columns=[0, 1, 2, 3, 9, 10],
- new_columns=["chrom", "start", "end", "fiber", "fdr", "hap"],
- comment_char="#",
- n_rows=n_rows,
- )
- logging.debug(f"FIRE peaks {fire}")
- logging.info(f"Reading genome file: {genome_file}")
- fai = pl.read_csv(
- genome_file,
- separator="\t",
- has_header=False,
- columns=[0, 1],
- new_columns=["chrom", "length"],
- )
- logging.info(f"Reading fiber locations file: {fiber_locations_file}")
- fiber_locations = pl.read_csv(
- fiber_locations_file,
- separator="\t",
- has_header=False,
- columns=[0, 1, 2, 3, 5],
- new_columns=["chrom", "fiber_start", "fiber_end", "fiber", "hap"],
- ).join(fai, on="chrom")
-
- if shuffled_locations_file is not None:
- logging.info(
- f"Reading shuffled fiber locations file: {shuffled_locations_file}"
- )
- shuffled_locations = pl.read_csv(
- shuffled_locations_file,
- separator="\t",
- has_header=False,
- columns=[0, 1, 2, 3],
- new_columns=["chrom", "null_fiber_start", "null_fiber_end", "fiber"],
- )
- fiber_locations = fiber_locations.join(
- shuffled_locations, on=["chrom", "fiber"]
- )
-
- logging.info("Joining FIRE elements and fibers and then sorting")
- fire = fire.join(fiber_locations, on=["chrom", "fiber", "hap"], how="outer").sort(
- ["chrom", "start", "end"]
- )
-
- if shuffled_locations_file is not None:
- make_fdr_table(fire, outfile, min_coverage=min_coverage)
- else:
- fdr_table = (
- pl.read_csv(fdr_table_file, separator="\t")
- .to_pandas()
- .sort_values("threshold")
- )
- write_scores(fire, fdr_table, outfile, min_coverage=min_coverage)
- return 0
-
-
-if __name__ == "__main__":
- defopt.run(main, show_types=True, version="0.0.1")
diff --git a/workflow/scripts/merge_fire_peaks.py b/workflow/scripts/merge_fire_peaks.py
index ce77b67d9..accb5273f 100755
--- a/workflow/scripts/merge_fire_peaks.py
+++ b/workflow/scripts/merge_fire_peaks.py
@@ -59,11 +59,11 @@ def group_peaks(df, min_frac_overlap=0.5, min_reciprocal_overlap=0.75):
),
)
.with_columns(
- (~pl.col("shares_FIREs")).cumsum().alias("group"),
+ (~pl.col("shares_FIREs")).cum_sum().alias("group"),
)
.sort("group")
.with_columns(
- pl.col("score").max().over("group").suffix("_max"),
+ pl.col("score").max().over("group").name.suffix("_max"),
peak_start=pl.col("peak_start").min().over("group").cast(pl.UInt32),
peak_end=pl.col("peak_end").max().over("group").cast(pl.UInt32),
local_max_count=pl.col("group").len().over("group"),
diff --git a/workflow/scripts/percent-in-clusters.sh b/workflow/scripts/percent-in-clusters.sh
index 1d2db9f2e..01213cf51 100755
--- a/workflow/scripts/percent-in-clusters.sh
+++ b/workflow/scripts/percent-in-clusters.sh
@@ -9,8 +9,8 @@ if [[ $# != 3 ]]; then
exit 1
fi
-oe=$(zcat $1 \
- | awk '{ \
+oe=$(zcat $1 |
+ awk '{ \
coverage[$4][$5]+=$3-$2; \
} END { \
real_bp = 0; \
@@ -26,7 +26,7 @@ n_tests=$(zcat $2 | wc -l)
min_fdr=$(echo "-10.0*(l(0.01/${n_tests})/l(10.0))" | bc -lq)
# n_peaks=$(zcat $2 | awk -v m="${min_fdr}" '$4 >= m' | wc -l)
-printf "percent-of-MSPs-preferentially-clustered-along-the-genome\tmin_fdr\n" > $3
-printf "%s%%\t%s\n" ${oe} ${min_fdr} >> $3
+printf "percent-of-MSPs-preferentially-clustered-along-the-genome\tmin_fdr\n" >$3
+printf "%s%%\t%s\n" ${oe} ${min_fdr} >>$3
exit 0
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index fc5c0e5ab..9fbf0f8a6 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -58,7 +58,6 @@
"""
-
MULTI_WIG = """
track {sample}-{hap}-FIRE-coverage
parent {sample}-FIRE-coverage
@@ -237,7 +236,7 @@ def generate_trackhub(
if hap == "all":
viz = "full"
else:
- viz = "hide"
+ viz = "hide"
# add coverage tracks
if hap != "unk":
acc = f"bw/{hap}.fire.coverage.bw"
@@ -256,15 +255,13 @@ def generate_trackhub(
)
if hap == "all":
- file = f"bb/FDR-FIRE-peaks.bb"
+ file = f"bb/fire-peaks.bb"
trackDb.write(FIRE_TEMPLATE.format(file=file, sample=sample))
# add hap tracks
file = f"bb/hap_differences.bb"
trackDb.write(HAP_TEMPLATE.format(file=file, sample=sample))
- file = "bb/FDR-wide-peaks.bb"
- trackDb.write(
- WIDE_TEMPLATE.format(file=file, sample=sample)
- )
+ file = "bb/fire-wide-peaks.bb"
+ trackDb.write(WIDE_TEMPLATE.format(file=file, sample=sample))
# add percent accessible tracks
file = f"bw/{hap}.percent.accessible.bw"
@@ -283,7 +280,7 @@ def generate_trackhub(
sample=sample, hap=hap, file=file, color=color, viz=viz
)
)
-
+
# new bin files
if hap == "all":
for z in ["H1", "H2", "UNK"]:
From 383c7fc1caf86cfdbbf7dea555c159427944bd60 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 20 Sep 2024 14:29:21 -0700
Subject: [PATCH 048/145] Major refactor to prepare for DSA
---
workflow/Snakefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 82b296f1a..a82dfd2ef 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -72,6 +72,7 @@ LEVIO_EXE = config.get("levio_exe", "leviosam2")
FT_EXE = config.get("ft_exe", "ft")
if FT_EXE is not "ft":
print(f"INFO: Using FT_EXE: {FT_EXE}", file=sys.stderr)
+
ONT = config.get("ont", False)
USE_ONT = ""
if ONT:
From 1275d73a437cf2180b868cb428dfc94607c9c9ca Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Fri, 20 Sep 2024 14:29:50 -0700
Subject: [PATCH 049/145] Major refactor to prepare for DSA
---
workflow/rules/fire-peaks.smk | 358 ++++++++++++++++++++++++++++++++++
workflow/rules/levio.smk | 104 ++++++++++
2 files changed, 462 insertions(+)
create mode 100644 workflow/rules/fire-peaks.smk
create mode 100644 workflow/rules/levio.smk
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
new file mode 100644
index 000000000..d4638b2d6
--- /dev/null
+++ b/workflow/rules/fire-peaks.smk
@@ -0,0 +1,358 @@
+rule filtered_and_shuffled_fiber_locations_chromosome:
+ input:
+ filtered=rules.fiber_locations.output.filtered,
+ exclude=rules.exclude_from_shuffle.output.bed,
+ fai=ancient(FAI),
+ output:
+ shuffled=temp("temp/{sm}/shuffle/{chrom}.fiber-locations-shuffled.bed.gz"),
+ threads: 4
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ tabix {input.filtered} {wildcards.chrom} \
+ | bioawk -t '{{print $1,$2,$3,$4,$2}}' \
+ | bedtools shuffle -chrom -seed 42 \
+ -excl {input.exclude} \
+ -i - \
+ -g {input.fai} \
+ | sort -k1,1 -k2,2n -k3,3n -k4,4 \
+ | bgzip -@ {threads} \
+ > {output.shuffled}
+ """
+
+
+rule shuffled_pileup_chromosome:
+ input:
+ cram=rules.merged_fire_bam.output.cram,
+ shuffled=rules.filtered_and_shuffled_fiber_locations_chromosome.output.shuffled,
+ output:
+ bed=temp("temp/{sm}/shuffle/{chrom}.pileup.bed.gz"),
+ threads: 4
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ {FT_EXE} pileup {input.cram} {wildcards.chrom} -t {threads} \
+ --fiber-coverage --shuffle {input.shuffled} \
+ --no-msp --no-nuc \
+ | bgzip -@ {threads} \
+ > {output.bed}
+ """
+
+
+rule shuffled_pileup:
+ input:
+ beds=expand(
+ rules.shuffled_pileup_chromosome.output.bed,
+ chrom=get_chroms(),
+ allow_missing=True,
+ ),
+ output:
+ bed=temp("temp/{sm}/shuffle/shuffled-pileup.bed.gz"),
+ tbi=temp("temp/{sm}/shuffle/shuffled-pileup.bed.gz.tbi"),
+ threads: 4
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ cat {input.beds} > {output.bed}
+ tabix -p bed {output.bed}
+ """
+
+
+#
+# FIRE sites and FDR tracks
+#
+rule fdr_table:
+ input:
+ shuffled=rules.shuffled_pileup.output.bed,
+ output:
+ tbl="results/{sm}/fire-peaks/{sm}-fire-score-to-fdr.tbl",
+ conda:
+ "../envs/python.yaml"
+ params:
+ script=workflow.source_path("../scripts/fdr-table.py"),
+ resources:
+ mem_mb=get_mem_mb,
+ shell:
+ """
+ python {params.script} -v 1 {input.shuffled} {output.tbl}
+ """
+
+
+# Colnames made by this
+# #chrom start end
+# coverage fire_coverage score nuc_coverage msp_coverage
+# coverage_H1 fire_coverage_H1 score_H1 nuc_coverage_H1 msp_coverage_H1
+# coverage_H2 fire_coverage_H2 score_H2 nuc_coverage_H2 msp_coverage_H2
+rule pileup_chromosome:
+ input:
+ bam=rules.merged_fire_bam.output.cram,
+ output:
+ bed=temp("temp/{sm}/{chrom}.pileup.bed.gz"),
+ threads: 12
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ {FT_EXE} pileup -t {threads} \
+ --haps --fiber-coverage \
+ {input.bam} {wildcards.chrom} \
+ | bgzip -@ {threads} \
+ > {output.bed}
+ """
+
+
+rule fdr_track_chromosome:
+ input:
+ pileup=rules.pileup_chromosome.output.bed,
+ fdr_tbl=rules.fdr_table.output.tbl,
+ output:
+ bed=temp("temp/{sm}/fire-peaks/{chrom}-FDR.track.bed"),
+ threads: 8
+ conda:
+ "../envs/python.yaml"
+ params:
+ script=workflow.source_path("../scripts/fdr-table.py"),
+ resources:
+ mem_mb=get_mem_mb_xl,
+ shell:
+ """
+ python {params.script} -v 1 \
+ --fdr-table {input.fdr_tbl} \
+ {input.pileup} {output.bed}
+ """
+
+
+rule pileup:
+ input:
+ beds=expand(
+ rules.fdr_track_chromosome.output.bed,
+ chrom=get_chroms(),
+ allow_missing=True,
+ ),
+ output:
+ fofn=temp("temp/{sm}/fire/fire-pileup.fofn"),
+ bed="results/{sm}/{sm}-fire-pileup.bed.gz",
+ tbi="results/{sm}/{sm}-fire-pileup.bed.gz.tbi",
+ threads: 8
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ printf '\nMaking FOFN\n'
+ echo {input.beds} > {output.fofn}
+
+ printf '\nMake header\n'
+ ((cat $(cat {output.fofn}) | grep "^#" | head -n 1) || true) \
+ | bgzip -@ {threads} \
+ > {output.bed}
+
+ printf '\nConcatenating\n'
+ cat $(cat {output.fofn}) \
+ | grep -v "^#" \
+ | bgzip -@ {threads} \
+ >> {output.bed}
+
+ printf '\nIndexing\n'
+ tabix -f -p bed {output.bed}
+ """
+
+
+rule helper_fdr_peaks_by_fire_elements:
+ input:
+ bed=rules.pileup.output.bed,
+ tbi=rules.pileup.output.tbi,
+ fire=rules.fire_sites.output.bed,
+ fire_tbi=rules.fire_sites_index.output.tbi,
+ output:
+ bed=temp("temp/{sm}/fire-peaks/{chrom}-fire-peaks.bed.gz"),
+ threads: 2
+ conda:
+ DEFAULT_ENV
+ params:
+ max_peak_fdr=MAX_PEAK_FDR,
+ min_per_acc_peak=MIN_PER_ACC_PEAK,
+ shell:
+ """
+ HEADER=$(bgzip -cd {input.bed} | head -n 1 || true)
+ NC=$(echo $HEADER | awk '{{print NF}}' || true)
+ FIRE_CT=$((NC+1))
+ FIRE_ST=$((NC+2))
+ FIRE_EN=$((NC+3))
+ FIRE_SIZE=$((NC+4))
+ FIRE_ID=$((NC+5))
+
+ OUT_HEADER=$(printf "$HEADER\\tpeak_chrom\\tpeak_start\\tpeak_end\\tFIRE_IDs\\tFIRE_size_mean\\tFIRE_size_ssd\\tFIRE_start_ssd\\tFIRE_end_ssd")
+ echo $OUT_HEADER
+
+ ( \
+ printf "$OUT_HEADER\\n"; \
+ tabix -h {input.bed} {wildcards.chrom} \
+ | bioawk -tc hdr '(NR==1)||($is_local_max=="true")' \
+ | csvtk filter -tT -C '$' -f "FDR<={params.max_peak_fdr}" \
+ | csvtk filter -tT -C '$' -f "fire_coverage>1" \
+ | bioawk -tc hdr '(NR==1)||($fire_coverage/$coverage>={params.min_per_acc_peak})' \
+ | bedtools intersect -wa -wb -sorted -a - \
+ -b <(tabix {input.fire} {wildcards.chrom} \
+ | cut -f 1-3 \
+ | awk -v OFMT="%f" '{{print $0"\t"$3-$2"\t"NR}}' \
+ ) \
+ | bedtools groupby -g 1-$NC \
+ -o first,median,median,collapse,mean,sstdev,sstdev,sstdev \
+ -c $FIRE_CT,$FIRE_ST,$FIRE_EN,$FIRE_ID,$FIRE_SIZE,$FIRE_SIZE,$FIRE_ST,$FIRE_EN \
+ ) \
+ | hck -f 1,$FIRE_ST,$FIRE_EN,2-$NC,$FIRE_SIZE- \
+ | csvtk round -tT -C '$' -n 0 -f 2,3 \
+ | bedtools sort -header -i - \
+ | bgzip -@ {threads} \
+ > {output.bed}
+ """
+
+
+rule fdr_peaks_by_fire_elements_chromosome:
+ input:
+ bed=rules.helper_fdr_peaks_by_fire_elements.output.bed,
+ minimum=rules.coverage.output.minimum,
+ maximum=rules.coverage.output.maximum,
+ output:
+ bed=temp("temp/{sm}/fire-peaks/grouped-{chrom}-fire-peaks.bed.gz"),
+ threads: 8
+ conda:
+ "../envs/python.yaml"
+ params:
+ script=workflow.source_path("../scripts/merge_fire_peaks.py"),
+ min_frac_accessible=MIN_FRAC_ACCESSIBLE,
+ shell:
+ """
+ bgzip -cd {input.bed} \
+ | python {params.script} -v 1 \
+ --max-cov $(cat {input.maximum}) \
+ --min-cov $(cat {input.minimum}) \
+ --min-frac-accessible {params.min_frac_accessible} \
+ | bgzip -@ {threads} \
+ > {output.bed}
+ """
+
+
+rule fire_peaks:
+ input:
+ beds=expand(
+ rules.fdr_peaks_by_fire_elements_chromosome.output.bed,
+ chrom=get_chroms(),
+ allow_missing=True,
+ ),
+ output:
+ fofn=temp("temp/{sm}/fire-peaks/{sm}-fire-peaks.fofn"),
+ bed="results/{sm}/{sm}-fire-peaks.bed.gz",
+ tbi="results/{sm}/{sm}-fire-peaks.bed.gz.tbi",
+ threads: 8
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ printf "\nMaking FOFN\n"
+ echo {input.beds} > {output.fofn}
+
+ printf "\nMaking header\n"
+ ((cat $(cat {output.fofn}) | bgzip -cd | grep "^#" | head -n 1) || true) \
+ | bgzip -@ {threads} > {output.bed}
+
+ printf "\nConcatenating\n"
+ cat $(cat {output.fofn}) | bgzip -cd -@ {threads} | grep -v "^#" \
+ | bgzip -@ {threads} >> {output.bed}
+
+ printf "\nIndexing\n"
+ tabix -f -p bed {output.bed}
+ """
+
+
+rule wide_fire_peaks:
+ input:
+ bed=rules.fire_peaks.output.bed,
+ track=rules.pileup.output.bed,
+ fai=ancient(FAI),
+ output:
+ bed="results/{sm}/fire-peaks/{sm}-fire-wide-peaks.bed.gz",
+ tbi="results/{sm}/fire-peaks/{sm}-fire-wide-peaks.bed.gz.tbi",
+ bb="results/{sm}/trackHub/bb/fire-wide-peaks.bb",
+ conda:
+ DEFAULT_ENV
+ threads: 4
+ params:
+ nuc_size=config.get("nucleosome_size", 147),
+ max_peak_fdr=MAX_PEAK_FDR,
+ min_frac_acc=max(MIN_FRAC_ACCESSIBLE, MIN_PER_ACC_PEAK),
+ bed3_as=workflow.source_path("../templates/bed3.as"),
+ shell:
+ """
+ ( \
+ bgzip -cd {input.bed}; \
+ bioawk -tc hdr 'NR==1 || $FDR<={params.max_peak_fdr}' {input.track} \
+ | bioawk -tc hdr 'NR==1 || $coverage>0' \
+ | bioawk -tc hdr 'NR==1 || ($fire_coverage/$coverage>={params.min_frac_acc})' \
+ ) \
+ | cut -f 1-3 \
+ | bedtools sort \
+ | bedtools merge -d {params.nuc_size} \
+ | bgzip -@ {threads} \
+ > {output.bed}
+
+ bgzip -cd -@ 16 {output.bed} \
+ | bigtools bedtobigbed \
+ -s start -a {params.bed3_as} \
+ - {input.fai} {output.bb}
+
+ tabix -p bed {output.bed}
+ """
+
+
+rule one_percent_fire_peaks:
+ input:
+ bed=rules.fire_peaks.output.bed,
+ track=rules.pileup.output.bed,
+ output:
+ bed="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz",
+ tbi="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz.tbi",
+ wide="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz",
+ wtbi="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz.tbi",
+ threads: 4
+ conda:
+ DEFAULT_ENV
+ params:
+ nuc_size=config.get("nucleosome_size", 147),
+ shell:
+ """
+ bgzip -cd {input.bed} \
+ | csvtk filter -tT -C '$' -f "FDR<=0.01" \
+ | bgzip -@ {threads} \
+ > {output.bed}
+ tabix -f -p bed {output.bed}
+
+ ( \
+ bgzip -cd {output.bed}; \
+ bioawk -tc hdr '$FDR<=0.01' {input.track} \
+ ) \
+ | cut -f 1-3 \
+ | bedtools sort \
+ | bedtools merge -d {params.nuc_size} \
+ | bgzip -@ {threads} \
+ > {output.wide}
+ tabix -f -p bed {output.wide}
+ """
+
+
+rule peaks_vs_percent:
+ input:
+ bed=rules.fire_peaks.output.bed,
+ output:
+ fig1=report(
+ "results/{sm}/fire-peaks/{sm}.peaks-vs-percent.pdf",
+ category="Peak calls",
+ ),
+ threads: 8
+ conda:
+ "../envs/R.yaml"
+ script:
+ "../scripts/peaks-vs-percent.R"
diff --git a/workflow/rules/levio.smk b/workflow/rules/levio.smk
new file mode 100644
index 000000000..2999d2a72
--- /dev/null
+++ b/workflow/rules/levio.smk
@@ -0,0 +1,104 @@
+#
+# Index the chain file for leviosam2.
+#
+# Input here is a chain file that defines the alignment between the DSA and the reference genome
+# at a contig level (>100 kbp of alignment).
+#
+# The output is a special leviosam2 index file that is used to lift over the alignments from the DSA to the reference genome.
+#
+rule leviosam2_index:
+ input:
+ chain=DSA_CHAIN,
+ fai=FAI,
+ output:
+ index=temp("temp/{sm}/leviosam2-index/index.clft"),
+ conda:
+ DEFAULT_ENV
+ threads: 1
+ resources:
+ mem_mb=64 * 1024,
+ runtime=16 * 60,
+ shell:
+ """
+ {LEVIO_EXE} index \
+ -p results/leviosam2-index/index \
+ -c {input.chain} \
+ -F {input.fai}
+ """
+
+
+#
+# Lift over the alignments from the DSA to the reference genome using the chain file / leviosam2 index.
+#
+# This is not a realignment, but a lift over of the reads from the DSA to the reference genome.
+#
+rule leviosam2:
+ input:
+ bam=rules.fire.output.bam,
+ levio_index=rules.leviosam2_index.output.index,
+ ref=REF,
+ output:
+ lifted=temp("temp/{sm}/leviosam2/{sm}-{chrom}-committed.bam"),
+ deferred=temp("temp/{sm}/leviosam2/{sm}-{chrom}-deferred.bam"),
+ unliftable=temp("temp/{sm}/leviosam2/{sm}-{chrom}-unliftable.bam"),
+ threads: MAX_THREADS
+ resources:
+ mem_mb=MAX_THREADS * 4 * 1024,
+ runtime=16 * 60,
+ conda:
+ DEFAULT_ENV
+ params:
+ # maximum number of CIGAR opts to change, also the max gap size that can be spanned
+ G=config.get("levio_G", 100_000),
+ # Using -S clipped_frac 0.05 means when a read has >5% clipped bases, it is deferred. A lower value is more stringent (by deferring more reads).
+ # aln_score is the minumum score before the alignment is lifted over
+ S=config.get(
+ "levio_S",
+ f"-S mapq:0 -S hdist:{100_000} -S isize:{100_000} -S clipped_frac:0.95 -S aln_score:100",
+ ),
+ # number of reads per thread
+ T=config.get("levio_T", 4 * 256),
+ shell:
+ """
+ PRE="temp/{wildcards.sm}/leviosam2/{wildcards.sm}-{wildcards.chrom}"
+ {LEVIO_EXE} lift -t {threads} -a {input.cram} \
+ -T {params.T} -G {params.G} {params.S} \
+ -C {input.levio_index} -p $PRE -f {input.ref} -m -O bam
+ """
+ # ^ bam is the only option, no CRAM.
+ #samtools view -@ {threads} -u {input.cram} \
+
+
+#
+# This step sorted the leviosam2 output and fixes some tags in the CRAM file.
+#
+# Specifically, the MAPQ is reset to 60 for all reads that were previously aligned to the DSA.
+# And the XS tag is set to zero for all reads that were aligned to the DSA.
+# This is a hueristic that we may need to return to in the future.
+#
+# Other tags and fields like CIGAR, bitflags, and MD are correctly updated by
+# leviosam2 during liftover.
+#
+rule leviosam2_sorted:
+ input:
+ lifted=rules.leviosam2.output.lifted,
+ ref=REF,
+ output:
+ bam=temp("temp/{sm}/leviosam2/{sm}-{chrom}-sorted.bam"),
+ threads: SORT_THREADS
+ resources:
+ mem_mb=SORT_THREADS * 4 * 1024,
+ runtime=16 * 60,
+ conda:
+ DEFAULT_ENV
+ shell:
+ """
+ samtools sort {input.lifted} \
+ -@ {threads} -m 3G \
+ -o {output.bam}
+ """
+
+
+# params:
+# reset_mapq=workflow.source_path("../scripts/reset-mapq.py"),
+# python {params.reset_mapq} -t {threads} {input.lifted} \
From aee3cff53c5301763c1aece09daba76b4039acbe Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 22 Sep 2024 08:17:24 -0700
Subject: [PATCH 050/145] ruff check
---
workflow/scripts/cov.py | 2 --
workflow/scripts/fdr-table.py | 3 ---
workflow/scripts/merge_fire_peaks.py | 5 -----
workflow/scripts/trackhub.py | 8 ++++----
4 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/workflow/scripts/cov.py b/workflow/scripts/cov.py
index 6058fc166..4c69c48c4 100644
--- a/workflow/scripts/cov.py
+++ b/workflow/scripts/cov.py
@@ -1,7 +1,5 @@
import pandas as pd
-import numpy as np
import sys
-import os
import math
import polars as pl
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 3f3e689d7..48d055aad 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -1,7 +1,5 @@
#!/usr/bin/env python
import defopt
-import sys
-import gc
import logging
from pathlib import Path
from typing import Optional
@@ -9,7 +7,6 @@
import polars as pl
import numpy as np
import polars.selectors as cs
-from datetime import datetime
# from numba import njit
ROLLING_FIRE_SCORE_WINDOW_SIZE = 200
diff --git a/workflow/scripts/merge_fire_peaks.py b/workflow/scripts/merge_fire_peaks.py
index accb5273f..eaf0c33f5 100755
--- a/workflow/scripts/merge_fire_peaks.py
+++ b/workflow/scripts/merge_fire_peaks.py
@@ -1,14 +1,9 @@
#!/usr/bin/env python
-import os
import defopt
import logging
-from pathlib import Path
-import numpy as np
-from typing import Optional
import polars as pl
import io
import sys
-from numba import njit
def is_grouped_with_previous(
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index 9fbf0f8a6..9831732b5 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -255,10 +255,10 @@ def generate_trackhub(
)
if hap == "all":
- file = f"bb/fire-peaks.bb"
+ file = "bb/fire-peaks.bb"
trackDb.write(FIRE_TEMPLATE.format(file=file, sample=sample))
# add hap tracks
- file = f"bb/hap_differences.bb"
+ file = "bb/hap_differences.bb"
trackDb.write(HAP_TEMPLATE.format(file=file, sample=sample))
file = "bb/fire-wide-peaks.bb"
trackDb.write(WIDE_TEMPLATE.format(file=file, sample=sample))
@@ -290,8 +290,8 @@ def generate_trackhub(
trackDb.write(
FIRE_SCORE_AND_FDR.format(
sample=sample,
- fdr=f"bw/log_FDR.bw",
- score=f"bw/score.bw",
+ fdr="bw/log_FDR.bw",
+ score="bw/score.bw",
y_line=-10 * np.log10(0.05),
)
)
From 2c389a64f3548871304128ee4e773427650d8654 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:04:12 -0700
Subject: [PATCH 051/145] fmt
---
workflow/Snakefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index a82dfd2ef..bd3f67c4a 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -74,13 +74,14 @@ if FT_EXE is not "ft":
print(f"INFO: Using FT_EXE: {FT_EXE}", file=sys.stderr)
ONT = config.get("ont", False)
-USE_ONT = ""
if ONT:
ont_ml = config.get("ont_ml", 0)
if ont_ml != 0:
USE_ONT = f" --ont --ml {ont_ml} "
else:
USE_ONT = " --ont "
+else:
+ USE_ONT = ""
MIN_UNRELIABLE_COVERAGE_LEN = config.get("min_unreliable_coverage_len", 50)
From cad8e7ae72896ae28af4cbef5415a29f1b6ebb22 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:06:08 -0700
Subject: [PATCH 052/145] fmt
---
workflow/Snakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index bd3f67c4a..d86e08c54 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -70,7 +70,7 @@ LEVIO_EXE = config.get("levio_exe", "leviosam2")
# developer options
FT_EXE = config.get("ft_exe", "ft")
-if FT_EXE is not "ft":
+if FT_EXE != "ft":
print(f"INFO: Using FT_EXE: {FT_EXE}", file=sys.stderr)
ONT = config.get("ont", False)
From 61008bc1e62009a3116ad07511f653afa383cdb3 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:44:20 -0700
Subject: [PATCH 053/145] fmt
---
workflow/rules/track-hub.smk | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 028846dcb..bafdf5fb6 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -19,7 +19,8 @@ rule percent_accessible:
bgzip -cd {input.bed} \
| hck -f 1-3 {params.cols} \
| grep -v "^#" \
- | awk -v OFS='\t' '$5 > 0 {{print $1,$2,$3,$4*100/$5}}' \
+ | bioawk -t '$4>0 && $5>0' \
+ | bioawk -t '{{print $1,$2,$3,$4*100/$5}}' \
> {output.tmp}
# add fake if file is empty
@@ -80,7 +81,7 @@ rule fdr_track_to_bw:
"""
-rule fire_peaks_bb:
+rule fdr_peaks_by_fire_elements_to_bb:
input:
bed=rules.fire_peaks.output.bed,
fai=ancient(FAI),
From e9d847c86a9749cfde30ee76d68201604a2bb3de Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:47:37 -0700
Subject: [PATCH 054/145] fmt
---
workflow/rules/track-hub.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index bafdf5fb6..8114a048a 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -81,7 +81,7 @@ rule fdr_track_to_bw:
"""
-rule fdr_peaks_by_fire_elements_to_bb:
+rule fire_peaks_bb:
input:
bed=rules.fire_peaks.output.bed,
fai=ancient(FAI),
From 283f15e6011e51278c2c419c3e9d8f0f29331478 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:55:30 -0700
Subject: [PATCH 055/145] fmt
---
workflow/rules/common.smk | 11 +++++++++++
workflow/rules/track-hub.smk | 8 ++++----
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk
index 147b4f06f..d963fcc82 100644
--- a/workflow/rules/common.smk
+++ b/workflow/rules/common.smk
@@ -138,6 +138,17 @@ def hap_hck_columns(wc):
raise ValueError(f"Unknown haplotype {wc.hp}")
+def get_hap_col_suffix(wc):
+ if wc.hp == "all":
+ return ""
+ elif wc.hp == "hap1":
+ return "_H1"
+ elif wc.hp == "hap2":
+ return "_H2"
+ else:
+ raise ValueError(f"Unknown haplotype {wc.hp}")
+
+
def pileup_cut_cmd(wc):
if wc.hp == "all":
tail = ""
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 8114a048a..476903d34 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -11,16 +11,16 @@ rule percent_accessible:
resources:
mem_mb=get_mem_mb,
params:
- cols=hap_hck_columns,
+ suffix=get_hap_col_suffix,
nzooms=NZOOMS,
chrom=get_chroms()[0],
shell:
"""
bgzip -cd {input.bed} \
- | hck -f 1-3 {params.cols} \
+ | bioawk -tc hdr '$fire_coverage{params.suffix}>0' \
+ | bioawk -tc hdr \
+ '{{print $1,$2,$3,100*$fire_coverage{params.suffix}/$coverage{params.suffix}}}' \
| grep -v "^#" \
- | bioawk -t '$4>0 && $5>0' \
- | bioawk -t '{{print $1,$2,$3,$4*100/$5}}' \
> {output.tmp}
# add fake if file is empty
From dc0bb20508e48d0ca844b188c1563283d42a577e Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:56:30 -0700
Subject: [PATCH 056/145] fmt
---
workflow/rules/track-hub.smk | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 476903d34..e64dd1f91 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -18,6 +18,7 @@ rule percent_accessible:
"""
bgzip -cd {input.bed} \
| bioawk -tc hdr '$fire_coverage{params.suffix}>0' \
+ | bioawk -tc hdr '$coverage{params.suffix}>0' \
| bioawk -tc hdr \
'{{print $1,$2,$3,100*$fire_coverage{params.suffix}/$coverage{params.suffix}}}' \
| grep -v "^#" \
From 36fa569098e67574d48d9b8ec6636fa866ae4bc9 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 12:58:26 -0700
Subject: [PATCH 057/145] fmt
---
workflow/rules/track-hub.smk | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index e64dd1f91..2cedb850c 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -20,8 +20,7 @@ rule percent_accessible:
| bioawk -tc hdr '$fire_coverage{params.suffix}>0' \
| bioawk -tc hdr '$coverage{params.suffix}>0' \
| bioawk -tc hdr \
- '{{print $1,$2,$3,100*$fire_coverage{params.suffix}/$coverage{params.suffix}}}' \
- | grep -v "^#" \
+ 'NR>1{{print $1,$2,$3,100*$fire_coverage{params.suffix}/$coverage{params.suffix}}}' \
> {output.tmp}
# add fake if file is empty
From 1186bd8ef04f992125070b2d79db092db5222fc4 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 13:01:51 -0700
Subject: [PATCH 058/145] fmt
---
workflow/rules/track-hub.smk | 1 -
1 file changed, 1 deletion(-)
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index 2cedb850c..f20b153eb 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -17,7 +17,6 @@ rule percent_accessible:
shell:
"""
bgzip -cd {input.bed} \
- | bioawk -tc hdr '$fire_coverage{params.suffix}>0' \
| bioawk -tc hdr '$coverage{params.suffix}>0' \
| bioawk -tc hdr \
'NR>1{{print $1,$2,$3,100*$fire_coverage{params.suffix}/$coverage{params.suffix}}}' \
From 193b2c161d885c0152d7327968ba4d95b7441eb0 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 29 Sep 2024 13:07:18 -0700
Subject: [PATCH 059/145] fmt
---
workflow/rules/common.smk | 33 ---------------------------------
1 file changed, 33 deletions(-)
diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk
index d963fcc82..e8d8cefcc 100644
--- a/workflow/rules/common.smk
+++ b/workflow/rules/common.smk
@@ -105,39 +105,6 @@ def get_load(wc):
return 50
-def grep_command_for_el_type(wc):
- if wc.el_type == "nucleosome":
- return "awk '$10>1.0'"
- elif wc.el_type == "linker":
- return f"awk '$10<=1.0 && $10>{MIN_FIRE_FDR}'"
- elif wc.el_type == "fire":
- return f"awk '$10<={MIN_FIRE_FDR}'"
- else:
- raise ValueError(f"Unknown element type {wc.el_type}")
-
-
-def hap_grep_term(wc):
- if wc.hp == "all":
- return '""'
- elif wc.hp == "hap1":
- return "H1"
- elif wc.hp == "hap2":
- return "H2"
- else:
- raise ValueError(f"Unknown haplotype {wc.hp}")
-
-
-def hap_hck_columns(wc):
- if wc.hp == "all":
- return "-F fire_coverage -F coverage"
- elif wc.hp == "hap1":
- return "-F fire_coverage_H1 -F coverage_H1"
- elif wc.hp == "hap2":
- return "-F fire_coverage_H2 -F coverage_H2"
- else:
- raise ValueError(f"Unknown haplotype {wc.hp}")
-
-
def get_hap_col_suffix(wc):
if wc.hp == "all":
return ""
From 86c7de2ae84bd6fde1588867703795e99edbaa97 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 08:10:32 -0700
Subject: [PATCH 060/145] fmt
---
workflow/Snakefile | 3 ++-
workflow/scripts/trackhub.py | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index d86e08c54..66cfe51d2 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -57,6 +57,7 @@ NZOOMS = config.get("nzooms", 10)
# Misc sets of wildcards
haps = ["all", "hap1", "hap2", "unk"]
not_unk = ["all", "hap1", "hap2"]
+all_only = ["all"]
types = ["fdr", "acc", "link", "nuc"]
types_to_col = {"fdr": 4, "acc": 5, "link": 6, "nuc": 7}
bw_types = ["log_FDR"] # "score", "FDR",
@@ -150,7 +151,7 @@ rule all:
expand(
rules.element_coverages_bw.output.bw,
sm=MANIFEST.index,
- hp=not_unk,
+ hp=all_only,
el_type=el_types,
),
expand(rules.trackhub.output.hub, sm=MANIFEST.index),
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index 9831732b5..da6de6ac6 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -273,7 +273,7 @@ def generate_trackhub(
elif hap == "hap2":
color = "255,0,0"
- if hap != "unk":
+ if hap == "all":
viz = "full" if hap != "all" else "hide"
trackDb.write(
PER_ACC_TEMPLATE.format(
From 13f6940ea79ea73402e41de6eed1fb2b6ffc8d69 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 08:12:37 -0700
Subject: [PATCH 061/145] fmt
---
workflow/Snakefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 66cfe51d2..1f3dabefb 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -142,7 +142,6 @@ rule all:
expand(rules.hap_differences.output.fig2, sm=MANIFEST.index),
expand(rules.hap_differences.output.bed, sm=MANIFEST.index),
# trackhub
- expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
expand(rules.fire_peaks_bb.output.bb, sm=MANIFEST.index),
expand(rules.percent_accessible.output.bw, hp=not_unk, sm=MANIFEST.index),
expand(rules.decorate_fibers_1.output.bb, sm=MANIFEST.index),
@@ -155,3 +154,5 @@ rule all:
el_type=el_types,
),
expand(rules.trackhub.output.hub, sm=MANIFEST.index),
+ # UNUSED
+ # expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
\ No newline at end of file
From c02b0aeda6a0c8cbeb754375ea952133469b5d3f Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 08:19:25 -0700
Subject: [PATCH 062/145] fmt
---
workflow/scripts/trackhub.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py
index da6de6ac6..f0f3e28f6 100755
--- a/workflow/scripts/trackhub.py
+++ b/workflow/scripts/trackhub.py
@@ -238,7 +238,7 @@ def generate_trackhub(
else:
viz = "hide"
# add coverage tracks
- if hap != "unk":
+ if hap == "all":
acc = f"bw/{hap}.fire.coverage.bw"
nuc = f"bw/{hap}.nucleosome.coverage.bw"
link = f"bw/{hap}.linker.coverage.bw"
@@ -273,7 +273,7 @@ def generate_trackhub(
elif hap == "hap2":
color = "255,0,0"
- if hap == "all":
+ if hap != "unk":
viz = "full" if hap != "all" else "hide"
trackDb.write(
PER_ACC_TEMPLATE.format(
From bf1671f6530829641de53d6aefed3a3518445f32 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 09:44:27 -0700
Subject: [PATCH 063/145] more consistent formating
---
workflow/Snakefile | 1 -
workflow/rules/apply-model.smk | 4 ++--
workflow/rules/coverages.smk | 16 ++++++++--------
workflow/rules/fire-peaks.smk | 2 +-
workflow/rules/stats.smk | 8 ++++----
5 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 1f3dabefb..c965ea8a1 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -117,7 +117,6 @@ localrules:
rule all:
input:
# coverage information
- expand(rules.genome_bedgraph.output, sm=MANIFEST.index),
expand(rules.coverage.output, sm=MANIFEST.index),
expand(rules.exclude_from_shuffle.output, sm=MANIFEST.index),
expand(rules.unreliable_coverage_regions.output, sm=MANIFEST.index),
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index a84067c7d..095372868 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -34,8 +34,8 @@ rule merged_fire_bam:
fai=ancient(FAI),
bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True),
output:
- cram="results/{sm}/{sm}.fire.cram",
- crai="results/{sm}/{sm}.fire.cram.crai",
+ cram="results/{sm}/{sm}-fire.cram",
+ crai="results/{sm}/{sm}-fire.cram.crai",
threads: 16
resources:
mem_mb=16 * 1024,
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index 52fac4c05..8b0f07df5 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -8,15 +8,13 @@ rule genome_bedgraph:
cram=rules.merged_fire_bam.output.cram,
crai=rules.merged_fire_bam.output.crai,
output:
- bg="results/{sm}/coverage/{sm}.bed.gz",
- tbi="results/{sm}/coverage/{sm}.bed.gz.tbi",
+ bg=temp("temp/{sm}/coverage/{sm}.bed.gz"),
+ tbi=temp("temp/{sm}/coverage/{sm}.bed.gz.tbi"),
threads: 16
shadow:
"minimal"
conda:
DEFAULT_ENV
- benchmark:
- "results/{sm}/benchmarks/genome_bedgraph/{sm}.txt"
shell:
"""
mosdepth -f {input.ref} -t {threads} tmp {input.cram}
@@ -32,9 +30,9 @@ rule coverage:
input:
bg=rules.genome_bedgraph.output.bg,
output:
- cov="results/{sm}/coverage/{sm}.median.coverage.txt",
- minimum="results/{sm}/coverage/{sm}.minimum.coverage.txt",
- maximum="results/{sm}/coverage/{sm}.maximum.coverage.txt",
+ cov="results/{sm}/coverage/{sm}-median-coverage.txt",
+ minimum="results/{sm}/coverage/{sm}-minimum-coverage.txt",
+ maximum="results/{sm}/coverage/{sm}-maximum-coverage.txt",
conda:
"../envs/python.yaml"
threads: 1
@@ -94,6 +92,8 @@ rule fiber_locations:
threads: 4
conda:
DEFAULT_ENV
+ params:
+ max_frac_overlap=0.2,
shell:
"""
cat {input.fibers} > {output.bed}
@@ -102,7 +102,7 @@ rule fiber_locations:
# get filtered fiber locations
MIN=$(cat {input.minimum})
MAX=$(cat {input.maximum})
- bedtools intersect -header -sorted -v -f 0.2 \
+ bedtools intersect -header -sorted -v -f {params.max_frac_overlap} \
-a {output.bed} \
-b <(bgzip -cd {input.bg} | awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX') \
| bgzip -@ {threads} \
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index d4638b2d6..a8af9e571 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -348,7 +348,7 @@ rule peaks_vs_percent:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/fire-peaks/{sm}.peaks-vs-percent.pdf",
+ "results/{sm}/figures/{sm}-peaks-vs-percent.pdf",
category="Peak calls",
),
threads: 8
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index 6fda2d7d9..0de964df4 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -54,7 +54,7 @@ rule ft_qc:
input:
cram=rules.merged_fire_bam.output.cram,
output:
- tbl="results/{sm}/{sm}.fire.qc.tbl.gz",
+ tbl="results/{sm}/{sm}-fire-qc.tbl.gz",
conda:
DEFAULT_ENV
threads: 16
@@ -69,14 +69,14 @@ rule hap_differences:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/hap1-vs-hap2/hap1-vs-hap2.pdf",
+ "results/{sm}/figures/{sm}-hap1-vs-hap2.pdf",
category="Haplotype selectivity",
),
fig2=report(
- "results/{sm}/hap1-vs-hap2/hap1-vs-hap2-volcano.pdf",
+ "results/{sm}/figures/{sm}-hap1-vs-hap2-volcano.pdf",
category="Haplotype selectivity",
),
- bed="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed.gz",
+ bed="results/{sm}/hap1-vs-hap2/{sm}-hap-differences.bed.gz",
bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9"),
threads: 8
conda:
From 5c2b206fb2b0cca752e4a305e06e7fdfc214b91d Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 09:52:19 -0700
Subject: [PATCH 064/145] more consistent formating
---
workflow/rules/apply-model.smk | 2 +-
workflow/rules/coverages.smk | 14 +++++++-------
workflow/rules/decorated-reads.smk | 4 ++--
workflow/rules/stats.smk | 8 ++++----
4 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 095372868..25bff023d 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -43,7 +43,7 @@ rule merged_fire_bam:
conda:
DEFAULT_ENV
benchmark:
- "results/{sm}/benchmarks/merged_fire_bam/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/{sm}-merged-fire-bam.txt"
shell:
"""
samtools merge -@ {threads} -u {input.bams} -o - \
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index 8b0f07df5..96f6bae7a 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -30,16 +30,16 @@ rule coverage:
input:
bg=rules.genome_bedgraph.output.bg,
output:
- cov="results/{sm}/coverage/{sm}-median-coverage.txt",
- minimum="results/{sm}/coverage/{sm}-minimum-coverage.txt",
- maximum="results/{sm}/coverage/{sm}-maximum-coverage.txt",
+ cov="results/{sm}/additional-outputs/coverage/{sm}-median-coverage.txt",
+ minimum="results/{sm}/additional-outputs/coverage/{sm}-minimum-coverage.txt",
+ maximum="results/{sm}/additional-outputs/coverage/{sm}-maximum-coverage.txt",
conda:
"../envs/python.yaml"
threads: 1
resources:
mem_mb=64 * 1024,
benchmark:
- "results/{sm}/benchmarks/coverage/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/coverage/{sm}.txt"
params:
coverage_within_n_sd=COVERAGE_WITHIN_N_SD,
min_coverage=MIN_COVERAGE,
@@ -119,7 +119,7 @@ rule exclude_from_shuffle:
filtered=rules.fiber_locations.output.filtered,
fai=ancient(FAI),
output:
- bed="results/{sm}/coverage/exclude-from-shuffles.bed.gz",
+ bed="results/{sm}/additional-outputs/coverage/exclude-from-shuffles.bed.gz",
threads: 4
conda:
DEFAULT_ENV
@@ -147,8 +147,8 @@ rule unreliable_coverage_regions:
maximum=rules.coverage.output.maximum,
fai=ancient(FAI),
output:
- bed="results/{sm}/coverage/unreliable-coverage-regions.bed.gz",
- bed_tbi="results/{sm}/coverage/unreliable-coverage-regions.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs/coverage/unreliable-coverage-regions.bed.gz",
+ bed_tbi="results/{sm}/additional-outputs/coverage/unreliable-coverage-regions.bed.gz.tbi",
bb="results/{sm}/trackHub/bb/unreliable-coverage-regions.bb",
threads: 4
params:
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index ff9b6cf97..6b89744f6 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -38,7 +38,7 @@ rule decorate_fibers_1:
bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"),
bb="results/{sm}/trackHub/bb/fire-fibers.bb",
benchmark:
- "results/{sm}/benchmarks/decorate_fibers_1/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/decorate_fibers_1/{sm}.txt"
threads: 8
resources:
runtime=240,
@@ -82,7 +82,7 @@ rule decorate_fibers_2:
bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb",
bed=temp("results/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
benchmark:
- "results/{sm}/benchmarks/decorate_fibers_2/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/decorate_fibers_2/{sm}.txt"
threads: 8
resources:
runtime=60 * 16,
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index 0de964df4..8870cc866 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -32,7 +32,7 @@ rule fires_in_peaks:
peaks=rules.fire_peaks.output.bed,
output:
tmp=temp("temp/{sm}/tmp.FIREs-in-peaks.bed"),
- txt="results/{sm}/fire-peaks/fires-in-peaks.txt",
+ txt="results/{sm}/additional-outputs/fire-peaks/{sm}-fires-in-peaks.txt",
threads: 8
conda:
DEFAULT_ENV
@@ -69,14 +69,14 @@ rule hap_differences:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/figures/{sm}-hap1-vs-hap2.pdf",
+ "results/{sm}/additional-outputs/figures/{sm}-hap1-vs-hap2.pdf",
category="Haplotype selectivity",
),
fig2=report(
- "results/{sm}/figures/{sm}-hap1-vs-hap2-volcano.pdf",
+ "results/{sm}/additional-outputs/figures/{sm}-hap1-vs-hap2-volcano.pdf",
category="Haplotype selectivity",
),
- bed="results/{sm}/hap1-vs-hap2/{sm}-hap-differences.bed.gz",
+ bed="results/{sm}/additional-outputs/hap1-vs-hap2/{sm}-hap-differences.bed.gz",
bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9"),
threads: 8
conda:
From adba0c545c475514b26f8a8c2dcf777c774592fc Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 09:56:30 -0700
Subject: [PATCH 065/145] more consistent formating
---
workflow/rules/fire-peaks.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index a8af9e571..71963790f 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -348,7 +348,7 @@ rule peaks_vs_percent:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/figures/{sm}-peaks-vs-percent.pdf",
+ "results/{sm}/additional-outputs/figures/{sm}-peaks-vs-percent.pdf",
category="Peak calls",
),
threads: 8
From 7244ba35751e8ef3643a14044b18b3b600e2824b Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 09:58:25 -0700
Subject: [PATCH 066/145] more consistent formating
---
workflow/rules/fire-peaks.smk | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index 71963790f..01670cb23 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -68,7 +68,7 @@ rule fdr_table:
input:
shuffled=rules.shuffled_pileup.output.bed,
output:
- tbl="results/{sm}/fire-peaks/{sm}-fire-score-to-fdr.tbl",
+ tbl="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-score-to-fdr.tbl",
conda:
"../envs/python.yaml"
params:
@@ -274,8 +274,8 @@ rule wide_fire_peaks:
track=rules.pileup.output.bed,
fai=ancient(FAI),
output:
- bed="results/{sm}/fire-peaks/{sm}-fire-wide-peaks.bed.gz",
- tbi="results/{sm}/fire-peaks/{sm}-fire-wide-peaks.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-wide-peaks.bed.gz",
+ tbi="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-wide-peaks.bed.gz.tbi",
bb="results/{sm}/trackHub/bb/fire-wide-peaks.bb",
conda:
DEFAULT_ENV
@@ -313,10 +313,10 @@ rule one_percent_fire_peaks:
bed=rules.fire_peaks.output.bed,
track=rules.pileup.output.bed,
output:
- bed="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz",
- tbi="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz.tbi",
- wide="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz",
- wtbi="results/{sm}/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz",
+ tbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz.tbi",
+ wide="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz",
+ wtbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz.tbi",
threads: 4
conda:
DEFAULT_ENV
From 9de3ff6be63ec44a9410373c4af598276b7e4289 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 10:02:42 -0700
Subject: [PATCH 067/145] more consistent formating
---
workflow/Snakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index c965ea8a1..4f5524563 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -154,4 +154,4 @@ rule all:
),
expand(rules.trackhub.output.hub, sm=MANIFEST.index),
# UNUSED
- # expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
\ No newline at end of file
+ # expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
From 3a1ae6618db3e7b674c0fff5c9541467900beef9 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 10:03:53 -0700
Subject: [PATCH 068/145] more consistent formating
---
profiles/slurm-executor/config.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/profiles/slurm-executor/config.yaml b/profiles/slurm-executor/config.yaml
index 9bee77e83..06588dfd9 100644
--- a/profiles/slurm-executor/config.yaml
+++ b/profiles/slurm-executor/config.yaml
@@ -6,6 +6,7 @@ default-resources:
- disk_mb=4096
- mem_mb=16096
- runtime=120
+ - slurm_partition=cpu-g2
# you can change the default account or partition by them to the default-resources.
# Without these options it will default to stergachislab and compute when using hyak.
# - slurm_partition=ckpt
From a2a9ce6ffe79fc51258164fc24af3336c82e93e5 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 10:06:07 -0700
Subject: [PATCH 069/145] more consistent formating
---
workflow/Snakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 4f5524563..2f1554a07 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -4,7 +4,7 @@ import sys
import os
from snakemake.utils import min_version
-min_version("8.12.0")
+min_version("8.20.4")
# forces pandas pysam etc to be available in the environment
conda: "envs/runner.yaml"
From f8adcef34661443bd9c4d2b0ef0a39f483f67ed4 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 12:47:07 -0700
Subject: [PATCH 070/145] more consistent formating
---
workflow/rules/stats.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index 8870cc866..aa4971edc 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -76,7 +76,7 @@ rule hap_differences:
"results/{sm}/additional-outputs/figures/{sm}-hap1-vs-hap2-volcano.pdf",
category="Haplotype selectivity",
),
- bed="results/{sm}/additional-outputs/hap1-vs-hap2/{sm}-hap-differences.bed.gz",
+ bed="results/{sm}/{sm}-hap-differences.bed.gz",
bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9"),
threads: 8
conda:
From 991c4d1619927ae40c58955502d8eaf56add31a1 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 14:14:44 -0700
Subject: [PATCH 071/145] more consistent formating
---
config/README.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/config/README.md b/config/README.md
index 0d85d6cf1..2dda19989 100644
--- a/config/README.md
+++ b/config/README.md
@@ -17,6 +17,11 @@ manifest: config/config.tbl
## Optional input options
+Specify that the input BAM file is an ONT Fiber-seq file. Default is `False`.
+```
+ont: True
+```
+
Max number of threads to use in very distributed steps:
```
max_t: 4
From e6bc9f29c8972fd08a9ee818cec675af8e0760e9 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 15:12:44 -0700
Subject: [PATCH 072/145] more consistent formating
---
workflow/Snakefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 2f1554a07..04b46bd16 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -130,7 +130,8 @@ rule all:
# Stats and Tables
expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
expand(rules.ft_qc.output.tbl, sm=MANIFEST.index),
- # FDR results
+ # FIRE peaks
+ expand(rules.fdr_table.output.tbl, sm=MANIFEST.index),
expand(rules.pileup.output.bed, sm=MANIFEST.index),
expand(rules.fire_peaks.output.bed, sm=MANIFEST.index),
expand(rules.wide_fire_peaks.output.bed, sm=MANIFEST.index),
From 988dec13383f2366d02261d372f48ec3134a1821 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 16:51:59 -0700
Subject: [PATCH 073/145] more consistent formating
---
workflow/rules/decorated-reads.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 6b89744f6..0783f702e 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -80,7 +80,7 @@ rule decorate_fibers_2:
fai=ancient(FAI),
output:
bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb",
- bed=temp("results/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
+ bed=temp("temp/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
benchmark:
"results/{sm}/additional-outputs/benchmarks/decorate_fibers_2/{sm}.txt"
threads: 8
From bb240763c2dc18301cae2767d9b785e7659b3139 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Mon, 30 Sep 2024 16:52:51 -0700
Subject: [PATCH 074/145] more consistent formating
---
workflow/rules/apply-model.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 25bff023d..d09b5781f 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -90,7 +90,7 @@ rule fire_sites:
rules.fire_sites_chrom.output.bed, chrom=get_chroms(), allow_missing=True
),
output:
- bed="results/{sm}/{sm}-fire-elements.bed.gz",
+ bed="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-elements.bed.gz",
threads: 8
conda:
DEFAULT_ENV
From e726723a9f65ed23d5885c64021d314d82973a98 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Tue, 1 Oct 2024 12:28:09 -0700
Subject: [PATCH 075/145] more consistent formating
---
workflow/Snakefile | 6 ++++--
workflow/rules/levio.smk | 2 --
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 04b46bd16..2e0c4821a 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -154,5 +154,7 @@ rule all:
el_type=el_types,
),
expand(rules.trackhub.output.hub, sm=MANIFEST.index),
- # UNUSED
- # expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
+
+
+# UNUSED
+# expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types),
diff --git a/workflow/rules/levio.smk b/workflow/rules/levio.smk
index 2999d2a72..e6d4b1b16 100644
--- a/workflow/rules/levio.smk
+++ b/workflow/rules/levio.smk
@@ -65,8 +65,6 @@ rule leviosam2:
-T {params.T} -G {params.G} {params.S} \
-C {input.levio_index} -p $PRE -f {input.ref} -m -O bam
"""
- # ^ bam is the only option, no CRAM.
- #samtools view -@ {threads} -u {input.cram} \
#
From 89c9893fe2634037ffd0626b7e325ed5c969ec78 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 9 Oct 2024 12:18:08 -0700
Subject: [PATCH 076/145] more name changes
---
workflow/rules/apply-model.smk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index d09b5781f..87300049a 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -34,8 +34,8 @@ rule merged_fire_bam:
fai=ancient(FAI),
bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True),
output:
- cram="results/{sm}/{sm}-fire.cram",
- crai="results/{sm}/{sm}-fire.cram.crai",
+ cram="results/{sm}/{sm}-no-seq-qual-fire.cram",
+ crai="results/{sm}/{sm}-no-seq-qual-fire.cram.crai",
threads: 16
resources:
mem_mb=16 * 1024,
From 806ab3a5f4ddb2fed5173a2bc8c898f622cd648e Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 9 Oct 2024 14:32:05 -0700
Subject: [PATCH 077/145] more name changes
---
workflow/rules/fire-peaks.smk | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index 01670cb23..874e26c18 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -1,6 +1,7 @@
rule filtered_and_shuffled_fiber_locations_chromosome:
input:
filtered=rules.fiber_locations.output.filtered,
+ filtered_tbi=rules.fiber_locations.output.filtered_tbi,
exclude=rules.exclude_from_shuffle.output.bed,
fai=ancient(FAI),
output:
From ed89b163658cd2ab7ebcf87df28c2445bf5e22c0 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 9 Oct 2024 15:18:27 -0700
Subject: [PATCH 078/145] more name changes
---
workflow/profiles/default/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index 6773ddd28..31812777a 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -5,8 +5,8 @@ restart-times: 0
software-deployment-method:
- apptainer
- conda
-printshellcmds: True
show-failed-logs: True
cores: 32
local-cores: 4
+# printshellcmds: True
quiet: rules # all rules or progress, cannot use all because it hides the unlock error message (and others?)
\ No newline at end of file
From dc5130f494122b11af757de031f8e1dd60510901 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 9 Oct 2024 19:47:17 -0700
Subject: [PATCH 079/145] more name changes
---
workflow/scripts/fdr-table.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 48d055aad..1405f896d 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -18,7 +18,9 @@ def find_nearest(array, value):
idx[idx >= len(array)] = len(array) - 1
return idx
-
+# ['#chrom', 'start', 'end', 'coverage', 'fire_coverage', 'score', 'nuc_coverage', 'msp_coverage',
+# 'coverage_H1', 'fire_coverage_H1', 'score_H1', 'nuc_coverage_H1', 'msp_coverage_H1',
+# 'coverage_H2', 'fire_coverage_H2', 'score_H2', 'nuc_coverage_H2', 'msp_coverage_H2']
def read_pileup_file(infile, nrows):
# get the header from the first line of the file
header = pl.read_csv(infile, separator="\t", n_rows=1).columns
@@ -32,6 +34,7 @@ def read_pileup_file(infile, nrows):
comment_prefix="#",
n_rows=nrows,
infer_schema_length=100000,
+ schema_overrides={"score": float},
)
logging.info(f"Done reading pileup file:\n{pileup}")
return pileup
From e53d29957728af56d1b6f8574f5b5f1fc3b79bf8 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 9 Oct 2024 19:50:55 -0700
Subject: [PATCH 080/145] more name changes
---
workflow/scripts/fdr-table.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 1405f896d..391410c48 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -18,8 +18,9 @@ def find_nearest(array, value):
idx[idx >= len(array)] = len(array) - 1
return idx
-# ['#chrom', 'start', 'end', 'coverage', 'fire_coverage', 'score', 'nuc_coverage', 'msp_coverage',
-# 'coverage_H1', 'fire_coverage_H1', 'score_H1', 'nuc_coverage_H1', 'msp_coverage_H1',
+
+# ['#chrom', 'start', 'end', 'coverage', 'fire_coverage', 'score', 'nuc_coverage', 'msp_coverage',
+# 'coverage_H1', 'fire_coverage_H1', 'score_H1', 'nuc_coverage_H1', 'msp_coverage_H1',
# 'coverage_H2', 'fire_coverage_H2', 'score_H2', 'nuc_coverage_H2', 'msp_coverage_H2']
def read_pileup_file(infile, nrows):
# get the header from the first line of the file
@@ -34,7 +35,7 @@ def read_pileup_file(infile, nrows):
comment_prefix="#",
n_rows=nrows,
infer_schema_length=100000,
- schema_overrides={"score": float},
+ schema_overrides={"score": float, "score_H1": float, "score_H2": float},
)
logging.info(f"Done reading pileup file:\n{pileup}")
return pileup
From c92b426a0da4d121bcf396b4ddbd891dce39cd6f Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Wed, 9 Oct 2024 22:13:00 -0700
Subject: [PATCH 081/145] more name changes
---
workflow/profiles/default/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml
index 31812777a..54c9b54ac 100644
--- a/workflow/profiles/default/config.yaml
+++ b/workflow/profiles/default/config.yaml
@@ -9,4 +9,4 @@ show-failed-logs: True
cores: 32
local-cores: 4
# printshellcmds: True
-quiet: rules # all rules or progress, cannot use all because it hides the unlock error message (and others?)
\ No newline at end of file
+# quiet: rules # all rules or progress, cannot use all because it hides the unlock error message (and others?)
\ No newline at end of file
From 47b0ab33fe0e149a288217dddb6ffc26609e1bdb Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 06:49:52 -0700
Subject: [PATCH 082/145] more name changes
---
workflow/scripts/fdr-table.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 391410c48..c74b428e6 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -25,6 +25,12 @@ def find_nearest(array, value):
def read_pileup_file(infile, nrows):
# get the header from the first line of the file
header = pl.read_csv(infile, separator="\t", n_rows=1).columns
+ # add scema overrides for the score columns
+ schema_overrides={}
+ for n in ["score", "score_H1", "score_H2", "score_shuffled"]:
+ if n in header:
+ schema_overrides[n] = float
+
logging.info(f"Header of the pileup file:\n{header}")
# read the file
pileup = pl.read_csv(
@@ -35,7 +41,7 @@ def read_pileup_file(infile, nrows):
comment_prefix="#",
n_rows=nrows,
infer_schema_length=100000,
- schema_overrides={"score": float, "score_H1": float, "score_H2": float},
+ schema_overrides=schema_overrides,
)
logging.info(f"Done reading pileup file:\n{pileup}")
return pileup
From b1bd08b7c4f3bc5d2bc131b220daa1d89820c458 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 06:50:10 -0700
Subject: [PATCH 083/145] more name changes
---
workflow/scripts/fdr-table.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index c74b428e6..42fa0d929 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -32,6 +32,7 @@ def read_pileup_file(infile, nrows):
schema_overrides[n] = float
logging.info(f"Header of the pileup file:\n{header}")
+ logging.info(f"Schema overrides for the pileup file:\n{schema_overrides}")
# read the file
pileup = pl.read_csv(
infile,
From 3ef814f526cd4d7ba6d770814a643356ee2fdbe8 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 06:56:43 -0700
Subject: [PATCH 084/145] more name changes
---
workflow/scripts/fdr-table.py | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 42fa0d929..38cbead13 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -26,13 +26,14 @@ def read_pileup_file(infile, nrows):
# get the header from the first line of the file
header = pl.read_csv(infile, separator="\t", n_rows=1).columns
# add scema overrides for the score columns
- schema_overrides={}
+ schema_overrides = {}
for n in ["score", "score_H1", "score_H2", "score_shuffled"]:
if n in header:
schema_overrides[n] = float
-
+
logging.info(f"Header of the pileup file:\n{header}")
logging.info(f"Schema overrides for the pileup file:\n{schema_overrides}")
+
# read the file
pileup = pl.read_csv(
infile,
@@ -115,9 +116,19 @@ def fdr_table_from_scores(fire_scores):
return results
-def make_fdr_table(infile, outfile, nrows):
+def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
# read the pileup file
pileup = read_pileup_file(infile, nrows)
+ # filter on coverages if needed
+ if max_cov is not None:
+ pileup = pileup.filter(
+ pl.col("coverage") <= max_cov, pl.col("coverage_shuffled") <= max_cov
+ )
+ if min_cov is not None:
+ pileup = pileup.filter(
+ pl.col("coverage") >= min_cov, pl.col("coverage_shuffled") >= min_cov
+ )
+
# aggregate by the score and weight the score by the number of bases
fire_scores = (
pileup.melt(
@@ -137,6 +148,8 @@ def make_fdr_table(infile, outfile, nrows):
.agg(pl.sum("bp").alias("bp"))
.sort("score", descending=True)
)
+
+
logging.info(f"Done aggregating pileup file:\n{fire_scores}")
fdr_table = fdr_table_from_scores(fire_scores)
fdr_table.to_csv(outfile, sep="\t", index=False)
@@ -244,6 +257,8 @@ def main(
*,
fdr_table: Path = None,
nrows: Optional[int] = None,
+ max_cov: Optional[int] = None,
+ min_cov: Optional[int] = None,
verbose: int = 0,
):
"""
@@ -263,7 +278,7 @@ def main(
fdr_table = read_fdr_table(fdr_table)
apply_fdr_table(infile, outfile, fdr_table, nrows)
else:
- fdr_table = make_fdr_table(infile, outfile, nrows)
+ fdr_table = make_fdr_table(infile, outfile, nrows, min_cov=min_cov, max_cov=max_cov)
return 0
From 7e7133b8c8769a6ead801fb88054b79729dba4b5 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 06:59:26 -0700
Subject: [PATCH 085/145] more name changes
---
workflow/rules/fire-peaks.smk | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index 874e26c18..55f0e513c 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -68,6 +68,8 @@ rule shuffled_pileup:
rule fdr_table:
input:
shuffled=rules.shuffled_pileup.output.bed,
+ minimum=rules.coverage.output.minimum,
+ maximum=rules.coverage.output.maximum,
output:
tbl="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-score-to-fdr.tbl",
conda:
@@ -78,7 +80,9 @@ rule fdr_table:
mem_mb=get_mem_mb,
shell:
"""
- python {params.script} -v 1 {input.shuffled} {output.tbl}
+ MIN=$(cat {input.minimum})
+ MAX=$(cat {input.maximum})
+ python {params.script} -v 1 {input.shuffled} {output.tbl} --max-cov $MAX --min-cov $MIN
"""
From e5185fff7a6d64f0da07aa7da198883dc0f46317 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 07:20:41 -0700
Subject: [PATCH 086/145] more name changes
---
workflow/scripts/fdr-table.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 38cbead13..2ad08b6fa 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -149,6 +149,9 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
.sort("score", descending=True)
)
+ # count bases in each category
+ sums = fire_scores.groupby("is_real").agg(pl.sum("bp").alias("bp")/1_000_000)
+ logging.info(f"Number of Mbp in each category:\n{sums}")
logging.info(f"Done aggregating pileup file:\n{fire_scores}")
fdr_table = fdr_table_from_scores(fire_scores)
From aa4b7098c6588e6a5c6c97098e975cd8ca148cba Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 07:21:05 -0700
Subject: [PATCH 087/145] more name changes
---
workflow/scripts/fdr-table.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 2ad08b6fa..6d92ff50d 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -150,7 +150,7 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
)
# count bases in each category
- sums = fire_scores.groupby("is_real").agg(pl.sum("bp").alias("bp")/1_000_000)
+ sums = fire_scores.group_by("is_real").agg(pl.sum("bp").alias("bp")/1_000_000)
logging.info(f"Number of Mbp in each category:\n{sums}")
logging.info(f"Done aggregating pileup file:\n{fire_scores}")
From a71472b0d956a097b7b40e4489bb5794e195295b Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Thu, 10 Oct 2024 07:21:50 -0700
Subject: [PATCH 088/145] more name changes
---
workflow/scripts/fdr-table.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 6d92ff50d..0187c5e2e 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -150,7 +150,7 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
)
# count bases in each category
- sums = fire_scores.group_by("is_real").agg(pl.sum("bp").alias("bp")/1_000_000)
+ sums = fire_scores.group_by("is_real").agg(pl.sum("bp").alias("Mbp")/1_000_000)
logging.info(f"Number of Mbp in each category:\n{sums}")
logging.info(f"Done aggregating pileup file:\n{fire_scores}")
From eefdb332f317dda8fe1de6ffb9930fedc92b8401 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 07:32:17 -0700
Subject: [PATCH 089/145] place conda env first
---
workflow/Snakefile | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 2e0c4821a..128aabaad 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -1,3 +1,9 @@
+# forces pandas pysam etc to be available in the environment
+conda: "envs/runner.yaml"
+# Force users to use the same underlying OS via singularity.
+# container: "docker://condaforge/mambaforge:23.3.1-1"
+# container: "docker://continuumio/miniconda3"
+
import pandas as pd
import math
import sys
@@ -6,14 +12,6 @@ from snakemake.utils import min_version
min_version("8.20.4")
-# forces pandas pysam etc to be available in the environment
-conda: "envs/runner.yaml"
-
-# Force users to use the same underlying OS via singularity.
-# container: "docker://condaforge/mambaforge:23.3.1-1"
-# container: "docker://continuumio/miniconda3"
-
-
# setup shared functions
include: "rules/common.smk"
From ba094e0f3275b3c9612ccde2bec8c950be1973e0 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 08:26:09 -0700
Subject: [PATCH 090/145] test runner
---
workflow/envs/runner.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/runner.yaml b/workflow/envs/runner.yaml
index 211d7e503..3e6e7e2cb 100644
--- a/workflow/envs/runner.yaml
+++ b/workflow/envs/runner.yaml
@@ -7,7 +7,7 @@ channels:
dependencies:
- tqdm
- numpy
- - pandas
+ - pandas==2.2.3
- pip
- pip:
- pysam
From 8671b5d191bd7410eeed8a8c753e434d69dd88cf Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 08:30:07 -0700
Subject: [PATCH 091/145] test runner
---
workflow/envs/runner.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/runner.yaml b/workflow/envs/runner.yaml
index 3e6e7e2cb..084096311 100644
--- a/workflow/envs/runner.yaml
+++ b/workflow/envs/runner.yaml
@@ -10,4 +10,4 @@ dependencies:
- pandas==2.2.3
- pip
- pip:
- - pysam
+ - pysam==0.22.1
From d05eb3f9cd4706101a33555987bb05e7df67fa97 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 14:19:40 -0700
Subject: [PATCH 092/145] test runner
---
workflow/Snakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 128aabaad..183ffa94d 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -10,7 +10,7 @@ import sys
import os
from snakemake.utils import min_version
-min_version("8.20.4")
+min_version("8.21.0")
# setup shared functions
include: "rules/common.smk"
From 3cf8dd3c778fb2a5dd11c8ae17e02e97fbd2dc35 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 14:20:42 -0700
Subject: [PATCH 093/145] test runner
---
INSTALL.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/INSTALL.md b/INSTALL.md
index 1016ad6a0..306178c25 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,8 +1,8 @@
# Install
-You will need **snakemake** which you can install using conda/mamba, e.g.:
+You will need **snakemake** which you can install using conda, e.g.:
```
-mamba create -c conda-forge -c bioconda -n snakemake 'snakemake>=8.4'
+conda create -c conda-forge -c bioconda -n snakemake 'snakemake>=8.21.0'
```
Finally, if you wish to distribute jobs across a cluster you will need to install the appropriate [snakemake executor plugin](https://snakemake.github.io/snakemake-plugin-catalog/). For example, to use SLURM you can install the `snakemake-executor-slurm` plugin using pip:
From 2b57c368b059917220dea86c490fe0d27c9a6d8f Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 14:26:27 -0700
Subject: [PATCH 094/145] test runner
---
workflow/envs/runner.yaml | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/workflow/envs/runner.yaml b/workflow/envs/runner.yaml
index 084096311..dddf584ec 100644
--- a/workflow/envs/runner.yaml
+++ b/workflow/envs/runner.yaml
@@ -1,13 +1,11 @@
name: runner
channels:
- - numba
- conda-forge
- bioconda
- - defaults
dependencies:
- - tqdm
- numpy
- pandas==2.2.3
- - pip
- - pip:
- - pysam==0.22.1
+#- tqdm
+#- pip
+#- pip:
+#- pysam==0.22.1
From 2bc0fc81b9ebeef5d278bda411c1a7052ed95df0 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 14:28:05 -0700
Subject: [PATCH 095/145] test runner
---
workflow/Snakefile | 7 ++++---
workflow/envs/python.yaml | 4 ++--
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 183ffa94d..5692e793d 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -1,7 +1,8 @@
-# forces pandas pysam etc to be available in the environment
+# Adds pandas to the environment so I can use it in workflow functions
+# this must be the first line of the Snakefile
conda: "envs/runner.yaml"
-# Force users to use the same underlying OS via singularity.
-# container: "docker://condaforge/mambaforge:23.3.1-1"
+
+# TODO get the container working
# container: "docker://continuumio/miniconda3"
import pandas as pd
diff --git a/workflow/envs/python.yaml b/workflow/envs/python.yaml
index 792dedd26..437258136 100644
--- a/workflow/envs/python.yaml
+++ b/workflow/envs/python.yaml
@@ -8,10 +8,10 @@ dependencies:
- tqdm
- defopt
- numpy==1.24 # use this version to avoid cxx errors
- - numba::numba==0.60
- pandas==1.4 # pandas versions later than this have cxx errors
- - pysam==0.21
- htslib==1.19.1
- pip
- pip:
- polars-lts-cpu[pyarrow]==1.7.1
+#- numba::numba==0.60
+#- pysam==0.21
From 928020475e219dbfe5c46cf74e0389e6ea42f412 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 14:28:57 -0700
Subject: [PATCH 096/145] test runner
---
workflow/envs/python.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/python.yaml b/workflow/envs/python.yaml
index 437258136..b72cd8234 100644
--- a/workflow/envs/python.yaml
+++ b/workflow/envs/python.yaml
@@ -5,7 +5,6 @@ channels:
- bioconda
- defaults
dependencies:
- - tqdm
- defopt
- numpy==1.24 # use this version to avoid cxx errors
- pandas==1.4 # pandas versions later than this have cxx errors
@@ -13,5 +12,6 @@ dependencies:
- pip
- pip:
- polars-lts-cpu[pyarrow]==1.7.1
+#- tqdm
#- numba::numba==0.60
#- pysam==0.21
From ac7e766637f8c1eb7ff2e71700b5cea61888718d Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sat, 12 Oct 2024 14:34:15 -0700
Subject: [PATCH 097/145] test runner
---
workflow/envs/env.yaml | 5 -----
1 file changed, 5 deletions(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index c19a869c6..70d1556ea 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -8,14 +8,9 @@ dependencies:
- htslib==1.19.1
- bedtools==2.31
- bioconda::fibertools-rs==0.5.4
- - bioconda::gia
- - seqtk
- hck>=0.9.2
- bioawk
- ripgrep
- csvtk
- - datamash
- - parallel
- mosdepth==0.3.7
- - bedops
- bioconda::bigtools==0.5.1
From d8fcba461b8cc22ec19cd28bd7cd5da5d450bd75 Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 13 Oct 2024 15:19:31 -0700
Subject: [PATCH 098/145] test runner
---
workflow/Snakefile | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 5692e793d..4e9b4b1f4 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -1,6 +1,6 @@
-# Adds pandas to the environment so I can use it in workflow functions
-# this must be the first line of the Snakefile
-conda: "envs/runner.yaml"
+# pandas is a dependency of snakemake so a runner environment is not needed
+# if I ever add this back because of new depedancies this must be the first line of the Snakefile
+# conda: "envs/runner.yaml"
# TODO get the container working
# container: "docker://continuumio/miniconda3"
From 8365849b1ce2d0eb7b8d37b4c10a477f8138215f Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 13 Oct 2024 15:20:26 -0700
Subject: [PATCH 099/145] remove runner
---
workflow/Snakefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 4e9b4b1f4..59e6fd6a8 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -13,6 +13,7 @@ from snakemake.utils import min_version
min_version("8.21.0")
+
# setup shared functions
include: "rules/common.smk"
From dbb78525b53b022aa464ac397ef65a2b06d009eb Mon Sep 17 00:00:00 2001
From: Mitchell Robert Vollger
Date: Sun, 13 Oct 2024 15:45:26 -0700
Subject: [PATCH 100/145] remove runner
---
_config.yml | 20 --------------------
1 file changed, 20 deletions(-)
delete mode 100644 _config.yml
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index ac3cdded7..000000000
--- a/_config.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-#theme: jekyll-theme-minimal
-#theme: minima
-remote_theme: jekyll/minima
-#logo: /assets/img/fiber_tools_grey.png
-
-minima:
- skin: dark
-
-defaults:
- - scope:
- path: "README.md"
- values:
- permalink: "index.html"
-
-exclude:
- - target
- - models
- - dists
- - tmp.*
- - temp
From 2e9422a0a5d08b283a055220b6b8a55fe095057c Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 14 Nov 2024 10:43:39 -0800
Subject: [PATCH 101/145] ft update
---
workflow/envs/env.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index 70d1556ea..f9035f571 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -7,7 +7,7 @@ dependencies:
- samtools==1.19.1
- htslib==1.19.1
- bedtools==2.31
- - bioconda::fibertools-rs==0.5.4
+ - bioconda::fibertools-rs==0.6
- hck>=0.9.2
- bioawk
- ripgrep
From 1a495b1bfee2d8efb5acfe0632f423852d24c465 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 18 Nov 2024 08:36:45 -0800
Subject: [PATCH 102/145] switch back to bigtools and upgrade versions
---
workflow/envs/env.yaml | 2 +-
workflow/rules/common.smk | 2 +-
workflow/rules/decorated-reads.smk | 61 ++++++++++++++++--------------
3 files changed, 35 insertions(+), 30 deletions(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index f9035f571..fd49c8853 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -13,4 +13,4 @@ dependencies:
- ripgrep
- csvtk
- mosdepth==0.3.7
- - bioconda::bigtools==0.5.1
+ - bioconda::bigtools==0.5.3
diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk
index e8d8cefcc..2dec22b79 100644
--- a/workflow/rules/common.smk
+++ b/workflow/rules/common.smk
@@ -25,8 +25,8 @@ def get_excludes():
excludes = config.get("excludes", [])
if REF_NAME == "hg38" or REF_NAME == "GRCh38":
files = [
- "../annotations/hg38.blacklist.ENCFF356LFX.bed.gz",
"../annotations/hg38.gap.bed.gz",
+ "../annotations/hg38.blacklist.ENCFF356LFX.bed.gz",
"../annotations/SDs.merged.hg38.bed.gz",
]
excludes += [workflow.source_path(file) for file in files]
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 0783f702e..558d203ed 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -35,7 +35,7 @@ rule decorate_fibers_1:
),
fai=ancient(FAI),
output:
- bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"),
+ #bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"),
bb="results/{sm}/trackHub/bb/fire-fibers.bb",
benchmark:
"results/{sm}/additional-outputs/benchmarks/decorate_fibers_1/{sm}.txt"
@@ -49,7 +49,21 @@ rule decorate_fibers_1:
nzooms=NZOOMS,
items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
- shell:
+ shell:
+ # bigtools version
+ """
+ cat {input.bed} \
+ | bgzip -cd -@ {threads} \
+ | bigtools bedtobigbed \
+ --inmemory \
+ --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
+ --nzooms {params.nzooms} \
+ -s start -a {params.bed_as} \
+ - {input.fai} {output.bb}
+ """
+
+if False:
+ # UCSC version
"""
cat {input.bed} > {output.bed}
bedToBigBed \
@@ -58,17 +72,6 @@ rule decorate_fibers_1:
"""
-# bigtools version
-"""
-bgzip -cd -@ {threads} {output.bed} \
- | bigtools bedtobigbed \
- --inmemory \
- --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
- --nzooms {params.nzooms} \
- -s start -a {params.bed_as} \
- - {input.fai} {output.bb}
-"""
-
rule decorate_fibers_2:
input:
@@ -80,7 +83,7 @@ rule decorate_fibers_2:
fai=ancient(FAI),
output:
bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb",
- bed=temp("temp/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
+ #bed=temp("temp/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
benchmark:
"results/{sm}/additional-outputs/benchmarks/decorate_fibers_2/{sm}.txt"
threads: 8
@@ -93,7 +96,22 @@ rule decorate_fibers_2:
nzooms=NZOOMS,
items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
- shell:
+ shell:
+ # bigtools version
+ """
+ cat {input.decorated} \
+ | bgzip -cd -@ {threads} \
+ | rg -v '^#' \
+ | bigtools bedtobigbed \
+ --inmemory \
+ --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
+ --nzooms {params.nzooms} \
+ -a {params.dec_as} -s start \
+ - {input.fai} {output.bb}
+ """
+
+if False:
+ # UCSC version
"""
cat {input.decorated} > {output.bed}
bedToBigBed \
@@ -101,16 +119,3 @@ rule decorate_fibers_2:
{output.bed} {input.fai} {output.bb}
"""
-
-# bigtools version
-"""
-cat {input.decorated} \
- | bgzip -cd -@ {threads} \
- | rg -v '^#' \
- | bigtools bedtobigbed \
- --inmemory \
- --block-size {params.block_size} --items-per-slot {params.items_per_slot} \
- --nzooms {params.nzooms} \
- -a {params.dec_as} -s start \
- - {input.fai} {output.bb}
-"""
From ca3691f677b35eb45245042b5186c7b698739ed2 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 18 Nov 2024 09:01:53 -0800
Subject: [PATCH 103/145] Add pixi files to help inital install
---
pixi.lock | 4705 +++++++++++++++++++++++++++++++++++++++++++++++++++++
pixi.toml | 25 +
2 files changed, 4730 insertions(+)
create mode 100644 pixi.lock
create mode 100644 pixi.toml
diff --git a/pixi.lock b/pixi.lock
new file mode 100644
index 000000000..1969c886c
--- /dev/null
+++ b/pixi.lock
@@ -0,0 +1,4705 @@
+version: 5
+environments:
+ default:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ - url: https://conda.anaconda.org/bioconda/
+ packages:
+ linux-64:
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cbc-2.10.12-h8b142ea_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cgl-0.60.7-h516709c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-clp-1.17.8-h1ee7a9c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-osi-0.108.10-haf5fa05_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-utils-2.11.11-hee58242_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/coincbc-2.10.12-1_metapackage.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_3.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-24.9.2-py312h7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-inject-1.3.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.9.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.4.0-pyh7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/datrie-0.8.2-py312h66e93f0_8.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.6-py312h66e93f0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/immutables-0.21-py312h66e93f0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.4-hfca40fe_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py312hd9e9ff6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.29-ha6fb4c9_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-hc051c1a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h4ab18f5_6.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/logmuse-0.2.8-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.2.0-py312h7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.3-py312h58c1407_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pephubclient-0.4.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/peppy-0.40.7-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/pulp-2.8.0-py312h7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py312h98912ed_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.23.4-py312h12e396e_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.5.post0-hb9d3cd8_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.5.post0-h5888daf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.21.0-py312h12e396e_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h66e93f0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/slack-sdk-3.33.3-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/slack_sdk-3.33.3-hd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.5-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/toposort-1.10-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.0-hd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py312h66e93f0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/yte-1.5.4-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda
+ osx-64:
+ - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312h5861a67_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.3-hf13058a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py312hf857d28_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cbc-2.10.12-h26cd4a2_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cgl-0.60.7-ha3c4b8c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-clp-1.17.8-hf0ee74e_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-osi-0.108.10-h13a241d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-utils-2.11.11-h86ddba1_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/coincbc-2.10.12-1_metapackage.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_3.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/conda-24.9.2-py312hb401068_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-inject-1.3.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.9.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.4.0-pyh7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/datrie-0.8.2-py312hb553811_8.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/fmt-10.2.1-h7728843_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.6-py312h3d0f464_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/immutables-0.21-py312hb553811_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py312hb401068_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.7.4-h20e244c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-25_osx64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-25_osx64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.8.0-hf9fcc65_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.3-hf95d169_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.4-h240833e_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-25_osx64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapacke-3.9.0-25_osx64_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libmamba-1.5.8-ha449628_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libmambapy-1.5.8-py312h67f5953_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.28-openmp_hbf64a52_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libsolv-0.7.29-h4f92f52_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-h3e169fe_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h87427d6_6.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.3-hf78d878_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/logmuse-0.2.8-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/lzo-2.10-h10d778d_1001.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py312hbe3f5e4_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/menuinst-2.2.0-py312hb401068_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.3-py312hfc93d17_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.4.0-hd471939_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.3-py312h98e817e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pephubclient-0.4.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/peppy-0.40.7-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-6.1.0-py312h3d0f464_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pulp-2.8.0-py312hb401068_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pycosat-0.6.6-py312h104f124_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pydantic-core-2.23.4-py312h669792a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py312hb553811_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/reproc-14.2.5.post0-h6e16a3a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/reproc-cpp-14.2.5.post0-h240833e_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py312h0d0de52_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.18.6-py312h3d0f464_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h3d0f464_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/slack-sdk-3.33.3-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/slack_sdk-3.33.3-hd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.5-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/toposort-1.10-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.0-hd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-1.16.0-py312hb553811_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-cpp-0.8.0-he965462_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/yte-1.5.4-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h7122b0e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda
+packages:
+- kind: conda
+ name: _libgcc_mutex
+ version: '0.1'
+ build: conda_forge
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
+ sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
+ md5: d7c89558ba9fa0495403155b64376d81
+ license: None
+ size: 2562
+ timestamp: 1578324546067
+- kind: conda
+ name: _openmp_mutex
+ version: '4.5'
+ build: 2_gnu
+ build_number: 16
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
+ sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
+ md5: 73aaf86a425cc6e73fcf236a5a46396d
+ depends:
+ - _libgcc_mutex 0.1 conda_forge
+ - libgomp >=7.5.0
+ constrains:
+ - openmp_impl 9999
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 23621
+ timestamp: 1650670423406
+- kind: conda
+ name: amply
+ version: 0.1.6
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda
+ sha256: b3b91fb90123d572cf7524ba5cd112d5d952abbdfcc77048cf4c926a5267b512
+ md5: a45a9cc65a438f465845ebff49c6fbf9
+ depends:
+ - docutils >=0.3
+ - pyparsing
+ - python >=3.4
+ license: EPL-2.0
+ size: 21871
+ timestamp: 1687675666679
+- kind: conda
+ name: annotated-types
+ version: 0.7.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
+ sha256: 668f0825b6c18e4012ca24a0070562b6ec801ebc7008228a428eb52b4038873f
+ md5: 7e9f4612544c8edbfd6afad17f1bd045
+ depends:
+ - python >=3.7
+ - typing-extensions >=4.0.0
+ license: MIT
+ license_family: MIT
+ size: 18235
+ timestamp: 1716290348421
+- kind: conda
+ name: appdirs
+ version: 1.4.4
+ build: pyh9f0ad1d_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2
+ sha256: ae9fb8f68281f84482f2c234379aa12405a9e365151d43af20b3ae1f17312111
+ md5: 5f095bc6454094e96f146491fd03633b
+ depends:
+ - python
+ license: MIT
+ license_family: MIT
+ size: 12840
+ timestamp: 1603108499239
+- kind: conda
+ name: archspec
+ version: 0.2.3
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
+ sha256: cef4062ea91f07a961a808801d6b34a163632150037f4bd28232310ff0301cd7
+ md5: 192278292e20704f663b9c766909d67b
+ depends:
+ - python >=3.6
+ license: MIT OR Apache-2.0
+ size: 48780
+ timestamp: 1708969700251
+- kind: conda
+ name: argparse-dataclass
+ version: 2.0.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda
+ sha256: 67e8c1fde7cd025bc7b3190b83bfe967099672a2bcff8e6864f52abfcc25769b
+ md5: be47a0ee841e940a9a8eec03c2f776a3
+ depends:
+ - python >=3.8
+ license: MIT
+ license_family: MIT
+ size: 12203
+ timestamp: 1691002812997
+- kind: conda
+ name: attrs
+ version: 24.2.0
+ build: pyh71513ae_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda
+ sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8
+ md5: 6732fa52eb8e66e5afeb32db8701a791
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 56048
+ timestamp: 1722977241383
+- kind: conda
+ name: black
+ version: 24.10.0
+ build: py312h7900ff3_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda
+ sha256: 2b4344d18328b3e8fd9b5356f4ee15556779766db8cb21ecf2ff818809773df6
+ md5: 2daba153b913b1b901cf61440ad5e019
+ depends:
+ - click >=8.0.0
+ - mypy_extensions >=0.4.3
+ - packaging >=22.0
+ - pathspec >=0.9
+ - platformdirs >=2
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 390571
+ timestamp: 1728503839694
+- kind: conda
+ name: black
+ version: 24.10.0
+ build: py312hb401068_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda
+ sha256: a1397d32f6d40ff19107bab8c1570f3934ad91a601d1d973b129eabe08b943e6
+ md5: e832f4c2afb84e85718008b600944bc0
+ depends:
+ - click >=8.0.0
+ - mypy_extensions >=0.4.3
+ - packaging >=22.0
+ - pathspec >=0.9
+ - platformdirs >=2
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 393514
+ timestamp: 1728503944080
+- kind: conda
+ name: boltons
+ version: 24.0.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
+ sha256: e44d07932306392372411ab1261670a552f96077f925af00c1559a18a73a1bdc
+ md5: 61de176bd62041f9cd5bd4fcd09eb0ff
+ depends:
+ - python ==2.7.*|>=3.7
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 297896
+ timestamp: 1711936529147
+- kind: conda
+ name: brotli-python
+ version: 1.1.0
+ build: py312h2ec8cdc_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda
+ sha256: f2a59ccd20b4816dea9a2a5cb917eb69728271dbf1aeab4e1b7e609330a50b6f
+ md5: b0b867af6fc74b2a0aa206da29c0f3cf
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - libbrotlicommon 1.1.0 hb9d3cd8_2
+ license: MIT
+ license_family: MIT
+ size: 349867
+ timestamp: 1725267732089
+- kind: conda
+ name: brotli-python
+ version: 1.1.0
+ build: py312h5861a67_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312h5861a67_2.conda
+ sha256: 265764ff4ad9e5cfefe7ea85c53d95157bf16ac2c0e5f190c528e4c9c0c1e2d0
+ md5: b95025822e43128835826ec0cc45a551
+ depends:
+ - __osx >=10.13
+ - libcxx >=17
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - libbrotlicommon 1.1.0 h00291cd_2
+ license: MIT
+ license_family: MIT
+ size: 363178
+ timestamp: 1725267893889
+- kind: conda
+ name: bzip2
+ version: 1.0.8
+ build: h4bc722e_7
+ build_number: 7
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda
+ sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d
+ md5: 62ee74e96c5ebb0af99386de58cf9553
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc-ng >=12
+ license: bzip2-1.0.6
+ license_family: BSD
+ size: 252783
+ timestamp: 1720974456583
+- kind: conda
+ name: bzip2
+ version: 1.0.8
+ build: hfdf4475_7
+ build_number: 7
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
+ sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5
+ md5: 7ed4301d437b59045be7e051a0308211
+ depends:
+ - __osx >=10.13
+ license: bzip2-1.0.6
+ license_family: BSD
+ size: 134188
+ timestamp: 1720974491916
+- kind: conda
+ name: c-ares
+ version: 1.34.3
+ build: heb4867d_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda
+ sha256: 1015d731c05ef7de298834833d680b08dea58980b907f644345bd457f9498c99
+ md5: 09a6c610d002e54e18353c06ef61a253
+ depends:
+ - __glibc >=2.28,<3.0.a0
+ - libgcc >=13
+ license: MIT
+ license_family: MIT
+ size: 205575
+ timestamp: 1731181837907
+- kind: conda
+ name: c-ares
+ version: 1.34.3
+ build: hf13058a_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.3-hf13058a_0.conda
+ sha256: e1bc2520ba9bfa55cd487efabd6bfaa49ccd944847895472133ba919810c9978
+ md5: c36355bc08d4623c210b00f9935ee632
+ depends:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 183798
+ timestamp: 1731181957603
+- kind: conda
+ name: ca-certificates
+ version: 2024.8.30
+ build: h8857fd0_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda
+ sha256: 593f302d0f44c2c771e1614ee6d56fffdc7d616e6f187669c8b0e34ffce3e1ae
+ md5: b7e5424e7f06547a903d28e4651dbb21
+ license: ISC
+ size: 158665
+ timestamp: 1725019059295
+- kind: conda
+ name: ca-certificates
+ version: 2024.8.30
+ build: hbcca054_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda
+ sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea
+ md5: c27d1c142233b5bc9ca570c6e2e0c244
+ license: ISC
+ size: 159003
+ timestamp: 1725018903918
+- kind: conda
+ name: certifi
+ version: 2024.8.30
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda
+ sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f
+ md5: 12f7d00853807b0531775e9be891cb11
+ depends:
+ - python >=3.7
+ license: ISC
+ size: 163752
+ timestamp: 1725278204397
+- kind: conda
+ name: cffi
+ version: 1.17.1
+ build: py312h06ac9bb_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda
+ sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457
+ md5: a861504bbea4161a9170b85d4d2be840
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libffi >=3.4,<4.0a0
+ - libgcc >=13
+ - pycparser
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 294403
+ timestamp: 1725560714366
+- kind: conda
+ name: cffi
+ version: 1.17.1
+ build: py312hf857d28_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py312hf857d28_0.conda
+ sha256: 94fe49aed25d84997e2630d6e776a75ee2a85bd64f258702c57faa4fe2986902
+ md5: 5bbc69b8194fedc2792e451026cac34f
+ depends:
+ - __osx >=10.13
+ - libffi >=3.4,<4.0a0
+ - pycparser
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 282425
+ timestamp: 1725560725144
+- kind: conda
+ name: charset-normalizer
+ version: 3.4.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
+ sha256: 1873ac45ea61f95750cb0b4e5e675d1c5b3def937e80c7eebb19297f76810be8
+ md5: a374efa97290b8799046df7c5ca17164
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 47314
+ timestamp: 1728479405343
+- kind: conda
+ name: click
+ version: 8.1.7
+ build: unix_pyh707e725_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+ sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec
+ md5: f3ad426304898027fc619827ff428eca
+ depends:
+ - __unix
+ - python >=3.8
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 84437
+ timestamp: 1692311973840
+- kind: conda
+ name: coin-or-cbc
+ version: 2.10.12
+ build: h26cd4a2_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cbc-2.10.12-h26cd4a2_1.conda
+ sha256: a88e63a9d533de9fb2e2acaa92455bbc2db8df915c76c391c022e008ee752728
+ md5: f95fff24aa364fa01dde52d2ee1569e0
+ depends:
+ - __osx >=10.13
+ - coin-or-cgl >=0.60,<0.61.0a0
+ - coin-or-clp >=1.17,<1.18.0a0
+ - coin-or-osi >=0.108,<0.109.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libcxx >=17
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 893611
+ timestamp: 1725355590517
+- kind: conda
+ name: coin-or-cbc
+ version: 2.10.12
+ build: h8b142ea_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cbc-2.10.12-h8b142ea_1.conda
+ sha256: d06d5911c0153aa4b1549ff6eda413409c40f6ba4f68fdb53791ec792d827f16
+ md5: 1d7f5461c42aba35340cd31d0f72d85f
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - coin-or-cgl >=0.60,<0.61.0a0
+ - coin-or-clp >=1.17,<1.18.0a0
+ - coin-or-osi >=0.108,<0.109.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 950254
+ timestamp: 1725355568993
+- kind: conda
+ name: coin-or-cgl
+ version: 0.60.7
+ build: h516709c_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cgl-0.60.7-h516709c_0.conda
+ sha256: 9595363f7040130d93251a46cdc44cd9b9f4ff1ec71382299f789504f722e157
+ md5: 9170a2b48868d5a340d7076979a775f8
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - coin-or-clp >=1.17,<1.18.0a0
+ - coin-or-osi >=0.108,<0.109.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc-ng >=12
+ - liblapack >=3.9.0,<4.0a0
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ - ncurses >=6.3,<7.0a0
+ - readline >=8.2,<9.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 551356
+ timestamp: 1681308775645
+- kind: conda
+ name: coin-or-cgl
+ version: 0.60.7
+ build: ha3c4b8c_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cgl-0.60.7-ha3c4b8c_0.conda
+ sha256: 1c8eb9b56053d63294c723c711c136b371daf463fb96c5ea5e33e09ba7ede6b8
+ md5: 5a1f37d769f6f5585ca230f087e0884c
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - coin-or-clp >=1.17,<1.18.0a0
+ - coin-or-osi >=0.108,<0.109.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=14.0.6
+ - liblapack >=3.9.0,<4.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ - ncurses >=6.3,<7.0a0
+ - readline >=8.2,<9.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 543162
+ timestamp: 1681309194623
+- kind: conda
+ name: coin-or-clp
+ version: 1.17.8
+ build: h1ee7a9c_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-clp-1.17.8-h1ee7a9c_0.conda
+ sha256: feb7c44bc2deda6ade8c273ce60b93210c8df106a05531f0ab27a3f36e626ae5
+ md5: a2d4935dc3955aa906c17136039db06c
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - coin-or-osi >=0.108,<0.109.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc-ng >=12
+ - libgfortran-ng
+ - libgfortran5 >=11.3.0
+ - liblapack >=3.9.0,<4.0a0
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ - ncurses >=6.3,<7.0a0
+ - readline >=8.2,<9.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 1173622
+ timestamp: 1681308956927
+- kind: conda
+ name: coin-or-clp
+ version: 1.17.8
+ build: hf0ee74e_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-clp-1.17.8-hf0ee74e_0.conda
+ sha256: 868acbe920008bec915fdb8c968d792c6ee487a22f9d4310a50c24b7b51c7529
+ md5: 2206807e0051f5260174864aae657fc0
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - coin-or-osi >=0.108,<0.109.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=14.0.6
+ - libgfortran 5.*
+ - libgfortran5 >=11.3.0
+ - libgfortran5 >=12.2.0
+ - liblapack >=3.9.0,<4.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ - ncurses >=6.3,<7.0a0
+ - readline >=8.2,<9.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 1123536
+ timestamp: 1681309516683
+- kind: conda
+ name: coin-or-osi
+ version: 0.108.10
+ build: h13a241d_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-osi-0.108.10-h13a241d_0.conda
+ sha256: 96852eacaca4fff8997f663cf588cc96bed26a3ed9fb8ad851bb8178440ac0ff
+ md5: aa0d886ca761f3a5fe2c00699dec30db
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=16
+ - liblapack >=3.9.0,<4.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 341870
+ timestamp: 1713104465374
+- kind: conda
+ name: coin-or-osi
+ version: 0.108.10
+ build: haf5fa05_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-osi-0.108.10-haf5fa05_0.conda
+ sha256: 0cba2f5d91bca83a3de727a6180842dc72f3930041d5399671b6316d07edd311
+ md5: 31465c0cbac3c466b9915563147e21bb
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - coin-or-utils >=2.11,<2.12.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc-ng >=12
+ - liblapack >=3.9.0,<4.0a0
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 372978
+ timestamp: 1713104263049
+- kind: conda
+ name: coin-or-utils
+ version: 2.11.11
+ build: h86ddba1_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-utils-2.11.11-h86ddba1_0.conda
+ sha256: 7ebf257e3f77228be7d19a58513ad7d697353eb3ae58068ec4a5d8895894cc23
+ md5: d9000579864edd4c4aa5791bd5a1b691
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=16
+ - libgfortran 5.*
+ - libgfortran5 >=12.3.0
+ - libgfortran5 >=13.2.0
+ - liblapack >=3.9.0,<4.0a0
+ - liblapacke >=3.9.0,<4.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 645695
+ timestamp: 1712651245789
+- kind: conda
+ name: coin-or-utils
+ version: 2.11.11
+ build: hee58242_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-utils-2.11.11-hee58242_0.conda
+ sha256: 6480bca174e4223bbabd1916957cf9ea0a44e13c8dd8c4c4744125ae2819f05e
+ md5: d213208e4e3e68877b47b90ad512a95e
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc-ng >=12
+ - libgfortran-ng
+ - libgfortran5 >=12.3.0
+ - liblapack >=3.9.0,<4.0a0
+ - liblapacke >=3.9.0,<4.0a0
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ constrains:
+ - coincbc * *_metapackage
+ license: EPL-2.0
+ license_family: OTHER
+ size: 687789
+ timestamp: 1712651019616
+- kind: conda
+ name: coincbc
+ version: 2.10.12
+ build: 1_metapackage
+ build_number: 1
+ subdir: noarch
+ noarch: generic
+ url: https://conda.anaconda.org/conda-forge/noarch/coincbc-2.10.12-1_metapackage.conda
+ sha256: 2591d520e288555e53c2969efd5a7dde75b21a61911cd07245d7db8aa30bd5f1
+ md5: fb2f3dba642b3c0bfba2654651262b38
+ depends:
+ - coin-or-cbc 2.10.12.*
+ license: EPL-2.0
+ license_family: OTHER
+ size: 12153
+ timestamp: 1725355692963
+- kind: conda
+ name: colorama
+ version: 0.4.6
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
+ sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698
+ md5: 3faab06a954c2a04039983f2c4a50d99
+ depends:
+ - python >=3.7
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 25170
+ timestamp: 1666700778190
+- kind: conda
+ name: coloredlogs
+ version: 15.0.1
+ build: pyhd8ed1ab_3
+ build_number: 3
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_3.tar.bz2
+ sha256: 0bb37abbf3367add8a8e3522405efdbd06605acfc674488ef52486968f2c119d
+ md5: 7b4fc18b7f66382257c45424eaf81935
+ depends:
+ - humanfriendly >=9.1
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 40569
+ timestamp: 1643220223971
+- kind: conda
+ name: conda
+ version: 24.9.2
+ build: py312h7900ff3_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/conda-24.9.2-py312h7900ff3_0.conda
+ sha256: 705f9cf0b3685774e46fd1be20c69202fd79d823431c64e2af4361ca6473c57b
+ md5: 132748eafd19d4c984595d301806f0b1
+ depends:
+ - archspec >=0.2.3
+ - boltons >=23.0.0
+ - charset-normalizer
+ - conda-libmamba-solver >=23.11.0
+ - conda-package-handling >=2.2.0
+ - distro >=1.5.0
+ - frozendict >=2.4.2
+ - jsonpatch >=1.32
+ - menuinst >=2
+ - packaging >=23.0
+ - platformdirs >=3.10.0
+ - pluggy >=1.0.0
+ - pycosat >=0.6.3
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - requests >=2.28.0,<3
+ - ruamel.yaml >=0.11.14,<0.19
+ - setuptools >=60.0.0
+ - tqdm >=4
+ - truststore >=0.8.0
+ - zstandard >=0.19.0
+ constrains:
+ - conda-build >=24.3
+ - conda-env >=2.6
+ - conda-content-trust >=0.1.1
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 1158773
+ timestamp: 1729155303908
+- kind: conda
+ name: conda
+ version: 24.9.2
+ build: py312hb401068_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/conda-24.9.2-py312hb401068_0.conda
+ sha256: 22f93dccb52c3621c9542dc5f1c9ef3b0558cd34298784481e4c9abfcf3cd677
+ md5: 06339440083591573deacb6e63ab1f6b
+ depends:
+ - archspec >=0.2.3
+ - boltons >=23.0.0
+ - charset-normalizer
+ - conda-libmamba-solver >=23.11.0
+ - conda-package-handling >=2.2.0
+ - distro >=1.5.0
+ - frozendict >=2.4.2
+ - jsonpatch >=1.32
+ - menuinst >=2
+ - packaging >=23.0
+ - platformdirs >=3.10.0
+ - pluggy >=1.0.0
+ - pycosat >=0.6.3
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - requests >=2.28.0,<3
+ - ruamel.yaml >=0.11.14,<0.19
+ - setuptools >=60.0.0
+ - tqdm >=4
+ - truststore >=0.8.0
+ - zstandard >=0.19.0
+ constrains:
+ - conda-build >=24.3
+ - conda-content-trust >=0.1.1
+ - conda-env >=2.6
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 1163211
+ timestamp: 1729155314354
+- kind: conda
+ name: conda-inject
+ version: 1.3.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/conda-inject-1.3.2-pyhd8ed1ab_0.conda
+ sha256: c1b355af599e548c4b69129f4d723ddcdb9f6defb939985731499cee2e26a578
+ md5: e52c2a160d6bd0649c9fafdf0c813357
+ depends:
+ - python >=3.9.0,<4.0.0
+ - pyyaml >=6.0.0,<7.0.0
+ license: MIT
+ license_family: MIT
+ size: 10327
+ timestamp: 1717043667069
+- kind: conda
+ name: conda-libmamba-solver
+ version: 24.9.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.9.0-pyhd8ed1ab_0.conda
+ sha256: a93ddbad869701615b420be1600fcab90bc7fc852b9fd55fe7975de97ee60ea6
+ md5: 45378d089c5f72c9c0d63d58414c645d
+ depends:
+ - boltons >=23.0.0
+ - conda >=23.7.4
+ - libmambapy >=1.5.6,<2.0a0
+ - python >=3.8
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 41613
+ timestamp: 1727359934505
+- kind: conda
+ name: conda-package-handling
+ version: 2.4.0
+ build: pyh7900ff3_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.4.0-pyh7900ff3_0.conda
+ sha256: b3a315523703abd198e1c2ff1ea84b30b270a301f8071d4381b1f575e790d049
+ md5: 686fb26b6fd490b533ec580da90b2af8
+ depends:
+ - conda-package-streaming >=0.9.0
+ - python >=3.8
+ - zstandard >=0.15
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 257763
+ timestamp: 1729007114391
+- kind: conda
+ name: conda-package-streaming
+ version: 0.11.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda
+ sha256: 685b06951e563514a9b158e82d3d44faf102f0770af42e4d08347a6eec3d48ea
+ md5: bc9533d8616a97551ed144789bf9c1cd
+ depends:
+ - python >=3.7
+ - zstandard >=0.15
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 20582
+ timestamp: 1729004160440
+- kind: conda
+ name: configargparse
+ version: '1.7'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda
+ sha256: 23f7283b59d20a895c5fa41aa5d276155cedf257418db7f952d615d6a2e5fa43
+ md5: 0d07dc29b1c1cc973f76b74beb44915f
+ depends:
+ - python >=3.5
+ license: MIT
+ license_family: MIT
+ size: 39491
+ timestamp: 1690138171226
+- kind: conda
+ name: connection_pool
+ version: 0.0.3
+ build: pyhd3deb0d_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2
+ sha256: 799a515e9e73e447f46f60fb3f9162f437ae1a2a00defddde84282e9e225cb36
+ md5: e270fff08907db8691c02a0eda8d38ae
+ depends:
+ - python
+ license: MIT
+ license_family: MIT
+ size: 8331
+ timestamp: 1608581999360
+- kind: conda
+ name: datrie
+ version: 0.8.2
+ build: py312h66e93f0_8
+ build_number: 8
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/datrie-0.8.2-py312h66e93f0_8.conda
+ sha256: 7392696b37d76ec2065c7dfd80d8d5c843a14c978a99e97c0c852f89f0366711
+ md5: d207ef2514432166373be0f559773358
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: LGPL-2.1-or-later
+ license_family: LGPL
+ size: 158945
+ timestamp: 1725961043726
+- kind: conda
+ name: datrie
+ version: 0.8.2
+ build: py312hb553811_8
+ build_number: 8
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/datrie-0.8.2-py312hb553811_8.conda
+ sha256: 56f12b2efe42887fd65e18cac08d82afd994998a74c9656ee7a8668c5fb82bf4
+ md5: 2377960cffb477133720b8abebb6b896
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: LGPL-2.1-or-later
+ license_family: LGPL
+ size: 133254
+ timestamp: 1725961050356
+- kind: conda
+ name: distro
+ version: 1.9.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
+ sha256: ae1c13d709c8001331b5b9345e4bcd77e9ae712d25f7958b2ebcbe0b068731b7
+ md5: bbdb409974cd6cb30071b1d978302726
+ depends:
+ - python >=3.6
+ license: Apache-2.0
+ license_family: APACHE
+ size: 42039
+ timestamp: 1704321683916
+- kind: conda
+ name: docutils
+ version: 0.21.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+ sha256: 362bfe3afaac18298c48c0c6a935641544077ce5105a42a2d8ebe750ad07c574
+ md5: e8cd5d629f65bdf0f3bb312cde14659e
+ depends:
+ - python >=3.9
+ license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
+ size: 403226
+ timestamp: 1713930478970
+- kind: conda
+ name: dpath
+ version: 2.2.0
+ build: pyha770c72_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda
+ sha256: ab88f587a9b7dc3cbb636823423c2ecfd868d4719b491af37c09b0384214bacf
+ md5: b2681af65644be41a18d4b00b67938f1
+ depends:
+ - python >3.6
+ license: MIT
+ license_family: MIT
+ size: 21344
+ timestamp: 1718243548474
+- kind: conda
+ name: eido
+ version: 0.2.4
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda
+ sha256: f4875fa1fc8feab88bdfc05f7a705b2416dfdd974f3eb19608af18c38691779e
+ md5: fc815854ab62482e2f2f0d8fab786a1c
+ depends:
+ - jsonschema >=3.0.1
+ - logmuse >=0.2.5
+ - peppy >=0.40.6
+ - python >=3.8
+ - ubiquerg >=0.6.2
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 20005
+ timestamp: 1729011115644
+- kind: conda
+ name: exceptiongroup
+ version: 1.2.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
+ sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5
+ md5: d02ae936e42063ca46af6cdad2dbd1e0
+ depends:
+ - python >=3.7
+ license: MIT and PSF-2.0
+ size: 20418
+ timestamp: 1720869435725
+- kind: conda
+ name: fmt
+ version: 10.2.1
+ build: h00ab1b0_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda
+ sha256: 7b9ba098a3661e023c3555e01554354ac4891af8f8998e85f0fcbfdac79fc0d4
+ md5: 35ef8bc24bd34074ebae3c943d551728
+ depends:
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ license: MIT
+ license_family: MIT
+ size: 193853
+ timestamp: 1704454679950
+- kind: conda
+ name: fmt
+ version: 10.2.1
+ build: h7728843_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/fmt-10.2.1-h7728843_0.conda
+ sha256: 2faeccfe2b9f7c028cf271f66757365fe43b15a1234084c16f159646a646ccbc
+ md5: ab205d53bda43d03f5c5b993ccb406b3
+ depends:
+ - libcxx >=15
+ license: MIT
+ license_family: MIT
+ size: 181468
+ timestamp: 1704454938658
+- kind: conda
+ name: frozendict
+ version: 2.4.6
+ build: py312h3d0f464_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.6-py312h3d0f464_0.conda
+ sha256: ea617933e456f78905682cbed90692ba698524280955f6ff21be0905d8f0cd43
+ md5: 58a8d9e016adc22964bfb0b9a5272e16
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: LGPL-3.0-only
+ license_family: LGPL
+ size: 30751
+ timestamp: 1728841497755
+- kind: conda
+ name: frozendict
+ version: 2.4.6
+ build: py312h66e93f0_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.6-py312h66e93f0_0.conda
+ sha256: a251569d25e9658f87406efda6640e2816659c5d4dd244d1008bb789793cf32e
+ md5: 9fa8408745a0621314b7751d11fecc18
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: LGPL-3.0-only
+ license_family: LGPL
+ size: 30486
+ timestamp: 1728841445822
+- kind: conda
+ name: gitdb
+ version: 4.0.11
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+ sha256: 52ab2798be31b8f509eeec458712f447ced4f96ecb672c6c9a42778f47e07b1b
+ md5: 623b19f616f2ca0c261441067e18ae40
+ depends:
+ - python >=3.7
+ - smmap >=3.0.1,<6
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 52872
+ timestamp: 1697791718749
+- kind: conda
+ name: gitpython
+ version: 3.1.43
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+ sha256: cbb2802641a009ce9bcc2a047e817fd8816f9c842036a42f4730398d8e4cda2a
+ md5: 0b2154c1818111e17381b1df5b4b0176
+ depends:
+ - gitdb >=4.0.1,<5
+ - python >=3.7
+ - typing_extensions >=3.7.4.3
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 156827
+ timestamp: 1711991122366
+- kind: conda
+ name: h2
+ version: 4.1.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+ sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a
+ md5: b748fbf7060927a6e82df7cb5ee8f097
+ depends:
+ - hpack >=4.0,<5
+ - hyperframe >=6.0,<7
+ - python >=3.6.1
+ license: MIT
+ license_family: MIT
+ size: 46754
+ timestamp: 1634280590080
+- kind: conda
+ name: hpack
+ version: 4.0.0
+ build: pyh9f0ad1d_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+ sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8
+ md5: 914d6646c4dbb1fd3ff539830a12fd71
+ depends:
+ - python
+ license: MIT
+ license_family: MIT
+ size: 25341
+ timestamp: 1598856368685
+- kind: conda
+ name: humanfriendly
+ version: '10.0'
+ build: pyhd81877a_7
+ build_number: 7
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda
+ sha256: dcbe5f1dd08ca2ad6664f76e37dc397138b7343b7ee5296656a6c697dcf022e3
+ md5: 74fbff91ca7c1b9a36b15903f2242f86
+ depends:
+ - __unix
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 73296
+ timestamp: 1731259242894
+- kind: conda
+ name: hyperframe
+ version: 6.0.1
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+ sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330
+ md5: 9f765cbfab6870c8435b9eefecd7a1f4
+ depends:
+ - python >=3.6
+ license: MIT
+ license_family: MIT
+ size: 14646
+ timestamp: 1619110249723
+- kind: conda
+ name: icu
+ version: '73.2'
+ build: h59595ed_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda
+ sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8
+ md5: cc47e1facc155f91abd89b11e48e72ff
+ depends:
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ license: MIT
+ license_family: MIT
+ size: 12089150
+ timestamp: 1692900650789
+- kind: conda
+ name: icu
+ version: '73.2'
+ build: hf5e326d_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda
+ sha256: f66362dc36178ac9b7c7a9b012948a9d2d050b3debec24bbd94aadbc44854185
+ md5: 5cc301d759ec03f28328428e28f65591
+ license: MIT
+ license_family: MIT
+ size: 11787527
+ timestamp: 1692901622519
+- kind: conda
+ name: idna
+ version: '3.10'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda
+ sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2
+ md5: 7ba2ede0e7c795ff95088daf0dc59753
+ depends:
+ - python >=3.6
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 49837
+ timestamp: 1726459583613
+- kind: conda
+ name: immutables
+ version: '0.21'
+ build: py312h66e93f0_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/immutables-0.21-py312h66e93f0_0.conda
+ sha256: a452382c325d03a7bd8df6f89ad7073de9cf1ac23b62e18dff9b1e76aeeba8a5
+ md5: 2aa27ea23f115c62663428c50ff4e9a4
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: Apache-2.0
+ license_family: APACHE
+ size: 54135
+ timestamp: 1728557342989
+- kind: conda
+ name: immutables
+ version: '0.21'
+ build: py312hb553811_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/immutables-0.21-py312hb553811_0.conda
+ sha256: 0b43a016a1fc9b2f412eb23654c3a9d9198ef84e6178b1fb6115ce083d709998
+ md5: 6d1edc4816013d291e8dce20c701bc3c
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: Apache-2.0
+ license_family: APACHE
+ size: 51214
+ timestamp: 1728557359430
+- kind: conda
+ name: importlib_resources
+ version: 6.4.5
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda
+ sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1
+ md5: c808991d29b9838fb4d96ce8267ec9ec
+ depends:
+ - python >=3.8
+ - zipp >=3.1.0
+ constrains:
+ - importlib-resources >=6.4.5,<6.4.6.0a0
+ license: Apache-2.0
+ license_family: APACHE
+ size: 32725
+ timestamp: 1725921462405
+- kind: conda
+ name: iniconfig
+ version: 2.0.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+ sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666
+ md5: f800d2da156d08e289b14e87e43c1ae5
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 11101
+ timestamp: 1673103208955
+- kind: conda
+ name: jinja2
+ version: 3.1.4
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d
+ md5: 7b86ecb7d3557821c649b3c31e3eb9f2
+ depends:
+ - markupsafe >=2.0
+ - python >=3.7
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 111565
+ timestamp: 1715127275924
+- kind: conda
+ name: jsonpatch
+ version: '1.33'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
+ sha256: fbb17e33ace3225c6416d1604637c1058906b8223da968cc015128985336b2b4
+ md5: bfdb7c5c6ad1077c82a69a8642c87aff
+ depends:
+ - jsonpointer >=1.9
+ - python >=3.8
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17366
+ timestamp: 1695536420928
+- kind: conda
+ name: jsonpointer
+ version: 3.0.0
+ build: py312h7900ff3_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_1.conda
+ sha256: 76ccb7bffc7761d1d3133ffbe1f7f1710a0f0d9aaa9f7ea522652e799f3601f4
+ md5: 6b51f7459ea4073eeb5057207e2e1e3d
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17277
+ timestamp: 1725303032027
+- kind: conda
+ name: jsonpointer
+ version: 3.0.0
+ build: py312hb401068_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py312hb401068_1.conda
+ sha256: 52fcb1db44a935bba26988cc17247a0f71a8ad2fbc2b717274a8c8940856ee0d
+ md5: 5dcf96bca4649d496d818a0f5cfb962e
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17560
+ timestamp: 1725303027769
+- kind: conda
+ name: jsonschema
+ version: 4.23.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda
+ sha256: 7d0c4c0346b26be9f220682b7c5c0d84606d48c6dbc36fc238e4452dda733aff
+ md5: da304c192ad59975202859b367d0f6a2
+ depends:
+ - attrs >=22.2.0
+ - importlib_resources >=1.4.0
+ - jsonschema-specifications >=2023.03.6
+ - pkgutil-resolve-name >=1.3.10
+ - python >=3.8
+ - referencing >=0.28.4
+ - rpds-py >=0.7.1
+ license: MIT
+ license_family: MIT
+ size: 74323
+ timestamp: 1720529611305
+- kind: conda
+ name: jsonschema-specifications
+ version: 2024.10.1
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda
+ sha256: 82f8bed0f21dc0b3aff40dd4e39d77e85b93b0417bc5659b001e0109341b8b98
+ md5: 720745920222587ef942acfbc578b584
+ depends:
+ - python >=3.8
+ - referencing >=0.31.0
+ license: MIT
+ license_family: MIT
+ size: 16165
+ timestamp: 1728418976382
+- kind: conda
+ name: jupyter_core
+ version: 5.7.2
+ build: pyh31011fe_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda
+ sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd
+ md5: 0a2980dada0dd7fd0998f0342308b1b1
+ depends:
+ - __unix
+ - platformdirs >=2.5
+ - python >=3.8
+ - traitlets >=5.3
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 57671
+ timestamp: 1727163547058
+- kind: conda
+ name: keyutils
+ version: 1.6.1
+ build: h166bdaf_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2
+ sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb
+ md5: 30186d27e2c9fa62b45fb1476b7200e3
+ depends:
+ - libgcc-ng >=10.3.0
+ license: LGPL-2.1-or-later
+ size: 117831
+ timestamp: 1646151697040
+- kind: conda
+ name: krb5
+ version: 1.21.3
+ build: h37d8d59_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda
+ sha256: 83b52685a4ce542772f0892a0f05764ac69d57187975579a0835ff255ae3ef9c
+ md5: d4765c524b1d91567886bde656fb514b
+ depends:
+ - __osx >=10.13
+ - libcxx >=16
+ - libedit >=3.1.20191231,<3.2.0a0
+ - libedit >=3.1.20191231,<4.0a0
+ - openssl >=3.3.1,<4.0a0
+ license: MIT
+ license_family: MIT
+ size: 1185323
+ timestamp: 1719463492984
+- kind: conda
+ name: krb5
+ version: 1.21.3
+ build: h659f571_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda
+ sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238
+ md5: 3f43953b7d3fb3aaa1d0d0723d91e368
+ depends:
+ - keyutils >=1.6.1,<2.0a0
+ - libedit >=3.1.20191231,<3.2.0a0
+ - libedit >=3.1.20191231,<4.0a0
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ - openssl >=3.3.1,<4.0a0
+ license: MIT
+ license_family: MIT
+ size: 1370023
+ timestamp: 1719463201255
+- kind: conda
+ name: ld_impl_linux-64
+ version: '2.43'
+ build: h712a8e2_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda
+ sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe
+ md5: 048b02e3962f066da18efe3a21b77672
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ constrains:
+ - binutils_impl_linux-64 2.43
+ license: GPL-3.0-only
+ license_family: GPL
+ size: 669211
+ timestamp: 1729655358674
+- kind: conda
+ name: libarchive
+ version: 3.7.4
+ build: h20e244c_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.7.4-h20e244c_0.conda
+ sha256: 9e46db25e976630e6738b351d76d9b79047ae232638b82f9f45eba774caaef8a
+ md5: 82a85fa38e83366009b7f4b2cef4deb8
+ depends:
+ - __osx >=10.13
+ - bzip2 >=1.0.8,<2.0a0
+ - libiconv >=1.17,<2.0a0
+ - libxml2 >=2.12.7,<3.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ - lz4-c >=1.9.3,<1.10.0a0
+ - lzo >=2.10,<3.0a0
+ - openssl >=3.3.0,<4.0a0
+ - xz >=5.2.6,<6.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 742682
+ timestamp: 1716394747351
+- kind: conda
+ name: libarchive
+ version: 3.7.4
+ build: hfca40fe_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.4-hfca40fe_0.conda
+ sha256: c30970e5e6515c662d00bb74e7c1b09ebe0c8c92c772b952a41a5725e2dcc936
+ md5: 32ddb97f897740641d8d46a829ce1704
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - libgcc-ng >=12
+ - libxml2 >=2.12.7,<3.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ - lz4-c >=1.9.3,<1.10.0a0
+ - lzo >=2.10,<3.0a0
+ - openssl >=3.3.0,<4.0a0
+ - xz >=5.2.6,<6.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 871853
+ timestamp: 1716394516418
+- kind: conda
+ name: libblas
+ version: 3.9.0
+ build: 25_linux64_openblas
+ build_number: 25
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda
+ sha256: d6d12dc437d060f838820e9e61bf73baab651f91935ac594cf10beb9ef1b4450
+ md5: 8ea26d42ca88ec5258802715fe1ee10b
+ depends:
+ - libopenblas >=0.3.28,<0.3.29.0a0
+ - libopenblas >=0.3.28,<1.0a0
+ constrains:
+ - liblapack 3.9.0 25_linux64_openblas
+ - libcblas 3.9.0 25_linux64_openblas
+ - blas * openblas
+ - liblapacke 3.9.0 25_linux64_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15677
+ timestamp: 1729642900350
+- kind: conda
+ name: libblas
+ version: 3.9.0
+ build: 25_osx64_openblas
+ build_number: 25
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-25_osx64_openblas.conda
+ sha256: 1b22b5322a311a775bca637b26317645cf07e35f125cede9278c6c45db6e7105
+ md5: da0a6f87958893e1d2e2bbc7e7a6541f
+ depends:
+ - libopenblas >=0.3.28,<0.3.29.0a0
+ - libopenblas >=0.3.28,<1.0a0
+ constrains:
+ - liblapack 3.9.0 25_osx64_openblas
+ - liblapacke 3.9.0 25_osx64_openblas
+ - blas * openblas
+ - libcblas 3.9.0 25_osx64_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15952
+ timestamp: 1729643159199
+- kind: conda
+ name: libcblas
+ version: 3.9.0
+ build: 25_linux64_openblas
+ build_number: 25
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda
+ sha256: ab87b0477078837c91d9cda62a9faca18fba7c57cc77aa779ae24b3ac783b5dd
+ md5: 5dbd1b0fc0d01ec5e0e1fbe667281a11
+ depends:
+ - libblas 3.9.0 25_linux64_openblas
+ constrains:
+ - liblapack 3.9.0 25_linux64_openblas
+ - blas * openblas
+ - liblapacke 3.9.0 25_linux64_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15613
+ timestamp: 1729642905619
+- kind: conda
+ name: libcblas
+ version: 3.9.0
+ build: 25_osx64_openblas
+ build_number: 25
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-25_osx64_openblas.conda
+ sha256: b04ae297aa5396df3135514866db72845b111c92524570f923625473f11cfbe2
+ md5: ab304b75ea67f850cf7adf9156e3f62f
+ depends:
+ - libblas 3.9.0 25_osx64_openblas
+ constrains:
+ - liblapack 3.9.0 25_osx64_openblas
+ - liblapacke 3.9.0 25_osx64_openblas
+ - blas * openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15842
+ timestamp: 1729643166929
+- kind: conda
+ name: libcurl
+ version: 8.8.0
+ build: hca28451_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_1.conda
+ sha256: 6b5b64cdcdb643368ebe236de07eedee99b025bb95129bbe317c46e5bdc693f3
+ md5: b8afb3e3cb3423cc445cf611ab95fdb0
+ depends:
+ - krb5 >=1.21.3,<1.22.0a0
+ - libgcc-ng >=12
+ - libnghttp2 >=1.58.0,<2.0a0
+ - libssh2 >=1.11.0,<2.0a0
+ - libzlib >=1.2.13,<2.0a0
+ - openssl >=3.3.1,<4.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ license: curl
+ license_family: MIT
+ size: 410158
+ timestamp: 1719602718702
+- kind: conda
+ name: libcurl
+ version: 8.8.0
+ build: hf9fcc65_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.8.0-hf9fcc65_1.conda
+ sha256: 25e2b044e6978f1714a4b2844f34a45fc8a0c60185db8d332906989d70b65927
+ md5: 11711bab5306a6534797a68b3c4c2bed
+ depends:
+ - krb5 >=1.21.3,<1.22.0a0
+ - libnghttp2 >=1.58.0,<2.0a0
+ - libssh2 >=1.11.0,<2.0a0
+ - libzlib >=1.2.13,<2.0a0
+ - openssl >=3.3.1,<4.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ license: curl
+ license_family: MIT
+ size: 390707
+ timestamp: 1719602983754
+- kind: conda
+ name: libcxx
+ version: 19.1.3
+ build: hf95d169_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.3-hf95d169_0.conda
+ sha256: 466f259bb13a8058fef28843977c090d21ad337b71a842ccc0407bccf8d27011
+ md5: 86801fc56d4641e3ef7a63f5d996b960
+ depends:
+ - __osx >=10.13
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ size: 528991
+ timestamp: 1730314340106
+- kind: conda
+ name: libedit
+ version: 3.1.20191231
+ build: h0678c8f_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2
+ sha256: dbd3c3f2eca1d21c52e4c03b21930bbce414c4592f8ce805801575b9e9256095
+ md5: 6016a8a1d0e63cac3de2c352cd40208b
+ depends:
+ - ncurses >=6.2,<7.0.0a0
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 105382
+ timestamp: 1597616576726
+- kind: conda
+ name: libedit
+ version: 3.1.20191231
+ build: he28a2e2_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2
+ sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf
+ md5: 4d331e44109e3f0e19b4cb8f9b82f3e1
+ depends:
+ - libgcc-ng >=7.5.0
+ - ncurses >=6.2,<7.0.0a0
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 123878
+ timestamp: 1597616541093
+- kind: conda
+ name: libev
+ version: '4.33'
+ build: h10d778d_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda
+ sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43
+ md5: 899db79329439820b7e8f8de41bca902
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 106663
+ timestamp: 1702146352558
+- kind: conda
+ name: libev
+ version: '4.33'
+ build: hd590300_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
+ sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4
+ md5: 172bf1cd1ff8629f2b1179945ed45055
+ depends:
+ - libgcc-ng >=12
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 112766
+ timestamp: 1702146165126
+- kind: conda
+ name: libexpat
+ version: 2.6.4
+ build: h240833e_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.4-h240833e_0.conda
+ sha256: d10f43d0c5df6c8cf55259bce0fe14d2377eed625956cddce06f58827d288c59
+ md5: 20307f4049a735a78a29073be1be2626
+ depends:
+ - __osx >=10.13
+ constrains:
+ - expat 2.6.4.*
+ license: MIT
+ license_family: MIT
+ size: 70758
+ timestamp: 1730967204736
+- kind: conda
+ name: libexpat
+ version: 2.6.4
+ build: h5888daf_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda
+ sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26
+ md5: db833e03127376d461e1e13e76f09b6c
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ constrains:
+ - expat 2.6.4.*
+ license: MIT
+ license_family: MIT
+ size: 73304
+ timestamp: 1730967041968
+- kind: conda
+ name: libffi
+ version: 3.4.2
+ build: h0d85af4_5
+ build_number: 5
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2
+ sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f
+ md5: ccb34fb14960ad8b125962d3d79b31a9
+ license: MIT
+ license_family: MIT
+ size: 51348
+ timestamp: 1636488394370
+- kind: conda
+ name: libffi
+ version: 3.4.2
+ build: h7f98852_5
+ build_number: 5
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
+ sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e
+ md5: d645c6d2ac96843a2bfaccd2d62b3ac3
+ depends:
+ - libgcc-ng >=9.4.0
+ license: MIT
+ license_family: MIT
+ size: 58292
+ timestamp: 1636488182923
+- kind: conda
+ name: libgcc
+ version: 14.2.0
+ build: h77fa898_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda
+ sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569
+ md5: 3cb76c3f10d3bc7f1105b2fc9db984df
+ depends:
+ - _libgcc_mutex 0.1 conda_forge
+ - _openmp_mutex >=4.5
+ constrains:
+ - libgomp 14.2.0 h77fa898_1
+ - libgcc-ng ==14.2.0=*_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 848745
+ timestamp: 1729027721139
+- kind: conda
+ name: libgcc-ng
+ version: 14.2.0
+ build: h69a702a_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda
+ sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7
+ md5: e39480b9ca41323497b05492a63bc35b
+ depends:
+ - libgcc 14.2.0 h77fa898_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 54142
+ timestamp: 1729027726517
+- kind: conda
+ name: libgfortran
+ version: 5.0.0
+ build: 13_2_0_h97931a8_3
+ build_number: 3
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda
+ sha256: 4874422e567b68334705c135c17e5acdca1404de8255673ce30ad3510e00be0d
+ md5: 0b6e23a012ee7a9a5f6b244f5a92c1d5
+ depends:
+ - libgfortran5 13.2.0 h2873a65_3
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 110106
+ timestamp: 1707328956438
+- kind: conda
+ name: libgfortran
+ version: 14.2.0
+ build: h69a702a_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda
+ sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977
+ md5: f1fd30127802683586f768875127a987
+ depends:
+ - libgfortran5 14.2.0 hd5240d6_1
+ constrains:
+ - libgfortran-ng ==14.2.0=*_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 53997
+ timestamp: 1729027752995
+- kind: conda
+ name: libgfortran-ng
+ version: 14.2.0
+ build: h69a702a_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda
+ sha256: 423f1e2403f0c665748e42d335e421e53fd03c08d457cfb6f360d329d9459851
+ md5: 0a7f4cd238267c88e5d69f7826a407eb
+ depends:
+ - libgfortran 14.2.0 h69a702a_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 54106
+ timestamp: 1729027945817
+- kind: conda
+ name: libgfortran5
+ version: 13.2.0
+ build: h2873a65_3
+ build_number: 3
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda
+ sha256: da3db4b947e30aec7596a3ef92200d17e774cccbbf7efc47802529a4ca5ca31b
+ md5: e4fb4d23ec2870ff3c40d10afe305aec
+ depends:
+ - llvm-openmp >=8.0.0
+ constrains:
+ - libgfortran 5.0.0 13_2_0_*_3
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 1571379
+ timestamp: 1707328880361
+- kind: conda
+ name: libgfortran5
+ version: 14.2.0
+ build: hd5240d6_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda
+ sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d
+ md5: 9822b874ea29af082e5d36098d25427d
+ depends:
+ - libgcc >=14.2.0
+ constrains:
+ - libgfortran 14.2.0
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 1462645
+ timestamp: 1729027735353
+- kind: conda
+ name: libgomp
+ version: 14.2.0
+ build: h77fa898_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda
+ sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63
+ md5: cc3573974587f12dda90d96e3e55a702
+ depends:
+ - _libgcc_mutex 0.1 conda_forge
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 460992
+ timestamp: 1729027639220
+- kind: conda
+ name: libiconv
+ version: '1.17'
+ build: hd590300_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda
+ sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9
+ md5: d66573916ffcf376178462f1b61c941e
+ depends:
+ - libgcc-ng >=12
+ license: LGPL-2.1-only
+ size: 705775
+ timestamp: 1702682170569
+- kind: conda
+ name: libiconv
+ version: '1.17'
+ build: hd75f5a5_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda
+ sha256: 23d4923baeca359423a7347c2ed7aaf48c68603df0cf8b87cc94a10b0d4e9a23
+ md5: 6c3628d047e151efba7cf08c5e54d1ca
+ license: LGPL-2.1-only
+ size: 666538
+ timestamp: 1702682713201
+- kind: conda
+ name: liblapack
+ version: 3.9.0
+ build: 25_linux64_openblas
+ build_number: 25
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda
+ sha256: 9d1ff017714edb2d84868f0f931a4a0e7c289a971062b2ac66cfc8145df7e20e
+ md5: 4dc03a53fc69371a6158d0ed37214cd3
+ depends:
+ - libblas 3.9.0 25_linux64_openblas
+ constrains:
+ - liblapacke 3.9.0 25_linux64_openblas
+ - libcblas 3.9.0 25_linux64_openblas
+ - blas * openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15608
+ timestamp: 1729642910812
+- kind: conda
+ name: liblapack
+ version: 3.9.0
+ build: 25_osx64_openblas
+ build_number: 25
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-25_osx64_openblas.conda
+ sha256: 2a9a6143d103e7e21511cbf439521645bdd506bfabfcac9d6398dd0562c6905c
+ md5: dda0e24b4605ebbd381e48606a107bed
+ depends:
+ - libblas 3.9.0 25_osx64_openblas
+ constrains:
+ - liblapacke 3.9.0 25_osx64_openblas
+ - blas * openblas
+ - libcblas 3.9.0 25_osx64_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15852
+ timestamp: 1729643174413
+- kind: conda
+ name: liblapacke
+ version: 3.9.0
+ build: 25_linux64_openblas
+ build_number: 25
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda
+ sha256: f8bc6fe22126ca0bf204c27f829d1e0006069cc98776a33122bf8d0548940b3c
+ md5: 8f5ead31b3a168aedd488b8a87736c41
+ depends:
+ - libblas 3.9.0 25_linux64_openblas
+ - libcblas 3.9.0 25_linux64_openblas
+ - liblapack 3.9.0 25_linux64_openblas
+ constrains:
+ - blas * openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15609
+ timestamp: 1729642916038
+- kind: conda
+ name: liblapacke
+ version: 3.9.0
+ build: 25_osx64_openblas
+ build_number: 25
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/liblapacke-3.9.0-25_osx64_openblas.conda
+ sha256: 14e1ec71bd47d63ec32b95801b04d850f12fb8ece3b03483fd36f898336d987b
+ md5: ddd746770d7811274ba38e0a832e3a50
+ depends:
+ - libblas 3.9.0 25_osx64_openblas
+ - libcblas 3.9.0 25_osx64_openblas
+ - liblapack 3.9.0 25_osx64_openblas
+ constrains:
+ - blas * openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15846
+ timestamp: 1729643185849
+- kind: conda
+ name: libmamba
+ version: 1.5.8
+ build: ha449628_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libmamba-1.5.8-ha449628_0.conda
+ sha256: 48ef28e63407a42f0b0553b64aa0cdeadaa441bd588cd89a4988755baec07654
+ md5: f4eafddd38618657afefb7540d4c1a20
+ depends:
+ - fmt >=10.2.1,<11.0a0
+ - libarchive >=3.7.2,<3.8.0a0
+ - libcurl >=8.6.0,<9.0a0
+ - libcxx >=16
+ - libsolv >=0.7.23
+ - openssl >=3.2.1,<4.0a0
+ - reproc >=14.2,<15.0a0
+ - reproc-cpp >=14.2,<15.0a0
+ - yaml-cpp >=0.8.0,<0.9.0a0
+ - zstd >=1.5.5,<1.6.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 1298413
+ timestamp: 1711395384374
+- kind: conda
+ name: libmamba
+ version: 1.5.8
+ build: had39da4_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda
+ sha256: 79c275862cc084c9f0dc1a13bd42313d48202181d5d64615b3046bf2380ef57d
+ md5: def669885dc103d8acb7ac2ac35e0b2f
+ depends:
+ - fmt >=10.2.1,<11.0a0
+ - libarchive >=3.7.2,<3.8.0a0
+ - libcurl >=8.6.0,<9.0a0
+ - libgcc-ng >=12
+ - libsolv >=0.7.23
+ - libstdcxx-ng >=12
+ - openssl >=3.2.1,<4.0a0
+ - reproc >=14.2,<15.0a0
+ - reproc-cpp >=14.2,<15.0a0
+ - yaml-cpp >=0.8.0,<0.9.0a0
+ - zstd >=1.5.5,<1.6.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 1671126
+ timestamp: 1711394919576
+- kind: conda
+ name: libmambapy
+ version: 1.5.8
+ build: py312h67f5953_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libmambapy-1.5.8-py312h67f5953_0.conda
+ sha256: cb3f1fe02ef2c6bb39129e43af7dfcf1a3d98a4d4c21e5eed5a1f3ef1c0557fb
+ md5: c7d0f9c38601b87f6ebb0ba00fb02e5c
+ depends:
+ - fmt >=10.2.1,<11.0a0
+ - libcxx >=16
+ - libmamba 1.5.8 ha449628_0
+ - openssl >=3.2.1,<4.0a0
+ - pybind11-abi 4
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - yaml-cpp >=0.8.0,<0.9.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 272088
+ timestamp: 1711395982732
+- kind: conda
+ name: libmambapy
+ version: 1.5.8
+ build: py312hd9e9ff6_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py312hd9e9ff6_0.conda
+ sha256: 429c8fd6f7be1040a52cedaa8cd7aa02a42ccc8a27baa0a4394516401e9d7b28
+ md5: ab74748421323fd59d9fda55e45b979e
+ depends:
+ - fmt >=10.2.1,<11.0a0
+ - libgcc-ng >=12
+ - libmamba 1.5.8 had39da4_0
+ - libstdcxx-ng >=12
+ - openssl >=3.2.1,<4.0a0
+ - pybind11-abi 4
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - yaml-cpp >=0.8.0,<0.9.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 306497
+ timestamp: 1711395345839
+- kind: conda
+ name: libnghttp2
+ version: 1.58.0
+ build: h47da74e_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda
+ sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb
+ md5: 700ac6ea6d53d5510591c4344d5c989a
+ depends:
+ - c-ares >=1.23.0,<2.0a0
+ - libev >=4.33,<4.34.0a0
+ - libev >=4.33,<5.0a0
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ - openssl >=3.2.0,<4.0a0
+ license: MIT
+ license_family: MIT
+ size: 631936
+ timestamp: 1702130036271
+- kind: conda
+ name: libnghttp2
+ version: 1.58.0
+ build: h64cf6d3_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda
+ sha256: 412fd768e787e586602f8e9ea52bf089f3460fc630f6987f0cbd89b70e9a4380
+ md5: faecc55c2a8155d9ff1c0ff9a0fef64f
+ depends:
+ - __osx >=10.9
+ - c-ares >=1.23.0,<2.0a0
+ - libcxx >=16.0.6
+ - libev >=4.33,<4.34.0a0
+ - libev >=4.33,<5.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ - openssl >=3.2.0,<4.0a0
+ license: MIT
+ license_family: MIT
+ size: 599736
+ timestamp: 1702130398536
+- kind: conda
+ name: libnsl
+ version: 2.0.1
+ build: hd590300_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
+ sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6
+ md5: 30fd6e37fe21f86f4bd26d6ee73eeec7
+ depends:
+ - libgcc-ng >=12
+ license: LGPL-2.1-only
+ license_family: GPL
+ size: 33408
+ timestamp: 1697359010159
+- kind: conda
+ name: libopenblas
+ version: 0.3.28
+ build: openmp_hbf64a52_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.28-openmp_hbf64a52_1.conda
+ sha256: cef5856952688ce9303f85f5bc62c99e8c2256b4c679f63afdfb381f222e90c7
+ md5: cd2c572c02a73b88c4d378eb31110e85
+ depends:
+ - __osx >=10.13
+ - libgfortran 5.*
+ - libgfortran5 >=13.2.0
+ - llvm-openmp >=18.1.8
+ constrains:
+ - openblas >=0.3.28,<0.3.29.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6165715
+ timestamp: 1730773348340
+- kind: conda
+ name: libopenblas
+ version: 0.3.28
+ build: pthreads_h94d23a6_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda
+ sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe
+ md5: 62857b389e42b36b686331bec0922050
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - libgfortran
+ - libgfortran5 >=14.2.0
+ constrains:
+ - openblas >=0.3.28,<0.3.29.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 5578513
+ timestamp: 1730772671118
+- kind: conda
+ name: libsolv
+ version: 0.7.29
+ build: h4f92f52_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libsolv-0.7.29-h4f92f52_0.conda
+ sha256: c91c9fa1a5cfa6c1d1b125567e82c99df8b4117416076fb909acd5e7ab0fad28
+ md5: f7618796195afe62f076d48737bbbbb8
+ depends:
+ - __osx >=10.9
+ - libcxx >=16
+ - libzlib >=1.2.13,<2.0.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 415537
+ timestamp: 1714552385517
+- kind: conda
+ name: libsolv
+ version: 0.7.29
+ build: ha6fb4c9_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.29-ha6fb4c9_0.conda
+ sha256: 4e6d2c6f3a8e23a7fee6a198bda7a82ee1405dd04b3ca824805125b7ea11bde5
+ md5: 28f3c528c01a07a592ee19f73ed730a0
+ depends:
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 470672
+ timestamp: 1714552161121
+- kind: conda
+ name: libsqlite
+ version: 3.46.0
+ build: h1b8f9f3_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda
+ sha256: 63af1a9e3284c7e4952364bafe7267e41e2d9d8bcc0e85a4ea4b0ec02d3693f6
+ md5: 5dadfbc1a567fe6e475df4ce3148be09
+ depends:
+ - __osx >=10.13
+ - libzlib >=1.2.13,<2.0a0
+ license: Unlicense
+ size: 908643
+ timestamp: 1718050720117
+- kind: conda
+ name: libsqlite
+ version: 3.46.0
+ build: hde9e2c9_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda
+ sha256: daee3f68786231dad457d0dfde3f7f1f9a7f2018adabdbb864226775101341a8
+ md5: 18aa975d2094c34aef978060ae7da7d8
+ depends:
+ - libgcc-ng >=12
+ - libzlib >=1.2.13,<2.0a0
+ license: Unlicense
+ size: 865346
+ timestamp: 1718050628718
+- kind: conda
+ name: libssh2
+ version: 1.11.0
+ build: h0841786_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda
+ sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d
+ md5: 1f5a58e686b13bcfde88b93f547d23fe
+ depends:
+ - libgcc-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ - openssl >=3.1.1,<4.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 271133
+ timestamp: 1685837707056
+- kind: conda
+ name: libssh2
+ version: 1.11.0
+ build: hd019ec5_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda
+ sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515
+ md5: ca3a72efba692c59a90d4b9fc0dfe774
+ depends:
+ - libzlib >=1.2.13,<2.0.0a0
+ - openssl >=3.1.1,<4.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 259556
+ timestamp: 1685837820566
+- kind: conda
+ name: libstdcxx
+ version: 14.2.0
+ build: hc0a3c3a_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda
+ sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462
+ md5: 234a5554c53625688d51062645337328
+ depends:
+ - libgcc 14.2.0 h77fa898_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 3893695
+ timestamp: 1729027746910
+- kind: conda
+ name: libstdcxx-ng
+ version: 14.2.0
+ build: h4852527_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda
+ sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8
+ md5: 8371ac6457591af2cf6159439c1fd051
+ depends:
+ - libstdcxx 14.2.0 hc0a3c3a_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 54105
+ timestamp: 1729027780628
+- kind: conda
+ name: libuuid
+ version: 2.38.1
+ build: h0b41bf4_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
+ sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18
+ md5: 40b61aab5c7ba9ff276c41cfffe6b80b
+ depends:
+ - libgcc-ng >=12
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 33601
+ timestamp: 1680112270483
+- kind: conda
+ name: libxcrypt
+ version: 4.4.36
+ build: hd590300_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
+ sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c
+ md5: 5aa797f8787fe7a17d1b0821485b5adc
+ depends:
+ - libgcc-ng >=12
+ license: LGPL-2.1-or-later
+ size: 100393
+ timestamp: 1702724383534
+- kind: conda
+ name: libxml2
+ version: 2.12.7
+ build: h3e169fe_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-h3e169fe_1.conda
+ sha256: 75554b5ef4c61a97c1d2ddcaff2d87c5ee120ff6925c2b714e18b20727cafb98
+ md5: ddb63049aa7bd9f08f2cdc5a1c144d1a
+ depends:
+ - __osx >=10.13
+ - icu >=73.2,<74.0a0
+ - libiconv >=1.17,<2.0a0
+ - libzlib >=1.2.13,<2.0a0
+ - xz >=5.2.6,<6.0a0
+ license: MIT
+ license_family: MIT
+ size: 619297
+ timestamp: 1717546472911
+- kind: conda
+ name: libxml2
+ version: 2.12.7
+ build: hc051c1a_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-hc051c1a_1.conda
+ sha256: 576ea9134176636283ff052897bf7a91ffd8ac35b2c505dfde2890ec52849698
+ md5: 340278ded8b0dc3a73f3660bbb0adbc6
+ depends:
+ - icu >=73.2,<74.0a0
+ - libgcc-ng >=12
+ - libiconv >=1.17,<2.0a0
+ - libzlib >=1.2.13,<2.0a0
+ - xz >=5.2.6,<6.0a0
+ license: MIT
+ license_family: MIT
+ size: 704984
+ timestamp: 1717546454837
+- kind: conda
+ name: libzlib
+ version: 1.2.13
+ build: h4ab18f5_6
+ build_number: 6
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h4ab18f5_6.conda
+ sha256: 8ced4afed6322172182af503f21725d072a589a6eb918f8a58135c1e00d35980
+ md5: 27329162c0dc732bcf67a4e0cd488125
+ depends:
+ - libgcc-ng >=12
+ constrains:
+ - zlib 1.2.13 *_6
+ license: Zlib
+ license_family: Other
+ size: 61571
+ timestamp: 1716874066944
+- kind: conda
+ name: libzlib
+ version: 1.2.13
+ build: h87427d6_6
+ build_number: 6
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h87427d6_6.conda
+ sha256: 1c70fca0720685242b5c68956f310665c7ed43f04807aa4227322eee7925881c
+ md5: c0ef3c38a80c02ae1d86588c055184fc
+ depends:
+ - __osx >=10.13
+ constrains:
+ - zlib 1.2.13 *_6
+ license: Zlib
+ license_family: Other
+ size: 57373
+ timestamp: 1716874185419
+- kind: conda
+ name: llvm-openmp
+ version: 19.1.3
+ build: hf78d878_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.3-hf78d878_0.conda
+ sha256: 3d28e9938ab1400322ba76968cdbee035009d611bbee94ec6b38a154551954b4
+ md5: 18a8498d57d871da066beaa09263a638
+ depends:
+ - __osx >=10.13
+ constrains:
+ - openmp 19.1.3|19.1.3.*
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
+ size: 305524
+ timestamp: 1730364180247
+- kind: conda
+ name: logmuse
+ version: 0.2.8
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/logmuse-0.2.8-pyhd8ed1ab_0.conda
+ sha256: 52cc2d94cde2830133c7a3cb42d82aec9b5513d034338c77d0be4a8fb4deaf60
+ md5: 36460a82251aae67f02e976ccd8b911b
+ depends:
+ - python >=3.8
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 13455
+ timestamp: 1728929621314
+- kind: conda
+ name: lz4-c
+ version: 1.9.4
+ build: hcb278e6_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda
+ sha256: 1b4c105a887f9b2041219d57036f72c4739ab9e9fe5a1486f094e58c76b31f5f
+ md5: 318b08df404f9c9be5712aaa5a6f0bb0
+ depends:
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 143402
+ timestamp: 1674727076728
+- kind: conda
+ name: lz4-c
+ version: 1.9.4
+ build: hf0c8a7f_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda
+ sha256: 39aa0c01696e4e202bf5e337413de09dfeec061d89acd5f28e9968b4e93c3f48
+ md5: aa04f7143228308662696ac24023f991
+ depends:
+ - libcxx >=14.0.6
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 156415
+ timestamp: 1674727335352
+- kind: conda
+ name: lzo
+ version: '2.10'
+ build: h10d778d_1001
+ build_number: 1001
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/lzo-2.10-h10d778d_1001.conda
+ sha256: 4006c57f805ca6aec72ee0eb7166b2fd648dd1bf3721b9de4b909cd374196643
+ md5: bfecd73e4a2dc18ffd5288acf8a212ab
+ license: GPL-2.0-or-later
+ license_family: GPL2
+ size: 146405
+ timestamp: 1713516112292
+- kind: conda
+ name: lzo
+ version: '2.10'
+ build: hd590300_1001
+ build_number: 1001
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda
+ sha256: 88433b98a9dd9da315400e7fb9cd5f70804cb17dca8b1c85163a64f90f584126
+ md5: ec7398d21e2651e0dcb0044d03b9a339
+ depends:
+ - libgcc-ng >=12
+ license: GPL-2.0-or-later
+ license_family: GPL2
+ size: 171416
+ timestamp: 1713515738503
+- kind: conda
+ name: markdown-it-py
+ version: 3.0.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
+ sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962
+ md5: 93a8e71256479c62074356ef6ebf501b
+ depends:
+ - mdurl >=0.1,<1
+ - python >=3.8
+ license: MIT
+ license_family: MIT
+ size: 64356
+ timestamp: 1686175179621
+- kind: conda
+ name: markupsafe
+ version: 3.0.2
+ build: py312h178313f_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_0.conda
+ sha256: 15f14ab429c846aacd47fada0dc4f341d64491e097782830f0906d00cb7b48b6
+ md5: a755704ea0e2503f8c227d84829a8e81
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 24878
+ timestamp: 1729351558563
+- kind: conda
+ name: markupsafe
+ version: 3.0.2
+ build: py312hbe3f5e4_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py312hbe3f5e4_0.conda
+ sha256: b2fb54718159055fdf89da7d9f0c6743ef84b31960617a56810920d17616d944
+ md5: c6238833d7dc908ec295bc490b80d845
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 23889
+ timestamp: 1729351468966
+- kind: conda
+ name: mdurl
+ version: 0.1.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+ sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1
+ md5: 776a8dd9e824f77abac30e6ef43a8f7a
+ depends:
+ - python >=3.6
+ license: MIT
+ license_family: MIT
+ size: 14680
+ timestamp: 1704317789138
+- kind: conda
+ name: menuinst
+ version: 2.2.0
+ build: py312h7900ff3_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.2.0-py312h7900ff3_0.conda
+ sha256: a3d3f509e545913b6aee004b3e91c0147723b7d569ff256db9cbc8eb2d7b1772
+ md5: f22f8e77b36e67297feffe03eefd5375
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause AND MIT
+ size: 166308
+ timestamp: 1731147065526
+- kind: conda
+ name: menuinst
+ version: 2.2.0
+ build: py312hb401068_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/menuinst-2.2.0-py312hb401068_0.conda
+ sha256: caf806b6f0d8acbfc06d87c21d89b0624b5b230fd30246860399fa01f3b0ba0f
+ md5: 4b908217561a1274f48b0f9952fb5359
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause AND MIT
+ size: 166741
+ timestamp: 1731147133148
+- kind: conda
+ name: mypy_extensions
+ version: 1.0.0
+ build: pyha770c72_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
+ sha256: f240217476e148e825420c6bc3a0c0efb08c0718b7042fae960400c02af858a3
+ md5: 4eccaeba205f0aed9ac3a9ea58568ca3
+ depends:
+ - python >=3.5
+ license: MIT
+ license_family: MIT
+ size: 10492
+ timestamp: 1675543414256
+- kind: conda
+ name: nbformat
+ version: 5.10.4
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda
+ sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c
+ md5: 0b57b5368ab7fc7cdc9e3511fa867214
+ depends:
+ - jsonschema >=2.6
+ - jupyter_core >=4.12,!=5.0.*
+ - python >=3.8
+ - python-fastjsonschema >=2.15
+ - traitlets >=5.1
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 101232
+ timestamp: 1712239122969
+- kind: conda
+ name: ncurses
+ version: '6.5'
+ build: he02047a_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
+ sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a
+ md5: 70caf8bb6cf39a0b6b7efc885f51c0fe
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc-ng >=12
+ license: X11 AND BSD-3-Clause
+ size: 889086
+ timestamp: 1724658547447
+- kind: conda
+ name: ncurses
+ version: '6.5'
+ build: hf036a51_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_1.conda
+ sha256: b0b3180039ef19502525a2abd5833c00f9624af830fd391f851934d57bffb9af
+ md5: e102bbf8a6ceeaf429deab8032fc8977
+ depends:
+ - __osx >=10.13
+ license: X11 AND BSD-3-Clause
+ size: 822066
+ timestamp: 1724658603042
+- kind: conda
+ name: numpy
+ version: 2.1.3
+ build: py312h58c1407_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.3-py312h58c1407_0.conda
+ sha256: e4c14f71588a5627a6935d3e7d9ca78a8387229ec8ebc91616b0988ce57ba0dc
+ md5: dfdbc12e6d81889ba4c494a23f23eba8
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc >=13
+ - liblapack >=3.9.0,<4.0a0
+ - libstdcxx >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 8388631
+ timestamp: 1730588649810
+- kind: conda
+ name: numpy
+ version: 2.1.3
+ build: py312hfc93d17_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.3-py312hfc93d17_0.conda
+ sha256: 2f120e958da2d6ab7e4785a42515b4f65f70422b8b722e1a75654962fcfb26e9
+ md5: 011118baf131914d1cb48e07317f0946
+ depends:
+ - __osx >=10.13
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=18
+ - liblapack >=3.9.0,<4.0a0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 7538388
+ timestamp: 1730588494493
+- kind: conda
+ name: openssl
+ version: 3.4.0
+ build: hb9d3cd8_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
+ sha256: 814b9dff1847b132c676ee6cc1a8cb2d427320779b93e1b6d76552275c128705
+ md5: 23cc74f77eb99315c0360ec3533147a9
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - ca-certificates
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 2947466
+ timestamp: 1731377666602
+- kind: conda
+ name: openssl
+ version: 3.4.0
+ build: hd471939_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.4.0-hd471939_0.conda
+ sha256: ba7e068ed469d6625e32ae60e6ad893e655b6695280dadf7e065ed0b6f3b885c
+ md5: ec99d2ce0b3033a75cbad01bbc7c5b71
+ depends:
+ - __osx >=10.13
+ - ca-certificates
+ license: Apache-2.0
+ license_family: Apache
+ size: 2590683
+ timestamp: 1731378034404
+- kind: conda
+ name: packaging
+ version: '24.2'
+ build: pyhff2d567_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
+ sha256: 74843f871e5cd8a1baf5ed8c406c571139c287141efe532f8ffbdafa3664d244
+ md5: 8508b703977f4c4ada34d657d051972c
+ depends:
+ - python >=3.8
+ license: Apache-2.0
+ license_family: APACHE
+ size: 60380
+ timestamp: 1731802602808
+- kind: conda
+ name: pandas
+ version: 2.2.3
+ build: py312h98e817e_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.3-py312h98e817e_1.conda
+ sha256: 86c252ce5718b55129303f7d5c9a8664d8f0b23e303579142d09fcfd701e4fbe
+ md5: a7f7c58bbbfcdf820edb6e544555fe8f
+ depends:
+ - __osx >=10.13
+ - libcxx >=17
+ - numpy >=1.19,<3
+ - numpy >=1.22.4
+ - python >=3.12,<3.13.0a0
+ - python-dateutil >=2.8.1
+ - python-tzdata >=2022a
+ - python_abi 3.12.* *_cp312
+ - pytz >=2020.1,<2024.2
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 14575645
+ timestamp: 1726879062042
+- kind: conda
+ name: pandas
+ version: 2.2.3
+ build: py312hf9745cd_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda
+ sha256: ad275a83bfebfa8a8fee9b0569aaf6f513ada6a246b2f5d5b85903d8ca61887e
+ md5: 8bce4f6caaf8c5448c7ac86d87e26b4b
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
+ - numpy >=1.19,<3
+ - numpy >=1.22.4
+ - python >=3.12,<3.13.0a0
+ - python-dateutil >=2.8.1
+ - python-tzdata >=2022a
+ - python_abi 3.12.* *_cp312
+ - pytz >=2020.1,<2024.2
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 15436913
+ timestamp: 1726879054912
+- kind: conda
+ name: pathspec
+ version: 0.12.1
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+ sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d
+ md5: 17064acba08d3686f1135b5ec1b32b12
+ depends:
+ - python >=3.7
+ license: MPL-2.0
+ license_family: MOZILLA
+ size: 41173
+ timestamp: 1702250135032
+- kind: conda
+ name: pephubclient
+ version: 0.4.4
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pephubclient-0.4.4-pyhd8ed1ab_0.conda
+ sha256: 03660b33cffb76da14e77176aad109ba0fe50d824e0bd95973ab159696a10c86
+ md5: 1fb0b63ececc327dda75c29633429d12
+ depends:
+ - coloredlogs >=15.0.1
+ - pandas >=2.0.0
+ - peppy >=0.40.5
+ - pydantic >=2.5.0
+ - python >=3.8
+ - requests >=2.28.2
+ - typer >=0.7.0
+ - ubiquerg >=0.6.3
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 22193
+ timestamp: 1728675175037
+- kind: conda
+ name: peppy
+ version: 0.40.7
+ build: pyhd8ed1ab_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/peppy-0.40.7-pyhd8ed1ab_1.conda
+ sha256: 576f605077590eacb948bc4cfb7c9b3a04ac7932624901618766c53134812ebe
+ md5: 6e6e5fa522000fb52544768e212820eb
+ depends:
+ - logmuse >=0.2
+ - pandas >=0.24.2
+ - pephubclient >=0.4.2
+ - python >=3.8
+ - pyyaml >=5
+ - rich
+ - ubiquerg >=0.5.2
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 29442
+ timestamp: 1729011123771
+- kind: conda
+ name: pkgutil-resolve-name
+ version: 1.3.10
+ build: pyhd8ed1ab_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
+ sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a
+ md5: 405678b942f2481cecdb3e010f4925d9
+ depends:
+ - python >=3.6
+ license: MIT AND PSF-2.0
+ size: 10778
+ timestamp: 1694617398467
+- kind: conda
+ name: plac
+ version: 1.4.3
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda
+ sha256: fccc1776a94db15f0ef8fdc66d621d01b7f0b33896b7eead82ec4fc1df094d13
+ md5: c2231e8389ae345477ac94e736e8cc1b
+ depends:
+ - python >=3.6
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 26044
+ timestamp: 1708635292043
+- kind: conda
+ name: platformdirs
+ version: 4.3.6
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
+ sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f
+ md5: fd8f2b18b65bbf62e8f653100690c8d2
+ depends:
+ - python >=3.8
+ license: MIT
+ license_family: MIT
+ size: 20625
+ timestamp: 1726613611845
+- kind: conda
+ name: pluggy
+ version: 1.5.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26
+ md5: d3483c8fc2dc2cc3f5cf43e26d60cabf
+ depends:
+ - python >=3.8
+ license: MIT
+ license_family: MIT
+ size: 23815
+ timestamp: 1713667175451
+- kind: conda
+ name: psutil
+ version: 6.1.0
+ build: py312h3d0f464_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/psutil-6.1.0-py312h3d0f464_0.conda
+ sha256: a2c2d8a8665cce8a1c2b186b2580e1ef3e3414aa67b2d48ac46f0582434910c3
+ md5: 1df95544dc6aeb33af591146f44d9293
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 493463
+ timestamp: 1729847222797
+- kind: conda
+ name: psutil
+ version: 6.1.0
+ build: py312h66e93f0_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda
+ sha256: 0f309b435174e037d5cfe5ed26c1c5ad8152c68cfe61af17709ec31ec3d9f096
+ md5: 0524eb91d3d78d76d671c6e3cd7cee82
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 488462
+ timestamp: 1729847159916
+- kind: conda
+ name: pulp
+ version: 2.8.0
+ build: py312h7900ff3_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/pulp-2.8.0-py312h7900ff3_0.conda
+ sha256: 9bdcdde0cb169cc23aa9dff570f9925799ea5f69478ccde7bea9a1799d5e5c58
+ md5: 20e55885b4b57db6f53e746d1076a8b0
+ depends:
+ - amply >=0.1.2
+ - coincbc
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 13217118
+ timestamp: 1705064802698
+- kind: conda
+ name: pulp
+ version: 2.8.0
+ build: py312hb401068_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/pulp-2.8.0-py312hb401068_0.conda
+ sha256: 978e00ef7b77ebded4d68344b3f23e5466a3fff3a29ad11990c1ea505f6ec223
+ md5: 1052ee40a91de1414e0cbe0cc34e0896
+ depends:
+ - amply >=0.1.2
+ - coincbc
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 13333860
+ timestamp: 1705064991160
+- kind: conda
+ name: pybind11-abi
+ version: '4'
+ build: hd8ed1ab_3
+ build_number: 3
+ subdir: noarch
+ noarch: generic
+ url: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
+ sha256: d4fb485b79b11042a16dc6abfb0c44c4f557707c2653ac47c81e5d32b24a3bb0
+ md5: 878f923dd6acc8aeb47a75da6c4098be
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 9906
+ timestamp: 1610372835205
+- kind: conda
+ name: pycosat
+ version: 0.6.6
+ build: py312h104f124_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/pycosat-0.6.6-py312h104f124_0.conda
+ sha256: b37afbc13d4216dde3a613ded3a1688adae3d74ab98ea55cc6914b39d2417d55
+ md5: 106c2d37708757f4c23ff1f487bf5a3f
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 89221
+ timestamp: 1696356180943
+- kind: conda
+ name: pycosat
+ version: 0.6.6
+ build: py312h98912ed_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py312h98912ed_0.conda
+ sha256: b973d39eb9fd9625fe97e2fbb4b6f758ea47aa288f5f8c7769e3f36a3acbb5da
+ md5: 8f1c372e7b843167be885dc8229931c1
+ depends:
+ - libgcc-ng >=12
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 88549
+ timestamp: 1696355931150
+- kind: conda
+ name: pycparser
+ version: '2.22'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+ sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64
+ md5: 844d9eb3b43095b031874477f7d70088
+ depends:
+ - python >=3.8
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 105098
+ timestamp: 1711811634025
+- kind: conda
+ name: pydantic
+ version: 2.9.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda
+ sha256: 1b7b0dc9f6af4da156bf22b0263be70829364a08145c696d3670facff2f6441a
+ md5: 1eb533bb8eb2199e3fef3e4aa147319f
+ depends:
+ - annotated-types >=0.6.0
+ - pydantic-core 2.23.4
+ - python >=3.7
+ - typing-extensions >=4.6.1
+ license: MIT
+ license_family: MIT
+ size: 300649
+ timestamp: 1726601202431
+- kind: conda
+ name: pydantic-core
+ version: 2.23.4
+ build: py312h12e396e_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.23.4-py312h12e396e_0.conda
+ sha256: 365fde689865087b2a9da636f36678bd59617b324ce7a538b4806e90602b20f1
+ md5: 0845ab52d4ea209049129a6a91bc74ba
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - typing-extensions >=4.6.0,!=4.7.0
+ constrains:
+ - __glibc >=2.17
+ license: MIT
+ license_family: MIT
+ size: 1611784
+ timestamp: 1726525286507
+- kind: conda
+ name: pydantic-core
+ version: 2.23.4
+ build: py312h669792a_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/pydantic-core-2.23.4-py312h669792a_0.conda
+ sha256: 46b17406772d7403ce454c1005e493a2723a189403dd2a70a3566ac4b1f82a4a
+ md5: 14806afd8ed78812d83e8b9ea4b549c0
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - typing-extensions >=4.6.0,!=4.7.0
+ constrains:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 1535259
+ timestamp: 1726525537029
+- kind: conda
+ name: pygments
+ version: 2.18.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+ sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b
+ md5: b7f5c092b8f9800150d998a71b76d5a1
+ depends:
+ - python >=3.8
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 879295
+ timestamp: 1714846885370
+- kind: conda
+ name: pyparsing
+ version: 3.2.0
+ build: pyhd8ed1ab_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda
+ sha256: b846e3965cd106438cf0b9dc0de8d519670ac065f822a7d66862e9423e0229cb
+ md5: 035c17fbf099f50ff60bf2eb303b0a83
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 92444
+ timestamp: 1728880549923
+- kind: conda
+ name: pysocks
+ version: 1.7.1
+ build: pyha2e5f31_6
+ build_number: 6
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+ sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b
+ md5: 2a7de29fb590ca14b5243c4c812c8025
+ depends:
+ - __unix
+ - python >=3.8
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 18981
+ timestamp: 1661604969727
+- kind: conda
+ name: pytest
+ version: 8.3.3
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
+ sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815
+ md5: c03d61f31f38fdb9facf70c29958bf7a
+ depends:
+ - colorama
+ - exceptiongroup >=1.0.0rc8
+ - iniconfig
+ - packaging
+ - pluggy <2,>=1.5
+ - python >=3.8
+ - tomli >=1
+ constrains:
+ - pytest-faulthandler >=2
+ license: MIT
+ license_family: MIT
+ size: 258293
+ timestamp: 1725977334143
+- kind: conda
+ name: python
+ version: 3.12.3
+ build: h1411813_0_cpython
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda
+ sha256: 3b327ffc152a245011011d1d730781577a8274fde1cf6243f073749ead8f1c2a
+ md5: df1448ec6cbf8eceb03d29003cf72ae6
+ depends:
+ - __osx >=10.9
+ - bzip2 >=1.0.8,<2.0a0
+ - libexpat >=2.6.2,<3.0a0
+ - libffi >=3.4,<4.0a0
+ - libsqlite >=3.45.2,<4.0a0
+ - libzlib >=1.2.13,<2.0.0a0
+ - ncurses >=6.4.20240210,<7.0a0
+ - openssl >=3.2.1,<4.0a0
+ - readline >=8.2,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ - xz >=5.2.6,<6.0a0
+ constrains:
+ - python_abi 3.12.* *_cp312
+ license: Python-2.0
+ size: 14557341
+ timestamp: 1713208068012
+- kind: conda
+ name: python
+ version: 3.12.3
+ build: hab00c5b_0_cpython
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
+ sha256: f9865bcbff69f15fd89a33a2da12ad616e98d65ce7c83c644b92e66e5016b227
+ md5: 2540b74d304f71d3e89c81209db4db84
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - ld_impl_linux-64 >=2.36.1
+ - libexpat >=2.6.2,<3.0a0
+ - libffi >=3.4,<4.0a0
+ - libgcc-ng >=12
+ - libnsl >=2.0.1,<2.1.0a0
+ - libsqlite >=3.45.2,<4.0a0
+ - libuuid >=2.38.1,<3.0a0
+ - libxcrypt >=4.4.36
+ - libzlib >=1.2.13,<2.0.0a0
+ - ncurses >=6.4.20240210,<7.0a0
+ - openssl >=3.2.1,<4.0a0
+ - readline >=8.2,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ - xz >=5.2.6,<6.0a0
+ constrains:
+ - python_abi 3.12.* *_cp312
+ license: Python-2.0
+ size: 31991381
+ timestamp: 1713208036041
+- kind: conda
+ name: python-dateutil
+ version: 2.9.0.post0
+ build: pyhff2d567_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_0.conda
+ sha256: 3888012c5916efaef45d503e3e544bbcc571b84426c1bb9577799ada9efefb54
+ md5: b6dfd90a2141e573e4b6a81630b56df5
+ depends:
+ - python >=3.9
+ - six >=1.5
+ license: Apache-2.0
+ size: 221925
+ timestamp: 1731919374686
+- kind: conda
+ name: python-fastjsonschema
+ version: 2.20.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
+ sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60
+ md5: b98d2018c01ce9980c03ee2850690fab
+ depends:
+ - python >=3.3
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 226165
+ timestamp: 1718477110630
+- kind: conda
+ name: python-tzdata
+ version: '2024.2'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda
+ sha256: fe3f62ce2bc714bdaa222ab3f0344a2815ad9e853c6df38d15c9f25de8a3a6d4
+ md5: 986287f89929b2d629bd6ef6497dc307
+ depends:
+ - python >=3.6
+ license: Apache-2.0
+ license_family: APACHE
+ size: 142527
+ timestamp: 1727140688093
+- kind: conda
+ name: python_abi
+ version: '3.12'
+ build: 5_cp312
+ build_number: 5
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda
+ sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0
+ md5: 0424ae29b104430108f5218a66db7260
+ constrains:
+ - python 3.12.* *_cpython
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6238
+ timestamp: 1723823388266
+- kind: conda
+ name: python_abi
+ version: '3.12'
+ build: 5_cp312
+ build_number: 5
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda
+ sha256: 4da26c7508d5bc5d8621e84dc510284402239df56aab3587a7d217de9d3c806d
+ md5: c34dd4920e0addf7cfcc725809f25d8e
+ constrains:
+ - python 3.12.* *_cpython
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6312
+ timestamp: 1723823137004
+- kind: conda
+ name: pytz
+ version: '2024.1'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+ sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41
+ md5: 3eeeeb9e4827ace8c0c1419c85d590ad
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 188538
+ timestamp: 1706886944988
+- kind: conda
+ name: pyyaml
+ version: 6.0.2
+ build: py312h66e93f0_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda
+ sha256: a60705971e958724168f2ebbb8ed4853067f1d3f7059843df3903e3092bbcffa
+ md5: 549e5930e768548a89c23f595dac5a95
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ size: 206553
+ timestamp: 1725456256213
+- kind: conda
+ name: pyyaml
+ version: 6.0.2
+ build: py312hb553811_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py312hb553811_1.conda
+ sha256: 455ce40588b35df654cb089d29cc3f0d3c78365924ffdfc6ee93dba80cea5f33
+ md5: 66514594817d51c78db7109a23ad322f
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ size: 189347
+ timestamp: 1725456465705
+- kind: conda
+ name: readline
+ version: '8.2'
+ build: h8228510_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
+ sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7
+ md5: 47d31b792659ce70f470b5c82fdfb7a4
+ depends:
+ - libgcc-ng >=12
+ - ncurses >=6.3,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ size: 281456
+ timestamp: 1679532220005
+- kind: conda
+ name: readline
+ version: '8.2'
+ build: h9e318b2_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda
+ sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568
+ md5: f17f77f2acf4d344734bda76829ce14e
+ depends:
+ - ncurses >=6.3,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ size: 255870
+ timestamp: 1679532707590
+- kind: conda
+ name: referencing
+ version: 0.35.1
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda
+ sha256: be8d6d9e86b1a3fef5424127ff81782f8ca63d3058980859609f6f1ecdd34cb3
+ md5: 0fc8b52192a8898627c3efae1003e9f6
+ depends:
+ - attrs >=22.2.0
+ - python >=3.8
+ - rpds-py >=0.7.0
+ license: MIT
+ license_family: MIT
+ size: 42210
+ timestamp: 1714619625532
+- kind: conda
+ name: reproc
+ version: 14.2.5.post0
+ build: h6e16a3a_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/reproc-14.2.5.post0-h6e16a3a_0.conda
+ sha256: dda2a8bc1bf16b563b74c2a01dccea657bda573b0c45e708bfeee01c208bcbaf
+ md5: eda18d4a7dce3831016086a482965345
+ depends:
+ - __osx >=10.13
+ license: MIT
+ size: 31749
+ timestamp: 1731926270954
+- kind: conda
+ name: reproc
+ version: 14.2.5.post0
+ build: hb9d3cd8_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.5.post0-hb9d3cd8_0.conda
+ sha256: a1973f41a6b956f1305f9aaefdf14b2f35a8c9615cfe5f143f1784ed9aa6bf47
+ md5: 69fbc0a9e42eb5fe6733d2d60d818822
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: MIT
+ size: 34194
+ timestamp: 1731925834928
+- kind: conda
+ name: reproc-cpp
+ version: 14.2.5.post0
+ build: h240833e_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/reproc-cpp-14.2.5.post0-h240833e_0.conda
+ sha256: 4d8638b7f44082302c7687c99079789f42068d34cddc0959c11ad5d28aab3d47
+ md5: 420229341978751bd96faeced92c200e
+ depends:
+ - __osx >=10.13
+ - libcxx >=18
+ - reproc 14.2.5.post0 h6e16a3a_0
+ license: MIT
+ size: 24394
+ timestamp: 1731926392643
+- kind: conda
+ name: reproc-cpp
+ version: 14.2.5.post0
+ build: h5888daf_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.5.post0-h5888daf_0.conda
+ sha256: 568485837b905b1ea7bdb6e6496d914b83db57feda57f6050d5a694977478691
+ md5: 828302fca535f9cfeb598d5f7c204323
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
+ - reproc 14.2.5.post0 hb9d3cd8_0
+ license: MIT
+ size: 25665
+ timestamp: 1731925852714
+- kind: conda
+ name: requests
+ version: 2.32.3
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda
+ sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc
+ md5: 5ede4753180c7a550a443c430dc8ab52
+ depends:
+ - certifi >=2017.4.17
+ - charset-normalizer >=2,<4
+ - idna >=2.5,<4
+ - python >=3.8
+ - urllib3 >=1.21.1,<3
+ constrains:
+ - chardet >=3.0.2,<6
+ license: Apache-2.0
+ license_family: APACHE
+ size: 58810
+ timestamp: 1717057174842
+- kind: conda
+ name: reretry
+ version: 0.11.8
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda
+ sha256: ef8a072e3dd963edabe6077c392b9d4581069ce92a1adb3039448ab31e017476
+ md5: b8a877fba9cfe5d5dc2fef9d951316dd
+ depends:
+ - python >=3.6
+ license: Apache-2.0
+ license_family: APACHE
+ size: 12191
+ timestamp: 1671379290649
+- kind: conda
+ name: rich
+ version: 13.9.4
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda
+ sha256: c009488fc07fd5557434c9c1ad32ab1dd50241d6a766e4b2b4125cd6498585a8
+ md5: bcf8cc8924b5d20ead3d122130b8320b
+ depends:
+ - markdown-it-py >=2.2.0
+ - pygments >=2.13.0,<3.0.0
+ - python >=3.8
+ - typing_extensions >=4.0.0,<5.0.0
+ license: MIT
+ license_family: MIT
+ size: 185481
+ timestamp: 1730592349978
+- kind: conda
+ name: rpds-py
+ version: 0.21.0
+ build: py312h0d0de52_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py312h0d0de52_0.conda
+ sha256: ff4c1d70c78085a2abb8f8fc1dc283a60eafe61e03c3367d7cbface6190fe7ab
+ md5: dae0ad51ccb74a37f0b64ed6e6f82840
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 303838
+ timestamp: 1730922939375
+- kind: conda
+ name: rpds-py
+ version: 0.21.0
+ build: py312h12e396e_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.21.0-py312h12e396e_0.conda
+ sha256: 6a2c3808b0922e453b450cc092f5e5da9d2466f48acce224da90432a94146c12
+ md5: 37f4ad7cb4214c799f32e5f411c6c69f
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __glibc >=2.17
+ license: MIT
+ license_family: MIT
+ size: 336759
+ timestamp: 1730922756033
+- kind: conda
+ name: ruamel.yaml
+ version: 0.18.6
+ build: py312h3d0f464_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.18.6-py312h3d0f464_1.conda
+ sha256: 6a7fba898720a81e2f19ec2870fc43ec2fc568dc71974390a91285d0bb75c476
+ md5: 54f228329acc295c90a1961871439f58
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ruamel.yaml.clib >=0.1.2
+ license: MIT
+ license_family: MIT
+ size: 266986
+ timestamp: 1728765127326
+- kind: conda
+ name: ruamel.yaml
+ version: 0.18.6
+ build: py312h66e93f0_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h66e93f0_1.conda
+ sha256: adbf638ac2916c8c376ade8e5f77cf6998e049eea4e23cc8a9f4a947c6938df3
+ md5: 28ed869ade5601ee374934a31c9d628e
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ruamel.yaml.clib >=0.1.2
+ license: MIT
+ license_family: MIT
+ size: 267375
+ timestamp: 1728765106963
+- kind: conda
+ name: ruamel.yaml.clib
+ version: 0.2.8
+ build: py312h3d0f464_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h3d0f464_1.conda
+ sha256: b5ddb73db7ca3d4d8780af1761efb97a5f555ae489f287a91367624d4425f498
+ md5: f4c0464f98dabcd65064e89991c3c9c2
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 122331
+ timestamp: 1728724619287
+- kind: conda
+ name: ruamel.yaml.clib
+ version: 0.2.8
+ build: py312h66e93f0_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda
+ sha256: ac987b1c186d79e4e1ce4354a84724fc68db452b2bd61de3a3e1b6fc7c26138d
+ md5: 532c3e5d0280be4fea52396ec1fa7d5d
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ size: 145481
+ timestamp: 1728724626666
+- kind: conda
+ name: setuptools
+ version: 75.5.0
+ build: pyhff2d567_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda
+ sha256: 54dcf5f09f74f69641e0063bc695b38340d0349fa8371b1f2ed0c45c5b2fd224
+ md5: ade63405adb52eeff89d506cd55908c0
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 772480
+ timestamp: 1731707561164
+- kind: conda
+ name: shellingham
+ version: 1.5.4
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
+ sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb
+ md5: d08db09a552699ee9e7eec56b4eb3899
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 14568
+ timestamp: 1698144516278
+- kind: conda
+ name: six
+ version: 1.16.0
+ build: pyh6c4a22f_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+ sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6
+ md5: e5f25f8dbc060e9a8d912e432202afc2
+ depends:
+ - python
+ license: MIT
+ license_family: MIT
+ size: 14259
+ timestamp: 1620240338595
+- kind: conda
+ name: slack-sdk
+ version: 3.33.3
+ build: pyha770c72_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/slack-sdk-3.33.3-pyha770c72_0.conda
+ sha256: a2b8f3980fc76a1619005b33dc82146c7a2d1a406d1a60fc5d9099974c0a8bf9
+ md5: 6ec1f74396a5e3b83800964608047243
+ depends:
+ - python >=3.6
+ license: MIT
+ license_family: MIT
+ size: 148014
+ timestamp: 1730271331374
+- kind: conda
+ name: slack_sdk
+ version: 3.33.3
+ build: hd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/slack_sdk-3.33.3-hd8ed1ab_0.conda
+ sha256: e81456df939a7c67dea186e305d3eaae102d2246062d8018cb8eaad91c181350
+ md5: ee97f6aef5ebc2401866126031d9f8c3
+ depends:
+ - slack-sdk 3.33.3 pyha770c72_0
+ license: MIT
+ license_family: MIT
+ size: 6207
+ timestamp: 1730271332649
+- kind: conda
+ name: smart_open
+ version: 7.0.5
+ build: pyhd8ed1ab_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.5-pyhd8ed1ab_1.conda
+ sha256: 6d8c9bfab01f39fe113bcbaaceb2f2704dd5ad397729e8cc0d078f4f747a4907
+ md5: 1be1d9fb41517af182663bdd004bbe6a
+ depends:
+ - python >=3.7
+ - wrapt
+ license: MIT
+ license_family: MIT
+ size: 51803
+ timestamp: 1728143243234
+- kind: conda
+ name: smmap
+ version: 5.0.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+ sha256: 23011cb3e064525bdb8787c75126a2e78d2344a72cd6773922006d1da1f2af16
+ md5: 62f26a3d1387acee31322208f0cfa3e0
+ depends:
+ - python >=3.5
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 22483
+ timestamp: 1634310465482
+- kind: conda
+ name: snakefmt
+ version: 0.10.2
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2
+ sha256: c79a2a5a70e47c75ec17d28aa82cc5ad718fd7f93bea5cf0c9970a02e2a7c9af
+ md5: be6c10fbd75a547d74e77be4c36d1de7
+ depends:
+ - black >=24.3,<25.0
+ - click >=8.0.0,<9.0.0
+ - python >=3.8
+ - toml >=0.10.2,<0.11.0
+ license: MIT
+ license_family: MIT
+ size: 32110
+ timestamp: 1715145696865
+- kind: conda
+ name: snakemake
+ version: 8.21.0
+ build: hdfd78af_0
+ subdir: noarch
+ noarch: generic
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2
+ sha256: e6613cfdf17549f777d190976282cc1b29722705ec4fab29d57d39ebd18a5924
+ md5: 97cfbd769bf73d531801f9d6e4d9db2b
+ depends:
+ - eido
+ - pandas
+ - peppy
+ - pygments
+ - slack_sdk
+ - snakemake-minimal 8.21.0.*
+ license: MIT
+ license_family: MIT
+ size: 9382
+ timestamp: 1728717749418
+- kind: conda
+ name: snakemake-interface-common
+ version: 1.17.4
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2
+ sha256: 3604b0d42ff12bc8bee860b5eeded78b2799eb34aec684b9d3f4f068a5304a66
+ md5: 4a72a6f5efb323aa2953e3dde0589ff6
+ depends:
+ - argparse-dataclass >=2.0.0,<3.0.0
+ - configargparse >=1.7,<2.0
+ - python >=3.8.0,<4.0.0
+ license: MIT
+ license_family: MIT
+ size: 18489
+ timestamp: 1728055352534
+- kind: conda
+ name: snakemake-interface-executor-plugins
+ version: 9.3.2
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2
+ sha256: 840d5a8e85671bf0da9a8b4452458e46532c751547edd4ec4ba5d147b4e17711
+ md5: 935050469d81fe24c63939ac4ac5eb00
+ depends:
+ - argparse-dataclass >=2.0.0,<3.0.0
+ - python >=3.11.0,<4.0.0
+ - snakemake-interface-common >=1.17.4,<2.0.0
+ - throttler >=1.2.2,<2.0.0
+ license: MIT
+ license_family: MIT
+ size: 22989
+ timestamp: 1728217454727
+- kind: conda
+ name: snakemake-interface-report-plugins
+ version: 1.1.0
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2
+ sha256: 1d110a5c54b9f46824bb03f80c09cdc5045d6c27c0166662d5f4e8a7c07d3535
+ md5: 3a7dd19cd530b27b59aed6cb606a7987
+ depends:
+ - python >=3.11.0,<4.0.0
+ - snakemake-interface-common >=1.16.0,<2.0.0
+ license: MIT
+ size: 13269
+ timestamp: 1728055589409
+- kind: conda
+ name: snakemake-interface-storage-plugins
+ version: 3.3.0
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2
+ sha256: f552d1cbba985155d0a445a117d7d7f40601e831f7d1469db66b03a5d10d2973
+ md5: 6956cd18cbc5310fecfa26e25fc4caee
+ depends:
+ - python >=3.11.0,<4.0.0
+ - reretry >=0.11.8,<0.12.0
+ - snakemake-interface-common >=1.12.0,<2.0.0
+ - throttler >=1.2.2,<2.0.0
+ - wrapt >=1.15.0,<2.0.0
+ license: MIT
+ size: 18653
+ timestamp: 1724066710607
+- kind: conda
+ name: snakemake-minimal
+ version: 8.21.0
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2
+ sha256: 58e0f3c5fdf7000c054ef47313576e7ae2bb7c9a411b086f88be6ae2269c1ab7
+ md5: e99d5b44339227c16a0601436ad0d1a4
+ depends:
+ - appdirs
+ - conda-inject >=1.3.1,<2.0
+ - configargparse
+ - connection_pool >=0.0.3
+ - datrie
+ - docutils
+ - dpath >=2.1.6,<3.0.0
+ - gitpython
+ - humanfriendly
+ - immutables
+ - jinja2 >=3.0,<4.0
+ - jsonschema
+ - nbformat
+ - packaging
+ - psutil
+ - pulp >=2.3.1,<2.9
+ - python >=3.11,<3.13
+ - pyyaml
+ - requests >=2.8.1
+ - reretry
+ - smart_open >=4.0,<8.0
+ - snakemake-interface-common >=1.17.0,<2.0
+ - snakemake-interface-executor-plugins >=9.3.2,<10.0.0
+ - snakemake-interface-report-plugins >=1.0.0,<2.0.0
+ - snakemake-interface-storage-plugins >=3.2.3,<4.0
+ - tabulate
+ - throttler
+ - toposort >=1.10,<2.0
+ - wrapt
+ - yte >=1.5.1,<2.0
+ license: MIT
+ license_family: MIT
+ size: 818173
+ timestamp: 1728717743415
+- kind: conda
+ name: tabulate
+ version: 0.9.0
+ build: pyhd8ed1ab_1
+ build_number: 1
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ sha256: f6e4a0dd24ba060a4af69ca79d32361a6678e61d78c73eb5e357909b025b4620
+ md5: 4759805cce2d914c38472f70bf4d8bcb
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 35912
+ timestamp: 1665138565317
+- kind: conda
+ name: throttler
+ version: 1.2.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda
+ sha256: cdd2067b03db7ed7a958de74edc1a4f8c4ae6d0aa1a61b5b70b89de5013f0f78
+ md5: 6fc48bef3b400c82abaee323a9d4e290
+ depends:
+ - python >=3.6
+ license: MIT
+ license_family: MIT
+ size: 12341
+ timestamp: 1691135604942
+- kind: conda
+ name: tk
+ version: 8.6.13
+ build: h1abcd95_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda
+ sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5
+ md5: bf830ba5afc507c6232d4ef0fb1a882d
+ depends:
+ - libzlib >=1.2.13,<2.0.0a0
+ license: TCL
+ license_family: BSD
+ size: 3270220
+ timestamp: 1699202389792
+- kind: conda
+ name: tk
+ version: 8.6.13
+ build: noxft_h4845f30_101
+ build_number: 101
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
+ sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e
+ md5: d453b98d9c83e71da0741bb0ff4d76bc
+ depends:
+ - libgcc-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ license: TCL
+ license_family: BSD
+ size: 3318875
+ timestamp: 1699202167581
+- kind: conda
+ name: toml
+ version: 0.10.2
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
+ sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1
+ md5: f832c45a477c78bebd107098db465095
+ depends:
+ - python >=2.7
+ license: MIT
+ license_family: MIT
+ size: 18433
+ timestamp: 1604308660817
+- kind: conda
+ name: tomli
+ version: 2.1.0
+ build: pyhff2d567_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
+ sha256: 354b8a64d4f3311179d85aefc529ca201a36afc1af090d0010c46be7b79f9a47
+ md5: 3fa1089b4722df3a900135925f4519d9
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 18741
+ timestamp: 1731426862834
+- kind: conda
+ name: toposort
+ version: '1.10'
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/toposort-1.10-pyhd8ed1ab_0.conda
+ sha256: 23589eeb84f55c9f245ffca1201a0dc9b16e838d39fe7857d4bd0e3026e5b75a
+ md5: aeef653e20028f19a3c2cc70e166b509
+ depends:
+ - python >=3.8
+ license: Apache-2.0
+ license_family: APACHE
+ size: 13603
+ timestamp: 1677526421221
+- kind: conda
+ name: tqdm
+ version: 4.67.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.0-pyhd8ed1ab_0.conda
+ sha256: fb25b18cec1ebae56e7d7ebbd3e504f063b61a0fac17b1ca798fcaf205bdc874
+ md5: 196a9e6ab4e036ceafa516ea036619b0
+ depends:
+ - colorama
+ - python >=3.7
+ license: MPL-2.0 or MIT
+ size: 89434
+ timestamp: 1730926216380
+- kind: conda
+ name: traitlets
+ version: 5.14.3
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
+ sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592
+ md5: 3df84416a021220d8b5700c613af2dc5
+ depends:
+ - python >=3.8
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 110187
+ timestamp: 1713535244513
+- kind: conda
+ name: truststore
+ version: 0.10.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.0-pyhd8ed1ab_0.conda
+ sha256: 0d23d3b370fc0393d05468fbff5152826317d4495446f6b2cc4d446e21050808
+ md5: ad1c20cd193e3044bcf17798c33b9d67
+ depends:
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ size: 21799
+ timestamp: 1729762456098
+- kind: conda
+ name: typer
+ version: 0.13.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.0-pyhd8ed1ab_0.conda
+ sha256: f3661edc36aaf69c03323f0a2b71bbbfdf3c11ed1fe1c9c6f486ac1b53e11aa1
+ md5: 0d2754390dab3d584823f497d1ab8704
+ depends:
+ - python >=3.9
+ - typer-slim-standard 0.13.0 hd8ed1ab_0
+ license: MIT
+ license_family: MIT
+ size: 54855
+ timestamp: 1731015674090
+- kind: conda
+ name: typer-slim
+ version: 0.13.0
+ build: pyhff2d567_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.0-pyhff2d567_0.conda
+ sha256: 6e23932ebef6b09b68a9667596952af4f81167b4b50a182ac70316ec224322fc
+ md5: 5fcd867cf0b4498002731d44621c0b58
+ depends:
+ - click >=8.0.0
+ - python >=3.9
+ - typing_extensions >=3.7.4.3
+ constrains:
+ - typer >=0.13.0,<0.13.1.0a0
+ - shellingham >=1.3.0
+ - rich >=10.11.0
+ license: MIT
+ license_family: MIT
+ size: 43166
+ timestamp: 1731015659531
+- kind: conda
+ name: typer-slim-standard
+ version: 0.13.0
+ build: hd8ed1ab_0
+ subdir: noarch
+ noarch: generic
+ url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.0-hd8ed1ab_0.conda
+ sha256: 402d1c872adb1dda436d563e03280750419367fb808a9ee7811f1335f218e8bc
+ md5: fe8bb6071bf1c47b38bc65f848847059
+ depends:
+ - rich
+ - shellingham
+ - typer-slim 0.13.0 pyhff2d567_0
+ license: MIT
+ license_family: MIT
+ size: 48480
+ timestamp: 1731015660139
+- kind: conda
+ name: typing-extensions
+ version: 4.12.2
+ build: hd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
+ sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73
+ md5: 52d648bd608f5737b123f510bb5514b5
+ depends:
+ - typing_extensions 4.12.2 pyha770c72_0
+ license: PSF-2.0
+ license_family: PSF
+ size: 10097
+ timestamp: 1717802659025
+- kind: conda
+ name: typing_extensions
+ version: 4.12.2
+ build: pyha770c72_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
+ sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb
+ md5: ebe6952715e1d5eb567eeebf25250fa7
+ depends:
+ - python >=3.8
+ license: PSF-2.0
+ license_family: PSF
+ size: 39888
+ timestamp: 1717802653893
+- kind: conda
+ name: tzdata
+ version: 2024b
+ build: hc8b5060_0
+ subdir: noarch
+ noarch: generic
+ url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
+ sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
+ md5: 8ac3367aafb1cc0a068483c580af8015
+ license: LicenseRef-Public-Domain
+ size: 122354
+ timestamp: 1728047496079
+- kind: conda
+ name: ubiquerg
+ version: 0.8.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda
+ sha256: ad56b48194d59a640be34432b0acdebe6e5520a86f5e2d0eabab567fc4976d53
+ md5: 41408dc37271d5d0f99e2e10336cf40d
+ depends:
+ - python >=3.6
+ - veracitools
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 20698
+ timestamp: 1719492750373
+- kind: conda
+ name: urllib3
+ version: 2.2.3
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
+ sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5
+ md5: 6b55867f385dd762ed99ea687af32a69
+ depends:
+ - brotli-python >=1.0.9
+ - h2 >=4,<5
+ - pysocks >=1.5.6,<2.0,!=1.5.7
+ - python >=3.8
+ - zstandard >=0.18.0
+ license: MIT
+ license_family: MIT
+ size: 98076
+ timestamp: 1726496531769
+- kind: conda
+ name: veracitools
+ version: 0.1.3
+ build: py_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2
+ sha256: f2222d612da9a362b8ff13c8411faa8077dff54fa2e71813c341aa0823b41b24
+ md5: f2c8d44ea78cf639ab4810aedba43ab5
+ depends:
+ - pytest
+ - python
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 6108
+ timestamp: 1572717780817
+- kind: conda
+ name: wrapt
+ version: 1.16.0
+ build: py312h66e93f0_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py312h66e93f0_1.conda
+ sha256: 3a15a399eb61a999f0f14b4d243acc14e2dff1ead92ef52fcff30c84be89b21c
+ md5: 2eebcffe80e2a7bb2f0a77e621a7f124
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 62624
+ timestamp: 1724958046744
+- kind: conda
+ name: wrapt
+ version: 1.16.0
+ build: py312hb553811_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/wrapt-1.16.0-py312hb553811_1.conda
+ sha256: 31e3fdd934cdb8ac47764d1daf13edddd7844a17b229e8ef438fc16e06576b00
+ md5: 6385725172f8712d54b5af6b86bf8236
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 58290
+ timestamp: 1724958107514
+- kind: conda
+ name: xz
+ version: 5.2.6
+ build: h166bdaf_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
+ sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162
+ md5: 2161070d867d1b1204ea749c8eec4ef0
+ depends:
+ - libgcc-ng >=12
+ license: LGPL-2.1 and GPL-2.0
+ size: 418368
+ timestamp: 1660346797927
+- kind: conda
+ name: xz
+ version: 5.2.6
+ build: h775f41a_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2
+ sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8
+ md5: a72f9d4ea13d55d745ff1ed594747f10
+ license: LGPL-2.1 and GPL-2.0
+ size: 238119
+ timestamp: 1660346964847
+- kind: conda
+ name: yaml
+ version: 0.2.5
+ build: h0d85af4_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2
+ sha256: 5301417e2c8dea45b401ffee8df3957d2447d4ce80c83c5ff151fc6bfe1c4148
+ md5: d7e08fcf8259d742156188e8762b4d20
+ license: MIT
+ license_family: MIT
+ size: 84237
+ timestamp: 1641347062780
+- kind: conda
+ name: yaml
+ version: 0.2.5
+ build: h7f98852_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
+ sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535
+ md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae
+ depends:
+ - libgcc-ng >=9.4.0
+ license: MIT
+ license_family: MIT
+ size: 89141
+ timestamp: 1641346969816
+- kind: conda
+ name: yaml-cpp
+ version: 0.8.0
+ build: h59595ed_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda
+ sha256: a65bb5284369e548a15a44b14baf1f7ac34fa4718d7d987dd29032caba2ecf20
+ md5: 965eaacd7c18eb8361fd12bb9e7a57d7
+ depends:
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ license: MIT
+ license_family: MIT
+ size: 204867
+ timestamp: 1695710312002
+- kind: conda
+ name: yaml-cpp
+ version: 0.8.0
+ build: he965462_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/yaml-cpp-0.8.0-he965462_0.conda
+ sha256: 6e5e4afa1011a1ad5a734e895b8d2b2ad0fbc9ef6538aac8f852b33b2ebe44a8
+ md5: 1bb3addc859ed1338370da6e2996ef47
+ depends:
+ - libcxx >=15.0.7
+ license: MIT
+ license_family: MIT
+ size: 130328
+ timestamp: 1695710502498
+- kind: conda
+ name: yte
+ version: 1.5.4
+ build: pyha770c72_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/yte-1.5.4-pyha770c72_0.conda
+ sha256: 772972b3e2ebeeb6dd2a3209b95c99b23d21c6657ebf2f758f9e63ccfa28dfc8
+ md5: f4d2f4a372be452baebf8dbdcd9892ed
+ depends:
+ - dpath
+ - plac
+ - python >=3.7
+ - pyyaml
+ license: MIT
+ license_family: MIT
+ size: 14311
+ timestamp: 1702295254855
+- kind: conda
+ name: zipp
+ version: 3.21.0
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
+ sha256: 232a30e4b0045c9de5e168dda0328dc0e28df9439cdecdfb97dd79c1c82c4cec
+ md5: fee389bf8a4843bd7a2248ce11b7f188
+ depends:
+ - python >=3.8
+ license: MIT
+ license_family: MIT
+ size: 21702
+ timestamp: 1731262194278
+- kind: conda
+ name: zstandard
+ version: 0.23.0
+ build: py312h7122b0e_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h7122b0e_1.conda
+ sha256: 2685dde42478fae0780fba5d1f8a06896a676ae105f215d32c9f9e76f3c6d8fd
+ md5: bd132ba98f3fc0a6067f355f8efe4cb6
+ depends:
+ - __osx >=10.13
+ - cffi >=1.11
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - zstd >=1.5.6,<1.5.7.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 410873
+ timestamp: 1725305688706
+- kind: conda
+ name: zstandard
+ version: 0.23.0
+ build: py312hef9b889_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda
+ sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b
+ md5: 8b7069e9792ee4e5b4919a7a306d2e67
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - cffi >=1.11
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - zstd >=1.5.6,<1.5.7.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 419552
+ timestamp: 1725305670210
+- kind: conda
+ name: zstd
+ version: 1.5.6
+ build: h915ae27_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda
+ sha256: efa04a98cb149643fa54c4dad5a0179e36a5fbc88427ea0eec88ceed87fd0f96
+ md5: 4cb2cd56f039b129bb0e491c1164167e
+ depends:
+ - __osx >=10.9
+ - libzlib >=1.2.13,<2.0.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 498900
+ timestamp: 1714723303098
+- kind: conda
+ name: zstd
+ version: 1.5.6
+ build: ha6fb4c9_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda
+ sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b
+ md5: 4d056880988120e29d75bfff282e0f45
+ depends:
+ - libgcc-ng >=12
+ - libstdcxx-ng >=12
+ - libzlib >=1.2.13,<2.0.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 554846
+ timestamp: 1714722996770
diff --git a/pixi.toml b/pixi.toml
new file mode 100644
index 000000000..c41f1ced5
--- /dev/null
+++ b/pixi.toml
@@ -0,0 +1,25 @@
+[project]
+authors = ["Mitchell Robert Vollger "]
+channels = ["conda-forge", "bioconda"]
+description = "Add a short description here"
+name = "FIRE"
+platforms = ["osx-64", "linux-64"]
+version = "0.1.0"
+
+[tasks]
+
+[dependencies]
+conda = "*"
+snakemake = "==8.21"
+snakefmt = "*"
+#fibertools-rs = "0.6"
+#samtools = "1.19"
+#htslib = "*"
+#pandas = "*"
+#defopt = "*"
+#pysam = "*"
+#bioawk = "*"
+#ripgrep = "*"
+#hck = "*"
+#bigtools = "0.5.3"
+#bedtools = "2.31"
\ No newline at end of file
From 801c2d837386f726718d3ff5d36665d6223c2fad Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 18 Nov 2024 10:43:40 -0800
Subject: [PATCH 104/145] switch back to bigtools and upgrade versions
---
workflow/rules/decorated-reads.smk | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 558d203ed..8ed44be97 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -62,17 +62,6 @@ rule decorate_fibers_1:
- {input.fai} {output.bb}
"""
-if False:
- # UCSC version
- """
- cat {input.bed} > {output.bed}
- bedToBigBed \
- -allow1bpOverlap -type=bed12+ -as={params.bed_as} \
- {output.bed} {input.fai} {output.bb}
- """
-
-
-
rule decorate_fibers_2:
input:
decorated=expand(
@@ -98,10 +87,13 @@ rule decorate_fibers_2:
block_size=BLOCK_SIZE,
shell:
# bigtools version
+ # for some reason filtering out NUCs removes the display bug for bigtools
+ # at least in my test cases
"""
cat {input.decorated} \
| bgzip -cd -@ {threads} \
| rg -v '^#' \
+ | rg -vw 'NUC' \
| bigtools bedtobigbed \
--inmemory \
--block-size {params.block_size} --items-per-slot {params.items_per_slot} \
From 54e0d9243cddbaf1fa12ecb13706f1b47bd101da Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 15:32:28 -0800
Subject: [PATCH 105/145] add a test task to pixi file
---
pixi.lock | 887 +++++++++++++++++++++++++----
pixi.toml | 9 +
workflow/rules/decorated-reads.smk | 11 +-
workflow/scripts/fdr-table.py | 12 +-
4 files changed, 797 insertions(+), 122 deletions(-)
diff --git a/pixi.lock b/pixi.lock
index 1969c886c..04dbc4ca6 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -14,6 +14,19 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.31-hd5d0ea3_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.7.4-hae4d56a_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.29-hb9d3cd8_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.19-h2bff981_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.3-h6c1f5b1_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.10-hf2c527e_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.20-hc9e6898_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.7-hfbb250a_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.6.7-h7f2cdf9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.19-h2bff981_4.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.20-h2bff981_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/awscli-2.22.0-py312h7900ff3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/awscrt-0.22.0-py312hce51685_6.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda
@@ -39,9 +52,10 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.1-py312hda17c39_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/datrie-0.8.2-py312h66e93f0_8.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.17.1-py312h7900ff3_5.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
@@ -49,16 +63,14 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.6-py312h66e93f0_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/immutables-0.21-py312h66e93f0_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda
@@ -119,6 +131,8 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/pulp-2.8.0-py312h7900ff3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
@@ -131,7 +145,7 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda
@@ -145,8 +159,10 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.21.0-py312h12e396e_0.conda
- - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h66e93f0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.17-py312h66e93f0_3.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.7.4-py312h2156523_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.5-h3931f03_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
@@ -177,8 +193,9 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py312h66e93f0_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
@@ -194,6 +211,19 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.31-hc566b99_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.7.4-h40772b6_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.29-ha44c9a9_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.19-h40772b6_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.4.3-h453e538_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.8.10-h592d179_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.14.20-h99e8e40_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.10.7-h86759dc_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.6.7-h24045d9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.19-h40772b6_4.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.20-h40772b6_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/awscli-2.22.0-py312hb401068_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/awscrt-0.22.0-py312hd00079b_6.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312h5861a67_2.conda
@@ -219,9 +249,10 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-43.0.1-py312h840e0bc_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/datrie-0.8.2-py312hb553811_8.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/docutils-0.17.1-py312hb401068_5.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
@@ -229,16 +260,14 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.6-py312h3d0f464_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/immutables-0.21-py312hb553811_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py312hb401068_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda
@@ -290,6 +319,8 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-6.1.0-py312h3d0f464_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pulp-2.8.0-py312hb401068_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
@@ -302,7 +333,7 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda
@@ -316,8 +347,9 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py312h0d0de52_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.18.6-py312h3d0f464_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.17.17-py312h3d0f464_3.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h3d0f464_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.7.4-py312h07459cc_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
@@ -348,8 +380,9 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-1.16.0-py312hb553811_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2
@@ -479,6 +512,507 @@ packages:
license_family: MIT
size: 56048
timestamp: 1722977241383
+- kind: conda
+ name: aws-c-auth
+ version: 0.7.31
+ build: hc566b99_3
+ build_number: 3
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.31-hc566b99_3.conda
+ sha256: f6f981900fca0af93753e464c2e73ef4629f5f98d6f1b126befa186575e21799
+ md5: af34a904eecd797f41b183c329623ec2
+ depends:
+ - __osx >=10.13
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-c-sdkutils >=0.1.19,<0.1.20.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 94612
+ timestamp: 1729533030938
+- kind: conda
+ name: aws-c-auth
+ version: 0.7.31
+ build: hd5d0ea3_3
+ build_number: 3
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.31-hd5d0ea3_3.conda
+ sha256: 7ed62cde8328b46a6abce032fe485ac895b3e9708e104894d1a009df4464ad6a
+ md5: bafc68489a651309865dde375cf3cbf6
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-c-sdkutils >=0.1.19,<0.1.20.0a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 107528
+ timestamp: 1729532890379
+- kind: conda
+ name: aws-c-cal
+ version: 0.7.4
+ build: h40772b6_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.7.4-h40772b6_2.conda
+ sha256: 4770ffec772090bbddc354c24bc2e6425d3071b1e09fa589606689fabcaff25f
+ md5: a5c1b1cb5a03d4a5b67e98df8da31aa1
+ depends:
+ - __osx >=10.13
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - openssl >=3.3.1,<4.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 39297
+ timestamp: 1728755588333
+- kind: conda
+ name: aws-c-cal
+ version: 0.7.4
+ build: hae4d56a_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.7.4-hae4d56a_2.conda
+ sha256: 4bfed63898a1697364ce9621e1fc09c98f143777b0ca60655eb812efa5bf246d
+ md5: cdc628e4ffb4ffcd476e3847267e1689
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - libgcc >=13
+ - openssl >=3.3.1,<4.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 47181
+ timestamp: 1728755555430
+- kind: conda
+ name: aws-c-common
+ version: 0.9.29
+ build: ha44c9a9_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.29-ha44c9a9_0.conda
+ sha256: 2a1f37f67fabac89ef9f4f9e105c33993cab22edb94801d03555a5ab44b9c557
+ md5: 51d626987f9327896b2e3ac2d36f2163
+ depends:
+ - __osx >=10.13
+ license: Apache-2.0
+ license_family: Apache
+ size: 226610
+ timestamp: 1728706789415
+- kind: conda
+ name: aws-c-common
+ version: 0.9.29
+ build: hb9d3cd8_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.29-hb9d3cd8_0.conda
+ sha256: b3b50f518e9afad383f6851bf7000cf8b343d7d3ca71558df233ee7b4bfc2919
+ md5: acc51b49fd7467c8dfe4343001b812b4
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 237231
+ timestamp: 1728706773555
+- kind: conda
+ name: aws-c-compression
+ version: 0.2.19
+ build: h2bff981_2
+ build_number: 2
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.19-h2bff981_2.conda
+ sha256: 908a416ff3f62b09bed436e1f77418f54115412244734d3960b11d586dd0749f
+ md5: 87a059d4d2ab89409496416119dd7152
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 18983
+ timestamp: 1728750679322
+- kind: conda
+ name: aws-c-compression
+ version: 0.2.19
+ build: h40772b6_2
+ build_number: 2
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.19-h40772b6_2.conda
+ sha256: e4e7c8ebc1761f263927af2eedddbba0b5698e05a073100b953b0d0d33cc969b
+ md5: 083875412346dcc097c6b1ca4aaa4abf
+ depends:
+ - __osx >=10.13
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 18004
+ timestamp: 1728750733091
+- kind: conda
+ name: aws-c-event-stream
+ version: 0.4.3
+ build: h453e538_5
+ build_number: 5
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.4.3-h453e538_5.conda
+ sha256: c063159d6af211df4f774d4f65c206a8d12488feb96fb097f6a73c6a9193723f
+ md5: 9c3a1df30fb65e0e8e04ff24ba46d63b
+ depends:
+ - __osx >=10.13
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-checksums >=0.1.20,<0.1.21.0a0
+ - libcxx >=17
+ license: Apache-2.0
+ license_family: Apache
+ size: 46843
+ timestamp: 1729527584644
+- kind: conda
+ name: aws-c-event-stream
+ version: 0.4.3
+ build: h6c1f5b1_5
+ build_number: 5
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.3-h6c1f5b1_5.conda
+ sha256: 8d2e539e0d85910cad5a76a926733640f674831eda6ca1c7189ef3007a776694
+ md5: a7687d8db2bffc90a3ff09bca039fef3
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-checksums >=0.1.20,<0.1.21.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 53733
+ timestamp: 1729527387622
+- kind: conda
+ name: aws-c-http
+ version: 0.8.10
+ build: h592d179_3
+ build_number: 3
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.8.10-h592d179_3.conda
+ sha256: 0ff999f7aad671d0c1992cb7dc8314f792e3022664d752e8d720fe9a4703c16e
+ md5: 7d1b1a2784fe1f61ca10c79c4fc4ed4c
+ depends:
+ - __osx >=10.13
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-compression >=0.2.19,<0.2.20.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 164061
+ timestamp: 1729517894484
+- kind: conda
+ name: aws-c-http
+ version: 0.8.10
+ build: hf2c527e_3
+ build_number: 3
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.10-hf2c527e_3.conda
+ sha256: 864d8dcefc774bbcf95ce55bc5c15a650a469c23b826d93b086d61c020b4759d
+ md5: 85f604aa878f86f15122e129338e4d85
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-compression >=0.2.19,<0.2.20.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 197277
+ timestamp: 1729517838846
+- kind: conda
+ name: aws-c-io
+ version: 0.14.20
+ build: h99e8e40_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.14.20-h99e8e40_0.conda
+ sha256: 4aa7165dbf4e0d6d4f866c6924ebbcb94522b952fe66e152bd1e19aefd3e58dc
+ md5: 64cef8703c997b27425801b5a96f3f7c
+ depends:
+ - __osx >=10.13
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 139031
+ timestamp: 1729105799829
+- kind: conda
+ name: aws-c-io
+ version: 0.14.20
+ build: hc9e6898_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.20-hc9e6898_0.conda
+ sha256: 51ade965ea729146026b5b3237c7f57464608dd1cf723dc4d1e393949d00eeef
+ md5: 005953b39123ac13a959329010a6b1e5
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - libgcc >=13
+ - s2n >=1.5.5,<1.5.6.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 158898
+ timestamp: 1729105763896
+- kind: conda
+ name: aws-c-mqtt
+ version: 0.10.7
+ build: h86759dc_3
+ build_number: 3
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.10.7-h86759dc_3.conda
+ sha256: fa8363c23ff61eb438393baf23357cf4ca9b05ae907cba295e1b75883e8744ad
+ md5: 4d53c7c1db218db67b22f5011e83c0f6
+ depends:
+ - __osx >=10.13
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 164379
+ timestamp: 1729534328438
+- kind: conda
+ name: aws-c-mqtt
+ version: 0.10.7
+ build: hfbb250a_3
+ build_number: 3
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.7-hfbb250a_3.conda
+ sha256: ed69c3cb9001a71868bd64615cd5b13e313f337e9d81685d2c90b4f5b004f2e1
+ md5: f9bceff531a0b88a5c45083ac357f6f2
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 194643
+ timestamp: 1729534125666
+- kind: conda
+ name: aws-c-s3
+ version: 0.6.7
+ build: h24045d9_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.6.7-h24045d9_1.conda
+ sha256: 38b126e0671a6db4c1ea5a84e6734bebf7cafc279ce8731a185f9c1ecd085737
+ md5: d833468ff5c331bff5870896f376e6d7
+ depends:
+ - __osx >=10.13
+ - aws-c-auth >=0.7.31,<0.7.32.0a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-checksums >=0.1.20,<0.1.21.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 97737
+ timestamp: 1729544344228
+- kind: conda
+ name: aws-c-s3
+ version: 0.6.7
+ build: h7f2cdf9_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.6.7-h7f2cdf9_1.conda
+ sha256: 3751a4b9a513319cc75ff692abd11c7466c71c9738df054c6beefb678ef6eb8e
+ md5: 9a58eac43e65ed1452787ae1ff1ecd6f
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-auth >=0.7.31,<0.7.32.0a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-checksums >=0.1.20,<0.1.21.0a0
+ - libgcc >=13
+ - openssl >=3.3.2,<4.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 112840
+ timestamp: 1729544207376
+- kind: conda
+ name: aws-c-sdkutils
+ version: 0.1.19
+ build: h2bff981_4
+ build_number: 4
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.19-h2bff981_4.conda
+ sha256: ef65ca9eb9f32ada6fb1b47759374e7ef4f85db002f2265ebc8fd61718284cbc
+ md5: 5a8afd37e2dfe464d68e63d1c38b08c5
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 55957
+ timestamp: 1728755888042
+- kind: conda
+ name: aws-c-sdkutils
+ version: 0.1.19
+ build: h40772b6_4
+ build_number: 4
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.19-h40772b6_4.conda
+ sha256: a74a1bdc601ab112d849b414908aa01451f8d0de27c0b233155fea07d69e0551
+ md5: 8d7e97d7c9829f54acbf018a88f2f20e
+ depends:
+ - __osx >=10.13
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 50711
+ timestamp: 1728755916895
+- kind: conda
+ name: aws-checksums
+ version: 0.1.20
+ build: h2bff981_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.20-h2bff981_1.conda
+ sha256: e1793f2e52fe04ef3a6b2069abda7960d061c6f7af1f0d5f616d43e7a7c40e3c
+ md5: 8b424cf6b3cfc5cffe98bf4d16c032fb
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - libgcc >=13
+ license: Apache-2.0
+ license_family: Apache
+ size: 72862
+ timestamp: 1728750748391
+- kind: conda
+ name: aws-checksums
+ version: 0.1.20
+ build: h40772b6_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.20-h40772b6_1.conda
+ sha256: a32f81d6349580b38a917f1643677650b931fc67fab9c9b123e47c3de4844d21
+ md5: a40738142e8dfc05b328ff240ad56c02
+ depends:
+ - __osx >=10.13
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 70907
+ timestamp: 1728750777703
+- kind: conda
+ name: awscli
+ version: 2.22.0
+ build: py312h7900ff3_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/awscli-2.22.0-py312h7900ff3_0.conda
+ sha256: 0cec7a55a0a863edab1c9a7f223455792c6d3ed76925a3b913dab86f720fb9a9
+ md5: beb2565c88d4fdcda69e3af78d9d0152
+ depends:
+ - awscrt >=0.19.18,<=0.22.0
+ - colorama >=0.2.5,<0.4.7
+ - cryptography >=40.0.0,<43.0.2
+ - distro >=1.5.0,<1.9.0
+ - docutils >=0.10,<0.20
+ - jmespath >=0.7.1,<1.1.0
+ - prompt_toolkit >=3.0.24,<3.0.39
+ - python >=3.12,<3.13.0a0
+ - python-dateutil >=2.1,<=2.9.0
+ - python_abi 3.12.* *_cp312
+ - ruamel.yaml >=0.15.0,<=0.17.21
+ - ruamel.yaml.clib >=0.2.0,<=0.2.8
+ - urllib3 >=1.25.4,<1.27
+ license: Apache-2.0
+ size: 12747683
+ timestamp: 1731978970603
+- kind: conda
+ name: awscli
+ version: 2.22.0
+ build: py312hb401068_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/awscli-2.22.0-py312hb401068_0.conda
+ sha256: f6395867718675ce875f2e00ab9162d7631a91a6ab77a13df689c001f85b95ef
+ md5: da10cc445ab8cb324039d2876e5c9757
+ depends:
+ - awscrt >=0.19.18,<=0.22.0
+ - colorama >=0.2.5,<0.4.7
+ - cryptography >=40.0.0,<43.0.2
+ - distro >=1.5.0,<1.9.0
+ - docutils >=0.10,<0.20
+ - jmespath >=0.7.1,<1.1.0
+ - prompt_toolkit >=3.0.24,<3.0.39
+ - python >=3.12,<3.13.0a0
+ - python-dateutil >=2.1,<=2.9.0
+ - python_abi 3.12.* *_cp312
+ - ruamel.yaml >=0.15.0,<=0.17.21
+ - ruamel.yaml.clib >=0.2.0,<=0.2.8
+ - urllib3 >=1.25.4,<1.27
+ license: Apache-2.0
+ size: 12762490
+ timestamp: 1731979188542
+- kind: conda
+ name: awscrt
+ version: 0.22.0
+ build: py312hce51685_6
+ build_number: 6
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/awscrt-0.22.0-py312hce51685_6.conda
+ sha256: b410b71cd54097a18e75996b1164c47d8fb37ec26667491b0f914957b9f8e6b6
+ md5: 14c0cce3199fcc331077cd9ca304e585
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - aws-c-auth >=0.7.31,<0.7.32.0a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-event-stream >=0.4.3,<0.4.4.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-c-mqtt >=0.10.7,<0.10.8.0a0
+ - aws-c-s3 >=0.6.7,<0.6.8.0a0
+ - aws-checksums >=0.1.20,<0.1.21.0a0
+ - libgcc >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - s2n >=1.5.5,<1.5.6.0a0
+ license: Apache-2.0
+ license_family: APACHE
+ size: 194770
+ timestamp: 1729557417666
+- kind: conda
+ name: awscrt
+ version: 0.22.0
+ build: py312hd00079b_6
+ build_number: 6
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/awscrt-0.22.0-py312hd00079b_6.conda
+ sha256: 03790c92d2872b8e1ee3632472c0e5e5f53e00b819fe5da4d9d26b8a0ad0fba8
+ md5: 3c700e3395a8066f506f9331407fdf89
+ depends:
+ - __osx >=10.13
+ - aws-c-auth >=0.7.31,<0.7.32.0a0
+ - aws-c-cal >=0.7.4,<0.7.5.0a0
+ - aws-c-common >=0.9.29,<0.9.30.0a0
+ - aws-c-event-stream >=0.4.3,<0.4.4.0a0
+ - aws-c-http >=0.8.10,<0.8.11.0a0
+ - aws-c-io >=0.14.20,<0.14.21.0a0
+ - aws-c-mqtt >=0.10.7,<0.10.8.0a0
+ - aws-c-s3 >=0.6.7,<0.6.8.0a0
+ - aws-checksums >=0.1.20,<0.1.21.0a0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: Apache-2.0
+ license_family: APACHE
+ size: 182391
+ timestamp: 1729557604791
- kind: conda
name: black
version: 24.10.0
@@ -1209,6 +1743,47 @@ packages:
license_family: MIT
size: 8331
timestamp: 1608581999360
+- kind: conda
+ name: cryptography
+ version: 43.0.1
+ build: py312h840e0bc_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/cryptography-43.0.1-py312h840e0bc_0.conda
+ sha256: 78b5cee4ec2c435b031c9aa11d483bb4a2a635ca15f4a658ecddc50abfef1db5
+ md5: 68b96efad20289cf0b95b60ece143aa3
+ depends:
+ - __osx >=10.13
+ - cffi >=1.12
+ - openssl >=3.3.2,<4.0a0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __osx >=10.13
+ license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT
+ license_family: BSD
+ size: 1382194
+ timestamp: 1725443635901
+- kind: conda
+ name: cryptography
+ version: 43.0.1
+ build: py312hda17c39_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.1-py312hda17c39_0.conda
+ sha256: 691c9491da9e730b8b4f6903e05a05530a6699aa73dc483244448fed97348899
+ md5: 1b673277378cb4c80a061a4c6f453b6d
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - cffi >=1.12
+ - libgcc >=13
+ - openssl >=3.3.2,<4.0a0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __glibc >=2.17
+ license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT
+ license_family: BSD
+ size: 1497649
+ timestamp: 1725443252315
- kind: conda
name: datrie
version: 0.8.2
@@ -1246,33 +1821,49 @@ packages:
timestamp: 1725961050356
- kind: conda
name: distro
- version: 1.9.0
+ version: 1.8.0
build: pyhd8ed1ab_0
subdir: noarch
noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
- sha256: ae1c13d709c8001331b5b9345e4bcd77e9ae712d25f7958b2ebcbe0b068731b7
- md5: bbdb409974cd6cb30071b1d978302726
+ url: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda
+ sha256: 0d01c4da6d4f0a935599210f82ac0630fa9aeb4fc37cbbc78043a932a39ec4f3
+ md5: 67999c5465064480fa8016d00ac768f6
depends:
- python >=3.6
license: Apache-2.0
license_family: APACHE
- size: 42039
- timestamp: 1704321683916
+ size: 40854
+ timestamp: 1675116355989
- kind: conda
name: docutils
- version: 0.21.2
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- sha256: 362bfe3afaac18298c48c0c6a935641544077ce5105a42a2d8ebe750ad07c574
- md5: e8cd5d629f65bdf0f3bb312cde14659e
+ version: 0.17.1
+ build: py312h7900ff3_5
+ build_number: 5
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.17.1-py312h7900ff3_5.conda
+ sha256: 08579633226e26efe07e17b00053902e308e0207be06d0727fde47c75d3b6696
+ md5: 95272f48d93f9417c22fd14f30bfb995
depends:
- - python >=3.9
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
- size: 403226
- timestamp: 1713930478970
+ size: 929566
+ timestamp: 1713293455024
+- kind: conda
+ name: docutils
+ version: 0.17.1
+ build: py312hb401068_5
+ build_number: 5
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/docutils-0.17.1-py312hb401068_5.conda
+ sha256: b4e31c6a0ce0b043f596432c73a9026089fb8cf2ff40403582720422e2b5dc72
+ md5: 298193e4dc8a7d52e79e7bd0d69254c6
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
+ size: 933238
+ timestamp: 1713293601348
- kind: conda
name: dpath
version: 2.2.0
@@ -1416,38 +2007,6 @@ packages:
license_family: BSD
size: 156827
timestamp: 1711991122366
-- kind: conda
- name: h2
- version: 4.1.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a
- md5: b748fbf7060927a6e82df7cb5ee8f097
- depends:
- - hpack >=4.0,<5
- - hyperframe >=6.0,<7
- - python >=3.6.1
- license: MIT
- license_family: MIT
- size: 46754
- timestamp: 1634280590080
-- kind: conda
- name: hpack
- version: 4.0.0
- build: pyh9f0ad1d_0
- subdir: noarch
- noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8
- md5: 914d6646c4dbb1fd3ff539830a12fd71
- depends:
- - python
- license: MIT
- license_family: MIT
- size: 25341
- timestamp: 1598856368685
- kind: conda
name: humanfriendly
version: '10.0'
@@ -1465,21 +2024,6 @@ packages:
license_family: MIT
size: 73296
timestamp: 1731259242894
-- kind: conda
- name: hyperframe
- version: 6.0.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330
- md5: 9f765cbfab6870c8435b9eefecd7a1f4
- depends:
- - python >=3.6
- license: MIT
- license_family: MIT
- size: 14646
- timestamp: 1619110249723
- kind: conda
name: icu
version: '73.2'
@@ -1604,6 +2148,21 @@ packages:
license_family: BSD
size: 111565
timestamp: 1715127275924
+- kind: conda
+ name: jmespath
+ version: 1.0.1
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2
+ sha256: 95ac5f9ee95fd4e34dc051746fc86016d3d4f6abefed113e2ede049d59ec2991
+ md5: 2cfa3e1cf3fb51bb9b17acc5b5e9ea11
+ depends:
+ - python >=3.7
+ license: MIT
+ license_family: MIT
+ size: 21003
+ timestamp: 1655568358125
- kind: conda
name: jsonpatch
version: '1.33'
@@ -3219,6 +3778,39 @@ packages:
license_family: MIT
size: 23815
timestamp: 1713667175451
+- kind: conda
+ name: prompt-toolkit
+ version: 3.0.38
+ build: pyha770c72_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda
+ sha256: 78c2f3c6195ec350d7d6e5fa3e43274ca8191c181c97a867e2920faaeec0e9bc
+ md5: 59ba1bf8ea558751a0d391249a248765
+ depends:
+ - python >=3.7
+ - wcwidth
+ constrains:
+ - prompt_toolkit 3.0.38
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 269375
+ timestamp: 1677601102637
+- kind: conda
+ name: prompt_toolkit
+ version: 3.0.38
+ build: hd8ed1ab_0
+ subdir: noarch
+ noarch: generic
+ url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda
+ sha256: c0f24a75d27918eb33f86902aa6024783d128a89eb3a169bcb22f24163a422b3
+ md5: 45b74f64d8808eda7e6f6e6b1d641fd2
+ depends:
+ - prompt-toolkit >=3.0.38,<3.0.39.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6402
+ timestamp: 1677601110741
- kind: conda
name: psutil
version: 6.1.0
@@ -3532,19 +4124,20 @@ packages:
timestamp: 1713208036041
- kind: conda
name: python-dateutil
- version: 2.9.0.post0
- build: pyhff2d567_0
+ version: 2.9.0
+ build: pyhd8ed1ab_0
subdir: noarch
noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_0.conda
- sha256: 3888012c5916efaef45d503e3e544bbcc571b84426c1bb9577799ada9efefb54
- md5: b6dfd90a2141e573e4b6a81630b56df5
+ url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+ sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320
+ md5: 2cf4264fffb9e6eff6031c5b6884d61c
depends:
- - python >=3.9
+ - python >=3.7
- six >=1.5
license: Apache-2.0
- size: 221925
- timestamp: 1731919374686
+ license_family: APACHE
+ size: 222742
+ timestamp: 1709299922152
- kind: conda
name: python-fastjsonschema
version: 2.20.0
@@ -3856,41 +4449,43 @@ packages:
timestamp: 1730922756033
- kind: conda
name: ruamel.yaml
- version: 0.18.6
- build: py312h3d0f464_1
- build_number: 1
+ version: 0.17.17
+ build: py312h3d0f464_3
+ build_number: 3
subdir: osx-64
- url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.18.6-py312h3d0f464_1.conda
- sha256: 6a7fba898720a81e2f19ec2870fc43ec2fc568dc71974390a91285d0bb75c476
- md5: 54f228329acc295c90a1961871439f58
+ url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.17.17-py312h3d0f464_3.conda
+ sha256: 6596c84c899658158a1824ab89e149d9e1ee028f7a4f114adb1dc9fcfa272ad4
+ md5: 8612c431ff50f397d6e980677578c37f
depends:
- __osx >=10.13
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
- ruamel.yaml.clib >=0.1.2
+ - setuptools
license: MIT
license_family: MIT
- size: 266986
- timestamp: 1728765127326
+ size: 251341
+ timestamp: 1728738935612
- kind: conda
name: ruamel.yaml
- version: 0.18.6
- build: py312h66e93f0_1
- build_number: 1
+ version: 0.17.17
+ build: py312h66e93f0_3
+ build_number: 3
subdir: linux-64
- url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h66e93f0_1.conda
- sha256: adbf638ac2916c8c376ade8e5f77cf6998e049eea4e23cc8a9f4a947c6938df3
- md5: 28ed869ade5601ee374934a31c9d628e
+ url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.17-py312h66e93f0_3.conda
+ sha256: df43500e2d395ce2431291b12c8e6e25527c2613599b9999830125f1bd018972
+ md5: e50ee865ea22650606f8da8b5c27deb3
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
- ruamel.yaml.clib >=0.1.2
+ - setuptools
license: MIT
license_family: MIT
- size: 267375
- timestamp: 1728765106963
+ size: 251059
+ timestamp: 1728738915878
- kind: conda
name: ruamel.yaml.clib
version: 0.2.8
@@ -3926,6 +4521,61 @@ packages:
license_family: MIT
size: 145481
timestamp: 1728724626666
+- kind: conda
+ name: ruff
+ version: 0.7.4
+ build: py312h07459cc_0
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.7.4-py312h07459cc_0.conda
+ sha256: 49c4702be860ab71bb3f95b49f67c887c6baa06e03efe0c6a7e6d4e113890b7c
+ md5: eb613739f9e64b39efa883ee42afb4e5
+ depends:
+ - __osx >=10.13
+ - libcxx >=18
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 7218063
+ timestamp: 1731708938871
+- kind: conda
+ name: ruff
+ version: 0.7.4
+ build: py312h2156523_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.7.4-py312h2156523_0.conda
+ sha256: 41424ae6a027f433d259aa384b29fa2fb8e366f5080e93179c1d228ba8e6bd83
+ md5: 025594b21ff040de6d98e6b1ef699185
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __glibc >=2.17
+ license: MIT
+ license_family: MIT
+ size: 7788530
+ timestamp: 1731708419964
+- kind: conda
+ name: s2n
+ version: 1.5.5
+ build: h3931f03_0
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.5-h3931f03_0.conda
+ sha256: a6fa0afa836f8f26dea0abc180ca2549bb517932d9a88a121e707135d4bcb715
+ md5: 334dba9982ab9f5d62033c61698a8683
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - openssl >=3.3.2,<4.0a0
+ license: Apache-2.0
+ license_family: Apache
+ size: 353081
+ timestamp: 1728534228471
- kind: conda
name: setuptools
version: 75.5.0
@@ -4449,23 +5099,21 @@ packages:
timestamp: 1719492750373
- kind: conda
name: urllib3
- version: 2.2.3
+ version: 1.26.19
build: pyhd8ed1ab_0
subdir: noarch
noarch: python
- url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
- sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5
- md5: 6b55867f385dd762ed99ea687af32a69
+ url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda
+ sha256: 543ebab5241418a4e0d4d9e356ef13e4361504810a067a01481660bb35eb5643
+ md5: 6bb37c314b3cc1515dcf086ffe01c46e
depends:
- brotli-python >=1.0.9
- - h2 >=4,<5
- pysocks >=1.5.6,<2.0,!=1.5.7
- - python >=3.8
- - zstandard >=0.18.0
+ - python >=3.7
license: MIT
license_family: MIT
- size: 98076
- timestamp: 1726496531769
+ size: 115125
+ timestamp: 1718728467518
- kind: conda
name: veracitools
version: 0.1.3
@@ -4482,6 +5130,21 @@ packages:
license_family: BSD
size: 6108
timestamp: 1572717780817
+- kind: conda
+ name: wcwidth
+ version: 0.2.13
+ build: pyhd8ed1ab_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
+ sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3
+ md5: 68f0738df502a14213624b288c60c9ad
+ depends:
+ - python >=3.8
+ license: MIT
+ license_family: MIT
+ size: 32709
+ timestamp: 1704731373922
- kind: conda
name: wrapt
version: 1.16.0
diff --git a/pixi.toml b/pixi.toml
index c41f1ced5..1c87c04ae 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -7,11 +7,20 @@ platforms = ["osx-64", "linux-64"]
version = "0.1.0"
[tasks]
+fmt = "ruff format . && snakefmt ."
+test-data = "aws s3 --no-sign-request sync s3://stergachis-public1/FIRE/test-data test-data/"
+test = { cmd = [
+ "snakemake",
+ "-s", "../workflow/Snakefile",
+ "--configfile", "test.yaml",
+ ], cwd = "test-data", depends_on = ["test-data"]}
[dependencies]
conda = "*"
snakemake = "==8.21"
snakefmt = "*"
+ruff = "*"
+awscli = "2.22"
#fibertools-rs = "0.6"
#samtools = "1.19"
#htslib = "*"
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 8ed44be97..4a053e534 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -49,7 +49,7 @@ rule decorate_fibers_1:
nzooms=NZOOMS,
items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
- shell:
+ shell:
# bigtools version
"""
cat {input.bed} \
@@ -62,6 +62,7 @@ rule decorate_fibers_1:
- {input.fai} {output.bb}
"""
+
rule decorate_fibers_2:
input:
decorated=expand(
@@ -85,7 +86,7 @@ rule decorate_fibers_2:
nzooms=NZOOMS,
items_per_slot=ITEMS_PER_SLOT,
block_size=BLOCK_SIZE,
- shell:
+ shell:
# bigtools version
# for some reason filtering out NUCs removes the display bug for bigtools
# at least in my test cases
@@ -102,12 +103,12 @@ rule decorate_fibers_2:
- {input.fai} {output.bb}
"""
+
if False:
- # UCSC version
- """
+ # UCSC version
+ """
cat {input.decorated} > {output.bed}
bedToBigBed \
-allow1bpOverlap -type=bed12+ -as={params.dec_as} \
{output.bed} {input.fai} {output.bb}
"""
-
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 0187c5e2e..a952c7982 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -127,8 +127,8 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
if min_cov is not None:
pileup = pileup.filter(
pl.col("coverage") >= min_cov, pl.col("coverage_shuffled") >= min_cov
- )
-
+ )
+
# aggregate by the score and weight the score by the number of bases
fire_scores = (
pileup.melt(
@@ -148,9 +148,9 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
.agg(pl.sum("bp").alias("bp"))
.sort("score", descending=True)
)
-
+
# count bases in each category
- sums = fire_scores.group_by("is_real").agg(pl.sum("bp").alias("Mbp")/1_000_000)
+ sums = fire_scores.group_by("is_real").agg(pl.sum("bp").alias("Mbp") / 1_000_000)
logging.info(f"Number of Mbp in each category:\n{sums}")
logging.info(f"Done aggregating pileup file:\n{fire_scores}")
@@ -281,7 +281,9 @@ def main(
fdr_table = read_fdr_table(fdr_table)
apply_fdr_table(infile, outfile, fdr_table, nrows)
else:
- fdr_table = make_fdr_table(infile, outfile, nrows, min_cov=min_cov, max_cov=max_cov)
+ fdr_table = make_fdr_table(
+ infile, outfile, nrows, min_cov=min_cov, max_cov=max_cov
+ )
return 0
From 651ea10fadb178ff0fac09ae2d396a79c1adf564 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 17:37:05 -0800
Subject: [PATCH 106/145] add some pixi install instructions
---
INSTALL.md | 11 +++++------
README.md | 18 ++++++++++++++++--
2 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/INSTALL.md b/INSTALL.md
index 306178c25..540e90a7a 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,18 +1,17 @@
# Install
-You will need **snakemake** which you can install using conda, e.g.:
-```
-conda create -c conda-forge -c bioconda -n snakemake 'snakemake>=8.21.0'
-```
+If you wish to distribute jobs across a cluster you will need to install the appropriate [snakemake executor plugin](https://snakemake.github.io/snakemake-plugin-catalog/). For example, to use SLURM you can install the `snakemake-executor-slurm` plugin using pip:
-Finally, if you wish to distribute jobs across a cluster you will need to install the appropriate [snakemake executor plugin](https://snakemake.github.io/snakemake-plugin-catalog/). For example, to use SLURM you can install the `snakemake-executor-slurm` plugin using pip:
-```
+```
+pixi shell
pip install snakemake-executor-plugin-slurm
```
We recommend adding a snakemake conda prefix to your `bashrc`, e.g. in the Stergachis lab add:
+
```bash
export SNAKEMAKE_CONDA_PREFIX=/mmfs1/gscratch/stergachislab/snakemake-conda-envs
export APPTAINER_CACHEDIR=/mmfs1/gscratch/stergachislab/snakemake-conda-envs/apptainer-cache
```
+
Then snakemake installs all the additional requirements as conda envs in that directory.
diff --git a/README.md b/README.md
index 8ff9af3b5..146bb5ac8 100644
--- a/README.md
+++ b/README.md
@@ -6,13 +6,27 @@ A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs)
## Install
-Please install `snakemake` and all the UCSC Kent utilities. For detailed instructions see the [installation README](/INSTALL.md).
+Please start by installing [pixi](https://pixi.sh/latest/) which handles the environment of the FIRE workflow.
+
+Then install FIRE using `git` and `pixi`:
+
+```bash
+git clone https://github.com/fiberseq/FIRE.git
+pixi install
+```
+
+We then recommend quickly testing your installation by running the test suite:
+
+```bash
+pixi run test
+```
+
+Further installation instructions can be found in the [INSTALL.md](/INSTALL.md) file.
## Configuring
See the [configuration README](/config/README.md), the example [configuration file](/config/config.yaml), and the example [manifest file](/config/config.tbl) for configuration options.
-
## Run
We have a run script that executes the FIRE snakemake called `fire`, and any extra parameters are passed directly to snakemake. For example:
From 7a03409d26a8fdbe1ee7d148fede11afe5a3f70c Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 17:38:05 -0800
Subject: [PATCH 107/145] add some pixi install instructions
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 146bb5ac8..44fb1348c 100644
--- a/README.md
+++ b/README.md
@@ -32,30 +32,30 @@ See the [configuration README](/config/README.md), the example [configuration fi
We have a run script that executes the FIRE snakemake called `fire`, and any extra parameters are passed directly to snakemake. For example:
```bash
+pixi shell
./fire --configfile config/config.yaml
```
If you want to do a dry run:
```bash
+pixi shell
./fire --configfile config/config.yaml -n
```
If you want to execute across a cluster (modify `profiles/slurm-executor` as needed for distributed execution):
```bash
+pixi shell
./fire --configfile config/config.yaml --profile profiles/slurm-executor
```
You can also run snakemake directly, e.g.:
```bash
+pixi shell
snakemake \
--configfile config/config.yaml \
--profile profiles/slurm-executor \
--local-cores 8 -k
```
-
-## Test data
-
-You can find input data to test against at [this url](https://s3-us-west-2.amazonaws.com/stergachis-public1/index.html?prefix=FIRE/test-data/).
From 15b68fb559e4ba0e3face06144d7749b197d6d90 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 17:39:34 -0800
Subject: [PATCH 108/145] add some pixi install instructions
---
.gitignore | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
index c9000ba07..cf37dca2f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -158,7 +158,6 @@ config/**
.vscode/*
.DS_Store
-
# stats
Rdata/
Rplots.pdf
@@ -177,4 +176,4 @@ misc/
new-agg-test/
scATAC/
test/
-
+test-data/
From 0368104d7bb531a2d73b527707cc86b023b6e340 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 17:45:35 -0800
Subject: [PATCH 109/145] format
---
pixi.lock | 39 +++++++++++++++++++++++++++++++++++++++
pixi.toml | 17 +++++++++++------
2 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/pixi.lock b/pixi.lock
index 04dbc4ca6..eb2ab686c 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -178,6 +178,7 @@ environments:
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
@@ -365,6 +366,7 @@ environments:
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
@@ -4849,6 +4851,43 @@ packages:
license_family: MIT
size: 35912
timestamp: 1665138565317
+- kind: conda
+ name: taplo
+ version: 0.9.3
+ build: h53e704d_1
+ build_number: 1
+ subdir: linux-64
+ url: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda
+ sha256: c6043d0e7df9bf3a4752cf965c04586e268040a563aaa97e60279e87b1da4b7b
+ md5: b8a6d8df78c43e3ffd4459313c9bcf84
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - openssl >=3.3.2,<4.0a0
+ constrains:
+ - __glibc >=2.17
+ license: MIT
+ license_family: MIT
+ size: 3835339
+ timestamp: 1727786201305
+- kind: conda
+ name: taplo
+ version: 0.9.3
+ build: hf3953a5_1
+ build_number: 1
+ subdir: osx-64
+ url: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda
+ sha256: 76cc103c5b785887a519c2bb04b68bea170d3a061331170ea5f15615df0af354
+ md5: 9ac41cb4cb31a6187d7336e16d1dab8f
+ depends:
+ - __osx >=10.13
+ - openssl >=3.3.2,<4.0a0
+ constrains:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 3738226
+ timestamp: 1727786378888
- kind: conda
name: throttler
version: 1.2.2
diff --git a/pixi.toml b/pixi.toml
index 1c87c04ae..8f5d83dcd 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -7,13 +7,17 @@ platforms = ["osx-64", "linux-64"]
version = "0.1.0"
[tasks]
-fmt = "ruff format . && snakefmt ."
+fmt = "ruff format . && taplo format pixi.toml && snakefmt workflow/"
test-data = "aws s3 --no-sign-request sync s3://stergachis-public1/FIRE/test-data test-data/"
test = { cmd = [
- "snakemake",
- "-s", "../workflow/Snakefile",
- "--configfile", "test.yaml",
- ], cwd = "test-data", depends_on = ["test-data"]}
+ "snakemake",
+ "-s",
+ "../workflow/Snakefile",
+ "--configfile",
+ "test.yaml",
+], cwd = "test-data", depends_on = [
+ "test-data",
+] }
[dependencies]
conda = "*"
@@ -21,6 +25,7 @@ snakemake = "==8.21"
snakefmt = "*"
ruff = "*"
awscli = "2.22"
+taplo = "*"
#fibertools-rs = "0.6"
#samtools = "1.19"
#htslib = "*"
@@ -31,4 +36,4 @@ awscli = "2.22"
#ripgrep = "*"
#hck = "*"
#bigtools = "0.5.3"
-#bedtools = "2.31"
\ No newline at end of file
+#bedtools = "2.31"
From a313b3190aa2b5c41ffe14fbc58fb26bb76a12c8 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 19:36:08 -0800
Subject: [PATCH 110/145] format
---
.gitignore | 1 +
pixi.toml | 12 +-----------
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/.gitignore b/.gitignore
index cf37dca2f..522d37bae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,3 +177,4 @@ new-agg-test/
scATAC/
test/
test-data/
+bigtools-test/
diff --git a/pixi.toml b/pixi.toml
index 8f5d83dcd..f4efa2589 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -18,6 +18,7 @@ test = { cmd = [
], cwd = "test-data", depends_on = [
"test-data",
] }
+fire = { cmd = ["./fire"] }
[dependencies]
conda = "*"
@@ -26,14 +27,3 @@ snakefmt = "*"
ruff = "*"
awscli = "2.22"
taplo = "*"
-#fibertools-rs = "0.6"
-#samtools = "1.19"
-#htslib = "*"
-#pandas = "*"
-#defopt = "*"
-#pysam = "*"
-#bioawk = "*"
-#ripgrep = "*"
-#hck = "*"
-#bigtools = "0.5.3"
-#bedtools = "2.31"
From 359681bbbaaaeca99f60d0600040e09db777f68f Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 19:38:13 -0800
Subject: [PATCH 111/145] format
---
README.md | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 44fb1348c..7f7df92b8 100644
--- a/README.md
+++ b/README.md
@@ -29,25 +29,22 @@ See the [configuration README](/config/README.md), the example [configuration fi
## Run
-We have a run script that executes the FIRE snakemake called `fire`, and any extra parameters are passed directly to snakemake. For example:
+The `FIRE` workflow can be executed using the `pixi run fire` command. Under the hood this runs a `snakemake` workflow and any extra parameters are passed directly to snakemake. For example:
```bash
-pixi shell
-./fire --configfile config/config.yaml
+pixi run fire --configfile config/config.yaml
```
If you want to do a dry run:
```bash
-pixi shell
-./fire --configfile config/config.yaml -n
+pixi run fire --configfile config/config.yaml -n
```
If you want to execute across a cluster (modify `profiles/slurm-executor` as needed for distributed execution):
```bash
-pixi shell
-./fire --configfile config/config.yaml --profile profiles/slurm-executor
+pixi run fire --configfile config/config.yaml --profile profiles/slurm-executor
```
You can also run snakemake directly, e.g.:
From 1b056b9462b7a3f0d5dea0bf6f104b05c9ce2068 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 20:03:56 -0800
Subject: [PATCH 112/145] format
---
.github/workflows/main.yml | 53 +++--
pixi.lock | 470 +++++++++++++++++++++++++++++++++++++
pixi.toml | 18 +-
3 files changed, 515 insertions(+), 26 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 8876a3676..4034585ad 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -2,10 +2,9 @@ name: Tests
on:
push:
- branches: [ main ]
+ branches: [main]
pull_request:
- branches: [ main ]
-
+ branches: [main]
jobs:
Formatting:
@@ -23,32 +22,38 @@ jobs:
Linting:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
- - name: Lint workflow
- uses: snakemake/snakemake-github-action@v1.24.0
- with:
- directory: .
- snakefile: workflow/Snakefile
- args: "--lint"
+ - uses: actions/checkout@v2
+ - name: Lint workflow
+ uses: snakemake/snakemake-github-action@v1.24.0
+ with:
+ directory: .
+ snakefile: workflow/Snakefile
+ args: "--lint"
Testing:
runs-on: ubuntu-latest
- needs:
+ needs:
- Linting
- Formatting
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v2
- - name: Test workflow
- uses: snakemake/snakemake-github-action@v1.24.0
- with:
- directory: .test
- snakefile: workflow/Snakefile
- args: "--use-conda --show-failed-logs --cores 3 --conda-cleanup-pkgs cache --all-temp --configfile config.yml"
+ - name: Test workflow
+ uses: snakemake/snakemake-github-action@v1.24.0
+ with:
+ directory: .test
+ snakefile: workflow/Snakefile
+ args: "--use-conda --show-failed-logs --cores 3 --conda-cleanup-pkgs cache --all-temp --configfile config.yml"
-# - name: Test report
-# uses: snakemake/snakemake-github-action@v1.24.0
-# with:
-# directory: .test
-# snakefile: workflow/Snakefile
-# args: "--report report.zip"
+ # pixi test
+ Test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: prefix-dev/setup-pixi@v0.8.1
+ with:
+ pixi-version: v0.37.0
+ cache: true
+ auth-host: prefix.dev
+ auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
+ - run: pixi run test
diff --git a/pixi.lock b/pixi.lock
index eb2ab686c..6d7466a0f 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -4,6 +4,8 @@ environments:
channels:
- url: https://conda.anaconda.org/conda-forge/
- url: https://conda.anaconda.org/bioconda/
+ indexes:
+ - https://pypi.org/simple
packages:
linux-64:
- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
@@ -205,6 +207,10 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda
+ - pypi: https://files.pythonhosted.org/packages/f8/0b/8289366ee599f9324af7010a476efcd85fd51c151ed0c300f2e9dce18c5d/snakemake_executor_plugin_slurm-0.11.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/46/95a80edc6196f01e20c35a272e2d801b48fd4c9a67aed3e76fb5e2b78603/snakemake_executor_plugin_slurm_jobstep-0.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/fe/c318657e6a4b8ab5b3eafa07cd1c360a732c6b37ba6085f3c82339ebbbdc/snakemake_interface_common-1.17.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7c/84/0b7602c54d97b2cd3b40fc4c80633d42afcf69e441d9f25c928376051be8/snakemake_interface_executor_plugins-9.3.2-py3-none-any.whl
osx-64:
- conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
@@ -393,6 +399,10 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h7122b0e_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda
+ - pypi: https://files.pythonhosted.org/packages/f8/0b/8289366ee599f9324af7010a476efcd85fd51c151ed0c300f2e9dce18c5d/snakemake_executor_plugin_slurm-0.11.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/78/46/95a80edc6196f01e20c35a272e2d801b48fd4c9a67aed3e76fb5e2b78603/snakemake_executor_plugin_slurm_jobstep-0.2.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/fe/c318657e6a4b8ab5b3eafa07cd1c360a732c6b37ba6085f3c82339ebbbdc/snakemake_interface_common-1.17.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7c/84/0b7602c54d97b2cd3b40fc4c80633d42afcf69e441d9f25c928376051be8/snakemake_interface_executor_plugins-9.3.2-py3-none-any.whl
packages:
- kind: conda
name: _libgcc_mutex
@@ -403,6 +413,7 @@ packages:
sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
md5: d7c89558ba9fa0495403155b64376d81
license: None
+ purls: []
size: 2562
timestamp: 1578324546067
- kind: conda
@@ -421,6 +432,7 @@ packages:
- openmp_impl 9999
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 23621
timestamp: 1650670423406
- kind: conda
@@ -437,6 +449,8 @@ packages:
- pyparsing
- python >=3.4
license: EPL-2.0
+ purls:
+ - pkg:pypi/amply?source=hash-mapping
size: 21871
timestamp: 1687675666679
- kind: conda
@@ -453,6 +467,8 @@ packages:
- typing-extensions >=4.0.0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/annotated-types?source=hash-mapping
size: 18235
timestamp: 1716290348421
- kind: conda
@@ -468,6 +484,8 @@ packages:
- python
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/appdirs?source=hash-mapping
size: 12840
timestamp: 1603108499239
- kind: conda
@@ -482,6 +500,8 @@ packages:
depends:
- python >=3.6
license: MIT OR Apache-2.0
+ purls:
+ - pkg:pypi/archspec?source=hash-mapping
size: 48780
timestamp: 1708969700251
- kind: conda
@@ -497,6 +517,8 @@ packages:
- python >=3.8
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/argparse-dataclass?source=hash-mapping
size: 12203
timestamp: 1691002812997
- kind: conda
@@ -512,6 +534,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/attrs?source=hash-mapping
size: 56048
timestamp: 1722977241383
- kind: conda
@@ -532,6 +556,7 @@ packages:
- aws-c-sdkutils >=0.1.19,<0.1.20.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 94612
timestamp: 1729533030938
- kind: conda
@@ -553,6 +578,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 107528
timestamp: 1729532890379
- kind: conda
@@ -570,6 +596,7 @@ packages:
- openssl >=3.3.1,<4.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 39297
timestamp: 1728755588333
- kind: conda
@@ -588,6 +615,7 @@ packages:
- openssl >=3.3.1,<4.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 47181
timestamp: 1728755555430
- kind: conda
@@ -602,6 +630,7 @@ packages:
- __osx >=10.13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 226610
timestamp: 1728706789415
- kind: conda
@@ -617,6 +646,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 237231
timestamp: 1728706773555
- kind: conda
@@ -634,6 +664,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 18983
timestamp: 1728750679322
- kind: conda
@@ -650,6 +681,7 @@ packages:
- aws-c-common >=0.9.29,<0.9.30.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 18004
timestamp: 1728750733091
- kind: conda
@@ -669,6 +701,7 @@ packages:
- libcxx >=17
license: Apache-2.0
license_family: Apache
+ purls: []
size: 46843
timestamp: 1729527584644
- kind: conda
@@ -689,6 +722,7 @@ packages:
- libstdcxx >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 53733
timestamp: 1729527387622
- kind: conda
@@ -708,6 +742,7 @@ packages:
- aws-c-io >=0.14.20,<0.14.21.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 164061
timestamp: 1729517894484
- kind: conda
@@ -728,6 +763,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 197277
timestamp: 1729517838846
- kind: conda
@@ -744,6 +780,7 @@ packages:
- aws-c-common >=0.9.29,<0.9.30.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 139031
timestamp: 1729105799829
- kind: conda
@@ -762,6 +799,7 @@ packages:
- s2n >=1.5.5,<1.5.6.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 158898
timestamp: 1729105763896
- kind: conda
@@ -780,6 +818,7 @@ packages:
- aws-c-io >=0.14.20,<0.14.21.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 164379
timestamp: 1729534328438
- kind: conda
@@ -799,6 +838,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 194643
timestamp: 1729534125666
- kind: conda
@@ -820,6 +860,7 @@ packages:
- aws-checksums >=0.1.20,<0.1.21.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 97737
timestamp: 1729544344228
- kind: conda
@@ -843,6 +884,7 @@ packages:
- openssl >=3.3.2,<4.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 112840
timestamp: 1729544207376
- kind: conda
@@ -860,6 +902,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 55957
timestamp: 1728755888042
- kind: conda
@@ -876,6 +919,7 @@ packages:
- aws-c-common >=0.9.29,<0.9.30.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 50711
timestamp: 1728755916895
- kind: conda
@@ -893,6 +937,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 72862
timestamp: 1728750748391
- kind: conda
@@ -909,6 +954,7 @@ packages:
- aws-c-common >=0.9.29,<0.9.30.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 70907
timestamp: 1728750777703
- kind: conda
@@ -934,6 +980,8 @@ packages:
- ruamel.yaml.clib >=0.2.0,<=0.2.8
- urllib3 >=1.25.4,<1.27
license: Apache-2.0
+ purls:
+ - pkg:pypi/awscli?source=hash-mapping
size: 12747683
timestamp: 1731978970603
- kind: conda
@@ -959,6 +1007,8 @@ packages:
- ruamel.yaml.clib >=0.2.0,<=0.2.8
- urllib3 >=1.25.4,<1.27
license: Apache-2.0
+ purls:
+ - pkg:pypi/awscli?source=hash-mapping
size: 12762490
timestamp: 1731979188542
- kind: conda
@@ -987,6 +1037,8 @@ packages:
- s2n >=1.5.5,<1.5.6.0a0
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/awscrt?source=hash-mapping
size: 194770
timestamp: 1729557417666
- kind: conda
@@ -1013,6 +1065,8 @@ packages:
- python_abi 3.12.* *_cp312
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/awscrt?source=hash-mapping
size: 182391
timestamp: 1729557604791
- kind: conda
@@ -1033,6 +1087,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/black?source=hash-mapping
size: 390571
timestamp: 1728503839694
- kind: conda
@@ -1053,6 +1109,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/black?source=hash-mapping
size: 393514
timestamp: 1728503944080
- kind: conda
@@ -1068,6 +1126,8 @@ packages:
- python ==2.7.*|>=3.7
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/boltons?source=hash-mapping
size: 297896
timestamp: 1711936529147
- kind: conda
@@ -1089,6 +1149,8 @@ packages:
- libbrotlicommon 1.1.0 hb9d3cd8_2
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/brotli?source=hash-mapping
size: 349867
timestamp: 1725267732089
- kind: conda
@@ -1109,6 +1171,8 @@ packages:
- libbrotlicommon 1.1.0 h00291cd_2
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/brotli?source=hash-mapping
size: 363178
timestamp: 1725267893889
- kind: conda
@@ -1125,6 +1189,7 @@ packages:
- libgcc-ng >=12
license: bzip2-1.0.6
license_family: BSD
+ purls: []
size: 252783
timestamp: 1720974456583
- kind: conda
@@ -1140,6 +1205,7 @@ packages:
- __osx >=10.13
license: bzip2-1.0.6
license_family: BSD
+ purls: []
size: 134188
timestamp: 1720974491916
- kind: conda
@@ -1155,6 +1221,7 @@ packages:
- libgcc >=13
license: MIT
license_family: MIT
+ purls: []
size: 205575
timestamp: 1731181837907
- kind: conda
@@ -1169,6 +1236,7 @@ packages:
- __osx >=10.13
license: MIT
license_family: MIT
+ purls: []
size: 183798
timestamp: 1731181957603
- kind: conda
@@ -1180,6 +1248,7 @@ packages:
sha256: 593f302d0f44c2c771e1614ee6d56fffdc7d616e6f187669c8b0e34ffce3e1ae
md5: b7e5424e7f06547a903d28e4651dbb21
license: ISC
+ purls: []
size: 158665
timestamp: 1725019059295
- kind: conda
@@ -1191,6 +1260,7 @@ packages:
sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea
md5: c27d1c142233b5bc9ca570c6e2e0c244
license: ISC
+ purls: []
size: 159003
timestamp: 1725018903918
- kind: conda
@@ -1205,6 +1275,8 @@ packages:
depends:
- python >=3.7
license: ISC
+ purls:
+ - pkg:pypi/certifi?source=hash-mapping
size: 163752
timestamp: 1725278204397
- kind: conda
@@ -1224,6 +1296,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/cffi?source=hash-mapping
size: 294403
timestamp: 1725560714366
- kind: conda
@@ -1242,6 +1316,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/cffi?source=hash-mapping
size: 282425
timestamp: 1725560725144
- kind: conda
@@ -1257,6 +1333,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/charset-normalizer?source=hash-mapping
size: 47314
timestamp: 1728479405343
- kind: conda
@@ -1273,6 +1351,8 @@ packages:
- python >=3.8
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/click?source=hash-mapping
size: 84437
timestamp: 1692311973840
- kind: conda
@@ -1295,6 +1375,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 893611
timestamp: 1725355590517
- kind: conda
@@ -1318,6 +1399,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 950254
timestamp: 1725355568993
- kind: conda
@@ -1345,6 +1427,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 551356
timestamp: 1681308775645
- kind: conda
@@ -1371,6 +1454,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 543162
timestamp: 1681309194623
- kind: conda
@@ -1399,6 +1483,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 1173622
timestamp: 1681308956927
- kind: conda
@@ -1427,6 +1512,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 1123536
timestamp: 1681309516683
- kind: conda
@@ -1449,6 +1535,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 341870
timestamp: 1713104465374
- kind: conda
@@ -1472,6 +1559,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 372978
timestamp: 1713104263049
- kind: conda
@@ -1497,6 +1585,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 645695
timestamp: 1712651245789
- kind: conda
@@ -1522,6 +1611,7 @@ packages:
- coincbc * *_metapackage
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 687789
timestamp: 1712651019616
- kind: conda
@@ -1538,6 +1628,7 @@ packages:
- coin-or-cbc 2.10.12.*
license: EPL-2.0
license_family: OTHER
+ purls: []
size: 12153
timestamp: 1725355692963
- kind: conda
@@ -1553,6 +1644,8 @@ packages:
- python >=3.7
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/colorama?source=hash-mapping
size: 25170
timestamp: 1666700778190
- kind: conda
@@ -1570,6 +1663,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/coloredlogs?source=hash-mapping
size: 40569
timestamp: 1643220223971
- kind: conda
@@ -1608,6 +1703,8 @@ packages:
- conda-content-trust >=0.1.1
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/conda?source=hash-mapping
size: 1158773
timestamp: 1729155303908
- kind: conda
@@ -1646,6 +1743,8 @@ packages:
- conda-env >=2.6
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/conda?source=hash-mapping
size: 1163211
timestamp: 1729155314354
- kind: conda
@@ -1662,6 +1761,8 @@ packages:
- pyyaml >=6.0.0,<7.0.0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/conda-inject?source=hash-mapping
size: 10327
timestamp: 1717043667069
- kind: conda
@@ -1680,6 +1781,8 @@ packages:
- python >=3.8
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/conda-libmamba-solver?source=hash-mapping
size: 41613
timestamp: 1727359934505
- kind: conda
@@ -1697,6 +1800,8 @@ packages:
- zstandard >=0.15
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/conda-package-handling?source=hash-mapping
size: 257763
timestamp: 1729007114391
- kind: conda
@@ -1713,6 +1818,8 @@ packages:
- zstandard >=0.15
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/conda-package-streaming?source=hash-mapping
size: 20582
timestamp: 1729004160440
- kind: conda
@@ -1728,6 +1835,8 @@ packages:
- python >=3.5
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/configargparse?source=hash-mapping
size: 39491
timestamp: 1690138171226
- kind: conda
@@ -1743,6 +1852,8 @@ packages:
- python
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/connection-pool?source=hash-mapping
size: 8331
timestamp: 1608581999360
- kind: conda
@@ -1763,6 +1874,8 @@ packages:
- __osx >=10.13
license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT
license_family: BSD
+ purls:
+ - pkg:pypi/cryptography?source=hash-mapping
size: 1382194
timestamp: 1725443635901
- kind: conda
@@ -1784,6 +1897,8 @@ packages:
- __glibc >=2.17
license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT
license_family: BSD
+ purls:
+ - pkg:pypi/cryptography?source=hash-mapping
size: 1497649
timestamp: 1725443252315
- kind: conda
@@ -1802,6 +1917,8 @@ packages:
- python_abi 3.12.* *_cp312
license: LGPL-2.1-or-later
license_family: LGPL
+ purls:
+ - pkg:pypi/datrie?source=hash-mapping
size: 158945
timestamp: 1725961043726
- kind: conda
@@ -1819,6 +1936,8 @@ packages:
- python_abi 3.12.* *_cp312
license: LGPL-2.1-or-later
license_family: LGPL
+ purls:
+ - pkg:pypi/datrie?source=hash-mapping
size: 133254
timestamp: 1725961050356
- kind: conda
@@ -1834,6 +1953,8 @@ packages:
- python >=3.6
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/distro?source=hash-mapping
size: 40854
timestamp: 1675116355989
- kind: conda
@@ -1849,6 +1970,8 @@ packages:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
+ purls:
+ - pkg:pypi/docutils?source=hash-mapping
size: 929566
timestamp: 1713293455024
- kind: conda
@@ -1864,6 +1987,8 @@ packages:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
+ purls:
+ - pkg:pypi/docutils?source=hash-mapping
size: 933238
timestamp: 1713293601348
- kind: conda
@@ -1879,6 +2004,8 @@ packages:
- python >3.6
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/dpath?source=hash-mapping
size: 21344
timestamp: 1718243548474
- kind: conda
@@ -1898,6 +2025,8 @@ packages:
- ubiquerg >=0.6.2
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/eido?source=hash-mapping
size: 20005
timestamp: 1729011115644
- kind: conda
@@ -1912,6 +2041,8 @@ packages:
depends:
- python >=3.7
license: MIT and PSF-2.0
+ purls:
+ - pkg:pypi/exceptiongroup?source=hash-mapping
size: 20418
timestamp: 1720869435725
- kind: conda
@@ -1927,6 +2058,7 @@ packages:
- libstdcxx-ng >=12
license: MIT
license_family: MIT
+ purls: []
size: 193853
timestamp: 1704454679950
- kind: conda
@@ -1941,6 +2073,7 @@ packages:
- libcxx >=15
license: MIT
license_family: MIT
+ purls: []
size: 181468
timestamp: 1704454938658
- kind: conda
@@ -1957,6 +2090,8 @@ packages:
- python_abi 3.12.* *_cp312
license: LGPL-3.0-only
license_family: LGPL
+ purls:
+ - pkg:pypi/frozendict?source=hash-mapping
size: 30751
timestamp: 1728841497755
- kind: conda
@@ -1974,6 +2109,8 @@ packages:
- python_abi 3.12.* *_cp312
license: LGPL-3.0-only
license_family: LGPL
+ purls:
+ - pkg:pypi/frozendict?source=hash-mapping
size: 30486
timestamp: 1728841445822
- kind: conda
@@ -1990,6 +2127,8 @@ packages:
- smmap >=3.0.1,<6
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/gitdb?source=hash-mapping
size: 52872
timestamp: 1697791718749
- kind: conda
@@ -2007,6 +2146,8 @@ packages:
- typing_extensions >=3.7.4.3
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/gitpython?source=hash-mapping
size: 156827
timestamp: 1711991122366
- kind: conda
@@ -2024,6 +2165,8 @@ packages:
- python >=3.9
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/humanfriendly?source=hash-mapping
size: 73296
timestamp: 1731259242894
- kind: conda
@@ -2039,6 +2182,7 @@ packages:
- libstdcxx-ng >=12
license: MIT
license_family: MIT
+ purls: []
size: 12089150
timestamp: 1692900650789
- kind: conda
@@ -2051,6 +2195,7 @@ packages:
md5: 5cc301d759ec03f28328428e28f65591
license: MIT
license_family: MIT
+ purls: []
size: 11787527
timestamp: 1692901622519
- kind: conda
@@ -2066,6 +2211,8 @@ packages:
- python >=3.6
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/idna?source=hash-mapping
size: 49837
timestamp: 1726459583613
- kind: conda
@@ -2083,6 +2230,8 @@ packages:
- python_abi 3.12.* *_cp312
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/immutables?source=hash-mapping
size: 54135
timestamp: 1728557342989
- kind: conda
@@ -2099,6 +2248,8 @@ packages:
- python_abi 3.12.* *_cp312
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/immutables?source=hash-mapping
size: 51214
timestamp: 1728557359430
- kind: conda
@@ -2117,6 +2268,8 @@ packages:
- importlib-resources >=6.4.5,<6.4.6.0a0
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/importlib-resources?source=hash-mapping
size: 32725
timestamp: 1725921462405
- kind: conda
@@ -2132,6 +2285,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/iniconfig?source=hash-mapping
size: 11101
timestamp: 1673103208955
- kind: conda
@@ -2148,6 +2303,8 @@ packages:
- python >=3.7
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/jinja2?source=hash-mapping
size: 111565
timestamp: 1715127275924
- kind: conda
@@ -2163,6 +2320,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/jmespath?source=hash-mapping
size: 21003
timestamp: 1655568358125
- kind: conda
@@ -2179,6 +2338,8 @@ packages:
- python >=3.8
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/jsonpatch?source=hash-mapping
size: 17366
timestamp: 1695536420928
- kind: conda
@@ -2195,6 +2356,8 @@ packages:
- python_abi 3.12.* *_cp312
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/jsonpointer?source=hash-mapping
size: 17277
timestamp: 1725303032027
- kind: conda
@@ -2211,6 +2374,8 @@ packages:
- python_abi 3.12.* *_cp312
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/jsonpointer?source=hash-mapping
size: 17560
timestamp: 1725303027769
- kind: conda
@@ -2232,6 +2397,8 @@ packages:
- rpds-py >=0.7.1
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/jsonschema?source=hash-mapping
size: 74323
timestamp: 1720529611305
- kind: conda
@@ -2248,6 +2415,8 @@ packages:
- referencing >=0.31.0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/jsonschema-specifications?source=hash-mapping
size: 16165
timestamp: 1728418976382
- kind: conda
@@ -2267,6 +2436,8 @@ packages:
- traitlets >=5.3
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-core?source=hash-mapping
size: 57671
timestamp: 1727163547058
- kind: conda
@@ -2280,6 +2451,7 @@ packages:
depends:
- libgcc-ng >=10.3.0
license: LGPL-2.1-or-later
+ purls: []
size: 117831
timestamp: 1646151697040
- kind: conda
@@ -2298,6 +2470,7 @@ packages:
- openssl >=3.3.1,<4.0a0
license: MIT
license_family: MIT
+ purls: []
size: 1185323
timestamp: 1719463492984
- kind: conda
@@ -2317,6 +2490,7 @@ packages:
- openssl >=3.3.1,<4.0a0
license: MIT
license_family: MIT
+ purls: []
size: 1370023
timestamp: 1719463201255
- kind: conda
@@ -2334,6 +2508,7 @@ packages:
- binutils_impl_linux-64 2.43
license: GPL-3.0-only
license_family: GPL
+ purls: []
size: 669211
timestamp: 1729655358674
- kind: conda
@@ -2357,6 +2532,7 @@ packages:
- zstd >=1.5.6,<1.6.0a0
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 742682
timestamp: 1716394747351
- kind: conda
@@ -2379,6 +2555,7 @@ packages:
- zstd >=1.5.6,<1.6.0a0
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 871853
timestamp: 1716394516418
- kind: conda
@@ -2400,6 +2577,7 @@ packages:
- liblapacke 3.9.0 25_linux64_openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15677
timestamp: 1729642900350
- kind: conda
@@ -2421,6 +2599,7 @@ packages:
- libcblas 3.9.0 25_osx64_openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15952
timestamp: 1729643159199
- kind: conda
@@ -2440,6 +2619,7 @@ packages:
- liblapacke 3.9.0 25_linux64_openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15613
timestamp: 1729642905619
- kind: conda
@@ -2459,6 +2639,7 @@ packages:
- blas * openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15842
timestamp: 1729643166929
- kind: conda
@@ -2480,6 +2661,7 @@ packages:
- zstd >=1.5.6,<1.6.0a0
license: curl
license_family: MIT
+ purls: []
size: 410158
timestamp: 1719602718702
- kind: conda
@@ -2500,6 +2682,7 @@ packages:
- zstd >=1.5.6,<1.6.0a0
license: curl
license_family: MIT
+ purls: []
size: 390707
timestamp: 1719602983754
- kind: conda
@@ -2514,6 +2697,7 @@ packages:
- __osx >=10.13
license: Apache-2.0 WITH LLVM-exception
license_family: Apache
+ purls: []
size: 528991
timestamp: 1730314340106
- kind: conda
@@ -2529,6 +2713,7 @@ packages:
- ncurses >=6.2,<7.0.0a0
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 105382
timestamp: 1597616576726
- kind: conda
@@ -2545,6 +2730,7 @@ packages:
- ncurses >=6.2,<7.0.0a0
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 123878
timestamp: 1597616541093
- kind: conda
@@ -2558,6 +2744,7 @@ packages:
md5: 899db79329439820b7e8f8de41bca902
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 106663
timestamp: 1702146352558
- kind: conda
@@ -2573,6 +2760,7 @@ packages:
- libgcc-ng >=12
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 112766
timestamp: 1702146165126
- kind: conda
@@ -2589,6 +2777,7 @@ packages:
- expat 2.6.4.*
license: MIT
license_family: MIT
+ purls: []
size: 70758
timestamp: 1730967204736
- kind: conda
@@ -2606,6 +2795,7 @@ packages:
- expat 2.6.4.*
license: MIT
license_family: MIT
+ purls: []
size: 73304
timestamp: 1730967041968
- kind: conda
@@ -2619,6 +2809,7 @@ packages:
md5: ccb34fb14960ad8b125962d3d79b31a9
license: MIT
license_family: MIT
+ purls: []
size: 51348
timestamp: 1636488394370
- kind: conda
@@ -2634,6 +2825,7 @@ packages:
- libgcc-ng >=9.4.0
license: MIT
license_family: MIT
+ purls: []
size: 58292
timestamp: 1636488182923
- kind: conda
@@ -2653,6 +2845,7 @@ packages:
- libgcc-ng ==14.2.0=*_1
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 848745
timestamp: 1729027721139
- kind: conda
@@ -2668,6 +2861,7 @@ packages:
- libgcc 14.2.0 h77fa898_1
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 54142
timestamp: 1729027726517
- kind: conda
@@ -2683,6 +2877,7 @@ packages:
- libgfortran5 13.2.0 h2873a65_3
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 110106
timestamp: 1707328956438
- kind: conda
@@ -2700,6 +2895,7 @@ packages:
- libgfortran-ng ==14.2.0=*_1
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 53997
timestamp: 1729027752995
- kind: conda
@@ -2715,6 +2911,7 @@ packages:
- libgfortran 14.2.0 h69a702a_1
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 54106
timestamp: 1729027945817
- kind: conda
@@ -2732,6 +2929,7 @@ packages:
- libgfortran 5.0.0 13_2_0_*_3
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 1571379
timestamp: 1707328880361
- kind: conda
@@ -2749,6 +2947,7 @@ packages:
- libgfortran 14.2.0
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 1462645
timestamp: 1729027735353
- kind: conda
@@ -2764,6 +2963,7 @@ packages:
- _libgcc_mutex 0.1 conda_forge
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 460992
timestamp: 1729027639220
- kind: conda
@@ -2778,6 +2978,7 @@ packages:
depends:
- libgcc-ng >=12
license: LGPL-2.1-only
+ purls: []
size: 705775
timestamp: 1702682170569
- kind: conda
@@ -2790,6 +2991,7 @@ packages:
sha256: 23d4923baeca359423a7347c2ed7aaf48c68603df0cf8b87cc94a10b0d4e9a23
md5: 6c3628d047e151efba7cf08c5e54d1ca
license: LGPL-2.1-only
+ purls: []
size: 666538
timestamp: 1702682713201
- kind: conda
@@ -2809,6 +3011,7 @@ packages:
- blas * openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15608
timestamp: 1729642910812
- kind: conda
@@ -2828,6 +3031,7 @@ packages:
- libcblas 3.9.0 25_osx64_openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15852
timestamp: 1729643174413
- kind: conda
@@ -2847,6 +3051,7 @@ packages:
- blas * openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15609
timestamp: 1729642916038
- kind: conda
@@ -2866,6 +3071,7 @@ packages:
- blas * openblas
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 15846
timestamp: 1729643185849
- kind: conda
@@ -2889,6 +3095,7 @@ packages:
- zstd >=1.5.5,<1.6.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 1298413
timestamp: 1711395384374
- kind: conda
@@ -2913,6 +3120,7 @@ packages:
- zstd >=1.5.5,<1.6.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 1671126
timestamp: 1711394919576
- kind: conda
@@ -2934,6 +3142,8 @@ packages:
- yaml-cpp >=0.8.0,<0.9.0a0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/libmambapy?source=hash-mapping
size: 272088
timestamp: 1711395982732
- kind: conda
@@ -2956,6 +3166,8 @@ packages:
- yaml-cpp >=0.8.0,<0.9.0a0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/libmambapy?source=hash-mapping
size: 306497
timestamp: 1711395345839
- kind: conda
@@ -2977,6 +3189,7 @@ packages:
- openssl >=3.2.0,<4.0a0
license: MIT
license_family: MIT
+ purls: []
size: 631936
timestamp: 1702130036271
- kind: conda
@@ -2998,6 +3211,7 @@ packages:
- openssl >=3.2.0,<4.0a0
license: MIT
license_family: MIT
+ purls: []
size: 599736
timestamp: 1702130398536
- kind: conda
@@ -3012,6 +3226,7 @@ packages:
- libgcc-ng >=12
license: LGPL-2.1-only
license_family: GPL
+ purls: []
size: 33408
timestamp: 1697359010159
- kind: conda
@@ -3032,6 +3247,7 @@ packages:
- openblas >=0.3.28,<0.3.29.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 6165715
timestamp: 1730773348340
- kind: conda
@@ -3052,6 +3268,7 @@ packages:
- openblas >=0.3.28,<0.3.29.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 5578513
timestamp: 1730772671118
- kind: conda
@@ -3068,6 +3285,7 @@ packages:
- libzlib >=1.2.13,<2.0.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 415537
timestamp: 1714552385517
- kind: conda
@@ -3084,6 +3302,7 @@ packages:
- libzlib >=1.2.13,<2.0.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 470672
timestamp: 1714552161121
- kind: conda
@@ -3098,6 +3317,7 @@ packages:
- __osx >=10.13
- libzlib >=1.2.13,<2.0a0
license: Unlicense
+ purls: []
size: 908643
timestamp: 1718050720117
- kind: conda
@@ -3112,6 +3332,7 @@ packages:
- libgcc-ng >=12
- libzlib >=1.2.13,<2.0a0
license: Unlicense
+ purls: []
size: 865346
timestamp: 1718050628718
- kind: conda
@@ -3128,6 +3349,7 @@ packages:
- openssl >=3.1.1,<4.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 271133
timestamp: 1685837707056
- kind: conda
@@ -3143,6 +3365,7 @@ packages:
- openssl >=3.1.1,<4.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 259556
timestamp: 1685837820566
- kind: conda
@@ -3158,6 +3381,7 @@ packages:
- libgcc 14.2.0 h77fa898_1
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 3893695
timestamp: 1729027746910
- kind: conda
@@ -3173,6 +3397,7 @@ packages:
- libstdcxx 14.2.0 hc0a3c3a_1
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
+ purls: []
size: 54105
timestamp: 1729027780628
- kind: conda
@@ -3187,6 +3412,7 @@ packages:
- libgcc-ng >=12
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 33601
timestamp: 1680112270483
- kind: conda
@@ -3201,6 +3427,7 @@ packages:
depends:
- libgcc-ng >=12
license: LGPL-2.1-or-later
+ purls: []
size: 100393
timestamp: 1702724383534
- kind: conda
@@ -3220,6 +3447,7 @@ packages:
- xz >=5.2.6,<6.0a0
license: MIT
license_family: MIT
+ purls: []
size: 619297
timestamp: 1717546472911
- kind: conda
@@ -3239,6 +3467,7 @@ packages:
- xz >=5.2.6,<6.0a0
license: MIT
license_family: MIT
+ purls: []
size: 704984
timestamp: 1717546454837
- kind: conda
@@ -3256,6 +3485,7 @@ packages:
- zlib 1.2.13 *_6
license: Zlib
license_family: Other
+ purls: []
size: 61571
timestamp: 1716874066944
- kind: conda
@@ -3273,6 +3503,7 @@ packages:
- zlib 1.2.13 *_6
license: Zlib
license_family: Other
+ purls: []
size: 57373
timestamp: 1716874185419
- kind: conda
@@ -3289,6 +3520,7 @@ packages:
- openmp 19.1.3|19.1.3.*
license: Apache-2.0 WITH LLVM-exception
license_family: APACHE
+ purls: []
size: 305524
timestamp: 1730364180247
- kind: conda
@@ -3304,6 +3536,8 @@ packages:
- python >=3.8
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/logmuse?source=hash-mapping
size: 13455
timestamp: 1728929621314
- kind: conda
@@ -3319,6 +3553,7 @@ packages:
- libstdcxx-ng >=12
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 143402
timestamp: 1674727076728
- kind: conda
@@ -3333,6 +3568,7 @@ packages:
- libcxx >=14.0.6
license: BSD-2-Clause
license_family: BSD
+ purls: []
size: 156415
timestamp: 1674727335352
- kind: conda
@@ -3346,6 +3582,7 @@ packages:
md5: bfecd73e4a2dc18ffd5288acf8a212ab
license: GPL-2.0-or-later
license_family: GPL2
+ purls: []
size: 146405
timestamp: 1713516112292
- kind: conda
@@ -3361,6 +3598,7 @@ packages:
- libgcc-ng >=12
license: GPL-2.0-or-later
license_family: GPL2
+ purls: []
size: 171416
timestamp: 1713515738503
- kind: conda
@@ -3377,6 +3615,8 @@ packages:
- python >=3.8
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/markdown-it-py?source=hash-mapping
size: 64356
timestamp: 1686175179621
- kind: conda
@@ -3396,6 +3636,8 @@ packages:
- jinja2 >=3.0.0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
size: 24878
timestamp: 1729351558563
- kind: conda
@@ -3414,6 +3656,8 @@ packages:
- jinja2 >=3.0.0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
size: 23889
timestamp: 1729351468966
- kind: conda
@@ -3429,6 +3673,8 @@ packages:
- python >=3.6
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/mdurl?source=hash-mapping
size: 14680
timestamp: 1704317789138
- kind: conda
@@ -3443,6 +3689,8 @@ packages:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: BSD-3-Clause AND MIT
+ purls:
+ - pkg:pypi/menuinst?source=hash-mapping
size: 166308
timestamp: 1731147065526
- kind: conda
@@ -3457,6 +3705,8 @@ packages:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: BSD-3-Clause AND MIT
+ purls:
+ - pkg:pypi/menuinst?source=hash-mapping
size: 166741
timestamp: 1731147133148
- kind: conda
@@ -3472,6 +3722,8 @@ packages:
- python >=3.5
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/mypy-extensions?source=hash-mapping
size: 10492
timestamp: 1675543414256
- kind: conda
@@ -3491,6 +3743,8 @@ packages:
- traitlets >=5.1
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/nbformat?source=hash-mapping
size: 101232
timestamp: 1712239122969
- kind: conda
@@ -3506,6 +3760,7 @@ packages:
- __glibc >=2.17,<3.0.a0
- libgcc-ng >=12
license: X11 AND BSD-3-Clause
+ purls: []
size: 889086
timestamp: 1724658547447
- kind: conda
@@ -3520,6 +3775,7 @@ packages:
depends:
- __osx >=10.13
license: X11 AND BSD-3-Clause
+ purls: []
size: 822066
timestamp: 1724658603042
- kind: conda
@@ -3543,6 +3799,8 @@ packages:
- numpy-base <0a0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
size: 8388631
timestamp: 1730588649810
- kind: conda
@@ -3565,6 +3823,8 @@ packages:
- numpy-base <0a0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
size: 7538388
timestamp: 1730588494493
- kind: conda
@@ -3581,6 +3841,7 @@ packages:
- libgcc >=13
license: Apache-2.0
license_family: Apache
+ purls: []
size: 2947466
timestamp: 1731377666602
- kind: conda
@@ -3596,6 +3857,7 @@ packages:
- ca-certificates
license: Apache-2.0
license_family: Apache
+ purls: []
size: 2590683
timestamp: 1731378034404
- kind: conda
@@ -3612,6 +3874,8 @@ packages:
- python >=3.8
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/packaging?source=hash-mapping
size: 60380
timestamp: 1731802602808
- kind: conda
@@ -3635,6 +3899,8 @@ packages:
- pytz >=2020.1,<2024.2
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/pandas?source=hash-mapping
size: 14575645
timestamp: 1726879062042
- kind: conda
@@ -3659,6 +3925,8 @@ packages:
- pytz >=2020.1,<2024.2
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/pandas?source=hash-mapping
size: 15436913
timestamp: 1726879054912
- kind: conda
@@ -3674,6 +3942,8 @@ packages:
- python >=3.7
license: MPL-2.0
license_family: MOZILLA
+ purls:
+ - pkg:pypi/pathspec?source=hash-mapping
size: 41173
timestamp: 1702250135032
- kind: conda
@@ -3696,6 +3966,8 @@ packages:
- ubiquerg >=0.6.3
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/pephubclient?source=hash-mapping
size: 22193
timestamp: 1728675175037
- kind: conda
@@ -3718,6 +3990,8 @@ packages:
- ubiquerg >=0.5.2
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/peppy?source=hash-mapping
size: 29442
timestamp: 1729011123771
- kind: conda
@@ -3733,6 +4007,8 @@ packages:
depends:
- python >=3.6
license: MIT AND PSF-2.0
+ purls:
+ - pkg:pypi/pkgutil-resolve-name?source=hash-mapping
size: 10778
timestamp: 1694617398467
- kind: conda
@@ -3748,6 +4024,8 @@ packages:
- python >=3.6
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/plac?source=hash-mapping
size: 26044
timestamp: 1708635292043
- kind: conda
@@ -3763,6 +4041,8 @@ packages:
- python >=3.8
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/platformdirs?source=hash-mapping
size: 20625
timestamp: 1726613611845
- kind: conda
@@ -3778,6 +4058,8 @@ packages:
- python >=3.8
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pluggy?source=hash-mapping
size: 23815
timestamp: 1713667175451
- kind: conda
@@ -3796,6 +4078,8 @@ packages:
- prompt_toolkit 3.0.38
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/prompt-toolkit?source=hash-mapping
size: 269375
timestamp: 1677601102637
- kind: conda
@@ -3811,6 +4095,7 @@ packages:
- prompt-toolkit >=3.0.38,<3.0.39.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 6402
timestamp: 1677601110741
- kind: conda
@@ -3827,6 +4112,8 @@ packages:
- python_abi 3.12.* *_cp312
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
size: 493463
timestamp: 1729847222797
- kind: conda
@@ -3844,6 +4131,8 @@ packages:
- python_abi 3.12.* *_cp312
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
size: 488462
timestamp: 1729847159916
- kind: conda
@@ -3861,6 +4150,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pulp?source=hash-mapping
size: 13217118
timestamp: 1705064802698
- kind: conda
@@ -3878,6 +4169,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pulp?source=hash-mapping
size: 13333860
timestamp: 1705064991160
- kind: conda
@@ -3892,6 +4185,7 @@ packages:
md5: 878f923dd6acc8aeb47a75da6c4098be
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 9906
timestamp: 1610372835205
- kind: conda
@@ -3907,6 +4201,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pycosat?source=hash-mapping
size: 89221
timestamp: 1696356180943
- kind: conda
@@ -3923,6 +4219,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pycosat?source=hash-mapping
size: 88549
timestamp: 1696355931150
- kind: conda
@@ -3938,6 +4236,8 @@ packages:
- python >=3.8
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/pycparser?source=hash-mapping
size: 105098
timestamp: 1711811634025
- kind: conda
@@ -3956,6 +4256,8 @@ packages:
- typing-extensions >=4.6.1
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pydantic?source=hash-mapping
size: 300649
timestamp: 1726601202431
- kind: conda
@@ -3976,6 +4278,8 @@ packages:
- __glibc >=2.17
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pydantic-core?source=hash-mapping
size: 1611784
timestamp: 1726525286507
- kind: conda
@@ -3995,6 +4299,8 @@ packages:
- __osx >=10.13
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pydantic-core?source=hash-mapping
size: 1535259
timestamp: 1726525537029
- kind: conda
@@ -4010,6 +4316,8 @@ packages:
- python >=3.8
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/pygments?source=hash-mapping
size: 879295
timestamp: 1714846885370
- kind: conda
@@ -4026,6 +4334,8 @@ packages:
- python >=3.9
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pyparsing?source=hash-mapping
size: 92444
timestamp: 1728880549923
- kind: conda
@@ -4043,6 +4353,8 @@ packages:
- python >=3.8
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/pysocks?source=hash-mapping
size: 18981
timestamp: 1661604969727
- kind: conda
@@ -4066,6 +4378,8 @@ packages:
- pytest-faulthandler >=2
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pytest?source=hash-mapping
size: 258293
timestamp: 1725977334143
- kind: conda
@@ -4092,6 +4406,7 @@ packages:
constrains:
- python_abi 3.12.* *_cp312
license: Python-2.0
+ purls: []
size: 14557341
timestamp: 1713208068012
- kind: conda
@@ -4122,6 +4437,7 @@ packages:
constrains:
- python_abi 3.12.* *_cp312
license: Python-2.0
+ purls: []
size: 31991381
timestamp: 1713208036041
- kind: conda
@@ -4138,6 +4454,8 @@ packages:
- six >=1.5
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/python-dateutil?source=hash-mapping
size: 222742
timestamp: 1709299922152
- kind: conda
@@ -4153,6 +4471,8 @@ packages:
- python >=3.3
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/fastjsonschema?source=hash-mapping
size: 226165
timestamp: 1718477110630
- kind: conda
@@ -4168,6 +4488,8 @@ packages:
- python >=3.6
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/tzdata?source=hash-mapping
size: 142527
timestamp: 1727140688093
- kind: conda
@@ -4183,6 +4505,7 @@ packages:
- python 3.12.* *_cpython
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 6238
timestamp: 1723823388266
- kind: conda
@@ -4198,6 +4521,7 @@ packages:
- python 3.12.* *_cpython
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 6312
timestamp: 1723823137004
- kind: conda
@@ -4213,6 +4537,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pytz?source=hash-mapping
size: 188538
timestamp: 1706886944988
- kind: conda
@@ -4232,6 +4558,8 @@ packages:
- yaml >=0.2.5,<0.3.0a0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
size: 206553
timestamp: 1725456256213
- kind: conda
@@ -4250,6 +4578,8 @@ packages:
- yaml >=0.2.5,<0.3.0a0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
size: 189347
timestamp: 1725456465705
- kind: conda
@@ -4266,6 +4596,7 @@ packages:
- ncurses >=6.3,<7.0a0
license: GPL-3.0-only
license_family: GPL
+ purls: []
size: 281456
timestamp: 1679532220005
- kind: conda
@@ -4281,6 +4612,7 @@ packages:
- ncurses >=6.3,<7.0a0
license: GPL-3.0-only
license_family: GPL
+ purls: []
size: 255870
timestamp: 1679532707590
- kind: conda
@@ -4298,6 +4630,8 @@ packages:
- rpds-py >=0.7.0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/referencing?source=hash-mapping
size: 42210
timestamp: 1714619625532
- kind: conda
@@ -4311,6 +4645,7 @@ packages:
depends:
- __osx >=10.13
license: MIT
+ purls: []
size: 31749
timestamp: 1731926270954
- kind: conda
@@ -4325,6 +4660,7 @@ packages:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
license: MIT
+ purls: []
size: 34194
timestamp: 1731925834928
- kind: conda
@@ -4340,6 +4676,7 @@ packages:
- libcxx >=18
- reproc 14.2.5.post0 h6e16a3a_0
license: MIT
+ purls: []
size: 24394
timestamp: 1731926392643
- kind: conda
@@ -4356,6 +4693,7 @@ packages:
- libstdcxx >=13
- reproc 14.2.5.post0 hb9d3cd8_0
license: MIT
+ purls: []
size: 25665
timestamp: 1731925852714
- kind: conda
@@ -4377,6 +4715,8 @@ packages:
- chardet >=3.0.2,<6
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/requests?source=hash-mapping
size: 58810
timestamp: 1717057174842
- kind: conda
@@ -4392,6 +4732,8 @@ packages:
- python >=3.6
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/reretry?source=hash-mapping
size: 12191
timestamp: 1671379290649
- kind: conda
@@ -4410,6 +4752,8 @@ packages:
- typing_extensions >=4.0.0,<5.0.0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/rich?source=hash-mapping
size: 185481
timestamp: 1730592349978
- kind: conda
@@ -4428,6 +4772,8 @@ packages:
- __osx >=10.13
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
size: 303838
timestamp: 1730922939375
- kind: conda
@@ -4447,6 +4793,8 @@ packages:
- __glibc >=2.17
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
size: 336759
timestamp: 1730922756033
- kind: conda
@@ -4466,6 +4814,8 @@ packages:
- setuptools
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/ruamel-yaml?source=hash-mapping
size: 251341
timestamp: 1728738935612
- kind: conda
@@ -4486,6 +4836,8 @@ packages:
- setuptools
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/ruamel-yaml?source=hash-mapping
size: 251059
timestamp: 1728738915878
- kind: conda
@@ -4503,6 +4855,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/ruamel-yaml-clib?source=hash-mapping
size: 122331
timestamp: 1728724619287
- kind: conda
@@ -4521,6 +4875,8 @@ packages:
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/ruamel-yaml-clib?source=hash-mapping
size: 145481
timestamp: 1728724626666
- kind: conda
@@ -4540,6 +4896,8 @@ packages:
- __osx >=10.13
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/ruff?source=hash-mapping
size: 7218063
timestamp: 1731708938871
- kind: conda
@@ -4560,6 +4918,8 @@ packages:
- __glibc >=2.17
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/ruff?source=hash-mapping
size: 7788530
timestamp: 1731708419964
- kind: conda
@@ -4576,6 +4936,7 @@ packages:
- openssl >=3.3.2,<4.0a0
license: Apache-2.0
license_family: Apache
+ purls: []
size: 353081
timestamp: 1728534228471
- kind: conda
@@ -4591,6 +4952,8 @@ packages:
- python >=3.9
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/setuptools?source=hash-mapping
size: 772480
timestamp: 1731707561164
- kind: conda
@@ -4606,6 +4969,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/shellingham?source=hash-mapping
size: 14568
timestamp: 1698144516278
- kind: conda
@@ -4621,6 +4986,8 @@ packages:
- python
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/six?source=hash-mapping
size: 14259
timestamp: 1620240338595
- kind: conda
@@ -4636,6 +5003,8 @@ packages:
- python >=3.6
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/slack-sdk?source=hash-mapping
size: 148014
timestamp: 1730271331374
- kind: conda
@@ -4651,6 +5020,7 @@ packages:
- slack-sdk 3.33.3 pyha770c72_0
license: MIT
license_family: MIT
+ purls: []
size: 6207
timestamp: 1730271332649
- kind: conda
@@ -4668,6 +5038,8 @@ packages:
- wrapt
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/smart-open?source=hash-mapping
size: 51803
timestamp: 1728143243234
- kind: conda
@@ -4683,6 +5055,8 @@ packages:
- python >=3.5
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/smmap?source=hash-mapping
size: 22483
timestamp: 1634310465482
- kind: conda
@@ -4723,6 +5097,35 @@ packages:
license_family: MIT
size: 9382
timestamp: 1728717749418
+- kind: pypi
+ name: snakemake-executor-plugin-slurm
+ version: 0.11.2
+ url: https://files.pythonhosted.org/packages/f8/0b/8289366ee599f9324af7010a476efcd85fd51c151ed0c300f2e9dce18c5d/snakemake_executor_plugin_slurm-0.11.2-py3-none-any.whl
+ sha256: 265804d1df04ec3859be841b8f540b9cb7bdf6249c991529bddcb9d5b8fec8ad
+ requires_dist:
+ - snakemake-executor-plugin-slurm-jobstep>=0.2.0,<0.3.0
+ - snakemake-interface-common>=1.13.0,<2.0.0
+ - snakemake-interface-executor-plugins>=9.1.1,<10.0.0
+ - throttler>=1.2.2,<2.0.0
+ requires_python: '>=3.11,<4.0'
+- kind: pypi
+ name: snakemake-executor-plugin-slurm-jobstep
+ version: 0.2.1
+ url: https://files.pythonhosted.org/packages/78/46/95a80edc6196f01e20c35a272e2d801b48fd4c9a67aed3e76fb5e2b78603/snakemake_executor_plugin_slurm_jobstep-0.2.1-py3-none-any.whl
+ sha256: 097a51c8d2d1d40bb5aa4a845bb8c75ca03113d7197c67f047640319661725b3
+ requires_dist:
+ - snakemake-interface-common>=1.13.0,<2.0.0
+ - snakemake-interface-executor-plugins>=9.0.0,<10.0.0
+ requires_python: '>=3.11,<4.0'
+- kind: pypi
+ name: snakemake-interface-common
+ version: 1.17.4
+ url: https://files.pythonhosted.org/packages/3d/fe/c318657e6a4b8ab5b3eafa07cd1c360a732c6b37ba6085f3c82339ebbbdc/snakemake_interface_common-1.17.4-py3-none-any.whl
+ sha256: 1d757cce0300a73d48b906d1ade38706853169320a5d27b963869888d130c354
+ requires_dist:
+ - configargparse>=1.7,<2.0
+ - argparse-dataclass>=2.0.0,<3.0.0
+ requires_python: '>=3.8,<4.0'
- kind: conda
name: snakemake-interface-common
version: 1.17.4
@@ -4740,6 +5143,16 @@ packages:
license_family: MIT
size: 18489
timestamp: 1728055352534
+- kind: pypi
+ name: snakemake-interface-executor-plugins
+ version: 9.3.2
+ url: https://files.pythonhosted.org/packages/7c/84/0b7602c54d97b2cd3b40fc4c80633d42afcf69e441d9f25c928376051be8/snakemake_interface_executor_plugins-9.3.2-py3-none-any.whl
+ sha256: 9c52c4b0f74b9056ebbb1b6229459281fef002b678baac00aee3b3ef36e92ba5
+ requires_dist:
+ - argparse-dataclass>=2.0.0,<3.0.0
+ - snakemake-interface-common>=1.17.4,<2.0.0
+ - throttler>=1.2.2,<2.0.0
+ requires_python: '>=3.11,<4.0'
- kind: conda
name: snakemake-interface-executor-plugins
version: 9.3.2
@@ -4849,6 +5262,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/tabulate?source=hash-mapping
size: 35912
timestamp: 1665138565317
- kind: conda
@@ -4868,6 +5283,7 @@ packages:
- __glibc >=2.17
license: MIT
license_family: MIT
+ purls: []
size: 3835339
timestamp: 1727786201305
- kind: conda
@@ -4886,6 +5302,7 @@ packages:
- __osx >=10.13
license: MIT
license_family: MIT
+ purls: []
size: 3738226
timestamp: 1727786378888
- kind: conda
@@ -4901,6 +5318,8 @@ packages:
- python >=3.6
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/throttler?source=hash-mapping
size: 12341
timestamp: 1691135604942
- kind: conda
@@ -4916,6 +5335,7 @@ packages:
- libzlib >=1.2.13,<2.0.0a0
license: TCL
license_family: BSD
+ purls: []
size: 3270220
timestamp: 1699202389792
- kind: conda
@@ -4932,6 +5352,7 @@ packages:
- libzlib >=1.2.13,<2.0.0a0
license: TCL
license_family: BSD
+ purls: []
size: 3318875
timestamp: 1699202167581
- kind: conda
@@ -4947,6 +5368,8 @@ packages:
- python >=2.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/toml?source=hash-mapping
size: 18433
timestamp: 1604308660817
- kind: conda
@@ -4962,6 +5385,8 @@ packages:
- python >=3.9
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/tomli?source=hash-mapping
size: 18741
timestamp: 1731426862834
- kind: conda
@@ -4977,6 +5402,8 @@ packages:
- python >=3.8
license: Apache-2.0
license_family: APACHE
+ purls:
+ - pkg:pypi/toposort?source=hash-mapping
size: 13603
timestamp: 1677526421221
- kind: conda
@@ -4992,6 +5419,8 @@ packages:
- colorama
- python >=3.7
license: MPL-2.0 or MIT
+ purls:
+ - pkg:pypi/tqdm?source=hash-mapping
size: 89434
timestamp: 1730926216380
- kind: conda
@@ -5007,6 +5436,8 @@ packages:
- python >=3.8
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/traitlets?source=hash-mapping
size: 110187
timestamp: 1713535244513
- kind: conda
@@ -5022,6 +5453,8 @@ packages:
- python >=3.10
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/truststore?source=hash-mapping
size: 21799
timestamp: 1729762456098
- kind: conda
@@ -5038,6 +5471,8 @@ packages:
- typer-slim-standard 0.13.0 hd8ed1ab_0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/typer?source=hash-mapping
size: 54855
timestamp: 1731015674090
- kind: conda
@@ -5059,6 +5494,8 @@ packages:
- rich >=10.11.0
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/typer-slim?source=hash-mapping
size: 43166
timestamp: 1731015659531
- kind: conda
@@ -5076,6 +5513,7 @@ packages:
- typer-slim 0.13.0 pyhff2d567_0
license: MIT
license_family: MIT
+ purls: []
size: 48480
timestamp: 1731015660139
- kind: conda
@@ -5091,6 +5529,7 @@ packages:
- typing_extensions 4.12.2 pyha770c72_0
license: PSF-2.0
license_family: PSF
+ purls: []
size: 10097
timestamp: 1717802659025
- kind: conda
@@ -5106,6 +5545,8 @@ packages:
- python >=3.8
license: PSF-2.0
license_family: PSF
+ purls:
+ - pkg:pypi/typing-extensions?source=hash-mapping
size: 39888
timestamp: 1717802653893
- kind: conda
@@ -5118,6 +5559,7 @@ packages:
sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
md5: 8ac3367aafb1cc0a068483c580af8015
license: LicenseRef-Public-Domain
+ purls: []
size: 122354
timestamp: 1728047496079
- kind: conda
@@ -5134,6 +5576,8 @@ packages:
- veracitools
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/ubiquerg?source=hash-mapping
size: 20698
timestamp: 1719492750373
- kind: conda
@@ -5151,6 +5595,8 @@ packages:
- python >=3.7
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/urllib3?source=hash-mapping
size: 115125
timestamp: 1718728467518
- kind: conda
@@ -5167,6 +5613,8 @@ packages:
- python
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/veracitools?source=hash-mapping
size: 6108
timestamp: 1572717780817
- kind: conda
@@ -5182,6 +5630,8 @@ packages:
- python >=3.8
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/wcwidth?source=hash-mapping
size: 32709
timestamp: 1704731373922
- kind: conda
@@ -5200,6 +5650,8 @@ packages:
- python_abi 3.12.* *_cp312
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/wrapt?source=hash-mapping
size: 62624
timestamp: 1724958046744
- kind: conda
@@ -5217,6 +5669,8 @@ packages:
- python_abi 3.12.* *_cp312
license: BSD-2-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/wrapt?source=hash-mapping
size: 58290
timestamp: 1724958107514
- kind: conda
@@ -5230,6 +5684,7 @@ packages:
depends:
- libgcc-ng >=12
license: LGPL-2.1 and GPL-2.0
+ purls: []
size: 418368
timestamp: 1660346797927
- kind: conda
@@ -5241,6 +5696,7 @@ packages:
sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8
md5: a72f9d4ea13d55d745ff1ed594747f10
license: LGPL-2.1 and GPL-2.0
+ purls: []
size: 238119
timestamp: 1660346964847
- kind: conda
@@ -5254,6 +5710,7 @@ packages:
md5: d7e08fcf8259d742156188e8762b4d20
license: MIT
license_family: MIT
+ purls: []
size: 84237
timestamp: 1641347062780
- kind: conda
@@ -5269,6 +5726,7 @@ packages:
- libgcc-ng >=9.4.0
license: MIT
license_family: MIT
+ purls: []
size: 89141
timestamp: 1641346969816
- kind: conda
@@ -5284,6 +5742,7 @@ packages:
- libstdcxx-ng >=12
license: MIT
license_family: MIT
+ purls: []
size: 204867
timestamp: 1695710312002
- kind: conda
@@ -5298,6 +5757,7 @@ packages:
- libcxx >=15.0.7
license: MIT
license_family: MIT
+ purls: []
size: 130328
timestamp: 1695710502498
- kind: conda
@@ -5316,6 +5776,8 @@ packages:
- pyyaml
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/yte?source=hash-mapping
size: 14311
timestamp: 1702295254855
- kind: conda
@@ -5331,6 +5793,8 @@ packages:
- python >=3.8
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/zipp?source=hash-mapping
size: 21702
timestamp: 1731262194278
- kind: conda
@@ -5351,6 +5815,8 @@ packages:
- zstd >=1.5.6,<1.6.0a0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/zstandard?source=hash-mapping
size: 410873
timestamp: 1725305688706
- kind: conda
@@ -5372,6 +5838,8 @@ packages:
- zstd >=1.5.6,<1.6.0a0
license: BSD-3-Clause
license_family: BSD
+ purls:
+ - pkg:pypi/zstandard?source=hash-mapping
size: 419552
timestamp: 1725305670210
- kind: conda
@@ -5387,6 +5855,7 @@ packages:
- libzlib >=1.2.13,<2.0.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 498900
timestamp: 1714723303098
- kind: conda
@@ -5403,5 +5872,6 @@ packages:
- libzlib >=1.2.13,<2.0.0a0
license: BSD-3-Clause
license_family: BSD
+ purls: []
size: 554846
timestamp: 1714722996770
diff --git a/pixi.toml b/pixi.toml
index f4efa2589..80072ec18 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -4,11 +4,22 @@ channels = ["conda-forge", "bioconda"]
description = "Add a short description here"
name = "FIRE"
platforms = ["osx-64", "linux-64"]
-version = "0.1.0"
+version = "0.0.8"
[tasks]
fmt = "ruff format . && taplo format pixi.toml && snakefmt workflow/"
-test-data = "aws s3 --no-sign-request sync s3://stergachis-public1/FIRE/test-data test-data/"
+test-data = { cmd = [
+ "mkdir",
+ "-p",
+ "test-data",
+ "&&",
+ "aws",
+ "s3",
+ "--no-sign-request",
+ "sync",
+ "s3://stergachis-public1/FIRE/test-data",
+ "test-data/",
+] }
test = { cmd = [
"snakemake",
"-s",
@@ -27,3 +38,6 @@ snakefmt = "*"
ruff = "*"
awscli = "2.22"
taplo = "*"
+
+[pypi-dependencies]
+snakemake-executor-plugin-slurm = "*"
From 3df9a3bbdf96ecec3aa4f8d4f12c3b673ddbd259 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 20:07:02 -0800
Subject: [PATCH 113/145] format
---
pixi.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pixi.toml b/pixi.toml
index 80072ec18..03dedbb51 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -4,7 +4,7 @@ channels = ["conda-forge", "bioconda"]
description = "Add a short description here"
name = "FIRE"
platforms = ["osx-64", "linux-64"]
-version = "0.0.8"
+version = "0.1.0"
[tasks]
fmt = "ruff format . && taplo format pixi.toml && snakefmt workflow/"
From 2dbbf3b053f7bf98147f1d62ffed7c4cade4bc18 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 20:07:43 -0800
Subject: [PATCH 114/145] format
---
.github/workflows/conventional-prs.yml | 18 ------------------
1 file changed, 18 deletions(-)
delete mode 100644 .github/workflows/conventional-prs.yml
diff --git a/.github/workflows/conventional-prs.yml b/.github/workflows/conventional-prs.yml
deleted file mode 100644
index 2a5b86f44..000000000
--- a/.github/workflows/conventional-prs.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: PR
-on:
- pull_request_target:
- types:
- - opened
- - reopened
- - edited
- - synchronize
-
-jobs:
- title-format:
- runs-on: ubuntu-latest
- steps:
- - uses: amannn/action-semantic-pull-request@v3.4.0
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- validateSingleCommit: true
\ No newline at end of file
From 5babca4bb9afda6cd4d1bed14d437a3ee82406b0 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 20:11:43 -0800
Subject: [PATCH 115/145] actions
---
.github/workflows/release-please.yml | 17 -----------------
1 file changed, 17 deletions(-)
delete mode 100644 .github/workflows/release-please.yml
diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml
deleted file mode 100644
index 19cfd041c..000000000
--- a/.github/workflows/release-please.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-on:
- push:
- branches:
- - main
-
-name: release-please
-
-jobs:
- release-please:
- runs-on: ubuntu-latest
- steps:
-
- - uses: GoogleCloudPlatform/release-please-action@v2
- id: release
- with:
- release-type: go # just keep a changelog, no version anywhere outside of git tags
- package-name:
From 81e6d9bc504d1c4308808760ee921d4ac3a91fd7 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Thu, 21 Nov 2024 20:17:18 -0800
Subject: [PATCH 116/145] actions
---
.github/workflows/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 4034585ad..73b7fb0de 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -54,6 +54,6 @@ jobs:
with:
pixi-version: v0.37.0
cache: true
- auth-host: prefix.dev
- auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
+ #auth-host: prefix.dev
+ #auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
- run: pixi run test
From d9fd79ad71e8c20e53aef3cf18a67df55731eae9 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Fri, 22 Nov 2024 08:34:07 -0800
Subject: [PATCH 117/145] actions
---
.github/workflows/main.yml | 42 +-------------------------------------
README.md | 1 +
2 files changed, 2 insertions(+), 41 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 73b7fb0de..8af20c95b 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -1,4 +1,4 @@
-name: Tests
+name: CI
on:
push:
@@ -7,44 +7,6 @@ on:
branches: [main]
jobs:
- Formatting:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Formatting
- uses: github/super-linter@v4
- env:
- VALIDATE_ALL_CODEBASE: false
- DEFAULT_BRANCH: main
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- VALIDATE_SNAKEMAKE_SNAKEFMT: true
-
- Linting:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Lint workflow
- uses: snakemake/snakemake-github-action@v1.24.0
- with:
- directory: .
- snakefile: workflow/Snakefile
- args: "--lint"
-
- Testing:
- runs-on: ubuntu-latest
- needs:
- - Linting
- - Formatting
- steps:
- - uses: actions/checkout@v2
-
- - name: Test workflow
- uses: snakemake/snakemake-github-action@v1.24.0
- with:
- directory: .test
- snakefile: workflow/Snakefile
- args: "--use-conda --show-failed-logs --cores 3 --conda-cleanup-pkgs cache --all-temp --configfile config.yml"
-
# pixi test
Test:
runs-on: ubuntu-latest
@@ -54,6 +16,4 @@ jobs:
with:
pixi-version: v0.37.0
cache: true
- #auth-host: prefix.dev
- #auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
- run: pixi run test
diff --git a/README.md b/README.md
index 7f7df92b8..55966d6d1 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# 🔥 **FIRE**: Fiber-seq Inferred Regulatory Elements
[](https://zenodo.org/doi/10.5281/zenodo.10023811)
+[](https://github.com/fiberseq/FIRE/actions)
A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules. For a more detailed description and methods see the [docs](/docs/README.md), or [watch](https://youtu.be/RiZrMltAiWM?si=sSo64goaNQxgyfcc) my lab meeting on FIRE.
From 188a59192740e9e8434040516a818ca7a4fa58df Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Fri, 22 Nov 2024 09:53:58 -0800
Subject: [PATCH 118/145] docs
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 55966d6d1..9dcb73847 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
# 🔥 **FIRE**: Fiber-seq Inferred Regulatory Elements
[](https://zenodo.org/doi/10.5281/zenodo.10023811)
-[](https://github.com/fiberseq/FIRE/actions)
+[](https://github.com/mrvollger/FIRE/actions)
-A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules. For a more detailed description and methods see the [docs](/docs/README.md), or [watch](https://youtu.be/RiZrMltAiWM?si=sSo64goaNQxgyfcc) my lab meeting on FIRE.
+A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules. For a more detailed description and methods see the [docs](https://fiberseq.github.io/fire/fire.html), or [watch](https://youtu.be/RiZrMltAiWM?si=sSo64goaNQxgyfcc) my lab meeting on FIRE.
## Install
From befa3474f07141fe257184138a65bb1fd14fbcff Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Fri, 22 Nov 2024 19:59:15 -0800
Subject: [PATCH 119/145] docs
---
README.md | 55 +++----------------------------------------------------
1 file changed, 3 insertions(+), 52 deletions(-)
diff --git a/README.md b/README.md
index 9dcb73847..82a9f9efe 100644
--- a/README.md
+++ b/README.md
@@ -3,57 +3,8 @@
[](https://zenodo.org/doi/10.5281/zenodo.10023811)
[](https://github.com/mrvollger/FIRE/actions)
-A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules. For a more detailed description and methods see the [docs](https://fiberseq.github.io/fire/fire.html), or [watch](https://youtu.be/RiZrMltAiWM?si=sSo64goaNQxgyfcc) my lab meeting on FIRE.
+A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules.
-## Install
+## Installation and Usage
-Please start by installing [pixi](https://pixi.sh/latest/) which handles the environment of the FIRE workflow.
-
-Then install FIRE using `git` and `pixi`:
-
-```bash
-git clone https://github.com/fiberseq/FIRE.git
-pixi install
-```
-
-We then recommend quickly testing your installation by running the test suite:
-
-```bash
-pixi run test
-```
-
-Further installation instructions can be found in the [INSTALL.md](/INSTALL.md) file.
-
-## Configuring
-
-See the [configuration README](/config/README.md), the example [configuration file](/config/config.yaml), and the example [manifest file](/config/config.tbl) for configuration options.
-
-## Run
-
-The `FIRE` workflow can be executed using the `pixi run fire` command. Under the hood this runs a `snakemake` workflow and any extra parameters are passed directly to snakemake. For example:
-
-```bash
-pixi run fire --configfile config/config.yaml
-```
-
-If you want to do a dry run:
-
-```bash
-pixi run fire --configfile config/config.yaml -n
-```
-
-If you want to execute across a cluster (modify `profiles/slurm-executor` as needed for distributed execution):
-
-```bash
-pixi run fire --configfile config/config.yaml --profile profiles/slurm-executor
-```
-
-You can also run snakemake directly, e.g.:
-
-```bash
-pixi shell
-snakemake \
- --configfile config/config.yaml \
- --profile profiles/slurm-executor \
- --local-cores 8 -k
-```
+See the [docs](https://fiberseq.github.io/fire/fire.html) for detailed installation and usage instructions.ß
From 63b2dd3ae6244c69248b86bddb2d1fd946f4b552 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Sat, 23 Nov 2024 12:42:34 -0800
Subject: [PATCH 120/145] add pixi version to outputs
---
.gitignore | 2 +-
pixi.toml | 19 +++++++----
workflow/Snakefile | 55 ++++++++++++++++++------------
workflow/rules/apply-model.smk | 10 +++---
workflow/rules/coverages.smk | 32 +++++++++--------
workflow/rules/decorated-reads.smk | 14 ++++----
workflow/rules/fire-peaks.smk | 46 ++++++++++++-------------
workflow/rules/stats.smk | 14 ++++----
workflow/rules/track-hub.smk | 18 +++++-----
9 files changed, 115 insertions(+), 95 deletions(-)
diff --git a/.gitignore b/.gitignore
index 522d37bae..71c23acca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -142,7 +142,7 @@ figures/
old/
phasing/
run_scripts/
-trackHub/
+trackHub-{v}/
trackHub_altius/
XCI/
altius/
diff --git a/pixi.toml b/pixi.toml
index 03dedbb51..286a39d28 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -9,27 +9,34 @@ version = "0.1.0"
[tasks]
fmt = "ruff format . && taplo format pixi.toml && snakefmt workflow/"
test-data = { cmd = [
+ "cd",
+ "$INIT_CWD",
+ "&&",
"mkdir",
"-p",
- "test-data",
+ "fire-test-data",
"&&",
"aws",
"s3",
"--no-sign-request",
"sync",
"s3://stergachis-public1/FIRE/test-data",
- "test-data/",
+ "fire-test-data/",
] }
test = { cmd = [
+ "cd",
+ "$INIT_CWD/fire-test-data",
+ "&&",
"snakemake",
"-s",
- "../workflow/Snakefile",
+ "$PIXI_PROJECT_ROOT/workflow/Snakefile",
"--configfile",
"test.yaml",
-], cwd = "test-data", depends_on = [
+], depends_on = [
"test-data",
-] }
-fire = { cmd = ["./fire"] }
+], clean-env = true }
+
+fire = { cmd = "cd $INIT_CWD && snakemake -s $PIXI_PROJECT_ROOT/workflow/Snakefile" }
[dependencies]
conda = "*"
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 59e6fd6a8..0a3237e24 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -18,6 +18,9 @@ min_version("8.21.0")
include: "rules/common.smk"
+# load the version from the environment
+VERSION = f"v{os.environ.get("PIXI_PROJECT_VERSION", "UNK")}"
+
# thread options
MAX_THREADS = config.get("max_threads", 4)
SORT_THREADS = config.get("sort_threads", 8)
@@ -108,6 +111,7 @@ wildcard_constraints:
hp="|".join(haps),
col="|".join(bw_types),
el_type="|".join(el_types),
+ v=VERSION,
localrules:
@@ -117,43 +121,50 @@ localrules:
rule all:
input:
# coverage information
- expand(rules.coverage.output, sm=MANIFEST.index),
- expand(rules.exclude_from_shuffle.output, sm=MANIFEST.index),
- expand(rules.unreliable_coverage_regions.output, sm=MANIFEST.index),
+ expand(rules.coverage.output, sm=MANIFEST.index, v=VERSION),
+ expand(rules.exclude_from_shuffle.output, sm=MANIFEST.index, v=VERSION),
+ expand(rules.unreliable_coverage_regions.output, sm=MANIFEST.index, v=VERSION),
expand(
rules.pileup.output.bed,
sm=MANIFEST.index,
+ v=VERSION,
),
# model results
- expand(rules.merged_fire_bam.output.cram, sm=MANIFEST.index),
- expand(rules.fire_sites.output, sm=MANIFEST.index),
+ expand(rules.merged_fire_bam.output.cram, sm=MANIFEST.index, v=VERSION),
+ expand(rules.fire_sites.output, sm=MANIFEST.index, v=VERSION),
# Stats and Tables
- expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index),
- expand(rules.ft_qc.output.tbl, sm=MANIFEST.index),
+ expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index, v=VERSION),
+ expand(rules.ft_qc.output.tbl, sm=MANIFEST.index, v=VERSION),
# FIRE peaks
- expand(rules.fdr_table.output.tbl, sm=MANIFEST.index),
- expand(rules.pileup.output.bed, sm=MANIFEST.index),
- expand(rules.fire_peaks.output.bed, sm=MANIFEST.index),
- expand(rules.wide_fire_peaks.output.bed, sm=MANIFEST.index),
- expand(rules.one_percent_fire_peaks.output.bed, sm=MANIFEST.index),
- expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index),
+ expand(rules.fdr_table.output.tbl, sm=MANIFEST.index, v=VERSION),
+ expand(rules.pileup.output.bed, sm=MANIFEST.index, v=VERSION),
+ expand(rules.fire_peaks.output.bed, sm=MANIFEST.index, v=VERSION),
+ expand(rules.wide_fire_peaks.output.bed, sm=MANIFEST.index, v=VERSION),
+ expand(rules.one_percent_fire_peaks.output.bed, sm=MANIFEST.index, v=VERSION),
+ expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index, v=VERSION),
# haplotype differences
- expand(rules.hap_differences.output.fig1, sm=MANIFEST.index),
- expand(rules.hap_differences.output.fig2, sm=MANIFEST.index),
- expand(rules.hap_differences.output.bed, sm=MANIFEST.index),
+ expand(rules.hap_differences.output.fig1, sm=MANIFEST.index, v=VERSION),
+ expand(rules.hap_differences.output.fig2, sm=MANIFEST.index, v=VERSION),
+ expand(rules.hap_differences.output.bed, sm=MANIFEST.index, v=VERSION),
# trackhub
- expand(rules.fire_peaks_bb.output.bb, sm=MANIFEST.index),
- expand(rules.percent_accessible.output.bw, hp=not_unk, sm=MANIFEST.index),
- expand(rules.decorate_fibers_1.output.bb, sm=MANIFEST.index),
- expand(rules.decorate_fibers_2.output.bb, sm=MANIFEST.index),
- expand(rules.hap_differences_track.output.bb, sm=MANIFEST.index),
+ expand(rules.fire_peaks_bb.output.bb, sm=MANIFEST.index, v=VERSION),
+ expand(
+ rules.percent_accessible.output.bw,
+ hp=not_unk,
+ sm=MANIFEST.index,
+ v=VERSION,
+ ),
+ expand(rules.decorate_fibers_1.output.bb, sm=MANIFEST.index, v=VERSION),
+ expand(rules.decorate_fibers_2.output.bb, sm=MANIFEST.index, v=VERSION),
+ expand(rules.hap_differences_track.output.bb, sm=MANIFEST.index, v=VERSION),
expand(
rules.element_coverages_bw.output.bw,
sm=MANIFEST.index,
hp=all_only,
el_type=el_types,
+ v=VERSION,
),
- expand(rules.trackhub.output.hub, sm=MANIFEST.index),
+ expand(rules.trackhub.output.hub, sm=MANIFEST.index, v=VERSION),
# UNUSED
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 87300049a..5b56bf41c 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -34,8 +34,8 @@ rule merged_fire_bam:
fai=ancient(FAI),
bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True),
output:
- cram="results/{sm}/{sm}-no-seq-qual-fire.cram",
- crai="results/{sm}/{sm}-no-seq-qual-fire.cram.crai",
+ cram="results/{sm}/{sm}-fire-{v}-no-seq-qual.cram",
+ crai="results/{sm}/{sm}-fire-{v}-no-seq-qual.cram.crai",
threads: 16
resources:
mem_mb=16 * 1024,
@@ -43,7 +43,7 @@ rule merged_fire_bam:
conda:
DEFAULT_ENV
benchmark:
- "results/{sm}/additional-outputs/benchmarks/{sm}-merged-fire-bam.txt"
+ "results/{sm}/additional-outputs/benchmarks/{sm}-{v}-merged-fire-bam.txt"
shell:
"""
samtools merge -@ {threads} -u {input.bams} -o - \
@@ -62,7 +62,7 @@ rule fire_sites_chrom:
input:
cram=rules.merged_fire_bam.output.cram,
output:
- bed=temp("temp/{sm}/chrom/{chrom}.sorted.bed.gz"),
+ bed=temp("temp/{sm}/chrom/{v}-{chrom}.sorted.bed.gz"),
threads: 4
conda:
DEFAULT_ENV
@@ -90,7 +90,7 @@ rule fire_sites:
rules.fire_sites_chrom.output.bed, chrom=get_chroms(), allow_missing=True
),
output:
- bed="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-elements.bed.gz",
+ bed="results/{sm}/additional-outputs/fire-peaks/{sm}-{v}-fire-elements.bed.gz",
threads: 8
conda:
DEFAULT_ENV
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index 96f6bae7a..d09ca4cd4 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -8,8 +8,8 @@ rule genome_bedgraph:
cram=rules.merged_fire_bam.output.cram,
crai=rules.merged_fire_bam.output.crai,
output:
- bg=temp("temp/{sm}/coverage/{sm}.bed.gz"),
- tbi=temp("temp/{sm}/coverage/{sm}.bed.gz.tbi"),
+ bg=temp("temp/{sm}/coverage/{sm}-{v}.bed.gz"),
+ tbi=temp("temp/{sm}/coverage/{sm}-{v}.bed.gz.tbi"),
threads: 16
shadow:
"minimal"
@@ -30,16 +30,16 @@ rule coverage:
input:
bg=rules.genome_bedgraph.output.bg,
output:
- cov="results/{sm}/additional-outputs/coverage/{sm}-median-coverage.txt",
- minimum="results/{sm}/additional-outputs/coverage/{sm}-minimum-coverage.txt",
- maximum="results/{sm}/additional-outputs/coverage/{sm}-maximum-coverage.txt",
+ cov="results/{sm}/additional-outputs/coverage/{sm}-{v}-median-coverage.txt",
+ minimum="results/{sm}/additional-outputs/coverage/{sm}-{v}-minimum-coverage.txt",
+ maximum="results/{sm}/additional-outputs/coverage/{sm}-{v}-maximum-coverage.txt",
conda:
"../envs/python.yaml"
threads: 1
resources:
mem_mb=64 * 1024,
benchmark:
- "results/{sm}/additional-outputs/benchmarks/coverage/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/coverage/{sm}-{v}.txt"
params:
coverage_within_n_sd=COVERAGE_WITHIN_N_SD,
min_coverage=MIN_COVERAGE,
@@ -56,7 +56,7 @@ rule fiber_locations_chromosome:
cram=rules.merged_fire_bam.output.cram,
crai=rules.merged_fire_bam.output.crai,
output:
- bed=temp("temp/{sm}/coverage/{chrom}.fiber-locations.bed.gz"),
+ bed=temp("temp/{sm}/coverage/{v}-{chrom}.fiber-locations.bed.gz"),
threads: 8
conda:
DEFAULT_ENV
@@ -83,11 +83,13 @@ rule fiber_locations:
minimum=rules.coverage.output.minimum,
maximum=rules.coverage.output.maximum,
output:
- bed=temp("temp/{sm}/coverage/fiber-locations.bed.gz"),
- bed_tbi=temp("temp/{sm}/coverage/fiber-locations.bed.gz.tbi"),
- filtered=temp("temp/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz"),
+ bed=temp("temp/{sm}/coverage/{v}-fiber-locations.bed.gz"),
+ bed_tbi=temp("temp/{sm}/coverage/{v}-fiber-locations.bed.gz.tbi"),
+ filtered=temp(
+ "temp/{sm}/coverage/filtered-for-coverage/{v}-fiber-locations.bed.gz"
+ ),
filtered_tbi=temp(
- "temp/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz.tbi"
+ "temp/{sm}/coverage/filtered-for-coverage/{v}-fiber-locations.bed.gz.tbi"
),
threads: 4
conda:
@@ -119,7 +121,7 @@ rule exclude_from_shuffle:
filtered=rules.fiber_locations.output.filtered,
fai=ancient(FAI),
output:
- bed="results/{sm}/additional-outputs/coverage/exclude-from-shuffles.bed.gz",
+ bed="results/{sm}/additional-outputs/coverage/{v}-exclude-from-shuffles.bed.gz",
threads: 4
conda:
DEFAULT_ENV
@@ -147,9 +149,9 @@ rule unreliable_coverage_regions:
maximum=rules.coverage.output.maximum,
fai=ancient(FAI),
output:
- bed="results/{sm}/additional-outputs/coverage/unreliable-coverage-regions.bed.gz",
- bed_tbi="results/{sm}/additional-outputs/coverage/unreliable-coverage-regions.bed.gz.tbi",
- bb="results/{sm}/trackHub/bb/unreliable-coverage-regions.bb",
+ bed="results/{sm}/additional-outputs/coverage/{v}-unreliable-coverage-regions.bed.gz",
+ bed_tbi="results/{sm}/additional-outputs/coverage/{v}-unreliable-coverage-regions.bed.gz.tbi",
+ bb="results/{sm}/trackHub-{v}/bb/unreliable-coverage-regions.bb",
threads: 4
params:
min_len=MIN_UNRELIABLE_COVERAGE_LEN,
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 4a053e534..966e42299 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -9,8 +9,8 @@ rule decorate_fibers_chromosome:
cram=rules.merged_fire_bam.output.cram,
crai=rules.merged_fire_bam.output.crai,
output:
- bed=temp("temp/{sm}/decorate/{chrom}.bed.gz"),
- decorated=temp("temp/{sm}/decorate/{chrom}.dec.bed.gz"),
+ bed=temp("temp/{sm}/decorate/{v}-{chrom}.bed.gz"),
+ decorated=temp("temp/{sm}/decorate/{v}-{chrom}.dec.bed.gz"),
threads: 8
resources:
mem_mb=get_large_mem_mb,
@@ -36,9 +36,9 @@ rule decorate_fibers_1:
fai=ancient(FAI),
output:
#bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"),
- bb="results/{sm}/trackHub/bb/fire-fibers.bb",
+ bb="results/{sm}/trackHub-{v}/bb/fire-fibers.bb",
benchmark:
- "results/{sm}/additional-outputs/benchmarks/decorate_fibers_1/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/decorate_fibers_1/{sm}-{v}.txt"
threads: 8
resources:
runtime=240,
@@ -72,10 +72,10 @@ rule decorate_fibers_2:
),
fai=ancient(FAI),
output:
- bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb",
- #bed=temp("temp/{sm}/trackHub/bb/fire-fiber-decorators.bed.gz"),
+ bb="results/{sm}/trackHub-{v}/bb/fire-fiber-decorators.bb",
+ #bed=temp("temp/{sm}/trackHub-{v}/bb/fire-fiber-decorators.bed.gz"),
benchmark:
- "results/{sm}/additional-outputs/benchmarks/decorate_fibers_2/{sm}.txt"
+ "results/{sm}/additional-outputs/benchmarks/decorate_fibers_2/{sm}-{v}.txt"
threads: 8
resources:
runtime=60 * 16,
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index 55f0e513c..ca9537f33 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -5,7 +5,7 @@ rule filtered_and_shuffled_fiber_locations_chromosome:
exclude=rules.exclude_from_shuffle.output.bed,
fai=ancient(FAI),
output:
- shuffled=temp("temp/{sm}/shuffle/{chrom}.fiber-locations-shuffled.bed.gz"),
+ shuffled=temp("temp/{sm}/shuffle/{v}-{chrom}.fiber-locations-shuffled.bed.gz"),
threads: 4
conda:
DEFAULT_ENV
@@ -28,7 +28,7 @@ rule shuffled_pileup_chromosome:
cram=rules.merged_fire_bam.output.cram,
shuffled=rules.filtered_and_shuffled_fiber_locations_chromosome.output.shuffled,
output:
- bed=temp("temp/{sm}/shuffle/{chrom}.pileup.bed.gz"),
+ bed=temp("temp/{sm}/shuffle/{v}-{chrom}.pileup.bed.gz"),
threads: 4
conda:
DEFAULT_ENV
@@ -50,8 +50,8 @@ rule shuffled_pileup:
allow_missing=True,
),
output:
- bed=temp("temp/{sm}/shuffle/shuffled-pileup.bed.gz"),
- tbi=temp("temp/{sm}/shuffle/shuffled-pileup.bed.gz.tbi"),
+ bed=temp("temp/{sm}/shuffle/{v}-shuffled-pileup.bed.gz"),
+ tbi=temp("temp/{sm}/shuffle/{v}-shuffled-pileup.bed.gz.tbi"),
threads: 4
conda:
DEFAULT_ENV
@@ -71,7 +71,7 @@ rule fdr_table:
minimum=rules.coverage.output.minimum,
maximum=rules.coverage.output.maximum,
output:
- tbl="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-score-to-fdr.tbl",
+ tbl="results/{sm}/additional-outputs/fire-peaks/{sm}-{v}-fire-score-to-fdr.tbl",
conda:
"../envs/python.yaml"
params:
@@ -95,7 +95,7 @@ rule pileup_chromosome:
input:
bam=rules.merged_fire_bam.output.cram,
output:
- bed=temp("temp/{sm}/{chrom}.pileup.bed.gz"),
+ bed=temp("temp/{sm}/{v}-{chrom}.pileup.bed.gz"),
threads: 12
conda:
DEFAULT_ENV
@@ -114,7 +114,7 @@ rule fdr_track_chromosome:
pileup=rules.pileup_chromosome.output.bed,
fdr_tbl=rules.fdr_table.output.tbl,
output:
- bed=temp("temp/{sm}/fire-peaks/{chrom}-FDR.track.bed"),
+ bed=temp("temp/{sm}/fire-peaks/{v}-{chrom}-FDR.track.bed"),
threads: 8
conda:
"../envs/python.yaml"
@@ -138,9 +138,9 @@ rule pileup:
allow_missing=True,
),
output:
- fofn=temp("temp/{sm}/fire/fire-pileup.fofn"),
- bed="results/{sm}/{sm}-fire-pileup.bed.gz",
- tbi="results/{sm}/{sm}-fire-pileup.bed.gz.tbi",
+ fofn=temp("temp/{sm}/fire/fire-{v}-pileup.fofn"),
+ bed="results/{sm}/{sm}-fire-{v}-pileup.bed.gz",
+ tbi="results/{sm}/{sm}-fire-{v}-pileup.bed.gz.tbi",
threads: 8
conda:
DEFAULT_ENV
@@ -172,7 +172,7 @@ rule helper_fdr_peaks_by_fire_elements:
fire=rules.fire_sites.output.bed,
fire_tbi=rules.fire_sites_index.output.tbi,
output:
- bed=temp("temp/{sm}/fire-peaks/{chrom}-fire-peaks.bed.gz"),
+ bed=temp("temp/{sm}/fire-peaks/{v}-{chrom}-fire-peaks.bed.gz"),
threads: 2
conda:
DEFAULT_ENV
@@ -222,7 +222,7 @@ rule fdr_peaks_by_fire_elements_chromosome:
minimum=rules.coverage.output.minimum,
maximum=rules.coverage.output.maximum,
output:
- bed=temp("temp/{sm}/fire-peaks/grouped-{chrom}-fire-peaks.bed.gz"),
+ bed=temp("temp/{sm}/fire-peaks/{v}-grouped-{chrom}-fire-peaks.bed.gz"),
threads: 8
conda:
"../envs/python.yaml"
@@ -249,9 +249,9 @@ rule fire_peaks:
allow_missing=True,
),
output:
- fofn=temp("temp/{sm}/fire-peaks/{sm}-fire-peaks.fofn"),
- bed="results/{sm}/{sm}-fire-peaks.bed.gz",
- tbi="results/{sm}/{sm}-fire-peaks.bed.gz.tbi",
+ fofn=temp("temp/{sm}/fire-peaks/{sm}-fire-{v}-peaks.fofn"),
+ bed="results/{sm}/{sm}-fire-{v}-peaks.bed.gz",
+ tbi="results/{sm}/{sm}-fire-{v}-peaks.bed.gz.tbi",
threads: 8
conda:
DEFAULT_ENV
@@ -279,9 +279,9 @@ rule wide_fire_peaks:
track=rules.pileup.output.bed,
fai=ancient(FAI),
output:
- bed="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-wide-peaks.bed.gz",
- tbi="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-wide-peaks.bed.gz.tbi",
- bb="results/{sm}/trackHub/bb/fire-wide-peaks.bb",
+ bed="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz",
+ tbi="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz.tbi",
+ bb="results/{sm}/trackHub-{v}/bb/fire-wide-peaks.bb",
conda:
DEFAULT_ENV
threads: 4
@@ -318,10 +318,10 @@ rule one_percent_fire_peaks:
bed=rules.fire_peaks.output.bed,
track=rules.pileup.output.bed,
output:
- bed="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz",
- tbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-peaks.bed.gz.tbi",
- wide="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz",
- wtbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-01-fire-wide-peaks.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz",
+ tbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz.tbi",
+ wide="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz",
+ wtbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz.tbi",
threads: 4
conda:
DEFAULT_ENV
@@ -353,7 +353,7 @@ rule peaks_vs_percent:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/additional-outputs/figures/{sm}-peaks-vs-percent.pdf",
+ "results/{sm}/additional-outputs/figures/{sm}-fire-{v}-peaks-vs-percent.pdf",
category="Peak calls",
),
threads: 8
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index aa4971edc..5b3ff6b52 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -31,8 +31,8 @@ rule fires_in_peaks:
exclude=rules.unreliable_coverage_regions.output.bed,
peaks=rules.fire_peaks.output.bed,
output:
- tmp=temp("temp/{sm}/tmp.FIREs-in-peaks.bed"),
- txt="results/{sm}/additional-outputs/fire-peaks/{sm}-fires-in-peaks.txt",
+ tmp=temp("temp/{sm}/tmp.FIREs-{v}-in-peaks.bed"),
+ txt="results/{sm}/additional-outputs/fire-peaks/{sm}-{v}-fires-in-peaks.txt",
threads: 8
conda:
DEFAULT_ENV
@@ -54,7 +54,7 @@ rule ft_qc:
input:
cram=rules.merged_fire_bam.output.cram,
output:
- tbl="results/{sm}/{sm}-fire-qc.tbl.gz",
+ tbl="results/{sm}/{sm}-fire-{v}-qc.tbl.gz",
conda:
DEFAULT_ENV
threads: 16
@@ -69,15 +69,15 @@ rule hap_differences:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/additional-outputs/figures/{sm}-hap1-vs-hap2.pdf",
+ "results/{sm}/additional-outputs/figures/{sm}-{v}-hap1-vs-hap2.pdf",
category="Haplotype selectivity",
),
fig2=report(
- "results/{sm}/additional-outputs/figures/{sm}-hap1-vs-hap2-volcano.pdf",
+ "results/{sm}/additional-outputs/figures/{sm}-{v}-hap1-vs-hap2-volcano.pdf",
category="Haplotype selectivity",
),
- bed="results/{sm}/{sm}-hap-differences.bed.gz",
- bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9"),
+ bed="results/{sm}/{sm}-fire-{v}-hap-differences.bed.gz",
+ bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE-{v}.hap.differences.bed9"),
threads: 8
conda:
"../envs/R.yaml"
diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk
index f20b153eb..b67902249 100644
--- a/workflow/rules/track-hub.smk
+++ b/workflow/rules/track-hub.smk
@@ -3,8 +3,8 @@ rule percent_accessible:
bed=rules.pileup.output.bed,
fai=ancient(FAI),
output:
- tmp=temp("temp/{sm}/{hp}/percent.accessible.bed"),
- bw="results/{sm}/trackHub/bw/{hp}.percent.accessible.bw",
+ tmp=temp("temp/{sm}/{hp}/{v}-percent.accessible.bed"),
+ bw="results/{sm}/trackHub-{v}/bw/{hp}.percent.accessible.bw",
threads: 4
conda:
DEFAULT_ENV
@@ -42,7 +42,7 @@ rule element_coverages_bw:
bed=rules.pileup.output.bed,
fai=ancient(FAI),
output:
- bw="results/{sm}/trackHub/bw/{hp}.{el_type}.coverage.bw",
+ bw="results/{sm}/trackHub-{v}/bw/{hp}.{el_type}.coverage.bw",
conda:
DEFAULT_ENV
params:
@@ -64,7 +64,7 @@ rule fdr_track_to_bw:
bed=rules.pileup.output.bed,
fai=ancient(FAI),
output:
- bw="results/{sm}/trackHub/bw/{col}.bw",
+ bw="results/{sm}/trackHub-{v}/bw/{col}.bw",
threads: 4
conda:
DEFAULT_ENV
@@ -85,7 +85,7 @@ rule fire_peaks_bb:
bed=rules.fire_peaks.output.bed,
fai=ancient(FAI),
output:
- bb="results/{sm}/trackHub/bb/fire-peaks.bb",
+ bb="results/{sm}/trackHub-{v}/bb/fire-peaks.bb",
threads: 4
conda:
DEFAULT_ENV
@@ -108,7 +108,7 @@ rule hap_differences_track:
bed9=rules.hap_differences.output.bed9,
fai=ancient(FAI),
output:
- bb="results/{sm}/trackHub/bb/hap_differences.bb",
+ bb="results/{sm}/trackHub-{v}/bb/hap_differences.bb",
threads: 4
resources:
mem_mb=get_mem_mb,
@@ -133,8 +133,8 @@ rule trackhub:
input:
cov=rules.coverage.output.cov,
output:
- hub="results/{sm}/trackHub/hub.txt",
- description="results/{sm}/trackHub/fire-description.html",
+ hub="results/{sm}/trackHub-{v}/hub.txt",
+ description="results/{sm}/trackHub-{v}/fire-description.html",
resources:
load=get_load,
threads: 4
@@ -147,7 +147,7 @@ rule trackhub:
shell:
"""
python {params.script} -v 2 \
- --trackhub-dir results/{wildcards.sm}/trackHub \
+ --trackhub-dir results/{wildcards.sm}/trackHub-{wildcards.v} \
--reference {params.ref} \
--sample {wildcards.sm} \
--average-coverage $(cat {input.cov})
From a12d1ab35c26f0666646069d0f821db1423d0830 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Sat, 23 Nov 2024 12:48:14 -0800
Subject: [PATCH 121/145] add pixi version to outputs
---
workflow/rules/apply-model.smk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 5b56bf41c..a290ced36 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -34,8 +34,8 @@ rule merged_fire_bam:
fai=ancient(FAI),
bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True),
output:
- cram="results/{sm}/{sm}-fire-{v}-no-seq-qual.cram",
- crai="results/{sm}/{sm}-fire-{v}-no-seq-qual.cram.crai",
+ cram="results/{sm}/{sm}-fire-{v}-filtered.cram",
+ crai="results/{sm}/{sm}-fire-{v}-filtered.cram.crai",
threads: 16
resources:
mem_mb=16 * 1024,
From b68e0208221a6af31bbb6d2fe886b9d9a937cd92 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Sat, 23 Nov 2024 12:50:39 -0800
Subject: [PATCH 122/145] add pixi version to outputs
---
pixi.toml | 1 +
1 file changed, 1 insertion(+)
diff --git a/pixi.toml b/pixi.toml
index 286a39d28..8375db8e9 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -32,6 +32,7 @@ test = { cmd = [
"$PIXI_PROJECT_ROOT/workflow/Snakefile",
"--configfile",
"test.yaml",
+ "-k",
], depends_on = [
"test-data",
], clean-env = true }
From b3284c4b460f502e5d1761a25d6ba13ef7e105bb Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 25 Nov 2024 14:05:08 -0800
Subject: [PATCH 123/145] add pixi version to outputs
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 82a9f9efe..69d2449b9 100644
--- a/README.md
+++ b/README.md
@@ -7,4 +7,4 @@ A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs)
## Installation and Usage
-See the [docs](https://fiberseq.github.io/fire/fire.html) for detailed installation and usage instructions.ß
+See the [docs](https://fiberseq.github.io/fire/fire.html) for detailed installation and usage instructions.
From eadfa4f53dd9284daee5e01897a202c9f8c0de00 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Tue, 26 Nov 2024 09:54:32 -0800
Subject: [PATCH 124/145] add pixi version to outputs
---
fire | 47 ------------------------------
workflow/rules/apply-model.smk | 4 +--
workflow/rules/coverages.smk | 14 ++++-----
workflow/rules/decorated-reads.smk | 4 +--
workflow/rules/fire-peaks.smk | 16 +++++-----
workflow/rules/stats.smk | 6 ++--
6 files changed, 22 insertions(+), 69 deletions(-)
delete mode 100755 fire
diff --git a/fire b/fire
deleted file mode 100755
index e5a961166..000000000
--- a/fire
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env bash
-
-# check for conda location
-if [[ -z "${SNAKEMAKE_CONDA_PREFIX}" ]]; then
- printf "Warning:\n\tSNAKEMAKE_CONDA_PREFIX is not set. Please set this env variable to the location of your group's shared snakemke conda enviroments.\n\tSee --conda-prefix at https://snakemake.readthedocs.io/en/stable/executing/cli.html#conda for more information.\n\n" 1>&2
-fi
-
-set -euo pipefail
-SRC_DIR=$(
- cd "$(dirname "${BASH_SOURCE[0]}")"
- pwd -P
-)
-
-ARGS=$(echo "$@")
-
-# check for required arguments
-has_config=false
-while test $# -gt 0; do
- case "$1" in
- --configfile)
- has_config=true
- ;;
- esac
- shift
-done
-
-if [[ "${has_config}" == false ]]; then
- printf "Error:\n\t--configfile argument required.\n"
- exit 1
-fi
-
-# check for executables
-for x in snakemake; do
- if [[ ! $(type -P "${x}") ]]; then
- echo "Error: ${x} not found in PATH, but it is required for FIRE."
- exit 1
- fi
-done
-
-# n cpus
-CPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
-
-#echo "Arguments passed to snakemake: ${ARGS}"
-snakemake \
- -s "${SRC_DIR}/workflow/Snakefile" \
- --local-cores "${CPUS}" \
- ${ARGS}
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index a290ced36..9a5cf66f2 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -43,7 +43,7 @@ rule merged_fire_bam:
conda:
DEFAULT_ENV
benchmark:
- "results/{sm}/additional-outputs/benchmarks/{sm}-{v}-merged-fire-bam.txt"
+ "results/{sm}/additional-outputs-{v}/benchmarks/{sm}-merged-fire-bam.txt"
shell:
"""
samtools merge -@ {threads} -u {input.bams} -o - \
@@ -90,7 +90,7 @@ rule fire_sites:
rules.fire_sites_chrom.output.bed, chrom=get_chroms(), allow_missing=True
),
output:
- bed="results/{sm}/additional-outputs/fire-peaks/{sm}-{v}-fire-elements.bed.gz",
+ bed="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fire-elements.bed.gz",
threads: 8
conda:
DEFAULT_ENV
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index d09ca4cd4..61297085b 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -30,16 +30,16 @@ rule coverage:
input:
bg=rules.genome_bedgraph.output.bg,
output:
- cov="results/{sm}/additional-outputs/coverage/{sm}-{v}-median-coverage.txt",
- minimum="results/{sm}/additional-outputs/coverage/{sm}-{v}-minimum-coverage.txt",
- maximum="results/{sm}/additional-outputs/coverage/{sm}-{v}-maximum-coverage.txt",
+ cov="results/{sm}/additional-outputs-{v}/coverage/{sm}-{v}-median-coverage.txt",
+ minimum="results/{sm}/additional-outputs-{v}/coverage/{sm}-{v}-minimum-coverage.txt",
+ maximum="results/{sm}/additional-outputs-{v}/coverage/{sm}-{v}-maximum-coverage.txt",
conda:
"../envs/python.yaml"
threads: 1
resources:
mem_mb=64 * 1024,
benchmark:
- "results/{sm}/additional-outputs/benchmarks/coverage/{sm}-{v}.txt"
+ "results/{sm}/additional-outputs-{v}/benchmarks/coverage/{sm}.txt"
params:
coverage_within_n_sd=COVERAGE_WITHIN_N_SD,
min_coverage=MIN_COVERAGE,
@@ -121,7 +121,7 @@ rule exclude_from_shuffle:
filtered=rules.fiber_locations.output.filtered,
fai=ancient(FAI),
output:
- bed="results/{sm}/additional-outputs/coverage/{v}-exclude-from-shuffles.bed.gz",
+ bed="results/{sm}/additional-outputs-{v}/coverage/exclude-from-shuffles.bed.gz",
threads: 4
conda:
DEFAULT_ENV
@@ -149,8 +149,8 @@ rule unreliable_coverage_regions:
maximum=rules.coverage.output.maximum,
fai=ancient(FAI),
output:
- bed="results/{sm}/additional-outputs/coverage/{v}-unreliable-coverage-regions.bed.gz",
- bed_tbi="results/{sm}/additional-outputs/coverage/{v}-unreliable-coverage-regions.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs-{v}/coverage/unreliable-coverage-regions.bed.gz",
+ bed_tbi="results/{sm}/additional-outputs-{v}/coverage/unreliable-coverage-regions.bed.gz.tbi",
bb="results/{sm}/trackHub-{v}/bb/unreliable-coverage-regions.bb",
threads: 4
params:
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 966e42299..1a991f39b 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -38,7 +38,7 @@ rule decorate_fibers_1:
#bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"),
bb="results/{sm}/trackHub-{v}/bb/fire-fibers.bb",
benchmark:
- "results/{sm}/additional-outputs/benchmarks/decorate_fibers_1/{sm}-{v}.txt"
+ "results/{sm}/additional-outputs-{v}/benchmarks/decorate_fibers_1/{sm}.txt"
threads: 8
resources:
runtime=240,
@@ -75,7 +75,7 @@ rule decorate_fibers_2:
bb="results/{sm}/trackHub-{v}/bb/fire-fiber-decorators.bb",
#bed=temp("temp/{sm}/trackHub-{v}/bb/fire-fiber-decorators.bed.gz"),
benchmark:
- "results/{sm}/additional-outputs/benchmarks/decorate_fibers_2/{sm}-{v}.txt"
+ "results/{sm}/additional-outputs-{v}/benchmarks/decorate_fibers_2/{sm}.txt"
threads: 8
resources:
runtime=60 * 16,
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index ca9537f33..072dbfa64 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -71,7 +71,7 @@ rule fdr_table:
minimum=rules.coverage.output.minimum,
maximum=rules.coverage.output.maximum,
output:
- tbl="results/{sm}/additional-outputs/fire-peaks/{sm}-{v}-fire-score-to-fdr.tbl",
+ tbl="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fire-score-to-fdr.tbl",
conda:
"../envs/python.yaml"
params:
@@ -279,8 +279,8 @@ rule wide_fire_peaks:
track=rules.pileup.output.bed,
fai=ancient(FAI),
output:
- bed="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz",
- tbi="results/{sm}/additional-outputs/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz",
+ tbi="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz.tbi",
bb="results/{sm}/trackHub-{v}/bb/fire-wide-peaks.bb",
conda:
DEFAULT_ENV
@@ -318,10 +318,10 @@ rule one_percent_fire_peaks:
bed=rules.fire_peaks.output.bed,
track=rules.pileup.output.bed,
output:
- bed="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz",
- tbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz.tbi",
- wide="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz",
- wtbi="results/{sm}/additional-outputs/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz.tbi",
+ bed="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz",
+ tbi="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz.tbi",
+ wide="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz",
+ wtbi="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz.tbi",
threads: 4
conda:
DEFAULT_ENV
@@ -353,7 +353,7 @@ rule peaks_vs_percent:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/additional-outputs/figures/{sm}-fire-{v}-peaks-vs-percent.pdf",
+ "results/{sm}/additional-outputs-{v}/figures/{sm}-fire-{v}-peaks-vs-percent.pdf",
category="Peak calls",
),
threads: 8
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index 5b3ff6b52..c4f4488d0 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -32,7 +32,7 @@ rule fires_in_peaks:
peaks=rules.fire_peaks.output.bed,
output:
tmp=temp("temp/{sm}/tmp.FIREs-{v}-in-peaks.bed"),
- txt="results/{sm}/additional-outputs/fire-peaks/{sm}-{v}-fires-in-peaks.txt",
+ txt="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fires-in-peaks.txt",
threads: 8
conda:
DEFAULT_ENV
@@ -69,11 +69,11 @@ rule hap_differences:
bed=rules.fire_peaks.output.bed,
output:
fig1=report(
- "results/{sm}/additional-outputs/figures/{sm}-{v}-hap1-vs-hap2.pdf",
+ "results/{sm}/additional-outputs-{v}/figures/{sm}-{v}-hap1-vs-hap2.pdf",
category="Haplotype selectivity",
),
fig2=report(
- "results/{sm}/additional-outputs/figures/{sm}-{v}-hap1-vs-hap2-volcano.pdf",
+ "results/{sm}/additional-outputs-{v}/figures/{sm}-{v}-hap1-vs-hap2-volcano.pdf",
category="Haplotype selectivity",
),
bed="results/{sm}/{sm}-fire-{v}-hap-differences.bed.gz",
From 41e944ccde9bdd66037d436a6d475d38a1086434 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Tue, 26 Nov 2024 09:55:12 -0800
Subject: [PATCH 125/145] gmt
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index 71c23acca..78e4c8836 100644
--- a/.gitignore
+++ b/.gitignore
@@ -178,3 +178,4 @@ scATAC/
test/
test-data/
bigtools-test/
+fire-test-data/
From ac184e33d14e3f0643039e7e144c396b4aab8dfa Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Tue, 26 Nov 2024 10:42:17 -0800
Subject: [PATCH 126/145] gmt
---
CHANGELOG.md | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 CHANGELOG.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 000000000..53163fb65
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+# v0.1.0
+
+First major release of the FIRE pipeline. This release includes a major refactor to reduce the computation by increased use of ft, change output file names to include the fire version among other changes, and finally a new launching method for the pipeline that uses pixi. Results are very similar to v0.0.7 of the pipeline; however, there are minor differences in the peak calls and the output names.
From 174aea8eabea7390c306a877a4be04ba4497efc5 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Tue, 26 Nov 2024 14:50:56 -0800
Subject: [PATCH 127/145] gmt
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 53163fb65..303530a57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,3 @@
# v0.1.0
-First major release of the FIRE pipeline. This release includes a major refactor to reduce the computation by increased use of ft, change output file names to include the fire version among other changes, and finally a new launching method for the pipeline that uses pixi. Results are very similar to v0.0.7 of the pipeline; however, there are minor differences in the peak calls and the output names.
+First major release of the FIRE pipeline. This release includes a refactor to reduce the computation by increased use of ft, changes to the output file names to include the fire version among other things, and finally a new launching method for the pipeline that uses pixi. Results are very similar to v0.0.7 of the pipeline; however, there are minor differences in the peak calls and the output names.
From 73a1b36dde25d852ca7a909a25b292d9a5690f42 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Tue, 26 Nov 2024 14:54:50 -0800
Subject: [PATCH 128/145] gmt
---
pixi.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pixi.toml b/pixi.toml
index 8375db8e9..0b785df93 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -42,10 +42,10 @@ fire = { cmd = "cd $INIT_CWD && snakemake -s $PIXI_PROJECT_ROOT/workflow/Snakefi
[dependencies]
conda = "*"
snakemake = "==8.21"
+snakemake-executor-plugin-slurm = ">=0.11.2"
snakefmt = "*"
ruff = "*"
awscli = "2.22"
taplo = "*"
[pypi-dependencies]
-snakemake-executor-plugin-slurm = "*"
From 17ee20550822626247e94e8c9d1c526991064f29 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Tue, 26 Nov 2024 15:12:33 -0800
Subject: [PATCH 129/145] fmt
---
README.md | 2 +-
pixi.lock | 79 ++++++++++++++++++++++++-------------------------------
2 files changed, 35 insertions(+), 46 deletions(-)
diff --git a/README.md b/README.md
index 69d2449b9..234d1166d 100644
--- a/README.md
+++ b/README.md
@@ -7,4 +7,4 @@ A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs)
## Installation and Usage
-See the [docs](https://fiberseq.github.io/fire/fire.html) for detailed installation and usage instructions.
+See the [docs](https://fiberseq.github.io/fire/run.html) for detailed installation and usage instructions.
diff --git a/pixi.lock b/pixi.lock
index 6d7466a0f..d798a10b3 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -4,8 +4,6 @@ environments:
channels:
- url: https://conda.anaconda.org/conda-forge/
- url: https://conda.anaconda.org/bioconda/
- indexes:
- - https://pypi.org/simple
packages:
linux-64:
- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
@@ -174,6 +172,8 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-0.11.2-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-jobstep-0.2.1-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2
@@ -207,10 +207,6 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda
- - pypi: https://files.pythonhosted.org/packages/f8/0b/8289366ee599f9324af7010a476efcd85fd51c151ed0c300f2e9dce18c5d/snakemake_executor_plugin_slurm-0.11.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/46/95a80edc6196f01e20c35a272e2d801b48fd4c9a67aed3e76fb5e2b78603/snakemake_executor_plugin_slurm_jobstep-0.2.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/fe/c318657e6a4b8ab5b3eafa07cd1c360a732c6b37ba6085f3c82339ebbbdc/snakemake_interface_common-1.17.4-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/7c/84/0b7602c54d97b2cd3b40fc4c80633d42afcf69e441d9f25c928376051be8/snakemake_interface_executor_plugins-9.3.2-py3-none-any.whl
osx-64:
- conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
@@ -366,6 +362,8 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-0.11.2-pyhdfd78af_0.tar.bz2
+ - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-jobstep-0.2.1-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2
- conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2
@@ -399,10 +397,6 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h7122b0e_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda
- - pypi: https://files.pythonhosted.org/packages/f8/0b/8289366ee599f9324af7010a476efcd85fd51c151ed0c300f2e9dce18c5d/snakemake_executor_plugin_slurm-0.11.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/46/95a80edc6196f01e20c35a272e2d801b48fd4c9a67aed3e76fb5e2b78603/snakemake_executor_plugin_slurm_jobstep-0.2.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/fe/c318657e6a4b8ab5b3eafa07cd1c360a732c6b37ba6085f3c82339ebbbdc/snakemake_interface_common-1.17.4-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/7c/84/0b7602c54d97b2cd3b40fc4c80633d42afcf69e441d9f25c928376051be8/snakemake_interface_executor_plugins-9.3.2-py3-none-any.whl
packages:
- kind: conda
name: _libgcc_mutex
@@ -5097,35 +5091,40 @@ packages:
license_family: MIT
size: 9382
timestamp: 1728717749418
-- kind: pypi
+- kind: conda
name: snakemake-executor-plugin-slurm
version: 0.11.2
- url: https://files.pythonhosted.org/packages/f8/0b/8289366ee599f9324af7010a476efcd85fd51c151ed0c300f2e9dce18c5d/snakemake_executor_plugin_slurm-0.11.2-py3-none-any.whl
- sha256: 265804d1df04ec3859be841b8f540b9cb7bdf6249c991529bddcb9d5b8fec8ad
- requires_dist:
- - snakemake-executor-plugin-slurm-jobstep>=0.2.0,<0.3.0
- - snakemake-interface-common>=1.13.0,<2.0.0
- - snakemake-interface-executor-plugins>=9.1.1,<10.0.0
- - throttler>=1.2.2,<2.0.0
- requires_python: '>=3.11,<4.0'
-- kind: pypi
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-0.11.2-pyhdfd78af_0.tar.bz2
+ sha256: 541ba06c2ed1d0193997f1278dfff4da7e972412b20a517e9d98ae763ce2c91e
+ md5: f679cbc153a82a3e50027074da5ea55f
+ depends:
+ - python >=3.11.0,<4.0.0
+ - snakemake-executor-plugin-slurm-jobstep >=0.2.0,<0.3.0
+ - snakemake-interface-common >=1.13.0,<2.0.0
+ - snakemake-interface-executor-plugins >=9.1.1,<10.0.0
+ - throttler >=1.2.2,<2.0.0
+ license: MIT
+ size: 17275
+ timestamp: 1730975212591
+- kind: conda
name: snakemake-executor-plugin-slurm-jobstep
version: 0.2.1
- url: https://files.pythonhosted.org/packages/78/46/95a80edc6196f01e20c35a272e2d801b48fd4c9a67aed3e76fb5e2b78603/snakemake_executor_plugin_slurm_jobstep-0.2.1-py3-none-any.whl
- sha256: 097a51c8d2d1d40bb5aa4a845bb8c75ca03113d7197c67f047640319661725b3
- requires_dist:
- - snakemake-interface-common>=1.13.0,<2.0.0
- - snakemake-interface-executor-plugins>=9.0.0,<10.0.0
- requires_python: '>=3.11,<4.0'
-- kind: pypi
- name: snakemake-interface-common
- version: 1.17.4
- url: https://files.pythonhosted.org/packages/3d/fe/c318657e6a4b8ab5b3eafa07cd1c360a732c6b37ba6085f3c82339ebbbdc/snakemake_interface_common-1.17.4-py3-none-any.whl
- sha256: 1d757cce0300a73d48b906d1ade38706853169320a5d27b963869888d130c354
- requires_dist:
- - configargparse>=1.7,<2.0
- - argparse-dataclass>=2.0.0,<3.0.0
- requires_python: '>=3.8,<4.0'
+ build: pyhdfd78af_0
+ subdir: noarch
+ noarch: python
+ url: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-jobstep-0.2.1-pyhdfd78af_0.tar.bz2
+ sha256: 0e0baabe160ef45e962fc9a95474a77c7ec0851aa18a41a132354a455b60a6fb
+ md5: 7daf955f3ed7eee4b5fe2e7653af877e
+ depends:
+ - python >=3.11.0,<4.0.0
+ - snakemake-interface-common >=1.13.0,<2.0.0
+ - snakemake-interface-executor-plugins >=9.0.0,<10.0.0
+ license: MIT
+ size: 12751
+ timestamp: 1712852914869
- kind: conda
name: snakemake-interface-common
version: 1.17.4
@@ -5143,16 +5142,6 @@ packages:
license_family: MIT
size: 18489
timestamp: 1728055352534
-- kind: pypi
- name: snakemake-interface-executor-plugins
- version: 9.3.2
- url: https://files.pythonhosted.org/packages/7c/84/0b7602c54d97b2cd3b40fc4c80633d42afcf69e441d9f25c928376051be8/snakemake_interface_executor_plugins-9.3.2-py3-none-any.whl
- sha256: 9c52c4b0f74b9056ebbb1b6229459281fef002b678baac00aee3b3ef36e92ba5
- requires_dist:
- - argparse-dataclass>=2.0.0,<3.0.0
- - snakemake-interface-common>=1.17.4,<2.0.0
- - throttler>=1.2.2,<2.0.0
- requires_python: '>=3.11,<4.0'
- kind: conda
name: snakemake-interface-executor-plugins
version: 9.3.2
From 05e45e75421bb8d20591afd659f190016936f9e5 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 10:20:14 -0800
Subject: [PATCH 130/145] fmt
---
pixi.toml | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/pixi.toml b/pixi.toml
index 0b785df93..8b017bf87 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -37,7 +37,24 @@ test = { cmd = [
"test-data",
], clean-env = true }
-fire = { cmd = "cd $INIT_CWD && snakemake -s $PIXI_PROJECT_ROOT/workflow/Snakefile" }
+fire = { cmd = [
+ "cd",
+ "$INIT_CWD",
+ "&&",
+ "snakemake",
+ "-s",
+ "$PIXI_PROJECT_ROOT/workflow/Snakefile",
+] }
+slurm = { cmd = [
+ "cd",
+ "$INIT_CWD",
+ "&&",
+ "snakemake",
+ "-s",
+ "$PIXI_PROJECT_ROOT/workflow/Snakefile",
+ "--profile",
+ "$PIXI_PROJECT_ROOT/profiles/slurm-executor",
+] }
[dependencies]
conda = "*"
From 1c2e964058ed9b5ada00779eb925d25275a99916 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 10:29:55 -0800
Subject: [PATCH 131/145] fmt
---
workflow/rules/apply-model.smk | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 9a5cf66f2..0da881ad1 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -6,7 +6,7 @@ rule fire:
bam=ancient(get_input_bam),
output:
bam=temp("temp/{sm}/fire/{chrom}.fire.bam"),
- threads: 8
+ threads: 6
resources:
mem_mb=8 * 1024,
params:
@@ -44,6 +44,7 @@ rule merged_fire_bam:
DEFAULT_ENV
benchmark:
"results/{sm}/additional-outputs-{v}/benchmarks/{sm}-merged-fire-bam.txt"
+ priority: 100
shell:
"""
samtools merge -@ {threads} -u {input.bams} -o - \
From db7f92fc3d07043626e14ef120fd6397d7ddc59b Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 12:09:27 -0800
Subject: [PATCH 132/145] fmt
---
workflow/rules/decorated-reads.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 1a991f39b..4dbf66c8a 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -11,7 +11,7 @@ rule decorate_fibers_chromosome:
output:
bed=temp("temp/{sm}/decorate/{v}-{chrom}.bed.gz"),
decorated=temp("temp/{sm}/decorate/{v}-{chrom}.dec.bed.gz"),
- threads: 8
+ threads: 4
resources:
mem_mb=get_large_mem_mb,
conda:
From 5342a7ee00ac7b965a721a1449bb6d776c336f41 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 12:10:27 -0800
Subject: [PATCH 133/145] fmt
---
workflow/rules/decorated-reads.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 4dbf66c8a..2ea7ac768 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -13,7 +13,7 @@ rule decorate_fibers_chromosome:
decorated=temp("temp/{sm}/decorate/{v}-{chrom}.dec.bed.gz"),
threads: 4
resources:
- mem_mb=get_large_mem_mb,
+ mem_mb=get_mem_mb,
conda:
DEFAULT_ENV
shell:
From 45a8bf86a4f71c57d300900a7e29d296ec8e05ce Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 12:13:12 -0800
Subject: [PATCH 134/145] fmt
---
workflow/rules/coverages.smk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index 61297085b..45b321da0 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -57,7 +57,7 @@ rule fiber_locations_chromosome:
crai=rules.merged_fire_bam.output.crai,
output:
bed=temp("temp/{sm}/coverage/{v}-{chrom}.fiber-locations.bed.gz"),
- threads: 8
+ threads: 4
conda:
DEFAULT_ENV
shell:
From b33b44ec8202160d8c0cb82b781cbbed457b30ea Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 12:55:48 -0800
Subject: [PATCH 135/145] fmt
---
workflow/rules/fire-peaks.smk | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index 072dbfa64..f4bd58260 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -96,7 +96,7 @@ rule pileup_chromosome:
bam=rules.merged_fire_bam.output.cram,
output:
bed=temp("temp/{sm}/{v}-{chrom}.pileup.bed.gz"),
- threads: 12
+ threads: 4
conda:
DEFAULT_ENV
shell:
@@ -115,7 +115,7 @@ rule fdr_track_chromosome:
fdr_tbl=rules.fdr_table.output.tbl,
output:
bed=temp("temp/{sm}/fire-peaks/{v}-{chrom}-FDR.track.bed"),
- threads: 8
+ threads: 4
conda:
"../envs/python.yaml"
params:
@@ -223,7 +223,7 @@ rule fdr_peaks_by_fire_elements_chromosome:
maximum=rules.coverage.output.maximum,
output:
bed=temp("temp/{sm}/fire-peaks/{v}-grouped-{chrom}-fire-peaks.bed.gz"),
- threads: 8
+ threads: 4
conda:
"../envs/python.yaml"
params:
From bb8edba189711d3c3f538550d361eade055b6fed Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 14:28:08 -0800
Subject: [PATCH 136/145] fmt
---
workflow/scripts/fdr-table.py | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index a952c7982..6fd234de3 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -7,11 +7,17 @@
import polars as pl
import numpy as np
import polars.selectors as cs
+import gzip
# from numba import njit
ROLLING_FIRE_SCORE_WINDOW_SIZE = 200
+def is_gzipped(path):
+ with open(path, "rb") as f:
+ return f.read(2) == b"\x1f\x8b"
+
+
def find_nearest(array, value):
idx = np.searchsorted(array, value, side="left")
idx[idx < 0] = 0
@@ -25,6 +31,16 @@ def find_nearest(array, value):
def read_pileup_file(infile, nrows):
# get the header from the first line of the file
header = pl.read_csv(infile, separator="\t", n_rows=1).columns
+
+ # check that there is at least two lines
+ open_infile = gzip.open if is_gzipped(infile) else open
+ with open_infile(infile) as f:
+ for i in enumerate(f):
+ if i > 1:
+ break
+ if i < 2:
+ return None
+
# add scema overrides for the score columns
schema_overrides = {}
for n in ["score", "score_H1", "score_H2", "score_shuffled"]:
@@ -167,6 +183,11 @@ def read_fdr_table(infile):
def apply_fdr_table(infile, outfile, fdr_table, nrows):
pileup = read_pileup_file(infile, nrows)
+ # there is no input data
+ if pileup is None:
+ Path(outfile).touch()
+ return
+
logging.info(f"Applying FDR table to pileup file:\n{pileup}")
# add a new column that reports the largest score in a centered window of with ROLLING_FIRE_SCORE_WINDOW_SIZE number of bases
rolling_max_score = (
From 6087cba2e357a4a5b9efaae39c61be2a33741252 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 27 Nov 2024 14:30:22 -0800
Subject: [PATCH 137/145] fmt
---
workflow/scripts/fdr-table.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 6fd234de3..8ec3f023a 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -35,7 +35,7 @@ def read_pileup_file(infile, nrows):
# check that there is at least two lines
open_infile = gzip.open if is_gzipped(infile) else open
with open_infile(infile) as f:
- for i in enumerate(f):
+ for i, _ in enumerate(f):
if i > 1:
break
if i < 2:
From 74c3b4f0cb1456cae98a52a9fb392b192fb539f2 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 2 Dec 2024 16:03:54 -0800
Subject: [PATCH 138/145] adj threads
---
workflow/rules/apply-model.smk | 4 ++--
workflow/rules/fire-peaks.smk | 6 +++---
workflow/rules/stats.smk | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index 0da881ad1..aef692b05 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -6,7 +6,7 @@ rule fire:
bam=ancient(get_input_bam),
output:
bam=temp("temp/{sm}/fire/{chrom}.fire.bam"),
- threads: 6
+ threads: 4
resources:
mem_mb=8 * 1024,
params:
@@ -92,7 +92,7 @@ rule fire_sites:
),
output:
bed="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fire-elements.bed.gz",
- threads: 8
+ threads: 1
conda:
DEFAULT_ENV
shell:
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index f4bd58260..2ea64fbba 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -141,7 +141,7 @@ rule pileup:
fofn=temp("temp/{sm}/fire/fire-{v}-pileup.fofn"),
bed="results/{sm}/{sm}-fire-{v}-pileup.bed.gz",
tbi="results/{sm}/{sm}-fire-{v}-pileup.bed.gz.tbi",
- threads: 8
+ threads: 4
conda:
DEFAULT_ENV
shell:
@@ -252,7 +252,7 @@ rule fire_peaks:
fofn=temp("temp/{sm}/fire-peaks/{sm}-fire-{v}-peaks.fofn"),
bed="results/{sm}/{sm}-fire-{v}-peaks.bed.gz",
tbi="results/{sm}/{sm}-fire-{v}-peaks.bed.gz.tbi",
- threads: 8
+ threads: 4
conda:
DEFAULT_ENV
shell:
@@ -356,7 +356,7 @@ rule peaks_vs_percent:
"results/{sm}/additional-outputs-{v}/figures/{sm}-fire-{v}-peaks-vs-percent.pdf",
category="Peak calls",
),
- threads: 8
+ threads: 4
conda:
"../envs/R.yaml"
script:
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index c4f4488d0..146cbd38e 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -9,7 +9,7 @@ rule clustering_vs_null:
tmp=temp("temp/{sm}/tmp.pre.calls.bed"),
null=temp("temp/{sm}/null.calls.bed"),
bed="results/{sm}/clustering-vs-null.bed.gz",
- threads: 8
+ threads: 4
conda:
DEFAULT_ENV
shell:
@@ -33,7 +33,7 @@ rule fires_in_peaks:
output:
tmp=temp("temp/{sm}/tmp.FIREs-{v}-in-peaks.bed"),
txt="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fires-in-peaks.txt",
- threads: 8
+ threads: 4
conda:
DEFAULT_ENV
params:
@@ -78,7 +78,7 @@ rule hap_differences:
),
bed="results/{sm}/{sm}-fire-{v}-hap-differences.bed.gz",
bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE-{v}.hap.differences.bed9"),
- threads: 8
+ threads: 4
conda:
"../envs/R.yaml"
script:
From e4e00e62b84f9ebfead3cdc3872ab8b369828087 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Sun, 8 Dec 2024 11:10:58 -0800
Subject: [PATCH 139/145] bigtools v
---
workflow/envs/env.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml
index fd49c8853..04b2f46b2 100644
--- a/workflow/envs/env.yaml
+++ b/workflow/envs/env.yaml
@@ -13,4 +13,4 @@ dependencies:
- ripgrep
- csvtk
- mosdepth==0.3.7
- - bioconda::bigtools==0.5.3
+ - bioconda::bigtools==0.5.4
From 83ba801abe9063caa8b40b5a5d4b4e3b15751071 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Wed, 11 Dec 2024 10:49:21 -0800
Subject: [PATCH 140/145] Simplify application of ft fire
---
workflow/Snakefile | 2 +-
workflow/rules/apply-model.smk | 44 ++++++++----------------------
workflow/rules/coverages.smk | 8 +++---
workflow/rules/decorated-reads.smk | 4 +--
workflow/rules/fire-peaks.smk | 4 +--
workflow/rules/stats.smk | 2 +-
6 files changed, 22 insertions(+), 42 deletions(-)
diff --git a/workflow/Snakefile b/workflow/Snakefile
index 0a3237e24..3322c700a 100644
--- a/workflow/Snakefile
+++ b/workflow/Snakefile
@@ -130,7 +130,7 @@ rule all:
v=VERSION,
),
# model results
- expand(rules.merged_fire_bam.output.cram, sm=MANIFEST.index, v=VERSION),
+ expand(rules.fire.output.cram, sm=MANIFEST.index, v=VERSION),
expand(rules.fire_sites.output, sm=MANIFEST.index, v=VERSION),
# Stats and Tables
expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index, v=VERSION),
diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk
index aef692b05..9e6ad9559 100644
--- a/workflow/rules/apply-model.smk
+++ b/workflow/rules/apply-model.smk
@@ -4,64 +4,44 @@
rule fire:
input:
bam=ancient(get_input_bam),
+ ref=ancient(REF),
output:
- bam=temp("temp/{sm}/fire/{chrom}.fire.bam"),
- threads: 4
+ cram="results/{sm}/{sm}-fire-{v}-filtered.cram",
+ crai="results/{sm}/{sm}-fire-{v}-filtered.cram.crai",
+ threads: 32
resources:
- mem_mb=8 * 1024,
+ mem_mb=32 * 1024,
+ runtime=600,
params:
min_msp=config.get("min_msp", 10),
min_ave_msp_size=config.get("min_ave_msp_size", 10),
use_ont=USE_ONT,
flag=FILTER_FLAG,
+ benchmark:
+ "results/{sm}/additional-outputs-{v}/benchmarks/{sm}-fire-bam.txt"
conda:
DEFAULT_ENV
shell:
"""
- samtools view -F {params.flag} -u -@ {threads} {input.bam} {wildcards.chrom} \
- | {FT_EXE} fire -t {threads} \
+ samtools view -@ {threads} -u -F {params.flag} {input.bam} \
+ | {FT_EXE} fire -F {params.flag} -t {threads} \
{params.use_ont} \
--min-msp {params.min_msp} \
--min-ave-msp-size {params.min_ave_msp_size} \
--skip-no-m6a \
- - {output.bam}
- """
-
-
-rule merged_fire_bam:
- input:
- ref=ancient(REF),
- fai=ancient(FAI),
- bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True),
- output:
- cram="results/{sm}/{sm}-fire-{v}-filtered.cram",
- crai="results/{sm}/{sm}-fire-{v}-filtered.cram.crai",
- threads: 16
- resources:
- mem_mb=16 * 1024,
- runtime=300,
- conda:
- DEFAULT_ENV
- benchmark:
- "results/{sm}/additional-outputs-{v}/benchmarks/{sm}-merged-fire-bam.txt"
- priority: 100
- shell:
- """
- samtools merge -@ {threads} -u {input.bams} -o - \
+ - - \
| samtools view -C -@ {threads} -T {input.ref} \
--output-fmt-option embed_ref=1 \
| samtools view -C -@ {threads} -T {input.ref} \
--output-fmt-option embed_ref=1 \
--input-fmt-option required_fields=0x1bff \
--write-index -o {output.cram}
- # the second samtools view of CRAM file is needed to drop the quality scores
- # this halves the size of the CRAM file
"""
rule fire_sites_chrom:
input:
- cram=rules.merged_fire_bam.output.cram,
+ cram=rules.fire.output.cram,
output:
bed=temp("temp/{sm}/chrom/{v}-{chrom}.sorted.bed.gz"),
threads: 4
diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk
index 45b321da0..05f537c45 100644
--- a/workflow/rules/coverages.smk
+++ b/workflow/rules/coverages.smk
@@ -5,8 +5,8 @@ rule genome_bedgraph:
input:
ref=ancient(REF),
fai=ancient(FAI),
- cram=rules.merged_fire_bam.output.cram,
- crai=rules.merged_fire_bam.output.crai,
+ cram=rules.fire.output.cram,
+ crai=rules.fire.output.crai,
output:
bg=temp("temp/{sm}/coverage/{sm}-{v}.bed.gz"),
tbi=temp("temp/{sm}/coverage/{sm}-{v}.bed.gz.tbi"),
@@ -53,8 +53,8 @@ rule coverage:
#
rule fiber_locations_chromosome:
input:
- cram=rules.merged_fire_bam.output.cram,
- crai=rules.merged_fire_bam.output.crai,
+ cram=rules.fire.output.cram,
+ crai=rules.fire.output.crai,
output:
bed=temp("temp/{sm}/coverage/{v}-{chrom}.fiber-locations.bed.gz"),
threads: 4
diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk
index 2ea7ac768..344218596 100644
--- a/workflow/rules/decorated-reads.smk
+++ b/workflow/rules/decorated-reads.smk
@@ -6,8 +6,8 @@ ITEMS_PER_SLOT = 1024 * 8
rule decorate_fibers_chromosome:
input:
- cram=rules.merged_fire_bam.output.cram,
- crai=rules.merged_fire_bam.output.crai,
+ cram=rules.fire.output.cram,
+ crai=rules.fire.output.crai,
output:
bed=temp("temp/{sm}/decorate/{v}-{chrom}.bed.gz"),
decorated=temp("temp/{sm}/decorate/{v}-{chrom}.dec.bed.gz"),
diff --git a/workflow/rules/fire-peaks.smk b/workflow/rules/fire-peaks.smk
index 2ea64fbba..6d5f2428d 100644
--- a/workflow/rules/fire-peaks.smk
+++ b/workflow/rules/fire-peaks.smk
@@ -25,7 +25,7 @@ rule filtered_and_shuffled_fiber_locations_chromosome:
rule shuffled_pileup_chromosome:
input:
- cram=rules.merged_fire_bam.output.cram,
+ cram=rules.fire.output.cram,
shuffled=rules.filtered_and_shuffled_fiber_locations_chromosome.output.shuffled,
output:
bed=temp("temp/{sm}/shuffle/{v}-{chrom}.pileup.bed.gz"),
@@ -93,7 +93,7 @@ rule fdr_table:
# coverage_H2 fire_coverage_H2 score_H2 nuc_coverage_H2 msp_coverage_H2
rule pileup_chromosome:
input:
- bam=rules.merged_fire_bam.output.cram,
+ bam=rules.fire.output.cram,
output:
bed=temp("temp/{sm}/{v}-{chrom}.pileup.bed.gz"),
threads: 4
diff --git a/workflow/rules/stats.smk b/workflow/rules/stats.smk
index 146cbd38e..366eca87e 100644
--- a/workflow/rules/stats.smk
+++ b/workflow/rules/stats.smk
@@ -52,7 +52,7 @@ rule fires_in_peaks:
rule ft_qc:
input:
- cram=rules.merged_fire_bam.output.cram,
+ cram=rules.fire.output.cram,
output:
tbl="results/{sm}/{sm}-fire-{v}-qc.tbl.gz",
conda:
From b4a68a91ff0ff85bd32e08725f7421923bae9aa1 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 6 Jan 2025 12:35:40 -0800
Subject: [PATCH 141/145] update
---
pixi.toml | 2 +-
workflow/scripts/cov.py | 6 ++++--
workflow/scripts/fdr-table.py | 10 ++++++++--
3 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/pixi.toml b/pixi.toml
index 8b017bf87..83111f3d2 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -4,7 +4,7 @@ channels = ["conda-forge", "bioconda"]
description = "Add a short description here"
name = "FIRE"
platforms = ["osx-64", "linux-64"]
-version = "0.1.0"
+version = "0.1.1"
[tasks]
fmt = "ruff format . && taplo format pixi.toml && snakefmt workflow/"
diff --git a/workflow/scripts/cov.py b/workflow/scripts/cov.py
index 4c69c48c4..0754ef914 100644
--- a/workflow/scripts/cov.py
+++ b/workflow/scripts/cov.py
@@ -76,10 +76,12 @@ def polars_read():
print(f"\nmean coverage: {mean}", file=sys.stderr)
print(f"median coverage: {coverage}\n", file=sys.stderr)
-if coverage <= 1:
+if coverage < 5:
raise ValueError(
- f"Median coverage is {coverage}! Did you use the correct reference, or is data missing from most of your genome. If so consider the keep_chromosomes parameter in config.yaml"
+ f"Median coverage is {coverage}! Did you use the correct reference, or is data missing from most of your genome. We recommend at least 10x coverage to use FIRE and require at least 5x."
+ "If you are only examining data from a subset of chromosomes, consider using the keep_chromosomes parameter in config.yaml"
)
+
open(snakemake.output.cov, "w").write(str(round(coverage)) + "\n")
open(snakemake.output.minimum, "w").write(str(round(min_coverage)) + "\n")
open(snakemake.output.maximum, "w").write(str(round(max_coverage)) + "\n")
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 8ec3f023a..86849b4e5 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -132,7 +132,7 @@ def fdr_table_from_scores(fire_scores):
return results
-def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
+def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None, max_fdr=0.05):
# read the pileup file
pileup = read_pileup_file(infile, nrows)
# filter on coverages if needed
@@ -172,6 +172,11 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None):
logging.info(f"Done aggregating pileup file:\n{fire_scores}")
fdr_table = fdr_table_from_scores(fire_scores)
fdr_table.to_csv(outfile, sep="\t", index=False)
+ # raise an error if no threshold below 0.05 is found
+ if fdr_table["FDR"].min() > max_fdr:
+ raise ValueError(
+ f"No threshold with FDR < {max_fdr} found. Check the input Fiber-seq data with the QC pipeline and make sure you are using WGS Fiber-seq data."
+ )
return fdr_table
@@ -283,6 +288,7 @@ def main(
nrows: Optional[int] = None,
max_cov: Optional[int] = None,
min_cov: Optional[int] = None,
+ max_fdr: float = 0.05,
verbose: int = 0,
):
"""
@@ -303,7 +309,7 @@ def main(
apply_fdr_table(infile, outfile, fdr_table, nrows)
else:
fdr_table = make_fdr_table(
- infile, outfile, nrows, min_cov=min_cov, max_cov=max_cov
+ infile, outfile, nrows, min_cov=min_cov, max_cov=max_cov, max_fdr=max_fdr
)
return 0
From daa92720110c1f27c739bee8c41bde93ce81c523 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 6 Jan 2025 12:38:11 -0800
Subject: [PATCH 142/145] update
---
workflow/scripts/fdr-table.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 86849b4e5..683ddb4df 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -175,7 +175,7 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None, max_fdr=0
# raise an error if no threshold below 0.05 is found
if fdr_table["FDR"].min() > max_fdr:
raise ValueError(
- f"No threshold with FDR < {max_fdr} found. Check the input Fiber-seq data with the QC pipeline and make sure you are using WGS Fiber-seq data."
+ f"No FIRE score threshold has an FDR < {max_fdr}. Check the input Fiber-seq data with the QC pipeline and make sure you are using WGS Fiber-seq data."
)
return fdr_table
From 5c1b8840381962431f16473f622d832fe4dc9218 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 6 Jan 2025 12:48:04 -0800
Subject: [PATCH 143/145] error on empty csv
---
workflow/scripts/fdr-table.py | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index 683ddb4df..b8b49bb47 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -8,6 +8,7 @@
import numpy as np
import polars.selectors as cs
import gzip
+import sys
# from numba import njit
ROLLING_FIRE_SCORE_WINDOW_SIZE = 200
@@ -25,12 +26,26 @@ def find_nearest(array, value):
return idx
+def my_read_csv(*args, **kwargs):
+ try:
+ result = pl.read_csv(*args, **kwargs)
+ # do some transformation with the dataframe
+ except pl.exceptions.NoDataError as e:
+ print(
+ "No data is found in the input file. Check the input file and make sure it is not empty.",
+ file=sys.stderr,
+ )
+ print(e, file=sys.stderr)
+ sys.exit(1)
+ return result
+
+
# ['#chrom', 'start', 'end', 'coverage', 'fire_coverage', 'score', 'nuc_coverage', 'msp_coverage',
# 'coverage_H1', 'fire_coverage_H1', 'score_H1', 'nuc_coverage_H1', 'msp_coverage_H1',
# 'coverage_H2', 'fire_coverage_H2', 'score_H2', 'nuc_coverage_H2', 'msp_coverage_H2']
def read_pileup_file(infile, nrows):
# get the header from the first line of the file
- header = pl.read_csv(infile, separator="\t", n_rows=1).columns
+ header = my_read_csv(infile, separator="\t", n_rows=1).columns
# check that there is at least two lines
open_infile = gzip.open if is_gzipped(infile) else open
@@ -51,7 +66,7 @@ def read_pileup_file(infile, nrows):
logging.info(f"Schema overrides for the pileup file:\n{schema_overrides}")
# read the file
- pileup = pl.read_csv(
+ pileup = my_read_csv(
infile,
separator="\t",
has_header=False,
@@ -181,7 +196,7 @@ def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None, max_fdr=0
def read_fdr_table(infile):
- fdr_table = pl.read_csv(infile, separator="\t").to_pandas()
+ fdr_table = my_read_csv(infile, separator="\t").to_pandas()
logging.info(f"Read FDR table:\n{fdr_table}")
return fdr_table
From ea31e71a436ff01e16e573833297ca9a1f752f12 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 6 Jan 2025 12:49:04 -0800
Subject: [PATCH 144/145] error on empty csv
---
workflow/scripts/fdr-table.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py
index b8b49bb47..c78d9fb53 100644
--- a/workflow/scripts/fdr-table.py
+++ b/workflow/scripts/fdr-table.py
@@ -32,7 +32,7 @@ def my_read_csv(*args, **kwargs):
# do some transformation with the dataframe
except pl.exceptions.NoDataError as e:
print(
- "No data is found in the input file. Check the input file and make sure it is not empty.",
+ "No data is found in the input file. Check the input file and make sure it is not empty. It is likely that the input data was not generated correctly or that it was impossible to find peaks at the specified FDR value.",
file=sys.stderr,
)
print(e, file=sys.stderr)
From 3745dc19432c5660a946c1663c8bb759a29e8bc9 Mon Sep 17 00:00:00 2001
From: "Mitchell R. Vollger"
Date: Mon, 6 Jan 2025 12:51:01 -0800
Subject: [PATCH 145/145] error on empty csv
---
CHANGELOG.md | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 303530a57..0713c5e75 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
-# v0.1.0
+# Change Log
+
+All notable changes to this project will be documented in this file.
+
+## v0.1.1
+
+Added more informative error messages if an FDR distribution cannot be made or there is not enough coverage.
+
+## v0.1.0
First major release of the FIRE pipeline. This release includes a refactor to reduce the computation by increased use of ft, changes to the output file names to include the fire version among other things, and finally a new launching method for the pipeline that uses pixi. Results are very similar to v0.0.7 of the pipeline; however, there are minor differences in the peak calls and the output names.