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 [![DOI](https://zenodo.org/badge/561430995.svg)](https://zenodo.org/doi/10.5281/zenodo.10023811) +[![Actions Status](https://github.com/fiberseq/FIRE/workflows/CI/badge.svg)](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 [![DOI](https://zenodo.org/badge/561430995.svg)](https://zenodo.org/doi/10.5281/zenodo.10023811) -[![Actions Status](https://github.com/fiberseq/FIRE/workflows/CI/badge.svg)](https://github.com/fiberseq/FIRE/actions) +[![Actions Status](https://github.com/fiberseq/FIRE/workflows/CI/badge.svg)](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 @@ [![DOI](https://zenodo.org/badge/561430995.svg)](https://zenodo.org/doi/10.5281/zenodo.10023811) [![Actions Status](https://github.com/fiberseq/FIRE/workflows/CI/badge.svg)](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.