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
+