From 86cc03f4d138cd690cce1779ba96d5c14c0cbff3 Mon Sep 17 00:00:00 2001 From: Mitchell Robert Vollger Date: Mon, 23 Dec 2024 10:18:04 -0800 Subject: [PATCH] Working to the next release (#30) This is a major refactor of the FIRE pipeline and the naming of its outputs and will represent the v0.1.0 of the software. There are no changes to the underlying methods or ideas, but I have made significant efforts to speed up the software and reduce dependencies while increasing reliability. --- .github/workflows/main.yml | 57 +- .github/workflows/release-please.yml | 17 - .gitignore | 7 +- CHANGELOG.md | 3 + INSTALL.md | 11 +- README.md | 45 +- _config.yml | 20 - config/README.md | 5 + fire | 47 - pixi.lock | 5866 +++++++++++++++++ pixi.toml | 68 + profiles/slurm-executor/config.yaml | 1 + workflow/Snakefile | 111 +- workflow/envs/env.yaml | 7 +- workflow/envs/python.yaml | 8 +- workflow/envs/runner.yaml | 12 +- workflow/profiles/default/config.yaml | 5 +- workflow/rules/apply-model.smk | 253 +- workflow/rules/common.smk | 40 +- workflow/rules/coverages.smk | 58 +- workflow/rules/decorated-reads.smk | 65 +- .../rules/{FDR-peaks.smk => fire-peaks.smk} | 210 +- workflow/rules/levio.smk | 102 + workflow/rules/{peak-stats.smk => stats.smk} | 36 +- workflow/rules/track-hub.smk | 83 +- workflow/scripts/cov.py | 2 - workflow/scripts/decorated-bed12.py | 163 - workflow/scripts/fdr-table.py | 312 + workflow/scripts/fire-null-distribution.py | 565 -- workflow/scripts/merge_fire_peaks.py | 9 +- workflow/scripts/percent-in-clusters.sh | 8 +- workflow/scripts/trackhub.py | 199 +- workflow/templates/fire-description.html | 98 + 33 files changed, 6955 insertions(+), 1538 deletions(-) delete mode 100644 .github/workflows/release-please.yml create mode 100644 CHANGELOG.md delete mode 100644 _config.yml delete mode 100755 fire create mode 100644 pixi.lock create mode 100644 pixi.toml rename workflow/rules/{FDR-peaks.smk => fire-peaks.smk} (62%) create mode 100644 workflow/rules/levio.smk rename workflow/rules/{peak-stats.smk => stats.smk} (66%) delete mode 100755 workflow/scripts/decorated-bed12.py create mode 100644 workflow/scripts/fdr-table.py delete mode 100755 workflow/scripts/fire-null-distribution.py create mode 100644 workflow/templates/fire-description.html diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8876a3676c..8af20c95b0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,54 +1,19 @@ -name: Tests +name: CI on: push: - branches: [ main ] + branches: [main] pull_request: - branches: [ main ] - + branches: [main] jobs: - Formatting: + # pixi test + Test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Formatting - uses: github/super-linter@v4 - env: - VALIDATE_ALL_CODEBASE: false - DEFAULT_BRANCH: main - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - VALIDATE_SNAKEMAKE_SNAKEFMT: true - - Linting: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Lint workflow - uses: snakemake/snakemake-github-action@v1.24.0 - with: - directory: . - snakefile: workflow/Snakefile - args: "--lint" - - Testing: - runs-on: ubuntu-latest - needs: - - Linting - - Formatting - steps: - - uses: actions/checkout@v2 - - - name: Test workflow - uses: snakemake/snakemake-github-action@v1.24.0 - with: - directory: .test - snakefile: workflow/Snakefile - args: "--use-conda --show-failed-logs --cores 3 --conda-cleanup-pkgs cache --all-temp --configfile config.yml" - -# - name: Test report -# uses: snakemake/snakemake-github-action@v1.24.0 -# with: -# directory: .test -# snakefile: workflow/Snakefile -# args: "--report report.zip" + - uses: actions/checkout@v4 + - uses: prefix-dev/setup-pixi@v0.8.1 + with: + pixi-version: v0.37.0 + cache: true + - run: pixi run test diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml deleted file mode 100644 index 19cfd041c7..0000000000 --- a/.github/workflows/release-please.yml +++ /dev/null @@ -1,17 +0,0 @@ -on: - push: - branches: - - main - -name: release-please - -jobs: - release-please: - runs-on: ubuntu-latest - steps: - - - uses: GoogleCloudPlatform/release-please-action@v2 - id: release - with: - release-type: go # just keep a changelog, no version anywhere outside of git tags - package-name: diff --git a/.gitignore b/.gitignore index c9000ba079..78e4c88367 100644 --- a/.gitignore +++ b/.gitignore @@ -142,7 +142,7 @@ figures/ old/ phasing/ run_scripts/ -trackHub/ +trackHub-{v}/ trackHub_altius/ XCI/ altius/ @@ -158,7 +158,6 @@ config/** .vscode/* .DS_Store - # stats Rdata/ Rplots.pdf @@ -177,4 +176,6 @@ misc/ new-agg-test/ scATAC/ test/ - +test-data/ +bigtools-test/ +fire-test-data/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..303530a57d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# v0.1.0 + +First major release of the FIRE pipeline. This release includes a refactor to reduce the computation by increased use of ft, changes to the output file names to include the fire version among other things, and finally a new launching method for the pipeline that uses pixi. Results are very similar to v0.0.7 of the pipeline; however, there are minor differences in the peak calls and the output names. diff --git a/INSTALL.md b/INSTALL.md index 1016ad6a0d..540e90a7a0 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,18 +1,17 @@ # Install -You will need **snakemake** which you can install using conda/mamba, e.g.: -``` -mamba create -c conda-forge -c bioconda -n snakemake 'snakemake>=8.4' -``` +If you wish to distribute jobs across a cluster you will need to install the appropriate [snakemake executor plugin](https://snakemake.github.io/snakemake-plugin-catalog/). For example, to use SLURM you can install the `snakemake-executor-slurm` plugin using pip: -Finally, if you wish to distribute jobs across a cluster you will need to install the appropriate [snakemake executor plugin](https://snakemake.github.io/snakemake-plugin-catalog/). For example, to use SLURM you can install the `snakemake-executor-slurm` plugin using pip: -``` +``` +pixi shell pip install snakemake-executor-plugin-slurm ``` We recommend adding a snakemake conda prefix to your `bashrc`, e.g. in the Stergachis lab add: + ```bash export SNAKEMAKE_CONDA_PREFIX=/mmfs1/gscratch/stergachislab/snakemake-conda-envs export APPTAINER_CACHEDIR=/mmfs1/gscratch/stergachislab/snakemake-conda-envs/apptainer-cache ``` + Then snakemake installs all the additional requirements as conda envs in that directory. diff --git a/README.md b/README.md index 8ff9af3b50..234d1166d1 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,10 @@ # 🔥 **FIRE**: Fiber-seq Inferred Regulatory Elements [![DOI](https://zenodo.org/badge/561430995.svg)](https://zenodo.org/doi/10.5281/zenodo.10023811) +[![Actions Status](https://github.com/fiberseq/FIRE/workflows/CI/badge.svg)](https://github.com/mrvollger/FIRE/actions) -A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules. For a more detailed description and methods see the [docs](/docs/README.md), or [watch](https://youtu.be/RiZrMltAiWM?si=sSo64goaNQxgyfcc) my lab meeting on FIRE. +A Snakemake workflow for calling Fiber-seq Inferred Regulatory Elements (FIREs) on single molecules. -## Install +## Installation and Usage -Please install `snakemake` and all the UCSC Kent utilities. For detailed instructions see the [installation README](/INSTALL.md). - -## Configuring - -See the [configuration README](/config/README.md), the example [configuration file](/config/config.yaml), and the example [manifest file](/config/config.tbl) for configuration options. - - -## Run - -We have a run script that executes the FIRE snakemake called `fire`, and any extra parameters are passed directly to snakemake. For example: - -```bash -./fire --configfile config/config.yaml -``` - -If you want to do a dry run: - -```bash -./fire --configfile config/config.yaml -n -``` - -If you want to execute across a cluster (modify `profiles/slurm-executor` as needed for distributed execution): - -```bash -./fire --configfile config/config.yaml --profile profiles/slurm-executor -``` - -You can also run snakemake directly, e.g.: - -```bash -snakemake \ - --configfile config/config.yaml \ - --profile profiles/slurm-executor \ - --local-cores 8 -k -``` - -## Test data - -You can find input data to test against at [this url](https://s3-us-west-2.amazonaws.com/stergachis-public1/index.html?prefix=FIRE/test-data/). +See the [docs](https://fiberseq.github.io/fire/run.html) for detailed installation and usage instructions. diff --git a/_config.yml b/_config.yml deleted file mode 100644 index ac3cdded7d..0000000000 --- a/_config.yml +++ /dev/null @@ -1,20 +0,0 @@ -#theme: jekyll-theme-minimal -#theme: minima -remote_theme: jekyll/minima -#logo: /assets/img/fiber_tools_grey.png - -minima: - skin: dark - -defaults: - - scope: - path: "README.md" - values: - permalink: "index.html" - -exclude: - - target - - models - - dists - - tmp.* - - temp diff --git a/config/README.md b/config/README.md index 0d85d6cf14..2dda19989c 100644 --- a/config/README.md +++ b/config/README.md @@ -17,6 +17,11 @@ manifest: config/config.tbl ## Optional input options +Specify that the input BAM file is an ONT Fiber-seq file. Default is `False`. +``` +ont: True +``` + Max number of threads to use in very distributed steps: ``` max_t: 4 diff --git a/fire b/fire deleted file mode 100755 index e5a9611669..0000000000 --- a/fire +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -# check for conda location -if [[ -z "${SNAKEMAKE_CONDA_PREFIX}" ]]; then - printf "Warning:\n\tSNAKEMAKE_CONDA_PREFIX is not set. Please set this env variable to the location of your group's shared snakemke conda enviroments.\n\tSee --conda-prefix at https://snakemake.readthedocs.io/en/stable/executing/cli.html#conda for more information.\n\n" 1>&2 -fi - -set -euo pipefail -SRC_DIR=$( - cd "$(dirname "${BASH_SOURCE[0]}")" - pwd -P -) - -ARGS=$(echo "$@") - -# check for required arguments -has_config=false -while test $# -gt 0; do - case "$1" in - --configfile) - has_config=true - ;; - esac - shift -done - -if [[ "${has_config}" == false ]]; then - printf "Error:\n\t--configfile argument required.\n" - exit 1 -fi - -# check for executables -for x in snakemake; do - if [[ ! $(type -P "${x}") ]]; then - echo "Error: ${x} not found in PATH, but it is required for FIRE." - exit 1 - fi -done - -# n cpus -CPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null) - -#echo "Arguments passed to snakemake: ${ARGS}" -snakemake \ - -s "${SRC_DIR}/workflow/Snakefile" \ - --local-cores "${CPUS}" \ - ${ARGS} diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000000..d798a10b36 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,5866 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/bioconda/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.31-hd5d0ea3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.7.4-hae4d56a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.29-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.19-h2bff981_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.3-h6c1f5b1_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.10-hf2c527e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.20-hc9e6898_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.7-hfbb250a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.6.7-h7f2cdf9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.19-h2bff981_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.20-h2bff981_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awscli-2.22.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awscrt-0.22.0-py312hce51685_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cbc-2.10.12-h8b142ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cgl-0.60.7-h516709c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-clp-1.17.8-h1ee7a9c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-osi-0.108.10-haf5fa05_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coin-or-utils-2.11.11-hee58242_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/coincbc-2.10.12-1_metapackage.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-24.9.2-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-inject-1.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.4.0-pyh7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.1-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/datrie-0.8.2-py312h66e93f0_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.17.1-py312h7900ff3_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/immutables-0.21-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.4-hfca40fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py312hd9e9ff6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.29-ha6fb4c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-hc051c1a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h4ab18f5_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/logmuse-0.2.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.2.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.3-py312h58c1407_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pephubclient-0.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/peppy-0.40.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pulp-2.8.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py312h98912ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.23.4-py312h12e396e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.5.post0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.5.post0-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.21.0-py312h12e396e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.17-py312h66e93f0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.7.4-py312h2156523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.5-h3931f03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/slack-sdk-3.33.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slack_sdk-3.33.3-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-0.11.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-jobstep-0.2.1-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toposort-1.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yte-1.5.4-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.31-hc566b99_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.7.4-h40772b6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.29-ha44c9a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.19-h40772b6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.4.3-h453e538_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.8.10-h592d179_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.14.20-h99e8e40_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.10.7-h86759dc_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.6.7-h24045d9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.19-h40772b6_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.20-h40772b6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/awscli-2.22.0-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/awscrt-0.22.0-py312hd00079b_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312h5861a67_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.3-hf13058a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py312hf857d28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cbc-2.10.12-h26cd4a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cgl-0.60.7-ha3c4b8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-clp-1.17.8-hf0ee74e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-osi-0.108.10-h13a241d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coin-or-utils-2.11.11-h86ddba1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/coincbc-2.10.12-1_metapackage.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/conda-24.9.2-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-inject-1.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.4.0-pyh7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-43.0.1-py312h840e0bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/datrie-0.8.2-py312hb553811_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/docutils-0.17.1-py312hb401068_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/fmt-10.2.1-h7728843_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.6-py312h3d0f464_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd81877a_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/immutables-0.21-py312hb553811_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py312hb401068_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.7.4-h20e244c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-25_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-25_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.8.0-hf9fcc65_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.3-hf95d169_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.4-h240833e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-25_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapacke-3.9.0-25_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmamba-1.5.8-ha449628_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libmambapy-1.5.8-py312h67f5953_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.28-openmp_hbf64a52_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsolv-0.7.29-h4f92f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-h3e169fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h87427d6_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.3-hf78d878_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/logmuse-0.2.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lzo-2.10-h10d778d_1001.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py312hbe3f5e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/menuinst-2.2.0-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.3-py312hfc93d17_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.4.0-hd471939_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.3-py312h98e817e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pephubclient-0.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/peppy-0.40.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-6.1.0-py312h3d0f464_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pulp-2.8.0-py312hb401068_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pycosat-0.6.6-py312h104f124_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pydantic-core-2.23.4-py312h669792a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproc-14.2.5.post0-h6e16a3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/reproc-cpp-14.2.5.post0-h240833e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py312h0d0de52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.17.17-py312h3d0f464_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h3d0f464_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.7.4-py312h07459cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/slack-sdk-3.33.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/slack_sdk-3.33.3-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-0.11.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-jobstep-0.2.1-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toposort-1.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/veracitools-0.1.3-py_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-1.16.0-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-cpp-0.8.0-he965462_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yte-1.5.4-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h7122b0e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + 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 + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: amply + version: 0.1.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.6-pyhd8ed1ab_0.conda + sha256: b3b91fb90123d572cf7524ba5cd112d5d952abbdfcc77048cf4c926a5267b512 + md5: a45a9cc65a438f465845ebff49c6fbf9 + depends: + - docutils >=0.3 + - pyparsing + - python >=3.4 + license: EPL-2.0 + purls: + - pkg:pypi/amply?source=hash-mapping + size: 21871 + timestamp: 1687675666679 +- kind: conda + name: annotated-types + version: 0.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda + sha256: 668f0825b6c18e4012ca24a0070562b6ec801ebc7008228a428eb52b4038873f + md5: 7e9f4612544c8edbfd6afad17f1bd045 + depends: + - python >=3.7 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/annotated-types?source=hash-mapping + size: 18235 + timestamp: 1716290348421 +- kind: conda + name: appdirs + version: 1.4.4 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2 + sha256: ae9fb8f68281f84482f2c234379aa12405a9e365151d43af20b3ae1f17312111 + md5: 5f095bc6454094e96f146491fd03633b + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/appdirs?source=hash-mapping + size: 12840 + timestamp: 1603108499239 +- kind: conda + name: archspec + version: 0.2.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda + sha256: cef4062ea91f07a961a808801d6b34a163632150037f4bd28232310ff0301cd7 + md5: 192278292e20704f663b9c766909d67b + depends: + - python >=3.6 + license: MIT OR Apache-2.0 + purls: + - pkg:pypi/archspec?source=hash-mapping + size: 48780 + timestamp: 1708969700251 +- kind: conda + name: argparse-dataclass + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/argparse-dataclass-2.0.0-pyhd8ed1ab_0.conda + sha256: 67e8c1fde7cd025bc7b3190b83bfe967099672a2bcff8e6864f52abfcc25769b + md5: be47a0ee841e940a9a8eec03c2f776a3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argparse-dataclass?source=hash-mapping + size: 12203 + timestamp: 1691002812997 +- kind: conda + name: attrs + version: 24.2.0 + build: pyh71513ae_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 + md5: 6732fa52eb8e66e5afeb32db8701a791 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/attrs?source=hash-mapping + size: 56048 + timestamp: 1722977241383 +- kind: conda + name: aws-c-auth + version: 0.7.31 + build: hc566b99_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.31-hc566b99_3.conda + sha256: f6f981900fca0af93753e464c2e73ef4629f5f98d6f1b126befa186575e21799 + md5: af34a904eecd797f41b183c329623ec2 + depends: + - __osx >=10.13 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-c-sdkutils >=0.1.19,<0.1.20.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 94612 + timestamp: 1729533030938 +- kind: conda + name: aws-c-auth + version: 0.7.31 + build: hd5d0ea3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.31-hd5d0ea3_3.conda + sha256: 7ed62cde8328b46a6abce032fe485ac895b3e9708e104894d1a009df4464ad6a + md5: bafc68489a651309865dde375cf3cbf6 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-c-sdkutils >=0.1.19,<0.1.20.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 107528 + timestamp: 1729532890379 +- kind: conda + name: aws-c-cal + version: 0.7.4 + build: h40772b6_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.7.4-h40772b6_2.conda + sha256: 4770ffec772090bbddc354c24bc2e6425d3071b1e09fa589606689fabcaff25f + md5: a5c1b1cb5a03d4a5b67e98df8da31aa1 + depends: + - __osx >=10.13 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 39297 + timestamp: 1728755588333 +- kind: conda + name: aws-c-cal + version: 0.7.4 + build: hae4d56a_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.7.4-hae4d56a_2.conda + sha256: 4bfed63898a1697364ce9621e1fc09c98f143777b0ca60655eb812efa5bf246d + md5: cdc628e4ffb4ffcd476e3847267e1689 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - libgcc >=13 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 47181 + timestamp: 1728755555430 +- kind: conda + name: aws-c-common + version: 0.9.29 + build: ha44c9a9_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.29-ha44c9a9_0.conda + sha256: 2a1f37f67fabac89ef9f4f9e105c33993cab22edb94801d03555a5ab44b9c557 + md5: 51d626987f9327896b2e3ac2d36f2163 + depends: + - __osx >=10.13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 226610 + timestamp: 1728706789415 +- kind: conda + name: aws-c-common + version: 0.9.29 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.29-hb9d3cd8_0.conda + sha256: b3b50f518e9afad383f6851bf7000cf8b343d7d3ca71558df233ee7b4bfc2919 + md5: acc51b49fd7467c8dfe4343001b812b4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 237231 + timestamp: 1728706773555 +- kind: conda + name: aws-c-compression + version: 0.2.19 + build: h2bff981_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.19-h2bff981_2.conda + sha256: 908a416ff3f62b09bed436e1f77418f54115412244734d3960b11d586dd0749f + md5: 87a059d4d2ab89409496416119dd7152 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 18983 + timestamp: 1728750679322 +- kind: conda + name: aws-c-compression + version: 0.2.19 + build: h40772b6_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.19-h40772b6_2.conda + sha256: e4e7c8ebc1761f263927af2eedddbba0b5698e05a073100b953b0d0d33cc969b + md5: 083875412346dcc097c6b1ca4aaa4abf + depends: + - __osx >=10.13 + - aws-c-common >=0.9.29,<0.9.30.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 18004 + timestamp: 1728750733091 +- kind: conda + name: aws-c-event-stream + version: 0.4.3 + build: h453e538_5 + build_number: 5 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.4.3-h453e538_5.conda + sha256: c063159d6af211df4f774d4f65c206a8d12488feb96fb097f6a73c6a9193723f + md5: 9c3a1df30fb65e0e8e04ff24ba46d63b + depends: + - __osx >=10.13 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - libcxx >=17 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 46843 + timestamp: 1729527584644 +- kind: conda + name: aws-c-event-stream + version: 0.4.3 + build: h6c1f5b1_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.3-h6c1f5b1_5.conda + sha256: 8d2e539e0d85910cad5a76a926733640f674831eda6ca1c7189ef3007a776694 + md5: a7687d8db2bffc90a3ff09bca039fef3 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 53733 + timestamp: 1729527387622 +- kind: conda + name: aws-c-http + version: 0.8.10 + build: h592d179_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.8.10-h592d179_3.conda + sha256: 0ff999f7aad671d0c1992cb7dc8314f792e3022664d752e8d720fe9a4703c16e + md5: 7d1b1a2784fe1f61ca10c79c4fc4ed4c + depends: + - __osx >=10.13 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-compression >=0.2.19,<0.2.20.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164061 + timestamp: 1729517894484 +- kind: conda + name: aws-c-http + version: 0.8.10 + build: hf2c527e_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.10-hf2c527e_3.conda + sha256: 864d8dcefc774bbcf95ce55bc5c15a650a469c23b826d93b086d61c020b4759d + md5: 85f604aa878f86f15122e129338e4d85 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-compression >=0.2.19,<0.2.20.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 197277 + timestamp: 1729517838846 +- kind: conda + name: aws-c-io + version: 0.14.20 + build: h99e8e40_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.14.20-h99e8e40_0.conda + sha256: 4aa7165dbf4e0d6d4f866c6924ebbcb94522b952fe66e152bd1e19aefd3e58dc + md5: 64cef8703c997b27425801b5a96f3f7c + depends: + - __osx >=10.13 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 139031 + timestamp: 1729105799829 +- kind: conda + name: aws-c-io + version: 0.14.20 + build: hc9e6898_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.20-hc9e6898_0.conda + sha256: 51ade965ea729146026b5b3237c7f57464608dd1cf723dc4d1e393949d00eeef + md5: 005953b39123ac13a959329010a6b1e5 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - libgcc >=13 + - s2n >=1.5.5,<1.5.6.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 158898 + timestamp: 1729105763896 +- kind: conda + name: aws-c-mqtt + version: 0.10.7 + build: h86759dc_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.10.7-h86759dc_3.conda + sha256: fa8363c23ff61eb438393baf23357cf4ca9b05ae907cba295e1b75883e8744ad + md5: 4d53c7c1db218db67b22f5011e83c0f6 + depends: + - __osx >=10.13 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164379 + timestamp: 1729534328438 +- kind: conda + name: aws-c-mqtt + version: 0.10.7 + build: hfbb250a_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.7-hfbb250a_3.conda + sha256: ed69c3cb9001a71868bd64615cd5b13e313f337e9d81685d2c90b4f5b004f2e1 + md5: f9bceff531a0b88a5c45083ac357f6f2 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194643 + timestamp: 1729534125666 +- kind: conda + name: aws-c-s3 + version: 0.6.7 + build: h24045d9_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.6.7-h24045d9_1.conda + sha256: 38b126e0671a6db4c1ea5a84e6734bebf7cafc279ce8731a185f9c1ecd085737 + md5: d833468ff5c331bff5870896f376e6d7 + depends: + - __osx >=10.13 + - aws-c-auth >=0.7.31,<0.7.32.0a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 97737 + timestamp: 1729544344228 +- kind: conda + name: aws-c-s3 + version: 0.6.7 + build: h7f2cdf9_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.6.7-h7f2cdf9_1.conda + sha256: 3751a4b9a513319cc75ff692abd11c7466c71c9738df054c6beefb678ef6eb8e + md5: 9a58eac43e65ed1452787ae1ff1ecd6f + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.7.31,<0.7.32.0a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 112840 + timestamp: 1729544207376 +- kind: conda + name: aws-c-sdkutils + version: 0.1.19 + build: h2bff981_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.19-h2bff981_4.conda + sha256: ef65ca9eb9f32ada6fb1b47759374e7ef4f85db002f2265ebc8fd61718284cbc + md5: 5a8afd37e2dfe464d68e63d1c38b08c5 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 55957 + timestamp: 1728755888042 +- kind: conda + name: aws-c-sdkutils + version: 0.1.19 + build: h40772b6_4 + build_number: 4 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.19-h40772b6_4.conda + sha256: a74a1bdc601ab112d849b414908aa01451f8d0de27c0b233155fea07d69e0551 + md5: 8d7e97d7c9829f54acbf018a88f2f20e + depends: + - __osx >=10.13 + - aws-c-common >=0.9.29,<0.9.30.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 50711 + timestamp: 1728755916895 +- kind: conda + name: aws-checksums + version: 0.1.20 + build: h2bff981_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.20-h2bff981_1.conda + sha256: e1793f2e52fe04ef3a6b2069abda7960d061c6f7af1f0d5f616d43e7a7c40e3c + md5: 8b424cf6b3cfc5cffe98bf4d16c032fb + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 72862 + timestamp: 1728750748391 +- kind: conda + name: aws-checksums + version: 0.1.20 + build: h40772b6_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.20-h40772b6_1.conda + sha256: a32f81d6349580b38a917f1643677650b931fc67fab9c9b123e47c3de4844d21 + md5: a40738142e8dfc05b328ff240ad56c02 + depends: + - __osx >=10.13 + - aws-c-common >=0.9.29,<0.9.30.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 70907 + timestamp: 1728750777703 +- kind: conda + name: awscli + version: 2.22.0 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/awscli-2.22.0-py312h7900ff3_0.conda + sha256: 0cec7a55a0a863edab1c9a7f223455792c6d3ed76925a3b913dab86f720fb9a9 + md5: beb2565c88d4fdcda69e3af78d9d0152 + depends: + - awscrt >=0.19.18,<=0.22.0 + - colorama >=0.2.5,<0.4.7 + - cryptography >=40.0.0,<43.0.2 + - distro >=1.5.0,<1.9.0 + - docutils >=0.10,<0.20 + - jmespath >=0.7.1,<1.1.0 + - prompt_toolkit >=3.0.24,<3.0.39 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.1,<=2.9.0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml >=0.15.0,<=0.17.21 + - ruamel.yaml.clib >=0.2.0,<=0.2.8 + - urllib3 >=1.25.4,<1.27 + license: Apache-2.0 + purls: + - pkg:pypi/awscli?source=hash-mapping + size: 12747683 + timestamp: 1731978970603 +- kind: conda + name: awscli + version: 2.22.0 + build: py312hb401068_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/awscli-2.22.0-py312hb401068_0.conda + sha256: f6395867718675ce875f2e00ab9162d7631a91a6ab77a13df689c001f85b95ef + md5: da10cc445ab8cb324039d2876e5c9757 + depends: + - awscrt >=0.19.18,<=0.22.0 + - colorama >=0.2.5,<0.4.7 + - cryptography >=40.0.0,<43.0.2 + - distro >=1.5.0,<1.9.0 + - docutils >=0.10,<0.20 + - jmespath >=0.7.1,<1.1.0 + - prompt_toolkit >=3.0.24,<3.0.39 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.1,<=2.9.0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml >=0.15.0,<=0.17.21 + - ruamel.yaml.clib >=0.2.0,<=0.2.8 + - urllib3 >=1.25.4,<1.27 + license: Apache-2.0 + purls: + - pkg:pypi/awscli?source=hash-mapping + size: 12762490 + timestamp: 1731979188542 +- kind: conda + name: awscrt + version: 0.22.0 + build: py312hce51685_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/awscrt-0.22.0-py312hce51685_6.conda + sha256: b410b71cd54097a18e75996b1164c47d8fb37ec26667491b0f914957b9f8e6b6 + md5: 14c0cce3199fcc331077cd9ca304e585 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.7.31,<0.7.32.0a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-event-stream >=0.4.3,<0.4.4.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-c-mqtt >=0.10.7,<0.10.8.0a0 + - aws-c-s3 >=0.6.7,<0.6.8.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - s2n >=1.5.5,<1.5.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/awscrt?source=hash-mapping + size: 194770 + timestamp: 1729557417666 +- kind: conda + name: awscrt + version: 0.22.0 + build: py312hd00079b_6 + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/awscrt-0.22.0-py312hd00079b_6.conda + sha256: 03790c92d2872b8e1ee3632472c0e5e5f53e00b819fe5da4d9d26b8a0ad0fba8 + md5: 3c700e3395a8066f506f9331407fdf89 + depends: + - __osx >=10.13 + - aws-c-auth >=0.7.31,<0.7.32.0a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.29,<0.9.30.0a0 + - aws-c-event-stream >=0.4.3,<0.4.4.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.20,<0.14.21.0a0 + - aws-c-mqtt >=0.10.7,<0.10.8.0a0 + - aws-c-s3 >=0.6.7,<0.6.8.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/awscrt?source=hash-mapping + size: 182391 + timestamp: 1729557604791 +- kind: conda + name: black + version: 24.10.0 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda + sha256: 2b4344d18328b3e8fd9b5356f4ee15556779766db8cb21ecf2ff818809773df6 + md5: 2daba153b913b1b901cf61440ad5e019 + depends: + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9 + - platformdirs >=2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/black?source=hash-mapping + size: 390571 + timestamp: 1728503839694 +- kind: conda + name: black + version: 24.10.0 + build: py312hb401068_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda + sha256: a1397d32f6d40ff19107bab8c1570f3934ad91a601d1d973b129eabe08b943e6 + md5: e832f4c2afb84e85718008b600944bc0 + depends: + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9 + - platformdirs >=2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/black?source=hash-mapping + size: 393514 + timestamp: 1728503944080 +- kind: conda + name: boltons + version: 24.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda + sha256: e44d07932306392372411ab1261670a552f96077f925af00c1559a18a73a1bdc + md5: 61de176bd62041f9cd5bd4fcd09eb0ff + depends: + - python ==2.7.*|>=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/boltons?source=hash-mapping + 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 + purls: + - pkg:pypi/brotli?source=hash-mapping + 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 + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 363178 + timestamp: 1725267893889 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: hfdf4475_7 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5 + md5: 7ed4301d437b59045be7e051a0308211 + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 134188 + timestamp: 1720974491916 +- kind: conda + name: c-ares + version: 1.34.3 + build: heb4867d_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda + sha256: 1015d731c05ef7de298834833d680b08dea58980b907f644345bd457f9498c99 + md5: 09a6c610d002e54e18353c06ef61a253 + depends: + - __glibc >=2.28,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 205575 + timestamp: 1731181837907 +- kind: conda + name: c-ares + version: 1.34.3 + build: hf13058a_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.3-hf13058a_0.conda + sha256: e1bc2520ba9bfa55cd487efabd6bfaa49ccd944847895472133ba919810c9978 + md5: c36355bc08d4623c210b00f9935ee632 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 183798 + timestamp: 1731181957603 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h8857fd0_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda + sha256: 593f302d0f44c2c771e1614ee6d56fffdc7d616e6f187669c8b0e34ffce3e1ae + md5: b7e5424e7f06547a903d28e4651dbb21 + license: ISC + purls: [] + 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 + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + 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 + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hf857d28_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py312hf857d28_0.conda + sha256: 94fe49aed25d84997e2630d6e776a75ee2a85bd64f258702c57faa4fe2986902 + md5: 5bbc69b8194fedc2792e451026cac34f + depends: + - __osx >=10.13 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 282425 + timestamp: 1725560725144 +- kind: conda + name: charset-normalizer + version: 3.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + sha256: 1873ac45ea61f95750cb0b4e5e675d1c5b3def937e80c7eebb19297f76810be8 + md5: a374efa97290b8799046df7c5ca17164 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=hash-mapping + size: 47314 + timestamp: 1728479405343 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: coin-or-cbc + version: 2.10.12 + build: h26cd4a2_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cbc-2.10.12-h26cd4a2_1.conda + sha256: a88e63a9d533de9fb2e2acaa92455bbc2db8df915c76c391c022e008ee752728 + md5: f95fff24aa364fa01dde52d2ee1569e0 + depends: + - __osx >=10.13 + - coin-or-cgl >=0.60,<0.61.0a0 + - coin-or-clp >=1.17,<1.18.0a0 + - coin-or-osi >=0.108,<0.109.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libcxx >=17 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 893611 + timestamp: 1725355590517 +- kind: conda + name: coin-or-cbc + version: 2.10.12 + build: h8b142ea_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cbc-2.10.12-h8b142ea_1.conda + sha256: d06d5911c0153aa4b1549ff6eda413409c40f6ba4f68fdb53791ec792d827f16 + md5: 1d7f5461c42aba35340cd31d0f72d85f + depends: + - __glibc >=2.17,<3.0.a0 + - coin-or-cgl >=0.60,<0.61.0a0 + - coin-or-clp >=1.17,<1.18.0a0 + - coin-or-osi >=0.108,<0.109.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 950254 + timestamp: 1725355568993 +- kind: conda + name: coin-or-cgl + version: 0.60.7 + build: h516709c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-cgl-0.60.7-h516709c_0.conda + sha256: 9595363f7040130d93251a46cdc44cd9b9f4ff1ec71382299f789504f722e157 + md5: 9170a2b48868d5a340d7076979a775f8 + depends: + - bzip2 >=1.0.8,<2.0a0 + - coin-or-clp >=1.17,<1.18.0a0 + - coin-or-osi >=0.108,<0.109.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.3,<7.0a0 + - readline >=8.2,<9.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 551356 + timestamp: 1681308775645 +- kind: conda + name: coin-or-cgl + version: 0.60.7 + build: ha3c4b8c_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-cgl-0.60.7-ha3c4b8c_0.conda + sha256: 1c8eb9b56053d63294c723c711c136b371daf463fb96c5ea5e33e09ba7ede6b8 + md5: 5a1f37d769f6f5585ca230f087e0884c + depends: + - bzip2 >=1.0.8,<2.0a0 + - coin-or-clp >=1.17,<1.18.0a0 + - coin-or-osi >=0.108,<0.109.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=14.0.6 + - liblapack >=3.9.0,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.3,<7.0a0 + - readline >=8.2,<9.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 543162 + timestamp: 1681309194623 +- kind: conda + name: coin-or-clp + version: 1.17.8 + build: h1ee7a9c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-clp-1.17.8-h1ee7a9c_0.conda + sha256: feb7c44bc2deda6ade8c273ce60b93210c8df106a05531f0ab27a3f36e626ae5 + md5: a2d4935dc3955aa906c17136039db06c + depends: + - bzip2 >=1.0.8,<2.0a0 + - coin-or-osi >=0.108,<0.109.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - libgfortran-ng + - libgfortran5 >=11.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.3,<7.0a0 + - readline >=8.2,<9.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 1173622 + timestamp: 1681308956927 +- kind: conda + name: coin-or-clp + version: 1.17.8 + build: hf0ee74e_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-clp-1.17.8-hf0ee74e_0.conda + sha256: 868acbe920008bec915fdb8c968d792c6ee487a22f9d4310a50c24b7b51c7529 + md5: 2206807e0051f5260174864aae657fc0 + depends: + - bzip2 >=1.0.8,<2.0a0 + - coin-or-osi >=0.108,<0.109.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=14.0.6 + - libgfortran 5.* + - libgfortran5 >=11.3.0 + - libgfortran5 >=12.2.0 + - liblapack >=3.9.0,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.3,<7.0a0 + - readline >=8.2,<9.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 1123536 + timestamp: 1681309516683 +- kind: conda + name: coin-or-osi + version: 0.108.10 + build: h13a241d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-osi-0.108.10-h13a241d_0.conda + sha256: 96852eacaca4fff8997f663cf588cc96bed26a3ed9fb8ad851bb8178440ac0ff + md5: aa0d886ca761f3a5fe2c00699dec30db + depends: + - bzip2 >=1.0.8,<2.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=16 + - liblapack >=3.9.0,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 341870 + timestamp: 1713104465374 +- kind: conda + name: coin-or-osi + version: 0.108.10 + build: haf5fa05_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-osi-0.108.10-haf5fa05_0.conda + sha256: 0cba2f5d91bca83a3de727a6180842dc72f3930041d5399671b6316d07edd311 + md5: 31465c0cbac3c466b9915563147e21bb + depends: + - bzip2 >=1.0.8,<2.0a0 + - coin-or-utils >=2.11,<2.12.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 372978 + timestamp: 1713104263049 +- kind: conda + name: coin-or-utils + version: 2.11.11 + build: h86ddba1_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coin-or-utils-2.11.11-h86ddba1_0.conda + sha256: 7ebf257e3f77228be7d19a58513ad7d697353eb3ae58068ec4a5d8895894cc23 + md5: d9000579864edd4c4aa5791bd5a1b691 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=16 + - libgfortran 5.* + - libgfortran5 >=12.3.0 + - libgfortran5 >=13.2.0 + - liblapack >=3.9.0,<4.0a0 + - liblapacke >=3.9.0,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 645695 + timestamp: 1712651245789 +- kind: conda + name: coin-or-utils + version: 2.11.11 + build: hee58242_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coin-or-utils-2.11.11-hee58242_0.conda + sha256: 6480bca174e4223bbabd1916957cf9ea0a44e13c8dd8c4c4744125ae2819f05e + md5: d213208e4e3e68877b47b90ad512a95e + depends: + - bzip2 >=1.0.8,<2.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - libgfortran-ng + - libgfortran5 >=12.3.0 + - liblapack >=3.9.0,<4.0a0 + - liblapacke >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + constrains: + - coincbc * *_metapackage + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 687789 + timestamp: 1712651019616 +- kind: conda + name: coincbc + version: 2.10.12 + build: 1_metapackage + build_number: 1 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/coincbc-2.10.12-1_metapackage.conda + sha256: 2591d520e288555e53c2969efd5a7dde75b21a61911cd07245d7db8aa30bd5f1 + md5: fb2f3dba642b3c0bfba2654651262b38 + depends: + - coin-or-cbc 2.10.12.* + license: EPL-2.0 + license_family: OTHER + purls: [] + size: 12153 + timestamp: 1725355692963 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + 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 + purls: + - pkg:pypi/coloredlogs?source=hash-mapping + size: 40569 + timestamp: 1643220223971 +- kind: conda + name: conda + version: 24.9.2 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-24.9.2-py312h7900ff3_0.conda + sha256: 705f9cf0b3685774e46fd1be20c69202fd79d823431c64e2af4361ca6473c57b + md5: 132748eafd19d4c984595d301806f0b1 + depends: + - archspec >=0.2.3 + - boltons >=23.0.0 + - charset-normalizer + - conda-libmamba-solver >=23.11.0 + - conda-package-handling >=2.2.0 + - distro >=1.5.0 + - frozendict >=2.4.2 + - jsonpatch >=1.32 + - menuinst >=2 + - packaging >=23.0 + - platformdirs >=3.10.0 + - pluggy >=1.0.0 + - pycosat >=0.6.3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - requests >=2.28.0,<3 + - ruamel.yaml >=0.11.14,<0.19 + - setuptools >=60.0.0 + - tqdm >=4 + - truststore >=0.8.0 + - zstandard >=0.19.0 + constrains: + - conda-build >=24.3 + - conda-env >=2.6 + - conda-content-trust >=0.1.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda?source=hash-mapping + size: 1158773 + timestamp: 1729155303908 +- kind: conda + name: conda + version: 24.9.2 + build: py312hb401068_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/conda-24.9.2-py312hb401068_0.conda + sha256: 22f93dccb52c3621c9542dc5f1c9ef3b0558cd34298784481e4c9abfcf3cd677 + md5: 06339440083591573deacb6e63ab1f6b + depends: + - archspec >=0.2.3 + - boltons >=23.0.0 + - charset-normalizer + - conda-libmamba-solver >=23.11.0 + - conda-package-handling >=2.2.0 + - distro >=1.5.0 + - frozendict >=2.4.2 + - jsonpatch >=1.32 + - menuinst >=2 + - packaging >=23.0 + - platformdirs >=3.10.0 + - pluggy >=1.0.0 + - pycosat >=0.6.3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - requests >=2.28.0,<3 + - ruamel.yaml >=0.11.14,<0.19 + - setuptools >=60.0.0 + - tqdm >=4 + - truststore >=0.8.0 + - zstandard >=0.19.0 + constrains: + - conda-build >=24.3 + - conda-content-trust >=0.1.1 + - conda-env >=2.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda?source=hash-mapping + size: 1163211 + timestamp: 1729155314354 +- kind: conda + name: conda-inject + version: 1.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-inject-1.3.2-pyhd8ed1ab_0.conda + sha256: c1b355af599e548c4b69129f4d723ddcdb9f6defb939985731499cee2e26a578 + md5: e52c2a160d6bd0649c9fafdf0c813357 + depends: + - python >=3.9.0,<4.0.0 + - pyyaml >=6.0.0,<7.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/conda-inject?source=hash-mapping + size: 10327 + timestamp: 1717043667069 +- kind: conda + name: conda-libmamba-solver + version: 24.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.9.0-pyhd8ed1ab_0.conda + sha256: a93ddbad869701615b420be1600fcab90bc7fc852b9fd55fe7975de97ee60ea6 + md5: 45378d089c5f72c9c0d63d58414c645d + depends: + - boltons >=23.0.0 + - conda >=23.7.4 + - libmambapy >=1.5.6,<2.0a0 + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda-libmamba-solver?source=hash-mapping + size: 41613 + timestamp: 1727359934505 +- kind: conda + name: conda-package-handling + version: 2.4.0 + build: pyh7900ff3_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.4.0-pyh7900ff3_0.conda + sha256: b3a315523703abd198e1c2ff1ea84b30b270a301f8071d4381b1f575e790d049 + md5: 686fb26b6fd490b533ec580da90b2af8 + depends: + - conda-package-streaming >=0.9.0 + - python >=3.8 + - zstandard >=0.15 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda-package-handling?source=hash-mapping + size: 257763 + timestamp: 1729007114391 +- kind: conda + name: conda-package-streaming + version: 0.11.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.11.0-pyhd8ed1ab_0.conda + sha256: 685b06951e563514a9b158e82d3d44faf102f0770af42e4d08347a6eec3d48ea + md5: bc9533d8616a97551ed144789bf9c1cd + depends: + - python >=3.7 + - zstandard >=0.15 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda-package-streaming?source=hash-mapping + size: 20582 + timestamp: 1729004160440 +- kind: conda + name: configargparse + version: '1.7' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda + sha256: 23f7283b59d20a895c5fa41aa5d276155cedf257418db7f952d615d6a2e5fa43 + md5: 0d07dc29b1c1cc973f76b74beb44915f + depends: + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/configargparse?source=hash-mapping + size: 39491 + timestamp: 1690138171226 +- kind: conda + name: connection_pool + version: 0.0.3 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/connection_pool-0.0.3-pyhd3deb0d_0.tar.bz2 + sha256: 799a515e9e73e447f46f60fb3f9162f437ae1a2a00defddde84282e9e225cb36 + md5: e270fff08907db8691c02a0eda8d38ae + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/connection-pool?source=hash-mapping + size: 8331 + timestamp: 1608581999360 +- kind: conda + name: cryptography + version: 43.0.1 + build: py312h840e0bc_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/cryptography-43.0.1-py312h840e0bc_0.conda + sha256: 78b5cee4ec2c435b031c9aa11d483bb4a2a635ca15f4a658ecddc50abfef1db5 + md5: 68b96efad20289cf0b95b60ece143aa3 + depends: + - __osx >=10.13 + - cffi >=1.12 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=10.13 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1382194 + timestamp: 1725443635901 +- kind: conda + name: cryptography + version: 43.0.1 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.1-py312hda17c39_0.conda + sha256: 691c9491da9e730b8b4f6903e05a05530a6699aa73dc483244448fed97348899 + md5: 1b673277378cb4c80a061a4c6f453b6d + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1497649 + timestamp: 1725443252315 +- kind: conda + name: datrie + version: 0.8.2 + build: py312h66e93f0_8 + build_number: 8 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/datrie-0.8.2-py312h66e93f0_8.conda + sha256: 7392696b37d76ec2065c7dfd80d8d5c843a14c978a99e97c0c852f89f0366711 + md5: d207ef2514432166373be0f559773358 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/datrie?source=hash-mapping + size: 158945 + timestamp: 1725961043726 +- kind: conda + name: datrie + version: 0.8.2 + build: py312hb553811_8 + build_number: 8 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/datrie-0.8.2-py312hb553811_8.conda + sha256: 56f12b2efe42887fd65e18cac08d82afd994998a74c9656ee7a8668c5fb82bf4 + md5: 2377960cffb477133720b8abebb6b896 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/datrie?source=hash-mapping + size: 133254 + timestamp: 1725961050356 +- kind: conda + name: distro + version: 1.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda + sha256: 0d01c4da6d4f0a935599210f82ac0630fa9aeb4fc37cbbc78043a932a39ec4f3 + md5: 67999c5465064480fa8016d00ac768f6 + depends: + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distro?source=hash-mapping + size: 40854 + timestamp: 1675116355989 +- kind: conda + name: docutils + version: 0.17.1 + build: py312h7900ff3_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.17.1-py312h7900ff3_5.conda + sha256: 08579633226e26efe07e17b00053902e308e0207be06d0727fde47c75d3b6696 + md5: 95272f48d93f9417c22fd14f30bfb995 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1 + purls: + - pkg:pypi/docutils?source=hash-mapping + size: 929566 + timestamp: 1713293455024 +- kind: conda + name: docutils + version: 0.17.1 + build: py312hb401068_5 + build_number: 5 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/docutils-0.17.1-py312hb401068_5.conda + sha256: b4e31c6a0ce0b043f596432c73a9026089fb8cf2ff40403582720422e2b5dc72 + md5: 298193e4dc8a7d52e79e7bd0d69254c6 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1 + purls: + - pkg:pypi/docutils?source=hash-mapping + size: 933238 + timestamp: 1713293601348 +- kind: conda + name: dpath + version: 2.2.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/dpath-2.2.0-pyha770c72_0.conda + sha256: ab88f587a9b7dc3cbb636823423c2ecfd868d4719b491af37c09b0384214bacf + md5: b2681af65644be41a18d4b00b67938f1 + depends: + - python >3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/dpath?source=hash-mapping + size: 21344 + timestamp: 1718243548474 +- kind: conda + name: eido + version: 0.2.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/eido-0.2.4-pyhd8ed1ab_0.conda + sha256: f4875fa1fc8feab88bdfc05f7a705b2416dfdd974f3eb19608af18c38691779e + md5: fc815854ab62482e2f2f0d8fab786a1c + depends: + - jsonschema >=3.0.1 + - logmuse >=0.2.5 + - peppy >=0.40.6 + - python >=3.8 + - ubiquerg >=0.6.2 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/eido?source=hash-mapping + 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 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: fmt + version: 10.2.1 + build: h00ab1b0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda + sha256: 7b9ba098a3661e023c3555e01554354ac4891af8f8998e85f0fcbfdac79fc0d4 + md5: 35ef8bc24bd34074ebae3c943d551728 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 193853 + timestamp: 1704454679950 +- kind: conda + name: fmt + version: 10.2.1 + build: h7728843_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/fmt-10.2.1-h7728843_0.conda + sha256: 2faeccfe2b9f7c028cf271f66757365fe43b15a1234084c16f159646a646ccbc + md5: ab205d53bda43d03f5c5b993ccb406b3 + depends: + - libcxx >=15 + license: MIT + license_family: MIT + purls: [] + size: 181468 + timestamp: 1704454938658 +- kind: conda + name: frozendict + version: 2.4.6 + build: py312h3d0f464_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/frozendict-2.4.6-py312h3d0f464_0.conda + sha256: ea617933e456f78905682cbed90692ba698524280955f6ff21be0905d8f0cd43 + md5: 58a8d9e016adc22964bfb0b9a5272e16 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/frozendict?source=hash-mapping + size: 30751 + timestamp: 1728841497755 +- kind: conda + name: frozendict + version: 2.4.6 + build: py312h66e93f0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.6-py312h66e93f0_0.conda + sha256: a251569d25e9658f87406efda6640e2816659c5d4dd244d1008bb789793cf32e + md5: 9fa8408745a0621314b7751d11fecc18 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/frozendict?source=hash-mapping + size: 30486 + timestamp: 1728841445822 +- kind: conda + name: gitdb + version: 4.0.11 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + sha256: 52ab2798be31b8f509eeec458712f447ced4f96ecb672c6c9a42778f47e07b1b + md5: 623b19f616f2ca0c261441067e18ae40 + depends: + - python >=3.7 + - smmap >=3.0.1,<6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/gitdb?source=hash-mapping + 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 + purls: + - pkg:pypi/gitpython?source=hash-mapping + size: 156827 + timestamp: 1711991122366 +- 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 + purls: + - pkg:pypi/humanfriendly?source=hash-mapping + size: 73296 + timestamp: 1731259242894 +- kind: conda + name: icu + version: '73.2' + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8 + md5: cc47e1facc155f91abd89b11e48e72ff + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12089150 + timestamp: 1692900650789 +- kind: conda + name: icu + version: '73.2' + build: hf5e326d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda + sha256: f66362dc36178ac9b7c7a9b012948a9d2d050b3debec24bbd94aadbc44854185 + md5: 5cc301d759ec03f28328428e28f65591 + license: MIT + license_family: MIT + purls: [] + size: 11787527 + timestamp: 1692901622519 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: immutables + version: '0.21' + build: py312h66e93f0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/immutables-0.21-py312h66e93f0_0.conda + sha256: a452382c325d03a7bd8df6f89ad7073de9cf1ac23b62e18dff9b1e76aeeba8a5 + md5: 2aa27ea23f115c62663428c50ff4e9a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/immutables?source=hash-mapping + size: 54135 + timestamp: 1728557342989 +- kind: conda + name: immutables + version: '0.21' + build: py312hb553811_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/immutables-0.21-py312hb553811_0.conda + sha256: 0b43a016a1fc9b2f412eb23654c3a9d9198ef84e6178b1fb6115ce083d709998 + md5: 6d1edc4816013d291e8dce20c701bc3c + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/immutables?source=hash-mapping + size: 51214 + timestamp: 1728557359430 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + 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 + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: conda + name: jinja2 + version: 3.1.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d + md5: 7b86ecb7d3557821c649b3c31e3eb9f2 + depends: + - markupsafe >=2.0 + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=hash-mapping + size: 111565 + timestamp: 1715127275924 +- kind: conda + name: jmespath + version: 1.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: 95ac5f9ee95fd4e34dc051746fc86016d3d4f6abefed113e2ede049d59ec2991 + md5: 2cfa3e1cf3fb51bb9b17acc5b5e9ea11 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jmespath?source=hash-mapping + size: 21003 + timestamp: 1655568358125 +- 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 + purls: + - pkg:pypi/jsonpatch?source=hash-mapping + 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 + purls: + - pkg:pypi/jsonpointer?source=hash-mapping + size: 17277 + timestamp: 1725303032027 +- kind: conda + name: jsonpointer + version: 3.0.0 + build: py312hb401068_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py312hb401068_1.conda + sha256: 52fcb1db44a935bba26988cc17247a0f71a8ad2fbc2b717274a8c8940856ee0d + md5: 5dcf96bca4649d496d818a0f5cfb962e + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping + 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 + purls: + - pkg:pypi/jsonschema?source=hash-mapping + 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 + purls: + - pkg:pypi/jsonschema-specifications?source=hash-mapping + size: 16165 + timestamp: 1728418976382 +- kind: conda + name: jupyter_core + version: 5.7.2 + build: pyh31011fe_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: 0a2980dada0dd7fd0998f0342308b1b1 + depends: + - __unix + - platformdirs >=2.5 + - python >=3.8 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 57671 + timestamp: 1727163547058 +- kind: conda + name: keyutils + version: 1.6.1 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + md5: 30186d27e2c9fa62b45fb1476b7200e3 + depends: + - libgcc-ng >=10.3.0 + license: LGPL-2.1-or-later + purls: [] + size: 117831 + timestamp: 1646151697040 +- kind: conda + name: krb5 + version: 1.21.3 + build: h37d8d59_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda + sha256: 83b52685a4ce542772f0892a0f05764ac69d57187975579a0835ff255ae3ef9c + md5: d4765c524b1d91567886bde656fb514b + depends: + - __osx >=10.13 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + 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 + purls: [] + size: 1370023 + timestamp: 1719463201255 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: libarchive + version: 3.7.4 + build: h20e244c_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.7.4-h20e244c_0.conda + sha256: 9e46db25e976630e6738b351d76d9b79047ae232638b82f9f45eba774caaef8a + md5: 82a85fa38e83366009b7f4b2cef4deb8 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libiconv >=1.17,<2.0a0 + - libxml2 >=2.12.7,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - lzo >=2.10,<3.0a0 + - openssl >=3.3.0,<4.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 742682 + timestamp: 1716394747351 +- kind: conda + name: libarchive + version: 3.7.4 + build: hfca40fe_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.4-hfca40fe_0.conda + sha256: c30970e5e6515c662d00bb74e7c1b09ebe0c8c92c772b952a41a5725e2dcc936 + md5: 32ddb97f897740641d8d46a829ce1704 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libxml2 >=2.12.7,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - lzo >=2.10,<3.0a0 + - openssl >=3.3.0,<4.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + 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 + purls: [] + 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 + purls: [] + size: 15952 + timestamp: 1729643159199 +- kind: conda + name: libcblas + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda + sha256: ab87b0477078837c91d9cda62a9faca18fba7c57cc77aa779ae24b3ac783b5dd + md5: 5dbd1b0fc0d01ec5e0e1fbe667281a11 + depends: + - libblas 3.9.0 25_linux64_openblas + constrains: + - liblapack 3.9.0 25_linux64_openblas + - blas * openblas + - liblapacke 3.9.0 25_linux64_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + 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 + purls: [] + size: 15842 + timestamp: 1729643166929 +- kind: conda + name: libcurl + version: 8.8.0 + build: hca28451_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_1.conda + sha256: 6b5b64cdcdb643368ebe236de07eedee99b025bb95129bbe317c46e5bdc693f3 + md5: b8afb3e3cb3423cc445cf611ab95fdb0 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libgcc-ng >=12 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.2.13,<2.0a0 + - openssl >=3.3.1,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 410158 + timestamp: 1719602718702 +- kind: conda + name: libcurl + version: 8.8.0 + build: hf9fcc65_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.8.0-hf9fcc65_1.conda + sha256: 25e2b044e6978f1714a4b2844f34a45fc8a0c60185db8d332906989d70b65927 + md5: 11711bab5306a6534797a68b3c4c2bed + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.2.13,<2.0a0 + - openssl >=3.3.1,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 390707 + timestamp: 1719602983754 +- kind: conda + name: libcxx + version: 19.1.3 + build: hf95d169_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.3-hf95d169_0.conda + sha256: 466f259bb13a8058fef28843977c090d21ad337b71a842ccc0407bccf8d27011 + md5: 86801fc56d4641e3ef7a63f5d996b960 + depends: + - __osx >=10.13 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 528991 + timestamp: 1730314340106 +- kind: conda + name: libedit + version: 3.1.20191231 + build: h0678c8f_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 + sha256: dbd3c3f2eca1d21c52e4c03b21930bbce414c4592f8ce805801575b9e9256095 + md5: 6016a8a1d0e63cac3de2c352cd40208b + depends: + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 105382 + timestamp: 1597616576726 +- kind: conda + name: libedit + version: 3.1.20191231 + build: he28a2e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf + md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 + depends: + - libgcc-ng >=7.5.0 + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + 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 + purls: [] + size: 106663 + timestamp: 1702146352558 +- kind: conda + name: libev + version: '4.33' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 112766 + timestamp: 1702146165126 +- kind: conda + name: libexpat + version: 2.6.4 + build: h240833e_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.4-h240833e_0.conda + sha256: d10f43d0c5df6c8cf55259bce0fe14d2377eed625956cddce06f58827d288c59 + md5: 20307f4049a735a78a29073be1be2626 + depends: + - __osx >=10.13 + constrains: + - expat 2.6.4.* + license: MIT + license_family: MIT + purls: [] + size: 70758 + timestamp: 1730967204736 +- kind: conda + name: libexpat + version: 2.6.4 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 + md5: db833e03127376d461e1e13e76f09b6c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.4.* + license: MIT + license_family: MIT + purls: [] + size: 73304 + timestamp: 1730967041968 +- kind: conda + name: libffi + version: 3.4.2 + build: h0d85af4_5 + build_number: 5 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 + sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f + md5: ccb34fb14960ad8b125962d3d79b31a9 + license: MIT + license_family: MIT + purls: [] + size: 51348 + timestamp: 1636488394370 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgfortran + version: 5.0.0 + build: 13_2_0_h97931a8_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda + sha256: 4874422e567b68334705c135c17e5acdca1404de8255673ce30ad3510e00be0d + md5: 0b6e23a012ee7a9a5f6b244f5a92c1d5 + depends: + - libgfortran5 13.2.0 h2873a65_3 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 110106 + timestamp: 1707328956438 +- kind: conda + name: libgfortran + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 + md5: f1fd30127802683586f768875127a987 + depends: + - libgfortran5 14.2.0 hd5240d6_1 + constrains: + - libgfortran-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 53997 + timestamp: 1729027752995 +- kind: conda + name: libgfortran-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + sha256: 423f1e2403f0c665748e42d335e421e53fd03c08d457cfb6f360d329d9459851 + md5: 0a7f4cd238267c88e5d69f7826a407eb + depends: + - libgfortran 14.2.0 h69a702a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54106 + timestamp: 1729027945817 +- kind: conda + name: libgfortran5 + version: 13.2.0 + build: h2873a65_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda + sha256: da3db4b947e30aec7596a3ef92200d17e774cccbbf7efc47802529a4ca5ca31b + md5: e4fb4d23ec2870ff3c40d10afe305aec + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 5.0.0 13_2_0_*_3 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1571379 + timestamp: 1707328880361 +- kind: conda + name: libgfortran5 + version: 14.2.0 + build: hd5240d6_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d + md5: 9822b874ea29af082e5d36098d25427d + depends: + - libgcc >=14.2.0 + constrains: + - libgfortran 14.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1462645 + timestamp: 1729027735353 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + 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 + purls: [] + size: 666538 + timestamp: 1702682713201 +- kind: conda + name: liblapack + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda + sha256: 9d1ff017714edb2d84868f0f931a4a0e7c289a971062b2ac66cfc8145df7e20e + md5: 4dc03a53fc69371a6158d0ed37214cd3 + depends: + - libblas 3.9.0 25_linux64_openblas + constrains: + - liblapacke 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + 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 + purls: [] + size: 15852 + timestamp: 1729643174413 +- kind: conda + name: liblapacke + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda + sha256: f8bc6fe22126ca0bf204c27f829d1e0006069cc98776a33122bf8d0548940b3c + md5: 8f5ead31b3a168aedd488b8a87736c41 + depends: + - libblas 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - liblapack 3.9.0 25_linux64_openblas + constrains: + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15609 + timestamp: 1729642916038 +- kind: conda + name: liblapacke + version: 3.9.0 + build: 25_osx64_openblas + build_number: 25 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/liblapacke-3.9.0-25_osx64_openblas.conda + sha256: 14e1ec71bd47d63ec32b95801b04d850f12fb8ece3b03483fd36f898336d987b + md5: ddd746770d7811274ba38e0a832e3a50 + depends: + - libblas 3.9.0 25_osx64_openblas + - libcblas 3.9.0 25_osx64_openblas + - liblapack 3.9.0 25_osx64_openblas + constrains: + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15846 + timestamp: 1729643185849 +- kind: conda + name: libmamba + version: 1.5.8 + build: ha449628_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libmamba-1.5.8-ha449628_0.conda + sha256: 48ef28e63407a42f0b0553b64aa0cdeadaa441bd588cd89a4988755baec07654 + md5: f4eafddd38618657afefb7540d4c1a20 + depends: + - fmt >=10.2.1,<11.0a0 + - libarchive >=3.7.2,<3.8.0a0 + - libcurl >=8.6.0,<9.0a0 + - libcxx >=16 + - libsolv >=0.7.23 + - openssl >=3.2.1,<4.0a0 + - reproc >=14.2,<15.0a0 + - reproc-cpp >=14.2,<15.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1298413 + timestamp: 1711395384374 +- kind: conda + name: libmamba + version: 1.5.8 + build: had39da4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda + sha256: 79c275862cc084c9f0dc1a13bd42313d48202181d5d64615b3046bf2380ef57d + md5: def669885dc103d8acb7ac2ac35e0b2f + depends: + - fmt >=10.2.1,<11.0a0 + - libarchive >=3.7.2,<3.8.0a0 + - libcurl >=8.6.0,<9.0a0 + - libgcc-ng >=12 + - libsolv >=0.7.23 + - libstdcxx-ng >=12 + - openssl >=3.2.1,<4.0a0 + - reproc >=14.2,<15.0a0 + - reproc-cpp >=14.2,<15.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1671126 + timestamp: 1711394919576 +- kind: conda + name: libmambapy + version: 1.5.8 + build: py312h67f5953_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libmambapy-1.5.8-py312h67f5953_0.conda + sha256: cb3f1fe02ef2c6bb39129e43af7dfcf1a3d98a4d4c21e5eed5a1f3ef1c0557fb + md5: c7d0f9c38601b87f6ebb0ba00fb02e5c + depends: + - fmt >=10.2.1,<11.0a0 + - libcxx >=16 + - libmamba 1.5.8 ha449628_0 + - openssl >=3.2.1,<4.0a0 + - pybind11-abi 4 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml-cpp >=0.8.0,<0.9.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libmambapy?source=hash-mapping + size: 272088 + timestamp: 1711395982732 +- kind: conda + name: libmambapy + version: 1.5.8 + build: py312hd9e9ff6_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py312hd9e9ff6_0.conda + sha256: 429c8fd6f7be1040a52cedaa8cd7aa02a42ccc8a27baa0a4394516401e9d7b28 + md5: ab74748421323fd59d9fda55e45b979e + depends: + - fmt >=10.2.1,<11.0a0 + - libgcc-ng >=12 + - libmamba 1.5.8 had39da4_0 + - libstdcxx-ng >=12 + - openssl >=3.2.1,<4.0a0 + - pybind11-abi 4 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml-cpp >=0.8.0,<0.9.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libmambapy?source=hash-mapping + size: 306497 + timestamp: 1711395345839 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: h47da74e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb + md5: 700ac6ea6d53d5510591c4344d5c989a + depends: + - c-ares >=1.23.0,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + purls: [] + 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 + purls: [] + size: 599736 + timestamp: 1702130398536 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + 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 + purls: [] + size: 6165715 + timestamp: 1730773348340 +- kind: conda + name: libopenblas + version: 0.3.28 + build: pthreads_h94d23a6_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda + sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe + md5: 62857b389e42b36b686331bec0922050 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.2.0 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5578513 + timestamp: 1730772671118 +- kind: conda + name: libsolv + version: 0.7.29 + build: h4f92f52_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsolv-0.7.29-h4f92f52_0.conda + sha256: c91c9fa1a5cfa6c1d1b125567e82c99df8b4117416076fb909acd5e7ab0fad28 + md5: f7618796195afe62f076d48737bbbbb8 + depends: + - __osx >=10.9 + - libcxx >=16 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 415537 + timestamp: 1714552385517 +- kind: conda + name: libsolv + version: 0.7.29 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.29-ha6fb4c9_0.conda + sha256: 4e6d2c6f3a8e23a7fee6a198bda7a82ee1405dd04b3ca824805125b7ea11bde5 + md5: 28f3c528c01a07a592ee19f73ed730a0 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 470672 + timestamp: 1714552161121 +- kind: conda + name: libsqlite + version: 3.46.0 + build: h1b8f9f3_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + sha256: 63af1a9e3284c7e4952364bafe7267e41e2d9d8bcc0e85a4ea4b0ec02d3693f6 + md5: 5dadfbc1a567fe6e475df4ce3148be09 + depends: + - __osx >=10.13 + - libzlib >=1.2.13,<2.0a0 + license: Unlicense + purls: [] + size: 908643 + timestamp: 1718050720117 +- kind: conda + name: libsqlite + version: 3.46.0 + build: hde9e2c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + sha256: daee3f68786231dad457d0dfde3f7f1f9a7f2018adabdbb864226775101341a8 + md5: 18aa975d2094c34aef978060ae7da7d8 + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0a0 + license: Unlicense + purls: [] + size: 865346 + timestamp: 1718050628718 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h0841786_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d + md5: 1f5a58e686b13bcfde88b93f547d23fe + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 271133 + timestamp: 1685837707056 +- kind: conda + name: libssh2 + version: 1.11.0 + build: hd019ec5_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515 + md5: ca3a72efba692c59a90d4b9fc0dfe774 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 259556 + timestamp: 1685837820566 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libxml2 + version: 2.12.7 + build: h3e169fe_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-h3e169fe_1.conda + sha256: 75554b5ef4c61a97c1d2ddcaff2d87c5ee120ff6925c2b714e18b20727cafb98 + md5: ddb63049aa7bd9f08f2cdc5a1c144d1a + depends: + - __osx >=10.13 + - icu >=73.2,<74.0a0 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.2.13,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 619297 + timestamp: 1717546472911 +- kind: conda + name: libxml2 + version: 2.12.7 + build: hc051c1a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-hc051c1a_1.conda + sha256: 576ea9134176636283ff052897bf7a91ffd8ac35b2c505dfde2890ec52849698 + md5: 340278ded8b0dc3a73f3660bbb0adbc6 + depends: + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.2.13,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 704984 + timestamp: 1717546454837 +- kind: conda + name: libzlib + version: 1.2.13 + build: h4ab18f5_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h4ab18f5_6.conda + sha256: 8ced4afed6322172182af503f21725d072a589a6eb918f8a58135c1e00d35980 + md5: 27329162c0dc732bcf67a4e0cd488125 + depends: + - libgcc-ng >=12 + constrains: + - zlib 1.2.13 *_6 + license: Zlib + license_family: Other + purls: [] + size: 61571 + timestamp: 1716874066944 +- kind: conda + name: libzlib + version: 1.2.13 + build: h87427d6_6 + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h87427d6_6.conda + sha256: 1c70fca0720685242b5c68956f310665c7ed43f04807aa4227322eee7925881c + md5: c0ef3c38a80c02ae1d86588c055184fc + depends: + - __osx >=10.13 + constrains: + - zlib 1.2.13 *_6 + license: Zlib + license_family: Other + purls: [] + size: 57373 + timestamp: 1716874185419 +- kind: conda + name: llvm-openmp + version: 19.1.3 + build: hf78d878_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.3-hf78d878_0.conda + sha256: 3d28e9938ab1400322ba76968cdbee035009d611bbee94ec6b38a154551954b4 + md5: 18a8498d57d871da066beaa09263a638 + depends: + - __osx >=10.13 + constrains: + - openmp 19.1.3|19.1.3.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 305524 + timestamp: 1730364180247 +- kind: conda + name: logmuse + version: 0.2.8 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/logmuse-0.2.8-pyhd8ed1ab_0.conda + sha256: 52cc2d94cde2830133c7a3cb42d82aec9b5513d034338c77d0be4a8fb4deaf60 + md5: 36460a82251aae67f02e976ccd8b911b + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/logmuse?source=hash-mapping + size: 13455 + timestamp: 1728929621314 +- kind: conda + name: lz4-c + version: 1.9.4 + build: hcb278e6_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda + sha256: 1b4c105a887f9b2041219d57036f72c4739ab9e9fe5a1486f094e58c76b31f5f + md5: 318b08df404f9c9be5712aaa5a6f0bb0 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + 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 + purls: [] + 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 + purls: [] + size: 146405 + timestamp: 1713516112292 +- kind: conda + name: lzo + version: '2.10' + build: hd590300_1001 + build_number: 1001 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda + sha256: 88433b98a9dd9da315400e7fb9cd5f70804cb17dca8b1c85163a64f90f584126 + md5: ec7398d21e2651e0dcb0044d03b9a339 + depends: + - libgcc-ng >=12 + license: GPL-2.0-or-later + license_family: GPL2 + purls: [] + size: 171416 + timestamp: 1713515738503 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + 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 + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 24878 + timestamp: 1729351558563 +- kind: conda + name: markupsafe + version: 3.0.2 + build: py312hbe3f5e4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py312hbe3f5e4_0.conda + sha256: b2fb54718159055fdf89da7d9f0c6743ef84b31960617a56810920d17616d944 + md5: c6238833d7dc908ec295bc490b80d845 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + 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 + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: menuinst + version: 2.2.0 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.2.0-py312h7900ff3_0.conda + sha256: a3d3f509e545913b6aee004b3e91c0147723b7d569ff256db9cbc8eb2d7b1772 + md5: f22f8e77b36e67297feffe03eefd5375 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT + purls: + - pkg:pypi/menuinst?source=hash-mapping + size: 166308 + timestamp: 1731147065526 +- kind: conda + name: menuinst + version: 2.2.0 + build: py312hb401068_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/menuinst-2.2.0-py312hb401068_0.conda + sha256: caf806b6f0d8acbfc06d87c21d89b0624b5b230fd30246860399fa01f3b0ba0f + md5: 4b908217561a1274f48b0f9952fb5359 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT + purls: + - pkg:pypi/menuinst?source=hash-mapping + size: 166741 + timestamp: 1731147133148 +- kind: conda + name: mypy_extensions + version: 1.0.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + sha256: f240217476e148e825420c6bc3a0c0efb08c0718b7042fae960400c02af858a3 + md5: 4eccaeba205f0aed9ac3a9ea58568ca3 + depends: + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mypy-extensions?source=hash-mapping + size: 10492 + timestamp: 1675543414256 +- kind: conda + name: nbformat + version: 5.10.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c + md5: 0b57b5368ab7fc7cdc9e3511fa867214 + depends: + - jsonschema >=2.6 + - jupyter_core >=4.12,!=5.0.* + - python >=3.8 + - python-fastjsonschema >=2.15 + - traitlets >=5.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbformat?source=hash-mapping + size: 101232 + timestamp: 1712239122969 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + 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 + purls: [] + size: 822066 + timestamp: 1724658603042 +- kind: conda + name: numpy + version: 2.1.3 + build: py312h58c1407_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.3-py312h58c1407_0.conda + sha256: e4c14f71588a5627a6935d3e7d9ca78a8387229ec8ebc91616b0988ce57ba0dc + md5: dfdbc12e6d81889ba4c494a23f23eba8 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8388631 + timestamp: 1730588649810 +- kind: conda + name: numpy + version: 2.1.3 + build: py312hfc93d17_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.3-py312hfc93d17_0.conda + sha256: 2f120e958da2d6ab7e4785a42515b4f65f70422b8b722e1a75654962fcfb26e9 + md5: 011118baf131914d1cb48e07317f0946 + depends: + - __osx >=10.13 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 7538388 + timestamp: 1730588494493 +- kind: conda + name: openssl + version: 3.4.0 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + sha256: 814b9dff1847b132c676ee6cc1a8cb2d427320779b93e1b6d76552275c128705 + md5: 23cc74f77eb99315c0360ec3533147a9 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2947466 + timestamp: 1731377666602 +- kind: conda + name: openssl + version: 3.4.0 + build: hd471939_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.4.0-hd471939_0.conda + sha256: ba7e068ed469d6625e32ae60e6ad893e655b6695280dadf7e065ed0b6f3b885c + md5: ec99d2ce0b3033a75cbad01bbc7c5b71 + depends: + - __osx >=10.13 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2590683 + timestamp: 1731378034404 +- kind: conda + name: packaging + version: '24.2' + build: pyhff2d567_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda + sha256: 74843f871e5cd8a1baf5ed8c406c571139c287141efe532f8ffbdafa3664d244 + md5: 8508b703977f4c4ada34d657d051972c + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 60380 + timestamp: 1731802602808 +- kind: conda + name: pandas + version: 2.2.3 + build: py312h98e817e_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.3-py312h98e817e_1.conda + sha256: 86c252ce5718b55129303f7d5c9a8664d8f0b23e303579142d09fcfd701e4fbe + md5: a7f7c58bbbfcdf820edb6e544555fe8f + depends: + - __osx >=10.13 + - libcxx >=17 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1,<2024.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 14575645 + timestamp: 1726879062042 +- kind: conda + name: pandas + version: 2.2.3 + build: py312hf9745cd_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + sha256: ad275a83bfebfa8a8fee9b0569aaf6f513ada6a246b2f5d5b85903d8ca61887e + md5: 8bce4f6caaf8c5448c7ac86d87e26b4b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1,<2024.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 15436913 + timestamp: 1726879054912 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pephubclient + version: 0.4.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pephubclient-0.4.4-pyhd8ed1ab_0.conda + sha256: 03660b33cffb76da14e77176aad109ba0fe50d824e0bd95973ab159696a10c86 + md5: 1fb0b63ececc327dda75c29633429d12 + depends: + - coloredlogs >=15.0.1 + - pandas >=2.0.0 + - peppy >=0.40.5 + - pydantic >=2.5.0 + - python >=3.8 + - requests >=2.28.2 + - typer >=0.7.0 + - ubiquerg >=0.6.3 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pephubclient?source=hash-mapping + 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 + purls: + - pkg:pypi/peppy?source=hash-mapping + size: 29442 + timestamp: 1729011123771 +- kind: conda + name: pkgutil-resolve-name + version: 1.3.10 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a + md5: 405678b942f2481cecdb3e010f4925d9 + depends: + - python >=3.6 + license: MIT AND PSF-2.0 + purls: + - pkg:pypi/pkgutil-resolve-name?source=hash-mapping + size: 10778 + timestamp: 1694617398467 +- kind: conda + name: plac + version: 1.4.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/plac-1.4.3-pyhd8ed1ab_0.conda + sha256: fccc1776a94db15f0ef8fdc66d621d01b7f0b33896b7eead82ec4fc1df094d13 + md5: c2231e8389ae345477ac94e736e8cc1b + depends: + - python >=3.6 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/plac?source=hash-mapping + size: 26044 + timestamp: 1708635292043 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: prompt-toolkit + version: 3.0.38 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda + sha256: 78c2f3c6195ec350d7d6e5fa3e43274ca8191c181c97a867e2920faaeec0e9bc + md5: 59ba1bf8ea558751a0d391249a248765 + depends: + - python >=3.7 + - wcwidth + constrains: + - prompt_toolkit 3.0.38 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping + size: 269375 + timestamp: 1677601102637 +- kind: conda + name: prompt_toolkit + version: 3.0.38 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda + sha256: c0f24a75d27918eb33f86902aa6024783d128a89eb3a169bcb22f24163a422b3 + md5: 45b74f64d8808eda7e6f6e6b1d641fd2 + depends: + - prompt-toolkit >=3.0.38,<3.0.39.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6402 + timestamp: 1677601110741 +- 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 + purls: + - pkg:pypi/psutil?source=hash-mapping + 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 + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 488462 + timestamp: 1729847159916 +- kind: conda + name: pulp + version: 2.8.0 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pulp-2.8.0-py312h7900ff3_0.conda + sha256: 9bdcdde0cb169cc23aa9dff570f9925799ea5f69478ccde7bea9a1799d5e5c58 + md5: 20e55885b4b57db6f53e746d1076a8b0 + depends: + - amply >=0.1.2 + - coincbc + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pulp?source=hash-mapping + size: 13217118 + timestamp: 1705064802698 +- kind: conda + name: pulp + version: 2.8.0 + build: py312hb401068_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pulp-2.8.0-py312hb401068_0.conda + sha256: 978e00ef7b77ebded4d68344b3f23e5466a3fff3a29ad11990c1ea505f6ec223 + md5: 1052ee40a91de1414e0cbe0cc34e0896 + depends: + - amply >=0.1.2 + - coincbc + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pulp?source=hash-mapping + size: 13333860 + timestamp: 1705064991160 +- kind: conda + name: pybind11-abi + version: '4' + build: hd8ed1ab_3 + build_number: 3 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + sha256: d4fb485b79b11042a16dc6abfb0c44c4f557707c2653ac47c81e5d32b24a3bb0 + md5: 878f923dd6acc8aeb47a75da6c4098be + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 9906 + timestamp: 1610372835205 +- kind: conda + name: pycosat + version: 0.6.6 + build: py312h104f124_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pycosat-0.6.6-py312h104f124_0.conda + sha256: b37afbc13d4216dde3a613ded3a1688adae3d74ab98ea55cc6914b39d2417d55 + md5: 106c2d37708757f4c23ff1f487bf5a3f + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pycosat?source=hash-mapping + 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 + purls: + - pkg:pypi/pycosat?source=hash-mapping + 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 + purls: + - pkg:pypi/pycparser?source=hash-mapping + 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 + purls: + - pkg:pypi/pydantic?source=hash-mapping + 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 + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + 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 + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + size: 1535259 + timestamp: 1726525537029 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pyparsing + version: 3.2.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda + sha256: b846e3965cd106438cf0b9dc0de8d519670ac065f822a7d66862e9423e0229cb + md5: 035c17fbf099f50ff60bf2eb303b0a83 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyparsing?source=hash-mapping + size: 92444 + timestamp: 1728880549923 +- kind: conda + name: pysocks + version: 1.7.1 + build: pyha2e5f31_6 + build_number: 6 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b + md5: 2a7de29fb590ca14b5243c4c812c8025 + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + 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 + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: conda + name: python + version: 3.12.3 + build: h1411813_0_cpython + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda + sha256: 3b327ffc152a245011011d1d730781577a8274fde1cf6243f073749ead8f1c2a + md5: df1448ec6cbf8eceb03d29003cf72ae6 + depends: + - __osx >=10.9 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.45.2,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.4.20240210,<7.0a0 + - openssl >=3.2.1,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 14557341 + timestamp: 1713208068012 +- kind: conda + name: python + version: 3.12.3 + build: hab00c5b_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda + sha256: f9865bcbff69f15fd89a33a2da12ad616e98d65ce7c83c644b92e66e5016b227 + md5: 2540b74d304f71d3e89c81209db4db84 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.45.2,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.4.20240210,<7.0a0 + - openssl >=3.2.1,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31991381 + timestamp: 1713208036041 +- kind: conda + name: python-dateutil + version: 2.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 + md5: 2cf4264fffb9e6eff6031c5b6884d61c + depends: + - python >=3.7 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 222742 + timestamp: 1709299922152 +- kind: conda + name: python-fastjsonschema + version: 2.20.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: b98d2018c01ce9980c03ee2850690fab + depends: + - python >=3.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fastjsonschema?source=hash-mapping + size: 226165 + timestamp: 1718477110630 +- kind: conda + name: python-tzdata + version: '2024.2' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + sha256: fe3f62ce2bc714bdaa222ab3f0344a2815ad9e853c6df38d15c9f25de8a3a6d4 + md5: 986287f89929b2d629bd6ef6497dc307 + depends: + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/tzdata?source=hash-mapping + 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 + purls: [] + 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 + purls: [] + size: 6312 + timestamp: 1723823137004 +- kind: conda + name: pytz + version: '2024.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + md5: 3eeeeb9e4827ace8c0c1419c85d590ad + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping + size: 188538 + timestamp: 1706886944988 +- kind: conda + name: pyyaml + version: 6.0.2 + build: py312h66e93f0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda + sha256: a60705971e958724168f2ebbb8ed4853067f1d3f7059843df3903e3092bbcffa + md5: 549e5930e768548a89c23f595dac5a95 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + 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 + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 189347 + timestamp: 1725456465705 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h9e318b2_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda + sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568 + md5: f17f77f2acf4d344734bda76829ce14e + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + 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 + purls: + - pkg:pypi/referencing?source=hash-mapping + size: 42210 + timestamp: 1714619625532 +- kind: conda + name: reproc + version: 14.2.5.post0 + build: h6e16a3a_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/reproc-14.2.5.post0-h6e16a3a_0.conda + sha256: dda2a8bc1bf16b563b74c2a01dccea657bda573b0c45e708bfeee01c208bcbaf + md5: eda18d4a7dce3831016086a482965345 + depends: + - __osx >=10.13 + license: MIT + purls: [] + size: 31749 + timestamp: 1731926270954 +- kind: conda + name: reproc + version: 14.2.5.post0 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.5.post0-hb9d3cd8_0.conda + sha256: a1973f41a6b956f1305f9aaefdf14b2f35a8c9615cfe5f143f1784ed9aa6bf47 + md5: 69fbc0a9e42eb5fe6733d2d60d818822 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + purls: [] + size: 34194 + timestamp: 1731925834928 +- kind: conda + name: reproc-cpp + version: 14.2.5.post0 + build: h240833e_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/reproc-cpp-14.2.5.post0-h240833e_0.conda + sha256: 4d8638b7f44082302c7687c99079789f42068d34cddc0959c11ad5d28aab3d47 + md5: 420229341978751bd96faeced92c200e + depends: + - __osx >=10.13 + - libcxx >=18 + - reproc 14.2.5.post0 h6e16a3a_0 + license: MIT + purls: [] + size: 24394 + timestamp: 1731926392643 +- kind: conda + name: reproc-cpp + version: 14.2.5.post0 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.5.post0-h5888daf_0.conda + sha256: 568485837b905b1ea7bdb6e6496d914b83db57feda57f6050d5a694977478691 + md5: 828302fca535f9cfeb598d5f7c204323 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - reproc 14.2.5.post0 hb9d3cd8_0 + license: MIT + purls: [] + size: 25665 + timestamp: 1731925852714 +- kind: conda + name: requests + version: 2.32.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc + md5: 5ede4753180c7a550a443c430dc8ab52 + depends: + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - python >=3.8 + - urllib3 >=1.21.1,<3 + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests?source=hash-mapping + size: 58810 + timestamp: 1717057174842 +- kind: conda + name: reretry + version: 0.11.8 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/reretry-0.11.8-pyhd8ed1ab_0.conda + sha256: ef8a072e3dd963edabe6077c392b9d4581069ce92a1adb3039448ab31e017476 + md5: b8a877fba9cfe5d5dc2fef9d951316dd + depends: + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/reretry?source=hash-mapping + size: 12191 + timestamp: 1671379290649 +- kind: conda + name: rich + version: 13.9.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda + sha256: c009488fc07fd5557434c9c1ad32ab1dd50241d6a766e4b2b4125cd6498585a8 + md5: bcf8cc8924b5d20ead3d122130b8320b + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185481 + timestamp: 1730592349978 +- kind: conda + name: rpds-py + version: 0.21.0 + build: py312h0d0de52_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py312h0d0de52_0.conda + sha256: ff4c1d70c78085a2abb8f8fc1dc283a60eafe61e03c3367d7cbface6190fe7ab + md5: dae0ad51ccb74a37f0b64ed6e6f82840 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + 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 + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 336759 + timestamp: 1730922756033 +- kind: conda + name: ruamel.yaml + version: 0.17.17 + build: py312h3d0f464_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml-0.17.17-py312h3d0f464_3.conda + sha256: 6596c84c899658158a1824ab89e149d9e1ee028f7a4f114adb1dc9fcfa272ad4 + md5: 8612c431ff50f397d6e980677578c37f + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml.clib >=0.1.2 + - setuptools + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml?source=hash-mapping + size: 251341 + timestamp: 1728738935612 +- kind: conda + name: ruamel.yaml + version: 0.17.17 + build: py312h66e93f0_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.17-py312h66e93f0_3.conda + sha256: df43500e2d395ce2431291b12c8e6e25527c2613599b9999830125f1bd018972 + md5: e50ee865ea22650606f8da8b5c27deb3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml.clib >=0.1.2 + - setuptools + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml?source=hash-mapping + size: 251059 + timestamp: 1728738915878 +- kind: conda + name: ruamel.yaml.clib + version: 0.2.8 + build: py312h3d0f464_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.8-py312h3d0f464_1.conda + sha256: b5ddb73db7ca3d4d8780af1761efb97a5f555ae489f287a91367624d4425f498 + md5: f4c0464f98dabcd65064e89991c3c9c2 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml-clib?source=hash-mapping + size: 122331 + timestamp: 1728724619287 +- kind: conda + name: ruamel.yaml.clib + version: 0.2.8 + build: py312h66e93f0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda + sha256: ac987b1c186d79e4e1ce4354a84724fc68db452b2bd61de3a3e1b6fc7c26138d + md5: 532c3e5d0280be4fea52396ec1fa7d5d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml-clib?source=hash-mapping + size: 145481 + timestamp: 1728724626666 +- kind: conda + name: ruff + version: 0.7.4 + build: py312h07459cc_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.7.4-py312h07459cc_0.conda + sha256: 49c4702be860ab71bb3f95b49f67c887c6baa06e03efe0c6a7e6d4e113890b7c + md5: eb613739f9e64b39efa883ee42afb4e5 + depends: + - __osx >=10.13 + - libcxx >=18 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping + size: 7218063 + timestamp: 1731708938871 +- kind: conda + name: ruff + version: 0.7.4 + build: py312h2156523_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.7.4-py312h2156523_0.conda + sha256: 41424ae6a027f433d259aa384b29fa2fb8e366f5080e93179c1d228ba8e6bd83 + md5: 025594b21ff040de6d98e6b1ef699185 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping + size: 7788530 + timestamp: 1731708419964 +- kind: conda + name: s2n + version: 1.5.5 + build: h3931f03_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.5-h3931f03_0.conda + sha256: a6fa0afa836f8f26dea0abc180ca2549bb517932d9a88a121e707135d4bcb715 + md5: 334dba9982ab9f5d62033c61698a8683 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 353081 + timestamp: 1728534228471 +- kind: conda + name: setuptools + version: 75.5.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.5.0-pyhff2d567_0.conda + sha256: 54dcf5f09f74f69641e0063bc695b38340d0349fa8371b1f2ed0c45c5b2fd224 + md5: ade63405adb52eeff89d506cd55908c0 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 772480 + timestamp: 1731707561164 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + 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 + purls: + - pkg:pypi/six?source=hash-mapping + size: 14259 + timestamp: 1620240338595 +- kind: conda + name: slack-sdk + version: 3.33.3 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/slack-sdk-3.33.3-pyha770c72_0.conda + sha256: a2b8f3980fc76a1619005b33dc82146c7a2d1a406d1a60fc5d9099974c0a8bf9 + md5: 6ec1f74396a5e3b83800964608047243 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/slack-sdk?source=hash-mapping + size: 148014 + timestamp: 1730271331374 +- kind: conda + name: slack_sdk + version: 3.33.3 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/slack_sdk-3.33.3-hd8ed1ab_0.conda + sha256: e81456df939a7c67dea186e305d3eaae102d2246062d8018cb8eaad91c181350 + md5: ee97f6aef5ebc2401866126031d9f8c3 + depends: + - slack-sdk 3.33.3 pyha770c72_0 + license: MIT + license_family: MIT + purls: [] + size: 6207 + timestamp: 1730271332649 +- kind: conda + name: smart_open + version: 7.0.5 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.5-pyhd8ed1ab_1.conda + sha256: 6d8c9bfab01f39fe113bcbaaceb2f2704dd5ad397729e8cc0d078f4f747a4907 + md5: 1be1d9fb41517af182663bdd004bbe6a + depends: + - python >=3.7 + - wrapt + license: MIT + license_family: MIT + purls: + - pkg:pypi/smart-open?source=hash-mapping + size: 51803 + timestamp: 1728143243234 +- kind: conda + name: smmap + version: 5.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + sha256: 23011cb3e064525bdb8787c75126a2e78d2344a72cd6773922006d1da1f2af16 + md5: 62f26a3d1387acee31322208f0cfa3e0 + depends: + - python >=3.5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/smmap?source=hash-mapping + size: 22483 + timestamp: 1634310465482 +- kind: conda + name: snakefmt + version: 0.10.2 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakefmt-0.10.2-pyhdfd78af_0.tar.bz2 + sha256: c79a2a5a70e47c75ec17d28aa82cc5ad718fd7f93bea5cf0c9970a02e2a7c9af + md5: be6c10fbd75a547d74e77be4c36d1de7 + depends: + - black >=24.3,<25.0 + - click >=8.0.0,<9.0.0 + - python >=3.8 + - toml >=0.10.2,<0.11.0 + license: MIT + license_family: MIT + size: 32110 + timestamp: 1715145696865 +- kind: conda + name: snakemake + version: 8.21.0 + build: hdfd78af_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/bioconda/noarch/snakemake-8.21.0-hdfd78af_0.tar.bz2 + sha256: e6613cfdf17549f777d190976282cc1b29722705ec4fab29d57d39ebd18a5924 + md5: 97cfbd769bf73d531801f9d6e4d9db2b + depends: + - eido + - pandas + - peppy + - pygments + - slack_sdk + - snakemake-minimal 8.21.0.* + license: MIT + license_family: MIT + size: 9382 + timestamp: 1728717749418 +- kind: conda + name: snakemake-executor-plugin-slurm + version: 0.11.2 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-0.11.2-pyhdfd78af_0.tar.bz2 + sha256: 541ba06c2ed1d0193997f1278dfff4da7e972412b20a517e9d98ae763ce2c91e + md5: f679cbc153a82a3e50027074da5ea55f + depends: + - python >=3.11.0,<4.0.0 + - snakemake-executor-plugin-slurm-jobstep >=0.2.0,<0.3.0 + - snakemake-interface-common >=1.13.0,<2.0.0 + - snakemake-interface-executor-plugins >=9.1.1,<10.0.0 + - throttler >=1.2.2,<2.0.0 + license: MIT + size: 17275 + timestamp: 1730975212591 +- kind: conda + name: snakemake-executor-plugin-slurm-jobstep + version: 0.2.1 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-executor-plugin-slurm-jobstep-0.2.1-pyhdfd78af_0.tar.bz2 + sha256: 0e0baabe160ef45e962fc9a95474a77c7ec0851aa18a41a132354a455b60a6fb + md5: 7daf955f3ed7eee4b5fe2e7653af877e + depends: + - python >=3.11.0,<4.0.0 + - snakemake-interface-common >=1.13.0,<2.0.0 + - snakemake-interface-executor-plugins >=9.0.0,<10.0.0 + license: MIT + size: 12751 + timestamp: 1712852914869 +- kind: conda + name: snakemake-interface-common + version: 1.17.4 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-common-1.17.4-pyhdfd78af_0.tar.bz2 + sha256: 3604b0d42ff12bc8bee860b5eeded78b2799eb34aec684b9d3f4f068a5304a66 + md5: 4a72a6f5efb323aa2953e3dde0589ff6 + depends: + - argparse-dataclass >=2.0.0,<3.0.0 + - configargparse >=1.7,<2.0 + - python >=3.8.0,<4.0.0 + license: MIT + license_family: MIT + size: 18489 + timestamp: 1728055352534 +- kind: conda + name: snakemake-interface-executor-plugins + version: 9.3.2 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-executor-plugins-9.3.2-pyhdfd78af_0.tar.bz2 + sha256: 840d5a8e85671bf0da9a8b4452458e46532c751547edd4ec4ba5d147b4e17711 + md5: 935050469d81fe24c63939ac4ac5eb00 + depends: + - argparse-dataclass >=2.0.0,<3.0.0 + - python >=3.11.0,<4.0.0 + - snakemake-interface-common >=1.17.4,<2.0.0 + - throttler >=1.2.2,<2.0.0 + license: MIT + license_family: MIT + size: 22989 + timestamp: 1728217454727 +- kind: conda + name: snakemake-interface-report-plugins + version: 1.1.0 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-report-plugins-1.1.0-pyhdfd78af_0.tar.bz2 + sha256: 1d110a5c54b9f46824bb03f80c09cdc5045d6c27c0166662d5f4e8a7c07d3535 + md5: 3a7dd19cd530b27b59aed6cb606a7987 + depends: + - python >=3.11.0,<4.0.0 + - snakemake-interface-common >=1.16.0,<2.0.0 + license: MIT + size: 13269 + timestamp: 1728055589409 +- kind: conda + name: snakemake-interface-storage-plugins + version: 3.3.0 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-interface-storage-plugins-3.3.0-pyhdfd78af_0.tar.bz2 + sha256: f552d1cbba985155d0a445a117d7d7f40601e831f7d1469db66b03a5d10d2973 + md5: 6956cd18cbc5310fecfa26e25fc4caee + depends: + - python >=3.11.0,<4.0.0 + - reretry >=0.11.8,<0.12.0 + - snakemake-interface-common >=1.12.0,<2.0.0 + - throttler >=1.2.2,<2.0.0 + - wrapt >=1.15.0,<2.0.0 + license: MIT + size: 18653 + timestamp: 1724066710607 +- kind: conda + name: snakemake-minimal + version: 8.21.0 + build: pyhdfd78af_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/bioconda/noarch/snakemake-minimal-8.21.0-pyhdfd78af_0.tar.bz2 + sha256: 58e0f3c5fdf7000c054ef47313576e7ae2bb7c9a411b086f88be6ae2269c1ab7 + md5: e99d5b44339227c16a0601436ad0d1a4 + depends: + - appdirs + - conda-inject >=1.3.1,<2.0 + - configargparse + - connection_pool >=0.0.3 + - datrie + - docutils + - dpath >=2.1.6,<3.0.0 + - gitpython + - humanfriendly + - immutables + - jinja2 >=3.0,<4.0 + - jsonschema + - nbformat + - packaging + - psutil + - pulp >=2.3.1,<2.9 + - python >=3.11,<3.13 + - pyyaml + - requests >=2.8.1 + - reretry + - smart_open >=4.0,<8.0 + - snakemake-interface-common >=1.17.0,<2.0 + - snakemake-interface-executor-plugins >=9.3.2,<10.0.0 + - snakemake-interface-report-plugins >=1.0.0,<2.0.0 + - snakemake-interface-storage-plugins >=3.2.3,<4.0 + - tabulate + - throttler + - toposort >=1.10,<2.0 + - wrapt + - yte >=1.5.1,<2.0 + license: MIT + license_family: MIT + size: 818173 + timestamp: 1728717743415 +- kind: conda + name: tabulate + version: 0.9.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2 + sha256: f6e4a0dd24ba060a4af69ca79d32361a6678e61d78c73eb5e357909b025b4620 + md5: 4759805cce2d914c38472f70bf4d8bcb + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tabulate?source=hash-mapping + size: 35912 + timestamp: 1665138565317 +- kind: conda + name: taplo + version: 0.9.3 + build: h53e704d_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda + sha256: c6043d0e7df9bf3a4752cf965c04586e268040a563aaa97e60279e87b1da4b7b + md5: b8a6d8df78c43e3ffd4459313c9bcf84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: [] + size: 3835339 + timestamp: 1727786201305 +- kind: conda + name: taplo + version: 0.9.3 + build: hf3953a5_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda + sha256: 76cc103c5b785887a519c2bb04b68bea170d3a061331170ea5f15615df0af354 + md5: 9ac41cb4cb31a6187d7336e16d1dab8f + depends: + - __osx >=10.13 + - openssl >=3.3.2,<4.0a0 + constrains: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 3738226 + timestamp: 1727786378888 +- kind: conda + name: throttler + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/throttler-1.2.2-pyhd8ed1ab_0.conda + sha256: cdd2067b03db7ed7a958de74edc1a4f8c4ae6d0aa1a61b5b70b89de5013f0f78 + md5: 6fc48bef3b400c82abaee323a9d4e290 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/throttler?source=hash-mapping + size: 12341 + timestamp: 1691135604942 +- kind: conda + name: tk + version: 8.6.13 + build: h1abcd95_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda + sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 + md5: bf830ba5afc507c6232d4ef0fb1a882d + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3270220 + timestamp: 1699202389792 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: toml + version: 0.10.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 + sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 + md5: f832c45a477c78bebd107098db465095 + depends: + - python >=2.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/toml?source=hash-mapping + size: 18433 + timestamp: 1604308660817 +- kind: conda + name: tomli + version: 2.1.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda + sha256: 354b8a64d4f3311179d85aefc529ca201a36afc1af090d0010c46be7b79f9a47 + md5: 3fa1089b4722df3a900135925f4519d9 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18741 + timestamp: 1731426862834 +- kind: conda + name: toposort + version: '1.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/toposort-1.10-pyhd8ed1ab_0.conda + sha256: 23589eeb84f55c9f245ffca1201a0dc9b16e838d39fe7857d4bd0e3026e5b75a + md5: aeef653e20028f19a3c2cc70e166b509 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/toposort?source=hash-mapping + size: 13603 + timestamp: 1677526421221 +- kind: conda + name: tqdm + version: 4.67.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.0-pyhd8ed1ab_0.conda + sha256: fb25b18cec1ebae56e7d7ebbd3e504f063b61a0fac17b1ca798fcaf205bdc874 + md5: 196a9e6ab4e036ceafa516ea036619b0 + depends: + - colorama + - python >=3.7 + license: MPL-2.0 or MIT + purls: + - pkg:pypi/tqdm?source=hash-mapping + size: 89434 + timestamp: 1730926216380 +- kind: conda + name: traitlets + version: 5.14.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 + md5: 3df84416a021220d8b5700c613af2dc5 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + size: 110187 + timestamp: 1713535244513 +- kind: conda + name: truststore + version: 0.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.0-pyhd8ed1ab_0.conda + sha256: 0d23d3b370fc0393d05468fbff5152826317d4495446f6b2cc4d446e21050808 + md5: ad1c20cd193e3044bcf17798c33b9d67 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/truststore?source=hash-mapping + size: 21799 + timestamp: 1729762456098 +- kind: conda + name: typer + version: 0.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typer-0.13.0-pyhd8ed1ab_0.conda + sha256: f3661edc36aaf69c03323f0a2b71bbbfdf3c11ed1fe1c9c6f486ac1b53e11aa1 + md5: 0d2754390dab3d584823f497d1ab8704 + depends: + - python >=3.9 + - typer-slim-standard 0.13.0 hd8ed1ab_0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/typer?source=hash-mapping + size: 54855 + timestamp: 1731015674090 +- kind: conda + name: typer-slim + version: 0.13.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.13.0-pyhff2d567_0.conda + sha256: 6e23932ebef6b09b68a9667596952af4f81167b4b50a182ac70316ec224322fc + md5: 5fcd867cf0b4498002731d44621c0b58 + depends: + - click >=8.0.0 + - python >=3.9 + - typing_extensions >=3.7.4.3 + constrains: + - typer >=0.13.0,<0.13.1.0a0 + - shellingham >=1.3.0 + - rich >=10.11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/typer-slim?source=hash-mapping + size: 43166 + timestamp: 1731015659531 +- kind: conda + name: typer-slim-standard + version: 0.13.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.13.0-hd8ed1ab_0.conda + sha256: 402d1c872adb1dda436d563e03280750419367fb808a9ee7811f1335f218e8bc + md5: fe8bb6071bf1c47b38bc65f848847059 + depends: + - rich + - shellingham + - typer-slim 0.13.0 pyhff2d567_0 + license: MIT + license_family: MIT + purls: [] + size: 48480 + timestamp: 1731015660139 +- kind: conda + name: typing-extensions + version: 4.12.2 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 + md5: 52d648bd608f5737b123f510bb5514b5 + depends: + - typing_extensions 4.12.2 pyha770c72_0 + license: PSF-2.0 + license_family: PSF + purls: [] + 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 + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ubiquerg + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ubiquerg-0.8.0-pyhd8ed1ab_0.conda + sha256: ad56b48194d59a640be34432b0acdebe6e5520a86f5e2d0eabab567fc4976d53 + md5: 41408dc37271d5d0f99e2e10336cf40d + depends: + - python >=3.6 + - veracitools + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/ubiquerg?source=hash-mapping + size: 20698 + timestamp: 1719492750373 +- kind: conda + name: urllib3 + version: 1.26.19 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda + sha256: 543ebab5241418a4e0d4d9e356ef13e4361504810a067a01481660bb35eb5643 + md5: 6bb37c314b3cc1515dcf086ffe01c46e + depends: + - brotli-python >=1.0.9 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping + size: 115125 + timestamp: 1718728467518 +- 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 + purls: + - pkg:pypi/veracitools?source=hash-mapping + size: 6108 + timestamp: 1572717780817 +- kind: conda + name: wcwidth + version: 0.2.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 + md5: 68f0738df502a14213624b288c60c9ad + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wcwidth?source=hash-mapping + size: 32709 + timestamp: 1704731373922 +- 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 + purls: + - pkg:pypi/wrapt?source=hash-mapping + 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 + purls: + - pkg:pypi/wrapt?source=hash-mapping + size: 58290 + timestamp: 1724958107514 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h775f41a_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 + sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 + md5: a72f9d4ea13d55d745ff1ed594747f10 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 238119 + timestamp: 1660346964847 +- kind: conda + name: yaml + version: 0.2.5 + build: h0d85af4_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 + sha256: 5301417e2c8dea45b401ffee8df3957d2447d4ce80c83c5ff151fc6bfe1c4148 + md5: d7e08fcf8259d742156188e8762b4d20 + license: MIT + license_family: MIT + purls: [] + size: 84237 + timestamp: 1641347062780 +- kind: conda + name: yaml + version: 0.2.5 + build: h7f98852_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 + md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 89141 + timestamp: 1641346969816 +- kind: conda + name: yaml-cpp + version: 0.8.0 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda + sha256: a65bb5284369e548a15a44b14baf1f7ac34fa4718d7d987dd29032caba2ecf20 + md5: 965eaacd7c18eb8361fd12bb9e7a57d7 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + 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 + purls: [] + size: 130328 + timestamp: 1695710502498 +- kind: conda + name: yte + version: 1.5.4 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/yte-1.5.4-pyha770c72_0.conda + sha256: 772972b3e2ebeeb6dd2a3209b95c99b23d21c6657ebf2f758f9e63ccfa28dfc8 + md5: f4d2f4a372be452baebf8dbdcd9892ed + depends: + - dpath + - plac + - python >=3.7 + - pyyaml + license: MIT + license_family: MIT + purls: + - pkg:pypi/yte?source=hash-mapping + size: 14311 + timestamp: 1702295254855 +- kind: conda + name: zipp + version: 3.21.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda + sha256: 232a30e4b0045c9de5e168dda0328dc0e28df9439cdecdfb97dd79c1c82c4cec + md5: fee389bf8a4843bd7a2248ce11b7f188 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21702 + timestamp: 1731262194278 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7122b0e_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h7122b0e_1.conda + sha256: 2685dde42478fae0780fba5d1f8a06896a676ae105f215d32c9f9e76f3c6d8fd + md5: bd132ba98f3fc0a6067f355f8efe4cb6 + depends: + - __osx >=10.13 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + 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 + purls: + - pkg:pypi/zstandard?source=hash-mapping + 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 + purls: [] + 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 + purls: [] + size: 554846 + timestamp: 1714722996770 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 0000000000..8b017bf87d --- /dev/null +++ b/pixi.toml @@ -0,0 +1,68 @@ +[project] +authors = ["Mitchell Robert Vollger "] +channels = ["conda-forge", "bioconda"] +description = "Add a short description here" +name = "FIRE" +platforms = ["osx-64", "linux-64"] +version = "0.1.0" + +[tasks] +fmt = "ruff format . && taplo format pixi.toml && snakefmt workflow/" +test-data = { cmd = [ + "cd", + "$INIT_CWD", + "&&", + "mkdir", + "-p", + "fire-test-data", + "&&", + "aws", + "s3", + "--no-sign-request", + "sync", + "s3://stergachis-public1/FIRE/test-data", + "fire-test-data/", +] } +test = { cmd = [ + "cd", + "$INIT_CWD/fire-test-data", + "&&", + "snakemake", + "-s", + "$PIXI_PROJECT_ROOT/workflow/Snakefile", + "--configfile", + "test.yaml", + "-k", +], depends_on = [ + "test-data", +], clean-env = true } + +fire = { cmd = [ + "cd", + "$INIT_CWD", + "&&", + "snakemake", + "-s", + "$PIXI_PROJECT_ROOT/workflow/Snakefile", +] } +slurm = { cmd = [ + "cd", + "$INIT_CWD", + "&&", + "snakemake", + "-s", + "$PIXI_PROJECT_ROOT/workflow/Snakefile", + "--profile", + "$PIXI_PROJECT_ROOT/profiles/slurm-executor", +] } + +[dependencies] +conda = "*" +snakemake = "==8.21" +snakemake-executor-plugin-slurm = ">=0.11.2" +snakefmt = "*" +ruff = "*" +awscli = "2.22" +taplo = "*" + +[pypi-dependencies] diff --git a/profiles/slurm-executor/config.yaml b/profiles/slurm-executor/config.yaml index 9bee77e830..06588dfd98 100644 --- a/profiles/slurm-executor/config.yaml +++ b/profiles/slurm-executor/config.yaml @@ -6,6 +6,7 @@ default-resources: - disk_mb=4096 - mem_mb=16096 - runtime=120 + - slurm_partition=cpu-g2 # you can change the default account or partition by them to the default-resources. # Without these options it will default to stergachislab and compute when using hyak. # - slurm_partition=ckpt diff --git a/workflow/Snakefile b/workflow/Snakefile index e7213536fc..3322c700a3 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -4,18 +4,27 @@ # TODO get the container working # container: "docker://continuumio/miniconda3" + import pandas as pd import math import sys import os from snakemake.utils import min_version -min_version("8.12.0") +min_version("8.21.0") + # setup shared functions include: "rules/common.smk" +# load the version from the environment +VERSION = f"v{os.environ.get("PIXI_PROJECT_VERSION", "UNK")}" + +# thread options +MAX_THREADS = config.get("max_threads", 4) +SORT_THREADS = config.get("sort_threads", 8) + # reference genome and reference regions REF = get_ref() FAI = get_fai() @@ -42,32 +51,57 @@ else: MAX_PEAK_FDR = 1.0 MIN_FRAC_ACCESSIBLE = config.get("min_frac_accessible", 0) +# data filtering +FILTER_FLAG = config.get("samtools-filter-flag", "260") # 2308 + +# Misc options +NZOOMS = config.get("nzooms", 10) + # Misc sets of wildcards haps = ["all", "hap1", "hap2", "unk"] not_unk = ["all", "hap1", "hap2"] +all_only = ["all"] types = ["fdr", "acc", "link", "nuc"] types_to_col = {"fdr": 4, "acc": 5, "link": 6, "nuc": 7} bw_types = ["log_FDR"] # "score", "FDR", -bw_types = bw_types + [f"{t}_H1" for t in bw_types] + [f"{t}_H2" for t in bw_types] el_types = ["fire", "linker", "nucleosome"] + +# DSA options +DSA_CHAIN = config.get("chain", None) +DSA = DSA_CHAIN is not None +LEVIO_EXE = config.get("levio_exe", "leviosam2") + # developer options FT_EXE = config.get("ft_exe", "ft") +if FT_EXE != "ft": + print(f"INFO: Using FT_EXE: {FT_EXE}", file=sys.stderr) + ONT = config.get("ont", False) -USE_ONT = "" if ONT: - USE_ONT = " --ont --ml 225 " + ont_ml = config.get("ont_ml", 0) + if ont_ml != 0: + USE_ONT = f" --ont --ml {ont_ml} " + else: + USE_ONT = " --ont " +else: + USE_ONT = "" MIN_UNRELIABLE_COVERAGE_LEN = config.get("min_unreliable_coverage_len", 50) include: "rules/apply-model.smk" include: "rules/coverages.smk" -include: "rules/FDR-peaks.smk" -include: "rules/peak-stats.smk" +include: "rules/fire-peaks.smk" +include: "rules/stats.smk" include: "rules/decorated-reads.smk" include: "rules/track-hub.smk" +if DSA: + + include: "rules/levio.smk" + + wildcard_constraints: chrom="|".join(get_chroms()), call="|".join(["msp", "m6a"]), @@ -77,6 +111,7 @@ wildcard_constraints: hp="|".join(haps), col="|".join(bw_types), el_type="|".join(el_types), + v=VERSION, localrules: @@ -86,37 +121,51 @@ localrules: rule all: input: # coverage information - expand(rules.genome_bedgraph.output, sm=MANIFEST.index), - expand(rules.coverage.output, sm=MANIFEST.index), - expand(rules.exclude_from_shuffle.output, sm=MANIFEST.index), - expand(rules.unreliable_coverage_regions.output, sm=MANIFEST.index), - # model results - expand(rules.fire_sites.output, sm=MANIFEST.index), - # fiber locations - expand(rules.fiber_locations.output, sm=MANIFEST.index), - expand(rules.filtered_and_shuffled_fiber_locations.output, sm=MANIFEST.index), - # coverage of elements + expand(rules.coverage.output, sm=MANIFEST.index, v=VERSION), + expand(rules.exclude_from_shuffle.output, sm=MANIFEST.index, v=VERSION), + expand(rules.unreliable_coverage_regions.output, sm=MANIFEST.index, v=VERSION), expand( - rules.element_coverages.output, + rules.pileup.output.bed, sm=MANIFEST.index, - hp=not_unk, - el_type=el_types, + v=VERSION, ), - # FDR results - expand(rules.fdr_track.output, sm=MANIFEST.index), - expand(rules.fdr_peaks_by_fire_elements.output, sm=MANIFEST.index), - expand(rules.wide_fdr_peaks.output, sm=MANIFEST.index), - expand(rules.peaks_vs_percent.output, sm=MANIFEST.index), - expand(rules.one_percent_fdr_peaks.output, sm=MANIFEST.index), - expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index), + # model results + expand(rules.fire.output.cram, sm=MANIFEST.index, v=VERSION), + expand(rules.fire_sites.output, sm=MANIFEST.index, v=VERSION), + # Stats and Tables + expand(rules.fires_in_peaks.output.txt, sm=MANIFEST.index, v=VERSION), + expand(rules.ft_qc.output.tbl, sm=MANIFEST.index, v=VERSION), + # FIRE peaks + expand(rules.fdr_table.output.tbl, sm=MANIFEST.index, v=VERSION), + expand(rules.pileup.output.bed, sm=MANIFEST.index, v=VERSION), + expand(rules.fire_peaks.output.bed, sm=MANIFEST.index, v=VERSION), + expand(rules.wide_fire_peaks.output.bed, sm=MANIFEST.index, v=VERSION), + expand(rules.one_percent_fire_peaks.output.bed, sm=MANIFEST.index, v=VERSION), + expand(rules.peaks_vs_percent.output.fig1, sm=MANIFEST.index, v=VERSION), + # haplotype differences + expand(rules.hap_differences.output.fig1, sm=MANIFEST.index, v=VERSION), + expand(rules.hap_differences.output.fig2, sm=MANIFEST.index, v=VERSION), + expand(rules.hap_differences.output.bed, sm=MANIFEST.index, v=VERSION), # trackhub - expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types), - expand(rules.fdr_peaks_by_fire_elements_to_bb.output.bb, sm=MANIFEST.index), - expand(rules.percent_accessible.output.bw, hp=not_unk, sm=MANIFEST.index), + expand(rules.fire_peaks_bb.output.bb, sm=MANIFEST.index, v=VERSION), + expand( + rules.percent_accessible.output.bw, + hp=not_unk, + sm=MANIFEST.index, + v=VERSION, + ), + expand(rules.decorate_fibers_1.output.bb, sm=MANIFEST.index, v=VERSION), + expand(rules.decorate_fibers_2.output.bb, sm=MANIFEST.index, v=VERSION), + expand(rules.hap_differences_track.output.bb, sm=MANIFEST.index, v=VERSION), expand( rules.element_coverages_bw.output.bw, sm=MANIFEST.index, - hp=not_unk, + hp=all_only, el_type=el_types, + v=VERSION, ), - expand(rules.trackhub.output, sm=MANIFEST.index), + expand(rules.trackhub.output.hub, sm=MANIFEST.index, v=VERSION), + + +# UNUSED +# expand(rules.fdr_track_to_bw.output.bw, sm=MANIFEST.index, col=bw_types), diff --git a/workflow/envs/env.yaml b/workflow/envs/env.yaml index 3aed0b9e72..04b2f46b27 100644 --- a/workflow/envs/env.yaml +++ b/workflow/envs/env.yaml @@ -7,15 +7,10 @@ dependencies: - samtools==1.19.1 - htslib==1.19.1 - bedtools==2.31 - - bioconda::fibertools-rs==0.5.3 - - bioconda::gia - - seqtk + - bioconda::fibertools-rs==0.6 - hck>=0.9.2 - bioawk - ripgrep - csvtk - - datamash - - parallel - mosdepth==0.3.7 - - bedops - bioconda::bigtools==0.5.4 diff --git a/workflow/envs/python.yaml b/workflow/envs/python.yaml index 8d338cbca7..b72cd8234a 100644 --- a/workflow/envs/python.yaml +++ b/workflow/envs/python.yaml @@ -5,13 +5,13 @@ channels: - bioconda - defaults dependencies: - - tqdm - defopt - numpy==1.24 # use this version to avoid cxx errors - - numba::numba==0.60 - pandas==1.4 # pandas versions later than this have cxx errors - - pysam==0.21 - htslib==1.19.1 - pip - pip: - - polars[pyarrow]==0.19 + - polars-lts-cpu[pyarrow]==1.7.1 +#- tqdm +#- numba::numba==0.60 +#- pysam==0.21 diff --git a/workflow/envs/runner.yaml b/workflow/envs/runner.yaml index 211d7e503d..dddf584ec6 100644 --- a/workflow/envs/runner.yaml +++ b/workflow/envs/runner.yaml @@ -1,13 +1,11 @@ name: runner channels: - - numba - conda-forge - bioconda - - defaults dependencies: - - tqdm - numpy - - pandas - - pip - - pip: - - pysam + - pandas==2.2.3 +#- tqdm +#- pip +#- pip: +#- pysam==0.22.1 diff --git a/workflow/profiles/default/config.yaml b/workflow/profiles/default/config.yaml index 0634954bd4..54c9b54ac2 100644 --- a/workflow/profiles/default/config.yaml +++ b/workflow/profiles/default/config.yaml @@ -1,11 +1,12 @@ rerun-incomplete: True show-failed-logs: True rerun-triggers: mtime -restart-times: 1 +restart-times: 0 software-deployment-method: - apptainer - conda -printshellcmds: True show-failed-logs: True cores: 32 local-cores: 4 +# printshellcmds: True +# quiet: rules # all rules or progress, cannot use all because it hides the unlock error message (and others?) \ No newline at end of file diff --git a/workflow/rules/apply-model.smk b/workflow/rules/apply-model.smk index d8c5a8a19d..9e6ad95590 100644 --- a/workflow/rules/apply-model.smk +++ b/workflow/rules/apply-model.smk @@ -4,131 +4,63 @@ rule fire: input: bam=ancient(get_input_bam), + ref=ancient(REF), output: - bam=temp("temp/{sm}/fire/{chrom}.fire.bam"), - threads: 8 + cram="results/{sm}/{sm}-fire-{v}-filtered.cram", + crai="results/{sm}/{sm}-fire-{v}-filtered.cram.crai", + threads: 32 resources: - mem_mb=8 * 1024, + mem_mb=32 * 1024, + runtime=600, params: min_msp=config.get("min_msp", 10), min_ave_msp_size=config.get("min_ave_msp_size", 10), use_ont=USE_ONT, + flag=FILTER_FLAG, + benchmark: + "results/{sm}/additional-outputs-{v}/benchmarks/{sm}-fire-bam.txt" conda: DEFAULT_ENV shell: """ - samtools view -F 2308 -u -@ {threads} {input.bam} {wildcards.chrom} \ - | {FT_EXE} fire -t {threads} \ + samtools view -@ {threads} -u -F {params.flag} {input.bam} \ + | {FT_EXE} fire -F {params.flag} -t {threads} \ {params.use_ont} \ --min-msp {params.min_msp} \ --min-ave-msp-size {params.min_ave_msp_size} \ --skip-no-m6a \ - - {output.bam} - """ - - -rule merged_fire_bam: - input: - ref=ancient(REF), - fai=ancient(FAI), - bams=expand(rules.fire.output.bam, chrom=get_chroms(), allow_missing=True), - output: - cram="results/{sm}/fire/{sm}.fire.cram", - crai="results/{sm}/fire/{sm}.fire.cram.crai", - threads: 16 - resources: - mem_mb=16 * 1024, - runtime=300, - conda: - DEFAULT_ENV - benchmark: - "results/{sm}/benchmarks/merged_fire_bam/{sm}.txt" - shell: - """ - samtools merge -@ {threads} -u {input.bams} -o - \ - | samtools view \ - -C -@ {threads} \ - -T {input.ref} \ + - - \ + | samtools view -C -@ {threads} -T {input.ref} \ + --output-fmt-option embed_ref=1 \ + | samtools view -C -@ {threads} -T {input.ref} \ --output-fmt-option embed_ref=1 \ - --write-index \ - -o {output.cram} + --input-fmt-option required_fields=0x1bff \ + --write-index -o {output.cram} """ -rule extract_from_fire: +rule fire_sites_chrom: input: - bam=rules.fire.output.bam, + cram=rules.fire.output.cram, output: - bed=temp("temp/{sm}/chrom/{chrom}.sorted.bed.gz"), + bed=temp("temp/{sm}/chrom/{v}-{chrom}.sorted.bed.gz"), threads: 4 conda: DEFAULT_ENV resources: mem_mb=16 * 1024, - priority: 10 - shell: - """ - {FT_EXE} fire -t {threads} --all --extract {input.bam} \ - | LC_ALL=C sort \ - --parallel={threads} \ - -k1,1 -k2,2n -k3,3n -k4,4 \ - | bgzip -@ {threads} \ - > {output.bed} - """ - - -rule merge_model_results: - input: - beds=expand( - rules.extract_from_fire.output.bed, chrom=get_chroms(), allow_missing=True - ), - output: - bed=temp("temp/{sm}/fiber-calls/model.results.bed.gz"), - threads: 8 - conda: - DEFAULT_ENV - params: - n_chunks=len(get_chroms()) + 1, - benchmark: - "results/{sm}/benchmarks/merge_model_results/{sm}.txt" - priority: 20 - shell: - """ - cat {input.beds} > {output.bed} - """ - - -rule index_model_results: - input: - bed=rules.merge_model_results.output.bed, - output: - tbi=temp(rules.merge_model_results.output.bed + ".tbi"), - conda: - DEFAULT_ENV - shell: - """ - tabix -p bed {input.bed} - """ - - -rule fire_sites_chrom: - input: - bed=rules.merge_model_results.output.bed, - tbi=rules.index_model_results.output.tbi, - output: - bed=temp("temp/{sm}/fiber-calls/{chrom}/FIRE.bed.gz"), - threads: 4 - conda: - DEFAULT_ENV params: min_fdr=MIN_FIRE_FDR, shell: """ - tabix {input.bed} {wildcards.chrom} \ - | bioawk -tc hdr '$10<={params.min_fdr}' \ - | (grep '\\S' || true) \ - | (grep -v '^#' || true) \ - | bgzip -@{threads} \ + samtools view -@ {threads} -u {input.cram} {wildcards.chrom} \ + | {FT_EXE} fire -t {threads} --extract - \ + | LC_ALL=C sort --parallel={threads} \ + -k1,1 -k2,2n -k3,3n -k4,4 \ + | bioawk -tc hdr '$10<={params.min_fdr}' \ + | (grep '\\S' || true) \ + | (grep -v '^#' || true) \ + | bgzip -@ {threads} \ > {output.bed} """ @@ -139,12 +71,10 @@ rule fire_sites: rules.fire_sites_chrom.output.bed, chrom=get_chroms(), allow_missing=True ), output: - bed="results/{sm}/fiber-calls/FIRE.bed.gz", - threads: 8 + bed="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fire-elements.bed.gz", + threads: 1 conda: DEFAULT_ENV - params: - min_fdr=MIN_FIRE_FDR, shell: """ cat {input.beds} > {output.bed} @@ -163,126 +93,3 @@ rule fire_sites_index: """ tabix -p bed {input.bed} """ - - -rule split_by_hap_per_chrom: - input: - bed=rules.merge_model_results.output.bed, - tbi=rules.index_model_results.output.tbi, - fai=ancient(FAI), - output: - both=pipe("temp/{sm}/coverage/all/{chrom}.bed"), - H1=pipe("temp/{sm}/coverage/hap1/{chrom}.bed"), - H2=pipe("temp/{sm}/coverage/hap2/{chrom}.bed"), - conda: - DEFAULT_ENV - resources: - disk_mb=100, - runtime=240, - mem_mb=4 * 1024, - shell: - """ - tabix {input.bed} {wildcards.chrom} | tee \ - >( (rg -w H1 || true) > {output.H1} ) \ - >( (rg -w H2 || true) > {output.H2} ) \ - > {output.both} - """ - - -rule split_hap_by_element_type_per_chrom: - input: - bed="temp/{sm}/coverage/{hp}/{chrom}.bed", - fai=ancient(FAI), - output: - fire=temp("temp/{sm}/coverage/{hp}/fire_{chrom}.bed.gz"), - link=temp("temp/{sm}/coverage/{hp}/linker_{chrom}.bed.gz"), - nuc=temp("temp/{sm}/coverage/{hp}/nucleosome_{chrom}.bed.gz"), - params: - min_fire_fdr=MIN_FIRE_FDR, - threads: 2 - conda: - DEFAULT_ENV - resources: - disk_mb=100, - mem_mb=8 * 1024, - shell: - """ - cat {input.bed} | tee \ - >( awk '$10<={params.min_fire_fdr}' \ - | bedtools genomecov -bg -i - -g {input.fai} \ - | bgzip > {output.fire} \ - ) \ - >( awk '$10<=1.0 && $10>{params.min_fire_fdr}' \ - | bedtools genomecov -bg -i - -g {input.fai} \ - | bgzip > {output.link} \ - ) \ - | awk '$10>1.0' \ - | bedtools genomecov -bg -i - -g {input.fai} \ - | bgzip > {output.nuc} - - # check if files are empty and if they are add a fake data line - for f in {output.fire} {output.link} {output.nuc}; do - HAS_LINES=$(zcat $f | head | grep -cv '^#') || true - if [ $HAS_LINES -eq 0 ]; then - printf "{wildcards.chrom}\\t0\\t1\\t0\\n" \ - | bgzip -@{threads} > $f - fi - done - """ - - -rule element_coverages_per_chrom: - input: - beds=expand( - "temp/{sm}/coverage/{hp}/{el_type}_{chrom}.bed.gz", - el_type=el_types, - allow_missing=True, - ), - output: - bed=temp("temp/{sm}/coverage/{hp}_{chrom}_element_coverages.bed.gz"), - conda: - DEFAULT_ENV - params: - names="\t".join(el_types), - resources: - runtime=300, - threads: 2 - shell: - """ - HAS_LINES=$(zcat {input.beds} | head | grep -cv '^#') || true - if [ $HAS_LINES -eq 0 ]; then - echo "No element coverages found for {wildcards.sm} {wildcards.hp} {wildcards.chrom}" - printf "#chrom\\tstart\\tend\\t{params.names}\\n{wildcards.chrom}\\t0\\t1\\t0\\t0\\t0\\n" \ - | bgzip -@{threads} \ - > {output.bed} - else - # bedtools unionbedg -header -i {input.beds} -names {params.names} - # | sed 's/^chrom/#chrom/' - ( \ - printf "#chrom\\tstart\\tend\\t{params.names}\\n"; \ - gia unionbedg -s -i {input.beds} \ - ) \ - | bgzip -@ {threads} \ - > {output.bed} - fi - """ - - -rule element_coverages: - input: - beds=expand( - rules.element_coverages_per_chrom.output.bed, - chrom=get_chroms(), - allow_missing=True, - ), - output: - bed="results/{sm}/coverage/{hp}_element_coverages.bed.gz", - tbi="results/{sm}/coverage/{hp}_element_coverages.bed.gz.tbi", - conda: - DEFAULT_ENV - threads: 1 - shell: - """ - cat {input.beds} > {output.bed} - tabix -p bed {output.bed} - """ diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index bcf267d4ba..2dec22b795 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -11,7 +11,7 @@ def get_ref(): ref = config["ref"] if not os.path.exists(ref): raise ValueError(f"FIRE: reference file {ref} does not exist") - return ref + return os.path.abspath(ref) def get_fai(): @@ -25,8 +25,8 @@ def get_excludes(): excludes = config.get("excludes", []) if REF_NAME == "hg38" or REF_NAME == "GRCh38": files = [ - "../annotations/hg38.blacklist.ENCFF356LFX.bed.gz", "../annotations/hg38.gap.bed.gz", + "../annotations/hg38.blacklist.ENCFF356LFX.bed.gz", "../annotations/SDs.merged.hg38.bed.gz", ] excludes += [workflow.source_path(file) for file in files] @@ -105,34 +105,32 @@ def get_load(wc): return 50 -def grep_command_for_el_type(wc): - if wc.el_type == "nucleosome": - return "awk '$10>1.0'" - elif wc.el_type == "linker": - return f"awk '$10<=1.0 && $10>{MIN_FIRE_FDR}'" - elif wc.el_type == "fire": - return f"awk '$10<={MIN_FIRE_FDR}'" - else: - raise ValueError(f"Unknown element type {wc.el_type}") - - -def hap_grep_term(wc): +def get_hap_col_suffix(wc): if wc.hp == "all": - return '""' + return "" elif wc.hp == "hap1": - return "H1" + return "_H1" elif wc.hp == "hap2": - return "H2" + return "_H2" else: raise ValueError(f"Unknown haplotype {wc.hp}") -def hap_hck_columns(wc): +def pileup_cut_cmd(wc): if wc.hp == "all": - return "-F fire_coverage -F coverage" + tail = "" elif wc.hp == "hap1": - return "-F fire_coverage_H1 -F coverage_H1" + tail = "_H1" elif wc.hp == "hap2": - return "-F fire_coverage_H2 -F coverage_H2" + tail = "_H2" else: raise ValueError(f"Unknown haplotype {wc.hp}") + if wc.el_type == "nucleosome": + col = f"$nuc_coverage{tail}" + elif wc.el_type == "linker": + col = f"$msp_coverage{tail}-$fire_coverage{tail}" + elif wc.el_type == "fire": + col = f"$fire_coverage{tail}" + else: + raise ValueError(f"Unknown element type {wc.el_type}") + return f"bioawk -tc hdr '{{print $1,$2,$3,{col}}}'" diff --git a/workflow/rules/coverages.smk b/workflow/rules/coverages.smk index 990416c9af..05f537c45b 100644 --- a/workflow/rules/coverages.smk +++ b/workflow/rules/coverages.smk @@ -5,22 +5,20 @@ rule genome_bedgraph: input: ref=ancient(REF), fai=ancient(FAI), - cram=rules.merged_fire_bam.output.cram, - crai=rules.merged_fire_bam.output.crai, + cram=rules.fire.output.cram, + crai=rules.fire.output.crai, output: - bg="results/{sm}/coverage/{sm}.bed.gz", - tbi="results/{sm}/coverage/{sm}.bed.gz.tbi", + bg=temp("temp/{sm}/coverage/{sm}-{v}.bed.gz"), + tbi=temp("temp/{sm}/coverage/{sm}-{v}.bed.gz.tbi"), threads: 16 shadow: "minimal" conda: DEFAULT_ENV - benchmark: - "results/{sm}/benchmarks/genome_bedgraph/{sm}.txt" shell: """ mosdepth -f {input.ref} -t {threads} tmp {input.cram} - zcat tmp.per-base.bed.gz \ + bgzip -cd tmp.per-base.bed.gz \ | LC_ALL=C sort --parallel={threads} -k1,1 -k2,2n -k3,3n -k4,4 \ | bgzip -@ {threads} \ > {output.bg} @@ -32,16 +30,16 @@ rule coverage: input: bg=rules.genome_bedgraph.output.bg, output: - cov="results/{sm}/coverage/{sm}.median.coverage.txt", - minimum="results/{sm}/coverage/{sm}.minimum.coverage.txt", - maximum="results/{sm}/coverage/{sm}.maximum.coverage.txt", + cov="results/{sm}/additional-outputs-{v}/coverage/{sm}-{v}-median-coverage.txt", + minimum="results/{sm}/additional-outputs-{v}/coverage/{sm}-{v}-minimum-coverage.txt", + maximum="results/{sm}/additional-outputs-{v}/coverage/{sm}-{v}-maximum-coverage.txt", conda: "../envs/python.yaml" threads: 1 resources: mem_mb=64 * 1024, benchmark: - "results/{sm}/benchmarks/coverage/{sm}.txt" + "results/{sm}/additional-outputs-{v}/benchmarks/coverage/{sm}.txt" params: coverage_within_n_sd=COVERAGE_WITHIN_N_SD, min_coverage=MIN_COVERAGE, @@ -55,17 +53,17 @@ rule coverage: # rule fiber_locations_chromosome: input: - cram=rules.merged_fire_bam.output.cram, - crai=rules.merged_fire_bam.output.crai, + cram=rules.fire.output.cram, + crai=rules.fire.output.crai, output: - bed=temp("temp/{sm}/coverage/{chrom}.fiber-locations.bed.gz"), - threads: 8 + bed=temp("temp/{sm}/coverage/{v}-{chrom}.fiber-locations.bed.gz"), + threads: 4 conda: DEFAULT_ENV shell: """ # get fiber locations - (samtools view -@ {threads} -F 2308 -u {input.cram} {wildcards.chrom} \ + (samtools view -@ {threads} -u {input.cram} {wildcards.chrom} \ | {FT_EXE} extract -t {threads} -s --all - \ | hck -F '#ct' -F st -F en -F fiber -F strand -F HP ) \ | (grep -v "^#" || true) \ @@ -85,13 +83,19 @@ rule fiber_locations: minimum=rules.coverage.output.minimum, maximum=rules.coverage.output.maximum, output: - bed="results/{sm}/coverage/fiber-locations.bed.gz", - bed_tbi="results/{sm}/coverage/fiber-locations.bed.gz.tbi", - filtered="results/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz", - filtered_tbi="results/{sm}/coverage/filtered-for-coverage/fiber-locations.bed.gz.tbi", + bed=temp("temp/{sm}/coverage/{v}-fiber-locations.bed.gz"), + bed_tbi=temp("temp/{sm}/coverage/{v}-fiber-locations.bed.gz.tbi"), + filtered=temp( + "temp/{sm}/coverage/filtered-for-coverage/{v}-fiber-locations.bed.gz" + ), + filtered_tbi=temp( + "temp/{sm}/coverage/filtered-for-coverage/{v}-fiber-locations.bed.gz.tbi" + ), threads: 4 conda: DEFAULT_ENV + params: + max_frac_overlap=0.2, shell: """ cat {input.fibers} > {output.bed} @@ -100,9 +104,9 @@ rule fiber_locations: # get filtered fiber locations MIN=$(cat {input.minimum}) MAX=$(cat {input.maximum}) - bedtools intersect -header -sorted -v -f 0.2 \ + bedtools intersect -header -sorted -v -f {params.max_frac_overlap} \ -a {output.bed} \ - -b <(zcat {input.bg} | awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX') \ + -b <(bgzip -cd {input.bg} | awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX') \ | bgzip -@ {threads} \ > {output.filtered} tabix -f -p bed {output.filtered} @@ -117,7 +121,7 @@ rule exclude_from_shuffle: filtered=rules.fiber_locations.output.filtered, fai=ancient(FAI), output: - bed="results/{sm}/coverage/exclude-from-shuffles.bed.gz", + bed="results/{sm}/additional-outputs-{v}/coverage/exclude-from-shuffles.bed.gz", threads: 4 conda: DEFAULT_ENV @@ -145,9 +149,9 @@ rule unreliable_coverage_regions: maximum=rules.coverage.output.maximum, fai=ancient(FAI), output: - bed="results/{sm}/coverage/unreliable-coverage-regions.bed.gz", - bed_tbi="results/{sm}/coverage/unreliable-coverage-regions.bed.gz.tbi", - bb="results/{sm}/trackHub/bb/unreliable-coverage-regions.bb", + bed="results/{sm}/additional-outputs-{v}/coverage/unreliable-coverage-regions.bed.gz", + bed_tbi="results/{sm}/additional-outputs-{v}/coverage/unreliable-coverage-regions.bed.gz.tbi", + bb="results/{sm}/trackHub-{v}/bb/unreliable-coverage-regions.bb", threads: 4 params: min_len=MIN_UNRELIABLE_COVERAGE_LEN, @@ -158,7 +162,7 @@ rule unreliable_coverage_regions: """ MIN=$(cat {input.minimum}) MAX=$(cat {input.maximum}) - zcat {input.bg} \ + bgzip -cd {input.bg} \ | awk '$4>0' \ | awk -v MAX="$MAX" -v MIN="$MIN" '$4 <= MIN || $4 >= MAX' \ | bedtools merge -i - \ diff --git a/workflow/rules/decorated-reads.smk b/workflow/rules/decorated-reads.smk index d05a9fceea..3442185966 100644 --- a/workflow/rules/decorated-reads.smk +++ b/workflow/rules/decorated-reads.smk @@ -1,13 +1,19 @@ +# Number of items to bundle in r-tree [default: 256] +BLOCK_SIZE = 256 * 8 +# Number of data points bundled at lowest level [default: 1024] +ITEMS_PER_SLOT = 1024 * 8 + + rule decorate_fibers_chromosome: input: - cram=rules.merged_fire_bam.output.cram, - crai=rules.merged_fire_bam.output.crai, + cram=rules.fire.output.cram, + crai=rules.fire.output.crai, output: - bed=temp("temp/{sm}/decorate/{chrom}.bed.gz"), - decorated=temp("temp/{sm}/decorate/{chrom}.dec.bed.gz"), - threads: 8 + bed=temp("temp/{sm}/decorate/{v}-{chrom}.bed.gz"), + decorated=temp("temp/{sm}/decorate/{v}-{chrom}.dec.bed.gz"), + threads: 4 resources: - mem_mb=get_large_mem_mb, + mem_mb=get_mem_mb, conda: DEFAULT_ENV shell: @@ -29,23 +35,29 @@ rule decorate_fibers_1: ), fai=ancient(FAI), output: - bed="results/{sm}/fiber-calls/fire-fibers.bed.gz", - bb="results/{sm}/trackHub/bb/fire-fibers.bb", + #bed=temp("temp/{sm}/fiber-calls/fire-fibers.bed.gz"), + bb="results/{sm}/trackHub-{v}/bb/fire-fibers.bb", benchmark: - "results/{sm}/benchmarks/decorate_fibers_1/{sm}.txt" - threads: 1 + "results/{sm}/additional-outputs-{v}/benchmarks/decorate_fibers_1/{sm}.txt" + threads: 8 resources: runtime=240, conda: DEFAULT_ENV params: bed_as=workflow.source_path("../templates/bed12_filter.as"), + nzooms=NZOOMS, + items_per_slot=ITEMS_PER_SLOT, + block_size=BLOCK_SIZE, shell: + # bigtools version """ - cat {input.bed} > {output.bed} - - bgzip -cd -@ {threads} {output.bed} \ + cat {input.bed} \ + | bgzip -cd -@ {threads} \ | bigtools bedtobigbed \ + --inmemory \ + --block-size {params.block_size} --items-per-slot {params.items_per_slot} \ + --nzooms {params.nzooms} \ -s start -a {params.bed_as} \ - {input.fai} {output.bb} """ @@ -60,22 +72,43 @@ rule decorate_fibers_2: ), fai=ancient(FAI), output: - bb="results/{sm}/trackHub/bb/fire-fiber-decorators.bb", + bb="results/{sm}/trackHub-{v}/bb/fire-fiber-decorators.bb", + #bed=temp("temp/{sm}/trackHub-{v}/bb/fire-fiber-decorators.bed.gz"), benchmark: - "results/{sm}/benchmarks/decorate_fibers_2/{sm}.txt" - threads: 1 + "results/{sm}/additional-outputs-{v}/benchmarks/decorate_fibers_2/{sm}.txt" + threads: 8 resources: runtime=60 * 16, conda: DEFAULT_ENV params: dec_as=workflow.source_path("../templates/decoration.as"), + nzooms=NZOOMS, + items_per_slot=ITEMS_PER_SLOT, + block_size=BLOCK_SIZE, shell: + # bigtools version + # for some reason filtering out NUCs removes the display bug for bigtools + # at least in my test cases """ cat {input.decorated} \ | bgzip -cd -@ {threads} \ | rg -v '^#' \ + | rg -vw 'NUC' \ | bigtools bedtobigbed \ + --inmemory \ + --block-size {params.block_size} --items-per-slot {params.items_per_slot} \ + --nzooms {params.nzooms} \ -a {params.dec_as} -s start \ - {input.fai} {output.bb} """ + + +if False: + # UCSC version + """ + cat {input.decorated} > {output.bed} + bedToBigBed \ + -allow1bpOverlap -type=bed12+ -as={params.dec_as} \ + {output.bed} {input.fai} {output.bb} + """ diff --git a/workflow/rules/FDR-peaks.smk b/workflow/rules/fire-peaks.smk similarity index 62% rename from workflow/rules/FDR-peaks.smk rename to workflow/rules/fire-peaks.smk index bbe1fa331f..6d5f2428d7 100644 --- a/workflow/rules/FDR-peaks.smk +++ b/workflow/rules/fire-peaks.smk @@ -1,16 +1,18 @@ rule filtered_and_shuffled_fiber_locations_chromosome: input: filtered=rules.fiber_locations.output.filtered, + filtered_tbi=rules.fiber_locations.output.filtered_tbi, exclude=rules.exclude_from_shuffle.output.bed, fai=ancient(FAI), output: - shuffled=temp("temp/{sm}/coverage/{chrom}.fiber-locations-shuffled.bed.gz"), + shuffled=temp("temp/{sm}/shuffle/{v}-{chrom}.fiber-locations-shuffled.bed.gz"), threads: 4 conda: DEFAULT_ENV shell: """ - tabix -h {input.filtered} {wildcards.chrom} \ + tabix {input.filtered} {wildcards.chrom} \ + | bioawk -t '{{print $1,$2,$3,$4,$2}}' \ | bedtools shuffle -chrom -seed 42 \ -excl {input.exclude} \ -i - \ @@ -21,21 +23,42 @@ rule filtered_and_shuffled_fiber_locations_chromosome: """ -rule filtered_and_shuffled_fiber_locations: +rule shuffled_pileup_chromosome: input: - shuffled=expand( - rules.filtered_and_shuffled_fiber_locations_chromosome.output.shuffled, + cram=rules.fire.output.cram, + shuffled=rules.filtered_and_shuffled_fiber_locations_chromosome.output.shuffled, + output: + bed=temp("temp/{sm}/shuffle/{v}-{chrom}.pileup.bed.gz"), + threads: 4 + conda: + DEFAULT_ENV + shell: + """ + {FT_EXE} pileup {input.cram} {wildcards.chrom} -t {threads} \ + --fiber-coverage --shuffle {input.shuffled} \ + --no-msp --no-nuc \ + | bgzip -@ {threads} \ + > {output.bed} + """ + + +rule shuffled_pileup: + input: + beds=expand( + rules.shuffled_pileup_chromosome.output.bed, chrom=get_chroms(), allow_missing=True, ), output: - shuffled="results/{sm}/coverage/filtered-for-coverage/fiber-locations-shuffled.bed.gz", - threads: 1 + bed=temp("temp/{sm}/shuffle/{v}-shuffled-pileup.bed.gz"), + tbi=temp("temp/{sm}/shuffle/{v}-shuffled-pileup.bed.gz.tbi"), + threads: 4 conda: DEFAULT_ENV shell: """ - cat {input.shuffled} > {output.shuffled} + cat {input.beds} > {output.bed} + tabix -p bed {output.bed} """ @@ -44,65 +67,70 @@ rule filtered_and_shuffled_fiber_locations: # rule fdr_table: input: - fire=rules.fire_sites.output.bed, - fiber_locations=rules.fiber_locations.output.filtered, - shuffled=rules.filtered_and_shuffled_fiber_locations.output.shuffled, - fai=ancient(FAI), + shuffled=rules.shuffled_pileup.output.bed, + minimum=rules.coverage.output.minimum, + maximum=rules.coverage.output.maximum, output: - tbl="results/{sm}/FDR-peaks/FIRE.score.to.FDR.tbl", - benchmark: - "results/{sm}/benchmarks/fdr_table/{sm}.txt" - threads: 8 + tbl="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fire-score-to-fdr.tbl", conda: "../envs/python.yaml" params: - script=workflow.source_path("../scripts/fire-null-distribution.py"), + script=workflow.source_path("../scripts/fdr-table.py"), resources: mem_mb=get_mem_mb, shell: """ - python {params.script} -v 1 {input.fire} {input.fiber_locations} {input.fai} -s {input.shuffled} -o {output.tbl} + MIN=$(cat {input.minimum}) + MAX=$(cat {input.maximum}) + python {params.script} -v 1 {input.shuffled} {output.tbl} --max-cov $MAX --min-cov $MIN + """ + + +# Colnames made by this +# #chrom start end +# coverage fire_coverage score nuc_coverage msp_coverage +# coverage_H1 fire_coverage_H1 score_H1 nuc_coverage_H1 msp_coverage_H1 +# coverage_H2 fire_coverage_H2 score_H2 nuc_coverage_H2 msp_coverage_H2 +rule pileup_chromosome: + input: + bam=rules.fire.output.cram, + output: + bed=temp("temp/{sm}/{v}-{chrom}.pileup.bed.gz"), + threads: 4 + conda: + DEFAULT_ENV + shell: + """ + {FT_EXE} pileup -t {threads} \ + --haps --fiber-coverage \ + {input.bam} {wildcards.chrom} \ + | bgzip -@ {threads} \ + > {output.bed} """ rule fdr_track_chromosome: input: - fire=rules.fire_sites.output.bed, - fire_tbi=rules.fire_sites_index.output.tbi, - fiber_locations=rules.fiber_locations.output.bed, - fai=ancient(FAI), + pileup=rules.pileup_chromosome.output.bed, fdr_tbl=rules.fdr_table.output.tbl, output: - fire=temp("temp/{sm}/FDR-peaks/{chrom}-fire.bed"), - fiber=temp("temp/{sm}/FDR-peaks/{chrom}-fiber.bed"), - bed=temp("temp/{sm}/FDR-peaks/{chrom}-FDR.track.bed"), - threads: 8 + bed=temp("temp/{sm}/fire-peaks/{v}-{chrom}-FDR.track.bed"), + threads: 4 conda: "../envs/python.yaml" params: - script=workflow.source_path("../scripts/fire-null-distribution.py"), + script=workflow.source_path("../scripts/fdr-table.py"), resources: mem_mb=get_mem_mb_xl, shell: """ - tabix -h {input.fire} {wildcards.chrom} > {output.fire} - tabix -h {input.fiber_locations} {wildcards.chrom} > {output.fiber} - - # check if file is empty - if [ ! -s {output.fire} ]; then - echo "No FIRE sites for {wildcards.chrom}" - touch {output} - exit 0 - fi - python {params.script} -v 1 \ - {output.fire} {output.fiber} \ - {input.fai} -f {input.fdr_tbl} \ - -o {output.bed} + --fdr-table {input.fdr_tbl} \ + {input.pileup} {output.bed} """ -rule fdr_track: +rule pileup: input: beds=expand( rules.fdr_track_chromosome.output.bed, @@ -110,10 +138,10 @@ rule fdr_track: allow_missing=True, ), output: - fofn=temp("temp/{sm}/FDR-peaks/FDR.track.fofn"), - bed="results/{sm}/FDR-peaks/FDR.track.bed.gz", - tbi="results/{sm}/FDR-peaks/FDR.track.bed.gz.tbi", - threads: 8 + fofn=temp("temp/{sm}/fire/fire-{v}-pileup.fofn"), + bed="results/{sm}/{sm}-fire-{v}-pileup.bed.gz", + tbi="results/{sm}/{sm}-fire-{v}-pileup.bed.gz.tbi", + threads: 4 conda: DEFAULT_ENV shell: @@ -137,40 +165,14 @@ rule fdr_track: """ -rule fdr_track_filtered: - input: - bed=rules.fdr_track.output.bed, - minimum=rules.coverage.output.minimum, - maximum=rules.coverage.output.maximum, - output: - bed="results/{sm}/FDR-peaks/FDR.track.coverage.filtered.bed.gz", - tbi="results/{sm}/FDR-peaks/FDR.track.coverage.filtered.bed.gz.tbi", - threads: 8 - conda: - DEFAULT_ENV - shell: - """ - MIN=$(cat {input.minimum}) - MAX=$(cat {input.maximum}) - - ( \ - zcat {input.bed} | head -n 1 || true; \ - zcat {input.bed} | bioawk -tc hdr -v MAX=$MAX -v MIN=$MIN '$coverage > MIN && $coverage < MAX' \ - ) \ - | bgzip -@ {threads} \ - > {output.bed} - tabix -f -p bed {output.bed} - """ - - rule helper_fdr_peaks_by_fire_elements: input: - bed=rules.fdr_track.output.bed, - tbi=rules.fdr_track.output.tbi, + bed=rules.pileup.output.bed, + tbi=rules.pileup.output.tbi, fire=rules.fire_sites.output.bed, fire_tbi=rules.fire_sites_index.output.tbi, output: - bed=temp("temp/{sm}/FDR-peaks/{chrom}-FDR-FIRE-peaks.bed.gz"), + bed=temp("temp/{sm}/fire-peaks/{v}-{chrom}-fire-peaks.bed.gz"), threads: 2 conda: DEFAULT_ENV @@ -179,7 +181,7 @@ rule helper_fdr_peaks_by_fire_elements: min_per_acc_peak=MIN_PER_ACC_PEAK, shell: """ - HEADER=$(zcat {input.bed} | head -n 1 || true) + HEADER=$(bgzip -cd {input.bed} | head -n 1 || true) NC=$(echo $HEADER | awk '{{print NF}}' || true) FIRE_CT=$((NC+1)) FIRE_ST=$((NC+2)) @@ -193,10 +195,10 @@ rule helper_fdr_peaks_by_fire_elements: ( \ printf "$OUT_HEADER\\n"; \ tabix -h {input.bed} {wildcards.chrom} \ - | rg -w "#chrom|True" \ + | bioawk -tc hdr '(NR==1)||($is_local_max=="true")' \ | csvtk filter -tT -C '$' -f "FDR<={params.max_peak_fdr}" \ | csvtk filter -tT -C '$' -f "fire_coverage>1" \ - | bioawk -tc hdr 'NR==1 || ($fire_coverage/$coverage>={params.min_per_acc_peak})' \ + | bioawk -tc hdr '(NR==1)||($fire_coverage/$coverage>={params.min_per_acc_peak})' \ | bedtools intersect -wa -wb -sorted -a - \ -b <(tabix {input.fire} {wildcards.chrom} \ | cut -f 1-3 \ @@ -220,8 +222,8 @@ rule fdr_peaks_by_fire_elements_chromosome: minimum=rules.coverage.output.minimum, maximum=rules.coverage.output.maximum, output: - bed=temp("temp/{sm}/FDR-peaks/grouped-{chrom}-FDR-FIRE-peaks.bed.gz"), - threads: 8 + bed=temp("temp/{sm}/fire-peaks/{v}-grouped-{chrom}-fire-peaks.bed.gz"), + threads: 4 conda: "../envs/python.yaml" params: @@ -229,7 +231,7 @@ rule fdr_peaks_by_fire_elements_chromosome: min_frac_accessible=MIN_FRAC_ACCESSIBLE, shell: """ - zcat {input.bed} \ + bgzip -cd {input.bed} \ | python {params.script} -v 1 \ --max-cov $(cat {input.maximum}) \ --min-cov $(cat {input.minimum}) \ @@ -239,7 +241,7 @@ rule fdr_peaks_by_fire_elements_chromosome: """ -rule fdr_peaks_by_fire_elements: +rule fire_peaks: input: beds=expand( rules.fdr_peaks_by_fire_elements_chromosome.output.bed, @@ -247,10 +249,10 @@ rule fdr_peaks_by_fire_elements: allow_missing=True, ), output: - fofn=temp("temp/{sm}/FDR-peaks/FDR-FIRE-peaks.fofn"), - bed="results/{sm}/FDR-peaks/FDR-FIRE-peaks.bed.gz", - tbi="results/{sm}/FDR-peaks/FDR-FIRE-peaks.bed.gz.tbi", - threads: 8 + fofn=temp("temp/{sm}/fire-peaks/{sm}-fire-{v}-peaks.fofn"), + bed="results/{sm}/{sm}-fire-{v}-peaks.bed.gz", + tbi="results/{sm}/{sm}-fire-{v}-peaks.bed.gz.tbi", + threads: 4 conda: DEFAULT_ENV shell: @@ -271,15 +273,15 @@ rule fdr_peaks_by_fire_elements: """ -rule wide_fdr_peaks: +rule wide_fire_peaks: input: - bed=rules.fdr_peaks_by_fire_elements.output.bed, - track=rules.fdr_track.output.bed, + bed=rules.fire_peaks.output.bed, + track=rules.pileup.output.bed, fai=ancient(FAI), output: - bed="results/{sm}/FDR-peaks/FDR-wide-peaks.bed.gz", - tbi="results/{sm}/FDR-peaks/FDR-wide-peaks.bed.gz.tbi", - bb="results/{sm}/trackHub/bb/FDR-wide-peaks.bb", + bed="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz", + tbi="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-fire-{v}-wide-peaks.bed.gz.tbi", + bb="results/{sm}/trackHub-{v}/bb/fire-wide-peaks.bb", conda: DEFAULT_ENV threads: 4 @@ -291,7 +293,7 @@ rule wide_fdr_peaks: shell: """ ( \ - zcat {input.bed}; \ + bgzip -cd {input.bed}; \ bioawk -tc hdr 'NR==1 || $FDR<={params.max_peak_fdr}' {input.track} \ | bioawk -tc hdr 'NR==1 || $coverage>0' \ | bioawk -tc hdr 'NR==1 || ($fire_coverage/$coverage>={params.min_frac_acc})' \ @@ -311,15 +313,15 @@ rule wide_fdr_peaks: """ -rule one_percent_fdr_peaks: +rule one_percent_fire_peaks: input: - bed=rules.fdr_peaks_by_fire_elements.output.bed, - track=rules.fdr_track.output.bed, + bed=rules.fire_peaks.output.bed, + track=rules.pileup.output.bed, output: - bed="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-peaks.bed.gz", - tbi="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-peaks.bed.gz.tbi", - wide="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-wide-peaks.bed.gz", - wide_tbi="results/{sm}/FDR-peaks/one-percent-FDR/FDR-01-FIRE-wide-peaks.bed.gz.tbi", + bed="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz", + tbi="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-peaks.bed.gz.tbi", + wide="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz", + wtbi="results/{sm}/additional-outputs-{v}/fire-peaks/one-percent-FDR/{sm}-fire-{v}-01-fire-wide-peaks.bed.gz.tbi", threads: 4 conda: DEFAULT_ENV @@ -327,14 +329,14 @@ rule one_percent_fdr_peaks: nuc_size=config.get("nucleosome_size", 147), shell: """ - zcat {input.bed} \ + bgzip -cd {input.bed} \ | csvtk filter -tT -C '$' -f "FDR<=0.01" \ | bgzip -@ {threads} \ > {output.bed} tabix -f -p bed {output.bed} ( \ - zcat {output.bed}; \ + bgzip -cd {output.bed}; \ bioawk -tc hdr '$FDR<=0.01' {input.track} \ ) \ | cut -f 1-3 \ @@ -348,13 +350,13 @@ rule one_percent_fdr_peaks: rule peaks_vs_percent: input: - bed=rules.fdr_peaks_by_fire_elements.output.bed, + bed=rules.fire_peaks.output.bed, output: fig1=report( - "results/{sm}/FDR-peaks/{sm}.peaks-vs-percent.pdf", + "results/{sm}/additional-outputs-{v}/figures/{sm}-fire-{v}-peaks-vs-percent.pdf", category="Peak calls", ), - threads: 8 + threads: 4 conda: "../envs/R.yaml" script: diff --git a/workflow/rules/levio.smk b/workflow/rules/levio.smk new file mode 100644 index 0000000000..e6d4b1b16c --- /dev/null +++ b/workflow/rules/levio.smk @@ -0,0 +1,102 @@ +# +# Index the chain file for leviosam2. +# +# Input here is a chain file that defines the alignment between the DSA and the reference genome +# at a contig level (>100 kbp of alignment). +# +# The output is a special leviosam2 index file that is used to lift over the alignments from the DSA to the reference genome. +# +rule leviosam2_index: + input: + chain=DSA_CHAIN, + fai=FAI, + output: + index=temp("temp/{sm}/leviosam2-index/index.clft"), + conda: + DEFAULT_ENV + threads: 1 + resources: + mem_mb=64 * 1024, + runtime=16 * 60, + shell: + """ + {LEVIO_EXE} index \ + -p results/leviosam2-index/index \ + -c {input.chain} \ + -F {input.fai} + """ + + +# +# Lift over the alignments from the DSA to the reference genome using the chain file / leviosam2 index. +# +# This is not a realignment, but a lift over of the reads from the DSA to the reference genome. +# +rule leviosam2: + input: + bam=rules.fire.output.bam, + levio_index=rules.leviosam2_index.output.index, + ref=REF, + output: + lifted=temp("temp/{sm}/leviosam2/{sm}-{chrom}-committed.bam"), + deferred=temp("temp/{sm}/leviosam2/{sm}-{chrom}-deferred.bam"), + unliftable=temp("temp/{sm}/leviosam2/{sm}-{chrom}-unliftable.bam"), + threads: MAX_THREADS + resources: + mem_mb=MAX_THREADS * 4 * 1024, + runtime=16 * 60, + conda: + DEFAULT_ENV + params: + # maximum number of CIGAR opts to change, also the max gap size that can be spanned + G=config.get("levio_G", 100_000), + # Using -S clipped_frac 0.05 means when a read has >5% clipped bases, it is deferred. A lower value is more stringent (by deferring more reads). + # aln_score is the minumum score before the alignment is lifted over + S=config.get( + "levio_S", + f"-S mapq:0 -S hdist:{100_000} -S isize:{100_000} -S clipped_frac:0.95 -S aln_score:100", + ), + # number of reads per thread + T=config.get("levio_T", 4 * 256), + shell: + """ + PRE="temp/{wildcards.sm}/leviosam2/{wildcards.sm}-{wildcards.chrom}" + {LEVIO_EXE} lift -t {threads} -a {input.cram} \ + -T {params.T} -G {params.G} {params.S} \ + -C {input.levio_index} -p $PRE -f {input.ref} -m -O bam + """ + + +# +# This step sorted the leviosam2 output and fixes some tags in the CRAM file. +# +# Specifically, the MAPQ is reset to 60 for all reads that were previously aligned to the DSA. +# And the XS tag is set to zero for all reads that were aligned to the DSA. +# This is a hueristic that we may need to return to in the future. +# +# Other tags and fields like CIGAR, bitflags, and MD are correctly updated by +# leviosam2 during liftover. +# +rule leviosam2_sorted: + input: + lifted=rules.leviosam2.output.lifted, + ref=REF, + output: + bam=temp("temp/{sm}/leviosam2/{sm}-{chrom}-sorted.bam"), + threads: SORT_THREADS + resources: + mem_mb=SORT_THREADS * 4 * 1024, + runtime=16 * 60, + conda: + DEFAULT_ENV + shell: + """ + samtools sort {input.lifted} \ + -@ {threads} -m 3G \ + -o {output.bam} + """ + + +# params: +# reset_mapq=workflow.source_path("../scripts/reset-mapq.py"), +# python {params.reset_mapq} -t {threads} {input.lifted} \ diff --git a/workflow/rules/peak-stats.smk b/workflow/rules/stats.smk similarity index 66% rename from workflow/rules/peak-stats.smk rename to workflow/rules/stats.smk index 2348e42373..366eca87e8 100644 --- a/workflow/rules/peak-stats.smk +++ b/workflow/rules/stats.smk @@ -9,7 +9,7 @@ rule clustering_vs_null: tmp=temp("temp/{sm}/tmp.pre.calls.bed"), null=temp("temp/{sm}/null.calls.bed"), bed="results/{sm}/clustering-vs-null.bed.gz", - threads: 8 + threads: 4 conda: DEFAULT_ENV shell: @@ -29,11 +29,11 @@ rule fires_in_peaks: input: fire=rules.fire_sites.output.bed, exclude=rules.unreliable_coverage_regions.output.bed, - peaks=rules.fdr_peaks_by_fire_elements.output.bed, + peaks=rules.fire_peaks.output.bed, output: - tmp=temp("temp/{sm}/tmp.FIREs-in-peaks.bed"), - txt="results/{sm}/tables/FIREs-in-peaks.txt", - threads: 8 + tmp=temp("temp/{sm}/tmp.FIREs-{v}-in-peaks.bed"), + txt="results/{sm}/additional-outputs-{v}/fire-peaks/{sm}-{v}-fires-in-peaks.txt", + threads: 4 conda: DEFAULT_ENV params: @@ -50,21 +50,35 @@ rule fires_in_peaks: """ +rule ft_qc: + input: + cram=rules.fire.output.cram, + output: + tbl="results/{sm}/{sm}-fire-{v}-qc.tbl.gz", + conda: + DEFAULT_ENV + threads: 16 + shell: + """ + {FT_EXE} qc --acf -t {threads} {input.cram} {output.tbl} + """ + + rule hap_differences: input: - bed=rules.fdr_peaks_by_fire_elements.output.bed, + bed=rules.fire_peaks.output.bed, output: fig1=report( - "results/{sm}/hap1-vs-hap2/hap1-vs-hap2.pdf", + "results/{sm}/additional-outputs-{v}/figures/{sm}-{v}-hap1-vs-hap2.pdf", category="Haplotype selectivity", ), fig2=report( - "results/{sm}/hap1-vs-hap2/hap1-vs-hap2-volcano.pdf", + "results/{sm}/additional-outputs-{v}/figures/{sm}-{v}-hap1-vs-hap2-volcano.pdf", category="Haplotype selectivity", ), - bed="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed", - bed9="results/{sm}/hap1-vs-hap2/FIRE.hap.differences.bed9", - threads: 8 + bed="results/{sm}/{sm}-fire-{v}-hap-differences.bed.gz", + bed9=temp("temp/{sm}/hap1-vs-hap2/FIRE-{v}.hap.differences.bed9"), + threads: 4 conda: "../envs/R.yaml" script: diff --git a/workflow/rules/track-hub.smk b/workflow/rules/track-hub.smk index 4a2eb5f868..b67902249a 100644 --- a/workflow/rules/track-hub.smk +++ b/workflow/rules/track-hub.smk @@ -1,85 +1,91 @@ rule percent_accessible: input: - bed=rules.fdr_track.output.bed, + bed=rules.pileup.output.bed, fai=ancient(FAI), output: - tmp=temp("temp/{sm}/{hp}/percent.accessible.bed"), - bw="results/{sm}/trackHub/bw/{hp}.percent.accessible.bw", - bed="results/{sm}/{hp}/percent.accessible.bed.gz", - tbi="results/{sm}/{hp}/percent.accessible.bed.gz.tbi", + tmp=temp("temp/{sm}/{hp}/{v}-percent.accessible.bed"), + bw="results/{sm}/trackHub-{v}/bw/{hp}.percent.accessible.bw", threads: 4 conda: DEFAULT_ENV resources: mem_mb=get_mem_mb, params: - cols=hap_hck_columns, + suffix=get_hap_col_suffix, + nzooms=NZOOMS, + chrom=get_chroms()[0], shell: """ - zcat {input.bed} \ - | hck -f 1-3 {params.cols} \ - | grep -v "^#" \ - | awk -v OFS='\t' '$5 > 0 {{print $1,$2,$3,$4*100/$5}}' \ + bgzip -cd {input.bed} \ + | bioawk -tc hdr '$coverage{params.suffix}>0' \ + | bioawk -tc hdr \ + 'NR>1{{print $1,$2,$3,100*$fire_coverage{params.suffix}/$coverage{params.suffix}}}' \ > {output.tmp} - # skip if the file is empty + # add fake if file is empty if [[ -s {output.tmp} ]]; then - bigtools bedgraphtobigwig \ - --nzooms 10 -s start \ - {output.tmp} {input.fai} {output.bw} + echo "File is not empty" else - touch {output.bw} + echo "File is empty" + printf "{params.chrom}\t0\t1\t0\\n" > {output.tmp} fi - - bgzip -@{threads} -c {output.tmp} > {output.bed} - tabix -p bed {output.bed} + + + bigtools bedgraphtobigwig \ + --nzooms {params.nzooms} -s start \ + {output.tmp} {input.fai} {output.bw} """ rule element_coverages_bw: input: - bed=rules.element_coverages.output.bed, + bed=rules.pileup.output.bed, fai=ancient(FAI), output: - bw="results/{sm}/trackHub/bw/{hp}.{el_type}.coverage.bw", + bw="results/{sm}/trackHub-{v}/bw/{hp}.{el_type}.coverage.bw", conda: DEFAULT_ENV + params: + nzooms=NZOOMS, + cut_cmd=pileup_cut_cmd, shell: """ - zcat {input.bed} \ - | hck -f 1-3 -F {wildcards.el_type} \ + bgzip -cd {input.bed} \ + | {params.cut_cmd} \ | grep -v "^#" \ | bigtools bedgraphtobigwig \ - -s start --nzooms 10 \ + -s start --nzooms {params.nzooms} \ - {input.fai} {output.bw} """ rule fdr_track_to_bw: input: - bed=rules.fdr_track.output.bed, + bed=rules.pileup.output.bed, fai=ancient(FAI), output: - bw="results/{sm}/trackHub/bw/{col}.bw", + bw="results/{sm}/trackHub-{v}/bw/{col}.bw", threads: 4 conda: DEFAULT_ENV + params: + nzooms=NZOOMS, shell: """ hck -z -f 1-3 -F {wildcards.col} {input.bed} \ | grep -v "^#" \ | bigtools bedgraphtobigwig \ - -s start --nzooms 10 \ + -s start --nzooms {params.nzooms} \ - {input.fai} {output.bw} """ -rule fdr_peaks_by_fire_elements_to_bb: +rule fire_peaks_bb: input: - bed=rules.fdr_peaks_by_fire_elements.output.bed, + bed=rules.fire_peaks.output.bed, fai=ancient(FAI), output: - bb="results/{sm}/trackHub/bb/FDR-FIRE-peaks.bb", + bb="results/{sm}/trackHub-{v}/bb/fire-peaks.bb", threads: 4 conda: DEFAULT_ENV @@ -87,7 +93,7 @@ rule fdr_peaks_by_fire_elements_to_bb: bedfmt=workflow.source_path("../templates/fire_peak.as"), shell: """ - zcat {input.bed} \ + bgzip -cd {input.bed} \ | bioawk -tc hdr '{{print $1,$2,$3,"peak-"NR,int($score*10),".",$score,"-1",$log_FDR,int($start/2+$end/2)-$peak_start}}' \ | bioawk -tc hdr '$5<=1000' \ | rg -v '^#' \ @@ -102,8 +108,8 @@ rule hap_differences_track: bed9=rules.hap_differences.output.bed9, fai=ancient(FAI), output: - bb="results/{sm}/trackHub/bb/hap_differences.bb", - threads: 1 + bb="results/{sm}/trackHub-{v}/bb/hap_differences.bb", + threads: 4 resources: mem_mb=get_mem_mb, conda: @@ -125,15 +131,10 @@ rule hap_differences_track: rule trackhub: input: - fai=ancient(FAI), - fire=rules.fdr_peaks_by_fire_elements_to_bb.output.bb, cov=rules.coverage.output.cov, - hap_diffs=rules.hap_differences_track.output.bb, - wide=rules.wide_fdr_peaks.output.bb, - decorators_1=rules.decorate_fibers_1.output.bb, - decorators_2=rules.decorate_fibers_2.output.bb, output: - hub="results/{sm}/trackHub/hub.txt", + hub="results/{sm}/trackHub-{v}/hub.txt", + description="results/{sm}/trackHub-{v}/fire-description.html", resources: load=get_load, threads: 4 @@ -142,11 +143,13 @@ rule trackhub: params: ref=REF_NAME, script=workflow.source_path("../scripts/trackhub.py"), + description=workflow.source_path("../templates/fire-description.html"), shell: """ python {params.script} -v 2 \ - --trackhub-dir results/{wildcards.sm}/trackHub \ + --trackhub-dir results/{wildcards.sm}/trackHub-{wildcards.v} \ --reference {params.ref} \ --sample {wildcards.sm} \ --average-coverage $(cat {input.cov}) + cp {params.description} {output.description} """ diff --git a/workflow/scripts/cov.py b/workflow/scripts/cov.py index 6058fc1669..4c69c48c43 100644 --- a/workflow/scripts/cov.py +++ b/workflow/scripts/cov.py @@ -1,7 +1,5 @@ import pandas as pd -import numpy as np import sys -import os import math import polars as pl diff --git a/workflow/scripts/decorated-bed12.py b/workflow/scripts/decorated-bed12.py deleted file mode 100755 index 59669c6e50..0000000000 --- a/workflow/scripts/decorated-bed12.py +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env python -import defopt -import sys -import gc -import logging -from pathlib import Path -from typing import Optional -import pandas as pd -import polars as pl -import numpy as np -from numba import njit -import io - -# from pyinstrument import Profiler - - -def chunker(seq, size): - return (seq[pos : pos + size] for pos in range(0, len(seq), size)) - - -def make_decorator(ct, fiber, score, strand, color, el_type, hp, st, en, starts, ends): - start = starts[0] - end = ends[-1] - lengths = ",".join(map(str, ends - starts)) - offsets = ",".join(map(str, starts - start)) - block_count = len(starts) - # chr1 12 9985 block 1000 + 12 9985 200,0,150 - # 382, 1 , 1 - # chr1:1-10000:LongRead - # block 255,0,0,180 Ignored TypeA - # 1 is transparent - prime_color = "200,200,200,1" - return ( - # bed9 - f"{ct}\t{start}\t{end}\t{el_type}\t{score}\t{strand}\t{start}\t{end}\t{prime_color}\t" - # bed12 - f"{block_count}\t{lengths}\t{offsets}\t" - # read tag for the decorator - f"{ct}:{st}-{en}:{fiber}\t" - # decorator - f"block\t{color},0\tIgnored\t{el_type}" - ) - - -def subgroup(df, ct, fiber, strand, hp): - st = df["st"].min() - en = df["en"].max() - # tmp = df.filter(pl.col("color") != "230,230,230") - # linker = df.filter(pl.col("color") == "147,112,219") - # fire = df.filter(pl.col("color") == "255,0,0") - # for el_type, tdf in zip(["Linker", "FIRE"], [linker, fire]): - for (color, score), gdf in df.group_by(["color", "score"]): - if gdf.shape[0] == 0 or color == "230,230,230": - continue - elif color == "147,112,219": - el_type = "Linker" - else: - el_type = "FIRE" - decorator = make_decorator( - ct, - fiber, - score, - strand, - color, - el_type, - hp, - st, - en, - gdf["st"], - gdf["en"], - ) - print(decorator) - - return ( - ct, - st, - en, - fiber, - 1, - strand, - 0, - 0, - "0,0,0,200", - 2, - "1,1", - f"0,{en-st-1}", - hp, - ) - - -def process(df, outfile, group_size=5_000): - data = [] - fibers = df["fiber"].unique() - n_fibers = len(fibers) - n = 0 - mode = "w" - for (ct, fiber, hp), gdf in df.group_by( - ["#ct", "fiber", "HP"], maintain_order=True - ): - strand = "." - data.append(subgroup(gdf, ct, fiber, strand, hp)) - n += 1 - if n % group_size == 0 or n == n_fibers: - logging.info(f"processed {n:,} fibers of {n_fibers:,}") - pd.DataFrame(data).sort_values([0, 1, 2]).to_csv( - outfile, sep="\t", header=False, index=False, mode=mode - ) - mode = "a" - data = [] - gc.collect() - - -def main( - infile: str, - outfile: Optional[Path], - *, - verbose: int = 0, -): - """ - Author Mitchell R. Vollger - :param infile: Input file, stdin by default - :param outfile: Output file, stdout by default - :param verbose: Set the logging level of the function - """ - if infile == "-": - infile = io.StringIO(sys.stdin.read()) - - logger = logging.getLogger() - log_format = "[%(levelname)s][Time elapsed (ms) %(relativeCreated)d]: %(message)s" - log_level = 10 * (3 - verbose) - logging.basicConfig(format=log_format) - logger.setLevel(log_level) - - df = pl.read_csv( - infile, - separator="\t", - low_memory=True, - columns=[ - "#ct", - "st", - "en", - "fiber", - "score", - # "strand", - "HP", - "color", - ], - ) - if df.shape[0] == 0: - outfile = open(outfile, "w") - return 0 - # df = df.filter(pl.col("color") != "230,230,230") - - # with Profiler(interval=0.1) as profiler: - logging.info(f"{df}") - process(df, outfile) - # profiler.print() - # profiler.open_in_browser() - return 0 - - -if __name__ == "__main__": - defopt.run(main, show_types=True, version="0.0.1") diff --git a/workflow/scripts/fdr-table.py b/workflow/scripts/fdr-table.py new file mode 100644 index 0000000000..8ec3f023a5 --- /dev/null +++ b/workflow/scripts/fdr-table.py @@ -0,0 +1,312 @@ +#!/usr/bin/env python +import defopt +import logging +from pathlib import Path +from typing import Optional +import pandas as pd +import polars as pl +import numpy as np +import polars.selectors as cs +import gzip + +# from numba import njit +ROLLING_FIRE_SCORE_WINDOW_SIZE = 200 + + +def is_gzipped(path): + with open(path, "rb") as f: + return f.read(2) == b"\x1f\x8b" + + +def find_nearest(array, value): + idx = np.searchsorted(array, value, side="left") + idx[idx < 0] = 0 + idx[idx >= len(array)] = len(array) - 1 + return idx + + +# ['#chrom', 'start', 'end', 'coverage', 'fire_coverage', 'score', 'nuc_coverage', 'msp_coverage', +# 'coverage_H1', 'fire_coverage_H1', 'score_H1', 'nuc_coverage_H1', 'msp_coverage_H1', +# 'coverage_H2', 'fire_coverage_H2', 'score_H2', 'nuc_coverage_H2', 'msp_coverage_H2'] +def read_pileup_file(infile, nrows): + # get the header from the first line of the file + header = pl.read_csv(infile, separator="\t", n_rows=1).columns + + # check that there is at least two lines + open_infile = gzip.open if is_gzipped(infile) else open + with open_infile(infile) as f: + for i, _ in enumerate(f): + if i > 1: + break + if i < 2: + return None + + # add scema overrides for the score columns + schema_overrides = {} + for n in ["score", "score_H1", "score_H2", "score_shuffled"]: + if n in header: + schema_overrides[n] = float + + logging.info(f"Header of the pileup file:\n{header}") + logging.info(f"Schema overrides for the pileup file:\n{schema_overrides}") + + # read the file + pileup = pl.read_csv( + infile, + separator="\t", + has_header=False, + new_columns=header, + comment_prefix="#", + n_rows=nrows, + infer_schema_length=100000, + schema_overrides=schema_overrides, + ) + logging.info(f"Done reading pileup file:\n{pileup}") + return pileup + + +# @njit +def fdr_from_fire_scores(fire_scores): + Vs = [] + Rs = [] + Ts = [] + cur_R = 0.0 + cur_V = 0.0 + pre_score = -1.0 + first = True + for score, is_real, bp in fire_scores.iter_rows(): + # save the counts and thresholds as long as we have counts + if score != pre_score and cur_R > 0 and not first: + Rs.append(cur_R) + Vs.append(cur_V) + Ts.append(pre_score) + # don't add negative scores to the fdr data, since they have no coverage. + if score < 0.0: + break + # update the counts + if is_real: + cur_R += bp + else: + cur_V += bp + # prepare for next iteration + pre_score = score + first = False + + # add the last threshold with an FDR of 1 + Rs.append(1) + Vs.append(1) + Ts.append(-1.0) + + # set up return values + Vs = np.array(Vs) + Rs = np.array(Rs) + Ts = np.array(Ts) + FDRs = Vs / Rs + FDRs[FDRs > 1] = 1.0 + + return (Ts, FDRs, Vs, Rs) + + +def fdr_table_from_scores(fire_scores): + # Calculate FDR thresholds + Ts, FDRs, Vs, Rs = fdr_from_fire_scores(fire_scores) + results = pd.DataFrame( + { + "threshold": Ts, + "FDR": FDRs, + "shuffled_bp": Vs, + "real_bp": Rs, + } + ) + # simplify the results a little, don't want 100,000s of thresholds + results = results.groupby("FDR", sort=False).tail(1).reset_index(drop=True) + results = results.groupby("shuffled_bp", sort=False).tail(1).reset_index(drop=True) + results = results.groupby("real_bp", sort=False).tail(1).reset_index(drop=True) + # limit the number of thresholds that can be in the table + results["threshold"] = results["threshold"].round(2) + results = results.groupby("threshold", sort=False).tail(1).reset_index(drop=True) + # sort the results by threshold so that they are now acceding + # which is needed for the find_nearest function + results = results.sort_values("threshold") + logging.info(f"FDR results\n{results}") + return results + + +def make_fdr_table(infile, outfile, nrows, max_cov=None, min_cov=None): + # read the pileup file + pileup = read_pileup_file(infile, nrows) + # filter on coverages if needed + if max_cov is not None: + pileup = pileup.filter( + pl.col("coverage") <= max_cov, pl.col("coverage_shuffled") <= max_cov + ) + if min_cov is not None: + pileup = pileup.filter( + pl.col("coverage") >= min_cov, pl.col("coverage_shuffled") >= min_cov + ) + + # aggregate by the score and weight the score by the number of bases + fire_scores = ( + pileup.melt( + value_vars=["score", "score_shuffled"], + id_vars=["#chrom", "start", "end"], + variable_name="type", + value_name="score", + ) + .with_columns( + pl.when(pl.col("type") == "score") + .then(True) + .otherwise(False) + .alias("is_real"), + pl.col("end").sub(pl.col("start")).alias("bp"), + ) + .group_by(["score", "is_real"]) + .agg(pl.sum("bp").alias("bp")) + .sort("score", descending=True) + ) + + # count bases in each category + sums = fire_scores.group_by("is_real").agg(pl.sum("bp").alias("Mbp") / 1_000_000) + logging.info(f"Number of Mbp in each category:\n{sums}") + + logging.info(f"Done aggregating pileup file:\n{fire_scores}") + fdr_table = fdr_table_from_scores(fire_scores) + fdr_table.to_csv(outfile, sep="\t", index=False) + return fdr_table + + +def read_fdr_table(infile): + fdr_table = pl.read_csv(infile, separator="\t").to_pandas() + logging.info(f"Read FDR table:\n{fdr_table}") + return fdr_table + + +def apply_fdr_table(infile, outfile, fdr_table, nrows): + pileup = read_pileup_file(infile, nrows) + # there is no input data + if pileup is None: + Path(outfile).touch() + return + + logging.info(f"Applying FDR table to pileup file:\n{pileup}") + # add a new column that reports the largest score in a centered window of with ROLLING_FIRE_SCORE_WINDOW_SIZE number of bases + rolling_max_score = ( + pileup.rolling( + index_column="start", + period=f"{ROLLING_FIRE_SCORE_WINDOW_SIZE}i", + offset=f"-{ROLLING_FIRE_SCORE_WINDOW_SIZE // 2}i", + closed="both", + group_by="#chrom", + ) + .agg( + pl.max("score").alias("max_window_score").fill_null(-1.0), + ) + .drop("#chrom") + ) + + # add the max window score to the pileup + pileup = ( + pileup.with_columns(rolling_max_score) + .with_columns( + pl.when( + (pl.col("score") == pl.col("max_window_score")) + & (pl.col("score") > 0.0) + ) + .then(True) + .otherwise(False) + .alias("is_local_max"), + ) + .with_columns( + pl.col("is_local_max").rle_id().alias("local_max_group"), + ) + ) + + # group by local_max_group and find the midpoint (bp) of the group + middle = ( + pileup.group_by(["#chrom", "local_max_group"]) + .agg( + pl.col("end").sub(pl.col("start")).sum().alias("width"), + pl.min("start").alias("first_start"), + ) + .with_columns( + # find the middle of the group + pl.col("first_start").add(pl.col("width") // 2).alias("middle"), + ) + .drop("width", "first_start") + ) + + # find the middle row of local max groups + pileup = ( + pileup.join(middle, on=["#chrom", "local_max_group"], how="left") + .with_columns( + ( + (pl.col("start") <= pl.col("middle")) + & (pl.col("end") > pl.col("middle")) + ).alias("is_middle"), + ) + .with_columns( + # only keep the local maxes that are in the middle of the group + (pl.col("is_local_max") & pl.col("is_middle")).alias("is_local_max"), + ) + .drop("middle", "is_middle", "local_max_group", "max_window_score") + .drop(cs.ends_with("_shuffled")) + ) + + # find the FDRs for the thresholds + fdr_idx = find_nearest(fdr_table.threshold.values, pileup["score"].to_numpy()) + FDRs = fdr_table.FDR.values[fdr_idx] + pileup = ( + pileup.with_columns( + FDR=FDRs, + ) + .with_columns( + pl.when(pl.col("score") >= 0.0) + .then(pl.col("FDR")) + .otherwise(1.0) + .alias("FDR"), + ) + .with_columns( + (-10 * np.log10(pl.col("FDR"))).alias("log_FDR").replace(float("inf"), 100), + ) + ) + + logging.info(f"Done calculating max window score:\n{pileup}") + # write the pileup to a file + pileup.write_csv(outfile, separator="\t") + + +def main( + infile: Path, + outfile: Path, + *, + fdr_table: Path = None, + nrows: Optional[int] = None, + max_cov: Optional[int] = None, + min_cov: Optional[int] = None, + verbose: int = 0, +): + """ + Author Mitchell R. Vollger + + :param infile: ft pileup track with shuffled fiber data + :param outfile: FIRE score to FDR table + :param verbose: Set the logging level of the function + """ + logger = logging.getLogger() + log_format = "[%(levelname)s][Time elapsed (ms) %(relativeCreated)d]: %(message)s" + log_level = 10 * (3 - verbose) + logging.basicConfig(format=log_format) + logger.setLevel(log_level) + + if fdr_table is not None: + fdr_table = read_fdr_table(fdr_table) + apply_fdr_table(infile, outfile, fdr_table, nrows) + else: + fdr_table = make_fdr_table( + infile, outfile, nrows, min_cov=min_cov, max_cov=max_cov + ) + return 0 + + +if __name__ == "__main__": + defopt.run(main, show_types=True, version="0.0.1") diff --git a/workflow/scripts/fire-null-distribution.py b/workflow/scripts/fire-null-distribution.py deleted file mode 100755 index db9f563c95..0000000000 --- a/workflow/scripts/fire-null-distribution.py +++ /dev/null @@ -1,565 +0,0 @@ -#!/usr/bin/env python -import defopt -import sys -import gc -import logging -from pathlib import Path -from typing import Optional -import pandas as pd -import polars as pl -import numpy as np -from numba import njit - -ROLLING_FIRE_SCORE_WINDOW_SIZE = 200 - -FIRE_COLUMNS = [ - "chrom", - "start", - "end", - "fiber", - "score", - "strand", - "thick_start", - "thick_end", - "item_rgb", - "fdr", - "hap", -] -FIBER_COLUMNS = [ - "chrom", - "fiber", - "fiber_start", - "fiber_end", - "null_fiber_start", - "null_fiber_end", -] -HAPS = ["H1", "H2"] - - -def rle(inarray): - """run length encoding. Partial credit to R rle function. - Multi datatype arrays catered for including non Numpy - returns: tuple (runlengths, startpositions, values)""" - ia = np.asarray(inarray) # force numpy - if ia.size == 0: - return (ia, ia, ia) - else: - n = ia.shape[0] - y = ia[1:] != ia[:-1] # pairwise unequal (string safe) - i = np.append(np.where(y), n - 1) # must include last element posi - z = np.diff(np.append(-1, i)) # run lengths - p = np.cumsum(np.append(0, z))[:-1] # positions - return (z, p, ia[i]) - - -def bed_rle(inarray): - run_lengths, starts, scores = rle(inarray) - starts = starts.astype(int) - ends = starts + run_lengths.astype(int) - return np.array([starts, ends, scores]).transpose() - - -@njit -def is_local_max(array): - output = [] - for idx in range(array.shape[0]): - if idx - 1 < 0 or idx + 1 >= array.shape[0]: - output.append(False) - continue - cur_res = False - pre = array[idx - 1] - cur = array[idx] - next = array[idx + 1] - if cur >= pre and cur >= next: - cur_res = True - output.append(cur_res) - - return output - - -@njit -def fire_scores_per_chrom( - starts, - ends, - q_values, - chrom_length, - coverage_array, - min_allowed_q=0.01, - min_coverage=4, -): - fire_scores = np.zeros(int(chrom_length), dtype=np.float64) - - multi = -50.0 # a multi of -50 and a min_allowed_q of 0.01 gives a max score of 100 - max_add = multi * np.log10(min_allowed_q) - q_values_t = multi * np.log10(q_values) - for start, end, q in zip(starts, ends, q_values_t): - if end >= chrom_length: - continue - fire_scores[start:end] += min(q, max_add) - - # correct for coverage - fire_scores = fire_scores / coverage_array - # correct divide by zeros - fire_scores[np.isnan(fire_scores)] = 0.0 - # drop the scores that have no coverage - fire_scores[coverage_array < min_coverage] = -1.0 - return fire_scores - - -@njit -def fdr_from_fire_scores(fire_scores): - Vs = [] - Rs = [] - Ts = [] - cur_R = 0.0 - cur_V = 0.0 - pre_score = -1.0 - first = True - for start, end, score, is_real in fire_scores: - # save the counts and thresholds as long as we have counts - if score != pre_score and cur_R > 0 and not first: - Rs.append(cur_R) - Vs.append(cur_V) - Ts.append(pre_score) - # don't add negative scores to the fdr data, since they have no coverage. - if score < 0.0: - break - # update the counts - counts = end - start - if is_real: - cur_R += counts - else: - cur_V += counts - # prepare for next iteration - pre_score = score - first = False - # set up return values - Vs = np.array(Vs) - Rs = np.array(Rs) - Ts = np.array(Ts) - FDRs = Vs / Rs - FDRs[FDRs > 1] = 1.0 - return (Ts, FDRs, Vs, Rs) - - -@njit -def get_coverage_from_array(starts, ends, coverage_array, stat="median"): - out_coverage = np.zeros(starts.shape[0], dtype=np.float64) - idx = 0 - for start, end in zip(starts, ends): - if stat == "median": - val = np.median(coverage_array[start:end]) - elif stat == "max": - val = np.max(coverage_array[start:end]) - else: - val = np.mean(coverage_array[start:end]) - out_coverage[idx] = val - idx += 1 - return out_coverage - - -@njit -def make_coverage_array(starts, ends, chrom_length): - coverage_array = np.zeros(int(chrom_length), dtype=np.float64) - for start, end in zip(starts, ends): - coverage_array[start:end] += 1 - return coverage_array - - -def fire_tracks(fire, outfile, min_coverage=4): - null_s = [] - fire_s = [] - logging.info(f"Fire data\n{fire}") - # number of elements where start and fiber_start are null - null_count = fire.filter( - pl.col("start").is_null() & pl.col("fiber_start").is_null() - ).shape[0] - if null_count > 0: - logging.warn(f"Null count: {null_count}") - - for chrom, g in fire.group_by("chrom", maintain_order=True): - logging.info(f"Processing {chrom}") - # fibers for this chromosome - fibers = ( - g[FIBER_COLUMNS] - .filter(~pl.col("fiber_start").is_null()) - .unique() - .to_pandas() - ) - # convert to pandas for easier manipulation - g = ( - g.filter(~pl.col("start").is_null()) - .filter(~pl.col("fiber_start").is_null()) - .to_pandas() - ) - logging.debug(f"Grouped fire data\n{g}\n{g.dtypes}") - - if g.shape[0] == 0: - logging.warning(f"No data for {chrom}") - continue - - # get coverage for this chromosome and the shuffled fibers - chrom_length = g.length[0].astype(int) - coverage_array = make_coverage_array( - fibers.fiber_start.values, fibers.fiber_end.values, chrom_length - ) - null_coverage_array = make_coverage_array( - fibers.null_fiber_start.values, fibers.null_fiber_end.values, chrom_length - ) - expected_median_coverage = np.median( - null_coverage_array[null_coverage_array > 0] - ) - - # find offset to use based on the shuffled fiber - g["offset"] = g.null_fiber_start - g.fiber_start - g["null_start"] = g.start + g.offset - g["null_end"] = g.end + g.offset - - logging.info( - f"real bp: {(g.end-g.start).sum():,}\t" - f"null bp: {(g.null_end-g.null_start).sum():,}" - ) - - # - rle_fire_scores = bed_rle( - fire_scores_per_chrom( - g.start.values, - g.end.values, - g.fdr.values, - g.length.max(), - coverage_array, - min_coverage=min_coverage, - ) - ) - rle_null_scores = bed_rle( - fire_scores_per_chrom( - g.null_start.values, - g.null_end.values, - g.fdr.values, - g.length.max(), - null_coverage_array, - min_coverage=min_coverage, - ) - ) - n_bp_considered = (coverage_array >= min_coverage).sum() - logging.info( - f"{chrom}: {n_bp_considered:,} of {chrom_length:,}\t" - f"Max real FIRE score: {rle_fire_scores[:,2].max():,.8}\t" - f"Max null FIRE score: {rle_null_scores[:,2].max():,.8}\t" - f"Expected median coverage: {expected_median_coverage}" - ) - fire_s.append(rle_fire_scores) - null_s.append(rle_null_scores) - - # all data - fire_scores = np.concatenate(fire_s) - null_fire_scores = np.concatenate(null_s) - logging.debug(f"rle fire score shape: {fire_scores.shape}") - logging.info( - f"all: {fire_scores.shape[0]:,}\t" - f"Max real FIRE score: {fire_scores[:,2].max():,.8}\t" - f"Max null FIRE score: {null_fire_scores[:,2].max():,.8}" - ) - - # convert to pandas for easier manipulation - fire_scores = pd.DataFrame(fire_scores, columns=["start", "end", "score"]) - fire_scores["is_real"] = 1.0 - null_fire_scores = pd.DataFrame(null_fire_scores, columns=["start", "end", "score"]) - null_fire_scores["is_real"] = 0.0 - fire_scores = ( - pd.concat([fire_scores, null_fire_scores]) - .sort_values("score", ascending=False) - .to_numpy() - ) - logging.debug(f"Fire scores\n{fire_scores}") - - # Calculate FDR thresholds - Ts, FDRs, Vs, Rs = fdr_from_fire_scores(fire_scores) - results = pd.DataFrame( - { - "threshold": Ts, - "FDR": FDRs, - "shuffled_peaks": Vs, - "peaks": Rs, - } - ) - # simplify the results a little, don't want 100,000s of thresholds - results = results[results.threshold > 0.0] - results = results.groupby("FDR", sort=False).tail(1).reset_index(drop=True) - results = ( - results.groupby("shuffled_peaks", sort=False).tail(1).reset_index(drop=True) - ) - results = results.groupby("peaks", sort=False).tail(1).reset_index(drop=True) - # limit the number of thresholds that can be in the table - results["threshold"] = results["threshold"].round(2) - results = results.groupby("threshold", sort=False).tail(1).reset_index(drop=True) - logging.info(f"FDR results\n{results}") - results.to_csv(outfile, sep="\t", index=False) - - -def make_fdr_table(fire, outfile, min_coverage=4): - logging.info("Starting analysis") - logging.debug(f"Joined fibers\n{fire}") - fire_tracks(fire, outfile, min_coverage=min_coverage) - return 0 - - -def find_nearest(array, value): - idx = np.searchsorted(array, value, side="left") - idx[idx < 0] = 0 - idx[idx >= len(array)] = len(array) - 1 - return idx - - -def write_bed(chrom, output_dict, out, first=True): - chrom_length = output_dict["coverage"].shape[0] - # make df - if first: - header = True - mode = "w" - else: - header = False - mode = "a" - logging.info("Making data frame") - df = pl.DataFrame(output_dict) - del output_dict - gc.collect() - - # finding maxes within windows - df = df.with_columns( - max_window_score=pl.col("score").rolling_max( - window_size=ROLLING_FIRE_SCORE_WINDOW_SIZE, - center=True, - ) - ) - original_columns = df.columns - # find and clear the duplicates - logging.info("Finding duplicates") - # float array that says if a row is different from the previous row - diff = (((df != df.shift(periods=1)).sum(axis=1)) > 0) * 1.0 - # turn the diff array into a group number - logging.info("Merging duplicates") - df = ( - df.with_columns( - diff.cumsum().alias("group"), - ) - .with_row_count(name="end", offset=1) - .unique(keep="last", subset=original_columns + ["group"], maintain_order=True) - .with_columns( - pl.col("end").shift_and_fill(periods=1, fill_value=0).alias("start"), - pl.lit(chrom).alias("#chrom"), - ) - .select(["#chrom", "start", "end"] + original_columns) - .sort(["#chrom", "start", "end"]) - ).to_pandas() - - # can only find local maxes after de duplicating - # window_score = ( - # df.rolling(ROLLING_FIRE_SCORE_WINDOW_SIZE, on="start", center=True) - # .score.max() - # .values - # ) - # df["is_local_max"] = df["score"] == window_score # df["score"].values - df["is_local_max"] = (df["score"] == df["max_window_score"]) & (df["score"] > 0.0) - - logging.info(f"Found {df.is_local_max.sum():,} local maximums.") - - # checks - final_end = df.end.max() - assert final_end == chrom_length, f"{final_end} != {chrom_length}" - - logging.info(f"Writing {chrom}") - df.to_csv(out, mode=mode, header=header, index=False, sep="\t") - logging.info(f"Done writing {chrom}") - return - - -def extra_output_columns(fire, fibers, fdr_table, min_coverage=4): - return_data = {} - # get the inital data - chrom_length = fire.length[0] - - # get fire info per haplotype - for hap in [""] + HAPS: - # select data we are working with - if hap == "": - logging.info("Processing all haplotypes") - tag = "" - cur_fire = fire - cur_fibers = fibers - else: - logging.info(f"Processing {hap}") - tag = f"_{hap}" - cur_fibers = fibers[fibers.hap == hap] - cur_fire = fire[fire.hap == hap] - # if no data in the hap write empty values - if cur_fire.shape[0] == 0: - for x in [ - "fire_coverage", - "coverage", - "score", - "FDR", - "log_FDR", - ]: - return_data[f"{x}{tag}"] = -1 - continue - - cur_coverage_array = make_coverage_array( - cur_fibers.fiber_start.values, cur_fibers.fiber_end.values, chrom_length - ) - # get the FIRE scores in bed format - cur_fire_scores = fire_scores_per_chrom( - cur_fire.start.values, - cur_fire.end.values, - cur_fire.fdr.values, - cur_fire.length.max(), - cur_coverage_array, - min_coverage=min_coverage, - ) - # fire coverage - fire_coverage = make_coverage_array( - cur_fire.start.values, cur_fire.end.values, chrom_length - ) - return_data[f"fire_coverage{tag}"] = fire_coverage - - # total coverage - return_data[f"coverage{tag}"] = cur_coverage_array - - # save the scores - return_data[f"score{tag}"] = cur_fire_scores - - # find the FDRs for the thresholds - fdr_idx = find_nearest(fdr_table.threshold.values, cur_fire_scores) - FDRs = fdr_table.FDR.values[fdr_idx] - return_data[f"FDR{tag}"] = FDRs - - # log the FDRs - tmp_FDR = FDRs.copy() - tmp_FDR[tmp_FDR <= 0] = tmp_FDR[tmp_FDR > 0].min() - log_FDRs = -10 * np.log10(tmp_FDR) - return_data[f"log_FDR{tag}"] = log_FDRs - - for key, data in return_data.items(): - if isinstance(data, np.ndarray): - assert ( - data.shape[0] == chrom_length - ), f"{key} is not the expected size: {data.shape} instead of {chrom_length.shape}." - return return_data - - -def write_scores(fire, fdr_table, outfile, min_coverage=4): - first = True - for chrom, g in fire.group_by("chrom", maintain_order=True): - logging.info(f"Processing {chrom}") - # fibers for this chromosome - fibers = ( - g[["chrom", "fiber", "fiber_start", "fiber_end", "hap"]] - .unique() - .to_pandas() - ) - # convert to pandas for easier manipulation - g = g.to_pandas() - - # get a bunch of extra columns + per haplotype - output_dict = extra_output_columns( - g, fibers, fdr_table, min_coverage=min_coverage - ) - - # write data - write_bed(chrom, output_dict, outfile, first=first) - first = False - - -def main( - infile: Path, - fiber_locations_file: Path, - genome_file: Path, - *, - outfile: Optional[Path] = None, - shuffled_locations_file: Optional[Path] = None, - fdr_table_file: Optional[Path] = None, - n_rows: Optional[int] = None, - min_coverage: Optional[int] = 4, - verbose: int = 0, -): - """ - Author Mitchell R. Vollger - - :param infile: Input file, stdin by default - :param outfile: Output file, stdout by default - :param count: Number of times to display the greeting - :param verbose: Set the logging level of the function - """ - if infile is None: - infile = sys.stdin - if outfile is None: - outfile = sys.stdout - - logger = logging.getLogger() - log_format = "[%(levelname)s][Time elapsed (ms) %(relativeCreated)d]: %(message)s" - log_level = 10 * (3 - verbose) - logging.basicConfig(format=log_format) - logger.setLevel(log_level) - - logging.info(f"Reading FIRE file: {infile}") - fire = pl.read_csv( - infile, - separator="\t", - has_header=False, - columns=[0, 1, 2, 3, 9, 10], - new_columns=["chrom", "start", "end", "fiber", "fdr", "hap"], - comment_char="#", - n_rows=n_rows, - ) - logging.debug(f"FIRE peaks {fire}") - logging.info(f"Reading genome file: {genome_file}") - fai = pl.read_csv( - genome_file, - separator="\t", - has_header=False, - columns=[0, 1], - new_columns=["chrom", "length"], - ) - logging.info(f"Reading fiber locations file: {fiber_locations_file}") - fiber_locations = pl.read_csv( - fiber_locations_file, - separator="\t", - has_header=False, - columns=[0, 1, 2, 3, 5], - new_columns=["chrom", "fiber_start", "fiber_end", "fiber", "hap"], - ).join(fai, on="chrom") - - if shuffled_locations_file is not None: - logging.info( - f"Reading shuffled fiber locations file: {shuffled_locations_file}" - ) - shuffled_locations = pl.read_csv( - shuffled_locations_file, - separator="\t", - has_header=False, - columns=[0, 1, 2, 3], - new_columns=["chrom", "null_fiber_start", "null_fiber_end", "fiber"], - ) - fiber_locations = fiber_locations.join( - shuffled_locations, on=["chrom", "fiber"] - ) - - logging.info("Joining FIRE elements and fibers and then sorting") - fire = fire.join(fiber_locations, on=["chrom", "fiber", "hap"], how="outer").sort( - ["chrom", "start", "end"] - ) - - if shuffled_locations_file is not None: - make_fdr_table(fire, outfile, min_coverage=min_coverage) - else: - fdr_table = ( - pl.read_csv(fdr_table_file, separator="\t") - .to_pandas() - .sort_values("threshold") - ) - write_scores(fire, fdr_table, outfile, min_coverage=min_coverage) - return 0 - - -if __name__ == "__main__": - defopt.run(main, show_types=True, version="0.0.1") diff --git a/workflow/scripts/merge_fire_peaks.py b/workflow/scripts/merge_fire_peaks.py index ce77b67d96..eaf0c33f58 100755 --- a/workflow/scripts/merge_fire_peaks.py +++ b/workflow/scripts/merge_fire_peaks.py @@ -1,14 +1,9 @@ #!/usr/bin/env python -import os import defopt import logging -from pathlib import Path -import numpy as np -from typing import Optional import polars as pl import io import sys -from numba import njit def is_grouped_with_previous( @@ -59,11 +54,11 @@ def group_peaks(df, min_frac_overlap=0.5, min_reciprocal_overlap=0.75): ), ) .with_columns( - (~pl.col("shares_FIREs")).cumsum().alias("group"), + (~pl.col("shares_FIREs")).cum_sum().alias("group"), ) .sort("group") .with_columns( - pl.col("score").max().over("group").suffix("_max"), + pl.col("score").max().over("group").name.suffix("_max"), peak_start=pl.col("peak_start").min().over("group").cast(pl.UInt32), peak_end=pl.col("peak_end").max().over("group").cast(pl.UInt32), local_max_count=pl.col("group").len().over("group"), diff --git a/workflow/scripts/percent-in-clusters.sh b/workflow/scripts/percent-in-clusters.sh index 1d2db9f2e2..01213cf511 100755 --- a/workflow/scripts/percent-in-clusters.sh +++ b/workflow/scripts/percent-in-clusters.sh @@ -9,8 +9,8 @@ if [[ $# != 3 ]]; then exit 1 fi -oe=$(zcat $1 \ - | awk '{ \ +oe=$(zcat $1 | + awk '{ \ coverage[$4][$5]+=$3-$2; \ } END { \ real_bp = 0; \ @@ -26,7 +26,7 @@ n_tests=$(zcat $2 | wc -l) min_fdr=$(echo "-10.0*(l(0.01/${n_tests})/l(10.0))" | bc -lq) # n_peaks=$(zcat $2 | awk -v m="${min_fdr}" '$4 >= m' | wc -l) -printf "percent-of-MSPs-preferentially-clustered-along-the-genome\tmin_fdr\n" > $3 -printf "%s%%\t%s\n" ${oe} ${min_fdr} >> $3 +printf "percent-of-MSPs-preferentially-clustered-along-the-genome\tmin_fdr\n" >$3 +printf "%s%%\t%s\n" ${oe} ${min_fdr} >>$3 exit 0 diff --git a/workflow/scripts/trackhub.py b/workflow/scripts/trackhub.py index 76c8d1216d..f0f3e28f69 100755 --- a/workflow/scripts/trackhub.py +++ b/workflow/scripts/trackhub.py @@ -8,11 +8,12 @@ HUB = """ -hub {sample}-fiberseq -shortLabel {sample}-fiberseq -longLabel {sample}-fiberseq +hub {sample}-FIRE-fiberseq +shortLabel {sample}-FIRE-fiberseq +longLabel {sample}-FIRE-fiberseq genomesFile genomes.txt email mvollger.edu +descriptionUrl fire-description.html """ GENOMES = """ @@ -21,35 +22,11 @@ """ -BW_COMP = """ -track {sample}-{hap}-FDR -compositeTrack on -shortLabel {hap} FDR tracks -longLabel {hap} FDR tracks -type bigWig 0 1000 -autoScale off -viewLimits {FDR_min}:{FDR_max} -maxItems 100000 -maxHeightPixels 50:50:1 -""" - -BW_TEMPLATE = """ - track FDR.{sample}.{hap}.{nm} - parent {sample}-{hap}-FDR - bigDataUrl {file} - shortLabel FDR.{sample}.{hap}.{nm} - longLabel FDR.{sample}.{hap}.{nm} - type bigWig - visibility {viz} - priority {i} - maxHeightPixels 50:50:1 -""" - # transparentOverlay PER_ACC_COMP = """ -track {sample}-percent-accessible -shortLabel {sample}-percent-accessible -longLabel {sample}-percent-accessible +track {sample}-FIRE-percent-accessible +shortLabel {sample}-FIRE-percent-accessible +longLabel {sample}-FIRE-percent-accessible graphTypeDefault points aggregate transparentOverlay container multiWig @@ -63,43 +40,17 @@ visibility full maxHeightPixels 100:50:8 priority 1 +yLineOnOff on +yLineMark 100 +html fire-description.html +gridDefault on """ PER_ACC_TEMPLATE = """ - track {sample}-{hap}-percent-accessible - parent {sample}-percent-accessible - shortLabel {sample}-{hap}-percent-accessible - longLabel {sample}-{hap}-percent-accessible - bigDataUrl {file} - type bigWig - visibility {viz} - color {color} -""" - -FIRE_SCORE_COMP = """ -track {sample}-FIRE-score -shortLabel {sample}-FIRE-score -longLabel {sample}-FIRE-score -graphTypeDefault points -aggregate transparentOverlay -container multiWig -aggregate none -showSubtrackColorOnUi on -type bigWig 0 1000 -alwaysZero on -viewLimits 0:100 -autoScale off -maxItems 100000 -visibility full -maxHeightPixels 100:50:8 -priority 100 -""" - -FIRE_SCORE = """ - track {sample}-{hap}-FIRE-score - parent {sample}-FIRE-score - shortLabel {sample}-{hap}-FIRE-score - longLabel {sample}-{hap}-FIRE-score + track {sample}-{hap}-FIRE-percent-accessible + parent {sample}-FIRE-percent-accessible + shortLabel {sample}-{hap}-FIRE-percent-accessible + longLabel {sample}-{hap}-FIRE-percent-accessible bigDataUrl {file} type bigWig visibility {viz} @@ -108,10 +59,10 @@ MULTI_WIG = """ -track {sample}-{hap}-coverage -parent {sample}-coverage -longLabel {sample}-{hap}-coverage -shortLabel {sample}-{hap}-coverage +track {sample}-{hap}-FIRE-coverage +parent {sample}-FIRE-coverage +longLabel {sample}-{hap}-FIRE-coverage +shortLabel {sample}-{hap}-FIRE-coverage container multiWig aggregate stacked showSubtrackColorOnUi on @@ -119,24 +70,25 @@ autoScale off alwaysZero on viewLimits 0:{upper_coverage} -visibility full +visibility {viz} maxHeightPixels 100:50:8 +html fire-description.html priority 90 - track {sample}-{hap}-accessible - parent {sample}-{hap}-coverage + track {sample}-{hap}-FIRE-accessible + parent {sample}-{hap}-FIRE-coverage bigDataUrl {acc} type bigWig color 139,0,0 - track {sample}-{hap}-linker - parent {sample}-{hap}-coverage + track {sample}-{hap}-FIRE-linker + parent {sample}-{hap}-FIRE-coverage bigDataUrl {link} type bigWig color 147,112,219 - track {sample}-{hap}-nucleosome - parent {sample}-{hap}-coverage + track {sample}-{hap}-FIRE-nucleosome + parent {sample}-{hap}-FIRE-coverage bigDataUrl {nuc} type bigWig color 169,169,169 @@ -148,20 +100,20 @@ compositeTrack on shortLabel {sample}-FIRE-FDR longLabel {sample}-FIRE-FDR -visibility full type bigWig 0 1000 maxItems 100000 maxHeightPixels 100:50:1 alwaysZero on priority 10 +html fire-description.html - track {sample}-log-fdr + track {sample}-log-FIRE-FDR parent {sample}-FIRE-FDR bigDataUrl {fdr} shortLabel {sample} -10log10 FDR longLabel {sample} -10log10 FDR autoScale on - visibility full + visibility hide yLineOnOff on yLineMark {y_line} gridDefault on @@ -169,48 +121,51 @@ TRACK_GROUPS = """ # grouping for fibers -track {sample}-fibers +track {sample}-FIRE-fibers compositeTrack on -shortLabel {sample}-fibers -longLabel {sample}-fibers +shortLabel {sample}-FIRE-fibers +longLabel {sample}-FIRE-fibers type bigBed 12 + maxItems 100000 visibility dense priority 80 +html fire-description.html # grouping for peaks -track {sample}-peaks +track {sample}-FIRE-peaks compositeTrack on -shortLabel {sample}-peaks -longLabel {sample}-peaks +shortLabel {sample}-FIRE-peaks +longLabel {sample}-FIRE-peaks type bigBed 12 + maxItems 100000 visibility dense priority 30 +html fire-description.html # track of unreliable regions just above the peak tracks - track {sample}-unreliable-coverage-regions - parent {sample}-peaks - shortLabel {sample}-unreliable-coverage-regions - longLabel {sample}-unreliable-coverage-regions + track {sample}-unreliable-FIRE-coverage-regions + parent {sample}-FIRE-peaks + shortLabel {sample}-unreliable-FIRE-coverage-regions + longLabel {sample}-unreliable-FIRE-coverage-regions type bigBed bigDataUrl bb/unreliable-coverage-regions.bb visibility dense priority 29 # grouping for coverage -track {sample}-coverage +track {sample}-FIRE-coverage superTrack on show -shortLabel {sample}-coverage -longLabel {sample}-coverage +shortLabel {sample}-FIRE-coverage +longLabel {sample}-FIRE-coverage priority 90 +html fire-description.html """ DECORATED = """ - track {sample}-{hap}-fibers - parent {sample}-fibers - shortLabel {sample}-{hap}-fibers - longLabel {sample}-{hap}-fibers + track {sample}-{hap}-FIRE-fibers + parent {sample}-FIRE-fibers + shortLabel {sample}-{hap}-FIRE-fibers + longLabel {sample}-{hap}-FIRE-fibers visibility dense type bigBed 12 + itemRgb On @@ -224,8 +179,8 @@ # type bigBed 6 + 4 FIRE_TEMPLATE = """ - track {sample}-FIRE-peaks - parent {sample}-peaks + track {sample}-narrow-FIRE-peaks + parent {sample}-FIRE-peaks type bigNarrowPeak bigDataUrl {file} shortLabel {sample}-FIRE-peaks @@ -235,10 +190,10 @@ """ WIDE_TEMPLATE = """ - track {sample}-{name} - parent {sample}-peaks - shortLabel {sample}-{name} - longLabel {sample}-{name} + track {sample}-wide-FIRE-peaks + parent {sample}-FIRE-peaks + shortLabel {sample}-wide-FIRE-peaks + longLabel {sample}-wide-FIRE-peaks type bigBed bigDataUrl {file} visibility dense @@ -247,13 +202,13 @@ """ HAP_TEMPLATE = """ - track {sample}-hap-differences - parent {sample}-peaks + track {sample}-FIRE-hap-differences + parent {sample}-FIRE-peaks type bigBed 9 + itemRgb on bigDataUrl {file} - shortLabel {sample}-hap-differences - longLabel {sample}-hap-differences + shortLabel {sample}-FIRE-hap-differences + longLabel {sample}-FIRE-hap-differences visibility dense maxHeightPixels 25:25:1 """ @@ -267,6 +222,8 @@ def generate_trackhub( ): if ref == "T2Tv2.0": ref = "GCA_009914755.4" + elif ref == "HG002v1.1": + ref = "HG002v1.1.PAT" upper_coverage = int(ave_coverage + 5 * np.sqrt(ave_coverage)) os.makedirs(f"{trackhub_dir}/", exist_ok=True) @@ -276,8 +233,12 @@ def generate_trackhub( trackDb.write(TRACK_GROUPS.format(sample=sample)) for hap in ["all", "hap1", "hap2", "unk"]: + if hap == "all": + viz = "full" + else: + viz = "hide" # add coverage tracks - if hap != "unk": + if hap == "all": acc = f"bw/{hap}.fire.coverage.bw" nuc = f"bw/{hap}.nucleosome.coverage.bw" link = f"bw/{hap}.linker.coverage.bw" @@ -288,27 +249,25 @@ def generate_trackhub( nuc=nuc, sample=sample, hap=hap, + viz=viz, upper_coverage=upper_coverage, ) ) if hap == "all": - file = f"bb/FDR-FIRE-peaks.bb" + file = "bb/fire-peaks.bb" trackDb.write(FIRE_TEMPLATE.format(file=file, sample=sample)) # add hap tracks - file = f"bb/hap_differences.bb" + file = "bb/hap_differences.bb" trackDb.write(HAP_TEMPLATE.format(file=file, sample=sample)) - file = "bb/FDR-wide-peaks.bb" - trackDb.write( - WIDE_TEMPLATE.format(file=file, name="FDR-wide-peaks", sample=sample) - ) + file = "bb/fire-wide-peaks.bb" + trackDb.write(WIDE_TEMPLATE.format(file=file, sample=sample)) # add percent accessible tracks file = f"bw/{hap}.percent.accessible.bw" if hap == "all": color = "0,0,0" trackDb.write(PER_ACC_COMP.format(sample=sample)) - # trackDb.write(FIRE_SCORE_COMP.format(sample=sample, file=f"bw/score.bw")) elif hap == "hap1": color = "0,0,255" elif hap == "hap2": @@ -321,16 +280,6 @@ def generate_trackhub( sample=sample, hap=hap, file=file, color=color, viz=viz ) ) - # zhap = "" if hap == "all" else f"_{hap}".replace("hap", "H") - # trackDb.write( - # FIRE_SCORE.format( - # sample=sample, - # hap=hap, - # file=f"bw/score{zhap}.bw", - # viz=viz, - # color=color, - # ) - # ) # new bin files if hap == "all": @@ -341,8 +290,8 @@ def generate_trackhub( trackDb.write( FIRE_SCORE_AND_FDR.format( sample=sample, - fdr=f"bw/log_FDR.bw", - score=f"bw/score.bw", + fdr="bw/log_FDR.bw", + score="bw/score.bw", y_line=-10 * np.log10(0.05), ) ) diff --git a/workflow/templates/fire-description.html b/workflow/templates/fire-description.html new file mode 100644 index 0000000000..ada2528c85 --- /dev/null +++ b/workflow/templates/fire-description.html @@ -0,0 +1,98 @@ +

Description

+Fiber-seq Inferred Regulatory Elements + +

+ These tracks represent + FIRE peak calls + inferred from regulatory elements in Fiber-seq data. If you are unframiliar + with Fiber-seq please see the references below for a detailed description, but + in short it is useful to think of it as a long-read version of DNaseI/ATAC-seq + that can be used to identify regions of chromatin accessibility. +

+ +

+ FIREs are MTase sensitive patches (MSPs) on Fiber-seq reads that are inferred + to be regulatory elements on single chromatin fibers. To do this we used + semi-supervised machine learning to identify MSPs that are likely to be + regulatory elements using the Mokapot framework and + XGBoost. Every individual FIRE element is associated with a + precision value, which indicates the probability that the FIRE element is a + true regulatory element. Significantly more detail is avalible in our + manuscript and fiberseq website both of which are linked below. +

+ +

Track Descriptions

+

+

  • + FIRE peaks: Peaks are called by identifying FIRE score local-maxima + that have FDR values below a 5% threshold. Once a local-maxima is + identified, the start and end positions of the peak are determined by the + median start and end positions of the underlying FIRE elements. +
  • + +
  • + Wide FIRE peaks: Wide peaks are the union of the FIRE peaks and all + regions below the FDR threshold. We then merge the resulting regions that + are within one nucleosome (147 bp) of one another. +
  • + +
  • + log FIRE FDR: FDR calculation begins by shuffling the locations of + all the fibers across the genome and recalculating the FIRE score for each + position in the genome. The FDR is then defined as the number of bases that + have shuffled FIRE scores above a threshold divided by the number of bases + in the un-shuffled data. Displayed in the track is the -10log10 + transformation of this FDR value so the more significant FIRE scores appear + as higher values. +
  • + +
  • + Unreliable FIRE coverage regions: The unreliable FIRE coverage track + shows regions that were exlcuded from the FDR calculations due to low or + high sequencing depth. Defined as deviating from the median sequencing depth + by 5 or more standard deviations. +
  • + +
  • + FIRE coverage: The FIRE coverage track shows the number of fibers + that are MSPs (purple), FIREs (red), and nucleosomes (gray) at each position + in the genome. The coverage track is calculated by counting the number of + fibers that have a MSP, FIRE, or nucleosome at each position in the genome. +
  • + +
  • + Percent accessible: The percent of fibers that contain a FIRE element + overlaping a given position in the genome. The percent of accessible fibers + for haplotype one is displayed as a red line, haplotype 2 as a blue line, + and both haplotypes as a black line. +
  • + +
  • + FIRE fibers : A decorator track that shows individual Fiber-seq + reads (fibers) along the genome. Each fiber is colored by the MSPs (purple), + FIREs (red), and nucleosomes (gray) that it contains. Optionally, you can + also display the raw 5mC or m6A information using the track configuration. +
  • +

    + +

    Methods

    +

    + Please refer to + https://fiberseq.github.io/ + for more details. +

    + +

    Credits

    +Tracks were generated by Mitchell Vollger (mvollger_at_uw.edu) and Andrew +Stergachis (absterga_at_uw.edu). + +

    References

    +

    + Vollger, M. R., Swanson, et al. (2024). A haplotype-resolved view of human + gene regulation. bioRxiv (p. 2024.06.14.599122). + DOI: https://doi.org/10.1101/2024.06.14.599122 +