diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d23dd62..8587f40 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -44,3 +44,9 @@ jobs: - name: yamllint run: yamllint . + + - name: Install pytest + run: pip install pytest + + - name: pytest + run: python -m pytest tests/ -v diff --git a/.gitignore b/.gitignore index a6fa853..d1054ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ *.swp .bundle/ +__pycache__/ +.pytest_cache/ diff --git a/Jenkinsfile b/Jenkinsfile index 0da6742..2c0d49c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -37,6 +37,17 @@ tests['shellcheck'] = { } // node } +tests['pytest'] = { + node('docker') { + checkout scm + + docker.image('python:3.11-slim').inside("-e HOME=${pwd()}") { + sh 'pip install --quiet pytest' + sh 'python -m pytest tests/ -v' + } // .inside + } // node +} + stage('tests') { parallel tests } diff --git a/derive_rubinenv_env.py b/derive_rubinenv_env.py new file mode 100755 index 0000000..7ae1844 --- /dev/null +++ b/derive_rubinenv_env.py @@ -0,0 +1,231 @@ +#!/usr/bin/env python3 +"""Derive the published rubin-env explicit env file from a rubin-env-rsp build. + +Builds run in rubin-env-rsp, so `conda list --explicit` of the build env is the +exact build record and is published as ${tag}_rsp.env. ${tag}.env is the subset +of that same solve which a non-RSP consumer needs, and is what `lsstinstall -X` +installs. + +The subset has to be computed from the build env itself, by keeping the packages +reachable from rubin-env over `depends`. Taking the package names from a separate +plain rubin-env solve does not work: the two solves can pick different build +variants of the same package, and a variant chosen by the rsp solve may require +packages the rubin-env solve never listed. +""" + +import argparse +import glob +import json +import os +import re +import sys +from urllib.parse import urlparse + +ARCHIVE_SUFFIXES = (".conda", ".tar.bz2") + +# conda explicit files may reference a local channel as well as a remote one; +# the prereleased-rubin-env build path installs from a file channel. +PACKAGE_SCHEMES = ("http", "https", "file") + + +def die(msg): + print(f"ERROR: {msg}", file=sys.stderr) + sys.exit(1) + + +def is_package_line(line): + """Return True if the line is a package URL rather than a comment/@EXPLICIT.""" + return urlparse(line.strip()).scheme in PACKAGE_SCHEMES + + +def pkgname(line): + """Return the package name from a conda explicit URL line. + + Package names may contain '-', so trim the trailing '--' + fields rather than splitting on '-'. + """ + fn = os.path.basename(urlparse(line.strip()).path) + for suffix in ARCHIVE_SUFFIXES: + if fn.endswith(suffix): + fn = fn.removesuffix(suffix) + break + return fn.rsplit("-", 2)[0] + + +def depname(spec): + """Return the bare package name from a conda match spec.""" + return re.split(r"[\s=<>!|,\[]", spec.strip(), maxsplit=1)[0] + + +def read_rsp_env(path): + """Return (lines, name -> url line) for a conda explicit file. + + Non-URL lines are kept in `lines` so they can be reproduced in place: the + conda header, @EXPLICIT, and lsstsw's leading '#environment_name:' line, + which envconfig greps back out of the derived file. + """ + try: + with open(path) as f: + lines = f.read().splitlines() + except OSError as e: + die(f"unable to read --rsp-env {path}: {e}") + + urls = {} + for line in lines: + if not is_package_line(line): + continue + name = pkgname(line) + if name in urls: + die(f"{path} lists {name} more than once") + urls[name] = line + if not urls: + die(f"{path} contains no package URLs") + return lines, urls + + +def read_conda_meta(path): + """Return name -> list of dependency specs from a conda-meta directory.""" + files = glob.glob(os.path.join(path, "*.json")) + if not files: + die(f"no package metadata found in --conda-meta {path}") + + depends = {} + for f in files: + try: + with open(f) as fh: + meta = json.load(fh) + except (OSError, ValueError) as e: + die(f"unable to read {f}: {e}") + name = meta.get("name") + if name: + depends[name] = meta.get("depends", []) + return depends + + +def reachable_from(roots, depends): + """Return the set of package names reachable from roots over `depends`.""" + seen = set() + stack = list(roots) + while stack: + name = stack.pop() + if name in seen: + continue + seen.add(name) + for spec in depends.get(name, []): + dep = depname(spec) + # __glibc, __unix, ... are virtual packages with no artifact + if dep and not dep.startswith("__") and dep not in seen: + stack.append(dep) + return seen + + +def build_argparser(): + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument( + "--rsp-env", + required=True, + help="conda explicit file for the rubin-env-rsp build env (${tag}_rsp.env)", + ) + parser.add_argument( + "--out", + required=True, + help="derived conda explicit file to write (${tag}.env)", + ) + parser.add_argument( + "--conda-meta", + default=None, + help="conda-meta directory of the build env " + "(default: $CONDA_PREFIX/conda-meta)", + ) + parser.add_argument( + "--root", + action="append", + default=None, + help="metapackage to walk from; repeatable (default: rubin-env)", + ) + return parser + + +def derive(rsp_env, out_path, conda_meta, roots): + """Write the subset of `rsp_env` reachable from `roots` to `out_path`.""" + lines, urls = read_rsp_env(rsp_env) + depends = read_conda_meta(conda_meta) + + # A package in the build record with no metadata means --conda-meta belongs + # to a different or stale env; walking it would emit a partial file. + without_meta = sorted(set(urls) - set(depends)) + if without_meta: + die( + f"--conda-meta {conda_meta} has no metadata for " + f"{len(without_meta)} package(s) listed in {rsp_env}; " + f"it does not describe the same environment: " + f"{', '.join(without_meta)}" + ) + + missing_roots = [r for r in roots if r not in urls] + if missing_roots: + die( + f"{rsp_env} does not contain root package(s) " + f"{', '.join(missing_roots)}; rubin-env-rsp is expected to depend " + f"on rubin-env" + ) + + reachable = reachable_from(roots, depends) + + # Closure guard: the walk cannot violate this, which is the point -- it pins + # the invariant so a later change here cannot publish an env that installs + # and then fails to import. + violations = {} + for name in sorted(reachable): + if name in urls: + continue + for parent in sorted(reachable): + if parent in urls and name in {depname(s) for s in depends.get(parent, [])}: + violations.setdefault(name, []).append(parent) + if violations: + print( + f"ERROR: derived env is not dependency closed -- " + f"{len(violations)} package(s) reachable from " + f"{', '.join(roots)} have no entry in {rsp_env}:", + file=sys.stderr, + ) + for name, parents in sorted(violations.items()): + print(f" {name} <- required by: {', '.join(parents)}", file=sys.stderr) + sys.exit(1) + + out = [] + for line in lines: + if not is_package_line(line): + out.append(line) + elif pkgname(line) in reachable: + out.append(line) + + try: + with open(out_path, "w") as f: + f.write("\n".join(out) + "\n") + except OSError as e: + die(f"unable to write --out {out_path}: {e}") + + kept = sum(1 for line in out if is_package_line(line)) + print( + f"derived {out_path}: {kept} of {len(urls)} packages from " + f"{rsp_env} (reachable from {', '.join(roots)})" + ) + + +def main(): + args = build_argparser().parse_args() + + conda_meta = args.conda_meta + if conda_meta is None: + prefix = os.environ.get("CONDA_PREFIX") + if not prefix: + die("--conda-meta not given and CONDA_PREFIX is unset; " + "is the build environment activated?") + conda_meta = os.path.join(prefix, "conda-meta") + + derive(args.rsp_env, args.out, conda_meta, args.root or ["rubin-env"]) + + +if __name__ == "__main__": + main() diff --git a/lsstswBuild.sh b/lsstswBuild.sh index 05acaf2..0e1c217 100755 --- a/lsstswBuild.sh +++ b/lsstswBuild.sh @@ -186,6 +186,12 @@ ARGS=() [[ ${#PRODUCT_LIST[@]} -ne 0 ]] && ARGS+=("${PRODUCT_LIST[@]}") +# rebuild derives ${BUILD}.env -- the non-RSP subset of its rubin-env-rsp build +# env -- by delegating to this script, so that derivation has a single +# implementation shared with release/tarball. Without it, rebuild falls back to +# publishing the build env verbatim. +export LSST_DERIVE_ENV_SCRIPT="${SCRIPT_DIR}/derive_rubinenv_env.py" + if ! run "${LSSTSW}/bin/rebuild" "${ARGS[@]}"; then fail 'Failed during rebuild of DM stack.' fi diff --git a/tests/data/w_2026_36.env b/tests/data/w_2026_36.env new file mode 100644 index 0000000..648df4a --- /dev/null +++ b/tests/data/w_2026_36.env @@ -0,0 +1,792 @@ +#environment_name: lsst-scipipe-13.1.0-rsp +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +# created-by: conda 26.5.3 +@EXPLICIT +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +https://conda.anaconda.org/conda-forge/linux-64/git-lfs-3.8.0-h2c09266_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda +https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.88.0-ha770c72_7.conda +https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.4.0-hd9a9cd0_104.conda +https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_1.conda +https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.4.0-ha5b54cb_104.conda +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-23.1.0-h7148c6a_0.conda +https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda +https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_2.conda +https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-9_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/rclone-1.75.0-h519d9b9_0.conda +https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.97.1-h2c6d0dc_2.conda +https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda +https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-8_kmp_llvm.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_3.conda +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_4.conda +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/cspice-67-hb03c661_13.conda +https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-h7cc23a3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-ha257d8a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h39a168f_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-h084b8d7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-ha23c83e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-hebe6cf0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h922cc85_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-hebe6cf0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hebe6cf0_1003.conda +https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb03c661_3.conda +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda +https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/patch-2.8-h280c20c_1003.conda +https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h1114479_1012.conda +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda +https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda +https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-h8b1a151_9.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-h8b1a151_5.conda +https://conda.anaconda.org/conda-forge/linux-64/binutils-2.46.1-default_h4852527_102.conda +https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.46.1-default_h4852527_102.conda +https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.4-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.18.0-py310hb664d3d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_2.conda +https://conda.anaconda.org/conda-forge/linux-64/expat-2.8.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-25.9.23-hb7d4c21_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-h76c4fd7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h55b0958_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gflags-2.3.1-h54a6638_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hfd2156b_3.conda +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/imath-3.2.2-hde8ca8f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.2-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda +https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.33.1-h7148c6a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libapr-1.7.6-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-ha411449_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h018ffa1_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.129-h7cc23a3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h57c4cff_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpython-3.13.15-hdc7f604_103_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.4.0-hf39dbba_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda +https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hd2095e1_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-hee9eb32_2.conda +https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.2-hc2c9f91_1.conda +https://conda.anaconda.org/conda-forge/linux-64/minuit2-6.34.02-h5888daf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-h8142553_0.conda +https://conda.anaconda.org/conda-forge/linux-64/munge-0.5.16-h63a00c3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-hee9eb32_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_1.conda +https://conda.anaconda.org/conda-forge/linux-64/onednn-3.12-threadpool_h77e0eb8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h8c49934_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_3.conda +https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda +https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.6.2-he8a4886_1.conda +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.3-h7148c6a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/starlink-ast-9.3.1-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hc1c935e_2.conda +https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-h0d788c3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hce19668_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.23.3-hdaf4b65_5.conda +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-h9908984_3.conda +https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.1.5-hc31b594_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda +https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h3a84ec1_3.conda +https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.4.0-heaf7ae8_4.conda +https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hb7133d2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/glslang-16.5.0-h980caa0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.0.21-h793e66c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libapriconv-1.2.2-hc93bbbd_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.2-hcfa2d63_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hd24cca6_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-16.2.0-h69a702a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.3-he503a2a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-openmp_h12324f8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-hfb7daa7_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h7b12aa8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h46dd2a8_20.conda +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.14.6-hca6bf5a_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-ha2cb11d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/onednn-cpu-threadpool-3.12-threadpool_hc2f90bd_0.conda +https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-64.0-h192683f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.17.0-hb6aa676_2.conda +https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda +https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.3.0-h78fed68_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xpa-2.1.20-h27087fc_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.7-h28f887f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.7-ha8fc4e3_5.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-h505cf86_3.conda +https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.4.0-h611768e_4.conda +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.3-h4db4eae_1.conda +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_2.conda +https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.4.0-hc469d41_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.8-h68053f1_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.4.0-he75539a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.3-h67ed8a3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda +https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.4.0-hc436dd5_4.conda +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h9073bf1_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libaprutil-1.6.3-h57e58d3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-10_h4a7cf45_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-devel-1.88.0-hfcd1e18_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libfabric1-2.5.0-h8f87c3e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1023.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.14.6-he237659_3.conda +https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-ha2cb11d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ndarray-1.6.5-h995c207_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.34-openmp_hd77311e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55e1f5c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openjph-0.30.1-h8d634f6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/orc-2.2.2-h19cb568_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pgplot-5.2.2-hbeaba86_1009.conda +https://conda.anaconda.org/conda-forge/linux-64/prmon-3.3.0-hdce2df8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.13.15-hf47f18c_103_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rust-1.97.1-hc89c8c8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.4-h9ffa6c4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.22.0-hb659a20_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda +https://conda.anaconda.org/conda-forge/noarch/aenum-3.1.17-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.7.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/apr-1.7.6-h4439e39_0.conda +https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.7.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.8.31.0.57.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.3-hef928c7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.3-hc63082f_11.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda +https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda +https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.7.0-py313h8f72f4d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py313h843e2db_1.conda +https://conda.anaconda.org/conda-forge/noarch/blinker-1.9.0-pyhff2d567_0.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313h2fc2bef_3.conda +https://conda.anaconda.org/conda-forge/linux-64/cachebox-5.2.3-py313h843e2db_1.conda +https://conda.anaconda.org/conda-forge/noarch/cached_property-2.0.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/cachetools-7.1.8-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3c89d7e_3.conda +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.2-ha0b56bc_1.conda +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.5.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.3-hff7ac6b_0.conda +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/configparser-7.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.16.0-py313h2af15c8_0.conda +https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.15-py313hd8ed1ab_103.conda +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/cython-3.3.0-py313hb646302_0.conda +https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py313h5d5ffb9_0.conda +https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/docopt-0.6.2-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/eups-2.2.15-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fastavro-1.12.2-py313h54dd161_1.conda +https://conda.anaconda.org/conda-forge/noarch/filelock-3.32.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/frozendict-2.4.7-pyh851646a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.8.0-py313h6b9daa2_0.conda +https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/gast-0.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gcc-14.4.0-hc6a0c74_4.conda +https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.4.0-h490a4d9_1.conda +https://conda.anaconda.org/conda-forge/linux-64/git-2.55.0-pl5321h5685339_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.1-py313ha4a6282_0.conda +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.5.5-py313h5d5ffb9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.4.0-he93183a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_110.conda +https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +https://conda.anaconda.org/conda-forge/noarch/humanize-4.16.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idna-3.19-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/interface_meta-1.3.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jmespath-1.1.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.17-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.1-py313h2551ef2_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.12.0-py313hd42f317_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.9-gpl_hc2c16d8_100.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-10_h0358290_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.5.0-ha770c72_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda +https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.73.1-h3288cfb_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-10_h47877c9_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/librdkafka-2.15.0-h560e972_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-h51789e4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-devel-2.14.6-he237659_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.49.0-py313hd9b1b65_2.conda +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_1.conda +https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/meson-1.12.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/mock-5.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/narwhals-2.25.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.13-hf734b31_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/orderly-set-5.5.0-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/panda-client-2.0.7-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pathable-0.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py313h3b26573_1.conda +https://conda.anaconda.org/conda-forge/noarch/pip-26.2.1-pyh145f28c_0.conda +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda +https://conda.anaconda.org/conda-forge/linux-64/proj-9.8.1-he0df7b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda +https://conda.anaconda.org/conda-forge/linux-64/propcache-0.5.2-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py313hd42f317_2.conda +https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda +https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/puremagic-2.2.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyh648e204_0.conda +https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.14.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyflakes-3.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pylatexenc-2.11-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytz-2026.3.post1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda +https://conda.anaconda.org/conda-forge/linux-64/rebound-5.0.1-py313h07c4f96_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.6.3-py313ha296275_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py313hd42f317_3.conda +https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.5-h813ae00_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rust_linux-64-1.97.1-hc94ae4a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scons-4.10.1-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/setproctitle-1.3.7-py313h54dd161_0.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-84.0.0-pyh332efcf_0.conda +https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda +https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.3-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.9.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda +https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.15.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.8-py313h07c4f96_0.conda +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.70.0-pyh8f84b5b_0.conda +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.4.4-pyh8f84b5b_0.conda +https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ucc-1.8.0-h539fd1b_2.conda +https://conda.anaconda.org/conda-forge/noarch/uncompresspy-0.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.16-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.4.0-py313hd42f317_0.conda +https://conda.anaconda.org/conda-forge/noarch/ws4py-0.5.1-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/xmltodict-1.0.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.6-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.13.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.3-h06ab39a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.13.0-ha7a2c86_0.conda +https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda +https://conda.anaconda.org/conda-forge/noarch/cached-property-2.0.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.1-py313ha52865f_2.conda +https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +https://conda.anaconda.org/conda-forge/noarch/configobj-5.0.9-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/deepdiff-9.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fitsverify-4.22-h0ab0aa2_4.conda +https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/geomet-1.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.4.0-hc6a0c74_4.conda +https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gxx-14.4.0-hc6a0c74_4.conda +https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda +https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/joblib-1.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsondiff-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda +https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-24.0.21-h4effbbe_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.4.0-h23af247_1.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.11.0-10_h6ae95b6_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hb9b0907_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpmix-5.0.8-h31fc519_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_hab3fe16_120.conda +https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.1-cpu_generic_h1322af4_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-hb83e432_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.357.0-h0e34353_2.conda +https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/log4cxx-1.2.0-h6a23f06_100.conda +https://conda.anaconda.org/conda-forge/linux-64/lxml-6.1.2-py313h8b16a13_0.conda +https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/maturin-1.15.0-py310h51edae1_1.conda +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.19-py313h54dd161_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py313hf6604e3_0.conda +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pbr-7.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.53-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/py2vega-0.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-3.1.0-pyh293190f_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-confluent-kafka-2.15.0-py313h07c4f96_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda +https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.15-h4df99d1_103.conda +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.12.0-py313h4a32529_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-utils-4.0.1-pyh332efcf_0.conda +https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/stomp.py-8.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda +https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda +https://conda.anaconda.org/conda-forge/noarch/traittypes-0.2.3-pyh332efcf_0.conda +https://conda.anaconda.org/conda-forge/noarch/typeguard-4.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/vcs_versioning-2.3.2-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wcslib-8.2.2-hb28848a_6.conda +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.8-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h7cc23a3_4.conda +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.24.5-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.5-py313hd6074c6_0.conda +https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/assist-1.1.11-py313h29aa505_2.conda +https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.35.4-h8824e59_0.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda +https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bottleneck-1.6.0-np2py313hc18bace_3.conda +https://conda.anaconda.org/conda-forge/linux-64/cassandra-driver-3.30.1-py313h7f6d75f_2.conda +https://conda.anaconda.org/conda-forge/noarch/cli_helpers-2.15.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py313hc8edb43_4.conda +https://conda.anaconda.org/conda-forge/linux-64/cryptography-50.0.1-py313h78454fb_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda +https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.8.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/emcee-3.1.6-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/esutil-0.6.16-py313h08cd8bf_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fitsio-1.4.2-np2py313h91064be_0.conda +https://conda.anaconda.org/conda-forge/noarch/flask-3.1.3-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.61-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py313hf402d47_104.conda +https://conda.anaconda.org/conda-forge/linux-64/hpgeom-1.5.4-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-24.0.21-h8d23d0f_1.conda +https://conda.anaconda.org/conda-forge/noarch/httpcore2-2.12.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.6.26-py313ha402da8_0.conda +https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda +https://conda.anaconda.org/conda-forge/linux-64/iminuit-2.32.0-py313h5d5ffb9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipython-9.17.1-pyh53cf698_0.conda +https://conda.anaconda.org/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-python-1.88.0-py313hfaae9d9_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.13.1-h2c8e1a9_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-hdb79228_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.4.0-h23af247_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsstdesc-ceci-2.5.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lsstdesc.coord-1.3.1-py313h7037e92_0.conda +https://conda.anaconda.org/conda-forge/noarch/mako-1.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.4-np2py313h73dcb5b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/numba-0.67.0-py313h901f96d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.2-py313h24ae7f9_100.conda +https://conda.anaconda.org/conda-forge/linux-64/openmpi-5.0.10-hee33aa4_2.conda +https://conda.anaconda.org/conda-forge/linux-64/optree-0.20.0-py313h6bdb861_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py313h08cd8bf_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pango-1.58.2-hda50119_0.conda +https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pep8-naming-0.15.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.6.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.53-hd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/psycopg-c-3.3.4-py313hd8e328e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/psycopg2-2.9.12-py313hdc942f6_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybtex-0.26.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.5-py313ha296275_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pyfftw-0.15.1-py313h29aa505_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py313h60fd124_4.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda +https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.3-py313h4b8bb8b_2.conda +https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.16-h5330f5c_0.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.2-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py313had47c43_2.conda +https://conda.anaconda.org/conda-forge/linux-64/spiceypy-8.2.0-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.52-py313h54dd161_0.conda +https://conda.anaconda.org/conda-forge/linux-64/starlink-pyast-4.0.1-py313h29aa505_2.conda +https://conda.anaconda.org/conda-forge/noarch/stevedore-5.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/structlog-26.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/uncertainties-3.2.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313hd42f317_3.conda +https://conda.anaconda.org/conda-forge/noarch/alembic-1.19.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/asteval-1.0.10-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/astropy-base-8.0.1-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/autograd-1.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.606-h20b40b1_10.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h539c000_2.conda +https://conda.anaconda.org/conda-forge/noarch/botocore-1.43.46-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/dogpile.cache-1.5.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/noarch/flask-cors-6.0.5-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/formulaic-1.2.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.4.0-ha770c72_1.conda +https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda +https://conda.anaconda.org/conda-forge/noarch/httpx2-2.12.0-pyhe5d96d1_1.conda +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.9.0-cpu_py313h7c752d1_0.conda +https://conda.anaconda.org/conda-forge/noarch/joserfc-1.7.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-python-devel-1.88.0-py313h59e1532_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.4.1-hd85de46_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.4.1-hd85de46_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.4.1-hd41364c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.4.1-hd41364c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.4.1-h1862bb8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.4.1-h1862bb8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.4.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.4.1-h0767aad_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.4.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/noarch/lsstdesc-bpz-0.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py313h683a580_0.conda +https://conda.anaconda.org/conda-forge/linux-64/mpi4py-4.1.2-py313h276263e_100.conda +https://conda.anaconda.org/conda-forge/noarch/paramiko-4.0.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/psycopg-3.3.4-pyh848bd53_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybtex-docutils-1.0.3-pyhcf101f3_4.conda +https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.5-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pykrb5-0.10.0-py313h4a32529_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.12.2-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pytables-3.11.1-py313h0546747_3.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-doctestplus-1.7.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-runner-6.0.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/pytest-session2file-0.1.11-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-vcr-1.0.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.0.21-py313h99d3a43_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.1-cpu_generic_py313_h33fc178_3.conda +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.2.0-py312h8a5ba0d_0.conda +https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rustfits-0.1.8-py311h3d52661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py313h16d504d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda +https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.5.0-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/spherematch-0.10.2-py313h29aa505_3.conda +https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.8.23-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/linux-64/treecorr-5.1.4-py313haa59f46_0.conda +https://conda.anaconda.org/conda-forge/noarch/ads-0.12.7-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-3.8.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/aws-xray-sdk-2.15.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/bqscales-0.3.7-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/colour-science-0.4.7-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/firefly-client-3.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/galsim-2.8.5-py313hf4995c5_0.conda +https://conda.anaconda.org/conda-forge/noarch/ginga-7.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.52-ha5ea40c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/healpy-1.18.1-py313h2f5daae_2.conda +https://conda.anaconda.org/conda-forge/noarch/healsparse-1.14.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.0.21-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-common-2.6.12-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jax-0.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-path-0.5.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.10.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/keyring-25.7.0-pyha804496_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.0-h40b5c2d_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda +https://conda.anaconda.org/conda-forge/noarch/lmfit-1.3.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsst-ts-xml-28.0.1-pyh707e725_0.conda +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/parsl-2026.2.9-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pgspecial-2.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/photutils-base-3.0.0-py313h29aa505_1.conda +https://conda.anaconda.org/conda-forge/noarch/pooch-1.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.15.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyld-3.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyvo-1.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/requests-kerberos-0.15.0-pyh707e725_1.conda +https://conda.anaconda.org/conda-forge/noarch/responses-0.26.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/rucio-clients-38.5.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/schwimmbad-0.4.2-py313h78bf25f_2.conda +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py313hb172dc5_0.conda +https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.15.0-np2py313hfeff522_1.conda +https://conda.anaconda.org/conda-forge/linux-64/synphot-1.7.0-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/noarch/tables-io-1.1.2-pyh97e8d58_0.conda +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.24.0-cpu_py313_hf8de91a_0.conda +https://conda.anaconda.org/conda-forge/noarch/treegp-1.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/zenodo_get-3.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda +https://conda.anaconda.org/conda-forge/noarch/astroquery-0.4.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/batoid-0.8.1-py313h08cd8bf_0.conda +https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.46-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/bqplot-0.13.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/dustmaps-1.0.14-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_h43fde53_912.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.0.21-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/noarch/idds-workflow-2.6.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.31.0-pyha191276_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.0-h8c2c5c3_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.0-h7376487_2_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ngmix-core-2.4.1-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.9.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pgcli-4.6.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/piff-1.6.0-py313h08cd8bf_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-hdfs-2.7.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/qp-prob-1.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/s3fs-2026.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/linux-64/skyproj-2.6.1-py313h12b3e8d_0.conda +https://conda.anaconda.org/conda-forge/noarch/webdav4-0.11.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/danish-1.2.0-py313h7033f15_1.conda +https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.2-h8b86629_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-client-2.6.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-doma-2.6.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipydatagrid-1.4.0-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.0-h635bf11_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libopencv-4.13.0-qt6_py313hc4bffe0_608.conda +https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.9.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.0-py313h98bfbea_0_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/pz-rail-base-2.0.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/qp-1.1.1-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/sbpy-0.6.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/batoid-rubin-0.7.0-pyh707e725_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.0-h635bf11_2_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/moto-5.2.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/py-opencv-4.13.0-qt6_py313h0e894a1_608.conda +https://conda.anaconda.org/conda-forge/noarch/pz-rail-bpz-2.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pz-rail-sklearn-2.0.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.0-h3f74fd7_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/opencv-4.13.0-qt6_py313h8b1ed44_608.conda +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.0-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/astropy-8.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/gaiaxpy-2.1.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/getcalspec-2.3.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sorcha-1.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rubin-env-13.1.0-py313h87b86d6_2.conda +https://conda.anaconda.org/conda-forge/noarch/autodoc-pydantic-2.1.0-pyh3cfb1c2_1.conda +https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.16.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-automodapi-0.22.0-pyh1139035_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-click-6.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-favicon-1.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-jinja-2.0.2-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/sphinx-last-updated-by-git-0.3.8-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-sitemap-2.9.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.10.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-bibtex-2.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/documenteer-2.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-doxylink-1.13.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rubin-env-nosysroot-13.1.0-np24py313h348c6b4_2.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jquery-4.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-2.1.1-pyh5ded981_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-2.0.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-youtube-1.5.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxext-opengraph-0.13.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxext-rediraffe-0.3.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsst-documenteer-guide-2.4.1-hd8ed1ab_0.conda diff --git a/tests/data/w_2026_36_rsp.env b/tests/data/w_2026_36_rsp.env new file mode 100644 index 0000000..0b32e23 --- /dev/null +++ b/tests/data/w_2026_36_rsp.env @@ -0,0 +1,1036 @@ +#environment_name: lsst-scipipe-13.1.0-rsp +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +# created-by: conda 26.5.3 +@EXPLICIT +https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-4-3_icelake.conda +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +https://conda.anaconda.org/conda-forge/linux-64/gh-2.99.0-hfc2019e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/git-lfs-3.8.0-h2c09266_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda +https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.88.0-ha770c72_7.conda +https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.4.0-hd9a9cd0_104.conda +https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_1.conda +https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.4.0-ha5b54cb_104.conda +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-23.1.0-h7148c6a_0.conda +https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda +https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_2.conda +https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.11-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-9_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/rclone-1.75.0-h519d9b9_0.conda +https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.97.1-h2c6d0dc_2.conda +https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda +https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-8_kmp_llvm.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_3.conda +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_4.conda +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/cspice-67-hb03c661_13.conda +https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-h7cc23a3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-ha257d8a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h39a168f_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-h084b8d7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libmagic-5.48-h421ea60_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-hebe6cf0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h922cc85_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-hebe6cf0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hebe6cf0_1003.conda +https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb03c661_3.conda +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda +https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/patch-2.8-h280c20c_1003.conda +https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h1114479_1012.conda +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda +https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/ripgrep-15.2.0-hf19af3b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/selenium-manager-4.48.0-hf19af3b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-h8b1a151_9.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-h8b1a151_5.conda +https://conda.anaconda.org/conda-forge/linux-64/binutils-2.46.1-default_h4852527_102.conda +https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.46.1-default_h4852527_102.conda +https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.4-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.18.0-py310hb664d3d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h54a6638_2.conda +https://conda.anaconda.org/conda-forge/linux-64/expat-2.8.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-h76c4fd7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h55b0958_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gflags-2.3.1-h54a6638_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ghostscript-10.07.1-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hfd2156b_3.conda +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/imath-3.2.2-hde8ca8f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.2-h280c20c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda +https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.33.1-h7148c6a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libapr-1.7.6-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-ha411449_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h018ffa1_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.129-h7cc23a3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h57c4cff_1.conda +https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.3-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpython-3.13.15-hdc7f604_103_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.4.0-hf39dbba_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda +https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hd2095e1_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-hee9eb32_2.conda +https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.2-hc2c9f91_1.conda +https://conda.anaconda.org/conda-forge/linux-64/minuit2-6.34.02-h5888daf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-h8142553_0.conda +https://conda.anaconda.org/conda-forge/linux-64/munge-0.5.16-h63a00c3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-hee9eb32_1.conda +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-9.6.0-ha2d1da1_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_1.conda +https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h8c49934_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_3.conda +https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda +https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.6.2-he8a4886_1.conda +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.3-h7148c6a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/starlink-ast-9.3.1-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hc1c935e_2.conda +https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-h0d788c3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hce19668_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.23.3-hdaf4b65_5.conda +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-h9908984_3.conda +https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-3.1.5-hc31b594_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda +https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h3a84ec1_3.conda +https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.4.0-heaf7ae8_4.conda +https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hb7133d2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/glslang-16.5.0-h980caa0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-classads-24.0.21-h793e66c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libapriconv-1.2.2-hc93bbbd_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-1.88.0-hd24cca6_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libde265-1.0.15-h00ab1b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-16.2.0-h69a702a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.3-he503a2a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-openmp_h12324f8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-hfb7daa7_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h7b12aa8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h46dd2a8_20.conda +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.14.6-hca6bf5a_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-ha2cb11d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-9.6.0-h81b5e9d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-64.0-h192683f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.17.0-hb6aa676_2.conda +https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda +https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.3.0-h78fed68_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xpa-2.1.20-h27087fc_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.7-h28f887f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.7-ha8fc4e3_5.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-h505cf86_3.conda +https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.4.0-h611768e_4.conda +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.3-h4db4eae_1.conda +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_2.conda +https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.4.0-hc469d41_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.8-h68053f1_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-14.4.0-he75539a_4.conda +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.3-h67ed8a3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda +https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.4.0-hc436dd5_4.conda +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h9073bf1_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libaprutil-1.6.3-h57e58d3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.2-hcfa2d63_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-10_h4a7cf45_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-devel-1.88.0-hfcd1e18_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libfabric1-2.5.0-h8f87c3e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1023.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.6.0-h9635ea4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.14.6-he237659_3.conda +https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-ha2cb11d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ndarray-1.6.5-h995c207_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.34-openmp_hd77311e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55e1f5c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openjph-0.30.1-h8d634f6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/orc-2.2.2-h19cb568_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pgplot-5.2.2-hbeaba86_1009.conda +https://conda.anaconda.org/conda-forge/linux-64/prmon-3.3.0-hdce2df8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.13.15-hf47f18c_103_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rust-1.97.1-hc89c8c8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.4-h9ffa6c4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.22.0-hb659a20_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wget-1.25.0-h653f8fd_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.1-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xsel-1.2.1-hb9d3cd8_6.conda +https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda +https://conda.anaconda.org/conda-forge/noarch/aenum-3.1.17-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.7.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/apr-1.7.6-h4439e39_0.conda +https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.7.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/astropy-iers-data-0.2026.8.31.0.57.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.3-hef928c7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.3-hc63082f_11.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda +https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda +https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.7.0-py313h8f72f4d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py313h843e2db_1.conda +https://conda.anaconda.org/conda-forge/noarch/beartype-0.22.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/blinker-1.9.0-pyhff2d567_0.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313h2fc2bef_3.conda +https://conda.anaconda.org/conda-forge/linux-64/cachebox-5.2.3-py313h843e2db_1.conda +https://conda.anaconda.org/conda-forge/noarch/cached_property-2.0.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/cachetools-7.1.8-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3c89d7e_3.conda +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.6.2-ha0b56bc_1.conda +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.5.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.3-py313h54dd161_1.conda +https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.3-hff7ac6b_0.conda +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/colorcet-3.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/configparser-7.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.16.0-py313h2af15c8_0.conda +https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.15-py313hd8ed1ab_103.conda +https://conda.anaconda.org/conda-forge/linux-64/cramjam-2.11.0-py313h7ef63f5_2.conda +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/cython-3.3.0-py313hb646302_0.conda +https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py313h5d5ffb9_0.conda +https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/diskcache-5.6.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/docopt-0.6.2-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.18.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/eups-2.2.15-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fastavro-1.12.2-py313h54dd161_1.conda +https://conda.anaconda.org/conda-forge/noarch/filelock-3.32.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/freetype-py-2.5.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/frozendict-2.4.7-pyh851646a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.8.0-py313h6b9daa2_0.conda +https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/gast-0.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gcc-14.4.0-hc6a0c74_4.conda +https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-14.4.0-h490a4d9_1.conda +https://conda.anaconda.org/conda-forge/linux-64/git-2.55.0-pl5321h5685339_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.1-py313ha4a6282_0.conda +https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.8.0-py313h74173ec_1.conda +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.5.5-py313h5d5ffb9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.4.0-he93183a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_110.conda +https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/human_readable-2.0.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +https://conda.anaconda.org/conda-forge/noarch/humanize-4.16.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idna-3.19-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/interface_meta-1.3.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/invoke-3.0.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/jiter-0.16.0-py313ha296275_1.conda +https://conda.anaconda.org/conda-forge/noarch/jmespath-1.1.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-collaboration-ui-3.0.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-docprovider-3.0.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-eventlistener-0.4.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-notebook-awareness-0.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.17-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.1-py313h2551ef2_0.conda +https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.12.0-py313hd42f317_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.9-gpl_hc2c16d8_100.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-10_h0358290_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.5.0-ha770c72_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda +https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.73.1-h3288cfb_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libheif-1.19.7-gpl_hc18d805_100.conda +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-10_h47877c9_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/librdkafka-2.15.0-h560e972_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-h51789e4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-devel-2.14.6-he237659_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.49.0-py313hd9b1b65_2.conda +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py313h28739b2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_1.conda +https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/meson-1.12.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/mock-5.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.2-py313h2551ef2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/mysqlclient-2.2.8-py313h62f2913_1.conda +https://conda.anaconda.org/conda-forge/noarch/narwhals-2.25.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.13-hf734b31_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/orderly-set-5.5.0-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/panda-client-2.0.7-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/param-2.4.1-pyhc455866_0.conda +https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pathable-0.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pathlib-abc-0.5.2-pyh9692d8f_0.conda +https://conda.anaconda.org/conda-forge/noarch/pathvalidate-3.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py313h3b26573_1.conda +https://conda.anaconda.org/conda-forge/noarch/pip-26.2.1-pyh145f28c_0.conda +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda +https://conda.anaconda.org/conda-forge/linux-64/proj-9.8.1-he0df7b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda +https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.26.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/propcache-0.5.2-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/linux-64/protobuf-6.31.1-py313h8c92afc_2.conda +https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py313hd42f317_2.conda +https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda +https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/puremagic-2.2.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyavm-0.9.9-pyhc455866_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyh648e204_0.conda +https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.14.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyflakes-3.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pylatexenc-2.11-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pypandoc-1.17-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.6-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-magic-0.4.27-pyhd7f29a5_7.conda +https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.32-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytz-2026.3.post1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda +https://conda.anaconda.org/conda-forge/linux-64/rebound-5.0.1-py313h07c4f96_0.conda +https://conda.anaconda.org/conda-forge/noarch/redo-2.0.4-pyh9f0ad1d_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.6.3-py313ha296275_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py313hd42f317_3.conda +https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.5-h813ae00_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rust_linux-64-1.97.1-hc94ae4a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/scitokens-cpp-1.4.0-h096d96b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scons-4.10.1-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda +https://conda.anaconda.org/conda-forge/linux-64/setproctitle-1.3.7-py313h54dd161_0.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-84.0.0-pyh332efcf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sgp4-2.26-py313h7037e92_0.conda +https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda +https://conda.anaconda.org/conda-forge/noarch/slicerator-1.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.3-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.9.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tenacity-9.1.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda +https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.15.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.8-py313h07c4f96_0.conda +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.70.0-pyh8f84b5b_0.conda +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/truststore-0.10.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.4.4-pyh8f84b5b_0.conda +https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ucc-1.8.0-h539fd1b_2.conda +https://conda.anaconda.org/conda-forge/noarch/uncompresspy-0.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/uritemplate-4.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/websockets-17.1-py313h7f1de9a_0.conda +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.16-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.4.0-py313hd42f317_0.conda +https://conda.anaconda.org/conda-forge/noarch/ws4py-0.5.1-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/noarch/xmltodict-1.0.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.6-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxmu-1.3.1-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-h7cc23a3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.13.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.3-h06ab39a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.13.0-ha7a2c86_0.conda +https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/noarch/bidict-0.24.1-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda +https://conda.anaconda.org/conda-forge/noarch/cached-property-2.0.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.1-py313ha52865f_2.conda +https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +https://conda.anaconda.org/conda-forge/noarch/configobj-5.0.9-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py313h07c4f96_2.conda +https://conda.anaconda.org/conda-forge/noarch/deepdiff-9.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fitsverify-4.22-h0ab0aa2_4.conda +https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/geomet-1.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gfortran-14.4.0-hc6a0c74_4.conda +https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.10.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.75.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/graphicsmagick-1.3.46-hbf38a57_0.conda +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.73.1-py313h2b3948d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gxx-14.4.0-hc6a0c74_4.conda +https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/human-readable-2.0.3-h3b2d6ef_0.conda +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/intake-2.0.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda +https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/joblib-1.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jproperties-2.1.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jsondiff-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/noarch/kafkit-0.3.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libcondor_utils-24.0.21-h4effbbe_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.39.0-hdb79228_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.4.0-h23af247_1.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.11.0-10_h6ae95b6_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.10.1-nompi_h3fa17b5_201.conda +https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hb9b0907_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libpmix-5.0.8-h31fc519_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_hab3fe16_120.conda +https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.1-cpu_generic_h1322af4_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-hb83e432_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.357.0-h0e34353_2.conda +https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/log4cxx-1.2.0-h6a23f06_100.conda +https://conda.anaconda.org/conda-forge/linux-64/lxml-6.1.2-py313h8b16a13_0.conda +https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/maturin-1.15.0-py310h51edae1_1.conda +https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.19-py313h54dd161_0.conda +https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py313hf6604e3_0.conda +https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pbr-7.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/plotly-6.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.53-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.28.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/py-key-value-shared-0.3.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/py2vega-0.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.4.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-3.1.0-pyh293190f_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.13.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py313hd11bf8e_5.conda +https://conda.anaconda.org/conda-forge/linux-64/python-confluent-kafka-2.15.0-py313h07c4f96_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda +https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.15-h4df99d1_103.conda +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.12.0-py313h4a32529_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-snappy-0.7.3-pyh4e55633_1.conda +https://conda.anaconda.org/conda-forge/noarch/python-utils-4.0.1-pyh332efcf_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyu2f-0.1.5-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pyviz_comms-3.0.6-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda +https://conda.anaconda.org/conda-forge/noarch/rsa-4.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/stomp.py-8.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda +https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda +https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda +https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/traittypes-0.2.3-pyh332efcf_0.conda +https://conda.anaconda.org/conda-forge/noarch/typeguard-4.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/universal_pathlib-0.3.10-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/vcs_versioning-2.3.2-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/linux-64/wcslib-8.2.2-hb28848a_6.conda +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.8-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xclip-0.13-hb9d3cd8_4.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h7cc23a3_4.conda +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.24.5-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.5-py313hd6074c6_0.conda +https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-26.1.0-py313h995f894_1.conda +https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/assist-1.1.11-py313h29aa505_2.conda +https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-56-py313h8debf8b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.35.4-h8824e59_0.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hf824e48_2.conda +https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bottleneck-1.6.0-np2py313hc18bace_3.conda +https://conda.anaconda.org/conda-forge/linux-64/cassandra-driver-3.30.1-py313h7f6d75f_2.conda +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.5-py313h29aa505_1.conda +https://conda.anaconda.org/conda-forge/noarch/cli_helpers-2.15.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py313hc8edb43_4.conda +https://conda.anaconda.org/conda-forge/linux-64/cryptography-50.0.1-py313h78454fb_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda +https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.8.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/emcee-3.1.6-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/esutil-0.6.16-py313h08cd8bf_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fitsio-1.4.2-np2py313h91064be_0.conda +https://conda.anaconda.org/conda-forge/noarch/flask-3.1.3-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda +https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.61-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.73.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py313hf402d47_104.conda +https://conda.anaconda.org/conda-forge/linux-64/hpgeom-1.5.4-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-utils-24.0.21-h8d23d0f_1.conda +https://conda.anaconda.org/conda-forge/noarch/httpcore2-2.12.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.6.26-py313ha402da8_0.conda +https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda +https://conda.anaconda.org/conda-forge/linux-64/iminuit-2.32.0-py313h5d5ffb9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipython-9.17.1-pyh53cf698_0.conda +https://conda.anaconda.org/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jplephem-2.24-pyha4b2019_1.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.2.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-python-1.88.0-py313hfaae9d9_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.13.1-h2c8e1a9_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.39.0-hdbdcf42_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.4.0-h23af247_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/noarch/lsstdesc-ceci-2.5.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lsstdesc.coord-1.3.1-py313h7037e92_0.conda +https://conda.anaconda.org/conda-forge/noarch/mako-1.4.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.4-np2py313h73dcb5b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/numba-0.67.0-py313h901f96d_1.conda +https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py313h08cd8bf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.2-py313h24ae7f9_100.conda +https://conda.anaconda.org/conda-forge/linux-64/openmpi-5.0.10-hee33aa4_2.conda +https://conda.anaconda.org/conda-forge/linux-64/optree-0.20.0-py313h6bdb861_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py313h08cd8bf_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pango-1.58.2-hda50119_0.conda +https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pep8-naming-0.15.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.6.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.53-hd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/psycopg-c-3.3.4-py313hd8e328e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/psycopg2-2.9.12-py313hdc942f6_0.conda +https://conda.anaconda.org/conda-forge/noarch/py-key-value-aio-0.3.0-pyh0f3dad7_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybtex-0.26.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.5-py313ha296275_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pyerfa-2.0.1.5-py310h32771cd_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pyfftw-0.15.1-py313h29aa505_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.2-py313h60fd124_4.conda +https://conda.anaconda.org/conda-forge/noarch/pyperclip-1.11.0-pyha804496_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda +https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.3-py313h4b8bb8b_2.conda +https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.16-h5330f5c_0.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.2-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py313had47c43_2.conda +https://conda.anaconda.org/conda-forge/linux-64/spiceypy-8.2.0-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.52-py313h54dd161_0.conda +https://conda.anaconda.org/conda-forge/linux-64/starlink-pyast-4.0.1-py313h29aa505_2.conda +https://conda.anaconda.org/conda-forge/noarch/stevedore-5.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/structlog-26.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/trio-0.34.0-py313hd5f5364_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.1.0-py313h7037e92_0.conda +https://conda.anaconda.org/conda-forge/noarch/uncertainties-3.2.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.52.4-pyhc90fa1f_0.conda +https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.7.8-pyh5ded981_0.conda +https://conda.anaconda.org/conda-forge/noarch/wsproto-1.3.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313hd42f317_3.conda +https://conda.anaconda.org/conda-forge/noarch/alembic-1.19.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/asteval-1.0.10-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/astropy-base-8.0.1-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/autograd-1.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/awkward-2.13.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.606-h20b40b1_10.conda +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h539c000_2.conda +https://conda.anaconda.org/conda-forge/noarch/bokeh-3.9.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/botocore-1.43.46-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/compilers-1.11.0-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/distributed-2026.8.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/dogpile.cache-1.5.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda +https://conda.anaconda.org/conda-forge/linux-64/fastparquet-2026.5.0-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/noarch/flask-cors-6.0.5-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/formulaic-1.2.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.4-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.4.0-ha770c72_1.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5plugin-7.0.0-py313h1410703_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hf-xet-1.5.2-py310hb823017_2.conda +https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda +https://conda.anaconda.org/conda-forge/noarch/httpx2-2.12.0-pyhe5d96d1_1.conda +https://conda.anaconda.org/conda-forge/noarch/identify-2.6.19-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.9.0-cpu_py313h7c752d1_0.conda +https://conda.anaconda.org/conda-forge/noarch/joserfc-1.7.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-python-devel-1.88.0-py313h59e1532_7.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.4.1-hd85de46_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.4.1-hd85de46_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.4.1-hd41364c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.4.1-hb56ce9e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.4.1-hd41364c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.4.1-h1862bb8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.4.1-h1862bb8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.4.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.4.1-h0767aad_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.4.1-hecca717_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/linux-64/lsst-sphgeom-30.2026.3500-py313haa59f46_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsstdesc-bpz-0.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py313h683a580_0.conda +https://conda.anaconda.org/conda-forge/linux-64/mpi4py-4.1.2-py313h276263e_100.conda +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.4-nompi_py311hc841c2f_109.conda +https://conda.anaconda.org/conda-forge/linux-64/nh3-0.3.7-py310h300b7de_0.conda +https://conda.anaconda.org/conda-forge/noarch/paramiko-4.0.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/psycopg-3.3.4-pyh848bd53_0.conda +https://conda.anaconda.org/conda-forge/noarch/pybtex-docutils-1.0.3-pyhcf101f3_4.conda +https://conda.anaconda.org/conda-forge/linux-64/pycrdt-0.14.4-py313h2887f01_0.conda +https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.5-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pykrb5-0.10.0-py313h4a32529_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.12.2-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pytables-3.11.1-py313h0546747_3.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-doctestplus-1.7.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-runner-6.0.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/pytest-session2file-0.1.11-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-vcr-1.0.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-htcondor-24.0.21-py313h99d3a43_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.1-cpu_generic_py313_h33fc178_3.conda +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.2.0-py312h8a5ba0d_0.conda +https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/rich-rst-2.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rustfits-0.1.8-py311h3d52661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py313h16d504d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda +https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.5.0-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/noarch/simple-websocket-1.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/skyfield-1.54-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/spherematch-0.10.2-py313h29aa505_3.conda +https://conda.anaconda.org/conda-forge/noarch/sqlite-anyio-0.2.10-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/starlette-1.6.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.8.23-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/linux-64/treecorr-5.1.4-py313haa59f46_0.conda +https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.12.2-pyh29332c3_0.conda +https://conda.anaconda.org/conda-forge/noarch/typer-0.27.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/xarray-2026.7.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/zarr-3.3.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/ads-0.12.7-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/agent-client-protocol-0.11.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-3.8.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/astroplan-0.10.1-pyhd8ed1ab_2.conda +https://conda.anaconda.org/conda-forge/linux-64/astropy-healpix-2.0.1-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/noarch/authlib-1.8.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/aws-xray-sdk-2.15.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/bqscales-0.3.7-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-np2py313h73dcb5b_3.conda +https://conda.anaconda.org/conda-forge/linux-64/cdshealpix-0.8.1-py313h5c7d99a_1.conda +https://conda.anaconda.org/conda-forge/noarch/colour-science-0.4.7-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/cyclopts-4.23.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/firefly-client-3.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/galsim-2.8.5-py313hf4995c5_0.conda +https://conda.anaconda.org/conda-forge/noarch/ginga-7.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.57.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.52-ha5ea40c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/healpy-1.18.1-py313h2f5daae_2.conda +https://conda.anaconda.org/conda-forge/noarch/healsparse-1.14.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-cli-24.0.21-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-common-2.6.12-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/ipyevents-2.0.4-pyhbbac1ac_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipympl-0.10.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jax-0.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-path-0.5.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magic-commands-0.0.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.10.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-4.1.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/keyring-25.7.0-pyha804496_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.0-h40b5c2d_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda +https://conda.anaconda.org/conda-forge/noarch/lmfit-1.3.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsst-efd-client-1.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsst-ts-xml-28.0.1-pyh707e725_0.conda +https://conda.anaconda.org/conda-forge/noarch/mermaid-py-0.8.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/openapi-pydantic-0.5.1-pyh3cfb1c2_0.conda +https://conda.anaconda.org/conda-forge/noarch/panel-core-1.9.4-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/panoptes-client-1.7.1-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/paramnb-2.0.4-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/parsl-2026.2.9-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pgspecial-2.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/photutils-base-3.0.0-py313h29aa505_1.conda +https://conda.anaconda.org/conda-forge/noarch/pims-0.7-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pooch-1.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.6.2-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/pycrdt-store-0.1.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyct-0.6.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.15.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyld-3.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-engineio-4.14.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyvo-1.9.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/regions-0.12-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/noarch/requests-kerberos-0.15.0-pyh707e725_1.conda +https://conda.anaconda.org/conda-forge/noarch/responses-0.26.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/rucio-clients-38.5.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/schwimmbad-0.4.2-py313h78bf25f_2.conda +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py313hb172dc5_0.conda +https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/noarch/selenium-4.48.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/sse-starlette-3.4.8-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.15.0-np2py313hfeff522_1.conda +https://conda.anaconda.org/conda-forge/linux-64/synphot-1.7.0-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/noarch/tables-io-1.1.2-pyh97e8d58_0.conda +https://conda.anaconda.org/conda-forge/linux-64/torchvision-extra-decoders-0.0.2-py313hf1e760e_3.conda +https://conda.anaconda.org/conda-forge/noarch/treegp-1.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/zenodo_get-3.1.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda +https://conda.anaconda.org/conda-forge/noarch/astroquery-0.4.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/batoid-0.8.1-py313h08cd8bf_0.conda +https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.46-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/bqplot-0.13.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/dask-image-2026.5.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/datashader-0.19.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/dustmaps-1.0.14-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_h43fde53_912.conda +https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.33.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/htcondor-24.0.21-py313h78bf25f_1.conda +https://conda.anaconda.org/conda-forge/noarch/httpx-sse-0.4.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-1.29.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-workflow-2.6.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.31.0-pyha191276_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.0-h8c2c5c3_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.0-h7376487_2_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/lsst-rsp-1.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/mocpy-0.20.0-py313h5c7d99a_1.conda +https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/ngmix-core-2.4.1-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.9.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/panel-material-ui-0.14.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pgcli-4.6.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/piff-1.6.0-py313h08cd8bf_0.conda +https://conda.anaconda.org/conda-forge/noarch/pycrdt-websocket-0.16.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-hdfs-2.7.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/python-socketio-5.16.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/qp-prob-1.1.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/rubin-scheduler-4.5.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/s3fs-2026.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda +https://conda.anaconda.org/conda-forge/linux-64/skyproj-2.6.1-py313h12b3e8d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.24.0-cpu_py313_hf8de91a_0.conda +https://conda.anaconda.org/conda-forge/noarch/webdav4-0.11.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/danish-1.2.0-py313h7033f15_1.conda +https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.2-h8b86629_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-client-2.6.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idds-doma-2.6.12-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/ipydatagrid-1.4.0-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_console-6.6.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.0-h635bf11_2_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libopencv-4.13.0-qt6_py313hc4bffe0_608.conda +https://conda.anaconda.org/conda-forge/noarch/mcp-1.22.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/nbval-0.11.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.9.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/panel-1.9.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/papermill-2.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.0-py313h98bfbea_0_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/pz-rail-base-2.0.9-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/qp-1.1.1-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/sbpy-0.6.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.23.1-py313h4d6fefd_0.conda +https://conda.anaconda.org/conda-forge/noarch/anthropic-1.3.0-pyh5ded981_1.conda +https://conda.anaconda.org/conda-forge/noarch/batoid-rubin-0.7.0-pyh707e725_0.conda +https://conda.anaconda.org/conda-forge/noarch/fastmcp-2.13.3-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.13.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/holoviews-1.23.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.21.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.0-h635bf11_2_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/moto-5.2.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.17.1-h08b4883_0.conda +https://conda.anaconda.org/conda-forge/linux-64/py-opencv-4.13.0-qt6_py313h0e894a1_608.conda +https://conda.anaconda.org/conda-forge/noarch/pz-rail-bpz-2.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/pz-rail-sklearn-2.0.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/geoviews-core-1.15.1-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/hvplot-0.12.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-mcp-0.1.2-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-commands-toolkit-0.2.0-pyhb6f2a46_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.0-h3f74fd7_2_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.17.1-hb502eef_0.conda +https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/opencv-4.13.0-qt6_py313h8b1ed44_608.conda +https://conda.anaconda.org/conda-forge/noarch/rubin.citsci-0.9.2-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/geoviews-1.15.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_documents-0.3.3-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-3.0.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.0-py313h78bf25f_0.conda +https://conda.anaconda.org/conda-forge/noarch/astropy-8.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/awkward-pandas-2023.8.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/dask-2026.8.0-pyhc364b38_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-collaboration-5.0.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-cell-input-footer-0.3.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/nested-pandas-0.6.10-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/notebook-7.6.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/rubin-sim-2.6.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/astrowidgets-0.5.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/gaiaxpy-2.1.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/getcalspec-2.3.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/hats-0.10.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/intake-parquet-0.3.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-1.1.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-chat-0.24.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-diff-0.7.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/reproject-0.21.0-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/noarch/rubin-nights-0.18.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sorcha-1.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-router-0.0.7-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-ai-commands-0.4.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsdb-0.10.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/uranography-1.5.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-persona-manager-0.1.3-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-tools-0.7.0-pyhb6f2a46_0.conda +https://conda.anaconda.org/conda-forge/noarch/schedview-0.23.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-acp-client-0.2.1-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-chat-commands-0.0.4-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-3.0.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rubin-env-13.1.0-py313h87b86d6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/rubin-env-rsp-13.1.0-py313h4f54f2c_2.conda +https://conda.anaconda.org/conda-forge/noarch/autodoc-pydantic-2.1.0-pyh3cfb1c2_1.conda +https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.16.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-automodapi-0.22.0-pyh1139035_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-click-6.2.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-favicon-1.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-jinja-2.0.2-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/sphinx-last-updated-by-git-0.3.8-pyhe01879c_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-sitemap-2.9.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.10.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-bibtex-2.7.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/documenteer-2.4.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-doxylink-1.13.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rubin-env-nosysroot-13.1.0-np24py313h348c6b4_2.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jquery-4.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-mermaid-2.1.1-pyh5ded981_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-2.0.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-youtube-1.5.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxext-opengraph-0.13.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/sphinxext-rediraffe-0.3.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/lsst-documenteer-guide-2.4.1-hd8ed1ab_0.conda diff --git a/tests/test_derive_rubinenv_env.py b/tests/test_derive_rubinenv_env.py new file mode 100644 index 0000000..70484f7 --- /dev/null +++ b/tests/test_derive_rubinenv_env.py @@ -0,0 +1,373 @@ +"""Tests for derive_rubinenv_env.py.""" + +import importlib.util +import json +import os +import subprocess +import sys +from urllib.parse import urlparse + +import pytest + +TESTS_DIR = os.path.dirname(os.path.abspath(__file__)) +SCRIPT = os.path.join(os.path.dirname(TESTS_DIR), "derive_rubinenv_env.py") + +CHANNEL = "https://conda.anaconda.org/conda-forge/linux-64" + + +def _load_script(): + """Import the script so its parsers can be exercised without subprocess.""" + spec = importlib.util.spec_from_file_location("derive_rubinenv_env", SCRIPT) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +derive = _load_script() + +RSP_ENV_HEADER = """\ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +# created-by: conda 26.5.3 +@EXPLICIT +""" + +# (name, version, build, [depends]) in the order conda would list them. +# +# Only the qt6_* build of libopencv depends on qt6-main, so qt6-main is reachable +# from rubin-env solely through a build variant the rsp solve chose. +PACKAGES = [ + ("python", "3.13.7", "hf636f53_0", ["__glibc >=2.17"]), + ("libstdcxx", "14.3.0", "h8f9b012_0", []), + ("double-conversion", "3.3.1", "h5888daf_0", []), + ("xcb-util-cursor", "0.1.5", "hb9d3cd8_0", []), + ("qt6-main", "6.11.1", "pl5321h16c4a6b_1", ["xcb-util-cursor", "double-conversion"]), + ("libopencv", "5.0.0", "qt6_h91fa782_601", ["qt6-main >=6.11.1,<6.12.0a0", "libstdcxx >=14"]), + ("py-opencv", "5.0.0", "qt6_h6945e2d_601", ["libopencv 5.0.0 qt6_h91fa782_601", "python >=3.13"]), + ("opencv", "5.0.0", "qt6_h12f39d8_601", ["libopencv 5.0.0 qt6_h91fa782_601", "py-opencv"]), + ("numpy", "2.4.0", "py313h5d7c261_0", ["python >=3.13"]), + ("rubin-env", "13.1.0", "py313h87b86d6_2", ["opencv", "numpy", "python >=3.13,<3.14.0a0"]), + # RSP-only: reachable from rubin-env-rsp but not from rubin-env. + ("notebook-shim", "0.2.5", "pyhd8ed1ab_0", []), + ("jupyterlab", "4.5.0", "pyhd8ed1ab_0", ["notebook-shim"]), + ("rubin-env-rsp", "13.1.0", "py313h4f54f2c_2", ["rubin-env 13.1.0 py313h87b86d6_2", "jupyterlab"]), +] + +RUBIN_ENV_REACHABLE = { + "python", + "libstdcxx", + "double-conversion", + "xcb-util-cursor", + "qt6-main", + "libopencv", + "py-opencv", + "opencv", + "numpy", + "rubin-env", +} + +RSP_ONLY = {"notebook-shim", "jupyterlab", "rubin-env-rsp"} + + +def url_line(name, version, build, channel=CHANNEL): + return f"{channel}/{name}-{version}-{build}.conda#{'a' * 32}" + + +def write_env(path, packages, header=RSP_ENV_HEADER, channels=None): + """Write a conda explicit file, optionally overriding a package's channel.""" + channels = channels or {} + with open(path, "w") as f: + f.write(header) + for name, version, build, _ in packages: + f.write(url_line(name, version, build, channels.get(name, CHANNEL)) + "\n") + + +def write_conda_meta(path, packages): + os.makedirs(path, exist_ok=True) + for name, version, build, depends in packages: + with open(os.path.join(path, f"{name}-{version}-{build}.json"), "w") as f: + json.dump( + { + "name": name, + "version": version, + "build": build, + "depends": depends, + }, + f, + ) + + +@pytest.fixture +def env(tmp_path): + """A complete, self-consistent rubin-env-rsp build env.""" + rsp_env = tmp_path / "w_2026_36_rsp.env" + conda_meta = tmp_path / "conda-meta" + write_env(rsp_env, PACKAGES) + write_conda_meta(conda_meta, PACKAGES) + return { + "rsp_env": str(rsp_env), + "conda_meta": str(conda_meta), + "out": str(tmp_path / "w_2026_36.env"), + } + + +def run(env, *extra): + return subprocess.run( + [ + sys.executable, + SCRIPT, + "--rsp-env", + env["rsp_env"], + "--conda-meta", + env["conda_meta"], + "--out", + env["out"], + *extra, + ], + capture_output=True, + text=True, + ) + + +def is_url(line): + return urlparse(line.strip()).scheme in ("http", "https", "file") + + +def urls_of(path): + with open(path) as f: + return [ln.rstrip("\n") for ln in f if is_url(ln)] + + +def names_of(path): + names = [] + for line in urls_of(path): + base = os.path.basename(urlparse(line).path).removesuffix(".conda") + names.append(base.rsplit("-", 2)[0]) + return names + + +def test_qt6_variant_dependency_is_kept(env): + """qt6-main is reachable only via the rsp solve's qt6_* libopencv build.""" + result = run(env) + assert result.returncode == 0, result.stderr + names = names_of(env["out"]) + assert "qt6-main" in names + assert "libopencv" in names + # qt6-main's own transitive deps come along too. + assert "xcb-util-cursor" in names + assert "double-conversion" in names + + +def test_output_is_exactly_the_rubin_env_closure(env): + result = run(env) + assert result.returncode == 0, result.stderr + assert set(names_of(env["out"])) == RUBIN_ENV_REACHABLE + + +def test_rsp_only_packages_are_excluded(env): + result = run(env) + assert result.returncode == 0, result.stderr + names = set(names_of(env["out"])) + assert not (names & RSP_ONLY) + + +def test_output_is_dependency_closed(env): + """Every dependency of every emitted package resolves within the output.""" + result = run(env) + assert result.returncode == 0, result.stderr + emitted = set(names_of(env["out"])) + depends = {name: deps for name, _, _, deps in PACKAGES} + for name in emitted: + for spec in depends[name]: + dep = spec.split()[0] + if dep.startswith("__"): + continue + assert dep in emitted, f"{dep} required by {name} is missing" + + +def test_header_order_and_md5_are_preserved(env): + result = run(env) + assert result.returncode == 0, result.stderr + with open(env["out"]) as f: + out_lines = f.read().splitlines() + with open(env["rsp_env"]) as f: + rsp_lines = f.read().splitlines() + + assert out_lines[: len(RSP_ENV_HEADER.splitlines())] == RSP_ENV_HEADER.splitlines() + # emitted URL lines are byte-identical to their rsp counterparts, in order + out_urls = [ln for ln in out_lines if is_url(ln)] + rsp_urls = [ln for ln in rsp_lines if is_url(ln)] + assert out_urls == [ln for ln in rsp_urls if ln in set(out_urls)] + assert all(ln.endswith("#" + "a" * 32) for ln in out_urls) + + +def test_environment_name_header_is_passed_through(tmp_path): + """envconfig greps '#environment_name:' back out of the derived file.""" + rsp_env = tmp_path / "rsp.env" + conda_meta = tmp_path / "conda-meta" + header = "#environment_name: lsst-scipipe-13.1.0-rsp\n" + RSP_ENV_HEADER + write_env(rsp_env, PACKAGES, header=header) + write_conda_meta(conda_meta, PACKAGES) + env = { + "rsp_env": str(rsp_env), + "conda_meta": str(conda_meta), + "out": str(tmp_path / "out.env"), + } + result = run(env) + assert result.returncode == 0, result.stderr + with open(env["out"]) as f: + assert f.readline().rstrip("\n") == "#environment_name: lsst-scipipe-13.1.0-rsp" + + +def test_file_channel_packages_are_treated_as_packages(tmp_path): + """The prereleased-rubin-env path installs from a local file channel. + + A file:// root must satisfy the missing-root check, and a file:// RSP-only + package must be filtered rather than copied through as a header line. + """ + rsp_env = tmp_path / "rsp.env" + conda_meta = tmp_path / "conda-meta" + local = "file:///tmp/rubinenv-feedstock/build_artifacts/linux-64" + write_env( + rsp_env, + PACKAGES, + channels={"rubin-env": local, "rubin-env-rsp": local, "jupyterlab": local}, + ) + write_conda_meta(conda_meta, PACKAGES) + env = { + "rsp_env": str(rsp_env), + "conda_meta": str(conda_meta), + "out": str(tmp_path / "out.env"), + } + result = run(env) + assert result.returncode == 0, result.stderr + assert set(names_of(env["out"])) == RUBIN_ENV_REACHABLE + urls = urls_of(env["out"]) + assert any(ln.startswith(local) for ln in urls) + # the file:// RSP-only packages are gone, not passed through verbatim + with open(env["out"]) as f: + out_text = f.read() + assert "jupyterlab" not in out_text + assert "rubin-env-rsp" not in out_text + + +def test_missing_root_fails(env): + result = run(env, "--root", "rubin-env-nonesuch") + assert result.returncode != 0 + assert "rubin-env-nonesuch" in result.stderr + assert not os.path.exists(env["out"]) + + +def test_conda_meta_missing_metadata_fails(tmp_path): + """A stale or wrong active env must not silently produce a partial file.""" + rsp_env = tmp_path / "rsp.env" + conda_meta = tmp_path / "conda-meta" + write_env(rsp_env, PACKAGES) + write_conda_meta(conda_meta, [p for p in PACKAGES if p[0] != "qt6-main"]) + env = { + "rsp_env": str(rsp_env), + "conda_meta": str(conda_meta), + "out": str(tmp_path / "out.env"), + } + result = run(env) + assert result.returncode != 0 + assert "qt6-main" in result.stderr + assert not os.path.exists(env["out"]) + + +def test_closure_violation_is_reported(tmp_path): + """A reachable package with no URL in the rsp list must fail the build.""" + rsp_env = tmp_path / "rsp.env" + conda_meta = tmp_path / "conda-meta" + write_env(rsp_env, [p for p in PACKAGES if p[0] != "qt6-main"]) + write_conda_meta(conda_meta, PACKAGES) + env = { + "rsp_env": str(rsp_env), + "conda_meta": str(conda_meta), + "out": str(tmp_path / "out.env"), + } + result = run(env) + assert result.returncode != 0 + assert "qt6-main" in result.stderr + assert "libopencv" in result.stderr + assert not os.path.exists(env["out"]) + + +# --- real published artifacts ------------------------------------------------- +# +# tests/data holds the w_2026_36 pair from https://eups.lsst.cloud/stack/src/env: +# the rubin-env-rsp build record, and the ${tag}.env the old two-solve derivation +# produced from it. Vendored rather than fetched so the suite stays offline. + +DATA = os.path.join(TESTS_DIR, "data") +REAL_RSP_ENV = os.path.join(DATA, "w_2026_36_rsp.env") +REAL_ENV = os.path.join(DATA, "w_2026_36.env") + +REAL_HEADER = [ + "#environment_name: lsst-scipipe-13.1.0-rsp", + "# This file may be used to create an environment using:", + "# $ conda create --name --file ", + "# platform: linux-64", + "# created-by: conda 26.5.3", + "@EXPLICIT", +] + + +def real_urls_by_name(path): + """Return name -> url line for a real published env file.""" + with open(path) as f: + lines = f.read().splitlines() + return {derive.pkgname(ln): ln for ln in lines if derive.is_package_line(ln)} + + +def test_real_env_file_lines_are_classified(): + """Every line of a real file is a package URL or a reproducible header.""" + with open(REAL_RSP_ENV) as f: + lines = f.read().splitlines() + packages = [ln for ln in lines if derive.is_package_line(ln)] + assert [ln for ln in lines if not derive.is_package_line(ln)] == REAL_HEADER + assert len(packages) == 1030 + # published files omit the '#md5' that `conda list --explicit` emits + assert not any("#" in ln for ln in packages) + + +def test_real_env_package_names_parse(): + names = real_urls_by_name(REAL_RSP_ENV) + assert len(names) == 1030, "names must be unique within one solve" + assert {"rubin-env", "rubin-env-rsp", "rubin-env-nosysroot"} <= set(names) + # '_x86_64-microarch-level-4-3_icelake.conda' and a '.tar.bz2' entry + assert "_x86_64-microarch-level" in names + assert "font-ttf-dejavu-sans-mono" in names + assert not any(n.endswith(derive.ARCHIVE_SUFFIXES) or "/" in n for n in names) + + +def test_published_pair_shares_byte_identical_urls(): + """The subset must carry the build record's exact versions and builds.""" + rsp = real_urls_by_name(REAL_RSP_ENV) + published = real_urls_by_name(REAL_ENV) + shared = set(rsp) & set(published) + assert len(shared) == 780 + assert all(rsp[name] == published[name] for name in shared) + + +def test_published_env_shows_the_two_solve_bug(): + """Real-data shape of what this script replaces. + + w_2026_36.env keeps the qt6_* libopencv build but drops qt6-main, and lists + six packages the build env never contained -- both impossible when the + subset is a closure of the build record. + """ + rsp = real_urls_by_name(REAL_RSP_ENV) + published = real_urls_by_name(REAL_ENV) + assert "qt6_" in published["libopencv"] + assert "qt6-main" in rsp + assert "qt6-main" not in published + assert set(published) - set(rsp) == { + "flatbuffers", + "libdovi", + "libplacebo", + "onednn", + "onednn-cpu-threadpool", + "pybind11-abi", + }