diff --git a/.gitattributes b/.gitattributes index 7fe55006..d746be2f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ +# GitHub syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true *.config linguist-language=nextflow diff --git a/.gitignore b/.gitignore index 1fa50a5a..6f946f7f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,19 @@ +# Nextflow files .nextflow* work/ -results/ \ No newline at end of file + +# Pipeline files +results/ +*_cache/ + +# Pixi environments +.pixi/ +*.egg-info + +# nf-test files +.nf-test.log +.nf-test/ + +# misc +.DS_Store +.screenrc diff --git a/assets/assembly_report.qmd b/assets/assembly_report.qmd deleted file mode 100644 index ef5d6650..00000000 --- a/assets/assembly_report.qmd +++ /dev/null @@ -1,84 +0,0 @@ ---- -format: - html: - embed-resources: true - -params: - species: 'Species' - data_path : '.' ---- - -# Assembly report (`r params$species`) - -## General - -- ToLID: -- Species Name: -- Class: -- Order: - -## Genome Traits - -- Haploid Genome Size: -- Haploid Number: -- Ploidy: -- Sample Sex: - -## EBP Metrics and curation notes - -- Table of Assembly standards - - Metrics flagged as red ( below EBP standards ) -- Curator notes -- Contaminants detected -- Other observations - -## Data Profile - -### Data inspection - -- Table of Coverage ( HiFi, ONT, Bionano, HiC ) -- Total base sequenced -- Sequence distribution -- GenomeScope plot - -### Data preprocessing - -- Table of Coverage ( HiFi, ONT, Bionano, HiC ) -- Total base sequenced -- Sequence distribution -- GenomeScope plot - -### Raw assembly metrics - -- Assembly metrics -- Mitochondria metrics -- Chloroplast metrics - -### Contamination screening - -- FCS metrics - -### Duplicate purging - -## Assembly pipeline - -- Tool version table ( Hifiasm, purge_dups, bionano, YaHS ) - -## Curation pipeline - -- Tool version table ( GRIT_rapid, HiGlass ) - -## Metrics Table - -- Hi Contact Map -- Kmer Spectra -- Blob ( Bubble ) of cov vs gc. - - - - Table of assembly standards met - Sequence metrics ( from ? ) - Total sequence data - Sequence distribution - Expected coverage ( total bases / estimated genome size ) - GenomeScope diff --git a/assets/notebooks/assembly_report.qmd b/assets/notebooks/assembly_report.qmd new file mode 100644 index 00000000..508cd001 --- /dev/null +++ b/assets/notebooks/assembly_report.qmd @@ -0,0 +1,799 @@ +--- +title: 'Earth Biogenome Project' +subtitle: 'NBIS Assembly Report' +date: today +toc: true +toc-location: left + +engine: 'jupyter' + +execute: + echo: false + warning: true + +format: + html: + embed-resources: true + theme: + light: minty + dark: darkly + gfm: + preview-mode: raw +--- + +## Introduction + +This assembly report has been prepared by the National Bioinformatics Infrastructure Sweden +(NBIS) as part of the Earth Biogenome Project workflow. + +The purpose of this report is to guide you through the analysis process, rather than merely +summarizing tool logs. If you have any suggestions or feedback, please submit a feature +request at [NBIS Earth Biogenome Project - Issues](https://github.com/NBISweden/Earth-Biogenome-Project-pilot/issues). + +::::: {.content-visible when-meta="diagnostics"} + +### Setup + +This [Quarto notebook](https://quarto.org/) establishes default parameters +in this section and utilizes the MultiQC Python package to locate log files +from tools executed within the workflow. + +```{python} +#| tags: [parameters] + +log_path = 'log_files' +inspect = True +preprocess = True +assemble = True +screen = True +purge = True +polish = True +scaffold = True +curate = True +alignRNA = False +diagnostics = False +``` + +#### MultiQC + +```{python} +import glob +import multiqc +import os +import pandas as pd +from itertools import groupby +from pprint import pprint +from IPython.display import display # MQCPlot.show() returns a HTML object which needs to be forced to render in a cell +from IPython.display import Image + +multiqc.reset() # Important for Quarto preview +# Load a custom config +multiqc.load_config(f"{log_path}/multiqc_assembly_report_config.yml") +multiqc.parse_logs(log_path) + +# pprint pretty prints the dictionary +pprint(multiqc.list_plots()) +pprint(multiqc.list_modules()) + +# Write out report (If other parts error, we should at least have the summary) +multiqc.write_report( + force=True, + output_dir=".", +) +``` + +::::: + +## Species information + +To begin our analysis, let's explore the available species information. The following +details are sourced from [Genomes on a Tree (GOAT)](https://goat.genomehubs.org/). + +```{python} +if "dtol" in multiqc.list_modules(): + display(multiqc.get_plot("dtol", "dtol-section").show()) +``` + +### Genome Traits + +```{python} +if "traits" in multiqc.list_modules(): + display(multiqc.get_plot("traits", "traits-section").show()) +``` + +::::: {.content-visible when-meta="inspect"} + +## Data inspection + +Let's ensure the quality of our input data. + +### Sequence data quantity + +* Do we have enough total sequence data? +* Do we have enough long reads? + +#### HiFi + +::: {.callout-note title="Expectation" collapse="true"} +For long read data (PacBio, ONT) we expect to see 15-20x coverage per haplotype, for a good assembly. +::: + +```{python} +# TODO data quantity table +``` +#### Hi-C + +```{python} +if "fastqc" in multiqc.list_modules(): + display(multiqc.get_plot("fastqc", "Sequence Counts").show()) +else: + print("No Hi-C data available") +``` + +::: {.callout-note title="Expectation" collapse="true"} +Arima-HiC (Arima Genomics) +: Duplication levels expected to be ~10-30%. + +Dovetail Omni-C (Cantata Bio) +: Duplication levels expected to be ~30-80%. +::: + +```{python} +if "fastqc" in multiqc.list_modules(): + display(multiqc.get_plot("fastqc", "Sequence Duplication Levels").show()) +``` + +#### HiFi vs Hi-C + +* Do our libraries have similar data content? +```{python} +Image(filename=glob.glob(f"{log_path}/*_katcomp.st.png")[0]) +``` + +### Genomic screen + +* Do the libraries contain our expected organism. + +### Genomic characteristics + +We can glean a good amount of information about the sequenced species from the k-mer content of the data. + +#### Ploidy +Does it show the correct ploidy? + +::: {.callout-note title="Interpretation" collapse="true"} +A Kmer histogram counts the frequency of k-mers in the data. Some parts of the genome are unique, and +there are expected to be *coverage* times copies of these k-mers in the data. If the organism is diploid, +the regions unique to a haplotype should have *coverage* times copies of these k-mers, and regions shared +between both haplotypes should have *coverage* times two copies of these k-mers. This leads to formations +of peaks in the k-mer histogram. A haploid organism should have one peak, while a diploid should have two peaks. +::: + +```{python} +#| output: asis +if inspect: + images = [ + img + for pattern in ["log_plot", "linear_plot"] + for img in glob.glob(f"{log_path}/*_{pattern}.png") + ] + + if len(images) == 0: + raise ValueError("No files found") + + # Ensure we have multiples of 4 images + if len(images) % 4 != 0: + raise ValueError("There should be 4 images per GenomeScope2 process") + + # Function to sort filenames + def sort_key(filename): + filename = os.path.basename(filename) + parts = filename.split("_") + # Order: linear < log, non-transformed < transformed + order = {"linear": 0, "log": 1} + transformed = 1 if "transformed" in parts else 0 + return (" ".join(parts[:2]), transformed, order[parts[-2]]) + + # Sort filenames first + sorted_filenames = sorted(images, key=sort_key) + + # Group by sample + grouped_filenames = {} + for key, group in groupby( + sorted_filenames, key=lambda x: " ".join(os.path.basename(x).split("_")[:2]) + ): + grouped_filenames[key] = list(group) + + + # Function to format filenames + def format_filename(filename): + # return os.path.basename(filename).replace(".png", "").replace("_", " ") + return " ".join(os.path.basename(filename).split("_")[2:-1]) + + # Print grouped and sorted filenames + tabs = [] # tabbed panels + for sample, files in grouped_filenames.items(): + # tabs.append(f"### {sample}") + tabs.append("::: {.panel-tabset}") + for image in files: + formatted_filename = format_filename(image) + tabs.append(f"## {formatted_filename}") + tabs.append(f"![{formatted_filename}]({image})") + tabs.append(":::") + + markdown = "\n\n".join(tabs) + print(markdown) +``` + +#### SmudgePlot + +Does the smudgeplot indicate the expected ploidy? + +```{python} +Image(filename=glob.glob(f"{log_path}/*_ploidyplot.st.png")[0]) +``` + +#### GC content + +```{python} +Image(filename=glob.glob(f"{log_path}/*_katgc.st.png")[0]) +``` + +::: {.callout-note title="Expectation" collapse="true"} +* Unexpected GC content value can indicate contamination. +* Unexpected blobs(?) in the plot can indicate contamination. +::: + +#### Hi-C + +```{python} +if "fastqc" in multiqc.list_modules(): + display(multiqc.get_plot("fastqc", "Per Sequence GC Content").show()) +``` + +::: {.callout-note title="Expectation" collapse="true"} +The peak GC content on the x-axis should be the same value +as the peak on the HiFi KatGC plot on the y-axis. +::: + +### Synthetic sequence content + +Do we see indications of synthetic sequences such as adaptors? + +#### HiFi + +TODO: FCS + +#### Hi-C +```{python} +if "fastqc" in multiqc.list_modules(): + display(multiqc.get_plot("fastqc", "Adapter Content").show()) +``` + +::::: + +::::: {.content-visible when-meta="preprocess"} + +## Data processing + +::::: + +::::: {.content-visible when-meta="assemble"} + +## Assembly + +### General comparison + +```{python} +if "quast" in multiqc.list_modules(): + display(multiqc.get_plot("quast", "Assembly Statistics").show()) +``` + +```{python} +if "quast" in multiqc.list_modules(): + display(multiqc.get_plot("quast", "Number of Contigs").show()) +``` + +### Best ranked assembly + +#### Assembly statistics + +```{python} +#| output: asis +raw_asm_stats = pd.read_csv( + glob.glob(f"{log_path}/*-raw-*.fasta.assembly_summary")[0], + sep="\t", + header=None, + names=["Metric","Value"] +) +raw_asm_t1=raw_asm_stats.iloc[[0, 31, 32]] +print(raw_asm_t1.to_markdown(index=False)) +``` +```{python} +#| output: asis +raw_asm_t2=raw_asm_stats.iloc[1:12] # TODO Add conversion +print(raw_asm_t2.to_markdown(index=False)) +``` +```{python} +#| output: asis +raw_asm_t3=raw_asm_stats.iloc[12:23] # TODO Add conversion +print(raw_asm_t3.to_markdown(index=False)) +``` +```{python} +#| output: asis +raw_asm_t4=raw_asm_stats.iloc[24:31] # TODO Add conversion +print(raw_asm_t4.to_markdown(index=False)) +``` + +#### Assembly k-mer completeness + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-raw-default_merquryfk.completeness.stats")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +```{python} +if "hifiasm" in multiqc.list_modules(): + display(multiqc.get_plot("hifiasm", "HiFiasm kmer graph").show()) +``` + +##### Assembly quality value + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-raw-default_merquryfk.qv")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +
+QV per scaffold + +```{python} +#| output: asis +qvs = [] +for qv_file in glob.glob(f"{log_path}/*-raw-default_merqury.*.qv"): + if os.path.getsize(qv_file) > 0: + qvs.append( + pd.read_csv( + qv_file, + sep="\t", + header=None, + names=[ + "Scaffold", + "No support k-mers", + "Total k-mers", + "QV", + "Error rate", + ], + dtype={ + "Scaffold": str, + "No support k-mers": int, + "Total k-mers": int, + "QV": float, + "Error rate": float, + }, + na_values=["", "inf"], + ) + ) +if qvs: + per_scaffold_qv_raw = pd.concat(qvs, ignore_index=True) + print(per_scaffold_qv_raw.to_markdown(index=False)) +else: + print("No per scaffold qv found") +``` + +
+ +##### Copy number spectra + +:::: {.panel-tabset} + +## MerquryFK + +```{python} +# TODO account for multiple assemblers +# TODO: Add ln plot too see the relative contribution +Image(filename=glob.glob(f"{log_path}/*-raw-default_merquryfk.*.spectra-cn.st.png")[0]) +``` + +## Merqury + +```{python} +# TODO This path will be different depending on phased or not +Image(filename=glob.glob(f"{log_path}/*-raw-default_merqury.*.spectra-cn.st.png")[0]) +``` + +:::: + +##### Assembly spectra + +:::: {.panel-tabset} + +## MerquryFK + +```{python} +# TODO account for multiple assemblers +Image(filename=glob.glob(f"{log_path}/*-raw-default_merquryfk.spectra-asm.st.png")[0]) +``` + +## Merqury + +```{python} +Image(filename=glob.glob(f"{log_path}/*-raw-default_merqury.spectra-asm.st.png")[0]) +``` + +:::: + +##### False duplications + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-raw-default_merquryfk.false_duplications.tsv")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +#### Assembly gene space completeness + +```{python} +if "busco" in multiqc.list_modules(): + for lineage in multiqc.list_plots()["busco"]: + display(multiqc.get_plot("busco", f"{lineage}").show()) +``` + +### Other assemblies +TODO for each assembly output a stats section (expandable). + +## Organelle detection + +::::: + +::::: {.content-visible when-meta="screen"} + +## Contamination Screen + +::::: + +::::: {.content-visible when-meta="purge"} + +## Duplication purging + +### Purge dups + +::: {.callout-note title="Interpretation" collapse="true"} + +X-axis (Read Depth) +: This axis represents the read depth, which is the number of times a particular base is covered by reads. It typically starts from 0 and increases to the maximum read depth observed. + +Y-axis (Number of Positions) +: This axis shows the number of positions in the assembly that have a specific read depth. Higher values indicate more positions with that particular read depth. + +Histogram Peaks +: For a diploid organism, there should be a heterozgyous peak and a homozygous peak. + + - **Heterozygous Peak**: The first major peak from the left usually represents the expected read depth for the heterozgyous portion of the genome, i.e., a haplotype. + - **Homozygous Peak**: The second major peak from the left usually represents the expected read depth for the homozygous portion, i.e., + where the both alleles are the same. + +Cutoff Lines +: The plot includes three vertical lines indicating coverage cutoffs. These cutoffs help distinguish between primary contigs, haplotigs, and potential contaminants or low-quality regions. + + - **Low Coverage Cutoff**: Positions below this line are considered low coverage and might be errors or low-quality regions. + - **Haploid-Diploid Transition**: Marks the transition where average coverage denotes a heterozygous or homozygous region. + - **High Coverage Cutoff**: Positions above this line are considered high coverage and might indicate duplicated regions or haplotigs. + +Interpreting the Data +: + + - **JUNK**: Contigs with an average coverage below the low-coverage threshold. + - **HAPLOTIG**: Contigs with an average coverage between low coverage cutoff and the transition, that overlap with another region. + - **HIGHCOV**: Contigs with an average coverage above the high coverage cutoff. + - **REPEAT**: Repeat contig. + - **OVLP**: Overlap. + +::: + +```{python} +Image(filename=glob.glob(f"{log_path}/*_purgedups_hist.png")[0]) +``` + +```{python} +#| output: asis +assemblies = [ asm for asm in multiqc.list_samples() if asm.startswith("hifiasm-raw-default.asm.bp") ] +assembly_size_mb = [ multiqc.get_module_data(module="quast",sample=f"{asm}")['Total length'] for asm in assemblies ] +for bed in glob.glob(f"{log_path}/*-purged-*.dups.bed"): + dup_bed = pd.read_csv( + bed, + sep="\t", + names=['Contig','Start','End','Type','Partner'] + ) + dup_bed['Length'] = dup_bed['End'] - dup_bed['Start'] + summary = dup_bed.groupby('Type')['Length'].sum().reset_index() # TODO Fix for multiple assemblies + summary['Percentage'] = summary['Length'].apply(lambda x: x * 100 / (assembly_size_mb[0] * 1000000) ).apply(lambda x: f"{x:.2f}%") + print(summary.to_markdown(index=False)) +``` + +#### Assembly k-mer completeness + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-purged-default_merquryfk.completeness.stats")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +##### Assembly quality value + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-purged-default_merquryfk.qv")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +
+QV per scaffold + +```{python} +#| output: asis +qvs = [] +for qv_file in glob.glob(f"{log_path}/*-purged-default_merqury.*.qv"): + if os.path.getsize(qv_file) > 0: + qvs.append( + pd.read_csv( + qv_file, + sep="\t", + header=None, + names=[ + "Scaffold", + "No support k-mers", + "Total k-mers", + "QV", + "Error rate", + ], + dtype={ + "Scaffold": str, + "No support k-mers": int, + "Total k-mers": int, + "QV": float, + "Error rate": float, + }, + na_values=["", "inf"], + ) + ) +if qvs: + per_scaffold_qv_raw = pd.concat(qvs, ignore_index=True) + print(per_scaffold_qv_raw.to_markdown(index=False)) +else: + print("No per scaffold qv found") +``` + +
+ +##### Copy number spectra + +:::: {.panel-tabset} + +## MerquryFK + +```{python} +# TODO Do we need separate for each fasta? This is combined +Image(filename=glob.glob(f"{log_path}/*-purged-default_merquryfk.spectra-cn.st.png")[0]) +``` + +## Merqury + +```{python} +Image(filename=glob.glob(f"{log_path}/*-purged-default_merqury.spectra-cn.st.png")[0]) +``` + +:::: + +##### Assembly spectra + +:::: {.panel-tabset} + +## MerquryFK + +```{python} +# TODO account for multiple assemblers +Image(filename=glob.glob(f"{log_path}/*-purged-default_merquryfk.spectra-asm.st.png")[0]) +``` + +## Merqury + +```{python} +Image(filename=glob.glob(f"{log_path}/*-purged-default_merqury.spectra-asm.st.png")[0]) +``` + +:::: + +##### False duplications + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-purged-default_merquryfk.false_duplications.tsv")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +::::: + +::::: {.content-visible when-meta="polish"} + +## Polishing + +::::: + +::::: {.content-visible when-meta="scaffold"} + +## Scaffolding + +### Pairtools + +```{python} +if "pairtools" in multiqc.list_modules(): + display(multiqc.get_plot("pairtools", "Pairs by alignment status").show()) +``` + +```{python} +if "pairtools" in multiqc.list_modules(): + display(multiqc.get_plot("pairtools", "Fraction of read pairs by strand orientation").show()) +``` + +```{python} +if "pairtools" in multiqc.list_modules(): + display(multiqc.get_plot("pairtools", "Pre-filtered pairs as a function of genomic separation (in detail)").show()) +``` + + +#### Assembly k-mer completeness + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-scaffolded-default_merquryfk.completeness.stats")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +##### Assembly quality value + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-scaffolded-default_merquryfk.qv")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +
+QV per scaffold + +```{python} +#| output: asis +qvs = [] +for qv_file in glob.glob(f"{log_path}/*-scaffolded-default_merqury.*.qv"): + if os.path.getsize(qv_file) > 0: + qvs.append( + pd.read_csv( + qv_file, + sep="\t", + header=None, + names=[ + "Scaffold", + "No support k-mers", + "Total k-mers", + "QV", + "Error rate", + ], + dtype={ + "Scaffold": str, + "No support k-mers": int, + "Total k-mers": int, + "QV": float, + "Error rate": float, + }, + na_values=["", "inf"], + ) + ) +if qvs: + per_scaffold_qv_raw = pd.concat(qvs, ignore_index=True) + print(per_scaffold_qv_raw.to_markdown(index=False)) +else: + print("No per scaffold qv found") +``` + +
+ +##### Copy number spectra + +:::: {.panel-tabset} + +## MerquryFK + +```{python} +# TODO Do we need for each fasta. This is combined fastas +Image(filename=glob.glob(f"{log_path}/*-scaffolded-default_merquryfk.spectra-cn.st.png")[0]) +``` + +## Merqury + +```{python} +Image(filename=glob.glob(f"{log_path}/*-scaffolded-default_merqury.spectra-cn.st.png")[0]) +``` + +:::: + +##### Assembly spectra + +:::: {.panel-tabset} + +## MerquryFK + +```{python} +# TODO account for multiple assemblers +Image(filename=glob.glob(f"{log_path}/*-scaffolded-default_merquryfk.spectra-asm.st.png")[0]) +``` + +## Merqury + +```{python} +Image(filename=glob.glob(f"{log_path}/*-scaffolded-default_merqury.spectra-asm.st.png")[0]) +``` + +:::: + +##### False duplications + +```{python} +#| output: asis +print( + pd.read_csv( + glob.glob(f"{log_path}/*-scaffolded-default_merquryfk.false_duplications.tsv")[0], sep="\t" + ).to_markdown(index=False) +) +``` + +::::: + +::::: {.content-visible when-meta="curate"} + +## Curation + +::::: + +## Summary + +### EBP Metrics and curation notes + +- Table of Assembly standards + - Metrics flagged as red ( below EBP standards ) +- Curator notes +- Contaminants detected +- Other observations + +### Assembly pipeline + +- Tool version table ( Hifiasm, purge_dups, bionano, YaHS ) + +## Curation pipeline + +- Tool version table ( GRIT_rapid, HiGlass ) diff --git a/bin/filter_five_end.pl b/bin/filter_five_end.pl new file mode 100644 index 00000000..191f5824 --- /dev/null +++ b/bin/filter_five_end.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl + +# Portions of this code adapted from Sanger Institute's "curationpretext" (https://github.com/sanger-tol/curationpretext) +# and Arima Genomics' "mapping_pipeline" (https://github.com/ArimaGenomics/mapping_pipeline) + +use strict; +use warnings; + +my $prev_id = ""; +my @five; +my @three; +my @unmap; +my @mid; +my @all; +my $counter = 0; + +while (){ + chomp; + if (/^@/){ + print($_ . "\n"); + next; + } + my ($id, $flag, $chr_from, $loc_from, $mapq, $cigar, $d1, $d2, $d3, $read, $read_qual, @rest) = split(/\t/); + my $bin = reverse(dec2bin($flag)); + my @binary = split(//, $bin); + if ($prev_id ne $id && $prev_id ne ""){ + if ($counter == 1){ + if (@five == 1){ + print($five[0] . "\n"); + } + else{ + my ($id_1, $flag_1, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) = split(/\t/, $all[0]); + my $bin_1 = reverse(dec2bin($flag_1)); + my @binary_1 = split(//, $bin_1); + $binary_1[2] = 1; + my $bin_1_new = reverse(join("",@binary_1)); + my $flag_1_new = bin2dec($bin_1_new); + print(join("\t", $id_1, $flag_1_new, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) . "\n"); + } + } + elsif ($counter == 2 && @five == 1){ + print($five[0] . "\n"); + } + else{ + my ($id_1, $flag_1, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) = split(/\t/, $all[0]); + my $bin_1 = reverse(dec2bin($flag_1)); + my @binary_1 = split(//, $bin_1); + $binary_1[2] = 1; + my $bin_1_new = reverse(join("", @binary_1)); + my $flag_1_new = bin2dec($bin_1_new); + print(join("\t", $id_1, $flag_1_new, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) . "\n"); + } + + $counter = 0; + undef @unmap; + undef @five; + undef @three; + undef @mid; + undef @all; + } + + $counter++; + $prev_id = $id; + push(@all, $_); + if ($binary[2] == 1){ + push @unmap,$_; + } + elsif ($binary[4] == 0 && $cigar =~ m/^[0-9]*M/ || $binary[4] == 1 && $cigar =~ m/.*M$/){ + push(@five, $_); + } + elsif ($binary[4] == 1 && $cigar =~ m/^[0-9]*M/ || $binary[4] == 0 && $cigar =~ m/.*M$/){ + push(@three, $_); + } + elsif ($cigar =~ m/^[0-9]*[HS].*M.*[HS]$/){ + push(@mid, $_); + } +} + +if ($counter == 1){ + if (@five == 1){ + print($five[0] . "\n"); + } + else{ + my ($id_1, $flag_1, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) = split(/\t/, $all[0]); + my $bin_1 = reverse(dec2bin($flag_1)); + my @binary_1 = split(//, $bin_1); + $binary_1[2] = 1; + my $bin_1_new = reverse(join("", @binary_1)); + my $flag_1_new = bin2dec($bin_1_new); + print(join("\t", $id_1, $flag_1_new, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) . "\n"); + } +} +elsif ($counter == 2 && @five == 1){ + print($five[0] . "\n"); +} +else{ + my ($id_1, $flag_1, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) = split(/\t/, $all[0]); + my $bin_1 = reverse(dec2bin($flag_1)); + my @binary_1 = split(//, $bin_1); + $binary_1[2] = 1; + my $bin_1_new = reverse(join("", @binary_1)); + my $flag_1_new = bin2dec($bin_1_new); + print(join("\t", $id_1, $flag_1_new, $chr_from_1, $loc_from_1, $mapq_1, $cigar_1, $d1_1, $d2_1, $d3_1, $read_1, $read_qual_1, @rest_1) . "\n"); +} + +sub dec2bin { + return unpack("B32", pack("N", shift)); +} + +sub bin2dec { + return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); +} \ No newline at end of file diff --git a/bin/two_read_bam_combiner_sanger.pl b/bin/two_read_bam_combiner_sanger.pl new file mode 100644 index 00000000..4d9c028c --- /dev/null +++ b/bin/two_read_bam_combiner_sanger.pl @@ -0,0 +1,135 @@ +#!/usr/bin/perl + +# Portions of this code adapted from Sanger Institute's "curationpretext" (https://github.com/sanger-tol/curationpretext) +# and Arima Genomics' "mapping_pipeline" (https://github.com/ArimaGenomics/mapping_pipeline) + +use strict; + +MAIN : { + + my ($read1_bam, $read2_bam, $samtools, $mq) = @ARGV; + + if ((not defined $read1_bam) || + (not defined $read2_bam)) { + die ("Usage: ./two_read_bam_combiner.pl \n"); + } + + open(FILE1,"$samtools view -h $read1_bam |"); + open(FILE2,"$samtools view -h $read2_bam |"); + + my $line1 = ; + my $line2 = ; + + my $counter = 0; + my $new_counter = 0; + + while (defined $line1) { + + if ($line1 =~ /^(\@)PG/){ + print $line1; + $line1 = ; + $line2 = ; + next; + } + + if ($line1 =~ /^(\@)SQ/ || $line1 =~ /^(\@)RG/){ + if ($line1 ne $line2){print $line1;print $line2; die ("Inconsistent BAM headers. BAM files must be aligned to same reference.");} + else{ + print $line1; + } + $line1 = ; + $line2 = ; + next; + } + + $counter++; + if ($counter == ($new_counter + 1000000)) { + print STDERR $counter . "\n"; + $new_counter = $counter; + } + + chomp $line1; + chomp $line2; + + my ($id1, $flag1, $chr_from1, $loc_from1, $mapq1, $cigar1, $d1_1, $d2_1, $d3_1, $read1, $read_qual1, @rest1) = split(/\t/,$line1); + my ($id2, $flag2, $chr_from2, $loc_from2, $mapq2, $cigar2, $d1_2, $d2_2, $d3_2, $read2, $read_qual2, @rest2) = split(/\t/,$line2); + + if ($id1 ne $id2) { + die ("The read id's of the two files do not match up at line number $counter. Files should be from the same sample and sorted in identical order.\n"); + } + + my $bin1 = reverse(dec2bin($flag1)); + my $bin2 = reverse(dec2bin($flag2)); + + my @binary1 = split(//,$bin1); + my @binary2 = split(//,$bin2); + + my $trouble = 0; + if (($binary1[2] == 1) || ($mapq1 < $mq)) { + $trouble = 1; + } + if (($binary2[2]== 1) || ($mapq2 < $mq)) { + $trouble = 1; + } + + my $proper_pair1; + my $proper_pair2; + my $dist1; + my $dist2; + + if (($binary1[2] == 0) && ($binary2[2] == 0)) { + $proper_pair1 = 1; + $proper_pair2 = 1; + if ($chr_from1 eq $chr_from2) { + my $dist = abs($loc_from1 - $loc_from2); + if ($loc_from1 >= $loc_from2) { + $dist1 = -1*$dist; + $dist2 = $dist; + } else { + $dist1 = $dist; + $dist2 = -1*$dist; + } + } else { + $dist1 = 0; + $dist2 = 0; + } + } else { + $proper_pair1 = 0; + $proper_pair2 = 0; + $dist1 = 0; + $dist2 = 0; + } + + my $new_bin1 = join("","000000000000000000000",$binary1[10],$binary1[9],"0","0","1",$binary2[4],$binary1[4],$binary2[2],$binary1[2],$proper_pair1,"1"); + my $new_bin2 = join("","000000000000000000000",$binary2[10],$binary2[9],"0","1","0",$binary1[4],$binary2[4],$binary1[2],$binary2[2],$proper_pair2,"1"); + + my $new_flag1 = bin2dec($new_bin1); + my $new_flag2 = bin2dec($new_bin2); + + unless ($trouble == 1) { + + print(join("\t",$id1,$new_flag1,$chr_from1,$loc_from1,$mapq1,$cigar1,$chr_from2,$loc_from2,$dist1,$read1,$read_qual1,@rest1) . "\n"); + print(join("\t",$id2,$new_flag2,$chr_from2,$loc_from2,$mapq2,$cigar2,$chr_from1,$loc_from1,$dist2,$read2,$read_qual2,@rest2) . "\n"); + + } + + $line1 = ; + $line2 = ; + + } + +} + + + +sub dec2bin { + + my $str = unpack("B32", pack("N", shift)); + return $str; + +} + +sub bin2dec { + return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); +} + diff --git a/configs/README.md b/configs/README.md new file mode 100644 index 00000000..718d55bd --- /dev/null +++ b/configs/README.md @@ -0,0 +1,46 @@ +# Configuration + +This folder contains workflow configuration files that affect various +aspects of running this pipeline. + +These are all in some way included by the `nextflow.config`. + +## Test Profile + +The test profile is included through a profile called `test`, activated +using `-profile test`. It runs most of the pipeline on a tiny test dataset, +with reduced resources. + +## Site Profiles + +There are three site profiles included in this pipeline. + +- dardel.config: Resource requirements for the HPC cluster `dardel` at PDC. +- uppmax.config: Resource requirements for the HPC cluster `rackham` at UPPMAX. +- nac.config: Resource requirements for the HPC cluster `nac` at NBIS. + +Each of these include the config `tool_resources.config`, which can then +be further customized by site. This is separate from the `test` profile +which reduces the resource availability for all tools. + +## Modules config + +The `modules.config` supplies additional parameters to each module, such +as file prefixes, additional tool options, and which files should be published +where. This file extends the `nextflow.config`, supplying module specific +configuration. Resource requirements should not be added here as they will +also affect the test profile. + +## Overview + +```mermaid +flowchart TD + nextflow <--o dardel + nextflow <--o uppmax + nextflow <--o nac + nextflow <--o test + dardel <--o tool_resources + uppmax <--o tool_resources + nac <--o tool_resources + nextflow <--- modules +``` \ No newline at end of file diff --git a/configs/dardel.config b/configs/dardel.config index 7d8a9cb1..22d6d180 100644 --- a/configs/dardel.config +++ b/configs/dardel.config @@ -11,7 +11,7 @@ params { def clusterOptionsCreator = { mem, time, cpus -> List clusterOpts = [ "-A $params.project ${params.clusterOptions ?: ''}" ] - if (time < 7.d && mem <= 222.GB && cpus < 256) { + if (time < 7.d && mem <= 111.GB && cpus < 256) { clusterOpts << '-p shared' } else if (time < 1.d) { // Shortish @@ -35,7 +35,31 @@ def clusterOptionsCreator = { mem, time, cpus -> return clusterOpts.join(' ') } +includeConfig 'tool_resources.config' + process { + // resource limits are based on nodes on the shared partition of PDC dardel: + // CfgTRES=cpu=256,mem=237174M, + // MaxTime=7-00:00:00 + // Processes that require more resources need to explicitly overwrite it, + // and use other partitions: e.g. long or memory + resourceLimits = [ + memory: 222.GB, + cpus: 256, + time: 7.d + ] + + // all processes that need more than the default resources need to be added here: + withName: 'FCSGX_RUNGX' { + cpus = 20 + memory = 1024.GB + time = 1.h + resourceLimits = [ + cpus: 20, + memory: 1024.GB, + time: 1.h + ] + } executor = 'slurm' clusterOptions = { clusterOptionsCreator(task.memory, task.time, task.cpus) } // There is no node local storage, but there is a scratch space. diff --git a/configs/modules.config b/configs/modules.config index b831d034..c63b04a5 100644 --- a/configs/modules.config +++ b/configs/modules.config @@ -36,12 +36,12 @@ process { // BUILD FASTK DATABASES withName: 'BUILD_FASTK_HIFI_DATABASE:FASTK_FASTK' { scratch = false // !Disable scratch to get around bug https://github.com/nextflow-io/nextflow/issues/2983 - ext.args = { "-t1 -k${params.fastk?.kmer_size?:31}" } + ext.args = { "-t1 -k${params.fastk?.kmer_size?:31} -P\$PWD -v" } ext.prefix = { "${meta.id}_${reads instanceof List ? reads[0].baseName : reads.baseName}_hifi" } } withName: 'BUILD_FASTK_HIC_DATABASE:FASTK_FASTK' { scratch = false // !Disable scratch to get around bug https://github.com/nextflow-io/nextflow/issues/2983 - ext.args = { "-t1 -k${params.fastk?.kmer_size?:31}" } + ext.args = { "-t1 -k${params.fastk?.kmer_size?:31} -P\$PWD -v" } ext.prefix = { "${meta.id}_${reads instanceof List ? reads[0].baseName : reads.baseName}_hic" } } withName: 'BUILD_FASTK_HIFI_DATABASE:FASTK_MERGE' { @@ -96,6 +96,7 @@ process { // COMPARE_LIBRARIES withName: 'MERQURYFK_KATCOMP' { + ext.prefix = { "${meta.id}_katcomp" } publishDir = [ path: { "$params.outdir/$stage.inspect/kat_comp" }, mode: params.publish_mode, @@ -174,7 +175,7 @@ process { // COMPARE_ASSEMBLIES withName: 'QUAST' { - cpus = { Math.min(6, consensus instanceof List ? consensus.size() : 1 ) } + ext.prefix = { "${meta.id}_quast_report" } publishDir = [ path: { "$params.outdir/$stage.assembly/quast" }, mode: params.publish_mode, @@ -185,7 +186,7 @@ process { // EVALUATE_RAW_ASSEMBLY withName: 'EVALUATE_RAW_ASSEMBLY:MERQURYFK_MERQURYFK' { tag = { meta.assembly.build } - ext.prefix = { meta.assembly.build } + ext.prefix = { "${meta.assembly.build}_merquryfk" } publishDir = [ path: { "$params.outdir/$stage.assembly/merquryfk/$meta.assembly.build" }, mode: params.publish_mode, @@ -194,7 +195,7 @@ process { } withName: 'EVALUATE_RAW_ASSEMBLY:MERQURY' { tag = { meta.assembly.build } - ext.prefix = { meta.assembly.build } + ext.prefix = { "${meta.assembly.build}_merqury" } publishDir = [ path: { "$params.outdir/$stage.assembly/merqury/$meta.assembly.build" }, mode: params.publish_mode, @@ -210,13 +211,11 @@ process { mode: params.publish_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - time = 4.d } // FCS withName: 'FCSGX_FETCHDB' { storeDir = { params.cache } - time = 2.d } withName: 'FCSGX_RUNGX' { tag = { "${meta.assembly.build}-hap${meta.haplotype}" } @@ -226,9 +225,6 @@ process { mode: params.publish_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - cpus = 20 - memory = 1024.GB - time = 1.h } withName: 'FCSGX_CLEAN' { tag = { "${meta.assembly.build}-hap${meta.haplotype}" } @@ -257,7 +253,11 @@ process { // kmer coverage is very close to read coverage w.r.t long read sequencing. // kmer coverage is used as a proxy for read coverage here. // kmer coverage is extracted from the GenomeScope model when available. - ext.args = { meta.kmercov ? "-m ${meta.kmercov * 1.5} -u ${meta.kmercov * 3}" : "" } + ext.args = '' + // ext.args = { meta.kmercov ? "-m ${meta.kmercov * 1.5} -u ${meta.kmercov * 3}" : "" } + } + withName: 'PURGEDUPS_HISTPLOT' { + ext.prefix = { "${meta.id}_${meta.assembly.build}_purgedups_hist" } } withName: '(PURGEDUPS|MINIMAP2)_.*_PRIMARY' { ext.prefix = { "${meta.id}_${meta.assembly.build}_hap0" } @@ -281,7 +281,7 @@ process { // EVALUATE_PURGED_ASSEMBLY withName: 'EVALUATE_PURGED_ASSEMBLY:MERQURYFK_MERQURYFK' { tag = { meta.assembly.build } - ext.prefix = { meta.assembly.build } + ext.prefix = { "${meta.assembly.build}_merquryfk" } publishDir = [ path: { "$params.outdir/$stage.purge/merquryfk/$meta.assembly.build" }, mode: params.publish_mode, @@ -290,7 +290,7 @@ process { } withName: 'EVALUATE_PURGED_ASSEMBLY:MERQURY' { tag = { meta.assembly.build } - ext.prefix = { meta.assembly.build } + ext.prefix = { "${meta.assembly.build}_merqury" } publishDir = [ path: { "$params.outdir/$stage.purge/merqury/$meta.assembly.build" }, mode: params.publish_mode, @@ -306,7 +306,6 @@ process { mode: params.publish_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - time = 4.d } withName: 'STAR_ALIGN' { @@ -319,6 +318,198 @@ process { ] } + // scaffolding + withName: 'BWAMEM2_MEM_SCAFFOLD' { + ext.prefix = { "${meta.id}_${meta.assembly.build}_${reads.head().getBaseName(reads.head().name.endsWith(".gz") ? 2 : 1)}" } + ext.args = '-SP -T0' + ext.args2 = { sort_bam ? "--write-index" : "" } + } + + withName: 'PAIRTOOLS_PARSE' { + ext.prefix = { "${bam.getBaseName()}" } + ext.args = { "--min-mapq 20 --walks-policy 5unique --max-inter-align-gap 30" } + publishDir = [ + path: { "$params.outdir/$stage.scaffold/pairtools_parse/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*.pairsam.stat" + ] + } + + withName: 'PAIRTOOLS_SORT' { + ext.prefix = { "${input.getBaseName(2)}" } + ext.args = { '--tmpdir=\$PWD' } + } + + withName: 'PAIRTOOLS_MERGE' { + ext.prefix = { "${meta.id}_${meta.assembly.build}_merge" } + } + + withName: 'PAIRTOOLS_DEDUP' { + ext.prefix = { "${meta.id}_${meta.assembly.build}_dedup" } + ext.args = '--mark-dups' + publishDir = [ + path: { "$params.outdir/$stage.scaffold/pairtools_dedup/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*.pairs.stat" + ] + } + + withName: 'PAIRTOOLS_SPLIT' { + ext.prefix = { "${meta.id}_${meta.assembly.build}" } + ext.args2 = { sort_bam ? params.hic_bam_sorting == "by_coordinate" ? "--write-index" : "-n" : "" } + } + + withName: 'YAHS' { + ext.prefix = { "${meta.id}_${meta.assembly.build}" } + ext.args = { params.hic_type == "arima_v2" ? "-e GATC,GANTC,CTNAG,TTAA" : params.hic_type == "arima_v1" ? "-e GATC,GANTC" : "" } + publishDir = [ + path: { "$params.outdir/$stage.scaffold/yahs/$meta.assembly.build" }, + mode: params.publish_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + // scaffolding curation + withName: 'BWAMEM2_MEM_CURATION' { + ext.prefix = { "${meta.id}_${meta.assembly.build}_${reads.head().getBaseName(reads.head().name.endsWith(".gz") ? 2 : 1)}" } + ext.args = '-SP -T0' + ext.args2 = { sort_bam ? "--write-index" : "" } + } + + withName: 'FILTER_FIVE_END' { + ext.prefix = { "${bam.head().getBaseName(1)}_filt5prime" } + } + + withName: 'TWOREADCOMBINER_FIXMATE_SORT' { + ext.prefix = { "${bam.head().getBaseName(1)}" } + ext.args = { "${params.hic_map_qv}" } // min hic map quality + ext.args2 = '--write-index -l1' + } + + withName: 'SCAFFOLD_CURATION:SAMTOOLS_MERGE_(HIFI|HIC)' { + ext.prefix = { "${meta.assembly.build}_merged" } + ext.args = '--write-index' + } + + withName: 'SCAFFOLD_CURATION:BIOBAMBAM_BAMMARKDUPLICATES2' { + ext.prefix = { "${bam.getBaseName(1)}_dupMarked" } + } + + withName: 'SCAFFOLD_CURATION:BAM2BED_SORT' { + ext.prefix = { "${bam.head().getBaseName(1)}" } + ext.args = '-u -F0x400 -h' // arguments for samtools view + ext.args2 = '-S50G -T \$PWD' // arguments for sort + ext.args3 = { "${params.hic_map_qv}" } // min hic map quality + } + withName: 'SCAFFOLD_CURATION:COOLER_CLOAD' { + ext.prefix = { "${pairs.head().getBaseName(1)}" } + ext.args = 'pairs -0 -c1 2 -p1 3 -c2 4 -p2 5' + } + withName: 'SCAFFOLD_CURATION:COOLER_ZOOMIFY' { + ext.prefix = { "${cool.head().getBaseName(1)}" } + ext.args = '--resolutions 1000,5000,10000,20000,40000,60000,80000,100000,120000,150000,200000,300000,400000,500000' + publishDir = [ + path: { "$params.outdir/$stage.curate/higlass/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*.mcool" + ] + } + withName: 'SCAFFOLD_CURATION:PRETEXTMAP' { + ext.prefix = { "${input.head().getBaseName(1)}" } + ext.args = { "--sortby ${params.hic_map_sort_by} --mapq ${params.hic_map_qv} --highRes" } + } + withName: 'SCAFFOLD_CURATION:MINIMAP2_INDEX' { + ext.prefix = { "${meta.assembly.build}" } + ext.args = "-x map-hifi" + } + withName: 'SCAFFOLD_CURATION:MINIMAP2_ALIGN' { + ext.prefix = { "${meta.assembly.build}_${reads.getBaseName(reads.name.endsWith(".gz") ? 2 : 1)}" } + ext.args = "--MD -x map-hifi" + } + withName: 'SCAFFOLD_CURATION:BAM2COVERAGE_TRACKS' { + ext.prefix = { "${bam.head().getBaseName(1)}" } + ext.args = '' // samtools sort + ext.args2 = '-b -h -F 256' // samtools view + ext.args3 = '-bga -split' // genomeCoverageBed + //TODO use task2 + ext.args4 = { "-T \$PWD" } // sort + ext.args5 = '--no-header --method average' // clodius aggregate + publishDir = [ + path: { "$params.outdir/$stage.curate/higlass/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*.hitile" + ] + } + withName: 'SCAFFOLD_CURATION:SEQTK_CUTN' { + ext.prefix = { "${meta.assembly.build}" } + ext.args = "-n 1" + } + withName: 'SCAFFOLD_CURATION:CREATE_GAP_TRACKS' { + ext.prefix = { "${meta.assembly.build}" } + // ext.args = { "" } // sort + ext.args2 = '--no-header' // clodius aggregate + publishDir = [ + path: { "$params.outdir/$stage.curate/higlass/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*.beddb" + ] + } + withName: 'SCAFFOLD_CURATION:TIDK_SEARCH_BEDGRAPH' { + ext.prefix = { "${meta.assembly.build}_telomer" } + ext.args = { "--window 10000 --extension bedgraph" } // tidk search + } + withName: 'SCAFFOLD_CURATION:TIDK_SEARCH_TSV' { + ext.prefix = { "${meta.assembly.build}_telomer" } + ext.args = { "--window 10000 --extension tsv" } // tidk search + } + withName: 'SCAFFOLD_CURATION:CREATE_TELOMER_BIGWIG_TRACK' { + ext.prefix = { "${meta.assembly.build}" } + ext.args = '' // sort + ext.args2 = '--no-header' // clodius aggregate bedgraph + publishDir = [ + path: { "$params.outdir/$stage.curate/higlass/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*.bw" + ] + } + withName: 'SCAFFOLD_CURATION:PRETEXT_TRACKS_INGESTION' { + ext.prefix = { "${meta.assembly.build}" } + publishDir = [ + path: { "$params.outdir/$stage.curate/pretext/$meta.assembly.build" }, + mode: params.publish_mode, + pattern: "*_wTracks.pretext" + ] + } + + withName: 'EVALUATE_SCAFFOLDED_ASSEMBLY:MERQURYFK_MERQURYFK' { + tag = { meta.assembly.build } + ext.prefix = { "${meta.assembly.build}_merquryfk" } + publishDir = [ + path: { "$params.outdir/$stage.scaffold/merquryfk/$meta.assembly.build" }, + mode: params.publish_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'EVALUATE_SCAFFOLDED_ASSEMBLY:MERQURY' { + tag = { meta.assembly.build } + ext.prefix = { "${meta.assembly.build}_merqury" } + publishDir = [ + path: { "$params.outdir/$stage.scaffold/merqury/$meta.assembly.build" }, + mode: params.publish_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'EVALUATE_SCAFFOLDED_ASSEMBLY:BUSCO' { + tag = { "${meta.assembly.build}-${lineage}" } + ext.prefix = { "${meta.assembly.build}-${lineage}" } + ext.args = '--tar' + publishDir = [ + path: { "$params.outdir/$stage.scaffold/busco/$meta.assembly.build" }, + mode: params.publish_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + // Assembly report withName: 'TOL_SEARCH' { executor = 'local' @@ -332,19 +523,24 @@ process { withName: 'REPORT_SOFTWAREVERSIONS' { executor = 'local' } - withName: 'QUARTO' { - ext.args = '-P image_path:data' - ext.prefix = { "${notebook.baseName}_mqc" } - stageInMode = 'copy' - time = 15.m - } - withName: 'MULTIQC' { + withName: 'ASSEMBLY_REPORT:QUARTO_NOTEBOOK' { publishDir = [ path: { "$params.outdir/$stage.report" }, mode: params.publish_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + overwrite: true ] - time = 30.m } - + // withName: 'QUARTO' { + // ext.args = '-P image_path:data' + // ext.prefix = { "${notebook.baseName}_mqc" } + // stageInMode = 'copy' + // } + // withName: 'MULTIQC' { + // publishDir = [ + // path: { "$params.outdir/$stage.report" }, + // mode: params.publish_mode, + // saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + // ] + // } } diff --git a/configs/multiqc_summary_report_config.yml b/configs/multiqc_assembly_report_config.yml similarity index 83% rename from configs/multiqc_summary_report_config.yml rename to configs/multiqc_assembly_report_config.yml index a000ecaa..86ac9b66 100644 --- a/configs/multiqc_summary_report_config.yml +++ b/configs/multiqc_assembly_report_config.yml @@ -1,10 +1,10 @@ -title: "BGE Assembly Report" -output_fn_name: BGE_assembly_multiqc_report.html +title: "Assembly Summary" +output_fn_name: multiqc-summary.html intro_text: | - An assembly report for the BGE project. + An assembly summary report for the BGE project. ignore_images: false -disable_version_detection: true +# disable_version_detection: true module_order: - "dtol" @@ -38,10 +38,12 @@ custom_data: section_name: "GenomeScope2" description: "Sample data k-mer histogram." ploidyplot: + id: "ploidyplot" file_format: "png" section_name: "Ploidy Plot" description: "Ploidy estimate based on kmers." katgc: + id: "katgc" file_format: "png" section_name: "GC Content" description: "Sequence GC content." @@ -55,3 +57,5 @@ sp: # Search pattern fn: "*_ploidyplot.st.png" katgc: fn: "*_katgc.st.png" + quast: + fn: "*_quast_report.tsv" diff --git a/configs/nac.config b/configs/nac.config index f6646d36..87055f28 100644 --- a/configs/nac.config +++ b/configs/nac.config @@ -1,4 +1,31 @@ +includeConfig 'tool_resources.config' + process { + // resource limits are based on most nodes of the abc partition on nac: + // 15 CfgTRES=cpu=16,mem=120G,billing=16 + // 3 CfgTRES=cpu=36,mem=375G,billing=36 + // MaxTime=30-00:00:00 + // Processes that require more resources need to explicitly overwrite it + resourceLimits = [ + memory: 120.GB, + cpus: 16, + time: 30.d + ] + // all processes that need more than the default resources need to be added here: + // BUT the nac cluster does not have a single node with enough storage -> this + // results in a very long runtime due swapping issues, but in principle it should run + withName: 'FCSGX_RUNGX' { + cpus = 16 + memory = 370.GB + time = 30.d + resourceLimits = [ + cpus: 16, + memory: 370.GB, + time: 30.d + ] + } + + executor = 'slurm' scratch = '/scratch' } diff --git a/configs/test.config b/configs/test.config new file mode 100644 index 00000000..282b61f8 --- /dev/null +++ b/configs/test.config @@ -0,0 +1,61 @@ +// Test config - Tiny dataset +resume = true + +params { + input = "$projectDir/tests/data/tiny/test_ci_Dmelanogaster.yml" + steps = 'inspect,preprocess,assemble,purge,polish,scaffold,curate' + outdir = "results" + fastk.kmer_size = 14 + meryl.kmer_size = 14 + genescopefk.kmer_size = 14 + busco.lineages = 'bacteria_odb10' //eukaryota_odb10' + organelle_assembly_mode = 'none' +} + +process { + cpus = 1 + memory = 6.GB + time = 10.m + resourceLimits = [ + cpus: 10, + memory: 32.GB, + time: 1.h + ] + + withLabel: process_low { + cpus = 2 + memory = 6.GB + time = 10.m + } + withLabel: process_medium { + cpus = 6 + memory = 12.GB + time = 30.m + } + withLabel: process_high { + cpus = 10 + memory = 32.GB + time = 1.h + } + withLabel: process_long { + time = 1.h + } + withLabel: process_high_memory { + memory = 32.GB + } + + withName: 'PRETEXTMAP' { + cpus = 4 + memory = 10.GB + time = 1.h + ext.args = { "--sortby ${params.hic_map_sort_by} --mapq ${params.hic_map_qv}" } + } + + withName: 'ASSEMBLE:ASSEMBLE_HIFI:HIFIASM' { + ext.args = { '-f 0' } + } + + // withName: 'ASSEMBLY_REPORT:QUARTO' { + // containerOptions = { 'docker' in workflow.profile.tokenize(',')? '--platform=linux/amd64' : '' } + // } +} diff --git a/configs/tool_resources.config b/configs/tool_resources.config new file mode 100644 index 00000000..61b646b2 --- /dev/null +++ b/configs/tool_resources.config @@ -0,0 +1,171 @@ +// CUSTOM Resource allocations +process { + // COMPARE_ASSEMBLIES + withName: 'QUAST' { + cpus = { Math.min(6, consensus instanceof List ? consensus.size() : 1 ) } + } + + // EVALUATE ASSEMBLIES + withName: 'BUSCO' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 4.d : 2.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 40 : 30 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 230.GB : 128.GB } + } + + // FCS + withName: 'FCSGX_FETCHDB' { + time = 2.d + } + + withName: 'FCSGX_RUNGX' { + cpus = 20 + memory = 1024.GB + time = 1.h + } + + // scaffolding - pairtools parse + // runs single threaded but uses 3 decompression and 8 compression threads by default + // the runtime heavily depends on the HiC file and potentially on IO-load + withName: 'PAIRTOOLS_PARSE' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 7.d : 2.d } + cpus = 12 + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 128.GB : 64.GB } + } + + withName: 'PAIRTOOLS_SORT' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 7.d : 2.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 32 : 16 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 230.GB : 128.GB } + } + + withName: 'PAIRTOOLS_MERGE' { + time = 1.d + cpus = { allpairs.size() } + memory = { "${allpairs.size() * 2} GB" } + } + + withName: 'PAIRTOOLS_DEDUP' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.d : 1.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 16 : 12 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 128.GB : 64.GB } + } + + withName: 'PAIRTOOLS_SPLIT' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.d : 1.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 32 : 16 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 128.GB : 64.GB } + } + + withName: 'YAHS' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 12.h : 8.h } + cpus = 1 + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 96.GB : 12.GB } + } + + withName: 'FASTK_FASTK' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.d : 1.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 72 : 36 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 72.GB : 36.GB } + } + + withName: 'FASTK_MERGE' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 1.d : 8.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 72 : 36 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 96.GB : 30.GB } + } + + withName: 'MERYL_COUNT' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.d : 1.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 72 : 24 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 288.GB : 96.GB } + } + // MERYL_UNIONSUM does not scale well with more threads + withName: 'MERYL_UNIONSUM' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 12.h : 8.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 48 : 16 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 96.GB : 64.GB } + } + + withName: 'MERQURY' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 12.h : 8.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 48 : 16 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 128.GB : 96.GB } + } + + withName: 'MERQURYFK_MERQURYFK' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 8.h : 4.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 64 : 32 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 96.GB : 64.GB } + } + + withName: 'MERQURYFK_PLOIDYPLOT' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 8.h : 4.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 96 : 64 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 192.GB : 96.GB } + } + + withName: 'MINIMAP2_ALIGN_READS' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 1.d : 12.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 64 : 32 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 64.GB : 32.GB } + } + + withName: 'MINIMAP2_ALIGN_ASSEMBLY_PRIMARY' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.d : 1.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 64 : 32 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 128.GB : 64.GB } + } + + withName: 'BWAMEM2_INDEX' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 1.d : 12.h } + cpus = 1 + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 256.GB : 60.GB } + } + + withName: 'BWAMEM2_MEM' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 1.d : 12.h } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 96 : 64 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 596.GB : 120.GB } + } + + withName: 'HIFIASM' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.d : 1.d } + cpus = { meta.sample.genome_size.toInteger() > 3000000000 ? 96 : 46 } + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 596.GB : 128.GB } + } + + withName: 'PURGEDUPS_PURGEDUPS_PRIMARY' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 12.h : 8.h } + cpus = 1 + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 256.GB : 30.GB } + } + + withName: 'PURGEDUPS_PBCSTAT' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 2.h : 1.h } + cpus = 1 + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 16.GB : 8.GB } + } + // scales linearly with genome size + withName: 'GFASTATS' { + time = { meta.sample.genome_size.toInteger() > 3000000000 ? 4.h : 1.h } + cpus = 1 + memory = { meta.sample.genome_size.toInteger() > 3000000000 ? 64.GB : 8.GB } + } + + withName: 'SCAFFOLD_CURATION:SAMTOOLS_MERGE_(HIFI|HIC)' { + cpus = 8 + memory = 10.GB + } + + withName: 'PRETEXTMAP' { + memory = 30.GB + } + + // Assembly report + withName: 'QUARTO' { + time = 15.m + } + withName: 'MULTIQC' { + time = 30.m + } +} diff --git a/configs/uppmax.config b/configs/uppmax.config index eb489c98..a7c04def 100644 --- a/configs/uppmax.config +++ b/configs/uppmax.config @@ -2,15 +2,37 @@ params { // SNIC compute allocation id project = '' } + +includeConfig 'tool_resources.config' + process { + // resource limits are based on most nodes of the core partition on Uppmax rackham: + // CfgTRES=cpu=20,mem=125G,billing=20 + // and + // CfgTRES=cpu=16,mem=249611M,billing=16 + // MaxTime=10-00:00:00 + // Processes that require more resources need to explicitly overwrite it, + // and use other partitions: e.g. veryfat on SNOWY, or via e.g -C mem1TB + resourceLimits = [ + memory: 125.GB, + cpus: 16, + time: 10.d + ] + // all processes that need more than the default resources need to be added here: + withName: 'FCSGX_RUNGX' { + time = 1.h + clusterOptions = { "-A $params.project -p node -C mem1TB" } + resourceLimits = [ + cpus: 16, + memory: 1024.GB, + time: 1.h + ] + } + executor = 'slurm' clusterOptions = { "-A $params.project" } // Use node local storage for execution. scratch = '$SNIC_TMP' - - withName: 'FCSGX_RUNGX' { - clusterOptions = { "-A $params.project -C mem1TB" } - } } singularity { enabled = true diff --git a/main.nf b/main.nf index 4e7067fe..a8aaf84b 100644 --- a/main.nf +++ b/main.nf @@ -1,8 +1,5 @@ #! /usr/bin/env nextflow -// Include Map.deepMerge() function -evaluate(new File("$projectDir/lib/MapExtended.groovy")) - include { combineByMetaKeys } from "$projectDir/modules/local/functions" include { assembliesFromStage as preassembledInput } from "$projectDir/modules/local/functions" include { setAssemblyStage } from "$projectDir/modules/local/functions" @@ -27,6 +24,11 @@ include { PURGE_DUPLICATES } from "$projectDir/subworkflows/local/purge_dups/mai include { EVALUATE_ASSEMBLY as EVALUATE_PURGED_ASSEMBLY } from "$projectDir/subworkflows/local/evaluate_assembly/main" +include { SCAFFOLD } from "$projectDir/subworkflows/local/scaffold/main.nf" +include { EVALUATE_ASSEMBLY as EVALUATE_SCAFFOLDED_ASSEMBLY } from "$projectDir/subworkflows/local/evaluate_assembly/main" + +include { SCAFFOLD_CURATION } from "$projectDir/subworkflows/local/scaffold_curation/main.nf" + include { ALIGN_RNASEQ } from "$projectDir/subworkflows/local/align_rnaseq/main" include { ASSEMBLY_REPORT } from "$projectDir/subworkflows/local/assembly_report/main" @@ -37,6 +39,8 @@ include { ASSEMBLY_REPORT } from "$projectDir/subworkflows/local/assembly_report */ workflow { + // Include Map.deepMerge() function + new GroovyShell().evaluate(new File("$projectDir/lib/MapExtended.groovy")) // Define constants def workflow_permitted_stages = [ @@ -63,8 +67,8 @@ workflow { """) // Setup sink channels - ch_multiqc_files = Channel.empty() - ch_quarto_files = Channel.empty() + ch_multiqc_files = Channel.value( file(params.multiqc_assembly_report_config, checkIfExists: true) ) + // ch_quarto_files = Channel.empty() ch_versions = Channel.empty() // Read in data @@ -93,7 +97,6 @@ workflow { ) ch_hifi = INSPECT_DATA.out.hifi // with added kmer coverage ch_multiqc_files = ch_multiqc_files.mix( INSPECT_DATA.out.logs ) - ch_quarto_files = ch_quarto_files.mix( INSPECT_DATA.out.quarto_files ) ch_versions = ch_versions.mix( INSPECT_DATA.out.versions ) } @@ -110,6 +113,8 @@ workflow { // Run assemblers ASSEMBLE ( PREPARE_INPUT.out.hifi_merged ) ch_raw_assemblies = ch_raw_assemblies.mix( ASSEMBLE.out.raw_assemblies ) + ch_multiqc_files = ch_multiqc_files.mix( ASSEMBLE.out.logs ) + ch_versions = ch_versions.mix( ASSEMBLE.out.versions ) } else { // Nothing more than evaluate } @@ -162,6 +167,8 @@ workflow { ch_hifi ) ch_purged_assemblies = PURGE_DUPLICATES.out.assemblies + ch_multiqc_files = ch_multiqc_files.mix( PURGE_DUPLICATES.out.logs ) + ch_versions = ch_versions.mix( PURGE_DUPLICATES.out.versions ) } else { ch_purged_assemblies = ch_to_purge } @@ -197,14 +204,26 @@ workflow { 'scaffolded' // Set assembly stage now for filenaming ).dump(tag: 'Assemblies: to scaffold') if ( 'scaffold' in workflow_steps ) { - // Run scaffolder - ch_scaffolded_assemblies = ch_to_scaffold + SCAFFOLD ( + ch_to_scaffold, + PREPARE_INPUT.out.hic + ) + ch_scaffolded_assemblies = SCAFFOLD.out.assemblies + ch_multiqc_files = ch_multiqc_files.mix( SCAFFOLD.out.logs ) + ch_versions = ch_versions.mix( SCAFFOLD.out.versions ) } else { ch_scaffolded_assemblies = ch_to_scaffold } ch_scaffolded_assemblies = ch_scaffolded_assemblies.mix( preassembledInput( PREPARE_INPUT.out.assemblies, 'scaffolded' ) ).dump(tag: 'Assemblies: Scaffolded') + EVALUATE_SCAFFOLDED_ASSEMBLY ( + ch_scaffolded_assemblies, + BUILD_FASTK_HIFI_DATABASE.out.fastk_hist_ktab, + BUILD_MERYL_HIFI_DATABASE.out.uniondb + ) + ch_multiqc_files = ch_multiqc_files.mix( EVALUATE_SCAFFOLDED_ASSEMBLY.out.logs ) + ch_versions = ch_versions.mix( EVALUATE_SCAFFOLDED_ASSEMBLY.out.versions ) // Curate ch_to_curate = setAssemblyStage ( @@ -212,14 +231,19 @@ workflow { 'curated' // Set assembly stage now for filenaming ).dump(tag: 'Assemblies: to curate') if ( 'curate' in workflow_steps ) { - // Run assemblers - ch_curated_assemblies = ch_to_curate + SCAFFOLD_CURATION ( + ch_scaffolded_assemblies, + PREPARE_INPUT.out.hic, + PREPARE_INPUT.out.hifi + ) + ch_versions = ch_versions.mix( SCAFFOLD_CURATION.out.versions ) } else { ch_curated_assemblies = ch_to_curate } - ch_curated_assemblies = ch_curated_assemblies.mix( - preassembledInput( PREPARE_INPUT.out.assemblies, 'curated' ) - ).dump(tag: 'Assemblies: Curated') + // TODO: output needs to be defined + //ch_curated_assemblies = ch_curated_assemblies.mix( + // preassembledInput( PREPARE_INPUT.out.assemblies, 'curated' ) + //).dump(tag: 'Assemblies: Curated') // Align RNAseq if( 'alignRNA' in workflow_steps ) { @@ -231,29 +255,30 @@ workflow { } ASSEMBLY_REPORT( - PREPARE_INPUT.out.sample_meta, + PREPARE_INPUT.out.sample_meta.map{ meta -> [ meta, file(params.quarto_assembly_report, checkIfExists: true) ] }, ch_multiqc_files, - ch_quarto_files, - ch_versions + ch_versions, + [ diagnostics: "debug" in workflow.profile.tokenize(",") ] + + workflow_permitted_stages.collectEntries{ step -> [(step): step in params.steps.tokenize(",")] } ) -} - -workflow.onComplete { - if( workflow.success ){ - log.info(""" - Thank you for using the NBIS Earth Biogenome Project Assembly workflow. - The workflow completed successfully. - Results are located in the folder: $params.outdir - """) - } else { - log.info(""" - Thank you for using the NBIS Earth Biogenome Project Assembly workflow. - The workflow completed unsuccessfully. - - Please read over the error message. If you are unable to solve it, please - post an issue at https://github.com/NBISweden/Earth-Biogenome-Project-pilot/issues - where we will do our best to help. - """) + workflow.onComplete = { + if( workflow.success ){ + log.info(""" + Thank you for using the NBIS Earth Biogenome Project Assembly workflow. + The workflow completed successfully. + + Results are located in the folder: $params.outdir + """) + } else { + log.info(""" + Thank you for using the NBIS Earth Biogenome Project Assembly workflow. + The workflow completed unsuccessfully. + + Please read over the error message. If you are unable to solve it, please + post an issue at https://github.com/NBISweden/Earth-Biogenome-Project-pilot/issues + where we will do our best to help. + """) + } } } diff --git a/modules.json b/modules.json index 8a93ab4b..eb79255a 100644 --- a/modules.json +++ b/modules.json @@ -1,217 +1,451 @@ { - "name": "Earth Biogenome Project Assembly and Annotation workflow", - "homePage": "https://github.com/NBISweden/Earth-Biogenome-Project-pilot", - "repos": { - "https://github.com/nf-core/modules.git": { - "modules": { - "nf-core": { - "busco": { - "branch": "master", - "git_sha": "5892730425a245e4830124f8429c011d18a562a5", - "installed_by": ["modules"] - }, - "cat/cat": { - "branch": "master", - "git_sha": "81f27e75847087865299cc46605deb3b09b4e0a2", - "installed_by": ["modules"] - }, - "fastk/fastk": { - "branch": "master", - "git_sha": "29e87a37ae1887fc8289f2f56775604a71715cb9", - "installed_by": ["modules"] - }, - "fastk/histex": { - "branch": "master", - "git_sha": "ed67f2fadd6d2a155b296f728e6b1f8c92ddc1a6", - "installed_by": ["modules"] - }, - "fastk/merge": { - "branch": "master", - "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", - "installed_by": ["modules"] - }, - "fcs/fcsadaptor": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "fcs/fcsgx": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "genescopefk": { - "branch": "master", - "git_sha": "3f908700a03ca2fa388f794914f89be977ce5740", - "installed_by": ["modules"] - }, - "genomescope2": { - "branch": "master", - "git_sha": "c95215baf20e6d8cf2ae0e8411d03c5d9ef21d4a", - "installed_by": ["modules"] - }, - "gfastats": { - "branch": "master", - "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"] - }, - "goat/taxonsearch": { - "branch": "master", - "git_sha": "f06ea9b058c2e4af141245ccff58ea5f65808d1a", - "installed_by": ["modules"] - }, - "hifiasm": { - "branch": "master", - "git_sha": "daa15d5226111e10ca95c0d4a85fa6bd11a08a01", - "installed_by": ["modules"] - }, - "kraken2/kraken2": { - "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"] - }, - "mash/screen": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "merqury": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "merquryfk/katcomp": { - "branch": "master", - "git_sha": "6f150e1503c0826c21fedf1fa566cdbecbe98ec7", - "installed_by": ["modules"] - }, - "merquryfk/katgc": { - "branch": "master", - "git_sha": "6f150e1503c0826c21fedf1fa566cdbecbe98ec7", - "installed_by": ["modules"] - }, - "merquryfk/ploidyplot": { - "branch": "master", - "git_sha": "ebb27711cd5f4de921244bfa81c676504072d31c", - "installed_by": ["modules"] - }, - "meryl/count": { - "branch": "master", - "git_sha": "2910aa889fd3497727d87854148a0e0aa1105da3", - "installed_by": ["modules"] - }, - "meryl/histogram": { - "branch": "master", - "git_sha": "c95215baf20e6d8cf2ae0e8411d03c5d9ef21d4a", - "installed_by": ["modules"] - }, - "meryl/unionsum": { - "branch": "master", - "git_sha": "b7f584e61c35c138a5717f837f4da9b838e290a7", - "installed_by": ["modules"] - }, - "minimap2/align": { - "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"] - }, - "mitohifi/findmitoreference": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "mitohifi/mitohifi": { - "branch": "master", - "git_sha": "5bcbc0c522879ba15a224eb06cd42e6c46932545", - "installed_by": ["modules"], - "patch": "modules/nf-core/mitohifi/mitohifi/mitohifi-mitohifi.diff" - }, - "multiqc": { - "branch": "master", - "git_sha": "ccacf6f5de6df3bc6d73b665c1fd2933d8bbc290", - "installed_by": ["modules"] - }, - "pilon": { - "branch": "master", - "git_sha": "240937a2a9c30298110753292be041188891f2cb", - "installed_by": ["modules"] - }, - "purgedups/calcuts": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "purgedups/getseqs": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "purgedups/histplot": { - "branch": "master", - "git_sha": "d449de9e062dd159ff8c802709d3c5ab06ce6789", - "installed_by": ["modules"] - }, - "purgedups/pbcstat": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "purgedups/purgedups": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "purgedups/splitfa": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"], - "patch": "modules/nf-core/purgedups/splitfa/purgedups-splitfa.diff" - }, - "quast": { - "branch": "master", - "git_sha": "344638191a5d6b3526556410819dfcf24e98039e", - "installed_by": ["modules"], - "patch": "modules/nf-core/quast/quast.diff" - }, - "racon": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "salsa2": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "seqkit/seq": { - "branch": "master", - "git_sha": "2be41ca2cc780eca4293d1b0dd3850b0b7ac40a3", - "installed_by": ["modules"] - }, - "star/align": { - "branch": "master", - "git_sha": "cc08a888069f67cab8120259bddab8032d4c0fe3", - "installed_by": ["modules"], - "patch": "modules/nf-core/star/align/star-align.diff" - }, - "star/genomegenerate": { - "branch": "master", - "git_sha": "cc08a888069f67cab8120259bddab8032d4c0fe3", - "installed_by": ["modules"], - "patch": "modules/nf-core/star/genomegenerate/star-genomegenerate.diff" - }, - "untar": { - "branch": "master", - "git_sha": "e719354ba77df0a1bd310836aa2039b45c29d620", - "installed_by": ["modules"] - }, - "yahs": { - "branch": "master", - "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"] - } + "name": "Earth Biogenome Project Assembly and Annotation workflow", + "homePage": "https://github.com/NBISweden/Earth-Biogenome-Project-pilot", + "repos": { + "https://github.com/nf-core/modules.git": { + "modules": { + "nf-core": { + "biobambam/bammarkduplicates2": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "busco": { + "branch": "master", + "git_sha": "5892730425a245e4830124f8429c011d18a562a5", + "installed_by": [ + "modules" + ] + }, + "bwamem2/index": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ] + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ] + }, + "cat/cat": { + "branch": "master", + "git_sha": "81f27e75847087865299cc46605deb3b09b4e0a2", + "installed_by": [ + "modules" + ] + }, + "cooler/cload": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "cooler/zoomify": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "fastk/fastk": { + "branch": "master", + "git_sha": "29e87a37ae1887fc8289f2f56775604a71715cb9", + "installed_by": [ + "modules" + ] + }, + "fastk/histex": { + "branch": "master", + "git_sha": "ed67f2fadd6d2a155b296f728e6b1f8c92ddc1a6", + "installed_by": [ + "modules" + ] + }, + "fastk/merge": { + "branch": "master", + "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", + "installed_by": [ + "modules" + ] + }, + "fcs/fcsadaptor": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": [ + "modules" + ] + }, + "fcs/fcsgx": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": [ + "modules" + ] + }, + "genescopefk": { + "branch": "master", + "git_sha": "3f908700a03ca2fa388f794914f89be977ce5740", + "installed_by": [ + "modules" + ] + }, + "genomescope2": { + "branch": "master", + "git_sha": "c95215baf20e6d8cf2ae0e8411d03c5d9ef21d4a", + "installed_by": [ + "modules" + ] + }, + "gfastats": { + "branch": "master", + "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", + "installed_by": [ + "modules" + ] + }, + "goat/taxonsearch": { + "branch": "master", + "git_sha": "f06ea9b058c2e4af141245ccff58ea5f65808d1a", + "installed_by": [ + "modules" + ] + }, + "hifiasm": { + "branch": "master", + "git_sha": "daa15d5226111e10ca95c0d4a85fa6bd11a08a01", + "installed_by": [ + "modules" + ] + }, + "kraken2/kraken2": { + "branch": "master", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "installed_by": [ + "modules" + ] + }, + "mash/screen": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "merqury": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": [ + "modules" + ] + }, + "merquryfk/katcomp": { + "branch": "master", + "git_sha": "6f150e1503c0826c21fedf1fa566cdbecbe98ec7", + "installed_by": [ + "modules" + ] + }, + "merquryfk/katgc": { + "branch": "master", + "git_sha": "6f150e1503c0826c21fedf1fa566cdbecbe98ec7", + "installed_by": [ + "modules" + ] + }, + "merquryfk/merquryfk": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff" + }, + "merquryfk/ploidyplot": { + "branch": "master", + "git_sha": "ebb27711cd5f4de921244bfa81c676504072d31c", + "installed_by": [ + "modules" + ] + }, + "meryl/count": { + "branch": "master", + "git_sha": "2910aa889fd3497727d87854148a0e0aa1105da3", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/meryl/count/meryl-count.diff" + }, + "meryl/histogram": { + "branch": "master", + "git_sha": "c95215baf20e6d8cf2ae0e8411d03c5d9ef21d4a", + "installed_by": [ + "modules" + ] + }, + "meryl/unionsum": { + "branch": "master", + "git_sha": "b7f584e61c35c138a5717f837f4da9b838e290a7", + "installed_by": [ + "modules" + ] + }, + "minimap2/align": { + "branch": "master", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "installed_by": [ + "modules" + ] + }, + "minimap2/index": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "mitohifi/findmitoreference": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": [ + "modules" + ] + }, + "mitohifi/mitohifi": { + "branch": "master", + "git_sha": "5bcbc0c522879ba15a224eb06cd42e6c46932545", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/mitohifi/mitohifi/mitohifi-mitohifi.diff" + }, + "multiqc": { + "branch": "master", + "git_sha": "ccacf6f5de6df3bc6d73b665c1fd2933d8bbc290", + "installed_by": [ + "modules" + ] + }, + "pairix": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ] + }, + "pairtools/dedup": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/pairtools/dedup/pairtools-dedup.diff" + }, + "pairtools/merge": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/pairtools/merge/pairtools-merge.diff" + }, + "pairtools/parse": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/pairtools/parse/pairtools-parse.diff" + }, + "pairtools/select": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ] + }, + "pairtools/sort": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/pairtools/sort/pairtools-sort.diff" + }, + "pairtools/split": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/pairtools/split/pairtools-split.diff" + }, + "pilon": { + "branch": "master", + "git_sha": "240937a2a9c30298110753292be041188891f2cb", + "installed_by": [ + "modules" + ] + }, + "pretextmap": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "purgedups/calcuts": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "purgedups/getseqs": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "purgedups/histplot": { + "branch": "master", + "git_sha": "d449de9e062dd159ff8c802709d3c5ab06ce6789", + "installed_by": [ + "modules" + ] + }, + "purgedups/pbcstat": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "purgedups/purgedups": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "purgedups/splitfa": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/purgedups/splitfa/purgedups-splitfa.diff" + }, + "quast": { + "branch": "master", + "git_sha": "344638191a5d6b3526556410819dfcf24e98039e", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/quast/quast.diff" + }, + "racon": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "salsa2": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": [ + "modules" + ] + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ] + }, + "samtools/merge": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": [ + "modules" + ] + }, + "samtools/sort": { + "branch": "master", + "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", + "installed_by": [ + "modules" + ] + }, + "seqkit/seq": { + "branch": "master", + "git_sha": "2be41ca2cc780eca4293d1b0dd3850b0b7ac40a3", + "installed_by": [ + "modules" + ] + }, + "seqtk/cutn": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "star/align": { + "branch": "master", + "git_sha": "cc08a888069f67cab8120259bddab8032d4c0fe3", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/star/align/star-align.diff" + }, + "star/genomegenerate": { + "branch": "master", + "git_sha": "cc08a888069f67cab8120259bddab8032d4c0fe3", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/star/genomegenerate/star-genomegenerate.diff" + }, + "tidk/plot": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "tidk/search": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, + "untar": { + "branch": "master", + "git_sha": "e719354ba77df0a1bd310836aa2039b45c29d620", + "installed_by": [ + "modules" + ] + }, + "yahs": { + "branch": "master", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": [ + "modules" + ] + } + } + } } - } } - } -} +} \ No newline at end of file diff --git a/modules/local/functions.nf b/modules/local/functions.nf index 72d383e2..ff842865 100644 --- a/modules/local/functions.nf +++ b/modules/local/functions.nf @@ -130,7 +130,7 @@ Example: PROCESSA.out.fasta // contains [ meta, 'assembler-stage-uuid-hap0.fasta' ] and [ meta, 'assembler-stage-uuid-hap1.fasta'] .set { processed_assemblies } -output_assembly_ch = constructAssemblyRecord ( processed_assemblies ) +output_assembly_ch = constructAssemblyRecord ( processed_assemblies, sort_by_name ) The output is the map: [ @@ -145,8 +145,8 @@ The output is the map: ] ] */ -def constructAssemblyRecord( assemblies ) { - assemblies.groupTuple( sort: { a, b -> a.name <=> b.name } ) +def constructAssemblyRecord( assemblies, Boolean byName ) { + assemblies.groupTuple( sort: byName? { a, b -> a.name <=> b.name }: { a, b -> b.name <=> a.name } ) .map { meta, fasta -> def asm_meta = meta.assembly.subMap(['assembler','stage','id','build']) [ meta, asm_meta + (fasta.size() == 1 ? [ pri_fasta: fasta[0] ] : [ pri_fasta: fasta[0], alt_fasta: fasta[1] ] ) ] diff --git a/modules/local/hic_curation/bam2bed_sort.nf b/modules/local/hic_curation/bam2bed_sort.nf new file mode 100644 index 00000000..a9b2577b --- /dev/null +++ b/modules/local/hic_curation/bam2bed_sort.nf @@ -0,0 +1,42 @@ +// Portions of this code adapted from Sanger Institute's "curationpretext" (https://github.com/sanger-tol/curationpretext) +// and from https://github.com/MartinPippel/DAMARVEL/blob/master-v1/scripts/createHiCPlans.sh +process BAM2BED_SORT { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/bedtools_samtools_pip_awk:61be4cfccef27592" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.pairs") , emit: pairs + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def args3 = task.ext.args3 ?: '1' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + samtools view -@$task.cpus $args ${bam} | \\ + bamToBed | \\ + sort -k4 --parallel=$task.cpus $args2 | \\ + paste -d '\t' - - | \\ + awk -v q=$args3 'BEGIN {FS=\"\t\"; OFS=\"\t\"} { if(int(\$5) >= int(q) && int(\$11) >= int(q)) { if (\$1 > \$7) { print substr(\$4,1,length(\$4)-2),\$7,\$8,\$1,\$2,\$12,\$6,\"UU\"} else { print substr(\$4,1,length(\$4)-2),\$1,\$2,\$7,\$8,\$6,\$12,\"UU\"} } }' | \\ + sort -k2,2V -k4,4V -k3,3n -k5,5n --parallel=$task.cpus $args2 > ${prefix}.pairs + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + bedtools: \$(echo \$(bedtools --version 2>&1) | sed 's/^.*bedtools //') + paste: \$(echo \$(paste --version 2>&1) | head -n 1 | sed 's/^.*paste //; s/Copyright.*\$//') + sort: \$(echo \$(sort --version 2>&1) | head -n 1 | sed 's/^.*sort //; s/Copyright.*\$//') + awk: \$(echo \$(awk --version 2>&1) | head -n 1 | sed 's/Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/bam2coverageTracks.nf b/modules/local/hic_curation/bam2coverageTracks.nf new file mode 100644 index 00000000..04f4997c --- /dev/null +++ b/modules/local/hic_curation/bam2coverageTracks.nf @@ -0,0 +1,51 @@ +process BAM2COVERAGE_TRACKS { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/bedtools_samtools_ucsc-bedgraphtobigwig:ba8edacb0d7bff96" + + input: + tuple val(meta), path(bam) + path(chrom_sizes) + val(hifi_coverage_cap) + + output: + tuple val(meta), path("*_coverage.bed") , emit: bed + tuple val(meta), path("*_coverage.bw") , emit: bigwig + tuple val(meta), path("*_coverage_capped.bed") , emit: capped_bed + tuple val(meta), path("*_coverage_capped.bw") , emit: capped_bigwig + + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def args3 = task.ext.args3 ?: '' + def args4 = task.ext.args4 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + # convert bam to sorted bed + samtools sort -@ $task.cpus $args ${bam} | \\ + samtools view -@ $task.cpus $args2 - | \\ + genomeCoverageBed $args3 -ibam - | \\ + sort -k1,1 -k2,2n --parallel=${task.cpus} $args4 > ${prefix}_coverage.bed + # convert bed to bigwig + bedGraphToBigWig ${prefix}_coverage.bed ${chrom_sizes} ${prefix}_coverage.bw + # coverage cap + sort -k1,1V -k2,2n -k3,3n $args4 ${prefix}_coverage.bed | \\ + awk -v COVERAGE_CAP=$hifi_coverage_cap 'BEGIN {FS = " "; OFS = "\t";}{if(int(\$4)>COVERAGE_CAP){print \$1,\$2,\$3,COVERAGE_CAP} else {print \$1,\$2,\$3,\$4}}' > ${prefix}_coverage_capped.bed + # convert bed to bigwig + bedGraphToBigWig ${prefix}_coverage_capped.bed ${chrom_sizes} ${prefix}_coverage_capped.bw + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + bedtools: \$(echo \$(bedtools --version 2>&1) | sed 's/^.*bedtools //') + sort: \$(echo \$(sort --version 2>&1) | head -n 1 | sed 's/^.*sort //; s/Copyright.*\$//') + awk: \$(echo \$(awk --version 2>&1) | head -n 1 | sed 's/Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/create_chromosome_sizes.nf b/modules/local/hic_curation/create_chromosome_sizes.nf new file mode 100644 index 00000000..31b04f0a --- /dev/null +++ b/modules/local/hic_curation/create_chromosome_sizes.nf @@ -0,0 +1,40 @@ +process CREATE_CHROMOSOME_SIZES_FILE { + tag "$meta.id" + label 'process_low' + + container "community.wave.seqera.io/library/pip_awk:e0daab0638d06dfd" + + input: + tuple val(meta), path(fai) + val hic_map_sort_by + + output: + tuple val(meta), path("*.sizes") , emit: sizes + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + if [[ "$hic_map_sort_by" == "length" ]] + then + awk '{print \$1\"\t\"\$2}' ${fai} | \\ + sort -k2,2 -nr > ${prefix}.sizes + elif [[ "$hic_map_sort_by" == "name" ]] + then + awk '{print \$1\"\t\"\$2}' ${fai} | \\ + sort -k1,1 -nr > ${prefix}.sizes + else + awk '{print \$1\"\t\"\$2}' ${fai} > ${prefix}.sizes + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sort: \$(echo \$(sort --version 2>&1) | head -n 1 | sed 's/^.*sort //; s/Copyright.*\$//') + awk: \$(echo \$(awk --version 2>&1) | head -n 1 | sed 's/Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/create_gap_tracks.nf b/modules/local/hic_curation/create_gap_tracks.nf new file mode 100644 index 00000000..bd27ee5b --- /dev/null +++ b/modules/local/hic_curation/create_gap_tracks.nf @@ -0,0 +1,38 @@ +process CREATE_GAP_TRACKS { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/pysam_pip_awk_clodius:79d5112d656076f9" + + input: + tuple val(meta), path(bed) + path(chrom_sizes) + + output: + tuple val(meta), path("*_gaps.bedgraph") , emit: bedgraph + tuple val(meta), path("*_gaps.bedgraph.beddb") , emit: beddb + + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + # create gaps bedgraph file which can be loaded into Pretext + awk '{print \$0"\t"sqrt((\$3-\$2)*(\$3-\$2))}' ${bed} | \\ + sort -k1,1V -k2,2n -k3,3n --parallel=${task.cpus} ${args} > ${prefix}_gaps.bedgraph + # create sorted.bedgraph.beddb which can be ingested to HiGlass + clodius aggregate bedfile ${args2} --chromsizes-filename ${chrom_sizes} ${prefix}_gaps.bedgraph + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sort: \$(echo \$(sort --version 2>&1) | head -n 1 | sed 's/^.*sort //; s/Copyright.*\$//') + awk: \$(echo \$(awk --version 2>&1) | head -n 1 | sed 's/Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/create_telomer_bigwig_track.nf b/modules/local/hic_curation/create_telomer_bigwig_track.nf new file mode 100644 index 00000000..465708d2 --- /dev/null +++ b/modules/local/hic_curation/create_telomer_bigwig_track.nf @@ -0,0 +1,33 @@ +process CREATE_TELOMER_BIGWIG_TRACK { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/ucsc-bedgraphtobigwig:469--f66c00635e28f216" + + input: + tuple val(meta), path(bedgraph) + path(chrom_sizes) + + output: + tuple val(meta), path("*_telomer.bw"), emit: bw + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + sort -k1,1V -k2,2n -k3,3n ${args} ${bedgraph} > ${bedgraph}_sorted.bedgraph + bedGraphToBigWig ${bedgraph}_sorted.bedgraph ${chrom_sizes} ${prefix}_telomer.bw; + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bedGraphToBigWig: \$(echo \$(bedGraphToBigWig 2>&1) | sed 's/^.*bedGraphToBigWig //; s/Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/filter_five_end.nf b/modules/local/hic_curation/filter_five_end.nf new file mode 100644 index 00000000..5099a206 --- /dev/null +++ b/modules/local/hic_curation/filter_five_end.nf @@ -0,0 +1,32 @@ +process FILTER_FIVE_END { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/samtools_perl:e2ce3f7265547d1f" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam") , emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + samtools view -h -@ $task.cpus ${bam} | \\ + perl ${projectDir}/bin/filter_five_end.pl | \\ + samtools view -@ $task.cpus -Sb - > ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/pretext_tracks_ingestion.nf b/modules/local/hic_curation/pretext_tracks_ingestion.nf new file mode 100644 index 00000000..a9457c47 --- /dev/null +++ b/modules/local/hic_curation/pretext_tracks_ingestion.nf @@ -0,0 +1,42 @@ +process PRETEXT_TRACKS_INGESTION { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/pretextgraph:0.0.6--561a906eedf096a7" + + input: + tuple val(meta), path(pretext_in), path(cov_bedgraph), path(telomer_bedgraph), path(gap_bedgraph) + + output: + tuple val(meta), path("*_wTracks.pretext") , emit: hitile + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + cat ${cov_bedgraph} | PretextGraph -i ${pretext_in} -n coverage -o ${prefix}_cov.pretext + if [[ ${telomer_bedgraph.size()} -gt 0 && ${gap_bedgraph.size()} -gt 0 ]] + then + cat ${telomer_bedgraph} | PretextGraph -i ${prefix}_cov.pretext -n telomer -o ${prefix}_wTracks.pretext + cat ${gap_bedgraph} | PretextGraph -i ${prefix}_wTracks.pretext -n gap + elif [[ ${telomer_bedgraph.size()} -eq 0 && ${gap_bedgraph.size()} -gt 0 ]] + then + cat ${gap_bedgraph} | PretextGraph -i ${prefix}_cov.pretext -n gap -o ${prefix}_wTracks.pretext + elif [[ ${telomer_bedgraph.size()} -gt 0 && ${gap_bedgraph.size()} -eq 0 ]] + then + cat ${telomer_bedgraph} | PretextGraph -i ${prefix}_cov.pretext -n telomer -o ${prefix}_wTracks.pretext + else + mv ${prefix}_cov.pretext ${prefix}_wTracks.pretext + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + PretextGraph: \$(echo \$(PretextGraph 2>&1 | grep Version) | awk '{print \$NF}') + END_VERSIONS + """ +} diff --git a/modules/local/hic_curation/tworeadcombiner_fixmate_sort.nf b/modules/local/hic_curation/tworeadcombiner_fixmate_sort.nf new file mode 100644 index 00000000..12e858bc --- /dev/null +++ b/modules/local/hic_curation/tworeadcombiner_fixmate_sort.nf @@ -0,0 +1,32 @@ +process TWOREADCOMBINER_FIXMATE_SORT { + tag "$meta.id" + label 'process_medium' + + container "community.wave.seqera.io/library/samtools_perl:e2ce3f7265547d1f" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam") , emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + perl ${projectDir}/bin/two_read_bam_combiner_sanger.pl ${bam} samtools ${args} | \\ + grep -v -e "^@HD" | \\ + samtools sort ${args2} -@${task.cpus} -T sort_tmp -o ${prefix}_comb.bam - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/merquryfk/merquryfk.nf b/modules/local/merquryfk/merquryfk.nf deleted file mode 100644 index 25688e16..00000000 --- a/modules/local/merquryfk/merquryfk.nf +++ /dev/null @@ -1,61 +0,0 @@ -process MERQURYFK_MERQURYFK { - tag "$meta.id" - label 'process_medium' - - // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - container 'ghcr.io/nbisweden/fastk_genescopefk_merquryfk:1.2' - - input: - tuple val(meta), path(fastk_hist), path(fastk_ktab), path(assembly) - - output: - tuple val(meta), path("${prefix}.completeness.stats") , emit: stats - tuple val(meta), path("${prefix}.*_only.bed") , emit: bed - tuple val(meta), path("${prefix}.*.qv") , emit: assembly_qv - tuple val(meta), path("${prefix}.*.spectra-cn.fl.png") , emit: spectra_cn_fl_png, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.fl.pdf") , emit: spectra_cn_fl_pdf, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.ln.png") , emit: spectra_cn_ln_png, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.ln.pdf") , emit: spectra_cn_ln_pdf, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.st.png") , emit: spectra_cn_st_png, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.st.pdf") , emit: spectra_cn_st_pdf, optional: true - tuple val(meta), path("${prefix}.qv") , emit: qv - tuple val(meta), path("${prefix}.spectra-asm.fl.png") , emit: spectra_asm_fl_png, optional: true - tuple val(meta), path("${prefix}.spectra-asm.fl.pdf") , emit: spectra_asm_fl_pdf, optional: true - tuple val(meta), path("${prefix}.spectra-asm.ln.png") , emit: spectra_asm_ln_png, optional: true - tuple val(meta), path("${prefix}.spectra-asm.ln.pdf") , emit: spectra_asm_ln_pdf, optional: true - tuple val(meta), path("${prefix}.spectra-asm.st.png") , emit: spectra_asm_st_png, optional: true - tuple val(meta), path("${prefix}.spectra-asm.st.pdf") , emit: spectra_asm_st_pdf, optional: true - tuple val(meta), path("${prefix}.false_duplications.tsv"), emit: false_duplications - tuple val(meta), path("${prefix}.cni.gz") , emit: cn_histogram - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' - def MERQURY_VERSION = '8ae344092df5dcaf83cfb7f90f662597a9b1fc61' - """ - MerquryFK \\ - $args \\ - -T$task.cpus \\ - ${fastk_ktab.find{ it.toString().endsWith(".ktab") }} \\ - $assembly \\ - $prefix - - mv .cni ${prefix}.cni - awk -v asm_ploidy=${assembly instanceof List ? assembly.size() : 1} \\ - -f $projectDir/bin/false_duplications.awk ${prefix}.cni \\ - > ${prefix}.false_duplications.tsv - gzip ${prefix}.cni - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastk: $FASTK_VERSION - merquryfk: $MERQURY_VERSION - r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) - END_VERSIONS - """ -} diff --git a/modules/local/quarto.nf b/modules/local/quarto.nf deleted file mode 100644 index 9057370d..00000000 --- a/modules/local/quarto.nf +++ /dev/null @@ -1,43 +0,0 @@ -process QUARTO { - tag "$notebook.baseName" - label 'process_single' - - conda "conda-forge::quarto=1.3.450 conda-forge::r-base=4.3.2 conda-forge::r-tidyverse=2.0.0" - container "docker.io/rocker/verse:4.3.2" - - input: - tuple ( - val (meta), - path (notebook), - path (data, stageAs: 'data/*', arity: '1..*') - ) - - output: - path "*.html" , emit: html - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: notebook.baseName - """ - export USERID=\$UID - export XDG_CACHE_HOME=tmp/quarto_cache_home - export XDG_DATA_HOME=tmp/quarto_data_home - - quarto \\ - render \\ - $notebook \\ - $args \\ - --output ${prefix}.html - - rm -rf tmp - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - quarto: \$( quarto --version ) - END_VERSIONS - """ -} diff --git a/modules/local/quarto/notebook/environment.yml b/modules/local/quarto/notebook/environment.yml new file mode 100644 index 00000000..a11929cb --- /dev/null +++ b/modules/local/quarto/notebook/environment.yml @@ -0,0 +1,10 @@ +channels: +- conda-forge +- bioconda +dependencies: +- bioconda::multiqc=1.25 +- conda-forge::jupyter=1.1.1 +- conda-forge::pandas=2.2.3 +- conda-forge::papermill=2.6.0 +- conda-forge::quarto=1.5.57 +- conda-forge::tabulate=0.9.0 \ No newline at end of file diff --git a/modules/local/quarto/notebook/main.nf b/modules/local/quarto/notebook/main.nf new file mode 100644 index 00000000..5831babe --- /dev/null +++ b/modules/local/quarto/notebook/main.nf @@ -0,0 +1,55 @@ +process QUARTO_NOTEBOOK { + tag "$notebook.baseName" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/27/27ad4fe625a7c22fb1c8c3ee83dda7276f0e27f68385991df88b330e46e1d930/data': + 'community.wave.seqera.io/library/quarto_pip_jupyter_multiqc_pruned:a0afd98904fa925c' }" + + input: + tuple val(meta), path(notebook, arity: '1') + path (log_files, stageAs: 'log_files/*', arity: '1..*') + path 'params.yml' + + output: + path "${prefix}.html", arity: '1', emit: html + path "${prefix}.md" , arity: '1', emit: github_markdown + path "multiqc*.html" , arity: '1', emit: multiqc_summary + path "versions.yml" , arity: '1', emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: notebook.baseName + """ + export USERID=\$UID + export XDG_CACHE_HOME=tmp/quarto_cache_home + export XDG_DATA_HOME=tmp/quarto_data_home + # Fix Quarto for apptainer + ENV_QUARTO="\${ENV_QUARTO:-/opt/conda/etc/conda/activate.d/quarto.sh}" + set +u + if [ -z "\${QUARTO_DENO}" ] && [ -f "\${ENV_QUARTO}" ]; then + source "\${ENV_QUARTO}" + fi + set -u + + # Link params to meta data + ln -s params.yml _quarto.yml + + quarto check + quarto \\ + render \\ + $notebook \\ + --execute-params params.yml \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + quarto: \$(quarto --version) + multiqc: \$(multiqc --version | sed '1!d; s/.*version //') + END_VERSIONS + """ +} \ No newline at end of file diff --git a/modules/local/report/dtol.nf b/modules/local/report/dtol.nf index 93aba10d..d0255317 100644 --- a/modules/local/report/dtol.nf +++ b/modules/local/report/dtol.nf @@ -1,5 +1,5 @@ process REPORT_DTOL { - tag "" + tag "${tol_search_json.species[0].scientificName}" label 'process_single' input: @@ -12,11 +12,13 @@ process REPORT_DTOL { task.ext.when == null || task.ext.when exec: - def tol_table = [ - tolId: tol_search_json.species[0].tolIds[0]?.tolId?: "No ToL ID", - species: tol_search_json.species[0].scientificName, - class: tol_search_json.species[0].taxaClass, - order: tol_search_json.species[0].order - ].collect { key, value -> "$key\t$value" }.join('\n') - file("$task.workDir/DToL.tsv").text = tol_table + def tol_table = [] + tol_table << "ToL ID\tSpecies\tClass\tOrder" + tol_table << [ + tol_search_json.species[0].tolIds[0]?.tolId?: "No ToL ID", + tol_search_json.species[0].scientificName, + tol_search_json.species[0].taxaClass, + tol_search_json.species[0].order + ].join("\t") + file("$task.workDir/DToL.tsv").text = tol_table.join('\n') } diff --git a/modules/local/report/genometraits.nf b/modules/local/report/genometraits.nf index 76ab0bab..e802ed28 100644 --- a/modules/local/report/genometraits.nf +++ b/modules/local/report/genometraits.nf @@ -1,5 +1,5 @@ process REPORT_GENOMETRAITS { - tag "" + tag "${meta.sample.name}" label 'process_single' input: diff --git a/modules/local/tol/search.nf b/modules/local/tol/search.nf index 895e44b8..3bc0222d 100644 --- a/modules/local/tol/search.nf +++ b/modules/local/tol/search.nf @@ -1,7 +1,5 @@ -import groovy.json.JsonSlurper - process TOL_SEARCH { - tag "$taxid" + tag "Taxid: $taxid" label 'process_single' input: @@ -16,5 +14,5 @@ process TOL_SEARCH { exec: def args = task.ext.args ?: '' def response = new URL("https://id.tol.sanger.ac.uk/api/v2/species?taxonomyId=$taxid").text - json = new JsonSlurper().parseText(response) + json = new groovy.json.JsonSlurper().parseText(response) as HashMap // Otherwise returns a LazyMap which causes caching problems. } diff --git a/modules/nf-core/biobambam/bammarkduplicates2/environment.yml b/modules/nf-core/biobambam/bammarkduplicates2/environment.yml new file mode 100644 index 00000000..eb19895a --- /dev/null +++ b/modules/nf-core/biobambam/bammarkduplicates2/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::biobambam=2.0.183 diff --git a/modules/nf-core/biobambam/bammarkduplicates2/main.nf b/modules/nf-core/biobambam/bammarkduplicates2/main.nf new file mode 100644 index 00000000..fb29e635 --- /dev/null +++ b/modules/nf-core/biobambam/bammarkduplicates2/main.nf @@ -0,0 +1,48 @@ +process BIOBAMBAM_BAMMARKDUPLICATES2 { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/biobambam:2.0.183--h9f5acd7_1' : 'biocontainers/biobambam:2.0.183--h9f5acd7_1'}" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam") , emit: bam + tuple val(meta), path("*.metrics.txt"), emit: metrics + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + bammarkduplicates2 \\ + $args \\ + I=$bam \\ + O=${prefix}.bam \\ + M=${prefix}.metrics.txt \\ + tmpfile=$prefix \\ + markthreads=$task.cpus + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bammarkduplicates2: \$(echo \$(bammarkduplicates2 --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + touch ${prefix}.metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bammarkduplicates2: \$(echo \$(bammarkduplicates2 --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/biobambam/bammarkduplicates2/meta.yml b/modules/nf-core/biobambam/bammarkduplicates2/meta.yml new file mode 100644 index 00000000..60b26305 --- /dev/null +++ b/modules/nf-core/biobambam/bammarkduplicates2/meta.yml @@ -0,0 +1,55 @@ +name: biobambam_bammarkduplicates2 +description: Locate and tag duplicate reads in a BAM file +keywords: + - markduplicates + - bam + - cram +tools: + - biobambam: + description: | + biobambam is a set of tools for early stage alignment file processing. + homepage: https://gitlab.com/german.tischler/biobambam2 + documentation: https://gitlab.com/german.tischler/biobambam2/-/blob/master/README.md + doi: 10.1186/1751-0473-9-13 + licence: ["GPL v3"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + - metrics: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics.txt": + type: file + description: Duplicate metrics file generated by biobambam + pattern: "*.{metrics.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@muffato" +maintainers: + - "@muffato" diff --git a/modules/nf-core/biobambam/bammarkduplicates2/tests/main.nf.test b/modules/nf-core/biobambam/bammarkduplicates2/tests/main.nf.test new file mode 100644 index 00000000..954635ce --- /dev/null +++ b/modules/nf-core/biobambam/bammarkduplicates2/tests/main.nf.test @@ -0,0 +1,63 @@ + +nextflow_process { + + name "Test Process BIOBAMBAM_BAMMARKDUPLICATES2" + script "../main.nf" + process "BIOBAMBAM_BAMMARKDUPLICATES2" + + tag "modules" + tag "modules_nfcore" + tag "biobambam" + tag "biobambam/bammarkduplicates2" + + test("test-biobambam-bammarkduplicates2") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + file(process.out.metrics[0][1]).readLines()[3..7], + process.out.versions + ).match() + } + ) + } + } + + test("test-biobambam-bammarkduplicates2-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/biobambam/bammarkduplicates2/tests/main.nf.test.snap b/modules/nf-core/biobambam/bammarkduplicates2/tests/main.nf.test.snap new file mode 100644 index 00000000..7973ee1e --- /dev/null +++ b/modules/nf-core/biobambam/bammarkduplicates2/tests/main.nf.test.snap @@ -0,0 +1,75 @@ +{ + "test-biobambam-bammarkduplicates2": { + "content": [ + "762e859a3d0ed1553655cde77665c940", + [ + "LIBRARY\tUNPAIRED_READS_EXAMINED\tREAD_PAIRS_EXAMINED\tUNMAPPED_READS\tUNPAIRED_READ_DUPLICATES\tREAD_PAIR_DUPLICATES\tREAD_PAIR_OPTICAL_DUPLICATES\tPERCENT_DUPLICATION\tESTIMATED_LIBRARY_SIZE", + "lib1\t3\t97\t3\t0\t0\t0\t0\t-1", + "", + "## HISTOGRAM", + "BIN\tVALUE" + ], + [ + "versions.yml:md5,05d0569b6cbc14212ccdfac3b15128f3" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T09:48:22.747008" + }, + "test-biobambam-bammarkduplicates2-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,05d0569b6cbc14212ccdfac3b15128f3" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,05d0569b6cbc14212ccdfac3b15128f3" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T09:48:26.94941" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml new file mode 100644 index 00000000..15cee238 --- /dev/null +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf new file mode 100644 index 00000000..b7688285 --- /dev/null +++ b/modules/nf-core/bwamem2/index/main.nf @@ -0,0 +1,52 @@ +process BWAMEM2_INDEX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0' : + 'biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("bwamem2"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${fasta}" + def args = task.ext.args ?: '' + """ + mkdir bwamem2 + bwa-mem2 \\ + index \\ + $args \\ + $fasta -p bwamem2/${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${fasta}" + + """ + mkdir bwamem2 + touch bwamem2/${prefix}.0123 + touch bwamem2/${prefix}.ann + touch bwamem2/${prefix}.pac + touch bwamem2/${prefix}.amb + touch bwamem2/${prefix}.bwt.2bit.64 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml new file mode 100644 index 00000000..c14a1092 --- /dev/null +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -0,0 +1,42 @@ +name: bwamem2_index +description: Create BWA-mem2 index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bwamem2: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: https://github.com/bwa-mem2/bwa-mem2#usage + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test b/modules/nf-core/bwamem2/index/tests/main.nf.test new file mode 100644 index 00000000..dbf11132 --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test @@ -0,0 +1,31 @@ +nextflow_process { + + name "Test Process BWAMEM2_INDEX" + tag "modules_nfcore" + tag "modules" + tag "bwamem2" + tag "bwamem2/index" + script "../main.nf" + process "BWAMEM2_INDEX" + + test("BWAMEM2 index") { + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test.snap b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap new file mode 100644 index 00000000..69b268ee --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "BWAMEM2 index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "1": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "versions": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T12:59:39.132616" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/tests/tags.yml b/modules/nf-core/bwamem2/index/tests/tags.yml new file mode 100644 index 00000000..3953018e --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/index: + - modules/nf-core/bwamem2/index/** diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml new file mode 100644 index 00000000..633712cf --- /dev/null +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -0,0 +1,8 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bwa-mem2=2.2.1 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.19.2 + - htslib=1.19.1 diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf new file mode 100644 index 00000000..729428c4 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -0,0 +1,86 @@ +process BWAMEM2_MEM { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' : + 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' }" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + tuple val(meta3), path(fasta) + val sort_bam + + output: + tuple val(meta), path("*.sam") , emit: sam , optional:true + tuple val(meta), path("*.bam") , emit: bam , optional:true + tuple val(meta), path("*.cram") , emit: cram, optional:true + tuple val(meta), path("*.crai") , emit: crai, optional:true + tuple val(meta), path("*.csi") , emit: csi , optional:true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` + + bwa-mem2 \\ + mem \\ + $args \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + | samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.${extension} - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + def create_index = "" + if (extension == "cram") { + create_index = "touch ${prefix}.crai" + } else if (extension == "bam") { + create_index = "touch ${prefix}.csi" + } + + """ + touch ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml new file mode 100644 index 00000000..931f7129 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -0,0 +1,88 @@ +name: bwamem2_mem +description: Performs fastq alignment to a fasta reference using BWA +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam +tools: + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - sam: + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - cram: + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - crai: + type: file + description: Index file for CRAM file + pattern: "*.{crai}" + - csi: + type: file + description: Index file for BAM file + pattern: "*.{csi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" + - "@matthdsm" +maintainers: + - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test new file mode 100644 index 00000000..9e0ab14a --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -0,0 +1,179 @@ +nextflow_process { + + name "Test Process BWAMEM2_MEM" + script "../main.nf" + process "BWAMEM2_MEM" + + tag "modules" + tag "modules_nfcore" + tag "bwamem2" + tag "bwamem2/mem" + tag "bwamem2/index" + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + test("sarscov2 - fastq, index, fasta, false") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, true") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap new file mode 100644 index 00000000..69bc3612 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -0,0 +1,129 @@ +{ + "sarscov2 - [fastq1, fastq2], index, fasta, false": { + "content": [ + "eefa0f44493fd0504e734efd2f1f4a9e", + "57aeef88ed701a8ebc8e2f0a381b2a6", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:37.929675" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:12:06.693567" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true": { + "content": [ + "7aba324f82d5b4e926a5dd7b46029cb4", + "af8628d9df18b2d3d4f6fd47ef2bb872", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:53.488374" + }, + "sarscov2 - fastq, index, fasta, false": { + "content": [ + "bc02b41697b3a8f1021b02becec24052", + "798439cbd7fd81cbcc5078022dc5479d", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:05.644682" + }, + "sarscov2 - fastq, index, fasta, true": { + "content": [ + "e41d67320815d29ba5f6e9d1ae21902a", + "94fcf617f5b994584c4e8d4044e16b4f", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:21.837763" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/mem/tests/tags.yml b/modules/nf-core/bwamem2/mem/tests/tags.yml new file mode 100644 index 00000000..134efb2b --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/mem: + - "modules/nf-core/bwamem2/mem/**" diff --git a/modules/nf-core/cooler/cload/environment.yml b/modules/nf-core/cooler/cload/environment.yml new file mode 100644 index 00000000..f8165ca9 --- /dev/null +++ b/modules/nf-core/cooler/cload/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::cooler=0.9.2 diff --git a/modules/nf-core/cooler/cload/main.nf b/modules/nf-core/cooler/cload/main.nf new file mode 100644 index 00000000..b170a5d0 --- /dev/null +++ b/modules/nf-core/cooler/cload/main.nf @@ -0,0 +1,50 @@ +process COOLER_CLOAD { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cooler:0.9.2--pyh7cba7a3_0' : + 'biocontainers/cooler:0.9.2--pyh7cba7a3_0' }" + + input: + tuple val(meta), path(pairs), path(index), val(cool_bin) + path chromsizes + + output: + tuple val(meta), path("*.cool"), val(cool_bin), emit: cool + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def nproc = args.contains('pairix') || args.contains('tabix')? "--nproc $task.cpus" : '' + + """ + cooler cload \\ + $args \\ + $nproc \\ + ${chromsizes}:${cool_bin} \\ + $pairs \\ + ${prefix}.cool + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cooler: \$(cooler --version 2>&1 | sed 's/cooler, version //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.cool + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cooler: \$(cooler --version 2>&1 | sed 's/cooler, version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/cooler/cload/meta.yml b/modules/nf-core/cooler/cload/meta.yml new file mode 100644 index 00000000..1bb9f748 --- /dev/null +++ b/modules/nf-core/cooler/cload/meta.yml @@ -0,0 +1,60 @@ +name: cooler_cload +description: Create a cooler from genomic pairs and bins +keywords: + - cool + - cooler + - cload + - hic +tools: + - cooler: + description: Sparse binary format for genomic interaction matrices + homepage: https://open2c.github.io/cooler/ + documentation: https://cooler.readthedocs.io/en/latest/index.html + tool_dev_url: https://github.com/open2c/cooler + doi: "10.1093/bioinformatics/btz540" + licence: ["BSD-3-clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pairs: + type: file + description: Path to contacts (i.e. read pairs) file. + - index: + type: file + description: Path to index file of the contacts. + - cool_bin: + type: integer + description: Bins size in bp + - - chromsizes: + type: file + description: Path to a chromsizes file. +output: + - cool: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cool": + type: file + description: Output COOL file path + pattern: "*.cool" + - cool_bin: + type: file + description: Output COOL file path + pattern: "*.cool" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@jianhong" + - "@muffato" +maintainers: + - "@jianhong" + - "@muffato" diff --git a/modules/nf-core/cooler/zoomify/environment.yml b/modules/nf-core/cooler/zoomify/environment.yml new file mode 100644 index 00000000..f8165ca9 --- /dev/null +++ b/modules/nf-core/cooler/zoomify/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::cooler=0.9.2 diff --git a/modules/nf-core/cooler/zoomify/main.nf b/modules/nf-core/cooler/zoomify/main.nf new file mode 100644 index 00000000..f9933dff --- /dev/null +++ b/modules/nf-core/cooler/zoomify/main.nf @@ -0,0 +1,46 @@ +process COOLER_ZOOMIFY { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cooler:0.9.2--pyh7cba7a3_0' : + 'biocontainers/cooler:0.9.2--pyh7cba7a3_0' }" + + input: + tuple val(meta), path(cool) + + output: + tuple val(meta), path("*.mcool"), emit: mcool + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + cooler zoomify \\ + $args \\ + -n $task.cpus \\ + -o ${prefix}.mcool \\ + $cool + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cooler: \$(cooler --version 2>&1 | sed 's/cooler, version //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.mcool + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cooler: \$(cooler --version 2>&1 | sed 's/cooler, version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/cooler/zoomify/meta.yml b/modules/nf-core/cooler/zoomify/meta.yml new file mode 100644 index 00000000..3f928781 --- /dev/null +++ b/modules/nf-core/cooler/zoomify/meta.yml @@ -0,0 +1,45 @@ +name: cooler_zoomify +description: Generate a multi-resolution cooler file by coarsening +keywords: + - mcool + - cool + - cooler +tools: + - cooler: + description: Sparse binary format for genomic interaction matrices + homepage: https://open2c.github.io/cooler/ + documentation: https://cooler.readthedocs.io/en/latest/index.html + tool_dev_url: https://github.com/open2c/cooler + doi: "10.1093/bioinformatics/btz540" + licence: ["BSD-3-clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cool: + type: file + description: Path to COOL file + pattern: "*.{cool,mcool}" +output: + - mcool: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mcool": + type: file + description: Output mcool file + pattern: "*.mcool" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@jianhong" +maintainers: + - "@jianhong" diff --git a/modules/nf-core/merquryfk/merquryfk/main.nf b/modules/nf-core/merquryfk/merquryfk/main.nf new file mode 100644 index 00000000..7fb6811c --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/main.nf @@ -0,0 +1,92 @@ +process MERQURYFK_MERQURYFK { + tag "$meta.id" + label 'process_medium' + + // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + container 'ghcr.io/nbisweden/fastk_genescopefk_merquryfk:1.2' + + input: + tuple val(meta), path(fastk_hist),path(fastk_ktab),path(assembly),path(haplotigs) + path matktab //optional + path patktab //optional + + output: + tuple val(meta), path("${prefix}.completeness.stats") , emit: stats + tuple val(meta), path("${prefix}.*_only.bed") , emit: bed + tuple val(meta), path("${prefix}.*.qv") , emit: assembly_qv + tuple val(meta), path("${prefix}.*.spectra-cn.fl.{png,pdf}") , emit: part_spectra_cn_fl, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.ln.{png,pdf}") , emit: part_spectra_cn_ln, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.st.{png,pdf}") , emit: part_spectra_cn_st, optional: true + tuple val(meta), path("${prefix}.spectra-cn.fl.{png,pdf}") , emit: full_spectra_cn_fl, optional: true + tuple val(meta), path("${prefix}.spectra-cn.ln.{png,pdf}") , emit: full_spectra_cn_ln, optional: true + tuple val(meta), path("${prefix}.spectra-cn.st.{png,pdf}") , emit: full_spectra_cn_st, optional: true + tuple val(meta), path("${prefix}.qv") , emit: qv + tuple val(meta), path("${prefix}.spectra-asm.fl.{png,pdf}") , emit: spectra_asm_fl, optional: true + tuple val(meta), path("${prefix}.spectra-asm.ln.{png,pdf}") , emit: spectra_asm_ln, optional: true + tuple val(meta), path("${prefix}.spectra-asm.st.{png,pdf}") , emit: spectra_asm_st, optional: true + tuple val(meta), path("${prefix}.phased_block.bed") , emit: phased_block_bed, optional: true + tuple val(meta), path("${prefix}.phased_block.stats") , emit: phased_block_stats, optional: true + tuple val(meta), path("${prefix}.continuity.N.{pdf,png}") , emit: continuity_N, optional: true + tuple val(meta), path("${prefix}.block.N.{pdf,png}") , emit: block_N, optional: true + tuple val(meta), path("${prefix}.block.blob.{pdf,png}") , emit: block_blob, optional: true + tuple val(meta), path("${prefix}.hapmers.blob.{pdf,png}") , emit: hapmers_blob, optional: true + tuple val(meta), path("${prefix}.false_duplications.tsv") , emit: false_duplications + tuple val(meta), path("${prefix}.cni.gz") , emit: cn_histogram + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "MERQURYFK_MERQURYFK module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def mat_ktab = matktab ? "${matktab.find{ it.toString().endsWith(".ktab") }}" : '' + def pat_ktab = patktab ? "${patktab.find{ it.toString().endsWith(".ktab") }}" : '' + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def MERQURY_VERSION = '8ae344092df5dcaf83cfb7f90f662597a9b1fc61' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + MerquryFK \\ + $args \\ + -T$task.cpus \\ + ${fastk_ktab.find{ it.toString().endsWith(".ktab") }} \\ + ${mat_ktab} \\ + ${pat_ktab} \\ + $assembly \\ + $haplotigs \\ + $prefix + + mv .cni ${prefix}.cni + awk -v asm_ploidy=${assembly instanceof List ? assembly.size() : 1} \\ + -f $projectDir/bin/false_duplications.awk ${prefix}.cni \\ + > ${prefix}.false_duplications.tsv + gzip ${prefix}.cni + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION + merquryfk: $MERQURY_VERSION + r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def MERQURY_VERSION = '8ae344092df5dcaf83cfb7f90f662597a9b1fc61' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + touch ${prefix}.completeness.stats + touch ${prefix}.qv + touch ${prefix}._.qv + touch ${prefix}._only.bed + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION + merquryfk: $MERQURY_VERSION + r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff new file mode 100644 index 00000000..99fded48 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff @@ -0,0 +1,60 @@ +Changes in module 'nf-core/merquryfk/merquryfk' +'modules/nf-core/merquryfk/merquryfk/meta.yml' is unchanged +Changes in 'merquryfk/merquryfk/main.nf': +--- modules/nf-core/merquryfk/merquryfk/main.nf ++++ modules/nf-core/merquryfk/merquryfk/main.nf +@@ -14,9 +14,12 @@ + tuple val(meta), path("${prefix}.completeness.stats") , emit: stats + tuple val(meta), path("${prefix}.*_only.bed") , emit: bed + tuple val(meta), path("${prefix}.*.qv") , emit: assembly_qv +- tuple val(meta), path("${prefix}.*.spectra-cn.fl.{png,pdf}") , emit: spectra_cn_fl, optional: true +- tuple val(meta), path("${prefix}.*.spectra-cn.ln.{png,pdf}") , emit: spectra_cn_ln, optional: true +- tuple val(meta), path("${prefix}.*.spectra-cn.st.{png,pdf}") , emit: spectra_cn_st, optional: true ++ tuple val(meta), path("${prefix}.*.spectra-cn.fl.{png,pdf}") , emit: part_spectra_cn_fl, optional: true ++ tuple val(meta), path("${prefix}.*.spectra-cn.ln.{png,pdf}") , emit: part_spectra_cn_ln, optional: true ++ tuple val(meta), path("${prefix}.*.spectra-cn.st.{png,pdf}") , emit: part_spectra_cn_st, optional: true ++ tuple val(meta), path("${prefix}.spectra-cn.fl.{png,pdf}") , emit: full_spectra_cn_fl, optional: true ++ tuple val(meta), path("${prefix}.spectra-cn.ln.{png,pdf}") , emit: full_spectra_cn_ln, optional: true ++ tuple val(meta), path("${prefix}.spectra-cn.st.{png,pdf}") , emit: full_spectra_cn_st, optional: true + tuple val(meta), path("${prefix}.qv") , emit: qv + tuple val(meta), path("${prefix}.spectra-asm.fl.{png,pdf}") , emit: spectra_asm_fl, optional: true + tuple val(meta), path("${prefix}.spectra-asm.ln.{png,pdf}") , emit: spectra_asm_ln, optional: true +@@ -27,6 +30,8 @@ + tuple val(meta), path("${prefix}.block.N.{pdf,png}") , emit: block_N, optional: true + tuple val(meta), path("${prefix}.block.blob.{pdf,png}") , emit: block_blob, optional: true + tuple val(meta), path("${prefix}.hapmers.blob.{pdf,png}") , emit: hapmers_blob, optional: true ++ tuple val(meta), path("${prefix}.false_duplications.tsv") , emit: false_duplications ++ tuple val(meta), path("${prefix}.cni.gz") , emit: cn_histogram + path "versions.yml" , emit: versions + + when: +@@ -54,6 +59,12 @@ + $haplotigs \\ + $prefix + ++ mv .cni ${prefix}.cni ++ awk -v asm_ploidy=${assembly instanceof List ? assembly.size() : 1} \\ ++ -f $projectDir/bin/false_duplications.awk ${prefix}.cni \\ ++ > ${prefix}.false_duplications.tsv ++ gzip ${prefix}.cni ++ + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION +@@ -61,6 +72,7 @@ + r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) + END_VERSIONS + """ ++ + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/tags.yml' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/main.nf.test' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config' is unchanged +************************************************************ diff --git a/modules/nf-core/merquryfk/merquryfk/meta.yml b/modules/nf-core/merquryfk/merquryfk/meta.yml new file mode 100644 index 00000000..82bfbec4 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/meta.yml @@ -0,0 +1,217 @@ +name: "merquryfk_merquryfk" +description: FastK based version of Merqury +keywords: + - Merqury + - reference-free + - assembly evaluation +tools: + - "merquryfk": + description: "FastK based version of Merqury" + homepage: "https://github.com/thegenemyers/MERQURY.FK" + tool_dev_url: "https://github.com/thegenemyers/MERQURY.FK" + licence: ["https://github.com/thegenemyers/MERQURY.FK/blob/main/LICENSE"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastk_hist: + type: file + description: A histogram files from the program FastK + pattern: "*.hist" + - fastk_ktab: + type: file + description: Histogram ktab files from the program FastK (option -t) + pattern: "*.ktab*" + - assembly: + type: file + description: Genome (primary) assembly files (fasta format) + pattern: ".fasta" + - haplotigs: + type: file + description: Assembly haplotigs (fasta format) + pattern: ".fasta" + - - matktab: + type: file + description: trio maternal histogram ktab files from the program FastK (option + -t) + pattern: "*.ktab*" + - - patktab: + type: file + description: trio paternal histogram ktab files from the program FastK (option + -t) + pattern: "*.ktab*" +output: + - stats: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.completeness.stats: + type: file + description: Assembly statistics file + pattern: "*.completeness.stats" + - bed: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*_only.bed: + type: file + description: Assembly only kmer positions not supported by reads in bed format + pattern: "*_only.bed" + - assembly_qv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.qv: + type: file + description: "error and qv table for each scaffold of the assembly" + pattern: "*.qv" + - spectra_cn_fl: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.spectra-cn.fl.{png,pdf}: + type: file + description: "Unstacked copy number spectra filled plot in PNG or PDF format" + pattern: "*.spectra-cn.fl.{png,pdf}" + - spectra_cn_ln: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.spectra-cn.ln.{png,pdf}: + type: file + description: "Unstacked copy number spectra line plot in PNG or PDF format" + pattern: "*.spectra-cn.ln.{png,pdf}" + - spectra_cn_st: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.spectra-cn.st.{png,pdf}: + type: file + description: "Stacked copy number spectra line plot in PNG or PDF format" + pattern: "*.spectra-cn.st.{png,pdf}" + - qv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.qv: + type: file + description: "error and qv of each assembly as a whole" + pattern: "*.qv" + - spectra_asm_fl: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.spectra-asm.fl.{png,pdf}: + type: file + description: "Unstacked assembly spectra filled plot in PNG or PDF format" + pattern: "*.spectra-asm.fl.{png,pdf}" + - spectra_asm_ln: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.spectra-asm.ln.{png,pdf}: + type: file + description: "Unstacked assembly spectra line plot in PNG or PDF format" + pattern: "*.spectra-asm.ln.{png,pdf}" + - spectra_asm_st: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.spectra-asm.st.{png,pdf}: + type: file + description: "Stacked assembly spectra line plot in PNG or PDF format" + pattern: "*.spectra-asm.st.{png,pdf}" + - phased_block_bed: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.phased_block.bed: + type: file + description: Assembly kmer positions seperated by block in bed format + pattern: "*.phased.block.bed" + - phased_block_stats: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.phased_block.stats: + type: file + description: phased assembly statistics file + pattern: "*.phased.block.stats" + - continuity_N: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.continuity.N.{pdf,png}: + type: file + description: "Stacked assembly N continuity plot in PNG or PDF format" + pattern: "*.continuity.N.{png,pdf}" + - block_N: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.block.N.{pdf,png}: + type: file + description: "Stacked assembly N continuity by block plot in PNG or PDF format" + pattern: "*.block.N.{png,pdf}" + - block_blob: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.block.blob.{pdf,png}: + type: file + description: "Stacked assembly block plot in PNG or PDF format" + pattern: "*.block.blob.{png,pdf}" + - hapmers_blob: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.hapmers.blob.{pdf,png}: + type: file + description: "Stacked assembly hapmers block plot in PNG or PDF format" + pattern: "*.hapmers.blob.{png,pdf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@mahesh-panchal" + - "@yumisims" +maintainers: + - "@mahesh-panchal" + - "@yumisims" diff --git a/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test new file mode 100644 index 00000000..c46843c6 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test @@ -0,0 +1,170 @@ +nextflow_process { + + name "Test Process MERQURYFK" + script "../main.nf" + process "MERQURYFK_MERQURYFK" + + tag "modules" + tag "modules_nfcore" + tag "merquryfk" + tag "merquryfk/merquryfk" + tag "fastk" + tag "fastk/fastk" + + setup { + run("FASTK_FASTK") { + script "../../../fastk/fastk" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + run("FASTK_FASTK", alias: "FASTK_MAT") { + script "../../../fastk/fastk" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + ] + """ + } + } + + run("FASTK_FASTK", alias: "FASTK_PAT") { + script "../../../fastk/fastk" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + ] + """ + } + } + } + + test("homo_sapiens - Illumina - png") { + config "./nextflow.png.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - Illumina - pdf") { + config "./nextflow.pdf.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - Illumina - trio") { + config "./nextflow.trio.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = FASTK_MAT.out.ktab + input[2] = FASTK_PAT.out.ktab + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - Illumina - stub") { + options "-stub" + config "./nextflow.pdf.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + + +} \ No newline at end of file diff --git a/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap new file mode 100644 index 00000000..f7ce47f0 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap @@ -0,0 +1,454 @@ +{ + "homo_sapiens - Illumina - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:22:52.240373868" + }, + "homo_sapiens - Illumina - pdf": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:22:19.530675341" + }, + "homo_sapiens - Illumina - png": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:21:57.682723412" + }, + "homo_sapiens - Illumina - trio": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:22:40.060937299" + } +} \ No newline at end of file diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.config new file mode 100644 index 00000000..ba1eebc9 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config new file mode 100644 index 00000000..52beeaa3 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config @@ -0,0 +1,9 @@ +process { + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } + withName: 'MERQURYFK_MERQURYFK' { + ext.args = '-lfs -pdf' + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config new file mode 100644 index 00000000..47c3d63e --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config @@ -0,0 +1,9 @@ +process { + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } + withName: 'MERQURYFK_MERQURYFK' { + ext.args = '-lfs' + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config new file mode 100644 index 00000000..47c3d63e --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config @@ -0,0 +1,9 @@ +process { + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } + withName: 'MERQURYFK_MERQURYFK' { + ext.args = '-lfs' + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/tags.yml b/modules/nf-core/merquryfk/merquryfk/tests/tags.yml new file mode 100644 index 00000000..7dcac99b --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/tags.yml @@ -0,0 +1,2 @@ +merquryfk/merquryfk: + - "modules/nf-core/merquryfk/merquryfk/**" diff --git a/modules/nf-core/meryl/count/main.nf b/modules/nf-core/meryl/count/main.nf index c1540cc8..d1119786 100644 --- a/modules/nf-core/meryl/count/main.nf +++ b/modules/nf-core/meryl/count/main.nf @@ -21,14 +21,15 @@ process MERYL_COUNT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def red_mem = task.memory.multiply(0.9).toGiga() """ for READ in $reads; do meryl count \\ k=$kvalue \\ threads=$task.cpus \\ - memory=${task.memory.toGiga()} \\ + memory=$red_mem \\ $args \\ - $reads \\ + \$READ \\ output read.\${READ%.f*}.meryl done diff --git a/modules/nf-core/meryl/count/meryl-count.diff b/modules/nf-core/meryl/count/meryl-count.diff new file mode 100644 index 00000000..f71de924 --- /dev/null +++ b/modules/nf-core/meryl/count/meryl-count.diff @@ -0,0 +1,23 @@ +Changes in module 'nf-core/meryl/count' +--- modules/nf-core/meryl/count/main.nf ++++ modules/nf-core/meryl/count/main.nf +@@ -21,14 +21,15 @@ + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" ++ def red_mem = task.memory.multiply(0.9).toGiga() + """ + for READ in $reads; do + meryl count \\ + k=$kvalue \\ + threads=$task.cpus \\ +- memory=${task.memory.toGiga()} \\ ++ memory=$red_mem \\ + $args \\ +- $reads \\ ++ \$READ \\ + output read.\${READ%.f*}.meryl + done + + +************************************************************ diff --git a/modules/nf-core/minimap2/index/environment.yml b/modules/nf-core/minimap2/index/environment.yml new file mode 100644 index 00000000..d1c1b471 --- /dev/null +++ b/modules/nf-core/minimap2/index/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::minimap2=2.28 diff --git a/modules/nf-core/minimap2/index/main.nf b/modules/nf-core/minimap2/index/main.nf new file mode 100644 index 00000000..38320214 --- /dev/null +++ b/modules/nf-core/minimap2/index/main.nf @@ -0,0 +1,44 @@ +process MINIMAP2_INDEX { + label 'process_low' + + // Note: the versions here need to match the versions used in minimap2/align + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/minimap2:2.28--he4a0461_0' : + 'biocontainers/minimap2:2.28--he4a0461_0' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("*.mmi"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + minimap2 \\ + -t $task.cpus \\ + -d ${fasta.baseName}.mmi \\ + $args \\ + $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + minimap2: \$(minimap2 --version 2>&1) + END_VERSIONS + """ + + stub: + """ + touch ${fasta.baseName}.mmi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + minimap2: \$(minimap2 --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/nf-core/minimap2/index/meta.yml b/modules/nf-core/minimap2/index/meta.yml new file mode 100644 index 00000000..57c80e29 --- /dev/null +++ b/modules/nf-core/minimap2/index/meta.yml @@ -0,0 +1,46 @@ +name: minimap2_index +description: Provides fasta index required by minimap2 alignment. +keywords: + - index + - fasta + - reference +tools: + - minimap2: + description: | + A versatile pairwise aligner for genomic and spliced nucleotide sequences. + homepage: https://github.com/lh3/minimap2 + documentation: https://github.com/lh3/minimap2#uguide + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + Reference database in FASTA format. +output: + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mmi": + type: file + description: Minimap2 fasta index. + pattern: "*.mmi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@yuukiiwa" + - "@drpatelh" +maintainers: + - "@yuukiiwa" + - "@drpatelh" diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test b/modules/nf-core/minimap2/index/tests/main.nf.test new file mode 100644 index 00000000..97840ff7 --- /dev/null +++ b/modules/nf-core/minimap2/index/tests/main.nf.test @@ -0,0 +1,32 @@ +nextflow_process { + + name "Test Process MINIMAP2_INDEX" + script "../main.nf" + process "MINIMAP2_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "minimap2" + tag "minimap2/index" + + test("minimap2 index") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test.snap b/modules/nf-core/minimap2/index/tests/main.nf.test.snap new file mode 100644 index 00000000..0b098828 --- /dev/null +++ b/modules/nf-core/minimap2/index/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "Should run without failures": { + "content": [ + { + "0": [ + [ + { + "id": "test_ref" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "1": [ + "versions.yml:md5,0fced0ee8015e7f50b82566e3db8f7b0" + ], + "index": [ + [ + { + "id": "test_ref" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "versions": [ + "versions.yml:md5,0fced0ee8015e7f50b82566e3db8f7b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T11:46:30.000058092" + }, + "minimap2 index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "1": [ + "versions.yml:md5,2f8340380c6741e9261a284262a90bde" + ], + "index": [ + [ + { + "id": "test" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "versions": [ + "versions.yml:md5,2f8340380c6741e9261a284262a90bde" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-05T10:58:29.828187662" + } +} \ No newline at end of file diff --git a/modules/nf-core/minimap2/index/tests/tags.yml b/modules/nf-core/minimap2/index/tests/tags.yml new file mode 100644 index 00000000..e5ef8e19 --- /dev/null +++ b/modules/nf-core/minimap2/index/tests/tags.yml @@ -0,0 +1,2 @@ +minimap2/index: + - modules/nf-core/minimap2/index/** diff --git a/modules/nf-core/pairix/environment.yml b/modules/nf-core/pairix/environment.yml new file mode 100644 index 00000000..d544ae49 --- /dev/null +++ b/modules/nf-core/pairix/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairix=0.3.7 diff --git a/modules/nf-core/pairix/main.nf b/modules/nf-core/pairix/main.nf new file mode 100644 index 00000000..e71ebb8f --- /dev/null +++ b/modules/nf-core/pairix/main.nf @@ -0,0 +1,32 @@ +process PAIRIX { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairix:0.3.7--py36h30a8e3e_3' : + 'biocontainers/pairix:0.3.7--py36h30a8e3e_3' }" + + input: + tuple val(meta), path(pair) + + output: + tuple val(meta), path(pair), path("*.px2"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + pairix \\ + $args \\ + $pair + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairix: \$(echo \$(pairix --help 2>&1) | sed 's/^.*Version: //; s/Usage.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pairix/meta.yml b/modules/nf-core/pairix/meta.yml new file mode 100644 index 00000000..f5277182 --- /dev/null +++ b/modules/nf-core/pairix/meta.yml @@ -0,0 +1,42 @@ +name: pairix +description: | + a tool for indexing and querying on a block-compressed text file + containing pairs of genomic coordinates +keywords: + - index + - block-compressed + - pairs +tools: + - pairix: + description: 2D indexing on bgzipped text files of paired genomic coordinates + homepage: "https://github.com/4dn-dcic/pairix" + documentation: "https://github.com/4dn-dcic/pairix" + tool_dev_url: "https://github.com/4dn-dcic/pairix" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pair: + type: file + description: pair file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - index: + type: file + description: pair index file + pattern: "*.px2" +authors: + - "@jianhong" +maintainers: + - "@jianhong" diff --git a/modules/nf-core/pairix/tests/main.nf.test b/modules/nf-core/pairix/tests/main.nf.test new file mode 100644 index 00000000..bcfffff8 --- /dev/null +++ b/modules/nf-core/pairix/tests/main.nf.test @@ -0,0 +1,32 @@ + +nextflow_process { + + name "Test Process PAIRIX" + script "../main.nf" + process "PAIRIX" + + tag "modules" + tag "modules_nfcore" + tag "pairix" + + test("test-pairix") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/4dn-dcic/pairix/master/samples/4dn.bsorted.chr21_22_only.nontriangle.pairs.gz", checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/pairix/tests/main.nf.test.snap b/modules/nf-core/pairix/tests/main.nf.test.snap new file mode 100644 index 00000000..d11b4bb4 --- /dev/null +++ b/modules/nf-core/pairix/tests/main.nf.test.snap @@ -0,0 +1,39 @@ +{ + "test-pairix": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "4dn.bsorted.chr21_22_only.nontriangle.pairs.gz:md5,ee90dc99987ece492d598ed939d54561", + "4dn.bsorted.chr21_22_only.nontriangle.pairs.gz.px2:md5,a6e41cc7cff16fd15b5ee505549ec99a" + ] + ], + "1": [ + "versions.yml:md5,848c8be602ec36645d30010ea30f0684" + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "4dn.bsorted.chr21_22_only.nontriangle.pairs.gz:md5,ee90dc99987ece492d598ed939d54561", + "4dn.bsorted.chr21_22_only.nontriangle.pairs.gz.px2:md5,a6e41cc7cff16fd15b5ee505549ec99a" + ] + ], + "versions": [ + "versions.yml:md5,848c8be602ec36645d30010ea30f0684" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:25:18.874503" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/dedup/environment.yml b/modules/nf-core/pairtools/dedup/environment.yml new file mode 100644 index 00000000..c03efb71 --- /dev/null +++ b/modules/nf-core/pairtools/dedup/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 diff --git a/modules/nf-core/pairtools/dedup/main.nf b/modules/nf-core/pairtools/dedup/main.nf new file mode 100644 index 00000000..78b416b1 --- /dev/null +++ b/modules/nf-core/pairtools/dedup/main.nf @@ -0,0 +1,38 @@ +process PAIRTOOLS_DEDUP { + tag "$meta.id" + label 'process_high' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : + 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.pairs.gz") , emit: pairs + tuple val(meta), path("*.pairs.stat"), emit: stat + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + pairtools dedup \\ + $args \\ + -o ${prefix}.pairs.gz \\ + --output-stats ${prefix}.pairs.stat \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | tr '\\n' ',' | sed 's/.*pairtools.*version //' | sed 's/,\$/\\n/') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pairtools/dedup/meta.yml b/modules/nf-core/pairtools/dedup/meta.yml new file mode 100644 index 00000000..3c67e3fb --- /dev/null +++ b/modules/nf-core/pairtools/dedup/meta.yml @@ -0,0 +1,45 @@ +name: pairtools_dedup +description: Find and remove PCR/optical duplicates +keywords: + - dedup + - deduplication + - PCR/optical duplicates + - pairs +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: pair file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - pairs: + type: file + description: Duplicates removed pairs + pattern: "*.{pairs.gz}" + - stat: + type: file + description: stats of the pairs + pattern: "*.{pairs.stat}" +authors: + - "@jianhong" +maintainers: + - "@jianhong" diff --git a/modules/nf-core/pairtools/dedup/pairtools-dedup.diff b/modules/nf-core/pairtools/dedup/pairtools-dedup.diff new file mode 100644 index 00000000..836e48e6 --- /dev/null +++ b/modules/nf-core/pairtools/dedup/pairtools-dedup.diff @@ -0,0 +1,26 @@ +Changes in module 'nf-core/pairtools/dedup' +--- modules/nf-core/pairtools/dedup/environment.yml ++++ modules/nf-core/pairtools/dedup/environment.yml +@@ -2,5 +2,5 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::pairtools=1.0.2 ++ - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 + +--- modules/nf-core/pairtools/dedup/main.nf ++++ modules/nf-core/pairtools/dedup/main.nf +@@ -6,8 +6,8 @@ + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/pairtools:1.0.2--py39h2a9f597_0' : +- 'biocontainers/pairtools:1.0.2--py39h2a9f597_0' }" ++ 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : ++ 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(input) + +************************************************************ diff --git a/modules/nf-core/pairtools/dedup/tests/main.nf.test b/modules/nf-core/pairtools/dedup/tests/main.nf.test new file mode 100644 index 00000000..41bbfabb --- /dev/null +++ b/modules/nf-core/pairtools/dedup/tests/main.nf.test @@ -0,0 +1,39 @@ + +nextflow_process { + + name "Test Process PAIRTOOLS_DEDUP" + script "../main.nf" + process "PAIRTOOLS_DEDUP" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "pairtools" + tag "pairtools/dedup" + + test("test-pairtools-dedup") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.4dedup.pairsam', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.pairs[0][1]).linesGzip[3..7], + process.out.stat, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/pairtools/dedup/tests/main.nf.test.snap b/modules/nf-core/pairtools/dedup/tests/main.nf.test.snap new file mode 100644 index 00000000..46dcf965 --- /dev/null +++ b/modules/nf-core/pairtools/dedup/tests/main.nf.test.snap @@ -0,0 +1,30 @@ +{ + "test-pairtools-dedup": { + "content": [ + [ + "#genome_assembly: unknown", + "#chromosomes: chr1 chr2", + "#columns: readID chrom1 pos1 chrom2 pos2 strand1 strand2 pair_type sam1 sam2", + "readid3\tchr1\t1\tchr1\t20\t+\t+\tUU\t.\t.", + "readid5\tchr1\t1\tchr1\t25\t+\t+\tUU\t.\t." + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.dedup.pairs.stat:md5,94682d1bc608ade150dd11993fbfd2a3" + ] + ], + [ + "versions.yml:md5,485fbdd68f35d563c8559e1afedc4c53" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:23:16.451408" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/dedup/tests/nextflow.config b/modules/nf-core/pairtools/dedup/tests/nextflow.config new file mode 100644 index 00000000..d0cfe51f --- /dev/null +++ b/modules/nf-core/pairtools/dedup/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: PAIRTOOLS_DEDUP { + ext.prefix = { "${meta.id}.dedup" } + } +} diff --git a/modules/nf-core/pairtools/merge/environment.yml b/modules/nf-core/pairtools/merge/environment.yml new file mode 100644 index 00000000..c03efb71 --- /dev/null +++ b/modules/nf-core/pairtools/merge/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 diff --git a/modules/nf-core/pairtools/merge/main.nf b/modules/nf-core/pairtools/merge/main.nf new file mode 100644 index 00000000..f450c25d --- /dev/null +++ b/modules/nf-core/pairtools/merge/main.nf @@ -0,0 +1,37 @@ +process PAIRTOOLS_MERGE { + tag "${meta.id}" + label 'process_medium' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : + 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(allpairs) + + output: + tuple val(meta), path("*pairs.gz"), emit:pairs + path("versions.yml"), emit:versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_merged" + """ + pairtools merge \ + ${args} \ + --nproc ${task.cpus} \ + -o ${prefix}.pairs.gz \ + ${allpairs} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | tr '\\n' ',' | sed 's/.*pairtools.*version //' | sed 's/,\$/\\n/') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pairtools/merge/meta.yml b/modules/nf-core/pairtools/merge/meta.yml new file mode 100644 index 00000000..b7bccc3c --- /dev/null +++ b/modules/nf-core/pairtools/merge/meta.yml @@ -0,0 +1,40 @@ +name: pairtools_merge +description: Merge multiple pairs/pairsam files +keywords: + - merge + - pairs + - pairsam +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - allpairs: + type: file + description: All pair files to merge +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - pairs: + type: file + description: Merged pairs file + pattern: "*.{pairs.gz}" +authors: + - "@nservant" +maintainers: + - "@nservant" diff --git a/modules/nf-core/pairtools/merge/pairtools-merge.diff b/modules/nf-core/pairtools/merge/pairtools-merge.diff new file mode 100644 index 00000000..fa789f38 --- /dev/null +++ b/modules/nf-core/pairtools/merge/pairtools-merge.diff @@ -0,0 +1,26 @@ +Changes in module 'nf-core/pairtools/merge' +--- modules/nf-core/pairtools/merge/environment.yml ++++ modules/nf-core/pairtools/merge/environment.yml +@@ -2,5 +2,5 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::pairtools=1.0.2 ++ - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 + +--- modules/nf-core/pairtools/merge/main.nf ++++ modules/nf-core/pairtools/merge/main.nf +@@ -6,8 +6,8 @@ + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/pairtools:1.0.2--py39h2a9f597_0' : +- 'biocontainers/pairtools:1.0.2--py39h2a9f597_0' }" ++ 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : ++ 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(allpairs) + +************************************************************ diff --git a/modules/nf-core/pairtools/merge/tests/main.nf.test b/modules/nf-core/pairtools/merge/tests/main.nf.test new file mode 100644 index 00000000..d9cfa7d0 --- /dev/null +++ b/modules/nf-core/pairtools/merge/tests/main.nf.test @@ -0,0 +1,37 @@ + +nextflow_process { + + name "Test Process PAIRTOOLS_MERGE" + script "../main.nf" + process "PAIRTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "pairtools" + tag "pairtools/merge" + + test("test-pairtools-merge") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.pairsam', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.pairs[0][1]).linesGzip[3..7], + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/pairtools/merge/tests/main.nf.test.snap b/modules/nf-core/pairtools/merge/tests/main.nf.test.snap new file mode 100644 index 00000000..3aabbca3 --- /dev/null +++ b/modules/nf-core/pairtools/merge/tests/main.nf.test.snap @@ -0,0 +1,21 @@ +{ + "test-pairtools-merge": { + "content": [ + [ + "#samheader: @SQ\tSN:chr1\tLN:100", + "#samheader: @SQ\tSN:chr2\tLN:100", + "#samheader: @SQ\tSN:chr3\tLN:100", + "#samheader: @PG\tID:bwa\tPN:bwa\tVN:0.7.15-r1140\tCL:bwa mem -SP /path/ucsc.hg19.fasta.gz /path/1.fastq.gz /path/2.fastq.gz", + "#chromosomes: chr2 chr3 chr1" + ], + [ + "versions.yml:md5,e0acb3bd173f64f9984f597571e80eb0" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:19:28.360208" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/parse/environment.yml b/modules/nf-core/pairtools/parse/environment.yml new file mode 100644 index 00000000..c03efb71 --- /dev/null +++ b/modules/nf-core/pairtools/parse/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 diff --git a/modules/nf-core/pairtools/parse/main.nf b/modules/nf-core/pairtools/parse/main.nf new file mode 100644 index 00000000..6a508b0f --- /dev/null +++ b/modules/nf-core/pairtools/parse/main.nf @@ -0,0 +1,45 @@ +process PAIRTOOLS_PARSE { + tag "$meta.id" + label 'process_high' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : + 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(bam) + path chromsizes + + output: + tuple val(meta), path("*.pairsam.gz") , emit: pairsam + tuple val(meta), path("*.pairsam.stat"), emit: stat + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + int decompression_cpus = Math.max(1, Math.ceil(task.cpus/4.0) as int) + int compression_cpus = Math.max(1, task.cpus-decompression_cpus-1) as int + """ + pairtools \\ + parse \\ + -c $chromsizes \\ + --nproc-in $decompression_cpus \\ + --nproc-out $compression_cpus \\ + $args \\ + --output-stats ${prefix}.pairsam.stat \\ + -o ${prefix}.pairsam.gz \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | tr '\\n' ',' | sed 's/.*pairtools.*version //' | sed 's/,\$/\\n/') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pairtools/parse/meta.yml b/modules/nf-core/pairtools/parse/meta.yml new file mode 100644 index 00000000..e7e448ef --- /dev/null +++ b/modules/nf-core/pairtools/parse/meta.yml @@ -0,0 +1,48 @@ +name: pairtools_parse +description: Find ligation junctions in .sam, make .pairs +keywords: + - ligation junctions + - parse + - pairtools +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - chromsizes: + type: file + description: chromosome size file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - pairsam: + type: file + description: parsed pair file + pattern: "*.{pairsam.gz}" + - stat: + type: file + description: stats of the pairs + pattern: "*.{pairsam.stat}" +authors: + - "@jianhong" +maintainers: + - "@jianhong" diff --git a/modules/nf-core/pairtools/parse/pairtools-parse.diff b/modules/nf-core/pairtools/parse/pairtools-parse.diff new file mode 100644 index 00000000..2a20363a --- /dev/null +++ b/modules/nf-core/pairtools/parse/pairtools-parse.diff @@ -0,0 +1,47 @@ +Changes in module 'nf-core/pairtools/parse' +--- modules/nf-core/pairtools/parse/environment.yml ++++ modules/nf-core/pairtools/parse/environment.yml +@@ -2,5 +2,5 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::pairtools=1.0.2 ++ - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 + +--- modules/nf-core/pairtools/parse/main.nf ++++ modules/nf-core/pairtools/parse/main.nf +@@ -1,13 +1,13 @@ + process PAIRTOOLS_PARSE { + tag "$meta.id" +- label 'process_low' ++ label 'process_high' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/pairtools:1.0.2--py39h2a9f597_0' : +- 'biocontainers/pairtools:1.0.2--py39h2a9f597_0' }" ++ 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : ++ 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(bam) +@@ -24,10 +24,14 @@ + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" ++ int decompression_cpus = Math.max(1, Math.ceil(task.cpus/4.0) as int) ++ int compression_cpus = Math.max(1, task.cpus-decompression_cpus-1) as int + """ + pairtools \\ + parse \\ + -c $chromsizes \\ ++ --nproc-in $decompression_cpus \\ ++ --nproc-out $compression_cpus \\ + $args \\ + --output-stats ${prefix}.pairsam.stat \\ + -o ${prefix}.pairsam.gz \\ + +************************************************************ diff --git a/modules/nf-core/pairtools/parse/tests/main.nf.test b/modules/nf-core/pairtools/parse/tests/main.nf.test new file mode 100644 index 00000000..27f9bc32 --- /dev/null +++ b/modules/nf-core/pairtools/parse/tests/main.nf.test @@ -0,0 +1,40 @@ + +nextflow_process { + + name "Test Process PAIRTOOLS_PARSE" + script "../main.nf" + process "PAIRTOOLS_PARSE" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "pairtools" + tag "pairtools/parse" + + test("test-pairtools-parse") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.sam', checkIfExists: true) ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.chrom.sizes', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.pairsam[0][1]).linesGzip[3..7], + process.out.stat, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/pairtools/parse/tests/main.nf.test.snap b/modules/nf-core/pairtools/parse/tests/main.nf.test.snap new file mode 100644 index 00000000..c06e572c --- /dev/null +++ b/modules/nf-core/pairtools/parse/tests/main.nf.test.snap @@ -0,0 +1,30 @@ +{ + "test-pairtools-parse": { + "content": [ + [ + "#chromsize: chr1 1000", + "#chromsize: chr2 1000", + "#samheader: @SQ\tSN:chr1\tLN:1000", + "#samheader: @SQ\tSN:chr2\tLN:1000", + "#samheader: @PG\tID:mock\tPN:mock\tVN:0.0.0\tCL:mock" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.raw.pairsam.stat:md5,054bf78ee4f0a4c447ad3eeb81f1f4ae" + ] + ], + [ + "versions.yml:md5,2c8cb00722749f8e3831464a5057c519" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:17:35.185642" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/parse/tests/nextflow.config b/modules/nf-core/pairtools/parse/tests/nextflow.config new file mode 100644 index 00000000..d662e86b --- /dev/null +++ b/modules/nf-core/pairtools/parse/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: PAIRTOOLS_PARSE { + ext.prefix = { "${meta.id}.raw" } + } +} diff --git a/modules/nf-core/pairtools/select/environment.yml b/modules/nf-core/pairtools/select/environment.yml new file mode 100644 index 00000000..e88acbcd --- /dev/null +++ b/modules/nf-core/pairtools/select/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairtools=1.0.2 + - conda-forge::numpy=1.23 diff --git a/modules/nf-core/pairtools/select/main.nf b/modules/nf-core/pairtools/select/main.nf new file mode 100644 index 00000000..69e8d47f --- /dev/null +++ b/modules/nf-core/pairtools/select/main.nf @@ -0,0 +1,38 @@ +process PAIRTOOLS_SELECT { + tag "$meta.id" + label 'process_medium' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairtools:1.0.2--py39h2a9f597_0' : + 'biocontainers/pairtools:1.0.2--py39h2a9f597_0' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.selected.pairs.gz") , emit: selected + tuple val(meta), path("*.unselected.pairs.gz"), emit: unselected + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + pairtools select \\ + "$args" \\ + -o ${prefix}.selected.pairs.gz \\ + --output-rest ${prefix}.unselected.pairs.gz \\ + ${input} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | tr '\\n' ',' | sed 's/.*pairtools.*version //' | sed 's/,\$/\\n/') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pairtools/select/meta.yml b/modules/nf-core/pairtools/select/meta.yml new file mode 100644 index 00000000..e9aef9a2 --- /dev/null +++ b/modules/nf-core/pairtools/select/meta.yml @@ -0,0 +1,44 @@ +name: pairtools_select +description: Select pairs according to given condition by options.args +keywords: + - select + - pairs + - filter +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: pairs file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - selected: + type: file + description: Selected pairs file + pattern: "*.{selected.pairs.gz}" + - unselected: + type: file + description: Rest pairs file. + pattern: "*.{unselected.pairs.gz}" +authors: + - "@jianhong" +maintainers: + - "@jianhong" diff --git a/modules/nf-core/pairtools/select/tests/main.nf.test b/modules/nf-core/pairtools/select/tests/main.nf.test new file mode 100644 index 00000000..ec4ece4f --- /dev/null +++ b/modules/nf-core/pairtools/select/tests/main.nf.test @@ -0,0 +1,39 @@ + +nextflow_process { + + name "Test Process PAIRTOOLS_SELECT" + script "../main.nf" + process "PAIRTOOLS_SELECT" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "pairtools" + tag "pairtools/select" + + test("test-pairtools-select") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.pairsam', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.selected[0][1]).linesGzip[3..7], + path(process.out.unselected[0][1]).linesGzip[3..7], + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/pairtools/select/tests/main.nf.test.snap b/modules/nf-core/pairtools/select/tests/main.nf.test.snap new file mode 100644 index 00000000..d4361209 --- /dev/null +++ b/modules/nf-core/pairtools/select/tests/main.nf.test.snap @@ -0,0 +1,28 @@ +{ + "test-pairtools-select": { + "content": [ + [ + "#chromosomes: chr2 chr3 chr1", + "#chromsize: chr2 100", + "#chromsize: chr3 100", + "#chromsize: chr1 100", + "#samheader: @SQ\tSN:chr1\tLN:100" + ], + [ + "#chromosomes: chr2 chr3 chr1", + "#chromsize: chr2 100", + "#chromsize: chr3 100", + "#chromsize: chr1 100", + "#samheader: @SQ\tSN:chr1\tLN:100" + ], + [ + "versions.yml:md5,ca2f02d3bd0e277e9f578067ff87c19d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:13:46.44029" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/select/tests/nextflow.config b/modules/nf-core/pairtools/select/tests/nextflow.config new file mode 100644 index 00000000..67ff4e1d --- /dev/null +++ b/modules/nf-core/pairtools/select/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: PAIRTOOLS_SELECT { + ext.args = "(pair_type == \'RU\') or (pair_type == \'UR\') or (pair_type == \'UU\')" + } +} diff --git a/modules/nf-core/pairtools/sort/environment.yml b/modules/nf-core/pairtools/sort/environment.yml new file mode 100644 index 00000000..c03efb71 --- /dev/null +++ b/modules/nf-core/pairtools/sort/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 diff --git a/modules/nf-core/pairtools/sort/main.nf b/modules/nf-core/pairtools/sort/main.nf new file mode 100644 index 00000000..7ec17cc7 --- /dev/null +++ b/modules/nf-core/pairtools/sort/main.nf @@ -0,0 +1,40 @@ +process PAIRTOOLS_SORT { + tag "$meta.id" + label 'process_high' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : + 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.pairs.gz"), emit: sorted + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def buffer = task.memory.toGiga().intdiv(2) + """ + pairtools \\ + sort \\ + $args \\ + --nproc $task.cpus \\ + --memory ${buffer}G \\ + -o ${prefix}.pairs.gz \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | tr '\\n' ',' | sed 's/.*pairtools.*version //' | sed 's/,\$/\\n/') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pairtools/sort/meta.yml b/modules/nf-core/pairtools/sort/meta.yml new file mode 100644 index 00000000..987aebb0 --- /dev/null +++ b/modules/nf-core/pairtools/sort/meta.yml @@ -0,0 +1,42 @@ +name: pairtools_sort +description: Sort a .pairs/.pairsam file +keywords: + - sort + - pairs + - pairsam +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: A pairs file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - sorted: + type: file + description: Sorted pairs file + pattern: "*.{pairs.gz}" +authors: + - "@jianhong" + - "@nservant" +maintainers: + - "@jianhong" + - "@nservant" diff --git a/modules/nf-core/pairtools/sort/pairtools-sort.diff b/modules/nf-core/pairtools/sort/pairtools-sort.diff new file mode 100644 index 00000000..c916f03b --- /dev/null +++ b/modules/nf-core/pairtools/sort/pairtools-sort.diff @@ -0,0 +1,26 @@ +Changes in module 'nf-core/pairtools/sort' +--- modules/nf-core/pairtools/sort/environment.yml ++++ modules/nf-core/pairtools/sort/environment.yml +@@ -2,5 +2,5 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::pairtools=1.0.2 ++ - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 + +--- modules/nf-core/pairtools/sort/main.nf ++++ modules/nf-core/pairtools/sort/main.nf +@@ -6,8 +6,8 @@ + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/pairtools:1.0.2--py39h2a9f597_0' : +- 'biocontainers/pairtools:1.0.2--py39h2a9f597_0' }" ++ 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : ++ 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(input) + +************************************************************ diff --git a/modules/nf-core/pairtools/sort/tests/main.nf.test b/modules/nf-core/pairtools/sort/tests/main.nf.test new file mode 100644 index 00000000..a4e789bc --- /dev/null +++ b/modules/nf-core/pairtools/sort/tests/main.nf.test @@ -0,0 +1,38 @@ + +nextflow_process { + + name "Test Process PAIRTOOLS_SORT" + script "../main.nf" + process "PAIRTOOLS_SORT" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "pairtools" + tag "pairtools/sort" + + test("test-pairtools-sort") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.pairsam', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.sorted[0][1]).linesGzip[3..7], + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/pairtools/sort/tests/main.nf.test.snap b/modules/nf-core/pairtools/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..1b22f328 --- /dev/null +++ b/modules/nf-core/pairtools/sort/tests/main.nf.test.snap @@ -0,0 +1,21 @@ +{ + "test-pairtools-sort": { + "content": [ + [ + "#genome_assembly: unknown", + "#chromosomes: : chr1 chr2 chr3", + "#chromsize: chr2 100", + "#chromsize: chr3 100", + "#chromsize: chr1 100" + ], + [ + "versions.yml:md5,6f5e6b4260ee11d35e306d2e085fb762" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:12:01.451816" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/sort/tests/nextflow.config b/modules/nf-core/pairtools/sort/tests/nextflow.config new file mode 100644 index 00000000..566f8da2 --- /dev/null +++ b/modules/nf-core/pairtools/sort/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: PAIRTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + } +} diff --git a/modules/nf-core/pairtools/split/environment.yml b/modules/nf-core/pairtools/split/environment.yml new file mode 100644 index 00000000..c03efb71 --- /dev/null +++ b/modules/nf-core/pairtools/split/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 diff --git a/modules/nf-core/pairtools/split/main.nf b/modules/nf-core/pairtools/split/main.nf new file mode 100644 index 00000000..e8a2ce0c --- /dev/null +++ b/modules/nf-core/pairtools/split/main.nf @@ -0,0 +1,69 @@ +process PAIRTOOLS_SPLIT { + tag "${meta.id}" + label 'process_medium' + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 + conda "bioconda::pairtools=1.1.0 conda-forge::numpy=1.23" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : + 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(pairs) + tuple val(meta), path(fasta) + val sort_bam + + output: + tuple val(meta), path("*.split.pairs.gz"), emit:pairs + tuple val(meta), path("*.bam") , emit:bam , optional:true + tuple val(meta), path("*.cram") , emit: cram, optional:true + tuple val(meta), path("*.crai") , emit: crai, optional:true + tuple val(meta), path("*.csi") , emit: csi , optional:true + path("versions.yml") , emit:versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + """ + export MPLCONFIGDIR=tmp + pairtools split \ + --nproc-in ${task.cpus} --nproc-out ${task.cpus} \ + --output-pairs ${prefix}.split.pairs.gz \ + --output-sam - \ + ${args} \ + ${pairs} \ + | samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.split.pairs.${extension} - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version 2>&1 | sed 's/pairtools, version //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + export MPLCONFIGDIR=tmp + echo "" | gzip > ${prefix}.split.pairs.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | sed 's/pairtools, version //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/pairtools/split/meta.yml b/modules/nf-core/pairtools/split/meta.yml new file mode 100644 index 00000000..e659f93a --- /dev/null +++ b/modules/nf-core/pairtools/split/meta.yml @@ -0,0 +1,45 @@ +name: "pairtools_split" +description: Split a .pairsam file into .pairs and .sam. +keywords: + - split + - pairs + - bam +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pairs: + type: file + description: pairsam file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - pairs: + type: file + description: Duplicates removed pairs + pattern: "*.{pairs.gz}" + - bam: + type: file + description: Output BAM file + pattern: "*.bam" + +authors: + - "@nservant" diff --git a/modules/nf-core/pairtools/split/pairtools-split.diff b/modules/nf-core/pairtools/split/pairtools-split.diff new file mode 100644 index 00000000..b603bd89 --- /dev/null +++ b/modules/nf-core/pairtools/split/pairtools-split.diff @@ -0,0 +1,82 @@ +Changes in module 'nf-core/pairtools/split' +--- modules/nf-core/pairtools/split/environment.yml ++++ modules/nf-core/pairtools/split/environment.yml +@@ -2,5 +2,5 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::pairtools=1.0.2 ++ - bioconda::pairtools=1.1.0 + - conda-forge::numpy=1.23 + +--- modules/nf-core/pairtools/split/main.nf ++++ modules/nf-core/pairtools/split/main.nf +@@ -4,17 +4,22 @@ + + // Pinning numpy to 1.23 until https://github.com/open2c/pairtools/issues/170 is resolved + // Not an issue with the biocontainers because they were built prior to numpy 1.24 +- conda "bioconda::pairtools=1.0.2 conda-forge::numpy=1.23" ++ conda "bioconda::pairtools=1.1.0 conda-forge::numpy=1.23" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/pairtools:1.0.2--py39h2a9f597_0' : +- 'biocontainers/pairtools:1.0.2--py39h2a9f597_0' }" ++ 'https://depot.galaxyproject.org/singularity/pairtools:1.1.0--py39hd5a99d8_2' : ++ 'biocontainers/pairtools:1.1.0--py39hd5a99d8_2' }" + + input: + tuple val(meta), path(pairs) ++ tuple val(meta), path(fasta) ++ val sort_bam + + output: + tuple val(meta), path("*.split.pairs.gz"), emit:pairs +- tuple val(meta), path("*.bam") , emit:bam , optional:true ++ tuple val(meta), path("*.bam") , emit:bam , optional:true ++ tuple val(meta), path("*.cram") , emit: cram, optional:true ++ tuple val(meta), path("*.crai") , emit: crai, optional:true ++ tuple val(meta), path("*.csi") , emit: csi , optional:true + path("versions.yml") , emit:versions + + when: +@@ -22,18 +27,30 @@ + + script: + def args = task.ext.args ?: '' ++ def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" ++ def samtools_command = sort_bam ? 'sort' : 'view' ++ ++ def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ ++ def extension_matcher = (args2 =~ extension_pattern) ++ def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" ++ def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" ++ if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" ++ + """ + export MPLCONFIGDIR=tmp + pairtools split \ + --nproc-in ${task.cpus} --nproc-out ${task.cpus} \ + --output-pairs ${prefix}.split.pairs.gz \ ++ --output-sam - \ + ${args} \ +- ${pairs} ++ ${pairs} \ ++ | samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.split.pairs.${extension} - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version 2>&1 | sed 's/pairtools, version //') ++ samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + stub: +@@ -45,6 +62,7 @@ + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pairtools: \$(pairtools --version | sed 's/pairtools, version //') ++ samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + +************************************************************ diff --git a/modules/nf-core/pairtools/split/tests/main.nf.test b/modules/nf-core/pairtools/split/tests/main.nf.test new file mode 100644 index 00000000..ad050dec --- /dev/null +++ b/modules/nf-core/pairtools/split/tests/main.nf.test @@ -0,0 +1,58 @@ +nextflow_process { + + name "Test Process PAIRTOOLS_SPLIT" + script "../main.nf" + process "PAIRTOOLS_SPLIT" + + tag "modules" + tag "modules_nfcore" + tag "pairtools" + tag "pairtools/split" + + test("mock_pairsam") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.pairsam', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert process.out.pairs.get(0).get(1).endsWith("test.split.pairs.gz") } + ) + } + + } + + + test("mock_pairsam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.pairsam', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/pairtools/split/tests/main.nf.test.snap b/modules/nf-core/pairtools/split/tests/main.nf.test.snap new file mode 100644 index 00000000..8ede40a3 --- /dev/null +++ b/modules/nf-core/pairtools/split/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "mock_pairsam": { + "content": [ + [ + "versions.yml:md5,0a4fa42a3bf8a568f64d3b3c9b9b7097" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-03T09:11:53.240905583" + }, + "mock_pairsam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.split.pairs.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,0a4fa42a3bf8a568f64d3b3c9b9b7097" + ], + "bam": [ + + ], + "pairs": [ + [ + { + "id": "test", + "single_end": false + }, + "test.split.pairs.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,0a4fa42a3bf8a568f64d3b3c9b9b7097" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T14:06:06.314038764" + } +} \ No newline at end of file diff --git a/modules/nf-core/pairtools/split/tests/tags.yml b/modules/nf-core/pairtools/split/tests/tags.yml new file mode 100644 index 00000000..007ac8f0 --- /dev/null +++ b/modules/nf-core/pairtools/split/tests/tags.yml @@ -0,0 +1,2 @@ +pairtools/split: + - "modules/nf-core/pairtools/split/**" diff --git a/modules/nf-core/pretextmap/environment.yml b/modules/nf-core/pretextmap/environment.yml new file mode 100644 index 00000000..bfbbee2b --- /dev/null +++ b/modules/nf-core/pretextmap/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pretextmap=0.1.9 + - bioconda::samtools=1.17 diff --git a/modules/nf-core/pretextmap/main.nf b/modules/nf-core/pretextmap/main.nf new file mode 100644 index 00000000..b1a4a3f7 --- /dev/null +++ b/modules/nf-core/pretextmap/main.nf @@ -0,0 +1,60 @@ + +process PRETEXTMAP { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-f3591ce8609c7b3b33e5715333200aa5c163aa61%3A44321ab4d64f0b6d0c93abbd1406369d1b3da684-0': + 'biocontainers/mulled-v2-f3591ce8609c7b3b33e5715333200aa5c163aa61:44321ab4d64f0b6d0c93abbd1406369d1b3da684-0' }" + + input: + tuple val(meta), path(input) + tuple val(meta2), path(fasta), path(fai) + + output: + tuple val(meta), path("*.pretext") , emit: pretext + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta}" : "" + + """ + if [[ $input == *.pairs.gz ]]; then + zcat $input | PretextMap \\ + $args \\ + -o ${prefix}.pretext + else + samtools \\ + view \\ + $reference \\ + -h \\ + $input | PretextMap \\ + $args \\ + -o ${prefix}.pretext + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pretextmap: \$(PretextMap | grep "Version" | sed 's/PretextMap Version //g') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.pretext + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pretextmap: \$(PretextMap | grep "Version" | sed 's/PretextMap Version //g') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/pretextmap/meta.yml b/modules/nf-core/pretextmap/meta.yml new file mode 100644 index 00000000..d79295cd --- /dev/null +++ b/modules/nf-core/pretextmap/meta.yml @@ -0,0 +1,59 @@ +name: "pretextmap" +description: converts sam/bam/cram/pairs into genome contact map +keywords: + - contact + - bam + - map +tools: + - "pretextmap": + description: "Paired REad TEXTure Mapper. Converts SAM formatted read pairs into + genome contact maps." + homepage: "https://github.com/wtsi-hpag/PretextMap" + documentation: "https://github.com/wtsi-hpag/PretextMap/blob/master/README.md" + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file or pairs formatted reads file + pattern: "*.{bam,cram,sam,pairs.gz}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference sequence file + pattern: "*.{fasta,fna,fa}" + - fai: + type: file + description: Reference sequence index file + pattern: "*.{fai}" +output: + - pretext: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pretext": + type: file + description: pretext map + pattern: "*.pretext" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@marrip" + - "@getrudeln" +maintainers: + - "@marrip" + - "@getrudeln" diff --git a/modules/nf-core/pretextmap/tests/main.nf.test b/modules/nf-core/pretextmap/tests/main.nf.test new file mode 100644 index 00000000..cd2c3919 --- /dev/null +++ b/modules/nf-core/pretextmap/tests/main.nf.test @@ -0,0 +1,148 @@ +nextflow_process { + + name "Test Process PRETEXTMAP" + script "../main.nf" + process "PRETEXTMAP" + + tag "modules" + tag "modules_nfcore" + tag "pretext" + tag "pretextmap" + + test("homo_cram_map") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_cram_map_nofai") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + [] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_bam_map") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mapped_pairs_map") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/4dn-dcic/pairix/master/samples/test_4dn.pairs.gz", checkIfExists: true) + ] + + input[1] = [ + [], + [], + [] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_cram_map_stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end: false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/pretextmap/tests/main.nf.test.snap b/modules/nf-core/pretextmap/tests/main.nf.test.snap new file mode 100644 index 00000000..48697af8 --- /dev/null +++ b/modules/nf-core/pretextmap/tests/main.nf.test.snap @@ -0,0 +1,157 @@ +{ + "homo_cram_map": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T10:53:43.322902" + }, + "homo_cram_map_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T11:07:44.32508" + }, + "homo_cram_map_nofai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T10:58:16.804287" + }, + "mapped_pairs_map": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,b47be7fd285a2de68643f73f85ba84f1" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,b47be7fd285a2de68643f73f85ba84f1" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T11:07:32.047007" + }, + "homo_bam_map": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T11:02:50.120033" + } +} \ No newline at end of file diff --git a/modules/nf-core/pretextmap/tests/tags.yml b/modules/nf-core/pretextmap/tests/tags.yml new file mode 100644 index 00000000..70f7eefc --- /dev/null +++ b/modules/nf-core/pretextmap/tests/tags.yml @@ -0,0 +1,2 @@ +pretextmap: + - "modules/nf-core/pretextmap/**" diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml new file mode 100644 index 00000000..b98cbb99 --- /dev/null +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf new file mode 100644 index 00000000..bdcdbc95 --- /dev/null +++ b/modules/nf-core/samtools/faidx/main.nf @@ -0,0 +1,50 @@ +process SAMTOOLS_FAIDX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" + + input: + tuple val(meta), path(fasta) + tuple val(meta2), path(fai) + + output: + tuple val(meta), path ("*.{fa,fasta}") , emit: fa , optional: true + tuple val(meta), path ("*.fai") , emit: fai, optional: true + tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + samtools \\ + faidx \\ + $fasta \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() + def fastacmd = match[0] ? "touch ${match[0][1]}" : '' + """ + ${fastacmd} + touch ${fasta}.fai + + cat <<-END_VERSIONS > versions.yml + + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml new file mode 100644 index 00000000..f3c25de2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -0,0 +1,65 @@ +name: samtools_faidx +description: Index FASTA file +keywords: + - index + - fasta + - faidx +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fa: + type: file + description: FASTA file + pattern: "*.{fa}" + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" + - gzi: + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@ewels" + - "@phue" +maintainers: + - "@drpatelh" + - "@ewels" + - "@phue" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 00000000..17244ef2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,122 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + + test("test_samtools_faidx") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + config "./nextflow2.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 00000000..3223b72b --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,249 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:42:14.779784761" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "3": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "versions": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:42:20.256633877" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:42:25.632577273" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:42:31.058424849" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,2db78952923a61e05d50b95518b21856" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:42:36.479929617" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 00000000..f76a3ba0 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = 'MT192765.1 -o extract.fa' + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/nextflow2.config b/modules/nf-core/samtools/faidx/tests/nextflow2.config new file mode 100644 index 00000000..33ebbd5d --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow2.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = '-o extract.fa' + } +} diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml new file mode 100644 index 00000000..e4a83948 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/faidx: + - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml new file mode 100644 index 00000000..62054fc9 --- /dev/null +++ b/modules/nf-core/samtools/merge/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf new file mode 100644 index 00000000..34da4c7c --- /dev/null +++ b/modules/nf-core/samtools/merge/main.nf @@ -0,0 +1,61 @@ +process SAMTOOLS_MERGE { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(input_files, stageAs: "?/*") + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam + tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai") , optional:true, emit: crai + path "versions.yml" , emit: versions + + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def reference = fasta ? "--reference ${fasta}" : "" + """ + samtools \\ + merge \\ + --threads ${task.cpus-1} \\ + $args \\ + ${reference} \\ + ${prefix}.${file_type} \\ + $input_files + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def index_type = file_type == "bam" ? "csi" : "crai" + def index = args.contains("--write-index") ? "touch ${prefix}.${index_type}" : "" + """ + touch ${prefix}.${file_type} + ${index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml new file mode 100644 index 00000000..235aa219 --- /dev/null +++ b/modules/nf-core/samtools/merge/meta.yml @@ -0,0 +1,104 @@ +name: samtools_merge +description: Merge BAM or CRAM file +keywords: + - merge + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of the reference file the CRAM was created with (optional) + pattern: "*.fai" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: BAM file + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: CRAM file + pattern: "*.{cram}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/merge/tests/index.config b/modules/nf-core/samtools/merge/tests/index.config new file mode 100644 index 00000000..8c5668cf --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--write-index" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test new file mode 100644 index 00000000..40b36e82 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -0,0 +1,137 @@ +nextflow_process { + + name "Test Process SAMTOOLS_MERGE" + script "../main.nf" + process "SAMTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/merge" + + test("bams") { + + config "./index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, + { assert snapshot(process.out.cram).match("bams_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_csi") }, + { assert snapshot(process.out.crai).match("bams_crai") }, + { assert snapshot(process.out.versions).match("bams_versions") } + ) + } + } + + test("crams") { + + config "./index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.cram[0][1]).name).match("crams_cram") }, + { assert snapshot(process.out.bam).match("crams_bam") }, + { assert snapshot(file(process.out.crai[0][1]).name).match("crams_crai") }, + { assert snapshot(process.out.csi).match("crams_csi") }, + { assert snapshot(process.out.versions).match("crams_versions") } + ) + } + } + + test("bam") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.versions).match("bam_versions") } + ) + } + } + + test("bams_stub") { + + config "./index.config" + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, + { assert snapshot(process.out.cram).match("bams_stub_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_stub_csi") }, + { assert snapshot(process.out.crai).match("bams_stub_crai") }, + { assert snapshot(process.out.versions).match("bams_stub_versions") } + ) + } + } +} diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap new file mode 100644 index 00000000..0a41e01a --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -0,0 +1,228 @@ +{ + "crams_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.647389" + }, + "bams_stub_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.937013" + }, + "bams_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.928616" + }, + "bams_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.923289" + }, + "bams_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.925716" + }, + "crams_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.655959" + }, + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.319539" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:30.476887194" + }, + "bams_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.92719" + }, + "bams_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.940498" + }, + "bam_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.328852" + }, + "bams_stub_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:52.203823961" + }, + "bam_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.324219" + }, + "bams_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.933153" + }, + "bams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:29:57.524363148" + }, + "crams_bam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.650652" + }, + "crams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:06.977096207" + }, + "bam_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.33292" + }, + "crams_crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.653512" + }, + "bams_stub_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.943839" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/tags.yml b/modules/nf-core/samtools/merge/tests/tags.yml new file mode 100644 index 00000000..b869abcb --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/merge: + - "modules/nf-core/samtools/merge/**" diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml new file mode 100644 index 00000000..62054fc9 --- /dev/null +++ b/modules/nf-core/samtools/sort/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf new file mode 100644 index 00000000..caf3c61a --- /dev/null +++ b/modules/nf-core/samtools/sort/main.nf @@ -0,0 +1,72 @@ +process SAMTOOLS_SORT { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta) , path(bam) + tuple val(meta2), path(fasta) + + output: + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + def reference = fasta ? "--reference ${fasta}" : "" + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + + """ + samtools cat \\ + ${bam} \\ + | \\ + samtools sort \\ + $args \\ + -T ${prefix} \\ + --threads $task.cpus \\ + ${reference} \\ + -o ${prefix}.${extension} \\ + - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + """ + touch ${prefix}.${extension} + if [ "${extension}" == "bam" ]; + then + touch ${prefix}.${extension}.csi + elif [ "${extension}" == "cram" ]; + then + touch ${prefix}.${extension}.crai + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml new file mode 100644 index 00000000..a9dbec5a --- /dev/null +++ b/modules/nf-core/samtools/sort/meta.yml @@ -0,0 +1,92 @@ +name: samtools_sort +description: Sort SAM/BAM/CRAM file +keywords: + - sort + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file(s) + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Sorted CRAM file + pattern: "*.{cram}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@ewels" + - "@matthdsm" +maintainers: + - "@drpatelh" + - "@ewels" + - "@matthdsm" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test new file mode 100644 index 00000000..b05e6691 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -0,0 +1,192 @@ +nextflow_process { + + name "Test Process SAMTOOLS_SORT" + script "../main.nf" + process "SAMTOOLS_SORT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/sort" + + test("bam") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("multiple bam") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("cram") { + + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("multiple bam - stub") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("cram - stub") { + + options "-stub" + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..469891fe --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -0,0 +1,287 @@ +{ + "cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:49:58.207549273" + }, + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:08.630951018" + }, + "cram - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:19.061912443" + }, + "multiple bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:55.479443" + }, + "multiple bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:36:13.781404" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:46.372244" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config new file mode 100644 index 00000000..f642771f --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index" + } + +} diff --git a/modules/nf-core/samtools/sort/tests/nextflow_cram.config b/modules/nf-core/samtools/sort/tests/nextflow_cram.config new file mode 100644 index 00000000..3a8c0188 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_cram.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index --output-fmt cram" + } + +} diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml new file mode 100644 index 00000000..cd63ea20 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/tags.yml @@ -0,0 +1,3 @@ +samtools/sort: + - modules/nf-core/samtools/sort/** + - tests/modules/nf-core/samtools/sort/** diff --git a/modules/nf-core/seqtk/cutn/environment.yml b/modules/nf-core/seqtk/cutn/environment.yml new file mode 100644 index 00000000..693aa5c1 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::seqtk=1.4 diff --git a/modules/nf-core/seqtk/cutn/main.nf b/modules/nf-core/seqtk/cutn/main.nf new file mode 100644 index 00000000..c2344a86 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/main.nf @@ -0,0 +1,49 @@ +process SEQTK_CUTN { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/seqtk:1.4--he4a0461_1' : + 'biocontainers/seqtk:1.4--he4a0461_1' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("*.bed") , emit: bed + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + seqtk \\ + cutN \\ + $args \\ + -g $fasta \\ + > ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqtk: \$(echo \$(seqtk 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + touch ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqtk: \$(echo \$(seqtk 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/seqtk/cutn/meta.yml b/modules/nf-core/seqtk/cutn/meta.yml new file mode 100644 index 00000000..2e39a477 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/meta.yml @@ -0,0 +1,46 @@ +name: seqtk_cutn +description: Generates a BED file containing genomic locations of lengths of N. +keywords: + - cut + - fasta + - seqtk +tools: + - seqtk: + description: Seqtk is a fast and lightweight tool for processing sequences in + the FASTA or FASTQ format. Seqtk mergepe command merges pair-end reads into + one interleaved file. + homepage: https://github.com/lh3/seqtk + documentation: https://docs.csc.fi/apps/seqtk/ + tool_dev_url: https://github.com/lh3/seqtk + licence: ["MIT"] + identifier: biotools:seqtk +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: A single fasta file to be split. + pattern: "*.{fasta}" +output: + - bed: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: The output bed which summarised locations of cuts + pattern: "*.{bed}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@DLBPointon" +maintainers: + - "@DLBPointon" diff --git a/modules/nf-core/seqtk/cutn/tests/main.nf.test b/modules/nf-core/seqtk/cutn/tests/main.nf.test new file mode 100644 index 00000000..46dfff1f --- /dev/null +++ b/modules/nf-core/seqtk/cutn/tests/main.nf.test @@ -0,0 +1,57 @@ +nextflow_process { + + name "Test Process SEQTK_CUTN" + script "../main.nf" + process "SEQTK_CUTN" + + tag "modules" + tag "modules_nfcore" + tag "seqtk" + tag "seqtk/cutn" + + test("homo_21_cut") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.bed[0][1]).name + ).match("genome_cut") + } + ) + } + } + + test("homo_21_cut_stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/seqtk/cutn/tests/main.nf.test.snap b/modules/nf-core/seqtk/cutn/tests/main.nf.test.snap new file mode 100644 index 00000000..998beda5 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/tests/main.nf.test.snap @@ -0,0 +1,70 @@ +{ + "genome_cut": { + "content": [ + "test.bed" + ], + "timestamp": "2024-02-22T16:02:14.744148" + }, + "homo_21_cut_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ], + "bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ] + } + ], + "timestamp": "2024-02-22T16:02:23.596389" + }, + "homo_21_cut": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,16cbba84e3a4bdbb52217afb5051f948" + ] + ], + "1": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ], + "bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,16cbba84e3a4bdbb52217afb5051f948" + ] + ], + "versions": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ] + } + ], + "timestamp": "2024-02-22T16:02:14.695205" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqtk/cutn/tests/tags.yml b/modules/nf-core/seqtk/cutn/tests/tags.yml new file mode 100644 index 00000000..13c64cc3 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/tests/tags.yml @@ -0,0 +1,2 @@ +seqtk/cutn: + - "modules/nf-core/seqtk/cutn/**" diff --git a/modules/nf-core/tidk/plot/environment.yml b/modules/nf-core/tidk/plot/environment.yml new file mode 100644 index 00000000..22eb538b --- /dev/null +++ b/modules/nf-core/tidk/plot/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::tidk=0.2.41" diff --git a/modules/nf-core/tidk/plot/main.nf b/modules/nf-core/tidk/plot/main.nf new file mode 100644 index 00000000..ef56f567 --- /dev/null +++ b/modules/nf-core/tidk/plot/main.nf @@ -0,0 +1,47 @@ +process TIDK_PLOT { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tidk:0.2.41--hdbdd923_0': + 'biocontainers/tidk:0.2.41--hdbdd923_0' }" + + input: + tuple val(meta), path(tsv) + + output: + tuple val(meta), path("*.svg"), emit: svg + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + tidk \\ + plot \\ + --output $prefix \\ + $args \\ + --tsv "$tsv" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tidk: \$(tidk --version | sed 's/tidk //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.svg + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tidk: \$(tidk --version | sed 's/tidk //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tidk/plot/meta.yml b/modules/nf-core/tidk/plot/meta.yml new file mode 100644 index 00000000..75289b28 --- /dev/null +++ b/modules/nf-core/tidk/plot/meta.yml @@ -0,0 +1,50 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "tidk_plot" +description: | + Plots telomeric repeat frequency against sliding window location + using data produced by `tidk/search` +keywords: + - genomics + - telomere + - search + - plot +tools: + - "tidk": + description: tidk is a toolkit to identify and visualise telomeric repeats in + genomes + homepage: "https://github.com/tolkit/telomeric-identifier" + documentation: "https://github.com/tolkit/telomeric-identifier" + tool_dev_url: "https://github.com/tolkit/telomeric-identifier" + doi: "10.5281/zenodo.10091385" + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - tsv: + type: file + description: Search results in TSV format from `tidk search` + pattern: "*.tsv" +output: + - svg: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.svg": + type: file + description: Telomere search plot + pattern: "*.svg" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/tidk/plot/tests/main.nf.test b/modules/nf-core/tidk/plot/tests/main.nf.test new file mode 100644 index 00000000..e807d7fc --- /dev/null +++ b/modules/nf-core/tidk/plot/tests/main.nf.test @@ -0,0 +1,72 @@ +nextflow_process { + + name "Test Process TIDK_PLOT" + script "../main.nf" + process "TIDK_PLOT" + + tag "modules" + tag "modules_nfcore" + tag "tidk" + tag "tidk/search" + tag "tidk/plot" + + test("homo_sapiens-genome_21_fasta-success") { + + setup { + run("TIDK_SEARCH") { + script "../../../../nf-core/tidk/search" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[1] = 'TTAGGG' + """ + } + } + } + + when { + process { + """ + input[0] = TIDK_SEARCH.out.tsv + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/tidk/plot/tests/main.nf.test.snap b/modules/nf-core/tidk/plot/tests/main.nf.test.snap new file mode 100644 index 00000000..e28d5aea --- /dev/null +++ b/modules/nf-core/tidk/plot/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "homo_sapiens-genome_21_fasta-success": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.svg:md5,e76985fdc220867a05967984c2c4675d" + ] + ], + "1": [ + "versions.yml:md5,b850b0d8b9add80d7863cc62e3f32c99" + ], + "svg": [ + [ + { + "id": "test" + }, + "test.svg:md5,e76985fdc220867a05967984c2c4675d" + ] + ], + "versions": [ + "versions.yml:md5,b850b0d8b9add80d7863cc62e3f32c99" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-12-05T14:29:24.721706" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.svg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,b850b0d8b9add80d7863cc62e3f32c99" + ], + "svg": [ + [ + { + "id": "test" + }, + "test.svg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,b850b0d8b9add80d7863cc62e3f32c99" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-12-16T18:50:29.344319" + } +} \ No newline at end of file diff --git a/modules/nf-core/tidk/plot/tests/tags.yml b/modules/nf-core/tidk/plot/tests/tags.yml new file mode 100644 index 00000000..91228695 --- /dev/null +++ b/modules/nf-core/tidk/plot/tests/tags.yml @@ -0,0 +1,2 @@ +tidk/plot: + - "modules/nf-core/tidk/plot/**" diff --git a/modules/nf-core/tidk/search/environment.yml b/modules/nf-core/tidk/search/environment.yml new file mode 100644 index 00000000..22eb538b --- /dev/null +++ b/modules/nf-core/tidk/search/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::tidk=0.2.41" diff --git a/modules/nf-core/tidk/search/main.nf b/modules/nf-core/tidk/search/main.nf new file mode 100644 index 00000000..820f8fda --- /dev/null +++ b/modules/nf-core/tidk/search/main.nf @@ -0,0 +1,62 @@ +process TIDK_SEARCH { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tidk:0.2.41--hdbdd923_0': + 'biocontainers/tidk:0.2.41--hdbdd923_0' }" + + input: + tuple val(meta), path(fasta) + val string + + output: + tuple val(meta), path("*.tsv") , emit: tsv , optional: true + tuple val(meta), path("*.bedgraph") , emit: bedgraph , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + tidk \\ + search \\ + --string $string \\ + --output $prefix \\ + --dir tidk \\ + $args \\ + $fasta + + mv \\ + tidk/${prefix}_telomeric_repeat_windows.tsv \\ + ${prefix}.tsv \\ + || echo "TSV file was not produced" + + mv \\ + tidk/${prefix}_telomeric_repeat_windows.bedgraph \\ + ${prefix}.bedgraph \\ + || echo "BEDGRAPH file was not produced" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tidk: \$(tidk --version | sed 's/tidk //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--extension bedgraph") ? 'bedgraph' : 'tsv' + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tidk: \$(tidk --version | sed 's/tidk //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tidk/search/meta.yml b/modules/nf-core/tidk/search/meta.yml new file mode 100644 index 00000000..9a30ff15 --- /dev/null +++ b/modules/nf-core/tidk/search/meta.yml @@ -0,0 +1,60 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "tidk_search" +description: Searches a genome for a telomere string such as TTAGGG +keywords: + - genomics + - telomere + - search +tools: + - "tidk": + description: tidk is a toolkit to identify and visualise telomeric repeats in + genomes + homepage: "https://github.com/tolkit/telomeric-identifier" + documentation: "https://github.com/tolkit/telomeric-identifier" + tool_dev_url: "https://github.com/tolkit/telomeric-identifier" + doi: "10.5281/zenodo.10091385" + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fasta: + type: file + description: The input fasta file + pattern: "*.{fsa,fa,fasta}" + - - string: + type: string + description: Search string such as TTAGGG +output: + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.tsv": + type: file + description: Search results in TSV format + pattern: "*.tsv" + - bedgraph: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.bedgraph": + type: file + description: Search results in BEDGRAPH format + pattern: "*.bedgraph" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/tidk/search/tests/main.nf.test b/modules/nf-core/tidk/search/tests/main.nf.test new file mode 100644 index 00000000..cb8b5393 --- /dev/null +++ b/modules/nf-core/tidk/search/tests/main.nf.test @@ -0,0 +1,111 @@ +nextflow_process { + + name "Test Process TIDK_SEARCH" + script "../main.nf" + process "TIDK_SEARCH" + + tag "modules" + tag "modules_nfcore" + tag "tidk" + tag "tidk/search" + + test("homo_sapiens-genome_fasta-bedgraph") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'TTAGGG' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens-genome_fasta-tsv") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'TTAGGG' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stub-bedgraph") { + + options '-stub' + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'TTAGGG' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stub-tsv") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'TTAGGG' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/tidk/search/tests/main.nf.test.snap b/modules/nf-core/tidk/search/tests/main.nf.test.snap new file mode 100644 index 00000000..69515c83 --- /dev/null +++ b/modules/nf-core/tidk/search/tests/main.nf.test.snap @@ -0,0 +1,158 @@ +{ + "stub-tsv": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ], + "bedgraph": [ + + ], + "tsv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-08T10:29:23.918538" + }, + "homo_sapiens-genome_fasta-bedgraph": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.bedgraph:md5,8277cc74bf083f51584ba6d2b8a8013f" + ] + ], + "2": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ], + "bedgraph": [ + [ + { + "id": "test" + }, + "test.bedgraph:md5,8277cc74bf083f51584ba6d2b8a8013f" + ] + ], + "tsv": [ + + ], + "versions": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-08T10:29:11.515308" + }, + "homo_sapiens-genome_fasta-tsv": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,5b44a89396f412eb571ea240ef9deedd" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ], + "bedgraph": [ + + ], + "tsv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,5b44a89396f412eb571ea240ef9deedd" + ] + ], + "versions": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-08T10:29:15.661774" + }, + "stub-bedgraph": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.bedgraph:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ], + "bedgraph": [ + [ + { + "id": "test" + }, + "test.bedgraph:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv": [ + + ], + "versions": [ + "versions.yml:md5,6baeeb0e50c9bea6975173a329179f8e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-08T10:29:19.802171" + } +} \ No newline at end of file diff --git a/modules/nf-core/tidk/search/tests/nextflow.config b/modules/nf-core/tidk/search/tests/nextflow.config new file mode 100644 index 00000000..5d36acfb --- /dev/null +++ b/modules/nf-core/tidk/search/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = '--extension bedgraph' +} diff --git a/modules/nf-core/tidk/search/tests/tags.yml b/modules/nf-core/tidk/search/tests/tags.yml new file mode 100644 index 00000000..6d27fc6d --- /dev/null +++ b/modules/nf-core/tidk/search/tests/tags.yml @@ -0,0 +1,2 @@ +tidk/search: + - "modules/nf-core/tidk/search/**" diff --git a/modules/nf-core/yahs/environment.yml b/modules/nf-core/yahs/environment.yml new file mode 100644 index 00000000..cb2acec8 --- /dev/null +++ b/modules/nf-core/yahs/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::yahs=1.2a.2 diff --git a/modules/nf-core/yahs/main.nf b/modules/nf-core/yahs/main.nf index 068fb719..470e5e2c 100644 --- a/modules/nf-core/yahs/main.nf +++ b/modules/nf-core/yahs/main.nf @@ -2,7 +2,7 @@ process YAHS { tag "$meta.id" label 'process_high' - conda "bioconda::yahs=1.2a.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/yahs:1.2a.2--h7132678_0': 'biocontainers/yahs:1.2a.2--h7132678_0' }" diff --git a/modules/nf-core/yahs/meta.yml b/modules/nf-core/yahs/meta.yml index 0c09bd63..7ddcc778 100644 --- a/modules/nf-core/yahs/meta.yml +++ b/modules/nf-core/yahs/meta.yml @@ -12,8 +12,7 @@ tools: documentation: "https://github.com/c-zhou/yahs" tool_dev_url: "https://github.com/c-zhou/yahs" doi: "10.1093/bioinformatics/btac808" - licence: "['MIT']" - + licence: ["MIT"] input: # Only when we have meta - meta: @@ -26,17 +25,14 @@ input: type: file description: BED file containing coordinates of read alignments pattern: "*.{bed,bam,bin}" - - fasta: type: file description: FASTA reference file pattern: "*.{fasta,fa}" - - fai: type: file description: index of the reference file pattern: "*.{fai}" - output: #Only when we have meta - meta: @@ -44,28 +40,23 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test' ] - - versions: type: file description: File containing software versions pattern: "versions.yml" - - scaffolds_fasta: type: file description: FASTA file with resulting contigs pattern: "*scaffolds_final.fa" - - scaffolds_agp: type: file description: AGP file containing contigs placing coordinates pattern: "*scaffolds_final.agp" - - binary: type: file - description: BIN file with alignment results - of Hi-C reads to the contigs in internal YaHS - binary format + description: BIN file with alignment results of Hi-C reads to the contigs in internal YaHS binary format pattern: "*bin" - authors: - "@ksenia-krasheninnikova" +maintainers: + - "@ksenia-krasheninnikova" diff --git a/modules/nf-core/yahs/tests/main.nf.test b/modules/nf-core/yahs/tests/main.nf.test new file mode 100644 index 00000000..6e09ff00 --- /dev/null +++ b/modules/nf-core/yahs/tests/main.nf.test @@ -0,0 +1,36 @@ + +nextflow_process { + + name "Test Process YAHS" + script "../main.nf" + process "YAHS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "yahs" + + test("sarscov2-bed-fasta-fai") { + + when { + process { + """ + input[0] = [ [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/yahs/tests/main.nf.test.snap b/modules/nf-core/yahs/tests/main.nf.test.snap new file mode 100644 index 00000000..a98c16fb --- /dev/null +++ b/modules/nf-core/yahs/tests/main.nf.test.snap @@ -0,0 +1,67 @@ +{ + "test-yahs": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_scaffolds_final.fa:md5,a7673a43fb4e3f0a87d2ca2fe48bd442" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test_scaffolds_final.agp:md5,7134a33534816100a84a6d32351c2168" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.bin:md5,c60503a616a0f7726176febdad3ae186" + ] + ], + "3": [ + "versions.yml:md5,007c44dd06fe8686b6f8068314601462" + ], + "binary": [ + [ + { + "id": "test" + }, + "test.bin:md5,c60503a616a0f7726176febdad3ae186" + ] + ], + "scaffolds_agp": [ + [ + { + "id": "test" + }, + "test_scaffolds_final.agp:md5,7134a33534816100a84a6d32351c2168" + ] + ], + "scaffolds_fasta": [ + [ + { + "id": "test" + }, + "test_scaffolds_final.fa:md5,a7673a43fb4e3f0a87d2ca2fe48bd442" + ] + ], + "versions": [ + "versions.yml:md5,007c44dd06fe8686b6f8068314601462" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T08:47:14.869961" + } +} \ No newline at end of file diff --git a/modules/nf-core/yahs/tests/nextflow.config b/modules/nf-core/yahs/tests/nextflow.config new file mode 100644 index 00000000..1691f241 --- /dev/null +++ b/modules/nf-core/yahs/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: 'test_yahs:YAHS' { + ext.prefix = { "${meta.id}" } + ext.args = '--no-contig-ec' + } +} diff --git a/nextflow.config b/nextflow.config index 3712430b..e091e30d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -56,10 +56,26 @@ params { fcs.database = null fcs.manifest = "https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/latest/all.manifest" fcs.ramdisk_path = '/dev/shm/gxdb' + // QUARTO + quarto_assembly_report = "$projectDir/assets/notebooks/assembly_report.qmd" // General module configuration - multiqc.config = "$baseDir/configs/multiqc_conf.yaml" - + multiqc.config = "$projectDir/configs/multiqc_conf.yaml" + multiqc_assembly_report_config = "$projectDir/configs/multiqc_assembly_report_config.yml" + // define HiC sequencing type [ "arima_v2", "arima_v1", "omnic", "" ] + hic_type = 'arima_v2' + // define how to sort the final HiC bam file: [ by_coordinate, by_name ] + hic_bam_sorting = 'by_name' + // define 1000bp bin size for cooler cload intervals + cooler_bin_size = 1000 + // define how to sort the HiC-maps: [ length, name, nosort ] + hic_map_sort_by = 'length' + // define minimum map quality for HiC alignments + hic_map_qv = 0 + // pacbio hifi coverage cap for pretext and higlass coverage track, e.g. cap repeats at + hifi_coverage_cap = 100 + // telomer motif + telomer_motif = "TTAGGG" } // Set container registry information @@ -70,8 +86,22 @@ singularity.registry = 'quay.io' includeConfig 'configs/nf-core-defaults.config' +// Set bash options +process.shell = """\ +bash + +set -e # Exit if a tool returns a non-zero status/exit code +set -u # Treat unset variables and parameters as an error +set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute +set -C # No clobber - prevent output redirection from overwriting files. +""" + profiles { + debug { + process.beforeScript = 'env' + } + conda { conda.enabled = true } @@ -88,11 +118,11 @@ profiles { docker { docker.enabled = true - docker.userEmulation = true + docker.runOptions = '-u $(id -u):$(id -g)' } arm { - docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' + docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -105,21 +135,18 @@ profiles { cpus = 8 memory = 30.GB } + process { + resourceLimits = [ + cpus: 8, + memory: 30.GB, + time: 1.d + ] + } } // Test profiles test { - params { - input = "$projectDir/assets/test_hsapiens.yml" - busco_lineages = 'eukaryota' - } - } - - testdata_full { - params { - input = "$projectDir/assets/test_dataset_full.yml" - busco_lineages = 'eukaryota' - } + includeConfig 'configs/test.config' } // Profiles for the Uppmax clusters diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 00000000..3b6ab4c6 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,9 @@ +config { + requires ( + "nf-test": "0.9.0" + ) + testsDir "tests" + workDir ".nf-test" + configFile "tests/nextflow.config" + profile "docker" +} diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 00000000..4780e68c --- /dev/null +++ b/pixi.lock @@ -0,0 +1,7772 @@ +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/linux-64/alsa-lib-1.2.12-h4ab18f5_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/archspec-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attmap-0.13.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/biopython-1.84-py312h9a8786e_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.32.3-h4bc722e_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/linux-64/cairo-1.18.0-hebfffa5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cattrs-24.1.2-pyhd8ed1ab_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/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-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/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.7.1-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.3.0-pyh7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coreutils-9.5-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/curl-8.10.1-hbbe4b11_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_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/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filetype-1.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.4-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.47.0-pl5321h59d505e_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/linux-64/graphite2-1.3.13-h59595ed_1003.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda + - 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-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_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/itsdangerous-2.2.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/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/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - 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/libcups-2.3.3-h4637d8d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.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.3-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.1.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.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/libjpeg-turbo-3.0.0-hd590300_1.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/libmamba-1.5.10-h4cc3d14_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.10-py312h7fb9e8e_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_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.30-h3509ff9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_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.1.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_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/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_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-he7c6b58_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.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/linux-64/mamba-1.5.10-py312h9460a1c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.6-pyhd8ed1ab_0.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.1.2-py312h7900ff3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/bioconda/noarch/nextflow-24.04.4-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/nf-core-3.0.2-pyhdfd78af_1.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/nf-test-0.9.2-h2a3209d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.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/openjdk-17.0.11-h38bd402_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/oyaml-1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.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/linux-64/perl-5.32.1-7_hd590300_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/piper-0.14.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pipestat-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.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/platformdirs-4.3.2-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/pre-commit-4.0.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-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/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + - 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/bioconda/noarch/pyfaidx-0.8.1.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pygithub-2.5.0-pyhd8ed1ab_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/pyjwt-2.10.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py312h66e93f0_4.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.5-h2ad013b_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-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/bioconda/noarch/pyvcf3-1.0.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_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/bioconda/noarch/refgenconf-0.12.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/refgenie-0.12.1-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.4.post0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.4.post0-h59595ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.2.1-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/noarch/rich-click-1.8.3-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-py312h98912ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h98912ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_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/smmap-5.0.0-pyhd8ed1ab_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/textual-0.71.0-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/tomli-2.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trogon-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.1-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.1-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-2024a-h8827d51_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ujson-5.10.0-py312h2ec8cdc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/url-normalize-1.4.3-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.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/virtualenv-20.27.1-pyhd8ed1ab_0.conda + - 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/xorg-fixesproto-5.0-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h7f98852_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h4bc722e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/yacman-0.9.3-pyhd8ed1ab_0.conda + - 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/zipp-3.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.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/annotated-types-0.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attmap-0.13.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/biopython-1.84-py312hbd25219_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.33.1-h44e7173_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/cattrs-24.1.2-pyhd8ed1ab_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/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-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/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.7.1-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.3.0-pyh7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coreutils-9.5-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-43.0.3-py312h83535b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/curl-8.10.1-h58e7537_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_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/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filetype-1.2.0-pyhd8ed1ab_0.tar.bz2 + - 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/freetype-2.12.1-h60636b9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.4-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/git-2.47.0-pl5321ha198fdc_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-75.1-h120a0e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_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/itsdangerous-2.2.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/osx-64/krb5-1.21.3-h37d8d59_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 + - 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.10.1-h58e7537_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-18.1.8-hd876a4e_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.22-h00291cd_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.3-hac325c4_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/libintl-0.22.5-hdfe23c8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.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/libmamba-1.5.10-hd44d3b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmambapy-1.5.10-py312haab923c_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/libpng-1.6.44-h4b8f8c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsolv-0.7.30-h69d5d9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_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/libtiff-4.7.0-h583c2ba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-heaf3512_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.4-ha54dae1_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/osx-64/mamba-1.5.10-py312ha12221d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.6-pyhd8ed1ab_0.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.1.2-py312hb401068_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_1.conda + - conda: https://conda.anaconda.org/bioconda/noarch/nextflow-24.04.4-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/nf-core-3.0.2-pyhdfd78af_1.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/nf-test-0.9.2-h2a3209d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.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/openjdk-17.0.11-h06b73d1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/oyaml-1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.3-py312h98e817e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.44-h7634a1b_2.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/osx-64/perl-5.32.1-7_h10d778d_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-11.0.0-py312h66fe14f_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/piper-0.14.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pipestat-0.11.0-pyhd8ed1ab_0.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/platformdirs-4.3.2-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/pre-commit-4.0.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-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/pthread-stubs-0.4-h00291cd_1002.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/bioconda/noarch/pyfaidx-0.8.1.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pygithub-2.5.0-pyhd8ed1ab_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/pyjwt-2.10.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.5.0-py312hb553811_4.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.5-h37a9e06_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-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/bioconda/noarch/pyvcf3-1.0.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_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/bioconda/noarch/refgenconf-0.12.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/refgenie-0.12.1-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproc-14.2.4.post0-h10d778d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproc-cpp-14.2.4.post0-h93d8f39_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.2.1-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/noarch/rich-click-1.8.3-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-py312h41838bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h41838bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_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/smmap-5.0.0-pyhd8ed1ab_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/textual-0.71.0-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/tomli-2.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trogon-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.1-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.1-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-2024a-h8827d51_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ujson-5.10.0-py312h5861a67_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ukkonen-1.0.1-py312hc5c4d5f_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/url-normalize-1.4.3-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.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/virtualenv-20.27.1-pyhd8ed1ab_0.conda + - 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/xorg-libxau-1.0.11-h00291cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h00291cd_0.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/noarch/yacman-0.9.3-pyhd8ed1ab_0.conda + - 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/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 + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attmap-0.13.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/biopython-1.84-py312h7e5086c_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-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.33.1-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cattrs-24.1.2-pyhd8ed1ab_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-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-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/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-arm64/conda-24.7.1-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.3.0-pyh7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coreutils-9.5-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-43.0.3-py312h5fad481_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/curl-8.10.1-h13a7ad3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_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/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filetype-1.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-10.2.1-h2ffa867_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozendict-2.4.4-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.47.0-pl5321hc14f901_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-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_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/itsdangerous-2.2.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-arm64/jsonpointer-3.0.0-py312h81bd7bf_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/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.4-h83d404f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-18.1.8-h3ed4263_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmamba-1.5.10-hbfbf5c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmambapy-1.5.10-py312h1ed1908_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsolv-0.7.30-h6c9b7f8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.4-hdb05f8b_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-arm64/lz4-c-1.9.4-hb7217d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mamba-1.5.10-py312h14bc7db_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.6-pyhd8ed1ab_0.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-arm64/markupsafe-3.0.2-py312ha0ccf2a_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-arm64/menuinst-2.1.2-py312h81bd7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/bioconda/noarch/nextflow-24.04.4-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/nf-core-3.0.2-pyhdfd78af_1.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/nf-test-0.9.2-h2a3209d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.3-py312h94ee1e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-17.0.11-h8f67a1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/oyaml-1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.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/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/piper-0.14.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pipestat-0.11.0-pyhd8ed1ab_0.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/platformdirs-4.3.2-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/pre-commit-4.0.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.0-py312h0bf5046_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pycosat-0.6.6-py312h02f2b3b_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-arm64/pydantic-core-2.23.4-py312he431725_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/pyfaidx-0.8.1.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pygithub-2.5.0-pyhd8ed1ab_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/pyjwt-2.10.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.5.0-py312h024a12e_4.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-arm64/python-3.12.5-h30c5eda_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-tzdata-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/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/bioconda/noarch/pyvcf3-1.0.3-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/refgenconf-0.12.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/refgenie-0.12.1-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-14.2.4.post0-h93a5062_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-cpp-14.2.4.post0-h965bd2d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.2.1-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/noarch/rich-click-1.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.21.0-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.6-py312he37b823_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312he37b823_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_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/smmap-5.0.0-pyhd8ed1ab_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/textual-0.71.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trogon-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.1-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.1-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-2024a-h8827d51_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ujson-5.10.0-py312hde4cb15_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/url-normalize-1.4.3-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.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/virtualenv-20.27.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.16.0-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/yacman-0.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h13dd4ca_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-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_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: alsa-lib + version: 1.2.12 + build: h4ab18f5_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.12-h4ab18f5_0.conda + sha256: 64b95dd06d7ca6b54cea03b02da8f1657b9899ca376d0ca7b47823064f55fb16 + md5: 7ed427f0871fd41cb1d9c17727c17589 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + license_family: GPL + size: 555868 + timestamp: 1718118368236 +- 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: 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: attmap + version: 0.13.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/attmap-0.13.2-pyhd8ed1ab_0.tar.bz2 + sha256: 571aaeea81effb719738cb5da3929e76e90987571f91e4f69bd252446be4fc61 + md5: f7e348eb6bd53f544fd7cde87a7ba3c8 + depends: + - python >=3.6 + - ubiquerg >=0.2.1 + license: BSD-2-Clause + license_family: BSD + size: 13597 + timestamp: 1636190372953 +- 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: biopython + version: '1.84' + build: py312h7e5086c_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/biopython-1.84-py312h7e5086c_0.conda + sha256: 8500c3cd2a81bd1ca5bd55860e09e2e16a5d2a737edb8b8386bd04706e2ec9e3 + md5: 8a443eddd816d47495ba591f34906978 + depends: + - __osx >=11.0 + - numpy + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: LicenseRef-Biopython + size: 3387595 + timestamp: 1720015162059 +- kind: conda + name: biopython + version: '1.84' + build: py312h9a8786e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/biopython-1.84-py312h9a8786e_0.conda + sha256: e6f0ff05963c93855d131cf9da52767cf210a158b197d7cbb8898991fbe047a2 + md5: 6683d74a08fc106ef44d6ac403dc7aee + depends: + - libgcc-ng >=12 + - numpy + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LicenseRef-Biopython + size: 3411650 + timestamp: 1720015057666 +- kind: conda + name: biopython + version: '1.84' + build: py312hbd25219_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/biopython-1.84-py312hbd25219_0.conda + sha256: a2a0f430d6deb404bb07b632cc7fa6e47628b2f152fa5ae45c5600f06f99afe6 + md5: c44ad24f5f0b0e5c5b264b274ec81e62 + depends: + - __osx >=10.13 + - numpy + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LicenseRef-Biopython + size: 3426580 + timestamp: 1720015058197 +- 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: brotli-python + version: 1.1.0 + build: py312hde4cb15_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda + sha256: 254b411fa78ccc226f42daf606772972466f93e9bc6895eabb4cfda22f5178af + md5: a83c2ef76ccb11bc2349f4f17696b15d + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 339360 + timestamp: 1725268143995 +- 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: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- 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.32.3 + build: h4bc722e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.32.3-h4bc722e_0.conda + sha256: 3c5a844bb60b0d52d89c3f1bd828c9856417fe33a6102fd8bbd5c13c3351704a + md5: 7624e34ee6baebfc80d67bac76cc9d9d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 179736 + timestamp: 1721834714515 +- kind: conda + name: c-ares + version: 1.33.1 + build: h44e7173_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.33.1-h44e7173_0.conda + sha256: 98b0ac09472e6737fc4685147d1755028cc650d428369cbe3cb74ab38b327095 + md5: b31a2de5edfddb308dda802eab2956dc + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 163203 + timestamp: 1724438157472 +- kind: conda + name: c-ares + version: 1.33.1 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.33.1-hd74edd7_0.conda + sha256: ad29a9cffa0504cb4bf7605963816feff3c7833f36b050e1e71912d09c38e3f6 + md5: 5b69c16ee900aeffcf0103268d708518 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 159389 + timestamp: 1724438175204 +- 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: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: cairo + version: 1.18.0 + build: hebfffa5_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda + sha256: aee5b9e6ef71cdfb2aee9beae3ea91910ca761c01c0ef32052e3f94a252fa173 + md5: fceaedf1cdbcb02df9699a0d9b005292 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=75.1,<76.0a0 + - libgcc-ng >=12 + - libglib >=2.80.3,<3.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.43.2,<1.0a0 + - xorg-libice >=1.1.1,<2.0a0 + - xorg-libsm >=1.2.4,<2.0a0 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + - zlib + license: LGPL-2.1-only or MPL-1.1 + size: 983604 + timestamp: 1721138900054 +- kind: conda + name: cattrs + version: 24.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cattrs-24.1.2-pyhd8ed1ab_0.conda + sha256: 51abcd19174028e3745ae7c16969ae66c321f047f20bc4383b9f6a692e770364 + md5: ac582de2324988b79870b50c89c91c75 + depends: + - attrs >=23.1.0 + - exceptiongroup >=1.1.1 + - python >=3.8 + - typing-extensions >=4.1.0,!=4.6.3 + license: MIT + license_family: MIT + size: 52194 + timestamp: 1727088983570 +- 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: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 +- 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: cfgv + version: 3.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2 + sha256: fbc03537a27ef756162c49b1d0608bf7ab12fa5e38ceb8563d6f4859e835ac5c + md5: ebb5f5f7dc4f1a3780ef7ea7738db08c + depends: + - python >=3.6.1 + license: MIT + license_family: MIT + size: 10788 + timestamp: 1629909423398 +- kind: conda + name: charset-normalizer + version: 3.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 + md5: 7f4a9e3fcff3f6356ae99244a014da6a + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 46597 + timestamp: 1698833765762 +- 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: 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.7.1 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-24.7.1-py312h7900ff3_0.conda + sha256: a9ab2197ce45c9a2d418cecc5eea4b41ee99412a2b405a4a87570c396ed2679d + md5: e1bf59014e88eaff036101358f63a496 + 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-env >=2.6 + - conda-build >=24.3 + - conda-content-trust >=0.1.1 + license: BSD-3-Clause + license_family: BSD + size: 1219758 + timestamp: 1722273265556 +- kind: conda + name: conda + version: 24.7.1 + build: py312h81bd7bf_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/conda-24.7.1-py312h81bd7bf_0.conda + sha256: 71c075328c13382cfcdf81bae9cfe064f52f53318f9f5a218531b216c6920a0f + md5: 901803f9834eaf3fcbb21d3f221b4d83 + 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 >=3.12,<3.13.0a0 *_cpython + - 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-env >=2.6 + - conda-content-trust >=0.1.1 + - conda-build >=24.3 + license: BSD-3-Clause + license_family: BSD + size: 1222099 + timestamp: 1722273469549 +- kind: conda + name: conda + version: 24.7.1 + build: py312hb401068_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/conda-24.7.1-py312hb401068_0.conda + sha256: 0fed930a019d6ad407cb9e98d552026686219ef21510ba1d622f329484aa5359 + md5: 2337afa089fb528723069d900e8ca6a3 + 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: 1222420 + timestamp: 1722273360724 +- kind: conda + name: conda-libmamba-solver + version: 24.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.7.0-pyhd8ed1ab_0.conda + sha256: e0cb57f5f86a18dc75045946ad3543a4e219a7b61b8f94fa2eba901c13b5cd69 + md5: 857c9e25f0a77c0bd7eb622d46d9418f + 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: 40890 + timestamp: 1721292570796 +- kind: conda + name: conda-package-handling + version: 2.3.0 + build: pyh7900ff3_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.3.0-pyh7900ff3_0.conda + sha256: c85a76ffd08608c3c61d1ca6c82be9f45ab31a5e108a1aec0872d84b3546e4f1 + md5: 0a7dce281ae2be81acab0aa963e6bb99 + depends: + - conda-package-streaming >=0.9.0 + - python >=3.8 + - zstandard >=0.15 + license: BSD-3-Clause + license_family: BSD + size: 256238 + timestamp: 1717678729709 +- kind: conda + name: conda-package-streaming + version: 0.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.10.0-pyhd8ed1ab_0.conda + sha256: 69674f1389168be29964e2d89c9597c7903462bf7525727a2df93dbd9f960934 + md5: 3480386e00995f7a1dfb3b9aa2fe70fd + depends: + - python >=3.7 + - zstandard >=0.15 + license: BSD-3-Clause + license_family: BSD + size: 19401 + timestamp: 1717678620472 +- kind: conda + name: coreutils + version: '9.5' + build: h10d778d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coreutils-9.5-h10d778d_0.conda + sha256: 7a29ae82cf1c455b4956c8311ae97832460c3585f0d8789fd82161dd2a20d1fd + md5: 8332c7ae324c9fc4b22cc3d84a0582e8 + license: GPL-3.0-or-later + license_family: GPL + size: 1374585 + timestamp: 1711655512907 +- kind: conda + name: coreutils + version: '9.5' + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/coreutils-9.5-h93a5062_0.conda + sha256: 70e50f2f1458e7c172c9b1c149a4289e8eecc9b53e06ab9de0b3572cdbd30a61 + md5: 75840e25e62a109b1d25043c63a4f36c + license: GPL-3.0-or-later + license_family: GPL + size: 1478098 + timestamp: 1711655465375 +- kind: conda + name: coreutils + version: '9.5' + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coreutils-9.5-hd590300_0.conda + sha256: 7cd3b0f55aa55bb27b045c30f32b3f6b874ecc006f3abcb274c71a3bcbacb358 + md5: 126d457e0e7a535278e808a7d8960015 + depends: + - libgcc-ng >=12 + license: GPL-3.0-or-later + license_family: GPL + size: 3014238 + timestamp: 1711655132451 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312h5fad481_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-43.0.3-py312h5fad481_0.conda + sha256: 2c1e7da2c6035978ba94e7252d6422337fe84ce94a7926a513a5559f01443372 + md5: 0533de15db4534b192e41ce3e947d4c0 + depends: + - __osx >=11.0 + - cffi >=1.12 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1352160 + timestamp: 1729287304072 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312h83535b2_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/cryptography-43.0.3-py312h83535b2_0.conda + sha256: 904f0bc21c2801f8162e6f7031e3bf1785ff3b17a2500568c672913e4bd6af60 + md5: 3161e0eac36f8c0bd5f3b292491e708c + 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: 1373672 + timestamp: 1729287159528 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + 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: 1488388 + timestamp: 1729286882127 +- kind: conda + name: curl + version: 8.10.1 + build: h13a7ad3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/curl-8.10.1-h13a7ad3_0.conda + sha256: 182f7058b3ef0d7fbf7f3a659a0902f20744411a9f9a974931c3cd25f58a7447 + md5: f1290779c05f1af99f6723ad6faffa50 + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libcurl 8.10.1 h13a7ad3_0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 157383 + timestamp: 1726660054429 +- kind: conda + name: curl + version: 8.10.1 + build: h58e7537_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/curl-8.10.1-h58e7537_0.conda + sha256: 314ef19bca95a69396780cdc97bd8fcb72215e434873161c8bfd97a3e88187f4 + md5: c21fe6ee51849309dc7b3651ca3c75ad + depends: + - __osx >=10.13 + - krb5 >=1.21.3,<1.22.0a0 + - libcurl 8.10.1 h58e7537_0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 159638 + timestamp: 1726660283789 +- kind: conda + name: curl + version: 8.10.1 + build: hbbe4b11_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/curl-8.10.1-hbbe4b11_0.conda + sha256: f2c6de198ae7505ab33ce7e86b7767f6492489cfb5635cad164822a9d73f3a5e + md5: 73c561c6b84bda71776c9fa21517e7eb + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libcurl 8.10.1 hbbe4b11_0 + - libgcc >=13 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 173268 + timestamp: 1726659802291 +- kind: conda + name: deprecated + version: 1.2.15 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhff2d567_0.conda + sha256: 48182a27a8fd855db3a402ed914823802f94c3344c87b0d074facc51411296ee + md5: ca75e235b44ab995655fae392f99595e + depends: + - python >=2.7 + - wrapt <2,>=1.10 + license: MIT + license_family: MIT + size: 14182 + timestamp: 1731836933516 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + size: 276214 + timestamp: 1728557312342 +- 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: 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: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: filetype + version: 1.2.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filetype-1.2.0-pyhd8ed1ab_0.tar.bz2 + sha256: 4bb954cd07db9faa08c937df963483f34a964e8d5bcea957d16ef456a761432f + md5: 8db22d14ef51223a783383b45c63fbe0 + depends: + - python >3.6 + license: MIT + license_family: MIT + size: 19980 + timestamp: 1667445885369 +- 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: h2ffa867_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-10.2.1-h2ffa867_0.conda + sha256: 8570ae6fb7cd1179c646e2c48105e91b3ed8ba15855f12965cc5c9719753c06f + md5: 8cccde6755bdd787f9840f38a34b4e7d + depends: + - libcxx >=15 + license: MIT + license_family: MIT + size: 174209 + timestamp: 1704454873305 +- 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: font-ttf-dejavu-sans-mono + version: '2.37' + build: hab24e00_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + size: 397370 + timestamp: 1566932522327 +- kind: conda + name: font-ttf-inconsolata + version: '3.000' + build: h77eed37_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + size: 96530 + timestamp: 1620479909603 +- kind: conda + name: font-ttf-source-code-pro + version: '2.038' + build: h77eed37_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + size: 700814 + timestamp: 1620479612257 +- kind: conda + name: font-ttf-ubuntu + version: '0.83' + build: h77eed37_2 + build_number: 2 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_2.conda + sha256: c940f6e969143e13a3a9660abb3c7e7e23b8319efb29dbdd5dee0b9939236e13 + md5: cbbe59391138ea5ad3658c76912e147f + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + size: 1622566 + timestamp: 1714483134319 +- kind: conda + name: fontconfig + version: 2.14.2 + build: h14ed4e7_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda + sha256: 155d534c9037347ea7439a2c6da7c24ffec8e5dd278889b4c57274a1d91e0a83 + md5: 0f69b688f52ff6da70bccb7ff7001d1d + depends: + - expat >=2.5.0,<3.0a0 + - freetype >=2.12.1,<3.0a0 + - libgcc-ng >=12 + - libuuid >=2.32.1,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: MIT + license_family: MIT + size: 272010 + timestamp: 1674828850194 +- kind: conda + name: fonts-conda-ecosystem + version: '1' + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + size: 3667 + timestamp: 1566974674465 +- kind: conda + name: fonts-conda-forge + version: '1' + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 + md5: f766549260d6815b0c52253f1fb1bb29 + depends: + - font-ttf-dejavu-sans-mono + - font-ttf-inconsolata + - font-ttf-source-code-pro + - font-ttf-ubuntu + license: BSD-3-Clause + license_family: BSD + size: 4102 + timestamp: 1566932280397 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: freetype + version: 2.12.1 + build: h60636b9_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda + sha256: b292cf5a25f094eeb4b66e37d99a97894aafd04a5683980852a8cbddccdc8e4e + md5: 25152fce119320c980e5470e64834b50 + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + size: 599300 + timestamp: 1694616137838 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + size: 596430 + timestamp: 1694616332835 +- kind: conda + name: frozendict + version: 2.4.4 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/frozendict-2.4.4-py312h024a12e_1.conda + sha256: b297ca44cf2969e012d45de8a096c7257462012a7a057509c99c5c8d453b3bbc + md5: 391521cd740cc45e6fa79345b07c7e31 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: LGPL-3.0-only + license_family: LGPL + size: 30768 + timestamp: 1726948941708 +- kind: conda + name: frozendict + version: 2.4.4 + build: py312h66e93f0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.4-py312h66e93f0_1.conda + sha256: 640707e935f593f5b5b1620f6d5f0add2cb0338f20528274a564189d84bf5637 + md5: 82a14d06575c4023a5df6b0798acff71 + 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: 30590 + timestamp: 1726948796784 +- kind: conda + name: frozendict + version: 2.4.4 + build: py312hb553811_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.4-py312hb553811_1.conda + sha256: 90a00ddf9a7c9c48f7aa2d3a3367260caa5e460a5a976268303a73c075be9e63 + md5: bbeca593389899b298674e67f9a9a16c + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-3.0-only + license_family: LGPL + size: 30678 + timestamp: 1726948836390 +- kind: conda + name: future + version: 1.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda + sha256: 8c918a63595ae01575b738ddf0bff10dc23a5002d4af4c8b445d1179a76a8efd + md5: 650a7807e689642dddd3590eb817beed + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 364081 + timestamp: 1708610254418 +- kind: conda + name: giflib + version: 5.2.2 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff + md5: 3bf7b9fd5a7136126e0234db4b87c8b6 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 77248 + timestamp: 1712692454246 +- kind: conda + name: git + version: 2.47.0 + build: pl5321h59d505e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/git-2.47.0-pl5321h59d505e_0.conda + sha256: ec0e20ae0aa8146895a107adf7ef9949759942617f5cbecb783284528df6b06c + md5: 5cb49c00a7aa5f400b70e95b84d90595 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.10.1,<9.0a0 + - libexpat >=2.6.3,<3.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - pcre2 >=10.44,<10.45.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + size: 10510958 + timestamp: 1728491333125 +- kind: conda + name: git + version: 2.47.0 + build: pl5321ha198fdc_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/git-2.47.0-pl5321ha198fdc_0.conda + sha256: 7653f335aa92c335d7ac13844272e3d2608f8198496904a5a99a97c90cc8062d + md5: 2d3d0e373bbebdecd4200f3c4d508df0 + depends: + - __osx >=10.10 + - libcurl >=8.10.1,<9.0a0 + - libexpat >=2.6.3,<3.0a0 + - libiconv >=1.17,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - pcre2 >=10.44,<10.45.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + size: 10496131 + timestamp: 1728491563268 +- kind: conda + name: git + version: 2.47.0 + build: pl5321hc14f901_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.47.0-pl5321hc14f901_0.conda + sha256: fe682467bb2d711f19fe46eb5410d2b47fdd44b913e006ac197ee7c2206e7c84 + md5: 3fc5a24d1d6e8ba834f9ad4e7dece48e + depends: + - __osx >=11.0 + - libcurl >=8.10.1,<9.0a0 + - libexpat >=2.6.3,<3.0a0 + - libiconv >=1.17,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - pcre2 >=10.44,<10.45.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + size: 11649267 + timestamp: 1728491451793 +- 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: graphite2 + version: 1.3.13 + build: h59595ed_1003 + build_number: 1003 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add + md5: f87c7b7c2cb45f323ffbce941c78ab7c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + size: 96855 + timestamp: 1711634169756 +- 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: harfbuzz + version: 9.0.0 + build: hda332d3_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda + sha256: 973afa37840b4e55e2540018902255cfb0d953aaed6353bb83a4d120f5256767 + md5: 76b32dcf243444aea9c6b804bcfa40b8 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.0,<2.0a0 + - freetype >=2.12.1,<3.0a0 + - graphite2 + - icu >=75.1,<76.0a0 + - libgcc-ng >=12 + - libglib >=2.80.3,<3.0a0 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 1603653 + timestamp: 1721186240105 +- 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: '75.1' + build: h120a0e1_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7 + md5: d68d48a3060eb5abdc1cdc8e2a3a5966 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 11761697 + timestamp: 1720853679409 +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: identify + version: 2.6.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.2-pyhd8ed1ab_0.conda + sha256: 4e3f1c381ad65b476a98d03c0f6c73df04ae4095b501f51129ba6f2a7660179c + md5: 636950f839e065401e2031624a414f0b + depends: + - python >=3.6 + - ukkonen + license: MIT + license_family: MIT + size: 78376 + timestamp: 1731187862708 +- kind: conda + name: idna + version: '3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + sha256: 8660d38b272d3713ec8ac5ae918bc3bc80e1b81e1a7d61df554bded71ada6110 + md5: 99e164522f6bdf23c177c8d9ae63f975 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49275 + timestamp: 1724450633325 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28646 + timestamp: 1726082927916 +- 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: itsdangerous + version: 2.2.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda + sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 + md5: ff7ca04134ee8dde1d7cf491a78ef7c7 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 19333 + timestamp: 1713372766463 +- 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: py312h81bd7bf_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jsonpointer-3.0.0-py312h81bd7bf_1.conda + sha256: f6fb3734e967d1cd0cde32844ee952809f6c0a49895da7ec1c8cfdf97739b947 + md5: 80f403c03290e1662be03e026fb5f8ab + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 17865 + timestamp: 1725303130815 +- 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: 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: h237132a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 + depends: + - __osx >=11.0 + - 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: 1155530 + timestamp: 1719463474401 +- 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: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lcms2 + version: '2.16' + build: ha2f27b4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda + sha256: 222ebc0a55544b9922f61e75015d02861e65b48f12113af41d48ba0814e14e4e + md5: 1442db8f03517834843666c422238c9b + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + size: 224432 + timestamp: 1701648089496 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.40' + build: hf3520f5_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + sha256: 764b6950aceaaad0c67ef925417594dd14cd2e22fff864aeef455ac259263d15 + md5: b80f2f396ca2c28b8c14c437a4ed1e74 + constrains: + - binutils_impl_linux-64 2.40 + license: GPL-3.0-only + license_family: GPL + size: 707602 + timestamp: 1718625640445 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: lerc + version: 4.0.0 + build: hb486fe8_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 + sha256: e41790fc0f4089726369b3c7f813117bbc14b533e0ed8b94cf75aba252e82497 + md5: f9d6a4c82889d5ecedec1d90eb673c55 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + size: 290319 + timestamp: 1657977526749 +- 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: h83d404f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.4-h83d404f_0.conda + sha256: 5301d7dc52c2e1f87b229606033c475caf87cd94ef5a5efb3af565a62b88127e + md5: 8b604ee634caafd92f2ff2fab6a1f75a + depends: + - __osx >=11.0 + - 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: 775700 + timestamp: 1716394811506 +- 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: libblas + version: 3.9.0 + build: 25_osxarm64_openblas + build_number: 25 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + sha256: f1fb9a11af0b2878bd8804b4c77d3733c40076218bcbdb35f575b1c0c9fddf11 + md5: f8cf4d920ff36ce471619010eff59cac + depends: + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 + constrains: + - blas * openblas + - liblapack 3.9.0 25_osxarm64_openblas + - liblapacke 3.9.0 25_osxarm64_openblas + - libcblas 3.9.0 25_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + size: 15913 + timestamp: 1729643265495 +- 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: libcblas + version: 3.9.0 + build: 25_osxarm64_openblas + build_number: 25 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + sha256: d9fa5b6b11252132a3383bbf87bd2f1b9d6248bef1b7e113c2a8ae41b0376218 + md5: 4df0fae81f0b5bf47d48c882b086da11 + depends: + - libblas 3.9.0 25_osxarm64_openblas + constrains: + - blas * openblas + - liblapack 3.9.0 25_osxarm64_openblas + - liblapacke 3.9.0 25_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + size: 15837 + timestamp: 1729643270793 +- kind: conda + name: libcups + version: 2.3.3 + build: h4637d8d_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda + sha256: bc67b9b21078c99c6bd8595fe7e1ed6da1f721007726e717f0449de7032798c4 + md5: d4529f4dff3057982a7617c7ac58fde3 + depends: + - krb5 >=1.21.1,<1.22.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: Apache-2.0 + license_family: Apache + size: 4519402 + timestamp: 1689195353551 +- kind: conda + name: libcurl + version: 8.10.1 + build: h13a7ad3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda + sha256: 983a977c5627f975a930542c8aabb46089ec6ea72f28d9c4d3ee8eafaf2fc25a + md5: d84030d0863ffe7dea00b9a807fee961 + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 379948 + timestamp: 1726660033582 +- kind: conda + name: libcurl + version: 8.10.1 + build: h58e7537_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda + sha256: 662fe145459ed58dee882e525588d1da4dcc4cbd10cfca0725d1fc3840461798 + md5: 6c8669d8228a2bbd0283911cc6d6726e + depends: + - __osx >=10.13 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 402588 + timestamp: 1726660264675 +- kind: conda + name: libcurl + version: 8.10.1 + build: hbbe4b11_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99 + md5: 6e801c50a40301f6978c53976917b277 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 424900 + timestamp: 1726659794676 +- kind: conda + name: libcxx + version: 18.1.8 + build: h3ed4263_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-18.1.8-h3ed4263_7.conda + sha256: 15b4abaa249f0965ce42aeb4a1a2b1b5df9a1f402e7c5bd8156272fd6cad2878 + md5: e0e7d9a2ec0f9509ffdfd5f48da522fb + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 436921 + timestamp: 1725403628507 +- kind: conda + name: libcxx + version: 18.1.8 + build: hd876a4e_7 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-18.1.8-hd876a4e_7.conda + sha256: ca43fcc18bff98cbf456ccc76fe113b2afe01d4156c2899b638fd1bc0323d239 + md5: c346ae5c96382a12563e3b0c403c8c4a + depends: + - __osx >=10.13 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 439306 + timestamp: 1725403678987 +- kind: conda + name: libdeflate + version: '1.22' + build: h00291cd_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.22-h00291cd_0.conda + sha256: 681035346974c3315685dc40898e26f65f1c00cbb0b5fd80cc2599e207a34b31 + md5: a15785ccc62ae2a8febd299424081efb + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 70407 + timestamp: 1728177128525 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libdeflate + version: '1.22' + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 54089 + timestamp: 1728177149927 +- 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: hc8eb9b7_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 + sha256: 3912636197933ecfe4692634119e8644904b41a58f30cad9d1fc02f6ba4d9fca + md5: 30e4362988a2623e9eb34337b83e01f9 + depends: + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 96607 + timestamp: 1597616630749 +- 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: h93a5062_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + size: 107458 + timestamp: 1702146414478 +- 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.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: hac325c4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.3-hac325c4_0.conda + sha256: dd22dffad6731c352f4c14603868c9cce4d3b50ff5ff1e50f416a82dcb491947 + md5: c1db99b0a94a2f23bd6ce39e2d314e07 + depends: + - __osx >=10.13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 70517 + timestamp: 1725568864316 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 63895 + timestamp: 1725568783033 +- 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: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + size: 39020 + timestamp: 1636488587153 +- 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.1.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda + sha256: 10fa74b69266a2be7b96db881e18fa62cfa03082b65231e8d652e897c4b335a3 + md5: 002ef4463dd1e2b44a94a4ace468f5d2 + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.1.0 h77fa898_1 + - libgcc-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 846380 + timestamp: 1724801836552 +- kind: conda + name: libgcc-ng + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda + sha256: b91f7021e14c3d5c840fbf0dc75370d6e1f7c7ff4482220940eaafb9c64613b7 + md5: 1efc0ad219877a73ef977af7dbb51f17 + depends: + - libgcc 14.1.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52170 + timestamp: 1724801842101 +- 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: 5.0.0 + build: 13_2_0_hd922786_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b + md5: 4a55d9e169114b2b90d3ec4604cd7bbf + depends: + - libgfortran5 13.2.0 hf226fd6_3 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 110233 + timestamp: 1707330749033 +- kind: conda + name: libgfortran + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda + sha256: ed77f04f873e43a26e24d443dd090631eedc7d0ace3141baaefd96a123e47535 + md5: 591e631bc1ae62c64f2ab4f66178c097 + depends: + - libgfortran5 14.1.0 hc5f4f2c_1 + constrains: + - libgfortran-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52142 + timestamp: 1724801872472 +- kind: conda + name: libgfortran-ng + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda + sha256: a2dc35cb7f87bb5beebf102d4085574c6a740e1df58e743185d4434cc5e4e0ae + md5: 16cec94c5992d7f42ae3f9fa8b25df8d + depends: + - libgfortran 14.1.0 h69a702a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52212 + timestamp: 1724802086021 +- 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: 13.2.0 + build: hf226fd6_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a + md5: 66ac81d54e95c534ae488726c1f698ea + 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: 997381 + timestamp: 1707330687590 +- kind: conda + name: libgfortran5 + version: 14.1.0 + build: hc5f4f2c_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda + sha256: c40d7db760296bf9c776de12597d2f379f30e890b9ae70c1de962ff2aa1999f6 + md5: 10a0cef64b784d6ab6da50ebca4e984d + depends: + - libgcc >=14.1.0 + constrains: + - libgfortran 14.1.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 1459939 + timestamp: 1724801851300 +- kind: conda + name: libglib + version: 2.80.3 + build: h315aac3_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda + sha256: 7470e664b780b91708bed356cc634874dfc3d6f17cbf884a1d6f5d6d59c09f91 + md5: b0143a3e98136a680b728fdf9b42a258 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.80.3 *_2 + license: LGPL-2.1-or-later + size: 3922900 + timestamp: 1723208802469 +- kind: conda + name: libgomp + version: 14.1.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda + sha256: c96724c8ae4ee61af7674c5d9e5a3fbcf6cd887a40ad5a52c99aa36f1d4f9680 + md5: 23c255b008c4f2ae008f81edcabaca89 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460218 + timestamp: 1724801743478 +- kind: conda + name: libiconv + version: '1.17' + build: h0d3ecfb_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 + md5: 69bda57310071cf6d2b86caf11573d2d + license: LGPL-2.1-only + size: 676469 + timestamp: 1702682458114 +- 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: libintl + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8414b35_3.conda + sha256: 7c1d238d4333af385e594c89ebcb520caad7ed83a735c901099ec0970a87a891 + md5: 3b98ec32e91b3b59ad53dbb9c96dd334 + depends: + - __osx >=11.0 + - libiconv >=1.17,<2.0a0 + license: LGPL-2.1-or-later + size: 81171 + timestamp: 1723626968270 +- kind: conda + name: libintl + version: 0.22.5 + build: hdfe23c8_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libintl-0.22.5-hdfe23c8_3.conda + sha256: 0dbb662440a73e20742f12d88e51785a5a5117b8b150783a032b8818a8c043af + md5: 52d4d643ed26c07599736326c46bf12f + depends: + - __osx >=10.13 + - libiconv >=1.17,<2.0a0 + license: LGPL-2.1-or-later + size: 88086 + timestamp: 1723626826235 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: h0dc2134_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda + sha256: d9572fd1024adc374aae7c247d0f29fdf4b122f1e3586fe62acc18067f40d02f + md5: 72507f8e3961bc968af17435060b6dd6 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + size: 579748 + timestamp: 1694475265912 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + size: 618575 + timestamp: 1694474974816 +- 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: liblapack + version: 3.9.0 + build: 25_osxarm64_openblas + build_number: 25 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + sha256: fdd742407672a9af20e70764550cf18b3ab67f12e48bf04163b90492fbc401e7 + md5: 19bbddfec972d401838330453186108d + depends: + - libblas 3.9.0 25_osxarm64_openblas + constrains: + - blas * openblas + - liblapacke 3.9.0 25_osxarm64_openblas + - libcblas 3.9.0 25_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + size: 15823 + timestamp: 1729643275943 +- kind: conda + name: libmamba + version: 1.5.10 + build: h4cc3d14_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.10-h4cc3d14_0.conda + sha256: a569c4863471076c703e66fbf75255115a951288be2bed2f46ccfb094004ec93 + md5: 25a7e8d5f17b4d90f4ae224d9bd5800a + depends: + - __glibc >=2.17,<3.0.a0 + - fmt >=10.2.1,<11.0a0 + - libarchive >=3.7.4,<3.8.0a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libsolv >=0.7.23 + - libsolv >=0.7.30,<0.8.0a0 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + - reproc >=14.2,<15.0a0 + - reproc-cpp >=14.2,<15.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 1706952 + timestamp: 1727078473344 +- kind: conda + name: libmamba + version: 1.5.10 + build: hbfbf5c4_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libmamba-1.5.10-hbfbf5c4_0.conda + sha256: 023696a2c0f28f9e858cd3a09faceb771fbb9040ef1341c6cdd63a2f8d3f4a3a + md5: b3f99eb308d5f284d940f6939fbcff3b + depends: + - __osx >=11.0 + - fmt >=10.2.1,<11.0a0 + - libarchive >=3.7.4,<3.8.0a0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=17 + - libsolv >=0.7.23 + - libsolv >=0.7.30,<0.8.0a0 + - openssl >=3.3.2,<4.0a0 + - reproc >=14.2,<15.0a0 + - reproc-cpp >=14.2,<15.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 1252388 + timestamp: 1727078559406 +- kind: conda + name: libmamba + version: 1.5.10 + build: hd44d3b3_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libmamba-1.5.10-hd44d3b3_0.conda + sha256: 89af88dca254227fdf167919ce82c66afb28530f7d25627dd89a7ffc72f4f2f8 + md5: 45587040e8340d164bf67fba5004f9de + depends: + - __osx >=10.13 + - fmt >=10.2.1,<11.0a0 + - libarchive >=3.7.4,<3.8.0a0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=17 + - libsolv >=0.7.23 + - libsolv >=0.7.30,<0.8.0a0 + - openssl >=3.3.2,<4.0a0 + - reproc >=14.2,<15.0a0 + - reproc-cpp >=14.2,<15.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 1348362 + timestamp: 1727078661263 +- kind: conda + name: libmambapy + version: 1.5.10 + build: py312h1ed1908_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libmambapy-1.5.10-py312h1ed1908_0.conda + sha256: c87aa67e91ef8304595b4e330e519be7ab51e63e72229156aab7f1d134e04b69 + md5: aeb339ac524c0eb7ccb5e1f541bbb997 + depends: + - __osx >=11.0 + - fmt >=10.2.1,<11.0a0 + - libcxx >=17 + - libmamba 1.5.10 hbfbf5c4_0 + - openssl >=3.3.2,<4.0a0 + - pybind11-abi 4 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml-cpp >=0.8.0,<0.9.0a0 + license: BSD-3-Clause + license_family: BSD + size: 266594 + timestamp: 1727078755508 +- kind: conda + name: libmambapy + version: 1.5.10 + build: py312h7fb9e8e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.10-py312h7fb9e8e_0.conda + sha256: 1f5f5fbc62c41329e08066a65e15f36f17963ea0d304570c8b069fdf9fd56e8c + md5: 8adc624b536015a70086572167721155 + depends: + - __glibc >=2.17,<3.0.a0 + - fmt >=10.2.1,<11.0a0 + - libgcc >=13 + - libmamba 1.5.10 h4cc3d14_0 + - libstdcxx >=13 + - openssl >=3.3.2,<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: 326216 + timestamp: 1727078741246 +- kind: conda + name: libmambapy + version: 1.5.10 + build: py312haab923c_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libmambapy-1.5.10-py312haab923c_0.conda + sha256: dd6b8604feb0794ba703e6955a8a7b516a67c5f796ef200532598295a4494bc0 + md5: 67291131a061d1b0529fd61e828790c4 + depends: + - __osx >=10.13 + - fmt >=10.2.1,<11.0a0 + - libcxx >=17 + - libmamba 1.5.10 hd44d3b3_0 + - openssl >=3.3.2,<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: 287491 + timestamp: 1727078987727 +- 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: libnghttp2 + version: 1.58.0 + build: ha4dd798_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda + sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd + md5: 1813e066bfcef82de579a0be8a766df4 + 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: 565451 + timestamp: 1702130473930 +- 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: openmp_hf332438_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373 + md5: 40803a48d947c8639da6704e9a44d3ce + depends: + - __osx >=11.0 + - 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: 4165774 + timestamp: 1730772154295 +- kind: conda + name: libopenblas + version: 0.3.28 + build: pthreads_h94d23a6_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_0.conda + sha256: 1e41a6d63e07be996238a1e840a426f86068956a45e0c0bb24e49a8dad9874c1 + md5: 9ebc9aedafaa2515ab247ff6bb509458 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=14 + - libgfortran-ng + - libgfortran5 >=14.1.0 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + license: BSD-3-Clause + license_family: BSD + size: 5572213 + timestamp: 1723932528810 +- kind: conda + name: libpng + version: 1.6.43 + build: h2797004_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + sha256: 502f6ff148ac2777cc55ae4ade01a8fc3543b4ffab25c4e0eaa15f94e90dd997 + md5: 009981dd9cfcaa4dbfa25ffaed86bcae + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: zlib-acknowledgement + size: 288221 + timestamp: 1708780443939 +- kind: conda + name: libpng + version: 1.6.44 + build: h4b8f8c9_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.44-h4b8f8c9_0.conda + sha256: 12b44e58f8832798d7a5c0a7480c95e905dbd6c3558dec09739062411f9e08d1 + md5: f32ac2c8dd390dbf169f550887ed09d9 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 268073 + timestamp: 1726234803010 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 263385 + timestamp: 1726234714421 +- kind: conda + name: libsodium + version: 1.0.20 + build: h4ab18f5_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + md5: a587892d3c13b6621a6091be690dbca2 + depends: + - libgcc-ng >=12 + license: ISC + size: 205978 + timestamp: 1716828628198 +- kind: conda + name: libsodium + version: 1.0.20 + build: h99b78c6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 + md5: a7ce36e284c5faaf93c220dfc39e3abd + depends: + - __osx >=11.0 + license: ISC + size: 164972 + timestamp: 1716828607917 +- kind: conda + name: libsodium + version: 1.0.20 + build: hfdf4475_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda + sha256: d3975cfe60e81072666da8c76b993af018cf2e73fe55acba2b5ba0928efaccf5 + md5: 6af4b059e26492da6013e79cbcb4d069 + depends: + - __osx >=10.13 + license: ISC + size: 210249 + timestamp: 1716828641383 +- kind: conda + name: libsolv + version: 0.7.30 + build: h3509ff9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.30-h3509ff9_0.conda + sha256: 1dddbde791efdfc34c8fefa74dc2f910eac9cf87bf37ee6c3c9132eb96a0e7d4 + md5: 02539b77d25aa4f65b20246549e256c3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 470810 + timestamp: 1720790097030 +- kind: conda + name: libsolv + version: 0.7.30 + build: h69d5d9b_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsolv-0.7.30-h69d5d9b_0.conda + sha256: d0c8a8a448dc8b01aecc023b8e6a26f8cdd03f04263ca0a282a057d636b47b3c + md5: 8f8fd9f1740c8cb7dcfebf1a1ed7e678 + depends: + - __osx >=10.13 + - libcxx >=16 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 415636 + timestamp: 1720790194490 +- kind: conda + name: libsolv + version: 0.7.30 + build: h6c9b7f8_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsolv-0.7.30-h6c9b7f8_0.conda + sha256: e5ffda8a71a334edff7af4f194aa6c72df2f0763321250270f9f68dfc8eaf439 + md5: a5795a7ca73c9c99f112abce7864b500 + depends: + - __osx >=11.0 + - libcxx >=16 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 387085 + timestamp: 1720790391931 +- kind: conda + name: libsqlite + version: 3.46.1 + build: h4b8f8c9_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_0.conda + sha256: 1d075cb823f0cad7e196871b7c57961d669cbbb6cd0e798bf50cbf520dda65fb + md5: 84de0078b58f899fc164303b0603ff0e + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 908317 + timestamp: 1725353652135 +- kind: conda + name: libsqlite + version: 3.46.1 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + sha256: 9851c049abafed3ee329d6c7c2033407e2fc269d33a75c071110ab52300002b0 + md5: 36f79405ab16bf271edb55b213836dac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 865214 + timestamp: 1725353659783 +- kind: conda + name: libsqlite + version: 3.46.1 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda + sha256: 3725f962f490c5d44dae326d5f5b2e3c97f71a6322d914ccc85b5ddc2e50d120 + md5: 58050ec1724e58668d0126a1615553fa + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 829500 + timestamp: 1725353720793 +- 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: h7a5bd25_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + sha256: bb57d0c53289721fff1eeb3103a1c6a988178e88d8a8f4345b0b91a35f0e0015 + md5: 029f7dc931a3b626b94823bc77830b01 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 255610 + timestamp: 1685837894256 +- 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.1.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda + sha256: 44decb3d23abacf1c6dd59f3c152a7101b7ca565b4ef8872804ceaedcc53a9cd + md5: 9dbb9699ea467983ba8a4ba89b08b066 + depends: + - libgcc 14.1.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3892781 + timestamp: 1724801863728 +- kind: conda + name: libstdcxx-ng + version: 14.1.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda + sha256: a2dc44f97290740cc187bfe94ce543e6eb3c2ea8964d99f189a1d8c97b419b8c + md5: bd2598399a70bb86d8218e95548d735e + depends: + - libstdcxx 14.1.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52219 + timestamp: 1724801897766 +- kind: conda + name: libtiff + version: 4.7.0 + build: h583c2ba_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.0-h583c2ba_1.conda + sha256: 4d58c695dfed6f308d0fd3ff552e0078bb98bc0be2ea0bf55820eb6e86fa5355 + md5: 4b78bcdcc8780cede8b3d090deba874d + depends: + - __osx >=10.13 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + size: 395980 + timestamp: 1728232302162 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfce79cd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + sha256: 97ba24c74750b6e731b3fe0d2a751cda6148b4937d2cc3f72d43bf7b3885c39d + md5: b9abf45f7c64caf3303725f1aa0e9a4d + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + size: 366323 + timestamp: 1728232400072 +- 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: libwebp-base + version: 1.4.0 + build: h10d778d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda + sha256: 7bafd8f4c637778cd0aa390bf3a894feef0e1fcf6ea6000c7ffc25c4c5a65538 + md5: b2c0047ea73819d992484faacbbe1c24 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + size: 355099 + timestamp: 1713200298965 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + size: 287750 + timestamp: 1713200194013 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 323658 + timestamp: 1727278733917 +- kind: conda + name: libxcb + version: 1.17.0 + build: hf1f96e2_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + sha256: 8896cd5deff6f57d102734f3e672bc17120613647288f9122bec69098e839af7 + md5: bbeca862892e2898bdb45792a61c4afc + depends: + - __osx >=10.13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 323770 + timestamp: 1727278927545 +- 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: h01dff8b_4 + build_number: 4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda + sha256: a9a76cdc6e93c0182bc2ac58b1ea0152be1a16a5d23f4dc7b8df282a7aef8d20 + md5: 1265488dc5035457b729583119ad4a1b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 588990 + timestamp: 1721031045514 +- kind: conda + name: libxml2 + version: 2.12.7 + build: he7c6b58_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-he7c6b58_4.conda + sha256: 10e9e0ac52b9a516a17edbc07f8d559e23778e54f1a7721b2e0e8219284fed3b + md5: 08a9265c637230c37cb1be4a6cad4536 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 707169 + timestamp: 1721031016143 +- kind: conda + name: libxml2 + version: 2.12.7 + build: heaf3512_4 + build_number: 4 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-heaf3512_4.conda + sha256: ed18a2d8d428c0b88d47751ebcc7cc4e6202f99c3948fffd776cba83c4f0dad3 + md5: ea1be6ecfe814da889e882c8b6ead79d + depends: + - __osx >=10.13 + - icu >=75.1,<76.0a0 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 619901 + timestamp: 1721031175411 +- kind: conda + name: libzlib + version: 1.3.1 + build: h4ab18f5_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + sha256: adf6096f98b537a11ae3729eaa642b0811478f0ea0402ca67b5108fe2cb0010d + md5: 57d7dc60e9325e3de37ff8dffd18e814 + depends: + - libgcc-ng >=12 + constrains: + - zlib 1.3.1 *_1 + license: Zlib + license_family: Other + size: 61574 + timestamp: 1716874187109 +- kind: conda + name: libzlib + version: 1.3.1 + build: h87427d6_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda + sha256: 80a62db652b1da0ccc100812a1d86e94f75028968991bfb17f9536f3aa72d91d + md5: b7575b5aa92108dcc9aaab0f05f2dbce + depends: + - __osx >=10.13 + constrains: + - zlib 1.3.1 *_1 + license: Zlib + license_family: Other + size: 57372 + timestamp: 1716874211519 +- kind: conda + name: libzlib + version: 1.3.1 + build: hfb2fe0b_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda + sha256: c34365dd37b0eab27b9693af32a1f7f284955517c2cc91f1b88a7ef4738ff03e + md5: 636077128927cf79fd933276dc3aed47 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_1 + license: Zlib + license_family: Other + size: 46921 + timestamp: 1716874262512 +- kind: conda + name: linkify-it-py + version: 2.0.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda + sha256: aa99d44e8c83865026575a8af253141c53e0b3ab05f053befaa7757c8525064f + md5: f1b64ca4faf563605cf6f6ca93f9ff3f + depends: + - python >=3.7 + - uc-micro-py + license: MIT + license_family: MIT + size: 24035 + timestamp: 1707129321841 +- kind: conda + name: llvm-openmp + version: 19.1.4 + build: ha54dae1_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.4-ha54dae1_0.conda + sha256: 69fca4a9318d7367ec3e0e7d6e6023a46ae1113dbd67da6d0f93fffa0ef54497 + md5: 193715d512f648fe0865f6f13b1957e3 + depends: + - __osx >=10.13 + constrains: + - openmp 19.1.4|19.1.4.* + license: Apache-2.0 WITH LLVM-exception + size: 305132 + timestamp: 1732102427054 +- kind: conda + name: llvm-openmp + version: 19.1.4 + build: hdb05f8b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.4-hdb05f8b_0.conda + sha256: dfdcd8de37899d984326f9734b28f46f80b88c068e44c562933a8b3117f2401a + md5: 76ca179ec970bea6e275e2fa477c2d3c + depends: + - __osx >=11.0 + constrains: + - openmp 19.1.4|19.1.4.* + license: Apache-2.0 WITH LLVM-exception + size: 281554 + timestamp: 1732102484807 +- 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: hb7217d7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda + sha256: fc343b8c82efe40819b986e29ba748366514e5ab94a1e1138df195af5f45fa24 + md5: 45505bec548634f7d05e02fb25262cb9 + depends: + - libcxx >=14.0.6 + license: BSD-2-Clause + license_family: BSD + size: 141188 + timestamp: 1674727268278 +- 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: h93a5062_1001 + build_number: 1001 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + sha256: b68160b0a8ec374cea12de7afb954ca47419cdc300358232e19cec666d60b929 + md5: 915996063a7380c652f83609e970c2a7 + license: GPL-2.0-or-later + license_family: GPL2 + size: 131447 + timestamp: 1713516009610 +- 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: mamba + version: 1.5.10 + build: py312h14bc7db_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/mamba-1.5.10-py312h14bc7db_0.conda + sha256: 6677426c2d7ba0354f3afa943bd5ac9fc7e6379ae2ad21a26f72274df097e7e4 + md5: c8a7212b8f783c324100f2ed812f36f2 + depends: + - conda >=24,<25 + - libmambapy 1.5.10 py312h1ed1908_0 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 65296 + timestamp: 1727079040040 +- kind: conda + name: mamba + version: 1.5.10 + build: py312h9460a1c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/mamba-1.5.10-py312h9460a1c_0.conda + sha256: 0e43570ea17384f5eb50831ffdb4b0beab42f734e7b08562c3daf35e7508845e + md5: 34744dc9ca51dc9337dc07cbd5ed12c7 + depends: + - conda >=24,<25 + - libmambapy 1.5.10 py312h7fb9e8e_0 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 64360 + timestamp: 1727078788346 +- kind: conda + name: mamba + version: 1.5.10 + build: py312ha12221d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/mamba-1.5.10-py312ha12221d_0.conda + sha256: 0a364b33157777c48bd27e7dc9095a10ba75a0d7f5ee3fadc97b7f33e7849bed + md5: 316e91e4376f34ecf8f10d41fdd8bfd1 + depends: + - conda >=24,<25 + - libmambapy 1.5.10 py312haab923c_0 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 64608 + timestamp: 1727079147799 +- kind: conda + name: markdown + version: '3.6' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-3.6-pyhd8ed1ab_0.conda + sha256: fce1fde00359696983989699c00f9891194c4ebafea647a8d21b7e2e3329b56e + md5: 06e9bebf748a0dea03ecbe1f0e27e909 + depends: + - importlib-metadata >=4.4 + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 78331 + timestamp: 1710435316163 +- 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: py312ha0ccf2a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312ha0ccf2a_0.conda + sha256: 360e958055f35e5087942b9c499eaafae984a951b84cf354ef7481a2806f340d + md5: c6ff9f291d011c9d4f0b840f49435c64 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + size: 24495 + timestamp: 1729351534830 +- 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.1.2 + build: py312h7900ff3_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.1.2-py312h7900ff3_1.conda + sha256: 8338f243a5a501b02c1443b4c0f664313f99c802ea23b7d4676c99317c96ff00 + md5: c6575ae996f2bc0369c73b632db5ca61 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT + size: 166320 + timestamp: 1725359138771 +- kind: conda + name: menuinst + version: 2.1.2 + build: py312h81bd7bf_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/menuinst-2.1.2-py312h81bd7bf_1.conda + sha256: 507808a93543aa246d2e8def5b3a6ca674fa5b3c9289f087b71efb735c0d1157 + md5: 98d68002c338054a1f366a9758f99719 + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT + size: 166601 + timestamp: 1725359231719 +- kind: conda + name: menuinst + version: 2.1.2 + build: py312hb401068_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/menuinst-2.1.2-py312hb401068_1.conda + sha256: 8f0a371bb9d6fc22445da0ef6f2de7a9944232b7ef4d7c8f1edc8ce7eb399f19 + md5: b5e65130ede50120d04c12a7dcfc9131 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT + size: 166634 + timestamp: 1725359092783 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 802321 + timestamp: 1724658775723 +- 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: nextflow + version: 24.04.4 + build: hdfd78af_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/bioconda/noarch/nextflow-24.04.4-hdfd78af_0.tar.bz2 + sha256: 40fd1422c7b3756023b1623e3dfe9a571f6777144e2937831220025a94bbbdfa + md5: 6653531f694b0a8d91411b3352916a2d + depends: + - coreutils + - curl + - openjdk >=11,<=21 + license: Apache-2.0 + size: 32305470 + timestamp: 1722504218797 +- kind: conda + name: nf-core + version: 3.0.2 + build: pyhdfd78af_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/nf-core-3.0.2-pyhdfd78af_1.tar.bz2 + sha256: 799373ead70c82b5ece0aaebf3917e922bd18386f55240b735ce5124178eea1d + md5: 74d52a99d2f6c3fac7bc47926874b986 + depends: + - click + - filetype + - git + - gitpython + - jinja2 + - jsonschema >=4.0 + - linkify-it-py >=1,<3 + - markdown >=3.3 + - nextflow >=24.04.4 + - nf-test + - packaging + - pillow + - pre-commit + - prompt_toolkit >=3.0.36 + - pydantic >=2.2.1 + - pygithub + - python >=3.8 + - pyyaml + - questionary >=2.0.1 + - refgenie + - requests + - requests-cache + - rich >=13.3.1 + - rich-click 1.8.* + - ruamel.yaml + - tabulate + - textual 0.71.0 + - trogon + license: MIT + license_family: MIT + size: 467559 + timestamp: 1730231679837 +- kind: conda + name: nf-test + version: 0.9.2 + build: h2a3209d_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/bioconda/noarch/nf-test-0.9.2-h2a3209d_0.tar.bz2 + sha256: c1cc25467606726cd566e188437f85afab40fa77cfdbd33a77543333b671ad00 + md5: 398af3d1d5b35a0c1bdf803735a43bb6 + depends: + - coreutils + - curl + - openjdk >=11,<=18 + license: MIT + size: 25618647 + timestamp: 1730740418891 +- kind: conda + name: nodeenv + version: 1.9.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda + sha256: 85ee07342ab055dc081f3de8292c5e7195e43e046db9c5750f242f928f6bb8f2 + md5: dfe0528d0f1c16c1f7c528ea5536ab30 + depends: + - python 2.7|>=3.7 + - setuptools + license: BSD-3-Clause + license_family: BSD + size: 34489 + timestamp: 1717585382642 +- 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: py312h94ee1e1_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.3-py312h94ee1e1_0.conda + sha256: cd287b6c270ee8af77d200c46d56fdfe1e2a9deeff68044439718b8d073214dd + md5: a2af54c86582e08718805c69af737897 + depends: + - __osx >=11.0 + - 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 >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + size: 6398123 + timestamp: 1730588490904 +- 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: openjdk + version: 17.0.11 + build: h06b73d1_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/openjdk-17.0.11-h06b73d1_1.conda + sha256: e72b399eb973f0439fa43e2162c523dcc0859ce9b56cd42570406ccf1a2758b4 + md5: 2b8f4207bd8dcf539ca3cd006a1addfe + depends: + - libzlib >=1.3.1,<2.0a0 + license: GPL-2.0-or-later WITH Classpath-exception-2.0 + license_family: GPL + size: 166224475 + timestamp: 1721718702244 +- kind: conda + name: openjdk + version: 17.0.11 + build: h38bd402_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjdk-17.0.11-h38bd402_1.conda + sha256: ecef5b63d9dfac4ddecb52d4e1d3fb8ed2d8d5dd397af0bcfc2376c51c0b10de + md5: 660531a395453ecf47c5b95d5dc4eeba + depends: + - alsa-lib >=1.2.12,<1.2.13.0a0 + - alsa-lib >=1.2.12,<1.3.0a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - giflib >=5.2.2,<5.3.0a0 + - harfbuzz >=9.0.0,<10.0a0 + - lcms2 >=2.16,<3.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.3.1,<2.0a0 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxi + - xorg-libxrender >=0.9.11,<0.10.0a0 + - xorg-libxt >=1.3.0,<2.0a0 + - xorg-libxtst >=1.2.3,<2.0a0 + license: GPL-2.0-or-later WITH Classpath-exception-2.0 + license_family: GPL + size: 169277582 + timestamp: 1721721096990 +- kind: conda + name: openjdk + version: 17.0.11 + build: h8f67a1f_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-17.0.11-h8f67a1f_1.conda + sha256: 40de98deb981758ca4eb56866d1e4f8c1cb454dd2fdeb650477c7278e3b576fb + md5: d4db3a5f52953bff6ea488b75e71cfc4 + depends: + - libzlib >=1.3.1,<2.0a0 + license: GPL-2.0-or-later WITH Classpath-exception-2.0 + license_family: GPL + size: 164478241 + timestamp: 1721718503108 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h7310d3a_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda + sha256: dc9c405119b9b54f8ca5984da27ba498bd848ab4f0f580da6f293009ca5adc13 + md5: 05a14cc9d725dd74995927968d6547e3 + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 331273 + timestamp: 1709159538792 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h9f1df11_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + sha256: 472d6eaffc1996e6af35ec8e91c967f472a536a470079bfa56383cc0dbf4d463 + md5: 5029846003f0bc14414b9128a1f7c84b + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 316603 + timestamp: 1709159627299 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 2891789 + timestamp: 1725410790053 +- kind: conda + name: openssl + version: 3.3.2 + build: hd23fc13_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda + sha256: 2b75d4b56e45992adf172b158143742daeb316c35274b36f385ccb6644e93268 + md5: 2ff47134c8e292868a4609519b1ea3b6 + depends: + - __osx >=10.13 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 2544654 + timestamp: 1725410973572 +- kind: conda + name: oyaml + version: '1.0' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/oyaml-1.0-pyhd8ed1ab_0.tar.bz2 + sha256: a234072ec9840b83a1e1a4a2672f8a52a0bdae53b00904a60838adb7511d7730 + md5: 98c4dd307dbff3b69a2277dc1a55fd8d + depends: + - python >=2.7 + - pyyaml + license: MIT + license_family: MIT + size: 6606 + timestamp: 1604443652010 +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 50290 + timestamp: 1718189540074 +- 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: py312hcd31e36_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda + sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 + md5: c68bfa69e6086c381c74e16fd72613a8 + depends: + - __osx >=11.0 + - libcxx >=17 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - 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: 14470437 + timestamp: 1726878887799 +- 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: pcre2 + version: '10.44' + build: h297a79d_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + sha256: 83153c7d8fd99cab33c92ce820aa7bfed0f1c94fc57010cf227b6e3c50cb7796 + md5: 147c83e5e44780c7492998acbacddf52 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 618973 + timestamp: 1723488853807 +- kind: conda + name: pcre2 + version: '10.44' + build: h7634a1b_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.44-h7634a1b_2.conda + sha256: 336057fce69d45e1059f138beb38d60eb87ba858c3ad729ed49d9ecafd23669f + md5: 58cde0663f487778bcd7a0c8daf50293 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 854306 + timestamp: 1723488807216 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 952308 + timestamp: 1723488734144 +- 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: perl + version: 5.32.1 + build: 7_h10d778d_perl5 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/perl-5.32.1-7_h10d778d_perl5.conda + sha256: 8ebd35e2940055a93135b9fd11bef3662cecef72d6ee651f68d64a2f349863c7 + md5: dc442e0885c3a6b65e61c61558161a9e + license: GPL-1.0-or-later OR Artistic-1.0-Perl + size: 12334471 + timestamp: 1703311001432 +- kind: conda + name: perl + version: 5.32.1 + build: 7_h4614cfb_perl5 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda + sha256: b0c55040d2994fd6bf2f83786561d92f72306d982d6ea12889acad24a9bf43b8 + md5: ba3cbe93f99e896765422cc5f7c3a79e + license: GPL-1.0-or-later OR Artistic-1.0-Perl + size: 14439531 + timestamp: 1703311335652 +- kind: conda + name: perl + version: 5.32.1 + build: 7_hd590300_perl5 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 + md5: f2cfec9406850991f4e3d960cc9e3321 + depends: + - libgcc-ng >=12 + - libxcrypt >=4.4.36 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + size: 13344463 + timestamp: 1703310653947 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h66fe14f_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pillow-11.0.0-py312h66fe14f_0.conda + sha256: 5e531eded0bb784c745abe3a1187c6c33478e153755bf8a8496aebff60801150 + md5: 1e49b81b5aae7af9d74bcdac0cd0d174 + depends: + - __osx >=10.13 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + size: 42189378 + timestamp: 1729065985392 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pillow + version: 11.0.0 + build: py312haf37ca6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + sha256: 727b4c3faecdb6f6809cf20c5f32d2df4af34e0d5b9146b7588383bcba7990e8 + md5: dc9b51fbd2b6f7fea9b5123458864dbb + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + size: 41737424 + timestamp: 1729065920347 +- kind: conda + name: piper + version: 0.14.3 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/piper-0.14.3-pyhdfd78af_0.tar.bz2 + sha256: 14b294c0da26d84aaccf42d2400a8150a898a68224aec38d8217276123e0a790 + md5: 5b0621bbe6a258fb47e517c23faeb22b + depends: + - attmap >=0.12.5 + - logmuse >=0.2.4 + - pandas + - pipestat >=0.9.a1 + - psutil + - python >=3 + - ubiquerg >=0.8.0 + - yacman >=0.9.3 + license: BSD-2-Clause + license_family: BSD + size: 67350 + timestamp: 1727893686906 +- kind: conda + name: pipestat + version: 0.11.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pipestat-0.11.0-pyhd8ed1ab_0.conda + sha256: 31d7a429cf67e44d9faabcb7736465cff00269e2c837a95b50b7bd6e28baa0c0 + md5: 3ea3600ccc83d88f1b350dca89c82e22 + depends: + - eido + - jinja2 + - jsonschema + - logmuse >=0.2.5 + - pandas + - python >=3.8 + - pyyaml + - setuptools + - ubiquerg >=0.6.1 + - yacman >=0.9.3 + license: BSD-2-Clause + license_family: BSD + size: 67452 + timestamp: 1727916200790 +- kind: conda + name: pixman + version: 0.43.2 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e + md5: 71004cbf7924e19c02746ccde9fd7123 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 386826 + timestamp: 1706549500138 +- 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: platformdirs + version: 4.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.2-pyhd8ed1ab_0.conda + sha256: 3aef5bb863a2db94e47272fd5ec5a5e4b240eafba79ebb9df7a162797cf035a3 + md5: e1a2dfcd5695f0744f1bcd3bbfe02523 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20623 + timestamp: 1725821846879 +- 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: pre-commit + version: 4.0.1 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda + sha256: 2490b18ec802d8f085f2de8298a3d275451f7db17769353080dfb121fe386675 + md5: 5971cc64048943605f352f7f8612de6c + depends: + - cfgv >=2.0.0 + - identify >=1.0.0 + - nodeenv >=0.11.1 + - python >=3.9 + - pyyaml >=5.1 + - virtualenv >=20.10.0 + license: MIT + license_family: MIT + size: 194633 + timestamp: 1728420305558 +- kind: conda + name: prompt-toolkit + version: 3.0.36 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda + sha256: 6bd3626799c9467d7aa8ed5f95043e4cea614a1329580980ddcf40cfed3ee860 + md5: 4d79ec192e0bfd530a254006d123b9a6 + depends: + - python >=3.6 + - wcwidth + constrains: + - prompt_toolkit 3.0.36 + license: BSD-3-Clause + license_family: BSD + size: 271530 + timestamp: 1670414885944 +- kind: conda + name: prompt_toolkit + version: 3.0.36 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda + sha256: 8685763bf7b3299be8b1e6fccad1282217733c8fcf1d682397323e2e08a00a68 + md5: 482c15eb65dde2f899c4d68eaa938b1d + depends: + - prompt-toolkit >=3.0.36,<3.0.37.0a0 + license: BSD-3-Clause + license_family: BSD + size: 6372 + timestamp: 1670414891579 +- kind: conda + name: psutil + version: 6.1.0 + build: py312h0bf5046_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.0-py312h0bf5046_0.conda + sha256: 143a40f9c72d803744ebd6a60801c5cd17af152b293f8d59e90111ce62b53569 + md5: 61566f5c6e1d29d1d12882eb93e28532 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 493431 + timestamp: 1729847279283 +- 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: pthread-stubs + version: '0.4' + build: h00291cd_1002 + build_number: 1002 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda + sha256: 05944ca3445f31614f8c674c560bca02ff05cb51637a96f665cb2bbe496099e5 + md5: 8bcf980d2c6b17094961198284b8e862 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 8364 + timestamp: 1726802331537 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h36c2ea0_1001 + build_number: 1001 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + sha256: 67c84822f87b641d89df09758da498b2d4558d47b920fd1d3fe6d3a871e000ff + md5: 22dad4df6e8630e8dff2428f6f6a7036 + depends: + - libgcc-ng >=7.5.0 + license: MIT + license_family: MIT + size: 5625 + timestamp: 1606147468727 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 8381 + timestamp: 1726802424786 +- 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: py312h02f2b3b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pycosat-0.6.6-py312h02f2b3b_0.conda + sha256: 79622e905c3185fe96c57bf6c57b20c545e86b3a6e7da88f24dc50d03ddbe3a6 + md5: 4d07092345b6e66e580ce3cd9141c6da + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 86424 + timestamp: 1696356256622 +- 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: pydantic-core + version: 2.23.4 + build: py312he431725_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.23.4-py312he431725_0.conda + sha256: d6edd3d0f9e701c8299519d412ad3dc900c7d893a134f2582203cf43585decca + md5: 3148052477686acc581b20a34b478eeb + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - typing-extensions >=4.6.0,!=4.7.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 1431747 + timestamp: 1726525575527 +- kind: conda + name: pyfaidx + version: 0.8.1.3 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/pyfaidx-0.8.1.3-pyhdfd78af_0.tar.bz2 + sha256: 00e960f12330c3bc44fccac0417f2602143d145a5ad0e6ac7599b002ec7f1cf4 + md5: b7235b21bc5dd12cd480a23201cc8886 + depends: + - biopython + - importlib-metadata + - packaging + - python >=3.7 + - pyvcf3 + - setuptools + - six + license: BSD License + license_family: BSD + size: 33958 + timestamp: 1728570263915 +- kind: conda + name: pygithub + version: 2.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygithub-2.5.0-pyhd8ed1ab_0.conda + sha256: 50a0239c584ba3beedbbf7498bc8f9368076dbb3b35c23ffbff1ade64e1b8ee4 + md5: e1017f2fc08b01b036153feb5d77b8cb + depends: + - cryptography >=3.4.0 + - deprecated + - pyjwt >=2.4.0 + - pynacl >=1.4.0 + - python >=3.7 + - python-dateutil + - requests >=2.14.0 + - typing-extensions >=4.0.0 + - urllib3 >=1.26.0 + license: LGPL-3.0-only + license_family: LGPL + size: 154118 + timestamp: 1730939163197 +- 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: pyjwt + version: 2.10.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.10.0-pyhff2d567_0.conda + sha256: 49a20637a285f7c9acb2064b91d8c63bce5821f007598cfa64e3913ed4264354 + md5: ae45081e9e726f978c514ae1977bd1fb + depends: + - python >=3.9 + constrains: + - cryptography >=3.4.0 + license: MIT + license_family: MIT + size: 25075 + timestamp: 1731859287237 +- kind: conda + name: pynacl + version: 1.5.0 + build: py312h024a12e_4 + build_number: 4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.5.0-py312h024a12e_4.conda + sha256: 1cadc99e88105400acb41c4297d43026bf3aaaa386c72a4e2a7512c2ea70f4be + md5: 7febc246a29d77449bdb3e7a18382788 + depends: + - __osx >=11.0 + - cffi >=1.4.1 + - libsodium >=1.0.20,<1.0.21.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - six + license: Apache-2.0 + license_family: Apache + size: 1176387 + timestamp: 1725739476286 +- kind: conda + name: pynacl + version: 1.5.0 + build: py312h66e93f0_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py312h66e93f0_4.conda + sha256: 9b3849d530055c1dff2a068628a4570f55d02156d78ec00b8efbc37af396aee9 + md5: c47ede9450b5347c1933ccb552fca707 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.4.1 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - six + license: Apache-2.0 + license_family: Apache + size: 1186774 + timestamp: 1725739367009 +- kind: conda + name: pynacl + version: 1.5.0 + build: py312hb553811_4 + build_number: 4 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.5.0-py312hb553811_4.conda + sha256: 32d959bd5b7e403fd38abc1137000d1106502cb90e6ef58c71e0301ac15b6803 + md5: 88be5bbe28b39b591eb61520d12658d0 + depends: + - __osx >=10.13 + - cffi >=1.4.1 + - libsodium >=1.0.20,<1.0.21.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - six + license: Apache-2.0 + license_family: Apache + size: 1144466 + timestamp: 1725739414221 +- 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.5 + build: h2ad013b_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.5-h2ad013b_0_cpython.conda + sha256: e2aad83838988725d4ffba4e9717b9328054fd18a668cff3377e0c50f109e8bd + md5: 9c56c4df45f6571b13111d8df2448692 + depends: + - __glibc >=2.17,<3.0.a0 + - 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.46.0,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.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: 31663253 + timestamp: 1723143721353 +- kind: conda + name: python + version: 3.12.5 + build: h30c5eda_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.5-h30c5eda_0_cpython.conda + sha256: 1319e918fb54c9491832a9731cad00235a76f61c6f9b23fc0f70cdfb74c950ea + md5: 5e315581e2948dfe3bcac306540e9803 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.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: 12926356 + timestamp: 1723142203193 +- kind: conda + name: python + version: 3.12.5 + build: h37a9e06_0_cpython + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.5-h37a9e06_0_cpython.conda + sha256: c0f39e625b2fd65f70a9cc086fe4b25cc72228453dbbcd92cd5d140d080e38c5 + md5: 517cb4e16466f8d96ba2a72897d14c48 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.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: 12173272 + timestamp: 1723142761765 +- 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 + license_family: APACHE + size: 221925 + timestamp: 1731919374686 +- 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: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6278 + timestamp: 1723823099686 +- 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: pyvcf3 + version: 1.0.3 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/pyvcf3-1.0.3-pyhdfd78af_0.tar.bz2 + sha256: 5283bca618cea395f5aabdc40a9a136c0203c247e16935a2b250e84670e1dccb + md5: 2471bf4fad9f15602ad24164adf1a22a + depends: + - python 3.* + license: MIT + size: 979534 + timestamp: 1650931704574 +- kind: conda + name: pyyaml + version: 6.0.2 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda + sha256: b06f1c15fb39695bbf707ae8fb554b9a77519af577b5556784534c7db10b52e3 + md5: 1ee23620cf46cb15900f70a1300bae55 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + size: 187143 + timestamp: 1725456547263 +- 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: questionary + version: 2.0.1 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_1.conda + sha256: e1b22276ab3a33ed24b606e95099506269c09205278e4174823c51e5e4579eab + md5: 375950ebdf7945b4d3d57fad0cbe52e6 + depends: + - prompt_toolkit <=3.0.36,>=2.0 + - python >=3.6 + license: MIT + license_family: MIT + size: 29421 + timestamp: 1694359940547 +- 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: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 250351 + timestamp: 1679532511311 +- 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: refgenconf + version: 0.12.2 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/refgenconf-0.12.2-pyhdfd78af_0.tar.bz2 + sha256: 247a48ab5af2406a87c666a5e567fc8eae6ec25b179395d2bf0bf520da17bba7 + md5: f37671eb2b4044fe04eb7d5690e6c64d + depends: + - future + - jsonschema >=3.0.1 + - python >=3.6 + - pyyaml + - requests + - rich >=9.0.1 + - yacman >=0.8.0 + license: BSD-2-Clause + license_family: BSD + size: 54115 + timestamp: 1652985912896 +- kind: conda + name: refgenie + version: 0.12.1 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/refgenie-0.12.1-pyhdfd78af_0.tar.bz2 + sha256: 91063a62219f5505bc583b9adc7432229778e14bc4facdcb02e6e73d30bdf419 + md5: 5780440946d4d20c750b6276f12d08d7 + depends: + - logmuse >=0.2.6 + - piper >=0.12.1 + - pyfaidx >=0.5.5.2 + - python >=3.6 + - refgenconf >=0.10.0 + - yacman >=0.8.0 + license: BSD-2-Clause + license_family: BSD + size: 33591 + timestamp: 1636046429400 +- kind: conda + name: reproc + version: 14.2.4.post0 + build: h10d778d_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/reproc-14.2.4.post0-h10d778d_1.conda + sha256: 41c7fb3ef17684c98c1d2c50d0eaba388beed400dbc4cc099a9f31a2819ef594 + md5: d7c3258e871481be5bbaf28b4729e29f + license: MIT + license_family: MIT + size: 32403 + timestamp: 1698242540515 +- kind: conda + name: reproc + version: 14.2.4.post0 + build: h93a5062_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-14.2.4.post0-h93a5062_1.conda + sha256: e12534c909613b56c539eed6f4cd55da2eb03086435101fad79c383a9c3df527 + md5: ef7ae6d7bb50c8c735551d825e1ea287 + license: MIT + license_family: MIT + size: 32026 + timestamp: 1698242638367 +- kind: conda + name: reproc + version: 14.2.4.post0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.4.post0-hd590300_1.conda + sha256: bb2e4e0ce93bc61bc7c03c4f66abcb8161b0a4f1c41b5156cf1e5e17892b05d8 + md5: 82ca53502dfd5a64a80dee76dae14685 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 33928 + timestamp: 1698242272153 +- kind: conda + name: reproc-cpp + version: 14.2.4.post0 + build: h59595ed_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.4.post0-h59595ed_1.conda + sha256: 8f0c6852471c0f2b02ab21d7c2877e30fc7f4d7d8034ca90bd9fdc3a22277fe9 + md5: 715e1d720ec1a03715bebd237972fca5 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - reproc 14.2.4.post0 hd590300_1 + license: MIT + license_family: MIT + size: 25379 + timestamp: 1698242302911 +- kind: conda + name: reproc-cpp + version: 14.2.4.post0 + build: h93d8f39_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/reproc-cpp-14.2.4.post0-h93d8f39_1.conda + sha256: dfdf987c7584d61a690a390872f89f968fb25ba44c76a9417f73e09bba1da3bc + md5: a32e95ada0ee860c91e87266700970c3 + depends: + - __osx >=10.9 + - libcxx >=16.0.6 + - reproc 14.2.4.post0 h10d778d_1 + license: MIT + license_family: MIT + size: 24313 + timestamp: 1698242598504 +- kind: conda + name: reproc-cpp + version: 14.2.4.post0 + build: h965bd2d_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-cpp-14.2.4.post0-h965bd2d_1.conda + sha256: 83736a55ff9cf3a54591aa44c3ee1181cd570c0a452b8d8a2ab113f3e0b0974b + md5: f81d00496e13ee828f84b3ef17e41346 + depends: + - __osx >=10.9 + - libcxx >=16.0.6 + - reproc 14.2.4.post0 h93a5062_1 + license: MIT + license_family: MIT + size: 24527 + timestamp: 1698242706531 +- 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: requests-cache + version: 1.2.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.2.1-pyhd8ed1ab_0.conda + sha256: 30104bfcb6a7dbb9bd9889568d81fc2e47d47aa30a27f18d4a80b0649d8ed636 + md5: c6089540fed51a9a829aa19590fa925b + depends: + - attrs >=21.2 + - cattrs >=22.2 + - itsdangerous >=2.0 + - platformdirs >=2.5 + - python >=3.8 + - pyyaml >=6.0.1 + - requests >=2.22 + - ujson >=5.4 + - url-normalize >=1.4 + - urllib3 >=1.25.5 + license: BSD-2-Clause + license_family: BSD + size: 50797 + timestamp: 1718753425508 +- 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: rich-click + version: 1.8.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.8.3-pyhd8ed1ab_0.conda + sha256: e83ebdc82e5787cb2dacd4380e0ca7c1ce4e7f356a0be0ccbac2ebcff1032efa + md5: ad6cdc745c76535e7cc56aab865b1fc5 + depends: + - click >=7,<9 + - python >=3.7 + - rich >=10 + license: MIT + license_family: MIT + size: 33837 + timestamp: 1718026216838 +- 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: rpds-py + version: 0.21.0 + build: py312hcd83bfe_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.21.0-py312hcd83bfe_0.conda + sha256: a3d885b49b03259ff7306855466933f9ba06e3f4c327cd0122e9a43b68910555 + md5: 8ea53395d5403ae5ec1adabb1a74719a + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 295817 + timestamp: 1730922974629 +- kind: conda + name: ruamel.yaml + version: 0.18.6 + build: py312h41838bb_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.18.6-py312h41838bb_0.conda + sha256: 27ab446d39a46f7db365265a48ce74929c672e14c86b1ce8955f59e2d92dff39 + md5: 9db93e711729ec70dacdfa58bf970cfd + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml.clib >=0.1.2 + license: MIT + license_family: MIT + size: 268460 + timestamp: 1707298596313 +- kind: conda + name: ruamel.yaml + version: 0.18.6 + build: py312h98912ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h98912ed_0.conda + sha256: 26856daba883254736b7f3767c08f445b5d010eebbf4fc7aa384ee80e24aa663 + md5: a99a06a875138829ef65f44bbe2c30ca + depends: + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml.clib >=0.1.2 + license: MIT + license_family: MIT + size: 268015 + timestamp: 1707298336196 +- kind: conda + name: ruamel.yaml + version: 0.18.6 + build: py312he37b823_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.6-py312he37b823_0.conda + sha256: 4a27b50445842e97a31e3f412816d4a0d576b4f1ee327b9a892a183ba5c60f6f + md5: cb9f9b4797001b2c52383f4007fa1f4b + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - ruamel.yaml.clib >=0.1.2 + license: MIT + license_family: MIT + size: 268637 + timestamp: 1707298502612 +- kind: conda + name: ruamel.yaml.clib + version: 0.2.8 + build: py312h41838bb_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h41838bb_0.conda + sha256: c0a321d14505b3621d6301e1ed9bc0129b4c8b2812e7520040d2609aaeb07845 + md5: a134bf1778eb7add92ea760e801dc245 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 118650 + timestamp: 1707314908121 +- kind: conda + name: ruamel.yaml.clib + version: 0.2.8 + build: py312h98912ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h98912ed_0.conda + sha256: 5965302881d8b1049291e3ba3912286cdc72cb82303230cbbf0a048c6f6dd7c1 + md5: 05f31c2a79ba61df8d6d903ce4a4ce7b + depends: + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 135640 + timestamp: 1707314642857 +- kind: conda + name: ruamel.yaml.clib + version: 0.2.8 + build: py312he37b823_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312he37b823_0.conda + sha256: c3138824f484cca2804d22758c75965b578cd35b35243ff02e64da06bda03477 + md5: 2fa02324046cfcb7a67fae30fd06a945 + depends: + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 111221 + timestamp: 1707315016121 +- kind: conda + name: setuptools + version: 73.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_0.conda + sha256: c9f5e110e3fe5a7c4cd5b9da445c05a1fae000b43ab3a97cb6a501f4267515fc + md5: f0b618d7673d1b2464f600b34d912f6f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 1460460 + timestamp: 1725348602179 +- 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: 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: 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: textual + version: 0.71.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/textual-0.71.0-pyhd8ed1ab_0.conda + sha256: f6e832c56204b5dec130741bfcad76196463ff75f98cea7301d6c72dfa566c96 + md5: b9ccda60d7cb74bf9bd23a8713383d94 + depends: + - markdown-it-py >=2.1.0 + - python >=3.8.0,<4.0.0 + - rich >=13.3.3 + - typing-extensions >=4.4.0,<5.0.0 + constrains: + - tree-sitter >=0.20.1,<0.21.0 + - tree_sitter_languages =1.10.2 + license: MIT + license_family: MIT + size: 388340 + timestamp: 1719675039552 +- 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: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- 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: 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: tqdm + version: 4.66.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + sha256: f2384902cef72048b0e9bad5c03d7a843de02ba6bc8618a9ecab6ff81a131312 + md5: c6e94fc2b2ec71ea33fe7c7da259acb4 + depends: + - colorama + - python >=3.7 + license: MPL-2.0 or MIT + size: 89519 + timestamp: 1722737568509 +- kind: conda + name: trogon + version: 0.6.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trogon-0.6.0-pyhd8ed1ab_0.conda + sha256: ac0516c083801c18795fcd1f6361a9453b88e53189666f894ab19834b5812dc5 + md5: fa72e0757e478d620590ce4257a81d7e + depends: + - click >=8.0.0 + - python >=3.7.0,<4.0.0 + - textual >=0.26.0 + license: MIT + license_family: MIT + size: 27559 + timestamp: 1727974628468 +- kind: conda + name: truststore + version: 0.9.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/truststore-0.9.2-pyhd8ed1ab_0.conda + sha256: 04be82b30b57ac21b509e1dc6829ee9eb1b92c54366a64a256b0eedabfec1ac8 + md5: f14e46d1bf271e748ff556d8b872e28a + depends: + - python >=3.10 + license: MIT + license_family: MIT + size: 21086 + timestamp: 1724771094952 +- kind: conda + name: typer + version: 0.13.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.1-pyhd8ed1ab_0.conda + sha256: 2f12a5af13d440aa75970e3d0d1ea3192916848473967b4ecb483627c01333cb + md5: 82a4704166144f27e9c83803bff5bf53 + depends: + - python >=3.9 + - typer-slim-standard 0.13.1 hd8ed1ab_0 + license: MIT + license_family: MIT + size: 55352 + timestamp: 1732084066966 +- kind: conda + name: typer-slim + version: 0.13.1 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.1-pyhff2d567_0.conda + sha256: b190bcd5f341ba8843f2f1ce43b5e8dae770bb84d49e2ce5b346e4d8098367a1 + md5: 85283fb942fa2604c3db03483027ced2 + depends: + - click >=8.0.0 + - python >=3.9 + - typing_extensions >=3.7.4.3 + constrains: + - shellingham >=1.3.0 + - typer >=0.13.1,<0.13.2.0a0 + - rich >=10.11.0 + license: MIT + license_family: MIT + size: 43463 + timestamp: 1732084053693 +- kind: conda + name: typer-slim-standard + version: 0.13.1 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.1-hd8ed1ab_0.conda + sha256: 14ac72d0533bc2f37f8dc85b90b45a91ca28ee0995c520b16a40f34629749c7a + md5: a9bf95ed3c65bf936292d944bf3df36d + depends: + - rich + - shellingham + - typer-slim 0.13.1 pyhff2d567_0 + license: MIT + license_family: MIT + size: 48744 + timestamp: 1732084054211 +- 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: 2024a + build: h8827d51_1 + build_number: 1 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda + sha256: 7d21c95f61319dba9209ca17d1935e6128af4235a67ee4e57a00908a1450081e + md5: 8bfdead4e0fff0383ae4c9c50d0531bd + license: LicenseRef-Public-Domain + size: 124164 + timestamp: 1724736371498 +- 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: uc-micro-py + version: 1.0.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda + sha256: 54293cd94da3a6b978b353eb7897555055d925ad0008bc73e85cca19e2587ed0 + md5: 3b7fc78d7be7b450952aaa916fb78877 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 11162 + timestamp: 1707507514699 +- kind: conda + name: ujson + version: 5.10.0 + build: py312h2ec8cdc_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ujson-5.10.0-py312h2ec8cdc_1.conda + sha256: 2c4a907fa335fe7c1062a15704e54416ae2411db43fa523fb761b1d7e0195858 + md5: 96226f62dddc63226472b7477d783967 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 51845 + timestamp: 1724954533808 +- kind: conda + name: ujson + version: 5.10.0 + build: py312h5861a67_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ujson-5.10.0-py312h5861a67_1.conda + sha256: 46a3a88a39f50901a552876bd62e0ddfca28dace001b8987c19e7bbbc95e6f0e + md5: f1a05dfc4f626da6e6a3d29dc66dbec1 + depends: + - __osx >=10.13 + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 59268 + timestamp: 1724954584216 +- kind: conda + name: ujson + version: 5.10.0 + build: py312hde4cb15_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ujson-5.10.0-py312hde4cb15_1.conda + sha256: 6bd2a9a6d63e45fa7418cbad01fe502b65a8a13da86630f420dd8993dc7c47dc + md5: e0f2dfba17ab64ec0724f821584b1ea3 + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 56734 + timestamp: 1724954674979 +- kind: conda + name: ukkonen + version: 1.0.1 + build: py312h6142ec9_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda + sha256: 1e4452b4a12d8a69c237f14b876fbf0cdc456914170b49ba805779c749c31eca + md5: 2b485a809d1572cbe7f0ad9ee107e4b0 + depends: + - __osx >=11.0 + - cffi + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 13605 + timestamp: 1725784243533 +- kind: conda + name: ukkonen + version: 1.0.1 + build: py312h68727a3_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda + sha256: 9fb020083a7f4fee41f6ece0f4840f59739b3e249f157c8a407bb374ffb733b5 + md5: f9664ee31aed96c85b7319ab0a693341 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 13904 + timestamp: 1725784191021 +- kind: conda + name: ukkonen + version: 1.0.1 + build: py312hc5c4d5f_5 + build_number: 5 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ukkonen-1.0.1-py312hc5c4d5f_5.conda + sha256: f6433143294c1ca52410bf8bbca6029a04f2061588d32e6d2b67c7fd886bc4e0 + md5: f270aa502d8817e9cb3eb33541f78418 + depends: + - __osx >=10.13 + - cffi + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 13031 + timestamp: 1725784199719 +- kind: conda + name: url-normalize + version: 1.4.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/url-normalize-1.4.3-pyhd8ed1ab_0.tar.bz2 + sha256: 118fa3e16771f895e95112f3139a216b73d8d916905c5b259ca893bd68bcf24a + md5: 7c4076e494f0efe76705154ac9302ba6 + depends: + - python >=3.6 + - six + license: MIT + license_family: MIT + size: 10172 + timestamp: 1619201525069 +- kind: conda + name: urllib3 + version: 2.2.2 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda + sha256: 00c47c602c03137e7396f904eccede8cc64cc6bad63ce1fc355125df8882a748 + md5: e804c43f58255e977093a2298e442bb8 + 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: 95048 + timestamp: 1719391384778 +- 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: virtualenv + version: 20.27.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.1-pyhd8ed1ab_0.conda + sha256: 189b935224732267df10dc116bce0835bd76fcdb20c30f560591c92028d513b0 + md5: dae21509d62aa7bf676279ced3edcb3f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + size: 2965442 + timestamp: 1730204927840 +- 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 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.16.0-py312h024a12e_1.conda + sha256: 54a5d3d9e1b45022b28c5ca3ceaa7ec2db4a40968b2b556804becfdff98f4efe + md5: f97c9abfeb8292f5f8353607ca8a1127 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + size: 59642 + timestamp: 1724958200454 +- 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: xorg-fixesproto + version: '5.0' + build: h7f98852_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-h7f98852_1002.tar.bz2 + sha256: 5d2af1b40f82128221bace9466565eca87c97726bb80bbfcd03871813f3e1876 + md5: 65ad6e1eb4aed2b0611855aff05e04f6 + depends: + - libgcc-ng >=9.3.0 + - xorg-xextproto + license: MIT + license_family: MIT + size: 9122 + timestamp: 1617479697350 +- kind: conda + name: xorg-inputproto + version: 2.3.2 + build: h7f98852_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2 + sha256: 6c8c2803de0f643f8bad16ece3f9a7259e4a49247543239c182d66d5e3a129a7 + md5: bcd1b3396ec6960cbc1d2855a9e60b2b + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + size: 19602 + timestamp: 1610027678228 +- kind: conda + name: xorg-kbproto + version: 1.0.7 + build: h7f98852_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 + sha256: e90b0a6a5d41776f11add74aa030f789faf4efd3875c31964d6f9cfa63a10dd1 + md5: 4b230e8381279d76131116660f5a241a + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + size: 27338 + timestamp: 1610027759842 +- kind: conda + name: xorg-libice + version: 1.1.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda + sha256: 5aa9b3682285bb2bf1a8adc064cb63aff76ef9178769740d855abb42b0d24236 + md5: b462a33c0be1421532f28bfe8f4a7514 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 58469 + timestamp: 1685307573114 +- kind: conda + name: xorg-libsm + version: 1.2.4 + build: h7391055_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda + sha256: 089ad5f0453c604e18985480218a84b27009e9e6de9a0fa5f4a20b8778ede1f1 + md5: 93ee23f12bc2e684548181256edd2cf6 + depends: + - libgcc-ng >=12 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.1,<2.0a0 + license: MIT + license_family: MIT + size: 27433 + timestamp: 1685453649160 +- kind: conda + name: xorg-libx11 + version: 1.8.10 + build: h4f16b4b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + sha256: c4650634607864630fb03696474a0535f6fce5fda7d81a6462346e071b53dfa7 + md5: 0b666058a179b744a622d0a4a0c56353 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + - xorg-xorgproto + license: MIT + license_family: MIT + size: 838308 + timestamp: 1727356837875 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h00291cd_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h00291cd_1.conda + sha256: 96177823ec38336b0f4b7e7c2413da61f8d008d800cc4a5b8ad21f9128fb7de0 + md5: c6cc91149a08402bbb313c5dc0142567 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 13176 + timestamp: 1727034772877 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda + sha256: 309751371d525ce50af7c87811b435c176915239fc9e132b99a25d5e1703f2d4 + md5: 2c80dc38fface310c9bd81b17037fee5 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 14468 + timestamp: 1684637984591 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 13515 + timestamp: 1727034783560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: h7f98852_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + sha256: 4df7c5ee11b8686d3453e7f3f4aa20ceef441262b49860733066c52cfd0e4a77 + md5: be93aabceefa2fac576e971aef407908 + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + size: 19126 + timestamp: 1610071769228 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: h00291cd_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h00291cd_0.conda + sha256: bb4d1ef9cafef535494adf9296130b6193b3a44375883185b5167de03eb1ac7f + md5: 9f438e1b6f4e73fd9e6d78bfe7c36743 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 18465 + timestamp: 1727794980957 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 18487 + timestamp: 1727795205022 +- kind: conda + name: xorg-libxext + version: 1.3.4 + build: h0b41bf4_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda + sha256: 73e5cfbdff41ef8a844441f884412aa5a585a0f0632ec901da035a03e1fe1249 + md5: 82b6df12252e6f32402b96dacc656fec + depends: + - libgcc-ng >=12 + - xorg-libx11 >=1.7.2,<2.0a0 + - xorg-xextproto + license: MIT + license_family: MIT + size: 50143 + timestamp: 1677036907815 +- kind: conda + name: xorg-libxfixes + version: 5.0.3 + build: h7f98852_1004 + build_number: 1004 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h7f98852_1004.tar.bz2 + sha256: 1e426a1abb774ef1dcf741945ed5c42ad12ea2dc7aeed7682d293879c3e1e4c3 + md5: e9a21aa4d5e3e5f1aed71e8cefd46b6a + depends: + - libgcc-ng >=9.3.0 + - xorg-fixesproto + - xorg-libx11 >=1.7.0,<2.0a0 + license: MIT + license_family: MIT + size: 18145 + timestamp: 1617717802636 +- kind: conda + name: xorg-libxi + version: 1.7.10 + build: h4bc722e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h4bc722e_1.conda + sha256: e1416eb435e3d903bc658e3c637f0e87efd2dca290fe70daf29738b3a3d1f8ff + md5: 749baebe7e2ff3360630e069175e528b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - xorg-inputproto + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext 1.3.* + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxfixes 5.0.* + - xorg-xextproto >=7.3.0,<8.0a0 + license: MIT + license_family: MIT + size: 46794 + timestamp: 1722108216651 +- kind: conda + name: xorg-libxrender + version: 0.9.11 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda + sha256: 26da4d1911473c965c32ce2b4ff7572349719eaacb88a066db8d968a4132c3f7 + md5: ed67c36f215b310412b2af935bf3e530 + depends: + - libgcc-ng >=12 + - xorg-libx11 >=1.8.6,<2.0a0 + - xorg-renderproto + license: MIT + license_family: MIT + size: 37770 + timestamp: 1688300707994 +- kind: conda + name: xorg-libxt + version: 1.3.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.0-hd590300_1.conda + sha256: e7648d1efe2e858c4bc63ccf4a637c841dc971b37ded85a01be97a5e240fecfa + md5: ae92aab42726eb29d16488924f7312cb + depends: + - libgcc-ng >=12 + - xorg-kbproto + - xorg-libice >=1.1.1,<2.0a0 + - xorg-libsm >=1.2.4,<2.0a0 + - xorg-libx11 >=1.8.6,<2.0a0 + - xorg-xproto + license: MIT + license_family: MIT + size: 379256 + timestamp: 1690288540492 +- kind: conda + name: xorg-libxtst + version: 1.2.5 + build: h4bc722e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h4bc722e_0.conda + sha256: 0139b52c3cbce57bfd1d120c41637bc239430faff4aa0445f58de0adf4c4b976 + md5: 185159d666308204eca00295599b0a5c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - xorg-inputproto + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext 1.3.* + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxi 1.7.* + - xorg-libxi >=1.7.10,<2.0a0 + - xorg-recordproto + license: MIT + license_family: MIT + size: 32931 + timestamp: 1722575571554 +- kind: conda + name: xorg-recordproto + version: 1.14.2 + build: h7f98852_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h7f98852_1002.tar.bz2 + sha256: 4b91d48fed368c83eafd03891ebfd5bae0a03adc087ebea8a680ae22da99a85f + md5: 2f835e6c386e73c6faaddfe9eda67e98 + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + size: 8014 + timestamp: 1621340029114 +- kind: conda + name: xorg-renderproto + version: 0.11.1 + build: h7f98852_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 + sha256: 38942930f233d1898594dd9edf4b0c0786f3dbc12065a0c308634c37fd936034 + md5: 06feff3d2634e3097ce2fe681474b534 + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + size: 9621 + timestamp: 1614866326326 +- kind: conda + name: xorg-xextproto + version: 7.3.0 + build: h0b41bf4_1003 + build_number: 1003 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda + sha256: b8dda3b560e8a7830fe23be1c58cc41f407b2e20ae2f3b6901eb5842ba62b743 + md5: bce9f945da8ad2ae9b1d7165a64d0f87 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 30270 + timestamp: 1677036833037 +- kind: conda + name: xorg-xorgproto + version: '2024.1' + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda + sha256: 1316680be6edddee0156b86ec1102fc8286f51c1a5440366ed1db596a2dc3731 + md5: 7c21106b851ec72c037b162c216d8f05 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 565425 + timestamp: 1726846388217 +- kind: conda + name: xorg-xproto + version: 7.0.31 + build: h7f98852_1007 + build_number: 1007 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 + sha256: f197bb742a17c78234c24605ad1fe2d88b1d25f332b75d73e5ba8cf8fbc2a10d + md5: b4a4381d54784606820704f7b5f05a15 + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + size: 74922 + timestamp: 1607291557628 +- 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: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + size: 235693 + timestamp: 1660346961024 +- 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: yacman + version: 0.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/yacman-0.9.3-pyhd8ed1ab_0.conda + sha256: 3d7ea83e66e571422a9214a99f57fb67b4cc918f858521155f49d74b95ea0799 + md5: 6ceb3db62ea950288d0f435a5d42f599 + depends: + - attmap >=0.12.9 + - jsonschema >=3.2.0 + - oyaml + - python >=3.6 + - pyyaml >=3.13 + - ubiquerg >=0.6.1 + license: BSD-2-Clause + license_family: BSD + size: 22551 + timestamp: 1706835585893 +- 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: h3422bc3_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7 + md5: 4bb3f014845110883a3c5ee811fd84b4 + license: MIT + license_family: MIT + size: 88016 + timestamp: 1641347076660 +- 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: h13dd4ca_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h13dd4ca_0.conda + sha256: e65a52fb1c9821ba3a7a670d650314f8ff983865e77ba9f69f74e0906844943d + md5: e783a232972a5c7dca549111e63a78b2 + depends: + - libcxx >=15.0.7 + license: MIT + license_family: MIT + size: 130329 + timestamp: 1695712959746 +- 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: 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: zlib + version: 1.3.1 + build: h4ab18f5_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda + sha256: cee16ab07a11303de721915f0a269e8c7a54a5c834aa52f74b1cc3a59000ade8 + md5: 9653f1bf3766164d0e65fa723cabbc54 + depends: + - libgcc-ng >=12 + - libzlib 1.3.1 h4ab18f5_1 + license: Zlib + license_family: Other + size: 93004 + timestamp: 1716874213487 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - 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: 330788 + timestamp: 1725305806565 +- 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 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 00000000..cb51f924 --- /dev/null +++ b/pixi.toml @@ -0,0 +1,27 @@ +[project] +name = "Earth-Biogenome-Project-pilot" +version = "0.1.0" +description = "Add a short description here" +authors = ["Mahesh Binzer-Panchal "] +channels = ["conda-forge", "bioconda"] +platforms = ["linux-64", "osx-64", "osx-arm64"] + +[tasks] +# Run Nextflow directly +test-docker = "nextflow run main.nf -profile docker,test" +test-singularity = "nextflow run main.nf -profile singularity,docker" +dev = "nextflow run main.nf -profile docker,test,debug" +# Run nf-tests +nftest-docker = "nf-test test tests/main.nf.test" +nftest-singularity = "nf-test test tests/main.nf.test --profile singularity" +# Clean up +clean-unused = "nextflow clean -f -before $(nextflow log -q | tail -n 1) && find work/ -type d -empty -delete" +clean-nf = "rm -rf .nextflow* work/" +clean-results = "rm -rf results/" +clean-nftest = "rm -rf .nf-test/" +clean-all = { depends-on = [ "clean-nf", "clean-results", "clean-nftest" ] } + +[dependencies] +nextflow = ">=24.4.4,<24.5" +mamba = ">=1.5.10,<1.6" +nf-core = ">=3.0.2,<3.1" diff --git a/subworkflows/local/assemble/main.nf b/subworkflows/local/assemble/main.nf index 2dd94e01..d73ecdf5 100644 --- a/subworkflows/local/assemble/main.nf +++ b/subworkflows/local/assemble/main.nf @@ -10,8 +10,10 @@ workflow ASSEMBLE { // TODO: Make strategy check ASSEMBLE_HIFI( hifi_reads ) ch_raw_assemblies = ASSEMBLE_HIFI.out.assemblies + ch_versions = ch_versions.mix( ASSEMBLE_HIFI.out.versions ) emit: raw_assemblies = ch_raw_assemblies - versions = ch_versions + versions = ch_versions + logs = ASSEMBLE_HIFI.out.logs } \ No newline at end of file diff --git a/subworkflows/local/assemble_hifi/main.nf b/subworkflows/local/assemble_hifi/main.nf index aa0607a4..97ad2514 100644 --- a/subworkflows/local/assemble_hifi/main.nf +++ b/subworkflows/local/assemble_hifi/main.nf @@ -51,38 +51,42 @@ workflow ASSEMBLE_HIFI { [] // SAK instructions ) - gfa_ch = params.use_phased ? - HIFIASM.out.paternal_contigs - .join( HIFIASM.out.maternal_contigs ) - .map { meta, pgfa, mgfa -> [ meta, [ pgfa, mgfa ] ] } : - HIFIASM.out.processed_contigs - assemblies_ch = GFATOOLS_GFA2FA.out.fasta.groupTuple( sort: { it.name } ) - .join( gfa_ch ) - .map { meta, fasta, gfa -> - [ meta, meta.assembly + ( - params.use_phased ? - [ - pri_fasta: fasta[0], - alt_fasta: fasta[1], - pri_gfa: gfa[0], - alt_gfa: gfa[1] - ] : - [ - pri_fasta: fasta[0], - alt_fasta: null, - pri_gfa: gfa, - alt_gfa: null - ] - ) ] - } - .dump( tag: "Assemblies: Pre-purge", pretty: true ) + gfa_ch = params.use_phased ? + HIFIASM.out.paternal_contigs + .join( HIFIASM.out.maternal_contigs ) + .map { meta, pgfa, mgfa -> [ meta, [ pgfa, mgfa ] ] } : + HIFIASM.out.processed_contigs + assemblies_ch = GFATOOLS_GFA2FA.out.fasta.groupTuple( sort: { it.name } ) + .join( gfa_ch ) + .map { meta, fasta, gfa -> + [ meta, meta.assembly + ( + params.use_phased ? + [ + pri_fasta: fasta[0], + alt_fasta: fasta[1], + pri_gfa: gfa[0], + alt_gfa: gfa[1] + ] : + [ + pri_fasta: fasta[0], + alt_fasta: null, + pri_gfa: gfa, + alt_gfa: null + ] + ) ] + } + .dump( tag: "Assemblies: Pre-purge", pretty: true ) + HIFIASM.out.log + .mix( GFASTATS.out.assembly_summary ) + .map { meta, log -> log } + .set { logs } versions_ch = HIFIASM.out.versions.first() .mix( GFASTATS.out.versions.first() ) .mix( GFATOOLS_GFA2FA.out.versions.first() ) emit: assemblies = assemblies_ch + logs versions = versions_ch - } \ No newline at end of file diff --git a/subworkflows/local/assembly_report/main.nf b/subworkflows/local/assembly_report/main.nf index 1e91184b..d992c64e 100644 --- a/subworkflows/local/assembly_report/main.nf +++ b/subworkflows/local/assembly_report/main.nf @@ -4,21 +4,21 @@ include { REPORT_GENOMETRAITS } from "$projectDir/modules/local/report/ge include { REPORT_SOFTWAREVERSIONS } from "$projectDir/modules/local/report/softwareversions" // include { QUARTO as QUARTO_DTOL } from "$projectDir/modules/local/quarto" // include { QUARTO as QUARTO_GENESCOPE } from "$projectDir/modules/local/quarto" -include { QUARTO } from "$projectDir/modules/local/quarto" +include { QUARTO_NOTEBOOK } from "$projectDir/modules/local/quarto/notebook/main.nf" // include { MULTIQC as MULTIQC_FULL } from "$projectDir/modules/nf-core/multiqc/main" // include { MULTIQC as MULTIQC_SUMMARY } from "$projectDir/modules/nf-core/multiqc/main" -include { MULTIQC } from "$projectDir/modules/nf-core/multiqc/main" +// include { MULTIQC } from "$projectDir/modules/nf-core/multiqc/main" workflow ASSEMBLY_REPORT { take: - meta - logs - quarto_files // [ meta, notebook, files ] - versions + notebook // Channel: [ meta:Map, notebook:Path ] + logs // Channel: Path + versions // Channel: Path + executed_steps // Object: Map main: // DTOL table - REPORT_DTOL( TOL_SEARCH( meta.map{ meta -> meta.sample.taxid } ).json ) + REPORT_DTOL( TOL_SEARCH( notebook.map{ meta, notebook -> meta.sample.taxid } ).json ) // Genome traits table // Expected vs Observed @@ -26,10 +26,10 @@ workflow ASSEMBLY_REPORT { // Haploid Number // GOAT vs HiC // Ploidy // GOAT vs HiC // Sample Sex // GOAT vs HiC - REPORT_GENOMETRAITS( meta ) + REPORT_GENOMETRAITS( notebook.map{ meta, notebook -> meta } ) // MultiQC panels from Quarto - QUARTO( quarto_files ) + // QUARTO( quarto_files ) // Data profile // Input // GenomeScope jsons // plots? @@ -52,16 +52,23 @@ workflow ASSEMBLY_REPORT { REPORT_GENOMETRAITS.out.tsv, REPORT_SOFTWAREVERSIONS( versions - .mix( QUARTO.out.versions.first() ) .collect() ).yml, - QUARTO.out.html ) - MULTIQC( + + QUARTO_NOTEBOOK( + notebook.collect(), mqc_files.collect().dump(tag:'MultiQC'), - file("$projectDir/configs/multiqc_summary_report_config.yml", checkIfExists: true), - params.multiqc.summary_report_extra_config ? file(params.multiqc.summary_report_extra_config, checkIfExists: true) : [], - [] + Channel.value(executed_steps.collect{ k, v -> "$k: ${v}" }.join('\n')).collectFile(), ) + // MULTIQC( + // mqc_files.collect().dump(tag:'MultiQC'), + // file("$projectDir/configs/multiqc_summary_report_config.yml", checkIfExists: true), + // params.multiqc.summary_report_extra_config ? file(params.multiqc.summary_report_extra_config, checkIfExists: true) : [], + // [] + // ) + + emit: + report = QUARTO_NOTEBOOK.out.html } \ No newline at end of file diff --git a/subworkflows/local/build_fastk_database/main.nf b/subworkflows/local/build_fastk_database/main.nf index 677c9394..b0595ff4 100644 --- a/subworkflows/local/build_fastk_database/main.nf +++ b/subworkflows/local/build_fastk_database/main.nf @@ -8,10 +8,12 @@ workflow BUILD_FASTK_DATABASE { main: FASTK_FASTK ( fastx_data ) - fkdb_ch = FASTK_FASTK.out.hist.groupTuple() - .join( FASTK_FASTK.out.ktab.groupTuple(), remainder: true ) - .join( FASTK_FASTK.out.prof.groupTuple(), remainder: true ) - .map { meta, hist, ktab, prof -> [meta.findAll { it.key != 'single_end' } , hist, ktab ? ktab.flatten() : [] , prof ? prof.flatten() : [] ] } + fkdb_ch = FASTK_FASTK.out.hist + .join( FASTK_FASTK.out.ktab, remainder: true ) + .join( FASTK_FASTK.out.prof, remainder: true ) + .map { meta, hist, ktab, prof -> [ meta.subMap(meta.keySet()-['single_end', 'pair_id'] ) , hist, ktab , prof ] } + .groupTuple() + .map { meta, hist, ktab, prof -> [ meta , hist, ktab.head() ? ktab.flatten() : [] , prof.head() ? prof.flatten() : [] ] } .branch { meta, hist, ktab, prof -> single_hist: hist.size() == 1 multi_hist : hist.size() > 1 diff --git a/subworkflows/local/compare_assemblies/main.nf b/subworkflows/local/compare_assemblies/main.nf index 8cb38a43..e08509b3 100644 --- a/subworkflows/local/compare_assemblies/main.nf +++ b/subworkflows/local/compare_assemblies/main.nf @@ -15,7 +15,7 @@ workflow COMPARE_ASSEMBLIES { ) versions_ch = QUAST.out.versions QUAST.out.tsv - .map { it[1] } // Remove meta + .map { meta, tsv -> tsv } .set { logs } emit: diff --git a/subworkflows/local/compare_libraries/main.nf b/subworkflows/local/compare_libraries/main.nf index 6a98f8b6..982f0e6e 100644 --- a/subworkflows/local/compare_libraries/main.nf +++ b/subworkflows/local/compare_libraries/main.nf @@ -10,6 +10,6 @@ workflow COMPARE_LIBRARIES { versions_ch = MERQURYFK_KATCOMP.out.versions.first() emit: - versions = versions_ch - + versions = versions_ch + logs = MERQURYFK_KATCOMP.out.stacked_png.map{ meta, img -> img } } \ No newline at end of file diff --git a/subworkflows/local/decontaminate/main.nf b/subworkflows/local/decontaminate/main.nf index 170a9947..b2954545 100644 --- a/subworkflows/local/decontaminate/main.nf +++ b/subworkflows/local/decontaminate/main.nf @@ -28,7 +28,8 @@ workflow DECONTAMINATE { ) ch_cleaned_assemblies = constructAssemblyRecord( FCSGX_CLEAN.out.clean_fasta - .map { meta, asm -> [ meta.subMap(meta.keySet()-['haplotype']), asm ] } + .map { meta, asm -> [ meta.subMap(meta.keySet()-['haplotype']), asm ] }, + true ) emit: diff --git a/subworkflows/local/evaluate_assembly/main.nf b/subworkflows/local/evaluate_assembly/main.nf index 0eb43db0..bca512e7 100644 --- a/subworkflows/local/evaluate_assembly/main.nf +++ b/subworkflows/local/evaluate_assembly/main.nf @@ -2,7 +2,7 @@ include { combineByMetaKeys } from "$projectDir/modules/local/functions" include { getEachAssembly } from "$projectDir/modules/local/functions" include { getPrimaryAssembly } from "$projectDir/modules/local/functions" include { BUSCO } from "$projectDir/modules/nf-core/busco/main" -include { MERQURYFK_MERQURYFK } from "$projectDir/modules/local/merquryfk/merquryfk" +include { MERQURYFK_MERQURYFK } from "$projectDir/modules/nf-core/merquryfk/merquryfk" include { MERQURY } from "$projectDir/modules/nf-core/merqury/main" // include { INSPECTOR } from "$projectDir/modules/local/inspector/inspector" @@ -22,7 +22,14 @@ workflow EVALUATE_ASSEMBLY { getEachAssembly(assembly_ch), keySet: ['id','sample'], meta: 'rhs' - ) // [ meta, hist, ktab, assembly ] + ) // TODO: Change the function so we don't need the map + .map{ meta, hist, ktab, assembly -> + assembly instanceof Path ? + tuple(meta, hist, ktab, assembly, []) : + tuple(meta, hist, ktab, assembly.head(), assembly.last()) + }, // [ meta, hist, ktab, assembly ] + [], + [], ) MERQURY ( @@ -58,9 +65,21 @@ workflow EVALUATE_ASSEMBLY { [] ) - // TODO: Add Merqury stats to logs BUSCO.out.short_summaries_txt - .map { it[1] } // Remove meta + .mix( + MERQURYFK_MERQURYFK.out.stats, + MERQURYFK_MERQURYFK.out.qv, + // MERQURYFK_MERQURYFK.out.assembly_qv, // Contig names are missing in first column + MERQURYFK_MERQURYFK.out.full_spectra_cn_st.join( + MERQURYFK_MERQURYFK.out.part_spectra_cn_st, remainder: true + ).map { meta, full, part -> full ? tuple(meta, full): tuple(meta, part) }, + MERQURYFK_MERQURYFK.out.spectra_asm_st, + MERQURYFK_MERQURYFK.out.false_duplications, + MERQURY.out.scaffold_qv, + MERQURY.out.spectra_cn_st_png, + MERQURY.out.spectra_asm_st_png, + ) + .map { meta, file -> file } .set { logs } MERQURYFK_MERQURYFK.out.versions.first().mix( MERQURY.out.versions.first(), diff --git a/subworkflows/local/genome_properties/main.nf b/subworkflows/local/genome_properties/main.nf index cb0e598a..1215bd25 100644 --- a/subworkflows/local/genome_properties/main.nf +++ b/subworkflows/local/genome_properties/main.nf @@ -20,23 +20,21 @@ workflow GENOME_PROPERTIES { FASTK_HISTEX ( fastk_hist_ktab.map { meta, hist, ktab -> [ meta, hist ] } ) GENESCOPEFK ( FASTK_HISTEX.out.hist ) - GENESCOPEFK.out.linear_plot - .join( GENESCOPEFK.out.log_plot ) - .join( GENESCOPEFK.out.transformed_linear_plot ) - .join( GENESCOPEFK.out.transformed_log_plot ) - .map { meta, linplot, logplot, tlinplot, tlogplot -> [ meta, file("$projectDir/assets/notebooks/genescope.qmd", checkIfExists: true), [ linplot, logplot, tlinplot, tlogplot ] ] } - .set { quarto_files } - // Generate Smudgeplot MERQURYFK_PLOIDYPLOT ( fastk_hist_ktab ) // Generage GC plot MERQURYFK_KATGC ( fastk_hist_ktab ) - MERQURYFK_PLOIDYPLOT.out.stacked_ploidy_plot_png - .mix( MERQURYFK_KATGC.out.stacked_gc_plot_png ) - .map { it[1] } // Remove meta - .set { logs } + GENESCOPEFK.out.linear_plot.mix ( + GENESCOPEFK.out.log_plot, + GENESCOPEFK.out.transformed_linear_plot, + GENESCOPEFK.out.transformed_log_plot, + MERQURYFK_PLOIDYPLOT.out.stacked_ploidy_plot_png, + MERQURYFK_KATGC.out.stacked_gc_plot_png + ) + .map { meta, img -> img } + .set { logs } FASTK_HISTEX.out.versions.first().mix( GENESCOPEFK.out.versions.first(), @@ -45,8 +43,7 @@ workflow GENOME_PROPERTIES { ).set { versions } emit: - kmer_cov = GENESCOPEFK.out.kmer_cov - quarto_files + kmer_cov = GENESCOPEFK.out.kmer_cov logs versions } diff --git a/subworkflows/local/inspect_data/main.nf b/subworkflows/local/inspect_data/main.nf index e59735cc..aa08d17c 100644 --- a/subworkflows/local/inspect_data/main.nf +++ b/subworkflows/local/inspect_data/main.nf @@ -13,11 +13,16 @@ workflow INSPECT_DATA { // QC Steps GENOME_PROPERTIES ( hifi_histogram ) COMPARE_LIBRARIES ( hifi_histogram.join( hic_histogram ) ) - SCREEN_READS ( - hifi_reads, - // TODO:: Allow custom database ala nf-core/genomeassembler. - file( params.mash.screen_db, checkIfExists: true ) - ) + ch_versions = GENOME_PROPERTIES.out.versions.mix( + COMPARE_LIBRARIES.out.versions) + if ( 'screen' in params.steps.tokenize(",") ) { + SCREEN_READS ( + hifi_reads, + // TODO:: Allow custom database ala nf-core/genomeassembler. + file( params.mash.screen_db, checkIfExists: true ) + ) + ch_versions = ch_versions.mix(SCREEN_READS.out.versions) + } ch_hifi_with_kmer_cov = combineByMetaKeys( hifi_reads, @@ -27,18 +32,12 @@ workflow INSPECT_DATA { ) .map { meta, reads, kmer_cov -> [ meta + [ kmercov: kmer_cov ], reads ] } - GENOME_PROPERTIES.out.quarto_files - .set { quarto_files } GENOME_PROPERTIES.out.logs + .mix( COMPARE_LIBRARIES.out.logs ) .set { logs } - GENOME_PROPERTIES.out.versions.mix( - COMPARE_LIBRARIES.out.versions, - SCREEN_READS.out.versions - ).set { versions } emit: hifi = ch_hifi_with_kmer_cov - quarto_files logs - versions + versions = ch_versions } \ No newline at end of file diff --git a/subworkflows/local/prepare_input/main.nf b/subworkflows/local/prepare_input/main.nf index 17e97d74..f2a8edc0 100644 --- a/subworkflows/local/prepare_input/main.nf +++ b/subworkflows/local/prepare_input/main.nf @@ -201,7 +201,7 @@ workflow PREPARE_INPUT { // Combine Hi-C channels input.hic_ch.filter { !it.isEmpty() } - .transpose() + .flatMap { meta, hic_pairs -> hic_pairs.withIndex().collect{ pair, index -> [ meta + [pair_id: index], pair ] } } .set { hic_fastx_ch } // Prepare PacBio HiFi channel diff --git a/subworkflows/local/purge_dups/main.nf b/subworkflows/local/purge_dups/main.nf index 44253d82..af91c1d2 100644 --- a/subworkflows/local/purge_dups/main.nf +++ b/subworkflows/local/purge_dups/main.nf @@ -28,6 +28,7 @@ workflow PURGE_DUPLICATES { ch_hifi // [ meta, hifi ] main: + ch_versions = Channel.empty() reads_plus_assembly_ch = combineByMetaKeys ( ch_hifi, ch_assemblies, @@ -79,6 +80,7 @@ workflow PURGE_DUPLICATES { .join( PURGEDUPS_PURGEDUPS_PRIMARY.out.bed ) ) def ch_to_format = PURGEDUPS_GETSEQS_PRIMARY.out.purged + .mix( PURGEDUPS_GETSEQS_PRIMARY.out.haplotigs ) if( params.use_phased ){ // Purge alternate contigs. @@ -109,13 +111,32 @@ workflow PURGE_DUPLICATES { PURGEDUPS_SPLITFA_ALTERNATE.out.merged_fasta .join( PURGEDUPS_PURGEDUPS_ALTERNATE.out.bed ) ) - ch_to_format = ch_to_format.mix( PURGEDUPS_GETSEQS_ALTERNATE.out.purged ) + ch_to_format = PURGEDUPS_GETSEQS_PRIMARY.out.purged.mix( PURGEDUPS_GETSEQS_ALTERNATE.out.purged ) } // Format sequences and enforce line breaks SEQKIT_SEQ( ch_to_format ) - ch_purged_assemblies = constructAssemblyRecord( SEQKIT_SEQ.out.fastx ) + // If phased [ meta, [*hap.fa, *purged.fa] ] // don't sort by name + // else [ meta, [*hap1.fa, *hap2.fa] ] // sort by name + ch_purged_assemblies = constructAssemblyRecord( SEQKIT_SEQ.out.fastx, params.use_phased ) + + PURGEDUPS_HISTPLOT.out.png + .mix( PURGEDUPS_PURGEDUPS_PRIMARY.out.bed ) + .map { meta, file -> file } + .set { logs } + + MINIMAP2_ALIGN_READS.out.versions.first().mix( + PURGEDUPS_PBCSTAT.out.versions.first(), + PURGEDUPS_CALCUTS.out.versions.first(), + PURGEDUPS_HISTPLOT.out.versions.first(), + PURGEDUPS_SPLITFA_PRIMARY.out.versions.first(), + MINIMAP2_ALIGN_ASSEMBLY_PRIMARY.out.versions.first(), + PURGEDUPS_PURGEDUPS_PRIMARY.out.versions.first(), + PURGEDUPS_GETSEQS_PRIMARY.out.versions.first() + ).set { versions } emit: assemblies = ch_purged_assemblies coverage = PURGEDUPS_PBCSTAT.out.basecov + logs + versions } \ No newline at end of file diff --git a/subworkflows/local/scaffold/main.nf b/subworkflows/local/scaffold/main.nf new file mode 100644 index 00000000..d7a516af --- /dev/null +++ b/subworkflows/local/scaffold/main.nf @@ -0,0 +1,154 @@ +include { constructAssemblyRecord } from "$projectDir/modules/local/functions" +include { getPrimaryAssembly } from "$projectDir/modules/local/functions" +include { joinByMetaKeys } from "$projectDir/modules/local/functions" +include { combineByMetaKeys } from "$projectDir/modules/local/functions" +include { BWAMEM2_INDEX as BWAMEM2_INDEX_SCAFFOLD } from "$projectDir/modules/nf-core/bwamem2/index/main" +include { BWAMEM2_MEM as BWAMEM2_MEM_SCAFFOLD } from "$projectDir/modules/nf-core/bwamem2/mem/main" +include { SAMTOOLS_FAIDX } from "$projectDir/modules/nf-core/samtools/faidx/main" +include { PAIRTOOLS_PARSE } from "$projectDir/modules/nf-core/pairtools/parse/main" +include { PAIRTOOLS_SORT } from "$projectDir/modules/nf-core/pairtools/sort/main" +include { PAIRTOOLS_MERGE } from "$projectDir/modules/nf-core/pairtools/merge/main" +include { PAIRTOOLS_DEDUP } from "$projectDir/modules/nf-core/pairtools/dedup/main" +include { PAIRTOOLS_SPLIT } from "$projectDir/modules/nf-core/pairtools/split/main" +include { YAHS } from "$projectDir/modules/nf-core/yahs/main.nf" + + +workflow SCAFFOLD { + take: + ch_assemblies // [ meta, assembly ] + ch_hic // [ meta, hic-pairs ] + + main: + + BWAMEM2_INDEX_SCAFFOLD ( getPrimaryAssembly(ch_assemblies) ) + + SAMTOOLS_FAIDX ( + getPrimaryAssembly(ch_assemblies), + [ [ ], [ ] ] + ) + + combineByMetaKeys( // Combine (Hi-C + index) with Assembly + combineByMetaKeys( // Combine Hi-C reads with BWA index + ch_hic, + BWAMEM2_INDEX_SCAFFOLD.out.index, + keySet: ['id','sample'], + meta: 'rhs' + ), + getPrimaryAssembly( ch_assemblies ), + keySet: ['id','sample'], + meta: 'rhs' + ).multiMap{ meta, hic_reads, index, fasta -> + reads: [ meta, hic_reads ] + index: [ meta, index ] + fasta: [ meta, fasta ] + }.set{ bwamem2_input } + + BWAMEM2_MEM_SCAFFOLD ( + bwamem2_input.reads, + bwamem2_input.index, + bwamem2_input.fasta, + false + ) + + SAMTOOLS_FAIDX.out.fai + .map{ meta, fai -> + fai.splitCsv( sep: '\t', header: false ) + .collect{ row -> row[ 0..1 ].join('\t') } + .join('\n') + }.collectFile() + .set { chrom_sizes } + + // Combine hi-c alignment with chrom sizes + BWAMEM2_MEM_SCAFFOLD.out.bam.combine(chrom_sizes) + .multiMap{ meta, hic_bam, chr_lengths -> + hicbams: [ meta, hic_bam ] + lengths: chr_lengths + }.set{ pairtools_parse_input } + + PAIRTOOLS_PARSE ( + pairtools_parse_input.hicbams, + pairtools_parse_input.lengths + ) + PAIRTOOLS_SORT(PAIRTOOLS_PARSE.out.pairsam) + PAIRTOOLS_SORT.out.sorted.groupTuple() + .branch { meta, pairsam -> + single: pairsam.size() == 1 + return [ meta, *pairsam ] + multi: true + return [ meta, pairsam ] + } + .set { pairtools_sorted } + PAIRTOOLS_MERGE(pairtools_sorted.multi) + PAIRTOOLS_DEDUP( + PAIRTOOLS_MERGE.out.pairs.mix( + pairtools_sorted.single + ) + ) + + joinByMetaKeys( + PAIRTOOLS_DEDUP.out.pairs, + getPrimaryAssembly(ch_assemblies), + keySet: ['id','sample'], + meta: 'rhs' + ).multiMap{ meta, pairs, fasta -> + pairs: [ meta, pairs ] + fasta: [ meta, fasta ] + }.set { pairtools_split_input } + + PAIRTOOLS_SPLIT( + pairtools_split_input.pairs, + pairtools_split_input.fasta, + true // sort_bam + ) + + combineByMetaKeys( // Combine (bam + assembly) with fai + combineByMetaKeys( // Combine bams with assembly + PAIRTOOLS_SPLIT.out.bam, + getPrimaryAssembly(ch_assemblies), + keySet: ['id','sample'], + meta: 'rhs' + ), + SAMTOOLS_FAIDX.out.fai, + keySet: ['id','sample'], + meta: 'rhs' + ).multiMap{ meta, bam, fasta, fai -> + bam: [ meta, bam ] + fasta: [ fasta ] + fai: [ fai ] + }.set{ yahs_input } + + YAHS( + yahs_input.bam, + yahs_input.fasta, + yahs_input.fai + ) + + // Consensus case: + // Preserve haplotigs from purge dups + ch_scaff_and_alt = ch_assemblies.map { meta, assembly -> [ meta, assembly.alt_fasta ] } + .mix( YAHS.out.scaffolds_fasta ) + ch_scaffolded_assemblies = constructAssemblyRecord( ch_scaff_and_alt, false ) + + PAIRTOOLS_PARSE.out.stat + .mix ( + PAIRTOOLS_DEDUP.out.stat + ) + .map { meta, stats -> stats } + .set { logs } + + ch_versions = BWAMEM2_INDEX_SCAFFOLD.out.versions.first().mix( + SAMTOOLS_FAIDX.out.versions.first(), + BWAMEM2_MEM_SCAFFOLD.out.versions.first(), + PAIRTOOLS_PARSE.out.versions.first(), + PAIRTOOLS_SORT.out.versions.first(), + PAIRTOOLS_MERGE.out.versions.first(), + PAIRTOOLS_DEDUP.out.versions.first(), + PAIRTOOLS_SPLIT.out.versions.first(), + YAHS.out.versions.first() + ) + + emit: + assemblies = ch_scaffolded_assemblies + logs + versions = ch_versions +} \ No newline at end of file diff --git a/subworkflows/local/scaffold_curation/main.nf b/subworkflows/local/scaffold_curation/main.nf new file mode 100644 index 00000000..80ca3e55 --- /dev/null +++ b/subworkflows/local/scaffold_curation/main.nf @@ -0,0 +1,335 @@ +include { constructAssemblyRecord } from "$projectDir/modules/local/functions" +include { getPrimaryAssembly } from "$projectDir/modules/local/functions" +include { combineByMetaKeys } from "$projectDir/modules/local/functions" +include { joinByMetaKeys } from "$projectDir/modules/local/functions" +include { BWAMEM2_INDEX } from "$projectDir/modules/nf-core/bwamem2/index/main" +include { BWAMEM2_MEM as BWAMEM2_MEM_CURATION } from "$projectDir/modules/nf-core/bwamem2/mem/main" +include { FILTER_FIVE_END } from "$projectDir/modules/local/hic_curation/filter_five_end" +include { TWOREADCOMBINER_FIXMATE_SORT } from "$projectDir/modules/local/hic_curation/tworeadcombiner_fixmate_sort" +include { BIOBAMBAM_BAMMARKDUPLICATES2 } from "$projectDir/modules/nf-core/biobambam/bammarkduplicates2/main" +include { SAMTOOLS_FAIDX } from "$projectDir/modules/nf-core/samtools/faidx/main" +include { SAMTOOLS_MERGE as SAMTOOLS_MERGE_HIC } from "$projectDir/modules/nf-core/samtools/merge/main" +include { SAMTOOLS_MERGE as SAMTOOLS_MERGE_HIFI } from "$projectDir/modules/nf-core/samtools/merge/main" +include { SAMTOOLS_SORT } from "$projectDir/modules/nf-core/samtools/sort/main" +include { BAM2BED_SORT } from "$projectDir/modules/local/hic_curation/bam2bed_sort" +include { COOLER_CLOAD } from "$projectDir/modules/nf-core/cooler/cload/main" +include { COOLER_ZOOMIFY } from "$projectDir/modules/nf-core/cooler/zoomify/main" +include { CREATE_CHROMOSOME_SIZES_FILE } from "$projectDir/modules/local/hic_curation/create_chromosome_sizes" +include { PRETEXTMAP } from "$projectDir/modules/nf-core/pretextmap/main" +include { MINIMAP2_INDEX } from "$projectDir/modules/nf-core/minimap2/index/main" +include { MINIMAP2_ALIGN } from "$projectDir/modules/nf-core/minimap2/align/main" +include { BAM2COVERAGE_TRACKS } from "$projectDir/modules/local/hic_curation/bam2coverageTracks" +include { SEQTK_CUTN } from "$projectDir/modules/nf-core/seqtk/cutn/main" +include { CREATE_GAP_TRACKS } from "$projectDir/modules/local/hic_curation/create_gap_tracks" +include { TIDK_SEARCH as TIDK_SEARCH_BEDGRAPH } from "$projectDir/modules/nf-core/tidk/search/main" +include { TIDK_SEARCH as TIDK_SEARCH_TSV } from "$projectDir/modules/nf-core/tidk/search/main" +include { TIDK_PLOT } from "$projectDir/modules/nf-core/tidk/plot/main" +include { CREATE_TELOMER_BIGWIG_TRACK } from "$projectDir/modules/local/hic_curation/create_telomer_bigwig_track" +include { PRETEXT_TRACKS_INGESTION } from "$projectDir/modules/local/hic_curation/pretext_tracks_ingestion" + +workflow SCAFFOLD_CURATION { + take: + ch_assemblies // [ meta, assembly ] + ch_hic // [ meta, hic-pairs ] + ch_hifi // [ meta, hifi-reads ] + + main: + + ch_versions = Channel.empty() + + BWAMEM2_INDEX ( getPrimaryAssembly(ch_assemblies) ) + ch_versions = ch_versions.mix( BWAMEM2_INDEX.out.versions ) + + SAMTOOLS_FAIDX ( + getPrimaryAssembly(ch_assemblies), // [meta, fasta] + [ [ ], [ ] ] // [meta2, fai] + ) + ch_versions = ch_versions.mix( SAMTOOLS_FAIDX.out.versions ) + + combineByMetaKeys( // Combine (Hi-C + index) with Assembly + combineByMetaKeys( // Combine Hi-C reads with BWA index + ch_hic, BWAMEM2_INDEX.out.index, + keySet: ['id','sample'], + meta: 'merge' + ), + getPrimaryAssembly( ch_assemblies ), + keySet: ['id','sample'], + meta: 'merge' + ).transpose(by:1) // by meta info: [id, sample, settings, single_end, pair_id, assembly] + .multiMap{ meta, hic_reads, index, fasta -> + reads: [ meta, hic_reads ] + index: [ meta, index ] + fasta: [ meta, fasta ] + }.set{ bwamem2_input } + + BWAMEM2_MEM_CURATION (bwamem2_input.reads, bwamem2_input.index, bwamem2_input.fasta, false) + ch_versions = ch_versions.mix( BWAMEM2_MEM_CURATION.out.versions ) + + // filter alignments + FILTER_FIVE_END(BWAMEM2_MEM_CURATION.out.bam) + ch_versions = ch_versions.mix( FILTER_FIVE_END.out.versions ) + + // combine reads + FILTER_FIVE_END.out.bam + .map { meta, bam -> [ meta.subMap('id', 'sample', 'assembly', 'pair_id'), bam ] } + .groupTuple( sort: {a, b -> a.name <=> b.name } ) + .set { combine_input } + + TWOREADCOMBINER_FIXMATE_SORT(combine_input) + ch_versions = ch_versions.mix( TWOREADCOMBINER_FIXMATE_SORT.out.versions ) + + // merge bam files in case multiple HIC paired-end libraries are present + TWOREADCOMBINER_FIXMATE_SORT.out.bam + .map { meta, bam_list -> [ meta - meta.subMap( 'pair_id' ), bam_list ] } + .groupTuple() + .branch { meta, bam_list -> + multiples: bam_list.size() > 1 + singleton: true + } + .set { merge_bam } + + SAMTOOLS_MERGE_HIC( + merge_bam.multiples, + [ [], [] ], // [meta2, fasta] + [ [], [] ] // [meta2, fai] + ) + ch_versions = ch_versions.mix( SAMTOOLS_MERGE_HIC.out.versions ) + + merge_bam.singleton + .map { meta, bam -> [ meta, *bam ] } // the spread operator (*) flattens the bam list + .mix( SAMTOOLS_MERGE_HIC.out.bam) + .set { dedup_bam } + + // dedupliucate bam file + BIOBAMBAM_BAMMARKDUPLICATES2(dedup_bam) + ch_versions = ch_versions.mix( BIOBAMBAM_BAMMARKDUPLICATES2.out.versions ) + + // convert bam to sorted bed file + BAM2BED_SORT(BIOBAMBAM_BAMMARKDUPLICATES2.out.bam) + ch_versions = ch_versions.mix( BAM2BED_SORT.out.versions ) + + // create chrome sizes file from fai file + CREATE_CHROMOSOME_SIZES_FILE(SAMTOOLS_FAIDX.out.fai, params.hic_map_sort_by) + ch_versions = ch_versions.mix( CREATE_CHROMOSOME_SIZES_FILE.out.versions ) + + // create cooler files + // tuple val(meta), path(pairs), path(index), val(cool_bin) + // path chromsizes + BAM2BED_SORT.out.pairs + .map { meta, pairs -> [ meta, pairs, [ ] ] } + .combine( + Channel.value(params.cooler_bin_size) + ) + .set { pairs_idx_binsize_ch } + + combineByMetaKeys( // Combine Hi-C reads with BWA index + pairs_idx_binsize_ch, CREATE_CHROMOSOME_SIZES_FILE.out.sizes, + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, pairs, fake_index, cool_bin, chrom_sizes -> + cload_in : [ meta, pairs, fake_index, cool_bin ] + chrom_sizes : chrom_sizes + } + .set { cooler_cload_ch } + + COOLER_CLOAD( + cooler_cload_ch.cload_in, + cooler_cload_ch.chrom_sizes + ) + ch_versions = ch_versions.mix( COOLER_CLOAD.out.versions ) + + COOLER_CLOAD.out.cool.map { meta, cool, cool_bin -> [ meta, cool ] } + .set { cooler_zoomify_ch } + + COOLER_ZOOMIFY(cooler_zoomify_ch) + ch_versions = ch_versions.mix( COOLER_ZOOMIFY.out.versions ) + + // create pretext maps + joinByMetaKeys(joinByMetaKeys( + getPrimaryAssembly(ch_assemblies), + SAMTOOLS_FAIDX.out.fai, + keySet: ['id','sample'], + meta: 'rhs' + ), BIOBAMBAM_BAMMARKDUPLICATES2.out.bam, + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, fasta, fai, bam -> + bam : [ meta, bam ] + fasta_fai : [ meta, fasta, fai ] + } + .set { pretext_ch } + + PRETEXTMAP( + pretext_ch.bam, + pretext_ch.fasta_fai + ) + ch_versions = ch_versions.mix( PRETEXTMAP.out.versions ) + + // create tracks for PretextMap: + // coverage, gap, telomer + + joinByMetaKeys( + ch_hifi, + getPrimaryAssembly( ch_assemblies ), + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, hifi_reads, fasta -> + hifi_reads: [ meta, hifi_reads ] + reference : fasta + } + .set{ asm_hifi_ch } + + // Coverage-track: create minimap2 index + MINIMAP2_INDEX(getPrimaryAssembly( ch_assemblies )) + ch_versions = ch_versions.mix( MINIMAP2_INDEX.out.versions ) + + // Coverage-track: align HiFi reads + MINIMAP2_ALIGN( + asm_hifi_ch.hifi_reads, // [ meta, reads ] + asm_hifi_ch.reference, // reference + 1, // bam_format + 0, // cigar_paf_format + 0 // cigar_ba, + ) + ch_versions = ch_versions.mix( MINIMAP2_ALIGN.out.versions ) + + // Coverage-track: merge hifi-bam files (if multiple hifi reads are present) + MINIMAP2_ALIGN.out.bam + .groupTuple() + .branch { meta, bam_list -> + multiples: bam_list.size() > 1 + singleton: true + } + .set { merge_hifi_bam } + + SAMTOOLS_MERGE_HIFI( + merge_hifi_bam.multiples, + [ [], [] ], + [ [], [] ] + ) + ch_versions = ch_versions.mix( SAMTOOLS_MERGE_HIFI.out.versions ) + + joinByMetaKeys( + ch_hifi, + getPrimaryAssembly( ch_assemblies ), + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, hifi_reads, fasta -> + hifi_reads: [ meta, hifi_reads ] + reference : fasta + } + .set{ asm_hifi_ch } + + joinByMetaKeys( + merge_hifi_bam.singleton + .map { meta, bam -> [ meta, *bam ] } // the spread operator (*) flattens the bam list + .mix( SAMTOOLS_MERGE_HIFI.out.bam), + CREATE_CHROMOSOME_SIZES_FILE.out.sizes, + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, bam, chrom_sizes -> + merged_bam : [ meta, bam ] + chrom_sizes : chrom_sizes + } + .set { bam2coverage_ch } + + // Coverage-track: create hitile- and bed-coverage tracks + BAM2COVERAGE_TRACKS( + bam2coverage_ch.merged_bam, + bam2coverage_ch.chrom_sizes, + params.hifi_coverage_cap + ) + ch_versions = ch_versions.mix( BAM2COVERAGE_TRACKS.out.versions ) + + // Gap-track: create bedtrack + SEQTK_CUTN(getPrimaryAssembly( ch_assemblies )) + ch_versions = ch_versions.mix( SEQTK_CUTN.out.versions ) + + // Gap-track: create beddb- and bed-gap tracks + joinByMetaKeys( + SEQTK_CUTN.out.bed, + CREATE_CHROMOSOME_SIZES_FILE.out.sizes, + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, bed, chrom_sizes -> + bed : [ meta, bed ] + chrom_sizes : chrom_sizes + } + .set { bed2gap_ch } + + CREATE_GAP_TRACKS( + bed2gap_ch.bed, + bed2gap_ch.chrom_sizes + ) + ch_versions = ch_versions.mix( CREATE_GAP_TRACKS.out.versions ) + + // Telomer-track: create track + TIDK_SEARCH_BEDGRAPH( + getPrimaryAssembly( ch_assemblies ), + params.telomer_motif + ) + ch_versions = ch_versions.mix( TIDK_SEARCH_BEDGRAPH.out.versions ) + + TIDK_SEARCH_TSV( + getPrimaryAssembly( ch_assemblies ), + params.telomer_motif + ) + ch_versions = ch_versions.mix( TIDK_SEARCH_TSV.out.versions ) + + // Telomer-track: create plot - thats not really necessary, but nice to have + TIDK_PLOT(TIDK_SEARCH_TSV.out.tsv) + ch_versions = ch_versions.mix( TIDK_PLOT.out.versions ) + + // Telomer-track: convert telomer bedgraph into beddb file that can be ingested into HiGlass + joinByMetaKeys( + TIDK_SEARCH_BEDGRAPH.out.bedgraph, + CREATE_CHROMOSOME_SIZES_FILE.out.sizes, + keySet: ['id','sample'], + meta: 'rhs' + ) + .multiMap { meta, bedgraph, chrom_sizes -> + bedgraph : [ meta, bedgraph ] + chrom_sizes : chrom_sizes + } + .set { bedgraph_telomer_ch } + + CREATE_TELOMER_BIGWIG_TRACK( + bedgraph_telomer_ch.bedgraph, + bedgraph_telomer_ch.chrom_sizes + ) + ch_versions = ch_versions.mix( CREATE_TELOMER_BIGWIG_TRACK.out.versions ) + + // ingest coverage, gap and telomer track into Pretext + // for each assembly always join: + // 1-PretextMap with 1-CoverageTrack with 1-TelomereTrack with 1-GapTrack + joinByMetaKeys( + joinByMetaKeys( + joinByMetaKeys( + PRETEXTMAP.out.pretext, + BAM2COVERAGE_TRACKS.out.capped_bed, + keySet: ['id','sample', 'assembly'], + meta: 'rhs' + ), + TIDK_SEARCH_BEDGRAPH.out.bedgraph, + keySet: ['id','sample','assembly'], + meta: 'rhs' + ), + CREATE_GAP_TRACKS.out.bedgraph, + keySet: ['id','sample','assembly'], + meta: 'rhs' + ) + .set { pretext_tracks_ch } + + PRETEXT_TRACKS_INGESTION(pretext_tracks_ch) + ch_versions = ch_versions.mix( PRETEXT_TRACKS_INGESTION.out.versions ) + + emit: + assemblies = Channel.empty() + versions = ch_versions +} \ No newline at end of file diff --git a/tests/configs/test_data.config b/tests/configs/test_data.config index da2e062b..5c18c678 100644 --- a/tests/configs/test_data.config +++ b/tests/configs/test_data.config @@ -320,7 +320,7 @@ params { hello = "${test_data_dir}/generic/txt/hello.txt" } 'cnn' { - reference = "${test_data_dir}/generic/cnn/reference.cnn" + reference = "${test_data_dir}/generic/cnn/reference.cnn" } 'cooler'{ test_pairix_pair_gz = "${test_data_dir}/genomics/homo_sapiens/cooler/cload/hg19/hg19.GM12878-MboI.pairs.subsample.blksrt.txt.gz" diff --git a/tests/data/tiny/README.md b/tests/data/tiny/README.md new file mode 100644 index 00000000..ef57eeab --- /dev/null +++ b/tests/data/tiny/README.md @@ -0,0 +1,21 @@ +# Test data set provenance + +## Authors + +- Guilherme Dias +- Martin Pippel + +## Provenance + +- species: _Drosophila melanogaster_ +- PacBio HiFi data was downloaded from NBCI´s SRA [SRR10238607](https://www.ncbi.nlm.nih.gov/sra/SRR10238607) +- Illumina HiC data was downloaded from NBCI´s SRA [SRR10512944](https://www.ncbi.nlm.nih.gov/sra/SRR10512944) + +- PacBio HiFi data were randomly subsampled to 15X read coverage and assembled with [hifiasm version 0.19.8](https://github.com/chhylp123/hifiasm) +- PacBio reads were mapped back to the genome assembly with minimap2 +- Illumina HiC reads were mapped back to the genome assembly with bwa mem + +- PacBio and HiC reads were extracted from the alignment bam files: + - from a 2Mb region within a 28Mb contig + - a 20Kb gap was introduces at Position 1Mb and all PacBio and HiC reads that mapped into that region were filtered out + - HiC reads were further filtered down to 50%, representing a 38X coverage diff --git a/tests/data/tiny/test_ci_Dmelanogaster.yml b/tests/data/tiny/test_ci_Dmelanogaster.yml new file mode 100644 index 00000000..5e46b17e --- /dev/null +++ b/tests/data/tiny/test_ci_Dmelanogaster.yml @@ -0,0 +1,15 @@ +# Data set generated by Guilherme Dias and Martin Pippel. +# See README.md for data provenance. +sample: + name: 'Drosophila melanogaster' +hic: + - read1: 'https://raw.githubusercontent.com/NBISweden/Earth-Biogenome-Project-pilot/main/tests/data/tiny/HIC/dmel_2Mb_p1_R1.fastq.gz' + read2: 'https://raw.githubusercontent.com/NBISweden/Earth-Biogenome-Project-pilot/main/tests/data/tiny/HIC/dmel_2Mb_p1_R2.fastq.gz' + - read1: 'https://raw.githubusercontent.com/NBISweden/Earth-Biogenome-Project-pilot/main/tests/data/tiny/HIC/dmel_2Mb_p2_R1.fastq.gz' + read2: 'https://raw.githubusercontent.com/NBISweden/Earth-Biogenome-Project-pilot/main/tests/data/tiny/HIC/dmel_2Mb_p2_R2.fastq.gz' +hifi: + - reads: 'https://raw.githubusercontent.com/NBISweden/Earth-Biogenome-Project-pilot/main/tests/data/tiny/PB_HIFI/dmel_2Mb.fasta.gz' +# rnaseq: +# - /path/to/reads +# isoseq: +# - /path/to/reads diff --git a/tests/main.nf.test b/tests/main.nf.test new file mode 100644 index 00000000..2472a541 --- /dev/null +++ b/tests/main.nf.test @@ -0,0 +1,21 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - Tiny" + script "main.nf" + profile "+test" + + test("Tiny dataset") { + + when { + params { + // Params are supplied by -profile test + } + } + + then { + assert workflow.success + } + + } + +} diff --git a/tests/modules/blobtoolkit/test_blobtoolkit.nf b/tests/modules/blobtoolkit/test_blobtoolkit.nf deleted file mode 100644 index ecf164b6..00000000 --- a/tests/modules/blobtoolkit/test_blobtoolkit.nf +++ /dev/null @@ -1,24 +0,0 @@ -#! /usr/bin/env nextflow - -nextflow.enable.dsl = 2 - -include { BLOBTOOLKIT } from '../../../../modules/local/blobtoolkit/blobtoolkit' - -workflow TEST_BLOBTOOLKIT { - - input = [ - [ id: 'test' ], - [ - file( params.test_data['homo_sapiens']['pacbio']['hifi'], checkIfExists: true ), - ], - file( params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true ) - ] - BLOBTOOLKIT( - input, - 'eukaryota_odb10', // busco lineages - params.busco_lineages_path, - params.uniprot_path - params.ncbi_nt_path - params.ncbi_taxonomy_path - ) -} \ No newline at end of file diff --git a/tests/modules/inspector/nextflow.config b/tests/modules/inspector/nextflow.config deleted file mode 100644 index 7dc6ef83..00000000 --- a/tests/modules/inspector/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: 'INSPECTOR' { - ext.args = '-d hifi' - } -} diff --git a/tests/modules/inspector/test_inspector.nf b/tests/modules/inspector/test_inspector.nf deleted file mode 100644 index dfd1af5b..00000000 --- a/tests/modules/inspector/test_inspector.nf +++ /dev/null @@ -1,18 +0,0 @@ -#! /usr/bin/env nextflow - -nextflow.enable.dsl = 2 - -include { INSPECTOR } from '../../../modules/inspector/inspector' - -workflow TEST_INSPECTOR { - - input = [ - [ id: 'test' ], - [ - file( params.test_data['homo_sapiens']['pacbio']['hifi'], checkIfExists: true ) - ], - file( params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true ) - ] - // Test: No reference file - INSPECTOR( input, [] ) -} diff --git a/tests/modules/kat/kat_comp/test_kat_comp.nf b/tests/modules/kat/kat_comp/test_kat_comp.nf deleted file mode 100644 index f005ecf5..00000000 --- a/tests/modules/kat/kat_comp/test_kat_comp.nf +++ /dev/null @@ -1,18 +0,0 @@ -#! /usr/bin/env nextflow - -nextflow.enable.dsl = 2 - -include { KAT_COMP } from '../../../../modules/kat/kat_comp/kat_comp' - -workflow TEST_KAT_COMP { - - input = [ - [ id: 'test' ], - [ - file( params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true ), - file( params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true ) - ], - file( params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true ) - ] - KAT_COMP( input ) -} \ No newline at end of file diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 00000000..c19b1ad0 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,5 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/