diff --git a/.dockerignore b/.dockerignore index 8f0a6a6..5f8a7c5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,63 @@ -**/__pycache__/* -.mypy_cache +# Pixi environment (will be recreated in container) +.pixi/ + +# Python bytecode +**/__pycache__/ +*.py[cod] +*$py.class +*.so + +# Distribution / packaging build/ -data/ dist/ +*.egg-info/ +*.egg + +# Test and coverage +.pytest_cache/ +.coverage +.coverage.* +htmlcov/ +.tox/ +.nox/ + +# Type checking caches +.mypy_cache/ +.ruff_cache/ + +# Documentation build +docs/_build/ +site/ + +# IDE and editor files +.vscode/ +.idea/ +*.swp +*~ + +# OS files +.DS_Store +Thumbs.db + +# Git +.git/ +.gitignore + +# Test / scratch data (large files) +tests/data/*.tif +data/ +cropped/ + +# Scratch and scripts (development only) +scratch/ +scripts/ + +# Old micromamba-era docker scripts (retained in repo for history but +# not needed inside the pixi-based build) +docker/ + +# Docker files (not needed inside container) +Dockerfile +Dockerfile.gpu +docker-compose.yml +.dockerignore diff --git a/.github/workflows/test-build-push.yml b/.github/workflows/test-build-push.yml index aa5143f..f77b888 100644 --- a/.github/workflows/test-build-push.yml +++ b/.github/workflows/test-build-push.yml @@ -15,41 +15,22 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-14] - fail-fast: true runs-on: ${{ matrix.os }} - defaults: - run: - shell: bash -l {0} steps: - name: Checkout uses: actions/checkout@v4 - - name: Setup environment - uses: mamba-org/setup-micromamba@v2 + - name: Setup pixi + uses: prefix-dev/setup-pixi@v0.8.1 with: - environment-file: conda-env.yml - environment-name: sweets-env - # persist on the same day. - cache-environment-key: environment-${{ steps.date.outputs.date }} - cache-downloads-key: downloads-${{ steps.date.outputs.date }} - generate-run-shell: false - # create-args: ${{ matrix.deps.spec }} - condarc: | - channels: - - conda-forge - - name: Install - run: | - python -m pip install --no-deps . - - name: Install test dependencies - run: | - micromamba install -f tests/requirements.txt -c conda-forge + environments: test + cache: true - name: Enable numba boundscheck for better error catching run: | echo "NUMBA_BOUNDSCHECK=1" >> $GITHUB_ENV echo "TQDM_DISABLE=1" >> $GITHUB_ENV - - name: Test (with numba boundscheck on) - run: | - pytest -n0 -vv + - name: Test + run: pixi run -e test pytest -n0 -vv dockerize: # Based on Mintpy: https://github.com/insarlab/MintPy/blob/5ca554fef324b816f9130feec567e2cf463e41d2/.github/workflows/build-n-publish-to-pypi.yml @@ -83,7 +64,7 @@ jobs: uses: docker/build-push-action@v4 with: context: . - file: ./docker/Dockerfile + file: Dockerfile push: ${{ github.event_name != 'pull_request' }} tags: | ghcr.io/${{ github.repository }}:${{ env.SWEETS_VERSION }} diff --git a/.gitignore b/.gitignore index a804159..af2c57d 100644 --- a/.gitignore +++ b/.gitignore @@ -167,3 +167,5 @@ cython_debug/ # pixi environments .pixi *.egg-info +.DS_Store +*.pdf diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a586492..0b740b3 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,7 @@ mkdocs: configuration: mkdocs.yml conda: - environment: conda-env.yml + environment: environment.yml python: install: diff --git a/CHANGELOG.md b/CHANGELOG.md index d2f8ee6..9b51e9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,148 @@ -# Unreleased +# [0.3.0](https://github.com/opera-adt/sweets/compare/v0.2.0...v0.3.0) - 2026-04-12 +**Major changes** +- **Burst-level downloads.** Sentinel-1 data is now fetched as just the bursts + that intersect the AOI via `burst2safe`, instead of full ~250x170 km frames. + Closes #23, #85, #88. +- **OPERA CSLC source.** A second SLC source `OperaCslcSearch` skips + burst2safe + COMPASS entirely and pulls pre-made OPERA CSLC HDF5s + (and the matching CSLC-STATIC layers) directly from ASF DAAC. Pick + it via `sweets config --source opera-cslc`. Locked to OPERA's 5 m x 10 m + posting; great for CONUS where OPERA has produced for the AOI. +- **NISAR GSLC source.** A third source class `NisarGslcSearch` wraps + `opera_utils.nisar.run_download` to fetch pre-geocoded NISAR GSLC + HDF5s via CMR (L-band, UTM, already geocoded). Pick it via + `sweets config --source nisar-gslc --frequency A --polarizations HH`. + Skips COMPASS, burst-db, orbits, and geometry stitching; dolphin + reads the grid directly from the HDF5. Tropo correction is not yet + supported on this path (NISAR GSLCs carry no stitched incidence angle). +- `Workflow.search` is a `Union[BurstSearch, OperaCslcSearch, NisarGslcSearch]` + discriminated by a `kind` field; existing configs without a `kind` + default to `safe` for backwards compat. +- **Tropospheric correction (opt-in).** New `--do-tropo` flag wires the + OPERA L4 TROPO-ZENITH workflow from + `opera_utils.tropo.create_tropo_corrections_for_stack` into a post-step + that runs after dolphin produces unwrapped phase. Outputs land at + `dolphin/tropo/tropo_correction_
.tif` and `dolphin/tropo_corrected/.tropo_corrected.unw.tif`. +- **dolphin end-to-end.** Phase linking, interferogram network selection, + stitching, unwrapping, timeseries inversion and velocity estimation are now + delegated to a single `dolphin.workflows.displacement.run` call. The + hand-rolled interferogram / stitch / unwrap orchestration was deleted. +- **`tyro` CLI.** `sweets config`, `sweets run` and `sweets server` are now + defined with `tyro` instead of argparse, cutting ~200 lines and giving + proper rich help. `sweets run ` is now positional. +- **pixi as the primary install.** `pyproject.toml` is reorganized so the + `[tool.pixi.*]` sections are the canonical environment definition; an + `environment.yml` synced from pixi is provided for non-pixi users. +- **`s1-reader`, `COMPASS`, `opera-utils` and `dolphin` fork pins.** + sweets now installs all four from `scottstanie/@develop-scott`. + The develop-scott branches carry numpy 2 fixes (polyfit scalar in + s1-reader, `np.string_`/`np.unicode_` in COMPASS), the new tropo + workflow / `search_tropo` CMR client in opera-utils, the + GDT_Float16 GTIFF_KWARGS fix in opera-utils' `apply_tropo`, and a + `_yaml_model._add_comments` fix in dolphin so Union-of-submodels + schemas serialize cleanly. Closes #132. -# [0.2.0](https://github.com/opera-adt/dolphin/compare/v0.2.0...v0.3.0) - 2023-08-23 +**Removed** +- `sweets.interferogram` (replaced by dolphin's interferogram network). +- `sweets._missing_data`, `sweets._unzip` (no longer needed — the + missing-data filter now lives in `Workflow._apply_missing_data_filter` + on top of `opera_utils.missing_data`, and `burst2safe` materializes + `.SAFE` directories directly so there is nothing to unzip). +- `scripts/prep_mintpy.py` (broken with the new layout; mintpy export is + TODO via dolphin's existing exporters). + +**Added** +- **Missing-data filter.** New `Workflow._apply_missing_data_filter` + wraps `opera_utils.missing_data.get_missing_data_options` to + enumerate every `(burst_ids, dates)` subset where every chosen + burst has every chosen date, and picks the one that maximizes + total CSLC count. Files that aren't in the top option get moved + (not deleted) to `/excluded_cslcs///` so + a debugging user can pull them back. Runs post-COMPASS on + BurstSearch (OPERA-style `t071_151230_iw2` naming is what + `group_by_burst` expects), and post-download on OperaCslcSearch. + No-op on NisarGslcSearch (not burst-organized; `_rank_signatures` + handles coverage there). Replaces an earlier simpler + `_drop_short_burst_stacks` heuristic, and keeps dolphin from + forming a network across partial-coverage bursts — the prior + failure mode was an opaque dolphin crash deep inside + `interferogram.Network._make_ifg_pairs` when a bbox nicked the + edge of a second burst. +- **`oil_slick` phase colormap.** `sweets.plotting.plot_ifg` now defaults + to a cyclic `"oil_slick"` colormap inspired by thin-film interference + colors (dark -> violet -> blue -> cyan -> green -> yellow -> orange -> + red -> dark), replacing the previous `colorcet.CET_C8` default. The + colormap is registered with matplotlib on import so it is also + available by name as `cmap="oil_slick"` in any `imshow` / `pcolormesh` + call. `sweets.plotting` itself is preserved (the earlier CHANGELOG + draft claimed it was removed — that was incorrect; `plot_ifg`, + `browse_ifgs`, `browse_arrays` and `plot_area_of_interest` all remain). +- **Example notebooks, one per source plus a cross-source comparison**, + under `docs/`. All four share the same LA AOI + Dec 2025 window + so runs can be compared directly: + - `example_s1_burst.ipynb` — burst-subset S1 + COMPASS + dolphin + - `example_opera_cslc.ipynb` — pre-made OPERA CSLCs from ASF + - `example_nisar.ipynb` — NISAR GSLC via CMR, VRT-wrapped for dolphin + - `example_compare_sources.ipynb` — loads the longest-baseline + timeseries raster from each run and plots them side-by-side with + a uniform color scale. + +**Fixed** +- **NISAR VRT wrappers instead of GeoTIFF rewrite.** GDAL's HDF5 driver + can't parse NISAR's separate `xCoordinates` / `yCoordinates` grid + arrays, so sweets used to rewrite each polarization as a ~19 MB + CFloat32 GeoTIFF alongside every 40 MB subset HDF5. That's now a + ~1 KB VRT that injects the real SRS + GeoTransform on top of the + raw HDF5 subdataset — dolphin opens the VRT natively and the HDF5 + stays the single source of truth for pixel values. Conversion step + dropped from O(n_pixels) to O(1). +- **NISAR wavelength: read centerFrequency from HDF5 at runtime.** + Three-tier resolution in `NisarGslcSearch.wavelength()`: + (1) read `/science/LSAR/GSLC/grids/frequency{A,B}/centerFrequency` + from the HDF5 — authoritative, distinguishes freqA from freqB + automatically, and picks up the exact carrier reported by the + processor; (2) if missing, parse the NISAR D-102269 §3.4 filename + MODE code and look it up in `dolphin.constants.NISAR_L_MODE_CENTERS_HZ` + (Figure 3-1 values — approximate to ~0.8% but strictly better than + the generic constant for split modes); (3) fall back to the generic + `NISAR_L_WAVELENGTH` / `NISAR_S_WAVELENGTH` from the granule prefix + (`NISAR_L*` / `NISAR_S*`), matched to the full-band 77 MHz center. + Parallel filename-based auto-detect on the dolphin side for anyone + passing NISAR HDF5s directly. Fixes + isce-framework/dolphin#704; without it, NISAR timeseries / velocity + outputs landed in radians instead of meters. +- **NISAR signature ranking + fallback.** `NisarGslcSearch.download()` + now ranks (frequency, polarization) groups by `(stack size, pol match, + freq match)` so a `polarizations` pin always beats a `frequency` pin + on ties, and iterates groups in order — if the best group's products + all yield empty stubs (AOI inside the bounding polygon but outside + the actual grid extent, common on NISAR PR products), sweets falls + through to the next signature instead of silently writing zero + GeoTIFFs. Raises a clear diagnostic if every signature is empty. +- **Source-aware DEM bbox.** `Workflow._dem_bbox` used to pad the study + bbox by 0.25 deg for every source, but COMPASS geocoding on the + BurstSearch path needs DEM coverage for the full IW burst footprint + (~20 x 85 km), not just the study area. BurstSearch now pads by 1 deg; + NISAR / OPERA-CSLC keep the 0.25 deg buffer. Users can override with + a new optional `dem_bbox` field. Water-mask downloads stay on the + study-area bbox so the BurstSearch path doesn't waste ASF tile + fetches on terrain outside the crop area. +- **Min-GSLC guard.** `Workflow.run` now raises a clear error before + invoking dolphin when fewer than 2 GSLCs survive step 2, instead of + letting dolphin fail deep inside `interferogram._make_ifg_pairs` with + "No valid ifg list generation method specified". +- Driver-prefix heuristic for HDF5 vs NETCDF pushed down into + `opera_utils.format_nc_filename` and `opera_utils.create_nodata_mask` + (on `scottstanie/opera-utils@develop-scott`) and + `dolphin.io.format_nc_filename` (on `scottstanie/dolphin@develop-scott`) + so the NISAR raw-HDF5 subdataset path works end-to-end. +- NISAR wavelength auto-detect + corrected `NISAR_L_FREQUENCY` constant + landed on `scottstanie/dolphin@develop-scott` + (isce-framework/dolphin#704) NISAR wavelength fix + + +# [0.2.0](https://github.com/isce-framework/sweets/compare/v0.2.0...v0.3.0) - 2023-08-23 **Fixed** - Geometry/`static layers` file creation from new COMPASS changes diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..a32e4a2 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,27 @@ +cff-version: 1.2.0 +message: "If you use this software, please cite it using these metadata." +title: "sweets: Workflows for generating surface displacement maps using InSAR" +type: software +authors: + - family-names: Staniewicz + given-names: Scott J. + orcid: https://orcid.org/0000-0002-3055-5731 + affiliation: Jet Propulsion Laboratory, California Institute of Technology + - family-names: Havazli + given-names: Emre + orcid: https://orcid.org/0000-0002-1236-7067 + affiliation: Jet Propulsion Laboratory, California Institute of Technology + - family-names: Langemeijer + given-names: Jaap + - family-names: Dhar + given-names: Tisham +repository-code: "https://github.com/isce-framework/sweets" +abstract: "sweets is an end-to-end workflow for generating surface displacement time series from Sentinel-1 and NISAR data, wrapping burst download, COMPASS/isce3 geocoded SLC generation, and the dolphin PS/DS InSAR processor." +keywords: + - InSAR + - Sentinel-1 + - NISAR + - surface displacement + - time series + - remote sensing +license: "BSD-3-Clause OR Apache-2.0" diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..f55b4e1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,62 @@ +# Python Coding & Editing Guidelines + +> **Living document – PRs welcome!** +> Last updated: 2025‑07‑15 + +## Table of Contents + +1. Philosophy +1. Docstrings & Comments +1. Type Hints +1. Documentation + +--- + +## Philosophy + +- **Readability, reproducibility, performance – in that order.** +- Prefer explicit over implicit; avoid hidden state and global flags. +- Measure before you optimize (`time.perf_counter`, `line_profiler`). +- Each module holds a **single responsibility**; keep public APIs minimal. + +## Docstrings & Comments + +- Style: NumPyDoc. +- Start with a one‑sentence summary in the imperative mood. +- Sections: Parameters, Returns, Raises, Examples, References. +- Use backticks for code or referring to variables (e.g. `xarray.DataArray`). +- Do not use emojis, or non-unicode characters in comments/print statements. +- Cite peer‑reviewed papers with DOI links when relevant. +- Write code that explains itself rather than needs comments. +- For the inline you do add, explain *why*, not what. For example, *don't* write: + +```python +# open the file +f = open(filename) +``` + +- The comments should be things which are not obvious to a reader with typical background knowledge. + +## Tools + +- ruff is use for most code maintenance, black for formatting, mypy for type checking, pytest for testing +- You can run `pre-commit run -a` to run all pre-commit hooks and check for style violations + +## Code Style + +- Annotate all public functions (PEP 484). +- Prefer `Protocol` over `ABC`s when only an interface is needed. +- Validate external inputs via Pydantic models (if existing); otherwise, use `dataclasses` +- Parse, don't validate, with your dataclasses. Checks should be at the serialization boundaries, not scattered everywhere in the code. +- If you need to add an ignore, ignore a specific check like # type: ignore[specific] +- Don't write error handing code or smooth over exceptions/errors unless they are expected as part of control flow. +- In general, write code that will raise an exception early if something isn't expected. +- Enforce important expectations with asserts, but raise errors for user-facing problems. + +## Documentation + +- mkdocs + Jupyter. Hosted on ReadTheDocs. +- Auto API from type hints. +- Provide tutorial notebooks covering common workflows. +- Include examples in docstrings. +- Add high-level guides for key functionality. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..aa0feec --- /dev/null +++ b/Dockerfile @@ -0,0 +1,123 @@ +# syntax=docker/dockerfile:1 +# check=skip=FromPlatformFlagConstDisallowed +# Multi-stage Dockerfile for sweets (CPU build). +# Builds for linux/amd64 only (arm64 not supported due to isce3 dependency). +# +# Build: +# docker build -t sweets:latest . +# +# Run: +# docker run --rm -v $PWD:/work sweets:latest sweets run sweets_config.yaml + +# --------------------------------------------------------------------------- +# Stage 1: Install dependencies using pixi +# --------------------------------------------------------------------------- +# --platform=linux/amd64 is pinned because sweets' pixi workspace supports +# only linux-64 / osx-arm64, and isce3 has no linux-aarch64 conda build. +# On Apple Silicon Docker Desktop this means the container runs emulated. +FROM --platform=linux/amd64 ghcr.io/prefix-dev/pixi:0.65.0 AS install + +# git + ca-certificates needed for pip to install git+ pypi dependencies +# (scottstanie/s1-reader, scottstanie/COMPASS, scottstanie/opera-utils, +# scottstanie/dolphin, scottstanie/spurt). +RUN apt-get update && apt-get install -y --no-install-recommends git ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +# Set version for setuptools-scm (since .git is excluded from build context) +ARG VERSION=0.0.0.dev0 +# Package-scoped form so we only pin sweets' own version; the unscoped +# SETUPTOOLS_SCM_PRETEND_VERSION would leak into every setuptools_scm build +# in this layer (including uv's git builds of dolphin / opera-utils forks), +# stamping them all as 0.0.0.dev0 and breaking version constraints. +ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_SWEETS=${VERSION} + +# Copy only dependency files first (for layer caching) +COPY pyproject.toml pixi.lock LICENSE README.md ./ + +# Create minimal source structure so setuptools metadata resolves +RUN mkdir -p src/sweets && touch src/sweets/__init__.py + +# Install dependencies with cache mount for rattler +RUN --mount=type=cache,target=/root/.cache/rattler/cache,sharing=private \ + pixi install -e default + +# --------------------------------------------------------------------------- +# Stage 2: Build the package +# --------------------------------------------------------------------------- +FROM install AS build + +# Re-declare ARG (needed in each stage that uses it) +ARG VERSION=0.0.0.dev0 +# Package-scoped form so we only pin sweets' own version; the unscoped +# SETUPTOOLS_SCM_PRETEND_VERSION would leak into every setuptools_scm build +# in this layer (including uv's git builds of dolphin / opera-utils forks), +# stamping them all as 0.0.0.dev0 and breaking version constraints. +ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_SWEETS=${VERSION} + +# Copy the full source code +COPY . . + +# Reinstall with real source to get the actual package installed +RUN --mount=type=cache,target=/root/.cache/rattler/cache,sharing=private \ + pixi install -e default + +# Build isce3 from source to work around conda-forge linux-64 resamp() SIGSEGV. +# Opt-in via --build-arg BUILD_ISCE3_FROM_SOURCE=true. +ARG ISCE3_REPO=https://github.com/scottstanie/isce3.git +ARG ISCE3_BRANCH=scott-develop +ARG BUILD_ISCE3_FROM_SOURCE=false +RUN if [ "$BUILD_ISCE3_FROM_SOURCE" = "true" ]; then \ + apt-get update && apt-get install -y --no-install-recommends \ + g++ cmake ninja-build pkg-config && \ + rm -rf /var/lib/apt/lists/* && \ + git clone --branch ${ISCE3_BRANCH} --depth 1 ${ISCE3_REPO} /isce3 && \ + cmake -B /isce3/build -S /isce3 -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/app/.pixi/envs/default \ + -DCMAKE_PREFIX_PATH=/app/.pixi/envs/default \ + -DCMAKE_CXX_FLAGS="-include cstdint" \ + -DWITH_CUDA=NO && \ + cmake --build /isce3/build --parallel $(nproc) && \ + cmake --build /isce3/build --target install && \ + rm -rf /isce3; \ + fi + +# Create activation script using pixi shell-hook +RUN pixi shell-hook -e default > /activate.sh && \ + chmod +x /activate.sh + +# --------------------------------------------------------------------------- +# Stage 3: Minimal production image +# --------------------------------------------------------------------------- +FROM --platform=linux/amd64 ubuntu:24.04 AS production + +LABEL org.opencontainers.image.description="Container for sweets InSAR workflows" +LABEL org.opencontainers.image.authors="Scott Staniewicz " +LABEL org.opencontainers.image.url="https://github.com/isce-framework/sweets" +LABEL org.opencontainers.image.source="https://github.com/isce-framework/sweets" +LABEL org.opencontainers.image.licenses="BSD-3-Clause OR Apache-2.0" + +# Minimal runtime dependencies (ca-certificates for https downloads) +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl \ + && rm -rf /var/lib/apt/lists/* + +# Copy the production environment and source from build stage +COPY --from=build /app/.pixi/envs/default /app/.pixi/envs/default +COPY --from=build /app/src /app/src +COPY --from=build /activate.sh /activate.sh + +WORKDIR /work +ENV HOME=/work + +# Entrypoint activates the pixi environment so `sweets` is on PATH +RUN printf '#!/bin/bash\nset -e\nsource /activate.sh\nexec "$@"\n' > /entrypoint.sh && \ + chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] + +# Default command runs `sweets --help`; override with your own command, e.g. +# docker run --rm -v $PWD:/work sweets:latest sweets run sweets_config.yaml +CMD ["sweets", "--help"] diff --git a/Dockerfile.gpu b/Dockerfile.gpu new file mode 100644 index 0000000..19f6a6c --- /dev/null +++ b/Dockerfile.gpu @@ -0,0 +1,157 @@ +# syntax=docker/dockerfile:1 +# check=skip=FromPlatformFlagConstDisallowed +# Multi-stage GPU Dockerfile for sweets. +# Builds for linux/amd64 only, requires NVIDIA GPU + nvidia-container-toolkit at runtime. +# +# Build (conda isce3-cuda, default): +# docker build -f Dockerfile.gpu -t sweets:gpu . +# +# Build (isce3 from source with CUDA): +# docker build -f Dockerfile.gpu --build-arg BUILD_ISCE3_FROM_SOURCE=true -t sweets:gpu . +# +# Run (requires nvidia-container-toolkit on the host): +# docker run --gpus all --rm -v $PWD:/work sweets:gpu sweets run sweets_config.yaml +# +# CUDA version notes: +# CUDA_VERSION -- tag for the nvidia/cuda base image (e.g. 12.6.3). +# CUDA_MAJOR_MINOR -- fed to CONDA_OVERRIDE_CUDA so pixi pulls conda +# packages built for that CUDA generation (e.g. 12.6). +# Both must be <= the version your host driver supports. +# Check with: nvidia-smi (look for "CUDA Version" in the header). + +# These ARGs are declared before the first FROM so they can be used in +# FROM instructions and re-declared in later stages as needed. +ARG CUDA_VERSION=12.6.3 +ARG CUDA_MAJOR_MINOR=12.6 + +# --------------------------------------------------------------------------- +# Stage 1: Install dependencies using pixi +# Uses CUDA devel image so nvcc is available if building isce3 from source. +# The devel image is only used during build, not shipped. +# --------------------------------------------------------------------------- +FROM --platform=linux/amd64 nvidia/cuda:${CUDA_VERSION}-devel-ubuntu24.04 AS install + +# Install pixi + git/ca-certificates (needed for pip git+ dependencies) +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl git \ + && curl -fsSL https://pixi.sh/install.sh | PIXI_VERSION=v0.65.0 bash \ + && rm -rf /var/lib/apt/lists/* +ENV PATH="/root/.pixi/bin:${PATH}" + +WORKDIR /app + +# Set version for setuptools-scm (since .git is excluded from build context) +ARG VERSION=0.0.0.dev0 +# Package-scoped form so we only pin sweets' own version; the unscoped +# SETUPTOOLS_SCM_PRETEND_VERSION would leak into every setuptools_scm build +# in this layer (including uv's git builds of dolphin / opera-utils forks), +# stamping them all as 0.0.0.dev0 and breaking version constraints. +ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_SWEETS=${VERSION} + +# Tell the conda solver which CUDA generation is available. +# No physical GPU is needed at build time -- this just lets pixi resolve +# packages that depend on the __cuda virtual package. +# Using major.minor (not just "12") ensures the solver does not pull packages +# built for a newer CUDA than your driver supports. +ARG CUDA_MAJOR_MINOR +ENV CONDA_OVERRIDE_CUDA=${CUDA_MAJOR_MINOR} + +# Copy only dependency files first (for layer caching) +COPY pyproject.toml pixi.lock LICENSE README.md ./ + +# Pin cuda-version so the solver picks isce3-cuda built for this CUDA generation. +# Without this, the solver grabs the newest build (e.g. cuda129) regardless of +# CONDA_OVERRIDE_CUDA, because isce3's run constraint is only __cuda >= 12. +RUN sed -i '/^isce3-cuda/a cuda-version = "'"${CUDA_MAJOR_MINOR}"'.*"' pyproject.toml + +# Create minimal source structure so setuptools metadata resolves +RUN mkdir -p src/sweets && touch src/sweets/__init__.py + +# Re-lock so pixi.lock reflects the cuda-version pin added above. +# Without this, the existing lockfile still resolves the newest CUDA packages. +RUN pixi lock -e gpu + +# Install GPU environment (isce3-cuda) +RUN --mount=type=cache,target=/root/.cache/rattler/cache,sharing=private \ + pixi install -e gpu + +# --------------------------------------------------------------------------- +# Stage 2: Build the package +# --------------------------------------------------------------------------- +FROM install AS build + +ARG VERSION=0.0.0.dev0 +# Package-scoped form so we only pin sweets' own version; the unscoped +# SETUPTOOLS_SCM_PRETEND_VERSION would leak into every setuptools_scm build +# in this layer (including uv's git builds of dolphin / opera-utils forks), +# stamping them all as 0.0.0.dev0 and breaking version constraints. +ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_SWEETS=${VERSION} + +# Copy the full source code +COPY . . + +# Reinstall with real source to get the actual package installed +RUN --mount=type=cache,target=/root/.cache/rattler/cache,sharing=private \ + pixi install -e gpu + +# Build isce3 from source to work around conda-forge linux-64 resamp() SIGSEGV. +# Opt-in via --build-arg BUILD_ISCE3_FROM_SOURCE=true. +ARG ISCE3_REPO=https://github.com/scottstanie/isce3.git +ARG ISCE3_BRANCH=scott-develop +ARG BUILD_ISCE3_FROM_SOURCE=false +RUN if [ "$BUILD_ISCE3_FROM_SOURCE" = "true" ]; then \ + apt-get update && apt-get install -y --no-install-recommends \ + g++ cmake ninja-build pkg-config && \ + rm -rf /var/lib/apt/lists/* && \ + git clone --branch ${ISCE3_BRANCH} --depth 1 ${ISCE3_REPO} /isce3 && \ + cmake -B /isce3/build -S /isce3 -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/app/.pixi/envs/gpu \ + -DCMAKE_PREFIX_PATH="/app/.pixi/envs/gpu;/usr/local/cuda" \ + -DCMAKE_CXX_FLAGS="-include cstdint" \ + -DWITH_CUDA=YES && \ + cmake --build /isce3/build --parallel $(nproc) && \ + cmake --build /isce3/build --target install && \ + rm -rf /isce3; \ + fi + +# Create activation script using pixi shell-hook +RUN pixi shell-hook -e gpu > /activate.sh && \ + chmod +x /activate.sh + +# --------------------------------------------------------------------------- +# Stage 3: Production image with NVIDIA CUDA runtime +# --------------------------------------------------------------------------- +# Using the CUDA *runtime* image (not devel) -- smaller footprint, includes +# the shared libraries that isce3-cuda needs at runtime. +ARG CUDA_VERSION +FROM --platform=linux/amd64 nvidia/cuda:${CUDA_VERSION}-runtime-ubuntu24.04 AS production + +LABEL org.opencontainers.image.description="Container for sweets InSAR workflows (GPU)" +LABEL org.opencontainers.image.authors="Scott Staniewicz " +LABEL org.opencontainers.image.url="https://github.com/isce-framework/sweets" +LABEL org.opencontainers.image.source="https://github.com/isce-framework/sweets" +LABEL org.opencontainers.image.licenses="BSD-3-Clause OR Apache-2.0" + +# Minimal runtime dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl \ + && rm -rf /var/lib/apt/lists/* + +# Copy the GPU environment and source from build stage +COPY --from=build /app/.pixi/envs/gpu /app/.pixi/envs/gpu +COPY --from=build /app/src /app/src +COPY --from=build /activate.sh /activate.sh + +WORKDIR /work +ENV HOME=/work + +# Entrypoint activates the pixi environment so `sweets` is on PATH +RUN printf '#!/bin/bash\nset -e\nsource /activate.sh\nexec "$@"\n' > /entrypoint.sh && \ + chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] + +# Default command runs `sweets --help`; override with your own command, e.g. +# docker run --gpus all --rm -v $PWD:/work sweets:gpu sweets run sweets_config.yaml +CMD ["sweets", "--help"] diff --git a/README.md b/README.md index 05b1b93..8a06328 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,168 @@ # sweets [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/isce-framework/sweets/main.svg)](https://results.pre-commit.ci/latest/github/isce-framework/sweets/main) -Workflow for creating unwrapped interferograms from Sentinel-1 geocoded SLCs. +End-to-end InSAR workflow that turns a single AOI + date range into unwrapped interferograms, a displacement timeseries and a velocity raster. + +## What sweets gives you + +- Cloud-optimized data downloads + - Sentinel-1 burst-subsetting via [`burst2safe`](https://github.com/ASFHyP3/burst2safe) + - OPERA CSLC-S1 and NISAR GSLC AOI-based subsetting +- Geocoding +- DEM + water-mask prep +- Geometry stitching +- Phase-linking, unwrapping, timeseries network inversion, and velocity estimation via [dolphin](https://github.com/isce-framework/dolphin) + +Interchangeable input sources, accessible through the same `Workflow` object: + +| `--source` | What it is | Tools used | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | +| `safe` *(default)* | Sentinel-1 Level-1 bursts that intersect your AOI via `burst2safe`. Geocoded SLCs (GSLCs) created by COMPASS. | burst2safe, s1-reader, COMPASS | +| `opera-cslc` | Pre-made [OPERA L2 CSLC-S1 HDF5s](https://www.jpl.nasa.gov/go/opera/products/cslc-product) from ASF DAAC, plus their matching CSLC-STATIC layers for geometry. Faster than `safe` when OPERA has produced for your AOI (CONUS, see [OPERA product suite](https://www.jpl.nasa.gov/go/opera/products/cslc-product-suite/) for coverage) if you are fine with their processing parameters (e.g., 5 meter x 10 meter UTM posting). | opera-utils | +| `nisar-gslc` | [NISAR L2 GSLC products](https://nisar.jpl.nasa.gov/) geocoded in UTM. | opera-utils | + +An optional `--do-tropo` flag adds a post-dolphin OPERA L4 TROPO-ZENITH +correction step for `safe` and `opera-cslc` (not yet wired for NISAR). ## Install -`sweets` is available to install via conda-forge: +We recommend [pixi](https://pixi.sh/) for managing local environments. ```bash -mamba install -c conda-forge sweets +git clone https://github.com/isce-framework/sweets.git && cd sweets +pixi install +pixi shell ``` -Alternatively, the following will install `sweets` into a conda environment. +That drops you into an env where `sweets`, `dolphin` and `compass` are all on +the `PATH` and sweets is installed in editable mode. + +**GPU mode (Linux + CUDA 12+ only).** There's a `gpu` pixi environment that +swaps the CPU `isce3` build for `isce3-cuda`, which accelerates COMPASS +geocoding, cross-multiplication and resampling on the GPU. dolphin itself +runs phase-linking on the GPU through JAX+CUDA regardless of environment. -1. Download source code: ```bash -git clone https://github.com/opera-adt/sweets.git && cd sweets +pixi shell -e gpu # activate once +sweets run config.yaml # now uses isce3-cuda ``` -2. Install dependencies: + +macOS can't install this environment (conda-forge doesn't ship osx-arm64 +builds of `isce3-cuda`); `pixi shell` without `-e gpu` is the right default +for every non-CUDA machine. + +A [conda-forge feedstock](https://github.com/conda-forge/sweets-feedstock) +exists for `sweets`. It currently tracks the pre-v0.2 API; we'll bump it to +the new release once the fork dependencies (`s1-reader`, `COMPASS`, +`opera-utils`, `dolphin`, `spurt`) are merged upstream and a v0.2 release is +cut. + +## Usage + +### Command line + ```bash -mamba env create --file conda-env.yml +sweets config --help +sweets run --help ``` -or if you have an existing environment: +To configure a workflow the minimum inputs are an AOI (`--bbox` or `--wkt`), a +date range (`--start` / `--end`), and — for the Sentinel-1 path — the relative +orbit (`--track`). `--out-dir` is where raw downloads land; `--work-dir` holds +the workflow outputs. + +Raw Sentinel-1 bursts (default): + ```bash -mamba env update --name my-existing-env --file conda-env.yml +sweets config \ + --bbox=-102.96 31.22 -101.91 31.56 \ + --start 2021-06-05 --end 2021-06-22 \ + --track 78 \ + --swaths IW2 \ + --out-dir ./data \ + --work-dir ./pecos_demo \ + --output pecos_demo/sweets_config.yaml + +sweets run pecos_demo/sweets_config.yaml ``` -3. Install `sweets` via pip: +Pre-made OPERA CSLCs (faster for CONUS, no COMPASS needed): + ```bash -conda activate sweets-env -python -m pip install . +sweets config \ + --bbox=-102.96 31.22 -101.91 31.56 \ + --start 2021-06-05 --end 2021-06-22 \ + --source opera-cslc \ + --out-dir ./data \ + --work-dir ./pecos_opera \ + --output pecos_opera/sweets_config.yaml + +sweets run pecos_opera/sweets_config.yaml ``` -## Usage +With the optional tropospheric correction step: -From the command line, installing will create a `sweets` executable. You can run `sweets --help` to see the available options. ```bash -sweets --help +sweets config --source opera-cslc --do-tropo ... --output pecos_opera/sweets_config.yaml +sweets run pecos_opera/sweets_config.yaml ``` -To configure a workflow, the minimum inputs are -- the bounding box of the area of interest in degrees longitude/latitude as (left, bottom right top) -- the start date (and end date, or it is assumed to be today) -- the track (relative orbit) number. -For example: +NISAR GSLCs: ```bash -sweets config --bbox -102.2 32.15 -102.1 32.22 --start 2022-12-15 --end 2022-12-29 --track 78 +sweets config \ + --bbox=-121.10 36.55 -120.95 36.70 \ + --start 2025-10-01 --end 2025-12-15 \ + --source nisar-gslc \ + --track 42 --frame 70 \ + --out-dir ./data \ + --work-dir ./salinas_nisar \ + --output salinas_nisar/nisar.yaml + +sweets run salinas_nisar/nisar.yaml ``` -This will make a YAML configuration file (by default `sweets_config.yaml`). You can inspect it to see all the configuration defaults. -Then you can kick off the workflow using +### Starting at a later step + +`sweets run` accepts `--starting-step N` so you can skip earlier stages if the +outputs are already on disk: + ```bash -sweets run sweets_config.yaml +sweets run config.yaml --starting-step 2 # skip download, run geocode + dolphin +sweets run config.yaml --starting-step 3 # just (re-)run dolphin ``` ### Configuration from Python -Alternatively, you can configure everything in python: -```python -from sweets.core import Workflow -bbox = (-102.3407, 31.9909, -101.9407, 32.3909) -start = "2020-01-01" # can be strings or datetime objects -track = 78 -w = Workflow(bbox=bbox, asf_query=dict(start=start, end=end, relativeOrbit=track)) -w.run() -``` - -You can also save the workflow to a config file for later use/to inspect or change parameters: -``` -w.to_yaml() # Saves to sweets_config.yml for inspection/tweaking -``` +You can also build a `Workflow` directly: -If you want to run this later from the config, you can do ```python -w = Workflow.from_yaml("sweets_config.yml") +from sweets.core import Workflow +from sweets.download import BurstSearch + +w = Workflow( + bbox=(-102.96, 31.22, -101.91, 31.56), + search=BurstSearch( + track=78, + start="2021-06-05", + end="2021-06-22", + swaths=["IW2"], + out_dir="data", + ), + work_dir="pecos_demo", +) +w.to_yaml("pecos_demo/sweets_config.yaml") w.run() ``` -You can also print an empty config file to edit any parameters manually - -```bash -sweets config --print-empty -``` +The same pattern works for `OperaCslcSearch` and `NisarGslcSearch` — pick +whichever variant matches your data source. `Workflow.search` is a +discriminated union keyed on a `kind` field, so a YAML file with +`search: {kind: opera-cslc, ...}` round-trips correctly. ## License -This software is licensed under your choice of BSD-3-Clause or Apache-2.0 licenses. See the accompanying LICENSE file for further details. +This software is licensed under your choice of BSD-3-Clause or Apache-2.0 +licenses. See the accompanying LICENSE file for further details. SPDX-License-Identifier: BSD-3-Clause OR Apache-2.0 diff --git a/conda-env.yml b/conda-env.yml deleted file mode 100644 index 64655a6..0000000 --- a/conda-env.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: sweets-env -channels: - - conda-forge -dependencies: - - python>=3.9 - - pip>=21.3 - - git - - wget - - isce3>=0.14.0 - - colorcet - - compass>=0.4.1 - - dask - - dolphin>=0.5.1 - - gdal - - libgdal-netcdf - - libgdal-hdf5 - - h5py - - numpy - - opera-utils - - pydantic>2.1 - - pyproj>=3.3 - - python-dateutil - - rasterio - - requests - - rich - - rioxarray - - sardem - - sentineleof - - shapely diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index f5aafdc..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,81 +0,0 @@ -# This is the image we are going add micromaba to: -ARG BASE=ubuntu:22.04@sha256:7a57c69fe1e9d5b97c5fe649849e79f2cfc3bf11d10bbd5218b4eb61716aebe6 - -# bring in the micromamba image so we can copy files from it -FROM mambaorg/micromamba:1.1.0@sha256:53697a4bae2d9a4407463b8f314d370e201c58f6b5e5ff7c1f24699ed7e37a41 AS micromamba - -FROM $BASE - -# Needed to redefine the arg so we can use it later -ARG BASE - -# Label image following opencontainers image-spec annotations recommendation: -# https://github.com/opencontainers/image-spec/blob/main/annotations.md -LABEL org.opencontainers.image.description="Container for sweets InSAR workflows" -LABEL org.opencontainers.image.authors="Scott Staniewicz " -LABEL org.opencontainers.image.url="https://github.com/isce-framework/sweets" -LABEL org.opencontainers.image.source="https://github.com/isce-framework/sweets" -LABEL org.opencontainers.image.documentation="https://github.com/isce-framework/sweets" -LABEL org.opencontainers.image.licenses="BSD-3-Clause OR Apache-2.0" - -# Install CA certificates if the base image has apt-get, otherwise we can't install conda packages -RUN if command -v apt-get > /dev/null; then \ - apt-get update && \ - apt-get install -y ca-certificates && \ - rm -rf /var/lib/apt/lists/*; \ - fi - -ARG MAMBA_USER=mamba -ARG MAMBA_USER_ID=1000 -ARG MAMBA_USER_GID=1000 -ENV MAMBA_USER=$MAMBA_USER -ENV MAMBA_ROOT_PREFIX="/opt/conda" -ENV MAMBA_EXE="/bin/micromamba" - -COPY --from=micromamba "$MAMBA_EXE" "$MAMBA_EXE" -COPY --from=micromamba /usr/local/bin/_activate_current_env.sh /usr/local/bin/_activate_current_env.sh -COPY --from=micromamba /usr/local/bin/_dockerfile_shell.sh /usr/local/bin/_dockerfile_shell.sh -COPY --from=micromamba /usr/local/bin/_entrypoint.sh /usr/local/bin/_entrypoint.sh -# The `RUN true` is a weird hack to prevent "layer does not exist" errors -# apparently arising from multi-stage builds? https://stackoverflow.com/a/62409523/4174466 -RUN true -COPY --from=micromamba /usr/local/bin/_activate_current_env.sh /usr/local/bin/_activate_current_env.sh -RUN true -COPY --from=micromamba /usr/local/bin/_dockerfile_initialize_user_accounts.sh /usr/local/bin/_dockerfile_initialize_user_accounts.sh -RUN true -COPY --from=micromamba /usr/local/bin/_dockerfile_setup_root_prefix.sh /usr/local/bin/_dockerfile_setup_root_prefix.sh - -RUN /usr/local/bin/_dockerfile_initialize_user_accounts.sh && \ - /usr/local/bin/_dockerfile_setup_root_prefix.sh - - -# Location to install sweets from the pyproject.toml -WORKDIR /sweets -# Allow us to create new files in the workdir when pip installing -RUN chown $MAMBA_USER:$MAMBA_USER /sweets - -USER $MAMBA_USER - -SHELL ["/usr/local/bin/_dockerfile_shell.sh"] - - -# Install conda packages -# https://github.com/mamba-org/micromamba-docker#quick-start -COPY --chown=$MAMBA_USER:$MAMBA_USER docker/specfile.txt /tmp/specfile.txt -RUN micromamba install --yes --channel conda-forge -n base -f /tmp/specfile.txt && \ - micromamba clean --all --yes - -COPY --chown=$MAMBA_USER:$MAMBA_USER . . - -# Activate, otherwise python will not be found -# https://github.com/mamba-org/micromamba-docker#running-commands-in-dockerfile-within-the-conda-environment -ARG MAMBA_DOCKERFILE_ACTIVATE=1 -# --no-deps because they are installed with conda -RUN python -m pip install --no-deps . - -# Run the entrypoint from the /work directory -# This means if they mount a volume to /work, we won't be mixing in the repository code -WORKDIR /work - -ENTRYPOINT ["/usr/local/bin/_entrypoint.sh"] -CMD ["sweets", "--help"] diff --git a/docker/build-docker-image.sh b/docker/build-docker-image.sh deleted file mode 100755 index 1fed848..0000000 --- a/docker/build-docker-image.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env bash -TAG=latest - -# Enable common error handling options. -set -o errexit -set -o nounset -set -o pipefail - -# Parse input arguments -while [[ $# -gt 0 ]]; do - key="$1" - case $key in - -t | --tag) - TAG="$2" - shift - shift - ;; - # Add the ability to specify build-arg MAMBA_USER_ID - -u | --user-id) - MAMBA_USER_ID="$2" - shift - shift - ;; - # Add ability to specify base image - -b | --base) - BASE="$2" - shift - shift - ;; - *) - echo "Unknown option: $key" - exit 1 - ;; - esac -done - -# Use 'latest' as the default tag if not specified -if [ -z "$TAG" ]; then - TAG="latest" -fi - -# Build the Docker image -CMD_BASE="docker build --network=host --tag isce-framework/sweets:$TAG --file docker/Dockerfile" - -# append --build-arg if specified: -if [ -z "${BASE+x}" ]; then - CMD_BASE="$CMD_BASE" -else - CMD_BASE="$CMD_BASE --build-arg BASE=$BASE" -fi - -# append MAMBA_USER_ID if specified: -if [ -z "${MAMBA_USER_ID+x}" ]; then - CMD_BASE="$CMD_BASE" -else - CMD_BASE="$CMD_BASE --build-arg MAMBA_USER_ID=$MAMBA_USER_ID" -fi - -# finish with ".": -CMD_BASE="$CMD_BASE ." -echo $CMD_BASE -# Run the command -eval $CMD_BASE - -# To run the image and see the help message.... -echo "To run the image and see the help message:" -echo "docker run --rm -it isce-framework/sweets:$TAG sweets --help" -# -echo "To run the workflow on a configuration in the current directory...." -echo "docker run --user \$(id -u):\$(id -g) -v \$PWD:/work --rm -it isce-framework/sweets:$TAG sweets run sweets_config.yaml" -# where... -# --user $(id -u):$(id -g) # Needed to avoid permission issues when writing to the mounted volume. -# -v $PWD:/work # Mounts the current directory to the /work directory in the container. -# --rm # Removes the container after it exits. -# -it # Needed to keep the container running after the command exits. -# isce-framework/sweets:latest # The name of the image to run. -# sweets run sweets_config.yaml # The `sweets` command that is run in the container diff --git a/docker/create-lockfile.sh b/docker/create-lockfile.sh deleted file mode 100755 index 643a942..0000000 --- a/docker/create-lockfile.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -# Enable common error handling options. -set -o errexit -set -o nounset -set -o pipefail - -readonly HELP='usage: ./create-lockfile.sh ENVFILE > specfile.txt - -Create a conda lockfile from an environment YAML file for reproducible -environments. - -positional arguments: -ENVFILE a YAML file containing package specifications - -options: --h, --help show this help message and exit -' - -main() { - # Get absolute path of input YAML file. - local ENVFILE - ENVFILE=$(realpath "$1") - - # Get concretized package list. - local PKGLIST - PKGLIST=$(docker run --network=host \ - -v "$ENVFILE:/tmp/environment.yml:ro" --rm \ - mambaorg/micromamba:1.1.0 bash -c '\ - micromamba install -y -n base -f /tmp/environment.yml > /dev/null && \ - micromamba env export --explicit') - - # Sort packages alphabetically. - # (The first 4 lines are assumed to be header lines and ignored.) - echo "$PKGLIST" | (sed -u 4q; sort) -} - -if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then - echo "$HELP" -elif [[ "$#" -ne 1 ]]; then - echo 'Illegal number of parameters' >&2 - echo "$HELP" - exit 1 -else - main "$@" -fi diff --git a/docker/specfile.txt b/docker/specfile.txt deleted file mode 100644 index 716f9d1..0000000 --- a/docker/specfile.txt +++ /dev/null @@ -1,274 +0,0 @@ -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: linux-64 -@EXPLICIT -https://conda.anaconda.org/conda-forge/linux-64/aom-3.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e -https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e -https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h2e3709c_0.conda#749f3bb860c2b5e23f807bedf10fe05b -https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b -https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca -https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.5-hb447be9_0.conda#3f9a1e96daf8d5a95b655c52fa2ef550 -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.23.0-h4cb8fce_3.conda#846501bf756aaf716632e79fde2f5f4a -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f -https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb -https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h6f6b8fa_21.conda#5932a9d1b381873f837ca84481587577 -https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.78.0-h6582d0a_3.conda#d3c3c7698d0b878aab1b86db95407c8e -https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py311ha362b79_9.conda#ced5340f5dc6cff43a80deac8d0e398f -https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2#c1ac6229d0bfd14f8354ff9ad2a26cad -https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 -https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.10.2-hb4ffafa_0.conda#1a88c95afde6f13403492cac91352568 -https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda#797554b8b7603011e8677884381fbcc5 -https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda#4336bd67920dd504cd8c6761d6a99645 -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba -https://conda.anaconda.org/conda-forge/linux-64/curl-8.2.1-hca28451_0.conda#b7bf35457c5495009392c17feec4fddd -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d -https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 -https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 -https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hc118613_108.conda#6fa90698000b05dfe8ce6515794fe71a -https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 -https://conda.anaconda.org/conda-forge/linux-64/freexl-1.0.6-h166bdaf_1.tar.bz2#897e772a157faf3330d72dd291486f62 -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.1-py311h815a124_7.conda#b37a9b278526f32c29b292a71804457a -https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-h22adcc9_11.conda#514167b60f598eaed3f7a60e1dceb9ee -https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 -https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2#cddaf2c63ea4a5901cf09524c490ecdc -https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f -https://conda.anaconda.org/conda-forge/linux-64/git-2.42.0-pl5321h86e50cf_0.conda#96ad24c67e0056d171385859c43218a2 -https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 -https://conda.anaconda.org/conda-forge/linux-64/gtest-1.14.0-h00ab1b0_1.conda#d362a81b815334cc921b9362782881f3 -https://conda.anaconda.org/conda-forge/linux-64/h5py-3.9.0-nompi_py311h3839ddf_102.conda#8d9855dc6328f3568740ee1e9414f200 -https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.2-nompi_h4f84152_100.conda#2de6a9bc8083b49f09b2f6eb28d3ba3c -https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146 -https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py311h67b54e4_0.conda#363e5c2f2c67ff69d717aba54422b03d -https://conda.anaconda.org/conda-forge/linux-64/isce3-0.14.0-py311h360d1b0_1.conda#6d099fec840e5a9c37b71f38b12c27ba -https://conda.anaconda.org/conda-forge/linux-64/json-c-0.17-h7ab15ed_0.conda#9961b1f100c3b6852bd97c9233d06979 -https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-h7f98852_2.tar.bz2#8e787b08fe19986d99d034b839df2961 -https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.1-hcd42e92_5.conda#d871720bf750347506062ba23a91662d -https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3 -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f -https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de -https://conda.anaconda.org/conda-forge/linux-64/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.6.2-h039dbb9_1.conda#29cf970521d30d113f3425b84cb250f6 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-hb9dc469_0_cpu.conda#11fcb87623fd6cb265162d2cba0188df -https://conda.anaconda.org/conda-forge/linux-64/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 -https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2#c965a5aa0d5c1c37ffc62dff36e28400 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1 -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 -https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 -https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.7.1-h3d2b3c2_7.conda#a7e1414d33c6c615efd210a418571ad7 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb -https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda#03c225a73835f5aa68c13e62eb360406 -https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda#0b01e6ff8002994bd4ddbffcdbec7856 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d -https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.4-h166bdaf_0.tar.bz2#7440fbafd870b8bab68f83a064875d34 -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0.conda#1edd9e67bdb90d78cea97733ff6b54e6 -https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h37653c0_1015.tar.bz2#37d3747dd24d604f63d2610910576e63 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda#73301c133ded2bf71906aa2104edae8b -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h9db66fd_110.conda#5945a987ad5424cd81c50cc0c8d2321c -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda#613955a50485812985c059e7b269f42e -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 -https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e -https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_0.conda#c8da7f04073ed0fabcb60885a4c1a722 -https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda#264f9a3a4ea52c8f4d3e8ae1213a3335 -https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-h15f6e67_28.conda#bc9758e23157cb8362e60d3de06aa6fb -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d -https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d -https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2#7245a044b4a1980ed83196176b78b73a -https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2#ede4266dc02e875fe1ea77b25dd43747 -https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 -https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda#f27960e8873abb5476e96ef33bdbdccd -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad -https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2#c66fe2d123249af7651ebde8984c51c2 -https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.40.1-py311ha6695c7_0.conda#7a2b62d839516ba0cf56717e902229f4 -https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_0.conda#59a580306d62ef144c9dd592b5120f36 -https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h9f220a4_0.conda#b8aad2507303e04037e8d02d8ac54217 -https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 -https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_0.conda#9904dc4adb5d547cb21e136f98cb24b0 -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311ha3edf6b_0.conda#7415f24f8c44e44152623d93c5015000 -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 -https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda#da0ec11a6454ae19bff5b02ed881a2b1 -https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 -https://conda.anaconda.org/conda-forge/linux-64/numba-0.57.1-py311h96b013e_0.conda#618010d18c4a38073a7f51d9dd3fd8a8 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.4-py311h64a7726_0.conda#5a03d7c75dd4a9ae9a58850860eca468 -https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea -https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 -https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda#2cd5aac7ef1b4c6ac51bf521251a89b3 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py311h320fe9a_1.conda#5f92f46bd33917832a99d1660b4075ac -https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b -https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-4_hd590300_perl5.conda#3e785bff761095eb7f8676f4694bd1b1 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py311h0b84326_0.conda#4b24acdc1fbbae9da03147e7d2cf8c8a -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 -https://conda.anaconda.org/conda-forge/linux-64/poppler-23.08.0-hd18248d_0.conda#59a093146aa911da2ca056c1197e3e41 -https://conda.anaconda.org/conda-forge/linux-64/postgresql-15.4-h8972f4a_0.conda#bf6169ef6f83cc04d8b2a72cd5c364bc -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h2582759_0.conda#a90f8e278c1cd7064b2713e6b7db87e6 -https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 -https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py311h39c9aba_0_cpu.conda#fbd7bcc9047f85b80a338db75e47a32a -https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.6.3-py311h46250e7_0.conda#cc8b1e7eab870b5e2a01440d585d2f3d -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c -https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.1-py311h6b0c3e6_2.conda#917da9c839a1ddba516809a613ed19e2 -https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.1-py311hca9a023_0.conda#42e979272077af2c04fc38bef7ad526b -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.4-hab00c5b_0_cpython.conda#1c628861a2a126b9fc9363ca1b7d014e -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-3_cp311.conda#c2e2630ddb68cf52eec74dc7dfab20b5 -https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_0.conda#30eaaf31141e785a445bf1ede6235fe3 -https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.3.8-py311h41e4db2_0.conda#b35deb26af1d7e0d98438c8ac5c6b7b2 -https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 -https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e -https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.32-py311h459d7ec_0.conda#628868dc17f9bd39a2eb77846e35980c -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py311h2582759_1.conda#5e997292429a22ad50c11af0a2cb0f08 -https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 -https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.21.0-py311hb755f60_0.conda#0a8cbf18f7e57e43b8e106630a0ca7df -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py311h64a7726_0.conda#18d094fb8e4ac52f93a4f4857a8f1e8f -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311he06c224_2.conda#10a1953d2f74d292b5de093ceea104b2 -https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe -https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h84d19f0_1.conda#1cc4e61dc7ca15a570e733a6e20a7b33 -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_0.conda#7d9a31416c18704f55946ff7cf8da5dc -https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda#0c0533894f21c3d35697cb8378d390e2 -https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h4a2ce2d_3.conda#887cdef1446dfadb1e2debd5e63c41df -https://conda.anaconda.org/conda-forge/linux-64/wget-1.20.3-ha35d2d1_1.tar.bz2#c990e108f39e1b43adf61e984360c9a1 -https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-h8d71039_2.conda#6d5edbe22b07abae2ea0a9065ef6be12 -https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a -https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda#2c80dc38fface310c9bd81b17037fee5 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2#be93aabceefa2fac576e971aef407908 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 -https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 -https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda#bce9f945da8ad2ae9b1d7165a64d0f87 -https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2#b4a4381d54784606820704f7b5f05a15 -https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0 -https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae -https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.0-h27087fc_3.tar.bz2#0428af0510c3fafedf1c66b43102a34b -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b -https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_0.conda#ae5f4ad87126c55ba3f690ef07f81d64 -https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.5.0-pyhd8ed1ab_0.conda#578ae086f225bc2380c79f3b551ff2f7 -https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8 -https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_0.tar.bz2#4600709bd85664d8606ae0c76642f8db -https://conda.anaconda.org/conda-forge/noarch/bokeh-3.2.2-pyhd8ed1ab_0.conda#30488151f591379db656250b3f5fc0c6 -https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551 -https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 -https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca -https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2#4fd2c6b53934bd7d96d1f3fdaf99b79f -https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2#a29b7c141d6b2de4bb67788a5f107734 -https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 -https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/compass-0.4.1-pyhd8ed1ab_1.conda#dd34b476031840bb1e4f40f9dd68731b -https://conda.anaconda.org/conda-forge/noarch/dask-2023.8.1-pyhd8ed1ab_0.conda#3322285e42f00966d1abbab0b7cdba71 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd -https://conda.anaconda.org/conda-forge/noarch/dolphin-0.3.0-pyhd8ed1ab_0.conda#594b2b1e715aa4b4b9abc18f9c619612 -https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab -https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb -https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 -https://conda.anaconda.org/conda-forge/noarch/geojson-3.0.1-pyhd8ed1ab_0.conda#8eb984c44a52c3a211a013ac32bbd38c -https://conda.anaconda.org/conda-forge/noarch/geomet-1.0.0-pyhd8ed1ab_0.tar.bz2#c5d78ad9b80fb4e03be224a9d8c366e2 -https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.2.0-pyhd8ed1ab_0.conda#a98466105e7e208efc69e4cc16c4ee81 -https://conda.anaconda.org/conda-forge/noarch/html2text-2020.1.16-py_0.tar.bz2#860a1c6e60ac5a1c2bcd7a9b3442a221 -https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed -https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.1-pyh24c5eb1_0.conda#1051cc0376612ba101d4f59e954a1ff4 -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946 -https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda#54661981fd331e20847d8a49543dd9af -https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.1-pyhd8ed1ab_0.conda#d978c61aa5fc2c69380d53ad56b5ae86 -https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda#69ea1d0fa7ab33b48c88394ad1dead65 -https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda#93a8e71256479c62074356ef6ebf501b -https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2#f8dab71fdc13b1bf29a01248b156d268 -https://conda.anaconda.org/conda-forge/noarch/networkx-3.1-pyhd8ed1ab_0.conda#254f787d5068bc89f578bf63893ce8b4 -https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 -https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda#d8d7293c5b37f39b2ac32940621c6592 -https://conda.anaconda.org/conda-forge/noarch/pydantic-2.3.0-pyhd8ed1ab_0.conda#55aaca64695fcebdfa8057c87ed180e7 -https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b -https://conda.anaconda.org/conda-forge/noarch/pymp-pypi-0.4.5-pyhd8ed1ab_0.tar.bz2#3d56b4c5a162223b9f20cef1fdc8a89a -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda#176f7d56f0cfe9008bdf1bccd7de02fb -https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025 -https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 -https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 -https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b -https://conda.anaconda.org/conda-forge/noarch/rich-13.5.1-pyhd8ed1ab_0.conda#38e7446efa3c8b8a770a0fff862935c0 -https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.15.0-pyhd8ed1ab_0.conda#d0ce69099167a03cf0a1241f40284307 -https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.1-pyhd8ed1ab_0.conda#0e747b6211680a306d6677ace6b2ed0f -https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_0.conda#459be3a0db808b41080f0b5d41abc40d -https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.8.1-pyhd8ed1ab_0.conda#78002783dc1da6605d6bf2d1cc3258c3 -https://conda.anaconda.org/conda-forge/noarch/sentinelsat-1.2.1-pyhd8ed1ab_0.conda#de8d12e979ebf78bfcd42832792720f7 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 -https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 -https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-py_0.tar.bz2#cb83a3d6ecf73f50117635192414426a -https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2#6d6552722448103793743dabfbda532d -https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 -https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 -https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.8.12-pyhd8ed1ab_1.conda#ef24b983632e6acdaf424dec8e16bb55 -https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda#03c97908b976498dcae97eb4e4f3149c -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 -https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f -https://conda.anaconda.org/conda-forge/noarch/xarray-2023.8.0-pyhd8ed1ab_0.conda#a8104cede521616573e228c27f9edc97 -https://conda.anaconda.org/conda-forge/noarch/xyzservices-2023.7.0-pyhd8ed1ab_0.conda#aacae3c0eaba0204dc6c5497c93c7992 -https://conda.anaconda.org/conda-forge/noarch/yamale-4.0.4-pyh6c4a22f_0.tar.bz2#cc9f59f147740d88679bf1bd94dbe588 -https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 diff --git a/docs/example_compare_sources.ipynb b/docs/example_compare_sources.ipynb new file mode 100644 index 0000000..3bc9883 --- /dev/null +++ b/docs/example_compare_sources.ipynb @@ -0,0 +1,188 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "id": "26faf28f-336d-4ced-9be8-4217ef2deea7", + "source": [ + "# Cross-source comparison\n", + "\n", + "Load the longest-baseline `timeseries/*.tif` from each of the three example runs (`example_s1_burst`, `example_opera_cslc`, `example_nisar`) over the same LA AOI and plot them side-by-side with a uniform color scale.\n", + "\n", + "The three pipelines use different wavelengths (Sentinel-1 C-band ~5.55 cm, NISAR L-band ~24.2 cm at mode 4005 freqA), so their phase-to-meters conversion factors differ by ~4x. The whole point of the comparison is to confirm that once each pipeline converts to physical units, we get consistent outputs on the same footprint.\n", + "\n", + "**Caveats**:\n", + "- Dec 2025 LA is essentially noise — no tectonic signal, no atmospheric correction, one month of time. Numeric values are a noise proxy, not a geophysical result.\n", + "- The NISAR stack has only 2 SLCs (the two cycles that cover the AOI on track 34 / frame 18 in Dec 2025), so dolphin's `velocity.tif` is a degenerate 1-pair fit and comes out empty. We plot the cumulative displacement from the single interferogram instead, and derive an \"effective velocity\" as displacement / time-baseline for an apples-to-apples cross-source comparison.\n", + "\n", + "This notebook assumes you've already run the three per-source example notebooks (or the equivalent `sweets run ...` commands)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "76c2bc1a-3c6c-4c4b-afb9-e979957bfcfe", + "source": [ + "## Load the longest-baseline timeseries TIFF from each run" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "862df8b7-dddd-4dca-a7a8-6e94e9a1da0c", + "execution_count": null, + "outputs": [], + "source": "import re\nfrom datetime import datetime\nfrom pathlib import Path\n\nimport numpy as np\nimport rasterio\nimport matplotlib.pyplot as plt\n\n# Each per-source example notebook writes its outputs to ./example_\n# relative to whatever directory it was launched from. Run this notebook from\n# the same CWD as those three notebooks.\nRUNS_DIR = Path(\".\")\nSOURCES = {\n \"Sentinel-1 bursts\": RUNS_DIR / \"example_s1_burst\",\n \"OPERA CSLC\": RUNS_DIR / \"example_opera_cslc\",\n \"NISAR GSLC\": RUNS_DIR / \"example_nisar\",\n}\n\nPAIR_RE = re.compile(r\"^(\\d{8})_(\\d{8})\\.tif$\")\n\ndef longest_pair(ts_dir: Path) -> tuple[Path, datetime, datetime]:\n \"\"\"Return the `YYYYMMDD_YYYYMMDD.tif` with the widest baseline.\"\"\"\n best = None\n best_span = -1\n for p in ts_dir.glob(\"*.tif\"):\n m = PAIR_RE.match(p.name)\n if not m:\n continue\n d1 = datetime.strptime(m.group(1), \"%Y%m%d\")\n d2 = datetime.strptime(m.group(2), \"%Y%m%d\")\n span = (d2 - d1).days\n if span > best_span:\n best_span = span\n best = (p, d1, d2)\n assert best is not None, f\"no pair-baseline TIFFs in {ts_dir}\"\n return best\n\ndef load_raster(path: Path):\n with rasterio.open(path) as src:\n return {\n \"data\": src.read(1, masked=True),\n \"bounds\": src.bounds,\n \"unit\": (src.units[0] if src.units else \"?\") or \"?\",\n }\n\nrasters = {}\nfor label, root in SOURCES.items():\n ts_dir = root / \"dolphin\" / \"timeseries\"\n longest_path, d1, d2 = longest_pair(ts_dir)\n r = load_raster(longest_path)\n r.update(pair_name=longest_path.name, date_start=d1, date_end=d2, baseline_days=(d2 - d1).days)\n rasters[label] = r\n print(\n f\"{label:20s} {longest_path.name} unit={r['unit']} baseline={r['baseline_days']}d\"\n )" + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "00c745c0-7ffc-4d93-ab40-dd5dd39d3153", + "source": [ + "## Cumulative displacement (meters)\n", + "\n", + "Plot each longest-baseline displacement raster with a uniform symmetric color scale so the three panels are visually comparable. The S1 and OPERA panels share the same Sentinel-1 orbit (track 71 descending) so they should look structurally similar; NISAR is on a different orbit geometry (track 34 ascending) so absolute values won't line up pixel-for-pixel, but the overall spread should be consistent." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "96cbde80-7969-4ce8-89e2-5cdbf1eb1fa4", + "execution_count": null, + "outputs": [], + "source": [ + "def finite_values(a):\n", + " \"\"\"Return finite unmasked values from `a` as a 1D array.\"\"\"\n", + " arr = np.ma.filled(a, np.nan) if isinstance(a, np.ma.MaskedArray) else np.asarray(a)\n", + " vals = arr.ravel()\n", + " return vals[np.isfinite(vals)]\n", + "\n", + "def symmetric_limit(arrays, pct: float = 98.0) -> float:\n", + " stacked = np.concatenate([finite_values(a) for a in arrays])\n", + " if stacked.size == 0:\n", + " return 1.0\n", + " return float(np.nanpercentile(np.abs(stacked), pct))\n", + "\n", + "ts_arrays = [r[\"data\"] for r in rasters.values()]\n", + "tlim = symmetric_limit(ts_arrays, pct=98.0)\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(14, 5), constrained_layout=True)\n", + "for ax, (label, r) in zip(axes, rasters.items()):\n", + " left, bottom, right, top = r[\"bounds\"]\n", + " im = ax.imshow(\n", + " r[\"data\"],\n", + " vmin=-tlim, vmax=tlim,\n", + " cmap=\"RdBu_r\",\n", + " extent=(left, right, bottom, top),\n", + " aspect=\"equal\",\n", + " )\n", + " ax.set_title(\n", + " f\"{label}\\n{r['pair_name']}\"\n", + " f\" ({r['baseline_days']}-day baseline)\"\n", + " )\n", + " ax.set_xlabel(\"easting (m)\")\n", + " ax.set_ylabel(\"northing (m)\")\n", + "fig.colorbar(im, ax=axes, shrink=0.75, label=\"cumulative displacement (m)\")\n", + "fig.suptitle(\n", + " \"sweets cross-source cumulative displacement\"\n", + " f\" — LA AOI, Dec 2025, |color|={tlim:.3f} m\",\n", + " fontsize=12,\n", + ")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "c9f60e41-bfc0-43f8-9c86-09e33e07440c", + "source": [ + "## Effective velocity (meters / year)\n", + "\n", + "Divide the longest-baseline displacement by the baseline in years. This is a back-of-the-envelope annual rate — not a proper least-squares velocity fit over a full network, but it's defined for every source regardless of stack length and lets us compare magnitudes across sources on a common axis." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "80a7e0ee-35c5-486a-a580-c121c6871fe3", + "execution_count": null, + "outputs": [], + "source": [ + "rasters_eff = {}\n", + "for label, r in rasters.items():\n", + " years = r[\"baseline_days\"] / 365.25\n", + " rasters_eff[label] = {\n", + " \"data\": r[\"data\"] / years,\n", + " \"bounds\": r[\"bounds\"],\n", + " \"baseline_days\": r[\"baseline_days\"],\n", + " }\n", + "\n", + "vlim = symmetric_limit([r[\"data\"] for r in rasters_eff.values()], pct=98.0)\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(14, 5), constrained_layout=True)\n", + "for ax, (label, r) in zip(axes, rasters_eff.items()):\n", + " left, bottom, right, top = r[\"bounds\"]\n", + " im = ax.imshow(\n", + " r[\"data\"],\n", + " vmin=-vlim, vmax=vlim,\n", + " cmap=\"RdBu_r\",\n", + " extent=(left, right, bottom, top),\n", + " aspect=\"equal\",\n", + " )\n", + " ax.set_title(f\"{label}\\nannualized rate ({r['baseline_days']} d -> 1 y)\")\n", + " ax.set_xlabel(\"easting (m)\")\n", + " ax.set_ylabel(\"northing (m)\")\n", + "fig.colorbar(im, ax=axes, shrink=0.75, label=\"effective velocity (m/yr)\")\n", + "fig.suptitle(\n", + " \"sweets cross-source effective velocity\"\n", + " f\" — |color|={vlim:.2f} m/yr\",\n", + " fontsize=12,\n", + ")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "eef5bc98-b369-4230-b9d8-295889f11efc", + "source": [ + "## Quick stats" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "4245053f-b51a-4d04-b741-745fb2bb04af", + "execution_count": null, + "outputs": [], + "source": [ + "print(f\"{'source':20s} {'baseline':>10s} {'n_valid':>10s} {'disp_std':>12s} {'eff_v_std':>12s}\")\n", + "print(\"-\" * 68)\n", + "for label, r in rasters.items():\n", + " disp_vals = finite_values(r[\"data\"])\n", + " years = r[\"baseline_days\"] / 365.25\n", + " vel_vals = disp_vals / years if disp_vals.size else disp_vals\n", + " print(\n", + " f\"{label:20s} {r['baseline_days']:>9d}d \"\n", + " f\"{disp_vals.size:>10d} \"\n", + " f\"{(disp_vals.std() if disp_vals.size else float('nan')):>9.4f} m \"\n", + " f\"{(vel_vals.std() if vel_vals.size else float('nan')):>9.4f} m/yr\"\n", + " )" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "mimetype": "text/x-python", + "file_extension": ".py" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/example_nisar.ipynb b/docs/example_nisar.ipynb new file mode 100644 index 0000000..2128f70 --- /dev/null +++ b/docs/example_nisar.ipynb @@ -0,0 +1,207 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "id": "85564ba9-fef1-4e33-824c-69a58469aff1", + "source": [ + "# sweets example 3 \u2014 NISAR GSLC workflow\n", + "\n", + "End-to-end InSAR run over the same LA AOI, this time using pre-geocoded [NISAR L2 GSLC HDF5s](https://nisar.jpl.nasa.gov/) pulled from CMR. NISAR ships UTM-projected complex imagery at L-band, so the pipeline is the simplest of the three sources: no COMPASS, no burst database, no orbit files, no geometry stitching. sweets writes a ~1 KB VRT wrapper per polarization that injects the correct geotransform on top of the HDF5 subdataset (GDAL's HDF5 driver can't parse NISAR's separate xCoordinates/yCoordinates arrays), and hands the VRTs directly to dolphin.\n", + "\n", + "**Why use it?** NISAR is L-band (~24 cm wavelength) \u2014 cuts through vegetation and decorrelates much more slowly than Sentinel-1 C-band, so coherent stacks can span months instead of weeks.\n", + "\n", + "**AOI / time**: same LA polygon + 2025-12-01 -> 2025-12-31 window as the Sentinel-1 and OPERA example notebooks. NISAR track 34 frame 18 (the ASF Vertex fields `Track` and `Frame`) covers LA on an ascending pass during this period.\n", + "\n", + "**Expected wall time**: ~30 s to a couple of minutes, dominated by the HDF5 subset download. dolphin itself takes about 15 seconds on this small stack." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "cbc5042b-98dd-455a-9523-f3d24cad15a1", + "source": [ + "## Earthdata credentials\n", + "\n", + "sweets downloads Sentinel-1 bursts, OPERA CSLCs, NISAR GSLCs and tropo data from NASA Earthdata endpoints. Every subsystem used below (`burst2safe`, `opera-utils`, `asf_search`) expects a `~/.netrc` entry like:\n", + "\n", + "```\n", + "machine urs.earthdata.nasa.gov\n", + " login YOUR_EARTHDATA_USERNAME\n", + " password YOUR_EARTHDATA_PASSWORD\n", + "```\n", + "\n", + "If you don't have credentials yet, register for free at ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "e016fbe7-e804-443f-8df8-f83795b0c6de", + "source": [ + "## Configure the run\n", + "\n", + "`--source nisar-gslc` switches to the NISAR path. `--track` and `--frame` together pin a specific NISAR repeat-pass stack (they're the `Track` and `Frame` fields on ASF Vertex, and also the `RRR` / `TTT` digits in the granule filename). `--frequency A` asks for the primary L-band channel; `--polarizations HH` picks the single-polarization channel that every NISAR BETA PR product ships.\n", + "\n", + "Tropo correction is not yet wired for NISAR (no stitched local_incidence_angle raster on this path), so `--do-tropo` is not passed." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "f9c82ae0-5561-4cad-8aab-6cc1467f9d50", + "execution_count": null, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "WORK_DIR = Path(\"./example_nisar\").resolve()\n", + "WORK_DIR.mkdir(exist_ok=True)\n", + "CONFIG_YAML = WORK_DIR / \"sweets_config.yaml\"\n", + "print(WORK_DIR)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "cf3b86c9-46ae-4c55-a591-7da19cceffc9", + "execution_count": null, + "outputs": [], + "source": [ + "!sweets config \\\n", + " --bbox=-118.3957 33.7284 -118.3459 33.772 \\\n", + " --start 2025-12-01 --end 2025-12-31 \\\n", + " --source nisar-gslc \\\n", + " --track 34 --frame 18 \\\n", + " --frequency A \\\n", + " --polarizations HH \\\n", + " --out-dir {WORK_DIR}/data \\\n", + " --work-dir {WORK_DIR} \\\n", + " --output {CONFIG_YAML}" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "0e227531-9e75-42c5-a6cc-d088b7eea084", + "execution_count": null, + "outputs": [], + "source": [ + "!head -60 {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "7be19beb-58bc-4170-a1fa-b468f38f2e40", + "source": [ + "## Run the workflow\n", + "\n", + "Under the hood:\n", + "\n", + "1. sweets queries CMR for NISAR GSLC products on track 34 frame 18 that intersect the AOI, ranks the returned granules by (stack size, polarization match, frequency match), and picks the largest coherent signature group.\n", + "2. For each product in that group, sweets asks opera-utils for a bbox-subset of the HDF5 and verifies it actually has data in the AOI (NISAR PR products can advertise a frequency whose actual grid extent is narrower than the bounding polygon \u2014 those get skipped automatically and sweets falls through to the next signature).\n", + "3. Each successful subset gets a per-polarization VRT wrapper. dolphin opens those as normal rasters.\n", + "4. dolphin runs phase linking, interferogram network selection, SNAPHU unwrapping, timeseries inversion and velocity estimation as usual. The NISAR L-band wavelength is auto-detected from the HDF5 MODE code so outputs land in meters, not radians." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "abfab05e-87c0-4913-be26-1e05d352b15c", + "execution_count": null, + "outputs": [], + "source": [ + "!sweets run {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "1cd06413-3951-4aed-b459-e8c0596cfde6", + "source": [ + "## Inspect the outputs" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "563d3f40-a8a4-40d7-9774-907ed64b8c10", + "execution_count": null, + "outputs": [], + "source": [ + "!ls {WORK_DIR}/dolphin/" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "b7ab7fc7-05c3-4fac-9c44-255be3656208", + "execution_count": null, + "outputs": [], + "source": [ + "!ls {WORK_DIR}/dolphin/timeseries/" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "83818ad7-4e59-49c8-ad23-7b52bb5e2e6a", + "execution_count": null, + "outputs": [], + "source": [ + "# Velocity raster: NISAR L-band, ~24 cm wavelength.\n", + "!gdalinfo -stats {WORK_DIR}/dolphin/timeseries/velocity.tif | grep -E 'Size|Pixel Size|Unit Type|Minimum|Maximum|StdDev'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "909650a7-39eb-4c3b-bd20-821fb362eada", + "source": [ + "## Under-the-hood: the VRT wrappers\n", + "\n", + "The `data/` directory holds both the raw HDF5 subset and tiny VRT wrappers:" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "d43e982f-8c61-4d89-b2c5-421c9d977605", + "execution_count": null, + "outputs": [], + "source": [ + "!ls -lh {WORK_DIR}/data/ 2>&1 | head -10" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "5c15a4d7-440b-4711-92a8-b5ee636f88e8", + "execution_count": null, + "outputs": [], + "source": [ + "# Peek at one VRT to see how sweets injects the geotransform over\n", + "# the HDF5 subdataset.\n", + "import glob\n", + "vrts = sorted(glob.glob(f\"{WORK_DIR}/data/*.vrt\"))\n", + "if vrts:\n", + " print(open(vrts[0]).read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "mimetype": "text/x-python", + "file_extension": ".py" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/example_opera_cslc.ipynb b/docs/example_opera_cslc.ipynb new file mode 100644 index 0000000..5040450 --- /dev/null +++ b/docs/example_opera_cslc.ipynb @@ -0,0 +1,166 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "id": "c8ff3636-6216-44ff-b400-d5ac45185962", + "source": [ + "# sweets example 2 \u2014 OPERA CSLC workflow\n", + "\n", + "End-to-end InSAR run over the same LA AOI, this time using pre-geocoded [OPERA L2 CSLC-S1 HDF5s](https://www.jpl.nasa.gov/go/opera/products/cslc-product) from ASF DAAC instead of raw S1 bursts. sweets skips burst2safe and COMPASS entirely on this path \u2014 the CSLCs are already at OPERA's 5\u00d710 m posting \u2014 and pulls the matching CSLC-STATIC layers for geometry stitching.\n", + "\n", + "**Why use it?** Faster than `--source safe` whenever OPERA has produced for your AOI (mostly CONUS). No COMPASS runtime, no burst database, no orbit files, no DEM download for COMPASS \u2014 just download, stitch geometry, dolphin.\n", + "\n", + "**AOI / time**: LA polygon, 2025-12-01 -> 2025-12-31, same as the Sentinel-1 and NISAR example notebooks. ASF has OPERA CSLCs for descending track 71 in this window.\n", + "\n", + "**Expected wall time**: ~3-6 minutes, dominated by the CSLC downloads." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "e34e1605-a430-456b-b748-61f8ea90cfcd", + "source": [ + "## Earthdata credentials\n", + "\n", + "sweets downloads Sentinel-1 bursts, OPERA CSLCs, NISAR GSLCs and tropo data from NASA Earthdata endpoints. Every subsystem used below (`burst2safe`, `opera-utils`, `asf_search`) expects a `~/.netrc` entry like:\n", + "\n", + "```\n", + "machine urs.earthdata.nasa.gov\n", + " login YOUR_EARTHDATA_USERNAME\n", + " password YOUR_EARTHDATA_PASSWORD\n", + "```\n", + "\n", + "If you don't have credentials yet, register for free at ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "1a12435b-4efe-421c-b91a-059d9d742601", + "source": [ + "## Configure the run\n", + "\n", + "Pass `--source opera-cslc`. `--track` is optional on this path \u2014 ASF will filter on the AOI alone \u2014 but we pin track 71 to keep the result deterministic. Add `--do-tropo` to run the OPERA L4 TROPO-ZENITH correction step after dolphin; it's off here for simplicity." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "91e7bfac-31dd-41db-8515-414e36cafba6", + "execution_count": null, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "WORK_DIR = Path(\"./example_opera_cslc\").resolve()\n", + "WORK_DIR.mkdir(exist_ok=True)\n", + "CONFIG_YAML = WORK_DIR / \"sweets_config.yaml\"\n", + "print(WORK_DIR)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "5040ddd4-ee81-4456-afa7-b5400eb73b54", + "execution_count": null, + "outputs": [], + "source": [ + "!sweets config \\\n", + " --bbox=-118.3957 33.7284 -118.3459 33.772 \\\n", + " --start 2025-12-01 --end 2025-12-31 \\\n", + " --source opera-cslc \\\n", + " --track 71 \\\n", + " --out-dir {WORK_DIR}/data \\\n", + " --work-dir {WORK_DIR} \\\n", + " --output {CONFIG_YAML}" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "03dc9df9-67a8-474c-b4c8-2f35483ecc8c", + "execution_count": null, + "outputs": [], + "source": [ + "!head -60 {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "942926ed-4b5c-4e11-a20e-dca846e4505e", + "source": [ + "## Run the workflow\n", + "\n", + "Step 1: parallel CSLC + CSLC-STATIC + DEM + water mask download. Step 2: stitch the static layers into burst-aligned geometry rasters under `geometry/`. Step 3: dolphin.\n", + "\n", + "(Sweets auto-skips COMPASS, burst2safe and orbit download on the OPERA path.)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "f7b8d3d8-d367-4087-9255-df7aa30dcc36", + "execution_count": null, + "outputs": [], + "source": [ + "!sweets run {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "c206846a-18aa-40d6-b4ac-112c4361396c", + "source": [ + "## Inspect the outputs\n", + "\n", + "Same dolphin output layout as the burst-subset example:" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "0ca720c4-6e54-4de9-87d3-2b837777475c", + "execution_count": null, + "outputs": [], + "source": [ + "!ls {WORK_DIR}/dolphin/" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "5b02cea3-cb5a-4a50-aff8-a39b573d1e4c", + "execution_count": null, + "outputs": [], + "source": [ + "!ls {WORK_DIR}/dolphin/timeseries/" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "141c4638-6af1-42b1-ae20-9f8b7d0e169e", + "execution_count": null, + "outputs": [], + "source": [ + "!gdalinfo -stats {WORK_DIR}/dolphin/timeseries/velocity.tif | grep -E 'Size|Pixel Size|Unit Type|Minimum|Maximum|StdDev'" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "mimetype": "text/x-python", + "file_extension": ".py" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/example_s1_burst.ipynb b/docs/example_s1_burst.ipynb new file mode 100644 index 0000000..455bcd2 --- /dev/null +++ b/docs/example_s1_burst.ipynb @@ -0,0 +1,190 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "id": "a385485f-48e0-4dd7-903d-54985f039360", + "source": [ + "# sweets example 1 — Sentinel-1 burst-subset workflow\n", + "\n", + "End-to-end InSAR run over a small AOI in Los Angeles (Long Beach / San Pedro) using the default `--source safe` path: raw Sentinel-1 bursts downloaded as just-the-bursts-that-intersect-the-AOI via `burst2safe`, then geocoded by COMPASS, then handed to dolphin for phase linking, interferogram network selection, unwrapping, and timeseries inversion.\n", + "\n", + "**AOI**: small rectangle over LA, same polygon as the OPERA CSLC and NISAR example notebooks.\n", + "\n", + "**Time range**: 2025-12-01 -> 2025-12-31 (a few Sentinel-1 repeat passes on descending track 71).\n", + "\n", + "**Expected wall time**: ~5-10 minutes on a fast connection, dominated by SAFE download + COMPASS geocoding. Outputs land under `dolphin/` and the final velocity raster is `dolphin/timeseries/velocity.tif` in meters/year." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "ea8bf262-407d-4a11-9d7b-bddf5886ae95", + "source": [ + "## Earthdata credentials\n", + "\n", + "sweets downloads Sentinel-1 bursts, OPERA CSLCs, NISAR GSLCs and tropo data from NASA Earthdata endpoints. Every subsystem used below (`burst2safe`, `opera-utils`, `asf_search`) expects a `~/.netrc` entry like:\n", + "\n", + "```\n", + "machine urs.earthdata.nasa.gov\n", + " login YOUR_EARTHDATA_USERNAME\n", + " password YOUR_EARTHDATA_PASSWORD\n", + "```\n", + "\n", + "If you don't have credentials yet, register for free at ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "b52b6506-0a90-46f5-bb92-a2aa730830b9", + "source": [ + "## Configure the run\n", + "\n", + "sweets takes a YAML config; the `sweets config` subcommand builds one from a few flags. `--track 71` pins the descending Sentinel-1 track that covers LA, and `--swaths IW2` restricts burst2safe to a single subswath (it refuses to straddle swaths in one SAFE)." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "377294c2-674f-4a5d-a30c-7632a69fccd3", + "execution_count": null, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "WORK_DIR = Path(\"./example_s1_burst\").resolve()\n", + "WORK_DIR.mkdir(exist_ok=True)\n", + "CONFIG_YAML = WORK_DIR / \"sweets_config.yaml\"\n", + "print(WORK_DIR)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "c4288efe-f7d9-4b57-be41-961ac9044373", + "execution_count": null, + "outputs": [], + "source": [ + "!sweets config \\\n", + " --bbox=-118.3957 33.7284 -118.3459 33.772 \\\n", + " --start 2025-12-01 --end 2025-12-31 \\\n", + " --track 71 \\\n", + " --swaths IW2 \\\n", + " --out-dir {WORK_DIR}/data \\\n", + " --work-dir {WORK_DIR} \\\n", + " --output {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "419cb865-c1a8-49c6-9dd5-47b4a7c67812", + "source": [ + "Take a look at the generated config — this is the file that `sweets run` will execute. Feel free to edit any of the long-tail knobs (dolphin half-window, COMPASS posting, water-mask buffer, etc.) directly in the YAML." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "d7e3f093-6cfa-4c5c-ad9c-937ba5c8069c", + "execution_count": null, + "outputs": [], + "source": [ + "!head -60 {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "dbca0cec-1fee-438a-b9e3-df4959e7951f", + "source": [ + "## Run the workflow\n", + "\n", + "Step 1 downloads the SAFEs (just the intersecting bursts), the Copernicus DEM, the ASF water mask and the S1 precise orbit files — all in parallel. Step 2 runs COMPASS on each burst + date to produce geocoded CSLC HDF5s and static-layer geometry. Step 3 hands everything to dolphin, which writes interferograms, unwrapped phase, a displacement timeseries, and a velocity raster." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "b591703a-d6ac-4598-a839-98216ed5629c", + "execution_count": null, + "outputs": [], + "source": [ + "!sweets run {CONFIG_YAML}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "e43e39c0-1ce1-45ec-a7e2-2120632f3e3a", + "source": [ + "## Inspect the outputs\n", + "\n", + "dolphin's output layout under `/dolphin/`:" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "51ac80cd-7aea-402e-94d6-366a6a824fad", + "execution_count": null, + "outputs": [], + "source": [ + "!ls {WORK_DIR}/dolphin/" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "4f855fe7-4a56-4bc1-b756-30a5f16089e8", + "execution_count": null, + "outputs": [], + "source": [ + "!ls {WORK_DIR}/dolphin/timeseries/" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "id": "5836886c-4bbd-4994-a7ca-61eb4ccfbf77", + "execution_count": null, + "outputs": [], + "source": [ + "# Velocity raster: phase velocity in meters / year (radar wavelength is\n", + "# auto-detected from the source — Sentinel-1 at ~5.55 cm here).\n", + "!gdalinfo -stats {WORK_DIR}/dolphin/timeseries/velocity.tif | grep -E 'Size|Pixel Size|Unit Type|Minimum|Maximum|StdDev'" + ] + }, + { + "cell_type": "code", + "id": "3fcf82ea", + "source": "# Plot one of dolphin's wrapped interferograms with the default oil_slick\n# cyclic colormap. np.angle maps the complex phase to [-pi, pi], which the\n# colormap wraps around so fringes read as contiguous bands.\nfrom sweets.plotting import plot_ifg\n\nifg_candidates = sorted(\n (WORK_DIR / \"dolphin\" / \"interferograms\").rglob(\"2*.int\")\n)\nassert ifg_candidates, (\n f\"no wrapped interferograms found under {WORK_DIR}/dolphin/interferograms/\"\n)\nifg_path = ifg_candidates[0]\nprint(f\"plotting {ifg_path.relative_to(WORK_DIR)}\")\n\nfig, ax = plot_ifg(\n filename=ifg_path,\n figsize=(7, 5),\n title=ifg_path.stem,\n subsample_factor=2,\n)", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "id": "6b95164b-23e0-4bab-b0f0-73c1d0be2145", + "source": [ + "For interactive browsing, open the GeoTIFFs with QGIS, rasterio, rioxarray + hvplot, or any other raster tool. Every file under `dolphin/` is a standard GDAL-readable raster with a real coordinate reference system." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "mimetype": "text/x-python", + "file_extension": ".py" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/sweets-demo.ipynb b/docs/sweets-demo.ipynb deleted file mode 100644 index e4bc117..0000000 --- a/docs/sweets-demo.ipynb +++ /dev/null @@ -1,754 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "c291f61a-eb54-4852-bc4b-c427e88f3fed", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from pathlib import Path\n", - "\n", - "base = Path(\"/home/staniewi/dev/sweets-testing/demo\")\n", - "base.mkdir(exist_ok=True)\n", - "os.chdir(base)" - ] - }, - { - "cell_type": "markdown", - "id": "680b6e42-7acf-4ede-b7e7-c4b06dc820b6", - "metadata": {}, - "source": [ - "## Environment setup:\n", - "\n", - "```bash\n", - "mamba create -n sweets-env sweets\n", - "conda activate sweets-env\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "840d8139-d45b-4ab4-9cec-824c961c6c90", - "metadata": {}, - "source": [ - "## Command line interface" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e35ec626-5baf-4e0d-944f-dd6cfbd03712", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "usage: sweets [-h] {config,run} ...\n", - "\n", - "positional arguments:\n", - " {config,run}\n", - " config Create a sweets_config.yaml file\n", - " run Run the workflow using a sweets_config.yaml file\n", - "\n", - "options:\n", - " -h, --help show this help message and exit\n" - ] - } - ], - "source": [ - "!sweets --help" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "86567be6-5f28-4b63-b817-2235a5dab6b6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "usage: sweets config [-h] [--save-empty] [-o OUTFILE]\n", - " [-b left bottom right top] [--wkt WKT]\n", - " [--track RELATIVEORBIT] [--start START] [--end END]\n", - " [--frames start_frame end_frame] [--data-dir DATA_DIR]\n", - " [--looks az_looks range_looks] [-t MAX_TEMPORAL_BASELINE]\n", - " [--max-bandwidth MAX_BANDWIDTH] [--orbit-dir ORBIT_DIR]\n", - " [-nw N_WORKERS] [-tpw THREADS_PER_WORKER]\n", - "\n", - " --save-empty Print an empty config file to `outfile (default:\n", - " False)\n", - " -o OUTFILE, --outfile OUTFILE\n", - " Path to save the config file to. If not specified,\n", - " will save to `sweets_config.yaml` in the current\n", - " directory. (default: sweets_config.yaml)\n", - " -b left bottom right top, --bbox left bottom right top\n", - " Bounding box of area of interest in decimal degrees\n", - " longitude/latitude: (e.g. --bbox -106.1 30.1 -103.1\n", - " 33.1 ). (default: None)\n", - " --wkt WKT Alternate to bounding box specification: WKT string\n", - " (or file containing polygon) for AOI bounds (e.g. from\n", - " the ASF Vertex tool). If passing a string polygon, you\n", - " must enclose in quotes. (default: None)\n", - " --orbit-dir ORBIT_DIR\n", - " Directory to store orbit files in (or directory\n", - " containing existing orbits). If None, will store in\n", - " `orbits/` (default: None)\n", - " -nw N_WORKERS, --n-workers N_WORKERS\n", - " Number of background workers to use for parallel\n", - " processing GSLC/ifgs/unwrapping. (default: 4)\n", - " -tpw THREADS_PER_WORKER, --threads-per-worker THREADS_PER_WORKER\n", - " For each background worker, number of threads to use\n", - " (e.g. OMP_NUM_THREADS, or in numpy multithreading).\n", - " (default: 16)\n", - "\n", - "asf_query:\n", - " Arguments specifying the area of interest for the S1 data query\n", - "\n", - " --track RELATIVEORBIT, --relativeOrbit RELATIVEORBIT\n", - " Required: the relative orbit/track (default: None)\n", - " --start START Starting date for query (recommended: YYYY-MM-DD)\n", - " (default: None)\n", - " --end END Ending date for query (recommended: YYYY-MM-DD).\n", - " Defaults to today. (default: None)\n", - " --frames start_frame end_frame\n", - " Limit to a range of frames (e.g. --frames 1 10). Frame\n", - " numbers come from ASF website (default: None)\n", - " --data-dir DATA_DIR Directory to store data in (or directory containing\n", - " existing downloads). If None, will store in `data/`\n", - " (default: None)\n", - "\n", - "interferogram_options:\n", - " --looks az_looks range_looks\n", - " Number of looks in azimuth (rows) and range (cols) to\n", - " use for interferograms (e.g. --looks 6 12). GSLCs are\n", - " geocoded at 10m x 5m posting, so default looks of 6x12\n", - " are 60m x 60m. (default: [6, 12])\n", - " -t MAX_TEMPORAL_BASELINE, --max-temporal-baseline MAX_TEMPORAL_BASELINE\n", - " Maximum temporal baseline (in days) to consider for\n", - " interferograms. (default: None)\n", - " --max-bandwidth MAX_BANDWIDTH\n", - " Alternative to temporal baseline: form the nearest n-\n", - " ifgs. (default: 4)\n" - ] - } - ], - "source": [ - "!sweets config --help" - ] - }, - { - "cell_type": "markdown", - "id": "eab561e1-68ef-4d39-a98b-a548aaf096b9", - "metadata": {}, - "source": [ - "## Workflow demo: one interferogram of Texas earthquake\n", - "\n", - "The relative orbit/bounding box was found using ASF Vertex. We pass this to the `sweets config` tool:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "707b9f6d-85e5-4b19-ae9d-993c9f83d833", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating config file at sweets_config.yaml.\n", - "\u001b[0m" - ] - } - ], - "source": [ - "!sweets config --bbox -102.2 32.15 -102.1 32.22 --start 2022-12-15 --end 2022-12-29 --track 78" - ] - }, - { - "cell_type": "markdown", - "id": "a21af472-5b08-43f0-900c-79c0697d316f", - "metadata": {}, - "source": [ - "Alternatively, you can do the configuration in python:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "c629598f-5efc-4dc7-9df9-1abd98603b42", - "metadata": {}, - "outputs": [], - "source": [ - "from sweets.core import Workflow\n", - "\n", - "bbox = (-102.2, 32.15, -102.1, 32.22)\n", - "start = \"2022-12-15\" # can be strings or datetime objects\n", - "end = \"2022-12-29\"\n", - "track = 78\n", - "w = Workflow(bbox=bbox, asf_query=dict(start=start, end=end, relativeOrbit=track))\n", - "\n", - "# To save as a yaml file:\n", - "# w.to_yaml(\"sweets_config.yaml\")\n", - "\n", - "# To directly run:\n", - "# w.run()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "c7ac9ca8-bb10-4bd9-8cb2-750bba043f45", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sweets_config.yaml\n", - "# Root of working directory for processing.\n", - "# Type: string.\n", - "work_dir: /u/aurora-r0/staniewi/dev/sweets-testing/demo\n", - "# Area of interest: (left, bottom, right, top) longitude/latitude e.g.\n", - "# `bbox=(-150.2,65.0,-150.1,65.5)`.\n", - "# Type: array.\n", - "bbox:\n", - " - -102.2\n", - " - 32.15\n", - " - -102.1\n" - ] - } - ], - "source": [ - "!ls\n", - "!head sweets_config.yaml" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "7c5b205f-8136-4991-b5a0-d919566ab7bf", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[2;36m[08/25/23 10:38:40]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Setting up \u001b[1;36m4\u001b[0m workers for \u001b]8;id=717587;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/core.py\u001b\\\u001b[2mcore.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=271811;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/core.py#538\u001b\\\u001b[2m538\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m ThreadPoolExecutor \u001b[2m \u001b[0m\n", - "[08/25 10:38:40] [INFO dem.py] Bounds: -102.45 31.9 -101.85 32.47\n", - "[08/25 10:38:40] [INFO dem.py] Bounds: -102.45 31.9 -101.85 32.47\n", - "\u001b[2;36m[08/25/23 10:38:40]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using cached burst DB at \u001b]8;id=632322;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_burst_db.py\u001b\\\u001b[2m_burst_db.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=825478;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_burst_db.py#44\u001b\\\u001b[2m44\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m \u001b[35m/home/staniewi/.cache/sweets/\u001b[0m\u001b[95mburst_\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[95mmap_bbox_only.sqlite3\u001b[0m \u001b[2m \u001b[0m\n", - "[08/25 10:38:40] [INFO cop_dem.py] Creating /u/aurora-r0/staniewi/dev/sweets-testing/demo/dem.tif\n", - "[08/25 10:38:40] [INFO cop_dem.py] Fetching remote tiles...\n", - "[08/25 10:38:40] [INFO cop_dem.py] Running GDAL command:\n", - "[08/25 10:38:40] [INFO cop_dem.py] gdalwarp /vsicurl/https://raw.githubusercontent.com/scottstanie/sardem/master/sardem/data/cop_global.vrt /u/aurora-r0/staniewi/dev/sweets-testing/demo/dem.tif -of GTiff -ot Float32 -te -102.450000000000003 31.8999999999999986 -101.849999999999994 32.4699999999999989 -tr 0.000277777777777777778 0.000277777777777777778 -s_srs \"epsg:4326+3855\" -t_srs \"epsg:4326\" -wo NUM_THREADS=4 -r nearest -wm 5000 -multi\n", - "[08/25 10:38:41] [INFO download.py] /home/staniewi/.cache/sweets/N32W102.raw already exists, skipping.\n", - "[08/25 10:38:41] [INFO download.py] /home/staniewi/.cache/sweets/N32W103.raw already exists, skipping.\n", - "[08/25 10:38:41] [INFO download.py] /home/staniewi/.cache/sweets/N31W102.raw already exists, skipping.\n", - "[08/25 10:38:41] [INFO download.py] /home/staniewi/.cache/sweets/N31W103.raw already exists, skipping.\n", - "[08/25 10:38:42] [INFO dem.py] Cropping stitched DEM to boundaries\n", - "Creating output file that is 2160P x 2052L.\n", - "0[08/25 10:38:42] [INFO dem.py] Rate = 1: No upsampling to do\n", - "[08/25 10:38:42] [INFO dem.py] Writing DEM to /u/aurora-r0/staniewi/dev/sweets-testing/demo/watermask.flg\n", - "[08/25 10:38:42] [INFO dem.py] Writing .dem.rsc file to /u/aurora-r0/staniewi/dev/sweets-testing/demo/watermask.flg.rsc\n", - "[08/25 10:38:42] [INFO dem.py] Water mask requires no geoid correction.\n", - "\u001b[2;36m[08/25/23 10:38:42]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Total elapsed time for \u001b]8;id=341780;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_log.py\u001b\\\u001b[2m_log.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=24029;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_log.py#110\u001b\\\u001b[2m110\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m sweets.dem.create_water_mask : \u001b[1;36m0.04\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m minutes \u001b[1m(\u001b[0m\u001b[1;36m2.16\u001b[0m seconds\u001b[1m)\u001b[0m \u001b[2m \u001b[0m\n", - "...10...20...30...40...50...60...70...80...90...100 - done.\n", - "\u001b[2;36m[08/25/23 10:38:58]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Total elapsed time for \u001b]8;id=531902;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_log.py\u001b\\\u001b[2m_log.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=932269;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_log.py#110\u001b\\\u001b[2m110\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m sweets.dem.create_dem : \u001b[1;36m0.30\u001b[0m minutes \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[1m(\u001b[0m\u001b[1;36m18.06\u001b[0m seconds\u001b[1m)\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m[08/25/23 10:38:58]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Found \u001b[1;36m2\u001b[0m existing files in \u001b]8;id=6768;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/core.py\u001b\\\u001b[2mcore.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=958942;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/core.py#263\u001b\\\u001b[2m263\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m \u001b[35m/u/aurora-r0/staniewi/dev/sweets-testin\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[35mg/demo/\u001b[0m\u001b[95mdata.\u001b[0m Skipping download. \u001b[2m \u001b[0m\n", - "\u001b[2;36m[08/25/23 10:38:58]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using cached burst DB at \u001b]8;id=537430;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_burst_db.py\u001b\\\u001b[2m_burst_db.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=614399;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_burst_db.py#44\u001b\\\u001b[2m44\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m \u001b[35m/home/staniewi/.cache/sweets/\u001b[0m\u001b[95mburst_\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[95mmap_bbox_only.sqlite3\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m[08/25/23 10:38:58]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Orbit search_path: \u001b]8;id=316248;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_orbit.py\u001b\\\u001b[2m_orbit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=68820;file:///u/aurora-r0/staniewi/repos/sweets/src/sweets/_orbit.py#13\u001b\\\u001b[2m13\u001b[0m\u001b]8;;\u001b\\\n", - "\u001b[2;36m \u001b[0m \u001b[35m/u/aurora-r0/staniewi/dev/sweets-testi\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[35mng/demo/\u001b[0m\u001b[95mdata\u001b[0m, save_dir: \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[35m/u/aurora-r0/staniewi/dev/sweets-testi\u001b[0m \u001b[2m \u001b[0m\n", - "\u001b[2;36m \u001b[0m \u001b[35mng/demo/\u001b[0m\u001b[95morbits\u001b[0m \u001b[2m \u001b[0m\n", - "Downloading products: 0%| | 0/2 [00:00\n", - "
\n", - " Figure\n", - "
\n", - " \n", - " \n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "%matplotlib widget\n", - "from sweets.plotting import browse_ifgs\n", - "\n", - "browse_ifgs(base, vm_unw=4)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1a329760-5c8d-44a3-b8a1-bdde9ae8c843", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..001056f --- /dev/null +++ b/environment.yml @@ -0,0 +1,48 @@ +name: default +channels: +- conda-forge +- nodefaults +dependencies: +- cartopy * +- matplotlib * +- colorcet * +- isce3 >=0.24 +- dolphin +- python >=3.11 +- pip >=21.3 +- gdal * +- libgdal-netcdf * +- asf_search * +- burst2safe * +- h5py >=3.6 +- loguru * +- numpy >=1.25 +- pandas * +- pydantic >=2.1 +- pyproj >=3.2 +- python-dateutil * +- rasterio * +- requests >=2.10 +- rich >=12.0 +- rioxarray * +- sardem * +- sentineleof * +- shapely >=2.0 +- tyro * +- scikit-image * +- sardem +- sentineleof +- pillow * +- pysolid * +- ruamel.yaml * +- yamale * +- lxml * +- scipy * +- pip +- pip: + - -e . + - s1reader @ git+https://github.com/scottstanie/s1-reader.git@develop-scott + - compass @ git+https://github.com/scottstanie/COMPASS.git@develop-scott + - opera-utils[all] @ git+https://github.com/scottstanie/opera-utils.git@develop-scott + - dolphin @ git+https://github.com/scottstanie/dolphin.git@develop-scott + - spurt @ git+https://github.com/scottstanie/spurt.git@develop-scott diff --git a/pixi.lock b/pixi.lock index d8970eb..998a71b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -5,6 +5,8 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 @@ -18,80 +20,53 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h92a005d_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.2-he7b75e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.4-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-h92c474e_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.5-h0c2b49e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.2-hee85082_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.21.0-h1d8da38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.1-h46c1de9_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.8.3-h9cdc349_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h92c474e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-h92c474e_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.10-h186f887_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h379b65b_14.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/boto3-1.40.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.40.9-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.18.0-h3122c55_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.20.0-h4cfbee9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.24.0-py312hf9745cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.2-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312hd9148b4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.10.3-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.7.1-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.19.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -99,62 +74,51 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.57.0-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.59.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-h48d6fc4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py312hf50df08_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.0.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.0.1-pyha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.49.0-pl5321hc2ff736_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.2.1-h3beb420_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.4.1-h15599e2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.3.30-py312hc3cc4c5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.8.2-py312h76e1a71_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.7.0-cpu_py312h73730d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py312h84d6215_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h1b9301b_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h766b0b6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -163,7 +127,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_hddf928d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.8-default_ha444ac7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda @@ -171,32 +134,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h86883d2_10.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.10.0-hbbee16a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.10.0-hd75530a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.10.0-h2b12c9b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.3-hf39c6af_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.2.0-hf40a0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-h7b0646d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda @@ -209,168 +166,144 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h8261f1e_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h202a827_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.11.0-he8b52b9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h04c0eec_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.0-py312h68d7fa5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.4-py312hf0f0c11_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.8.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.5-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.5-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.7-h05a5f5f_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py312hf9745cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.10-h05a5f5f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.15.0-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.17.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h7bcfee6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py312hf9745cd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.1-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.1.0-py312h80c1187_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h80c1187_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.10.0-py312h02b19dd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.0-py312h02b19dd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py312h03c6e1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312h1c88c49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py312hfab6c90_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py312hdb827e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312he6b159b_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.9-h9e4cc4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.9.0-py312h4f23490_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.1-h6ac528c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.3-py312h021bea1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2025.7.34-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.18.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.14-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.22-h96f233e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-0.4.2-py_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.25.2-py312hf9745cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.6.1-py312h7a48858_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py312h4ae17e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py312heda63a1_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py312h21f5128_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.1-py312h21f5128_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snaphu-0.4.1-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.0.2-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.0-h9fa5a19_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tzlocal-5.3-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wget-1.21.4-hda4d442_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda @@ -394,18 +327,50 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.20.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/50/e37d02e250f5feb755112ec95b1c012a36d48a99209277267037d100f630/jaxlib-0.7.1-cp312-cp312-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/74/1d374bf510e9fb36bba82ecd3e09461cd8394afef3e418fa5b060f129401/ortools-9.14.6206-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/f3/b594fe851ad520a07127a9680bbf9732c74f8d4e6b6dc5a2cdd196bf5974/snaphu-0.4.1-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda @@ -416,159 +381,113 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.0-hed7f23c_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.2-hd08b81e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.4-h6caf38d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.1-habbe1e8_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.5-ha7b4b11_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.2-hf8ac5b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.21.0-hc6344be_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.13.1-h8af1df2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.8.3-hf857400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-habbe1e8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.7-habbe1e8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.32.10-hcb36028_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.510-h29a0155_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/boto3-1.40.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.40.9-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.18.0-h9cbb436_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.20.0-h9c47b6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.24.0-py312hcd31e36_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py312h98f7732_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.1-py312hb23fbb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312ha0dd364_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.10.3-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/crc32c-2.7.1-py312hea69d52_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.0.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.19.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.56.0-py312h998013c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.59.0-py312h6daa0e5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-h1d14073_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.7.0-py312h512c567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.3-py312h93ff630_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.0.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.0.1-pyha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.1-hc9a1286_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.4-h1d7e6e1_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.49.0-pl5321ha659579_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.16.0-ha393de7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf4-4.2.15-h2ee6834_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.3.30-py312h77b8b70_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.8.2-py312hd676ae3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py312h1f4f324_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.8-py312h2c4a281_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.4-h51d1e36_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.1-gpl_h46e8061_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-20.0.0-hd5f8272_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-20.0.0-he749cb8_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.25.1-h493aca8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.3.0-hf1e31eb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.14.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.1-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.24-h5773f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.13.3-h1d14073_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.3-hef24e92_12.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.10.0-h4b24957_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.10.0-h30a2ec2_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.10.0-hd29f476_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.25.1-h493aca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.36.0-h9484b08_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.36.0-h7081f7f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.2.0-h9a9ea7e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libidn2-2.3.8-h38aa460_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.1-h72d67bc_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda @@ -577,20 +496,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.9.2-nompi_h610d594_116.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h0181452_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-20.0.0-h636d7b7_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.50-h280e0eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-h26cc057_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h025e3ab_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libunistring-0.9.10-h3422bc3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.10.0-h74a6958_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h4a9ca0c_1.conda @@ -599,118 +510,101 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.8-hbb9b287_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.44.0-py312h728bc31_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.0-py312hc2c121e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.4-py312hf263c89_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.8.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.5-py312h1f38498_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.5-py312h05635fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ml_dtypes-0.5.1-py312hcb1e3ce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.0-py312h6142ec9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.10-hff1a8ea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.6.3-py312hdb8e49c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.15.0-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.17.1-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-ha1acc90_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.61.2-py312h22bc582_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.1-py312hcb1e3ce_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.1.2-hd90e43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.1-py312h98f7732_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.45-ha881caa_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.3.0-py312h50aef2c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.2-hdbeaa80_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.3.1-py312h998013c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-20.0.0-py312h1f38498_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-20.0.0-py312hc40f475_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.2-py312hd3c0895_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.10.0-py312hfd5e53c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.1-py312h237c406_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.11.0-py312hfd5e53c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py312hf0774e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyre-1.12.5-py312ha6e6942_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h937420b_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.9-hc22306f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.9.0-py312hc7121bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.4.3-py312h4623290_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.7.1-h0716509_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2025.7.34-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.18.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.14-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312h0bf5046_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-0.4.2-py_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.25.2-py312hcb1e3ce_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.6.1-py312h39203ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py312ha921b1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.12.0-py312h9d7df2b_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.0.7-py312hf733f26_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.1-py312hf733f26_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snaphu-0.4.1-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hd121638_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.50.4-hb5dd463_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-3.0.2-h8ab69cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.2-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda @@ -721,719 +615,784 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-16.0.0-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wget-1.21.4-he2df1f1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.3-py312h163523d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.20.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.2.5-hf787086_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/1f/10543d7a3f7e76dd4bbdc77134890ac2f41bc8570c565961464f6320009b/jaxlib-0.7.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6c/2f/8bd31a1ea43c01ac215283d83aa5f8d5acbe7a36c85b82f1757bfe9ccb31/numba-0.65.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f5/6c/86644987505dcb90ba6d627d6989c27bafb0699f9fd00187e06d05ea8594/numcodecs-0.16.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/ad/964ee5341767dd9e2f13e76f0a36d45aa8d81ad776c80bdd6dedc8f2f462/ortools-9.14.6206-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/63/4ac4488f3999d8f0d5fcfce5ed8cbe9abc0d64daffd59c5411e15a7fdb40/snaphu-0.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ - minimal: + gpu: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.12.15-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.5-py312h5d8c7f2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hbfa7f16_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.2-h5e3027f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.5-h76f0014_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.2-h015de20_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.20.1-hdfce8c9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.1-h1e5e6c0_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.8.3-h5e174a9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-hafb2847_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.10-ha543af7_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hf18ad05_13.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-12.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-12.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.15.2-h3122c55_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.2-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.3-py312h5253ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.7.1-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.5-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.19.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.57.0-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-h48d6fc4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.3.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_h3b011a4_112.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py312hf50df08_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.0.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.0.1-pyha770c72_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.12.3-py312h5fc20e3_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.49.0-pl5321hc2ff736_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.17.0-h84d6215_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.1.0-h6083320_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_108.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2024.12.30-py312h097a544_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.18-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.3.6-py312h40df4bb_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.6.0-cpu_py312h860c521_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.25.8-py312cuda129h25d0ca5_0_cuda.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-cuda-0.25.8-h74ed563_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py312h84d6215_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h1b9301b_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h766b0b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.3-default_h746c552_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.4.1.4-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-hc58de80_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.10.0-hbbee16a_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.10.0-hd75530a_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.10.0-h2b12c9b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.2.0-hf40a0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-h7b0646d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h00e09a9_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h202a827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.12.3-he63569f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.12.3-hf70aa56_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.12.3-hcaab353_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.12.3-h97b37a7_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.3.0-h4c17acf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1022.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.3-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.10.0-nompi_hb6f1874_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.57-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h46dd2a8_20.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h4bc477f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-devel-2.15.2-he237659_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-5.4.0-py312h68d7fa5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.4-py312hf0f0c11_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.4-py312h63ddcf0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.8.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.1-py312hd3ec401_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.9-h05a5f5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py312hf9745cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.10-h05a5f5f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.20.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h7bcfee6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py312hf9745cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.1.0-py312h80c1187_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.26.3-h8d634f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.2-py312h8ecdadd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py312h50c33e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-he0df7b0_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.10.0-py312h02b19dd_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py312h03c6e1f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py312hfab6c90_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.0-py312h868fb18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.12.1-py312h053e1f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312he675c61_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.6-py312hcf8a19e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312he6b159b_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.10-h9e4cc4f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.9.0-py312h4f23490_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.4-py312h3f74e48_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.9.0-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.1.post1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.3-py312h021bea1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2025.7.34-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.0-pl5321h16c4a6b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.5.0-py312hcedc861_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.4.4-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.18.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.14-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.21-h7ab7c64_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.25.2-py312hf9745cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.6.1-py312h7a48858_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py312heda63a1_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.22.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py312h5253ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py312h4ae17e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-78.1.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py312h21f5128_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snaphu-0.4.1-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.0.2-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.0-h04a0ce9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tzlocal-5.3-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.4.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-1.0.12-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.1.0-py312hd9148b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wget-1.21.4-hda4d442_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.20.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: ./ + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.3.0-hd9031aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.23.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/a0/ddb3a71359c1df61f3edc408936b5bda7ed402e78ae7e9ef6afd438577c6/jaxlib-0.9.2-cp312-cp312-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/0f/6d6d722102a0ceccf4a5038e2bc91d023da84a6dba98482a4634df3d27ab/ortools-9.15.6755-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/f3/b594fe851ad520a07127a9680bbf9732c74f8d4e6b6dc5a2cdd196bf5974/snaphu-0.4.1-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + - pypi: ./ osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.12.15-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.13.5-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.0-hed7f23c_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.2-hd08b81e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.4-h6caf38d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.1-habbe1e8_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.5-ha7b4b11_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.2-hf8ac5b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.21.0-hc6344be_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.13.1-h8af1df2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.8.3-hf857400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-habbe1e8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.7-habbe1e8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.32.10-hcb36028_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.510-h29a0155_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-12.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-12.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.1-hcb83491_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.13-h6ee9776_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.12-h95cdebe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h4137820_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.11.5-ha5d16b2_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-h16f91aa_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h3e7f9b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.15.2-h9cbb436_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-he0dfb12_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.23.1-hf9886e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py314ha3d490a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.3-py314hf17b0b1_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.1-py312hb23fbb9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/crc32c-2.7.1-py312hea69d52_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.0.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.13.5-py314h6e9b3f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.19.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.57.0-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-h1d14073_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.3.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.7.0-py312h512c567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.3-py312h93ff630_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.0.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.0.1-pyha770c72_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.1-hc9a1286_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.4-h1d7e6e1_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/frozenlist-1.7.0-pyhf298e5d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.12.3-py314h0ed7ee7_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.49.0-pl5321ha659579_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.16.0-ha393de7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf4-4.2.15-h2ee6834_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hc95e3eb_104.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2024.12.30-py312h8857d0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.18-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.3.6-py314hef3eda1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jaxlib-0.6.0-cpu_py312he253ca6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.8-py312h2c4a281_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-20.0.0-hd5f8272_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-20.0.0-he749cb8_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.25.1-h493aca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.3.0-hf1e31eb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.14.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.2-ha82da77_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.6-gpl_h6fbacd7_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-6_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-6_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.19.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.0-h286801f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.3-hd65cc67_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.10.0-h4b24957_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.10.0-h30a2ec2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.10.0-hd29f476_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.25.1-h493aca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.36.0-h9484b08_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.36.0-h7081f7f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.71.0-hf667ad3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.2.0-h9a9ea7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libidn2-2.3.8-h38aa460_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.1-h72d67bc_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.9.2-nompi_h610d594_116.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h0181452_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-20.0.0-h636d7b7_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.47-h3783ad8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.29.3-hccd9074_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-hd41c47c_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-h26cc057_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.49.1-h3f77e49_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libunistring-0.9.10-h3422bc3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.10.0-h74a6958_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.12.3-haccf57a_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.12.3-h44e20f9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.12.3-hd534ca0_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.12.3-h73a5ae7_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.3.0-h48b13b8_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h913acd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-hc33e383_1022.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-6_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.10.0-nompi_h28ce51b_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.32-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.57-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha909e78_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-gpl_ha239c29_119.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.7-h52572c6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.39-h223e5b9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.2-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.2-h8d039ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-devel-2.15.2-h8d039ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-hb2570ba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzip-1.11.2-h1336266_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.8-hbb9b287_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.44.0-py312h728bc31_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-5.4.0-py312hc2c121e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.4-py312hf263c89_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.3-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.4-py314h264e108_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.8.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h925e9cb_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.1-py312hdbc7e53_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.8-py314he55896b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.9-hff1a8ea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ml_dtypes-0.5.1-py312hcb1e3ce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.0-py312h6142ec9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.6.3-py312hdb8e49c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.10-hff1a8ea_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/multidict-6.7.1-pyh62beb40_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/muparser-2.3.5-h11e0b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.20.1-py314hbdd0d06_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-ha1acc90_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.61.2-py312h22bc582_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.1-py312hcb1e3ce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.1.2-hd90e43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcb1e3ce_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.45-ha881caa_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.0-h1318a7e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.3.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.3-py314h1569ea8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.26.3-h2a4d681_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-3.0.2-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.7.1-hfb14a63_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/propcache-0.3.1-pyhe1237c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-20.0.0-py312h1f38498_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-20.0.0-py312hc40f475_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.2-py312hd3c0895_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.10.0-py312hfd5e53c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.1-py312h237c406_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyre-1.12.5-py312ha6e6942_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.46.0-py314h54f3292_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.12.1-py314h3da1bed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py314hb2113e1_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h937420b_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.10-hc22306f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-6_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.9.0-py312hc7121bb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.4-py314ha89eb22_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.4-h4c637c5_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.2.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-librt-0.9.0-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.1.post1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.4.3-py312h4623290_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.7.1-h0716509_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2025.7.34-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.5.0-py314h5002e4e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2026.4.4-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.18.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.14-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312h0bf5046_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.25.2-py312hcb1e3ce_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.6.1-py312h39203ce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.12.0-py312h9d7df2b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.22.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.15-py314ha14b1ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py314hc49a259_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py314h15f0f0f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-78.1.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.0-py312hf733f26_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snaphu-0.4.1-py312h024a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.2-py314h277790e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.49.1-hd7222ec_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-3.0.2-h8ab69cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.0-h85ec8f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tzlocal-5.3-py312h81bd7bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-16.0.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.4.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-1.0.12-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.1.0-py314h6cfcd04_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wget-1.21.4-he2df1f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.3-py312h163523d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.20.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.2.5-hf787086_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.3.0-h25f632f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yarl-1.23.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-ha86207d_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/06/aa1e2c36db1ed893ea4a89528a9cc8617a31919ffe7307c4f56aaa87e5cc/jaxlib-0.9.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d4/33c8af00f0bf6f552d74f3a054f648af2c5bc6bece97972f3bfadce4f5ec/llvmlite-0.47.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/56/a4/90edb01e9176053578e343d7a7276bc28356741ee67059aed8ed2c1a4e59/numba-0.65.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/54/ed73ec00369fb6d6c71049d62e4b7c87c918b61f86ddd55a11c20ada395e/ortools-9.15.6755-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/01/a3c3ed5cd186f39e7880f8303cc51385a198a81469d53d0fdecf1f64d929/protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/b9/50d7a530c3dc97f61d30fefb31aa50f4710954de12e0cebcae8c9fc8d301/snaphu-0.4.1.tar.gz + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl - pypi: ./ - plotting: + minimal: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.12.15-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h92a005d_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.2-he7b75e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.4-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-h92c474e_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.5-h0c2b49e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.2-hee85082_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.21.0-h1d8da38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.1-h46c1de9_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.8.3-h9cdc349_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h92c474e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-h92c474e_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.10-h186f887_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h379b65b_14.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.20.0-h4cfbee9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda @@ -1442,56 +1401,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312hd9148b4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.7.1-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.59.0-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py312hf50df08_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.49.0-pl5321hc2ff736_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.4.1-h15599e2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -1501,184 +1426,109 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.8.2-py312h76e1a71_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.7.0-cpu_py312h73730d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.1-gpl_h98cc613_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h1b9301b_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h766b0b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-34_h59b9bed_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-34_he106b2a_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_hddf928d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.8-default_ha444ac7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h02f45b3_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h86883d2_10.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.10.0-hbbee16a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.10.0-hd75530a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.10.0-h2b12c9b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-15.1.0-h69a702a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.3-hf39c6af_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.2.0-hf40a0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-h7b0646d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-34_h7ac8fdf_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hecd9e04_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h00e09a9_116.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h8261f1e_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h202a827_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.11.0-he8b52b9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h04c0eec_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.0-py312h68d7fa5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.4-py312hf0f0c11_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.5-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.5-py312he3d6523_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.10-h05a5f5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py312hf9745cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.1-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h7bcfee6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py312hf9745cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h55fea9a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.1-py312hf79963d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h80c1187_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.0-py312h02b19dd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312h1c88c49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py312hfab6c90_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py312hdb827e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312h3f74e48_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312he6b159b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.9.0-py312h4f23490_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.1-h6ac528c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.3-py312h021bea1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2025.7.34-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda @@ -1687,32 +1537,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.14-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.22-h96f233e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.25.2-py312hf9745cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.7.1-py312h4f0b9e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py312h4ae17e4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py312heda63a1_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.1-py312h21f5128_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snaphu-0.4.1-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.0.2-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.2-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda @@ -1720,96 +1560,81 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tzlocal-5.3-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wget-1.21.4-hda4d442_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.45-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.20.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/50/e37d02e250f5feb755112ec95b1c012a36d48a99209277267037d100f630/jaxlib-0.7.1-cp312-cp312-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/74/1d374bf510e9fb36bba82ecd3e09461cd8394afef3e418fa5b060f129401/ortools-9.14.6206-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/f3/b594fe851ad520a07127a9680bbf9732c74f8d4e6b6dc5a2cdd196bf5974/snaphu-0.4.1-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.12.15-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.0-hed7f23c_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.2-hd08b81e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.4-h6caf38d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.1-habbe1e8_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.5-ha7b4b11_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.2-hf8ac5b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.21.0-hc6344be_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.13.1-h8af1df2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.8.3-hf857400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-habbe1e8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.7-habbe1e8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.32.10-hcb36028_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.510-h29a0155_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.20.0-h9c47b6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py312h98f7732_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda @@ -1818,43 +1643,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312ha0dd364_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/crc32c-2.7.1-py312hea69d52_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.0.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.59.0-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-hce30654_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.7.0-py312h512c567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.3-py312h93ff630_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.1-hc9a1286_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.4-h1d7e6e1_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.49.0-pl5321ha659579_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.16.0-ha393de7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf4-4.2.15-h2ee6834_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda @@ -1865,42 +1668,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.8.2-py312hd676ae3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py312h1f4f324_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-hd64df32_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.4-h51d1e36_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.1-gpl_h46e8061_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-20.0.0-hd5f8272_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-20.0.0-he749cb8_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.25.1-h493aca8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.3.0-hf1e31eb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-34_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-34_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.14.1-h73640d1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.24-h5773f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda @@ -1909,38 +1696,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.10.0-h4b24957_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.10.0-h30a2ec2_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.10.0-hd29f476_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.25.1-h493aca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.36.0-h9484b08_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.36.0-h7081f7f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.2.0-h9a9ea7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libidn2-2.3.8-h38aa460_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.1-h72d67bc_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-34_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.9.2-nompi_h610d594_116.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h0181452_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-20.0.0-h636d7b7_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.50-h280e0eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-h26cc057_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h025e3ab_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libunistring-0.9.10-h3422bc3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.10.0-h74a6958_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h4a9ca0c_1.conda @@ -1949,51 +1722,28 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.8-hbb9b287_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.44.0-py312h728bc31_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.0-py312hc2c121e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.4-py312hf263c89_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h925e9cb_1002.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.5-py312h1f38498_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.5-py312h05635fa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.10-hff1a8ea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ml_dtypes-0.5.1-py312hcb1e3ce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.1-py312hb23fbb9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.6.3-py312hdb8e49c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-ha1acc90_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.61.2-py312h22bc582_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.1-py312hcb1e3ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h889cd5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.1.2-hd90e43c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.1-py312h98f7732_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.45-ha881caa_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.3.0-py312h50aef2c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.2-hdbeaa80_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.3.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-20.0.0-py312h1f38498_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-20.0.0-py312hc40f475_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.2-py312hd3c0895_0.conda @@ -2002,20 +1752,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py312hf0774e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyre-1.12.5-py312ha6e6942_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h079ba4e_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h937420b_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.9.0-py312hc7121bb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.4.3-py312h4623290_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.7.1-h0716509_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2025.7.34-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda @@ -2024,31 +1770,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.14-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312h0bf5046_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.25.2-py312hcb1e3ce_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.1-py312h54d6233_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py312ha921b1d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.12.0-py312h9d7df2b_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.1-py312hf733f26_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snaphu-0.4.1-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hd121638_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.50.4-hb5dd463_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-3.0.2-h8ab69cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.2-py312h163523d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda @@ -2056,311 +1793,293 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tzlocal-5.3-py312h81bd7bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-16.0.0-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wget-1.21.4-he2df1f1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.3-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.20.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.2.5-hf787086_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/1f/10543d7a3f7e76dd4bbdc77134890ac2f41bc8570c565961464f6320009b/jaxlib-0.7.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6c/2f/8bd31a1ea43c01ac215283d83aa5f8d5acbe7a36c85b82f1757bfe9ccb31/numba-0.65.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f5/6c/86644987505dcb90ba6d627d6989c27bafb0699f9fd00187e06d05ea8594/numcodecs-0.16.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/ad/964ee5341767dd9e2f13e76f0a36d45aa8d81ad776c80bdd6dedc8f2f462/ortools-9.14.6206-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/63/4ac4488f3999d8f0d5fcfce5ed8cbe9abc0d64daffd59c5411e15a7fdb40/snaphu-0.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ - test: + plotting: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.12.15-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h92a005d_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.2-he7b75e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.4-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-h92c474e_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.5-h0c2b49e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.2-hee85082_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.21.0-h1d8da38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.1-h46c1de9_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.8.3-h9cdc349_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h92c474e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-h92c474e_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.10-h186f887_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h379b65b_14.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.20.0-h4cfbee9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312hd9148b4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.10.3-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.7.1-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.59.0-py312h8a5da7c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-h48d6fc4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py312hf50df08_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.49.0-pl5321hc2ff736_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.4.1-h15599e2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.8.2-py312h76e1a71_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.7.0-cpu_py312h73730d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.1-gpl_h98cc613_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h1b9301b_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h766b0b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-34_h59b9bed_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-34_he106b2a_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_hddf928d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.8-default_ha444ac7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h02f45b3_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h86883d2_10.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.10.0-hbbee16a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.10.0-hd75530a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.10.0-h2b12c9b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-15.1.0-h69a702a_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.3-hf39c6af_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.2.0-hf40a0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-h7b0646d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-34_h7ac8fdf_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hecd9e04_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h00e09a9_116.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h8261f1e_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h202a827_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.11.0-he8b52b9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h04c0eec_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.0-py312h68d7fa5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.4-py312hf0f0c11_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.5-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.5-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.10-h05a5f5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py312hf9745cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.1-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.17.1-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h7bcfee6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py312hf9745cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h55fea9a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.1-py312hf79963d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h80c1187_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.0-py312h02b19dd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312h1c88c49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py312hfab6c90_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py312hdb827e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312h3f74e48_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312he6b159b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.9.0-py312h4f23490_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.1-h6ac528c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.3-py312h021bea1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2025.7.34-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda @@ -2369,34 +2088,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.14-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.22-h96f233e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.25.2-py312hf9745cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.7.1-py312h4f0b9e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py312h4ae17e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py312heda63a1_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.1-py312h21f5128_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snaphu-0.4.1-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.0.2-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.2-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda @@ -2404,174 +2115,179 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tzlocal-5.3-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wget-1.21.4-hda4d442_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.45-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.20.1-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/50/e37d02e250f5feb755112ec95b1c012a36d48a99209277267037d100f630/jaxlib-0.7.1-cp312-cp312-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/74/1d374bf510e9fb36bba82ecd3e09461cd8394afef3e418fa5b060f129401/ortools-9.14.6206-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/f3/b594fe851ad520a07127a9680bbf9732c74f8d4e6b6dc5a2cdd196bf5974/snaphu-0.4.1-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.12.15-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.0-hed7f23c_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.2-hd08b81e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.4-h6caf38d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.1-habbe1e8_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.5-ha7b4b11_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.2-hf8ac5b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.21.0-hc6344be_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.13.1-h8af1df2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.8.3-hf857400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-habbe1e8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.7-habbe1e8_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.32.10-hcb36028_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.510-h29a0155_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.20.0-h9c47b6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py312h98f7732_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.2-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312ha0dd364_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.10.3-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/crc32c-2.7.1-py312hea69d52_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.0.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.59.0-py312h6daa0e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-h1d14073_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.7.0-py312h512c567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.3-py312h93ff630_12.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.1-hc9a1286_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.4-h1d7e6e1_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.49.0-pl5321ha659579_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.16.0-ha393de7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf4-4.2.15-h2ee6834_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.8.2-py312hd676ae3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isce3-0.24.4-py312h1234567_5_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py312h1f4f324_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-hd64df32_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.4-h51d1e36_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.1-gpl_h46e8061_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-20.0.0-hd5f8272_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-20.0.0-hf07054f_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-20.0.0-he749cb8_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.25.1-h493aca8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.3.0-hf1e31eb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-34_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-h5505292_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-34_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.14.1-h73640d1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.24-h5773f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda @@ -2580,38 +2296,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.10.0-h4b24957_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.10.0-h30a2ec2_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.10.0-hd29f476_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.25.1-h493aca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.36.0-h9484b08_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.36.0-h7081f7f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.2.0-h9a9ea7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libidn2-2.3.8-h38aa460_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.1-h72d67bc_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-34_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.9.2-nompi_h610d594_116.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h0181452_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-20.0.0-h636d7b7_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.50-h280e0eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-h26cc057_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h025e3ab_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libunistring-0.9.10-h3422bc3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.10.0-h74a6958_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h4a9ca0c_1.conda @@ -2620,56 +2322,39 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.8-hbb9b287_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.44.0-py312h728bc31_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.0-py312hc2c121e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.4-py312hf263c89_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h925e9cb_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.5-py312h1f38498_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.5-py312h05635fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.10-hff1a8ea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ml_dtypes-0.5.1-py312hcb1e3ce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.1-py312hb23fbb9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.6.3-py312hdb8e49c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.17.1-py312h163523d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-ha1acc90_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.61.2-py312h22bc582_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.1-py312hcb1e3ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h889cd5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.1.2-hd90e43c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.1-py312h98f7732_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.45-ha881caa_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.3.0-py312h50aef2c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.2-hdbeaa80_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.3.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-20.0.0-py312h1f38498_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-20.0.0-py312hc40f475_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.2-py312hd3c0895_0.conda @@ -2678,23 +2363,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py312hf0774e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyre-1.12.5-py312ha6e6942_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h079ba4e_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h937420b_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.9.0-py312hc7121bb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.4.3-py312h4623290_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.7.1-h0716509_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2025.7.34-py312h163523d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda @@ -2703,33 +2383,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.14-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312h0bf5046_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.25.2-py312hcb1e3ce_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.1-py312h54d6233_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py312ha921b1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.12.0-py312h9d7df2b_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.1-py312hf733f26_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snaphu-0.4.1-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hd121638_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.50.4-hb5dd463_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-3.0.2-h8ab69cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.2-py312h163523d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda @@ -2737,87 +2410,815 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tzlocal-5.3-py312h81bd7bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-16.0.0-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wget-1.21.4-he2df1f1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.3-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.20.1-py312h998013c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.2.5-hf787086_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/1f/10543d7a3f7e76dd4bbdc77134890ac2f41bc8570c565961464f6320009b/jaxlib-0.7.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6c/2f/8bd31a1ea43c01ac215283d83aa5f8d5acbe7a36c85b82f1757bfe9ccb31/numba-0.65.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f5/6c/86644987505dcb90ba6d627d6989c27bafb0699f9fd00187e06d05ea8594/numcodecs-0.16.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/ad/964ee5341767dd9e2f13e76f0a36d45aa8d81ad776c80bdd6dedc8f2f462/ortools-9.14.6206-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/63/4ac4488f3999d8f0d5fcfce5ed8cbe9abc0d64daffd59c5411e15a7fdb40/snaphu-0.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: ./ -packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 - md5: d7c89558ba9fa0495403155b64376d81 - license: None - purls: [] - size: 2562 - timestamp: 1578324546067 -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 - md5: 73aaf86a425cc6e73fcf236a5a46396d - depends: - - _libgcc_mutex 0.1 conda_forge - - libgomp >=7.5.0 - constrains: - - openmp_impl 9999 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 23621 - timestamp: 1650670423406 -- conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - sha256: 0deeaf0c001d5543719db9b2686bc1920c86c7e142f9bec74f35e1ce611b1fc2 - md5: 8c4061f499edec6b8ac7000f6d586829 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/affine?source=hash-mapping - size: 19164 - timestamp: 1733762153202 -- conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.24.0-pyhe01879c_0.conda - sha256: 98e86e1bbbdfcd6318a4118cd151975bf726e415e8cf5b2207f82a112859e84e - md5: 4c5cb2b7c40dd2a3bd3b68547fd9412d - depends: - - python >=3.9 - - aiohttp >=3.9.2,<4.0.0 - - aioitertools >=0.5.1,<1.0.0 - - botocore >=1.39.9,<1.39.12 - - python-dateutil >=2.1,<3.0.0 - - jmespath >=0.7.1,<2.0.0 - - multidict >=6.0.0,<7.0.0 - - wrapt >=1.10.10,<2.0.0 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/aiobotocore?source=hash-mapping - size: 79596 - timestamp: 1754943905140 -- conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - sha256: 7842ddc678e77868ba7b92a726b437575b23aaec293bca0d40826f1026d90e27 - md5: 18fd895e0e775622906cdabfc3cf0fb4 - depends: + test: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.12.15-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.20.0-h4cfbee9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312hd9148b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.10.3-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.59.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-h48d6fc4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py312hf50df08_12.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.4.1-h15599e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.8.2-py312h76e1a71_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py312h1234567_5_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h766b0b6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_hddf928d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.8-default_ha444ac7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h86883d2_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.10.0-hbbee16a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.10.0-hd75530a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.10.0-h2b12c9b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.3-hf39c6af_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.2.0-hf40a0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-h7b0646d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hecd9e04_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h00e09a9_116.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h8261f1e_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.11.0-he8b52b9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h04c0eec_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.0-py312h68d7fa5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.5-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.5-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.10-h05a5f5f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.17.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.1-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h80c1187_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.0-py312h02b19dd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312h1c88c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py312hfab6c90_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py312hdb827e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312he6b159b_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.1-h6ac528c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.3-py312h021bea1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2025.7.34-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.14-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py312h4ae17e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py312heda63a1_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.1-py312h21f5128_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.0.2-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tzlocal-5.3-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.45-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.20.1-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/50/e37d02e250f5feb755112ec95b1c012a36d48a99209277267037d100f630/jaxlib-0.7.1-cp312-cp312-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/74/1d374bf510e9fb36bba82ecd3e09461cd8394afef3e418fa5b060f129401/ortools-9.14.6206-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/f3/b594fe851ad520a07127a9680bbf9732c74f8d4e6b6dc5a2cdd196bf5974/snaphu-0.4.1-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl + - pypi: ./ + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.12.15-py312h6daa0e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.20.0-h9c47b6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py312h98f7732_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312ha0dd364_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.10.3-py312h6daa0e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.59.0-py312h6daa0e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-h1d14073_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.7.0-py312h512c567_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.3-py312h93ff630_12.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.1-hc9a1286_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.4-h1d7e6e1_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.16.0-ha393de7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf4-4.2.15-h2ee6834_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.8.2-py312hd676ae3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isce3-0.24.4-py312h1234567_5_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.4-h51d1e36_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.1-gpl_h46e8061_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.3.0-hf1e31eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.14.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.24-h5773f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.13.3-h1d14073_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.3-hef24e92_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.10.0-h4b24957_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.10.0-h30a2ec2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.10.0-hd29f476_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.2.0-h9a9ea7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.1-h72d67bc_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.9.2-nompi_h610d594_116.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.50-h280e0eb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-h26cc057_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h025e3ab_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h4a9ca0c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-h429d6fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzip-1.11.2-h1336266_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.8-hbb9b287_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.0-py312hc2c121e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.5-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.5-py312h05635fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.10-hff1a8ea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.6.3-py312hdb8e49c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.17.1-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.1-py312h98f7732_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.45-ha881caa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.3.0-py312h50aef2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.2-hdbeaa80_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.3.1-py312h998013c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.7-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.2-py312hd3c0895_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.11.0-py312hfd5e53c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py312hf0774e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyre-1.12.5-py312ha6e6942_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h937420b_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.4.3-py312h4623290_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.7.1-h0716509_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2025.7.34-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.14-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312h0bf5046_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py312ha921b1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.12.0-py312h9d7df2b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.1-py312hf733f26_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hd121638_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.50.4-hb5dd463_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-3.0.2-h8ab69cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2025.6.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.2-py312h163523d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.1-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tzlocal-5.3-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-16.0.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.20.1-py312h998013c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.2.5-hf787086_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/1f/10543d7a3f7e76dd4bbdc77134890ac2f41bc8570c565961464f6320009b/jaxlib-0.7.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6c/2f/8bd31a1ea43c01ac215283d83aa5f8d5acbe7a36c85b82f1757bfe9ccb31/numba-0.65.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f5/6c/86644987505dcb90ba6d627d6989c27bafb0699f9fd00187e06d05ea8594/numcodecs-0.16.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/ad/964ee5341767dd9e2f13e76f0a36d45aa8d81ad776c80bdd6dedc8f2f462/ortools-9.14.6206-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl + - pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + - pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/63/4ac4488f3999d8f0d5fcfce5ed8cbe9abc0d64daffd59c5411e15a7fdb40/snaphu-0.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd + md5: a44032f282e7d2acdeb1c240308052dd + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8325 + timestamp: 1764092507920 +- pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + name: absl-py + version: 2.4.0 + sha256: 88476fd881ca8aab94ffa78b7b6c632a782ab3ba1cd19c9bd423abc4fb4cd28d + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda + sha256: 0deeaf0c001d5543719db9b2686bc1920c86c7e142f9bec74f35e1ce611b1fc2 + md5: 8c4061f499edec6b8ac7000f6d586829 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/affine?source=hash-mapping + size: 19164 + timestamp: 1733762153202 +- pypi: https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl + name: aiobotocore + version: 3.4.0 + sha256: 26290eb6830ea92d8a6f5f90b56e9f5cedd6d126074d5db63b195e281d982465 + requires_dist: + - aiohttp>=3.12.0,<4.0.0 + - aioitertools>=0.5.1,<1.0.0 + - botocore>=1.42.79,<1.42.85 + - python-dateutil>=2.1,<3.0.0 + - jmespath>=0.7.1,<2.0.0 + - multidict>=6.0.0,<7.0.0 + - typing-extensions>=4.14.0,<5.0.0 ; python_full_version < '3.11' + - wrapt>=1.10.10,<3.0.0 + - httpx>=0.25.1,<0.29 ; extra == 'httpx' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda + sha256: 7842ddc678e77868ba7b92a726b437575b23aaec293bca0d40826f1026d90e27 + md5: 18fd895e0e775622906cdabfc3cf0fb4 + depends: - python >=3.9 license: PSF-2.0 license_family: PSF @@ -2846,6 +3247,48 @@ packages: - pkg:pypi/aiohttp?source=hash-mapping size: 1007572 timestamp: 1753805448349 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.5-py312h5d8c7f2_0.conda + sha256: 52f4d07b10fe4a1ded570b0708594d2d9075223e1dd94d0c5988eb71f724a5f2 + md5: 68edaee7692efb8bbef5e95375090189 + depends: + - __glibc >=2.17,<3.0.a0 + - aiohappyeyeballs >=2.5.0 + - aiosignal >=1.4.0 + - attrs >=17.3.0 + - frozenlist >=1.1.1 + - libgcc >=14 + - multidict >=4.5,<7.0 + - propcache >=0.2.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yarl >=1.17.0,<2.0 + license: MIT AND Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/aiohttp?source=hash-mapping + size: 1034187 + timestamp: 1775000054521 +- conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.13.5-pyhf64b827_0.conda + sha256: 5e405baaa539c354b5b35d884c015cea0c684c80df25ecce93727656a98aaaae + md5: 3959eb42dbedbb11a2184aac95e90154 + depends: + - aiohappyeyeballs >=2.5.0 + - aiosignal >=1.4.0 + - async-timeout >=4.0,<6.0 + - attrs >=17.3.0 + - frozenlist >=1.1.1 + - multidict >=4.5,<7.0 + - propcache >=0.2.0 + - python >=3.10 + - yarl >=1.17.0,<2.0 + track_features: + - aiohttp_no_compile + license: MIT AND Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/aiohttp?source=compressed-mapping + size: 484171 + timestamp: 1774999670712 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.12.15-py312h6daa0e5_0.conda sha256: 272a5afdd14bafd4bbd95998e1b2f637f6d5c00f43cf469f4c0bfce3a8456386 md5: 572a16e27eb506a2dd3ca436336d3ffc @@ -2867,18 +3310,13 @@ packages: - pkg:pypi/aiohttp?source=compressed-mapping size: 978588 timestamp: 1753805356065 -- conda: https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.12.0-pyhd8ed1ab_1.conda - sha256: 7d56e547a819a03c058dd8793ca9df6ff9825812da52c214192edb61a7de1c95 - md5: 3eb47adbffac44483f59e580f8600a1e - depends: - - python >=3.9 - - typing_extensions >=4.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/aioitertools?source=hash-mapping - size: 25063 - timestamp: 1735329177103 +- pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + name: aioitertools + version: 0.13.0 + sha256: 0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be + requires_dist: + - typing-extensions>=4.0 ; python_full_version < '3.10' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda sha256: 8dc149a6828d19bf104ea96382a9d04dae185d4a03cc6beb1bc7b84c428e3ca2 md5: 421a865222cd0c9d83ff08bc78bf3a61 @@ -2903,6 +3341,17 @@ packages: purls: [] size: 566531 timestamp: 1744668655747 +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 + md5: dcdc58c15961dbf17a0621312b01f5cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: GPL + purls: [] + size: 584660 + timestamp: 1768327524772 - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 md5: 2934f256a8acfe48f6ebb4fce6cde29c @@ -2921,759 +3370,235 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2706396 - timestamp: 1718551242397 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - sha256: ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef - md5: 7adba36492a1bb22d98ffffe4f6fc6de - depends: - - __osx >=11.0 - - libcxx >=16 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2235747 - timestamp: 1718551382432 -- conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda - sha256: 50e10a77fb8e10b27b0ec9882888c274f0ccb85abc0995e9d64814e41aa25d41 - md5: e1e1f92ebc718b438be00ea63e982420 - depends: - - asf_search-base >=9.0.9,<9.0.10.0a0 - - python >=3.9 - - remotezip >=0.10.0 - purls: [] - size: 6580 - timestamp: 1754004598329 -- conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda - sha256: d439b1065a365c10a5f480db7c27050129b382b376887891d1ce1836fd08c690 - md5: 3c8405c1ae9afa382c9b902fdcf5acdb - depends: - - ciso8601 - - dateparser - - importlib-metadata - - numpy - - python >=3.9 - - pytz - - requests - - shapely - - tenacity 8.2.2 - purls: - - pkg:pypi/asf-search?source=hash-mapping - size: 76511 - timestamp: 1754004588643 -- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - sha256: 99c53ffbcb5dc58084faf18587b215f9ac8ced36bbfb55fa807c00967e419019 - md5: a10d11958cadc13fdb43df75f8b1903f - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/attrs?source=compressed-mapping - size: 57181 - timestamp: 1741918625732 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h92a005d_16.conda - sha256: 93f3cf66d042409a931cef62a06f4842c8132dd1f8c39649cbcc37ba2fe8bce8 - md5: 31c586a1415df0cd4354b18dd7510793 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 122960 - timestamp: 1752261075524 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hbfa7f16_15.conda - sha256: 85086df9b358450196a13fc55bab1c552227df78cafddbe2d15caaea458b41a6 - md5: 16baa9bb7f70a1e457a82023898314a7 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.20.1,<0.20.2.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 122993 - timestamp: 1750291448852 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.9.0-hed7f23c_16.conda - sha256: 7cab10a622c6583c1d29fc120e071354275dd7563b4b5aed8a3200e4360fc729 - md5: d2790e0de2e0a81cfbba095f5c2fd287 - depends: - - __osx >=11.0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 106599 - timestamp: 1752261110026 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.2-h5e3027f_0.conda - sha256: d61cce967e6d97d03aa2828458f7344cdc93422fd2c1126976ab8f475a313363 - md5: 0ead3ab65460d51efb27e5186f50f8e4 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 51039 - timestamp: 1749095567725 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.2-he7b75e1_1.conda - sha256: 30ecca069fdae0aa6a8bb64c47eb5a8d9a7bef7316181e8cbb08b7cb47d8b20f - md5: c04d1312e7feec369308d656c18e7f3e - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - libgcc >=14 - - openssl >=3.5.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 50942 - timestamp: 1752240577225 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.2-hd08b81e_1.conda - sha256: 0cff81daf70f64bb8bf51f0883727d253c0462085f6bfe3d6c619479fbaec329 - md5: f8d75a83ced3f7296fed525502eac257 - depends: - - __osx >=11.0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 41154 - timestamp: 1752240791193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda - sha256: 251883d45fbc3bc88a8290da073f54eb9d17e8b9edfa464d80cff1b948c571ec - md5: 8448031a22c697fac3ed98d69e8a9160 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 236494 - timestamp: 1747101172537 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.4-hb03c661_0.conda - sha256: 6c9e1b9e82750c39ac0251dcfbeebcbb00a1af07c0d7e3fb1153c4920da316eb - md5: ae5621814cb99642c9308977fe90ed0d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 236420 - timestamp: 1752193614294 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.4-h6caf38d_0.conda - sha256: d94c508308340b5b8294d2c382737b72b77e9df688610fa034d0a009a9339d73 - md5: 7a3edd3d065687fe3aa9a04a515fd2bf - depends: - - __osx >=11.0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 221313 - timestamp: 1752193769784 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-h92c474e_6.conda - sha256: 154d4a699f4d8060b7f2cec497a06e601cbd5c8cde6736ced0fb7e161bc6f1bb - md5: 3490e744cb8b9d5a3b9785839d618a17 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 22116 - timestamp: 1752240005329 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda - sha256: 68e7ec0ab4f5973343de089ac71c7b9b9387c35640c61e0236ad45fc3dbfaaaa - md5: e96cc668c0f9478f5771b37d57f90386 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.3,<0.12.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 21817 - timestamp: 1747144982788 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.1-habbe1e8_6.conda - sha256: 633c7ee0e80c24fa6354b2e1c940af6d7f746c9badc3da94681a1a660faeca39 - md5: 35c95aad3ab99e0a428c2e02e8b8e282 - depends: - - __osx >=11.0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 21037 - timestamp: 1752240015504 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.5-h0c2b49e_1.conda - sha256: 357871fb64dcfe8790b12a0287587bd1163a68501ea5dde4edbc21f529f8574c - md5: 995110b50a83e10b05a602d97d262e64 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - libgcc >=14 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 57616 - timestamp: 1752252562812 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.5-h76f0014_0.conda - sha256: 6c2235d1f11571d4af89cdf29a5665ce6cc827807d51ec72cd922441e1c628ae - md5: 96ca9c01b50954f1224086170a4c97ea - depends: - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-io >=0.20.1,<0.20.2.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 58066 - timestamp: 1750491665743 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.5-ha7b4b11_1.conda - sha256: 23357117a8b9731ac6e22baa2403aabd43fd2e6d41b01d5e79b58ed09d8edbb7 - md5: 1ca9a812e2c68cacdee5d57ec7eb57a4 - depends: - - __osx >=11.0 - - libcxx >=19 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 51024 - timestamp: 1752252597019 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.2-h015de20_2.conda - sha256: ca0268cead19e985f9b153613f0f6cdb46e0ca32e1647466c506f256269bcdd9 - md5: ad05d594704926ba7c0c894a02ea98f1 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-io >=0.20.1,<0.20.2.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 223038 - timestamp: 1750289165728 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.2-hee85082_3.conda - sha256: f589744aee3d9b5dae3d8965d076a44677dbc1ba430aebdf0099d73cad2f74b2 - md5: 526fcb03343ba807a064fffee59e0f35 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 222724 - timestamp: 1752252489009 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.2-hf8ac5b2_3.conda - sha256: 5517c9fbc870864346836c7760795eec2b3abf14eafb22ab72bf12bbf4057b28 - md5: 222d6e221ff727124667ff119eb3fb3a - depends: - - __osx >=11.0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 169377 - timestamp: 1752252503599 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.20.1-hdfce8c9_0.conda - sha256: c6bd4f067a7829795e1c44e4536b71d46f55f69569216aed34a7b375815fa046 - md5: dd2d3530296d75023a19bc9dfb0a1d59 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - s2n >=1.5.21,<1.5.22.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 179223 - timestamp: 1749844480175 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.21.0-h1d8da38_1.conda - sha256: b4ffc5db4ec098233fefa3c75991f88a4564951d08cc5ea393c7b99ba0bad795 - md5: d3aa479d62496310c6f35f1465c1eb2e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - s2n >=1.5.22,<1.5.23.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 179132 - timestamp: 1752246147390 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.21.0-hc6344be_1.conda - sha256: e5c5809ed83bf61020809a8a07fba8d44255e4874129eb3b20322b936c2dbcca - md5: fec5f171000f16687b7c540a3d95c030 - depends: - - __osx >=11.0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 175240 - timestamp: 1752246199785 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.1-h1e5e6c0_3.conda - sha256: f9e63492d5dd17f361878ce7efa1878de27225216b4e07990a6cb18c378014dc - md5: d55921ca3469224f689f974278107308 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-io >=0.20.1,<0.20.2.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 215867 - timestamp: 1750291920145 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.1-h46c1de9_4.conda - sha256: f26ab79da7a6a484fd99f039c6a2866cb8fc0d3ff114f5ab5f544376262de9e8 - md5: c32fb87153bface87f575a6cd771edb7 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - license: Apache-2.0 - license_family: APACHE + license: BSD-2-Clause + license_family: BSD purls: [] - size: 215628 - timestamp: 1752261677589 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.13.1-h8af1df2_4.conda - sha256: 790fed5ed6d01a8f61e21223db9d9226637777b52c84ca120fa3b82faf3ec54f - md5: f2b1d71ae9a8e299d222840cb534f7f6 + size: 2706396 + timestamp: 1718551242397 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + sha256: ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef + md5: 7adba36492a1bb22d98ffffe4f6fc6de depends: - __osx >=11.0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - license: Apache-2.0 - license_family: APACHE + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD purls: [] - size: 150040 - timestamp: 1752261682207 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.8.3-h5e174a9_0.conda - sha256: f4e7b200da5df7135cd087618fa30b2cd60cec0eebbd5570fb4c1e9a789dd9aa - md5: dea2540e57e8c1b949ca58ff4c7c0cbf + size: 2235747 + timestamp: 1718551382432 +- conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-12.0.6-pyhd8ed1ab_0.conda + sha256: b1987ffe543f4c1d92ffb9dec45b2d9a483d4f9a151021ca68923e956a1275da + md5: 6e39e929e0dd178a820e13073f0d1cc4 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-io >=0.20.1,<0.20.2.0a0 - - openssl >=3.5.0,<4.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - license: Apache-2.0 - license_family: APACHE + - asf_search-base >=12.0.6,<12.0.7.0a0 + - python >=3.10 + - remotezip >=0.10.0 purls: [] - size: 133960 - timestamp: 1750831815089 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.8.3-h9cdc349_1.conda - sha256: 2e133f7c4e0a5c64165eab6779fcbbd270824a232546c18f8dc3c134065d2c81 - md5: 615a72fa086d174d4c66c36c0999623b + size: 6965 + timestamp: 1774637441425 +- conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-9.0.9-pyhd8ed1ab_0.conda + sha256: 50e10a77fb8e10b27b0ec9882888c274f0ccb85abc0995e9d64814e41aa25d41 + md5: e1e1f92ebc718b438be00ea63e982420 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - openssl >=3.5.1,<4.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: APACHE + - asf_search-base >=9.0.9,<9.0.10.0a0 + - python >=3.9 + - remotezip >=0.10.0 purls: [] - size: 134302 - timestamp: 1752271927275 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.8.3-hf857400_1.conda - sha256: d1400ba39adec539cf55b872d123ef0028ea3a7533a010b2e8ef9269dfb75af4 - md5: 820b7002343d7ea8c0d35dfaf4146a57 + size: 6580 + timestamp: 1754004598329 +- conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-12.0.6-pyhd8ed1ab_0.conda + sha256: 0d65ff0a24e15be53e1919ea9b12930159f2b19029c6348767e0744646ef51be + md5: 52f9bb27be8e1fa4c1ea65ca4cb6a4dd depends: - - __osx >=11.0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 116422 - timestamp: 1752271922725 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h92c474e_1.conda - sha256: a9e071a584be0257b2ec6ab6e1f203e9d6b16d2da2233639432727ffbf424f3d - md5: 4ab554b102065910f098f88b40163835 + - ciso8601 + - dateparser + - importlib-metadata + - numpy + - python >=3.10 + - pytz + - requests + - shapely + - tenacity 8.2.2 + purls: + - pkg:pypi/asf-search?source=hash-mapping + size: 85931 + timestamp: 1774637428537 +- conda: https://conda.anaconda.org/conda-forge/noarch/asf_search-base-9.0.9-pyhd8ed1ab_0.conda + sha256: d439b1065a365c10a5f480db7c27050129b382b376887891d1ce1836fd08c690 + md5: 3c8405c1ae9afa382c9b902fdcf5acdb depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 59146 - timestamp: 1752240966518 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-hafb2847_0.conda - sha256: 18c588c386e21e2a926c6f3c1ba7aaf69059ce1459a134f7c8c1ebfc68cf67ec - md5: 65853df44b7e4029d978c50be888ed89 + - ciso8601 + - dateparser + - importlib-metadata + - numpy + - python >=3.9 + - pytz + - requests + - shapely + - tenacity 8.2.2 + purls: + - pkg:pypi/asf-search?source=hash-mapping + size: 76511 + timestamp: 1754004588643 +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010 + md5: 9673a61a297b00016442e022d689faa6 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.3,<0.12.4.0a0 + - python >=3.10 + constrains: + - astroid >=2,<5 license: Apache-2.0 - license_family: APACHE - purls: [] - size: 59037 - timestamp: 1747308292628 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-habbe1e8_1.conda - sha256: cab7f54744619b88679c577c9ec8d56957bc8f6829e9966a7e50857fbc6c756d - md5: 9d77627725afb71b57f38355ee9e2829 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + size: 28797 + timestamp: 1763410017955 +- conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhcf101f3_2.conda + sha256: 6638b68ab2675d0bed1f73562a4e75a61863b903be1538282cddb56c8e8f75bd + md5: 0d0ef7e4a0996b2c4ac2175a12b3bf69 depends: - - __osx >=11.0 - - aws-c-common >=0.12.4,<0.12.5.0a0 + - python >=3.10 + - python license: Apache-2.0 license_family: APACHE - purls: [] - size: 53149 - timestamp: 1752240972623 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-h92c474e_2.conda - sha256: 7168007329dfb1c063cd5466b33a1f2b8a28a00f587a0974d97219432361b4db - md5: 248831703050fe9a5b2680a7589fdba9 + purls: + - pkg:pypi/async-timeout?source=hash-mapping + size: 13559 + timestamp: 1767290444597 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + sha256: 99c53ffbcb5dc58084faf18587b215f9ac8ced36bbfb55fa807c00967e419019 + md5: a10d11958cadc13fdb43df75f8b1903f depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 76748 - timestamp: 1752241068761 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda - sha256: 03a5e4b3dcda35696133632273043d0b81e55129ff0f9e6d75483aa8eb96371b - md5: 6d28d50637fac4f081a0903b4b33d56d + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/attrs?source=compressed-mapping + size: 57181 + timestamp: 1741918625732 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab + md5: c6b0543676ecb1fb2d7643941fe375f2 depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 76627 - timestamp: 1747141741534 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.7-habbe1e8_2.conda - sha256: 648c3d23df53b4cea1d551e4e54a544284be5436af5453296ed8184d970efc3a - md5: f3f6fef7c8d8ce7f80df37e4aaaf6b93 + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/attrs?source=hash-mapping + size: 64927 + timestamp: 1773935801332 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.1-hcb83491_2.conda + sha256: aba942578ad57e7b584434ed4e39c5ff7ed4ad3f326ac3eda26913ca343ea255 + md5: 1c701edc28f543a0e040325b223d5ca0 depends: - __osx >=11.0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 74030 - timestamp: 1752241089866 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.10-h186f887_3.conda - sha256: 9d7c10746b5c33beaef774f2bb5c3e5e6047382af017c1810001d650bda7708c - md5: 46e292e8dd73167f708e3f1172622d8b - depends: - - libgcc >=14 - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-event-stream >=0.5.5,<0.5.6.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-mqtt >=0.13.1,<0.13.2.0a0 - - aws-c-s3 >=0.8.3,<0.8.4.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.10.12,<0.10.13.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 406408 - timestamp: 1752278411783 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.10-ha543af7_2.conda - sha256: 5ffa3737548da49b651f149d2f16aeed03206bef3361101b3b39d572298cbe03 - md5: f36154869427e60dfca2f7c82892923a + size: 116820 + timestamp: 1774275057443 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.13-h6ee9776_1.conda + sha256: 13c42cb54619df0a1c3e5e5b0f7c8e575460b689084024fd23abeb443aac391b + md5: 8baab664c541d6f059e83423d9fc5e30 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - aws-c-mqtt >=0.13.1,<0.13.2.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-c-event-stream >=0.5.5,<0.5.6.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.20.1,<0.20.2.0a0 - - aws-c-s3 >=0.8.3,<0.8.4.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 399911 - timestamp: 1751554210728 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.32.10-hcb36028_3.conda - sha256: ee6bf62af761680bc1b63b310ad639824d38166fb73d7ed7fc851aaaf3a52e82 - md5: 8a2f3c6469ef3457bcd09f723318d6fb + size: 45233 + timestamp: 1764593742187 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.12.6-hc919400_0.conda + sha256: cd3817c82470826167b1d8008485676862640cff65750c34062e6c20aeac419b + md5: b759f02a7fa946ea9fd9fb035422c848 depends: - - libcxx >=19 - __osx >=11.0 - - aws-c-io >=0.21.0,<0.21.1.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-cal >=0.9.2,<0.9.3.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-event-stream >=0.5.5,<0.5.6.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-mqtt >=0.13.1,<0.13.2.0a0 - - aws-c-http >=0.10.2,<0.10.3.0a0 - - aws-c-s3 >=0.8.3,<0.8.4.0a0 license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 264054 - timestamp: 1752278422739 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h379b65b_14.conda - sha256: afede534635a844823520a449e23f993a3c467b5f5942f5bcadffd3cbd4a2d84 - md5: 41f512a30992559875ed9ff6b6d17d5b + size: 224116 + timestamp: 1763585987935 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h3e7f9b5_0.conda + sha256: ce405171612acef0924a1ff9729d556db7936ad380a81a36325b7df5405a6214 + md5: 6edccad10fc1c76a7a34b9c14efbeaa3 depends: - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libcurl >=8.14.1,<9.0a0 - - aws-crt-cpp >=0.32.10,<0.32.11.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 - - aws-c-event-stream >=0.5.5,<0.5.6.0a0 - - libzlib >=1.3.1,<2.0a0 + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 3460060 - timestamp: 1752300917216 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hf18ad05_13.conda - sha256: 5d3086b4d19cea29bc841e036968649896cb6c589cafb983aa87960350ba0731 - md5: f42b52282062da9edeaca59b0953c793 + size: 21470 + timestamp: 1767790900862 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.10.12-h95cdebe_1.conda + sha256: b25380b43c2c5733dcaac88b075fa286893af1c147ca40d50286df150ace5fb8 + md5: 806ff124512457583d675c62336b1392 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - - aws-c-event-stream >=0.5.5,<0.5.6.0a0 - - libcurl >=8.14.1,<9.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-crt-cpp >=0.32.10,<0.32.11.0a0 + - __osx >=11.0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 3401520 - timestamp: 1751564623958 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.510-h29a0155_14.conda - sha256: 11beaf76559ccc96c33cb7b8699327361ba25346f85a4ad73f843fcd6607b2b2 - md5: e8a24559e631bdd20c2438da1d38b643 + size: 172940 + timestamp: 1774270153001 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h4137820_0.conda + sha256: 0e6ba2c8f250f466b9d671d3970e1f7c149c925b79c10fa7778708192a2a7833 + md5: 730d1cbd0973bd7ac150e181d3b572f3 depends: - __osx >=11.0 - - libcxx >=19 - - libzlib >=1.3.1,<2.0a0 - - aws-crt-cpp >=0.32.10,<0.32.11.0a0 - - aws-c-event-stream >=0.5.5,<0.5.6.0a0 - - libcurl >=8.14.1,<9.0a0 - - aws-c-common >=0.12.4,<0.12.5.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 3076731 - timestamp: 1752300934579 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a - md5: 0a8838771cc2e985cd295e01ae83baf1 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.10.1,<9.0a0 - - libgcc >=13 - - libstdcxx >=13 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 345117 - timestamp: 1728053909574 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - sha256: f5b91329ed59ffc0be8747784c6e4cc7e56250c54032883a83bc11808ef6a87e - md5: f093a11dcf3cdcca010b20a818fcc6dc - depends: - - __osx >=11.0 - - libcurl >=8.10.1,<9.0a0 - - libcxx >=17 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 294299 - timestamp: 1728054014060 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - sha256: 286b31616c191486626cb49e9ceb5920d29394b9e913c23adb7eb637629ba4de - md5: 73f73f60854f325a55f1d31459f2ab73 - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 232351 - timestamp: 1728486729511 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - sha256: bde446b916fff5150606f8ed3e6058ffc55a3aa72381e46f1ab346590b1ae40a - md5: d7b71593a937459f2d4b67e1a4727dc2 - depends: - - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libcxx >=17 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 166907 - timestamp: 1728486882502 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - sha256: 2606260e5379eed255bcdc6adc39b93fb31477337bcd911c121fc43cd29bf394 - md5: 7eb66060455c7a47d9dcdbfa9f46579b - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - license: MIT - license_family: MIT - purls: [] - size: 549342 - timestamp: 1728578123088 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - sha256: 08d52d130addc0fb55d5ba10d9fa483e39be25d69bac7f4c676c2c3069207590 - md5: 704238ef05d46144dae2e6b5853df8bc + size: 177072 + timestamp: 1773868341204 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.11.5-ha5d16b2_5.conda + sha256: bd8f4ffb8346dd02bda2bc1ae9993ebdb131298b1308cb9e6b1e771b530d9dd5 + md5: f33735fd60f9c4a21c51a0283eb8afc1 depends: - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libcxx >=17 - license: MIT - license_family: MIT - purls: [] - size: 438636 - timestamp: 1728578216193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - sha256: 273475f002b091b66ce7366da04bf164c3732c03f8692ab2ee2d23335b6a82ba - md5: 13de36be8de3ae3f05ba127631599213 - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libxml2 >=2.12.7,<2.14.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.12,<0.10.13.0a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 149312 - timestamp: 1728563338704 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - sha256: 77ab04e8fe5636a2de9c718f72a43645f7502cd208868c8a91ffba385547d585 - md5: 7a187cd7b1445afc80253bb186a607cc + size: 129783 + timestamp: 1774282252139 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.4-h16f91aa_4.conda + sha256: 8a4ee03ea6e14d5a498657e5fe96875a133b4263b910c5b60176db1a1a0aaa27 + md5: 658a8236f3f1ebecaaa937b5ccd5d730 depends: - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libcxx >=17 - - libxml2 >=2.12.7,<2.14.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 121278 - timestamp: 1728563418777 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - sha256: 5371e4f3f920933bb89b926a85a67f24388227419abd6e99f6086481e5e8d5f2 - md5: 7c1980f89dd41b097549782121a73490 - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - license: MIT - license_family: MIT + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 287366 - timestamp: 1728729530295 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - sha256: f48523f8aa0b5b80f45a92f0556b388dd96f44ac2dc2f44a01d08c1822eec97d - md5: c49fbc5233fcbaa86391162ff1adef38 + size: 53430 + timestamp: 1764755714246 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h3e7f9b5_0.conda + sha256: 06661bc848b27aa38a85d8018ace8d4f4a3069e22fa0963e2431dc6c0dc30450 + md5: 07f6c5a5238f5deeed6e985826b30de8 depends: - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libcxx >=17 - license: MIT - license_family: MIT + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 196032 - timestamp: 1728729672889 + size: 91917 + timestamp: 1771063496505 - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda sha256: f334115c6b0c6c2cd0d28595365f205ec7eaa60bcc5ff91a75d7245f728be820 md5: a38b801f2bcc12af80c2e02a9e4ce7d9 @@ -3685,6 +3610,30 @@ packages: - pkg:pypi/backoff?source=hash-mapping size: 18816 timestamp: 1733771192649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda + sha256: d77a24be15e283d83214121428290dbe55632a6e458378205b39c550afa008cf + md5: 5b8c55fed2e576dde4b0b33693a4fdb1 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 237970 + timestamp: 1767045004512 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + noarch: generic + sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 + md5: a2ac7763a9ac75055b68f325d3255265 + depends: + - python >=3.14 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: [] + size: 7514 + timestamp: 1767044983590 - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda sha256: e7af5d1183b06a206192ff440e08db1c4e8b2ca1f8376ee45fb2f3a85d4ee45d md5: 2c2fae981fd2afd00812c92ac47d023d @@ -3716,81 +3665,29 @@ packages: purls: [] size: 33602 timestamp: 1733513285902 -- conda: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.7.3-pyhd8ed1ab_0.conda - sha256: dd116a77a5aca118cfdfcc97553642295a3fb176a4e741fd3d1363ee81cebdfd - md5: 708d2f99b8a2c833ff164a225a265e76 - depends: - - contourpy >=1.2 - - jinja2 >=2.9 - - narwhals >=1.13 - - numpy >=1.16 - - packaging >=16.8 - - pandas >=1.2 - - pillow >=7.1.0 - - python >=3.10 - - pyyaml >=3.10 - - tornado >=6.2 - - xyzservices >=2021.09.1 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/bokeh?source=hash-mapping - size: 4934851 - timestamp: 1747091638593 -- conda: https://conda.anaconda.org/conda-forge/noarch/boto3-1.40.9-pyhd8ed1ab_0.conda - sha256: c92e6b245117ddee6abfda361573cb2938156e520c867e4e5d0d7e877f0d76c6 - md5: 22730ab9efbeb76e506693d8db07ca80 - depends: - - botocore >=1.40.9,<1.41.0 - - jmespath >=0.7.1,<2.0.0 - - python >=3.9 - - s3transfer >=0.13.0,<0.14.0 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/boto3?source=hash-mapping - size: 83925 - timestamp: 1755162758291 -- conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.39.11-pyge310_1234567_0.conda - sha256: 8cfa5e9b6f8b8a0e1470208f53f4b0f39a8cbf90658b3c495f621097201aee47 - md5: 568d1e4d62e6d0335e89f41b831bb4a8 - depends: - - jmespath >=0.7.1,<2.0.0 - - python >=3.10 - - python-dateutil >=2.1,<3.0.0 - - urllib3 >=1.25.4,!=2.2.0,<3 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/botocore?source=hash-mapping - size: 7920764 - timestamp: 1753307719114 -- conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.40.9-pyge310_1234567_0.conda - sha256: b931590b8219610ffdfde5ae8fd194355fb5882178f852043a9dea585d7b80fa - md5: 1bb020ca3d641fe677e44c333802ede9 - depends: - - jmespath >=0.7.1,<2.0.0 - - python >=3.10 - - python-dateutil >=2.1,<3.0.0 - - urllib3 >=1.25.4,!=2.2.0,<3 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/botocore?source=hash-mapping - size: 7973244 - timestamp: 1755158592822 -- conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.1-pyhd8ed1ab_0.conda - sha256: 38de10b8608ed962ad3e01d6ddc5cfa373221cfdc0faa96a46765d6defffc75f - md5: 9f3937b768675ab4346f07e9ef723e4b +- pypi: https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl + name: botocore + version: 1.42.84 + sha256: 15f3fe07dfa6545e46a60c4b049fe2bdf63803c595ae4a4eec90e8f8172764f3 + requires_dist: + - jmespath>=0.7.1,<2.0.0 + - python-dateutil>=2.1,<3.0.0 + - urllib3>=1.25.4,<1.27 ; python_full_version < '3.10' + - urllib3>=1.25.4,!=2.2.0,<3 ; python_full_version >= '3.10' + - awscrt==0.31.2 ; extra == 'crt' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda + sha256: 1acf87c77d920edd098ddc91fa785efc10de871465dee0f463815b176e019e8b + md5: 1fcdf88e7a8c296d3df8409bf0690db4 depends: - jinja2 >=3 - - python >=3.9 + - python >=3.10 license: MIT license_family: MIT purls: - pkg:pypi/branca?source=hash-mapping - size: 29601 - timestamp: 1734433493998 + size: 30176 + timestamp: 1759755695447 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b md5: 98514fe74548d768907ce7a13f680e8f @@ -3803,35 +3700,22 @@ packages: license: MIT license_family: MIT purls: [] - size: 19264 - timestamp: 1725267697072 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda - sha256: c969baaa5d7a21afb5ed4b8dd830f82b78e425caaa13d717766ed07a61630bec - md5: 5d08a0ac29e6a5a984817584775d4131 - depends: - - __glibc >=2.17,<3.0.a0 - - brotli-bin 1.1.0 hb9d3cd8_3 - - libbrotlidec 1.1.0 hb9d3cd8_3 - - libbrotlienc 1.1.0 hb9d3cd8_3 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 19810 - timestamp: 1749230148642 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-h5505292_3.conda - sha256: 97e2a90342869cc122921fdff0e6be2f5c38268555c08ba5d14e1615e4637e35 - md5: 03c7865dd4dbf87b7b7d363e24c632f1 + size: 19264 + timestamp: 1725267697072 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 + md5: 8ccf913aaba749a5496c17629d859ed1 depends: - - __osx >=11.0 - - brotli-bin 1.1.0 h5505292_3 - - libbrotlidec 1.1.0 h5505292_3 - - libbrotlienc 1.1.0 h5505292_3 + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.2.0 hb03c661_1 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 20094 - timestamp: 1749230390021 + size: 20103 + timestamp: 1764017231353 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda sha256: a086f36ff68d6e30da625e910547f6211385246fb2474b144ac8c47c32254576 md5: 215e3dc8f2f837906d066e7f01aa77c0 @@ -3845,6 +3729,19 @@ packages: purls: [] size: 19588 timestamp: 1725268044856 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + sha256: 422ac5c91f8ef07017c594d9135b7ae068157393d2a119b1908c7e350938579d + md5: 48ece20aa479be6ac9a284772827d00c + depends: + - __osx >=11.0 + - brotli-bin 1.2.0 hc919400_1 + - libbrotlidec 1.2.0 hc919400_1 + - libbrotlienc 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 20237 + timestamp: 1764018058424 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 md5: c63b5e52939e795ba8d26e35d767a843 @@ -3858,31 +3755,19 @@ packages: purls: [] size: 18881 timestamp: 1725267688731 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda - sha256: ab74fa8c3d1ca0a055226be89e99d6798c65053e2d2d3c6cb380c574972cd4a7 - md5: 58178ef8ba927229fba6d84abf62c108 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 + md5: af39b9a8711d4a8d437b52c1d78eb6a1 depends: - __glibc >=2.17,<3.0.a0 - - libbrotlidec 1.1.0 hb9d3cd8_3 - - libbrotlienc 1.1.0 hb9d3cd8_3 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 19390 - timestamp: 1749230137037 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-h5505292_3.conda - sha256: 5c6a808326c3bbb6f015a57c9eb463d65f259f67154f4f06783d8829ce9239b4 - md5: cc435eb5160035fd8503e9a58036c5b5 - depends: - - __osx >=11.0 - - libbrotlidec 1.1.0 h5505292_3 - - libbrotlienc 1.1.0 h5505292_3 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 17185 - timestamp: 1749230373519 + size: 21021 + timestamp: 1764017221344 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda sha256: 28f1af63b49fddf58084fb94e5512ad46e9c453eb4be1d97449c67059e5b0680 md5: b8512db2145dc3ae8d86cdc21a8d421e @@ -3895,6 +3780,18 @@ packages: purls: [] size: 16772 timestamp: 1725268026061 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + sha256: e2d142052a83ff2e8eab3fe68b9079cad80d109696dc063a3f92275802341640 + md5: 377d015c103ad7f3371be1777f8b584c + depends: + - __osx >=11.0 + - libbrotlidec 1.2.0 hc919400_1 + - libbrotlienc 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 18628 + timestamp: 1764018033635 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda sha256: f2a59ccd20b4816dea9a2a5cb917eb69728271dbf1aeab4e1b7e609330a50b6f md5: b0b867af6fc74b2a0aa206da29c0f3cf @@ -3912,40 +3809,23 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 349867 timestamp: 1725267732089 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda - sha256: dc27c58dc717b456eee2d57d8bc71df3f562ee49368a2351103bc8f1b67da251 - md5: a32e0c069f6c3dcac635f7b0b0dac67e +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + sha256: 49df13a1bb5e388ca0e4e87022260f9501ed4192656d23dc9d9a1b4bf3787918 + md5: 64088dffd7413a2dd557ce837b4cbbdb depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - libbrotlicommon 1.1.0 hb9d3cd8_3 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 351721 - timestamp: 1749230265727 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda - sha256: 35df7079768b4c51764149c42b14ccc25c4415e4365ecc06c38f74562d9e4d16 - md5: c7c728df70dc05a443f1e337c28de22d - depends: - - __osx >=11.0 - - libcxx >=18 + - libgcc >=14 + - libstdcxx >=14 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 constrains: - - libbrotlicommon 1.1.0 h5505292_3 + - libbrotlicommon 1.2.0 hb03c661_1 license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 339365 - timestamp: 1749230606596 + - pkg:pypi/brotli?source=compressed-mapping + size: 368300 + timestamp: 1764017300621 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda sha256: 254b411fa78ccc226f42daf606772972466f93e9bc6895eabb4cfda22f5178af md5: a83c2ef76ccb11bc2349f4f17696b15d @@ -3963,6 +3843,23 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 339360 timestamp: 1725268143995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + sha256: 5c2e471fd262fcc3c5a9d5ea4dae5917b885e0e9b02763dbd0f0d9635ed4cb99 + md5: f9501812fe7c66b6548c7fcaa1c1f252 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 359854 + timestamp: 1764018178608 - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 sha256: 36da32e5a6beab7a9af39be1c8f42e5eca716e64562cb9d5e0d559c14406b11d md5: c1ac6229d0bfd14f8354ff9ad2a26cad @@ -3975,6 +3872,21 @@ packages: purls: [] size: 204879 timestamp: 1607309237341 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-hd1e3526_2.conda + sha256: b4831ac06bb65561342cedf3d219cf9b096f20b8d62cda74f0177dffed79d4d5 + md5: 5948f4fead433c6e5c46444dbfb01162 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 168501 + timestamp: 1761758949420 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 sha256: 816f929193a614b9a663e76e4267994ad99d04812b8a8e513e957d750deb4b04 md5: 37a072dad6b844df1b5a32428bb08692 @@ -3986,6 +3898,39 @@ packages: purls: [] size: 178300 timestamp: 1607309265926 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-he0dfb12_2.conda + sha256: f32d7c6285601ac3f6baf0715b225fd017702cf24260c6f7f14f7b6e721d92bc + md5: 4cfe5258439d88ce2ef0b159007ee067 + depends: + - __osx >=11.0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 141089 + timestamp: 1761759272675 +- conda: https://conda.anaconda.org/conda-forge/noarch/burst2safe-2.0.2-pyhd8ed1ab_0.conda + sha256: 70de293928454ce1e3a25d4e41ebbd7c9624c3af43c004b4899351e2245abdf4 + md5: f82694e3bfc49370827a849a31b9439e + depends: + - aiohttp >=3.12.6 + - asf_search + - dateparser !=1.1.0 + - gdal + - lxml + - numpy + - python >=3.10 + - shapely >=2.1.0 + - tifffile >=2022.04.22 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/burst2safe?source=hash-mapping + size: 169167 + timestamp: 1767654122991 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d md5: 62ee74e96c5ebb0af99386de58cf9553 @@ -3997,6 +3942,17 @@ packages: purls: [] size: 252783 timestamp: 1720974456583 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab @@ -4007,6 +3963,16 @@ packages: purls: [] size: 122909 timestamp: 1720974522888 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 124834 + timestamp: 1771350416561 - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda sha256: f8003bef369f57396593ccd03d08a8e21966157269426f71e943f96e4b579aeb md5: f7f0d6cc2dc986d42ac2689ec88192be @@ -4018,6 +3984,17 @@ packages: purls: [] size: 206884 timestamp: 1744127994291 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 207882 + timestamp: 1765214722852 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda sha256: b4bb55d0806e41ffef94d0e3f3c97531f322b3cb0ca1f7cdf8e47f62538b7a2b md5: f8cd1beb98240c7edb1a95883360ccfa @@ -4028,36 +4005,16 @@ packages: purls: [] size: 179696 timestamp: 1744128058734 -- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.15.2-h3122c55_1.conda - sha256: 6c952a8aa5507c30cd80901cce5dfacfdaf54c999cf6b3e391322ca216f2593f - md5: 2bc8d76acd818d7e79229f5157d5c156 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - lz4-c >=1.10.0,<1.11.0a0 - - zlib-ng >=2.2.2,<2.3.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 341796 - timestamp: 1733447758492 -- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.18.0-h3122c55_0.conda - sha256: fffabb1de6166755800ea30bea44c4322865ff815916fea58eec708cae6be60a - md5: 917119f4c89474a0a7bc6f02c750d56b +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 + md5: bcb3cba70cf1eec964a03b4ba7775f01 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - lz4-c >=1.10.0,<1.11.0a0 - - zlib-ng >=2.2.4,<2.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD + - __osx >=11.0 + license: MIT + license_family: MIT purls: [] - size: 346544 - timestamp: 1749815446018 + size: 180327 + timestamp: 1765215064054 - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.20.0-h4cfbee9_0.conda sha256: 09b13bc6ba77784bed9d3974b13812ce7053b2f27dddfd6eee900ced37b6d621 md5: fbe4713a96621b35be501c712bdd91d1 @@ -4073,34 +4030,21 @@ packages: purls: [] size: 347552 timestamp: 1755022471903 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.15.2-h9cbb436_1.conda - sha256: 5f8adbf23fdae2393bd7d3396585d142cdd17b76f5ce98de0920dfa423775c0e - md5: 9b2a1e9b4c5af217b6fefe5b198e569d - depends: - - __osx >=11.0 - - libcxx >=18 - - lz4-c >=1.10.0,<1.11.0a0 - - zlib-ng >=2.2.2,<2.3.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 248038 - timestamp: 1733447813779 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.18.0-h9cbb436_0.conda - sha256: 05cdf9ca03dee9256e7cffaffda409f9b900e749ea8c559651e22b0b7f2bb542 - md5: b25aadc6d48e6011804dc576559b60ed +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda + sha256: b6ce82ebe3cf24e70179bd656eacfa97ce9df9a500f2cec6843043466a5e6af8 + md5: 68ceffc6cadae61846a207cae60de094 depends: - - __osx >=11.0 - - libcxx >=18 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 - lz4-c >=1.10.0,<1.11.0a0 - - zlib-ng >=2.2.4,<2.3.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 250831 - timestamp: 1749815465711 + size: 353899 + timestamp: 1772620395951 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.20.0-h9c47b6e_0.conda sha256: 306950b7760d82a9f131657f8ff4c7560c355b046f6925ea157b2e836d1b6e32 md5: 12f0cd802e5fdba5f59134412ce2e90b @@ -4115,13 +4059,20 @@ packages: purls: [] size: 253332 timestamp: 1755022633582 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - sha256: bf832198976d559ab44d6cdb315642655547e26d826e34da67cbee6624cda189 - md5: 19f3a56f68d2fd06c516076bff482c52 - license: ISC +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.23.1-hf9886e1_0.conda + sha256: 666200e72dda686cb705365eb6710d123b1e2b0cc4227e51a674a1feea3ba05e + md5: 67a5ede6098a3f291c90a083458ea911 + depends: + - __osx >=11.0 + - libcxx >=19 + - lz4-c >=1.10.0,<1.11.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 158144 - timestamp: 1738298224464 + size: 255095 + timestamp: 1772620752027 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda sha256: 837b795a2bb39b75694ba910c13c15fa4998d4bb2a622c214a6a5174b2ae53d1 md5: 74784ee3d225fc3dca89edb635b4e5cc @@ -4131,13 +4082,15 @@ packages: purls: [] size: 154402 timestamp: 1754210968730 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - sha256: 7e12816618173fe70f5c638b72adf4bfd4ddabf27794369bb17871c5bb75b9f9 - md5: 3569d6a9141adc64d2fe4797f3289e06 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc + md5: 4492fd26db29495f0ba23f146cd5638d + depends: + - __unix license: ISC purls: [] - size: 158425 - timestamp: 1738298167688 + size: 147413 + timestamp: 1772006283803 - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 noarch: python sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 @@ -4186,27 +4139,33 @@ packages: purls: [] size: 978114 timestamp: 1741554591855 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.24.0-py312hf9745cd_0.conda - sha256: 3e85b3aa555b7ea989dc80c47d714d89086d388359855ee7e19da988f797698b - md5: ea213e31805199cb7d0da457b879ceed +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a + md5: bb6c4808bfa69d6f7f6b07e5846ced37 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - matplotlib-base >=3.6 - - numpy >=1.19,<3 - - packaging >=21 - - pyproj >=3.3.1 - - pyshp >=2.3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - shapely >=1.8 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cartopy?source=hash-mapping - size: 1520747 - timestamp: 1728342419990 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 989514 + timestamp: 1766415934926 - conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_0.conda sha256: 10633aedbc2646d371eed7de94121158c5d0aa8907279adf63fbae872dfcca8b md5: 7242926a8932e552f3ce5b77884b52db @@ -4228,27 +4187,27 @@ packages: - pkg:pypi/cartopy?source=hash-mapping size: 1542159 timestamp: 1754074495356 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.24.0-py312hcd31e36_0.conda - sha256: 0edb3f7385ae58280dfbb09c11bbb7e7d41e2e4a19657ee8b9ab84e939906e6f - md5: 07dc477c85e1b5b4dac919b9f53d22e6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_1.conda + sha256: de9bb34948b0ac7025707fe0bdaa26a6f253374ddf9da8f74b2ed14943c14211 + md5: 6c913a686cb4060cbd7639a36fa144f0 depends: - - __osx >=11.0 - - libcxx >=17 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 - matplotlib-base >=3.6 - - numpy >=1.19,<3 + - numpy >=1.23,<3 - packaging >=21 - pyproj >=3.3.1 - pyshp >=2.3 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 - - shapely >=1.8 + - shapely >=2.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/cartopy?source=hash-mapping - size: 1501531 - timestamp: 1728342435897 + size: 1541225 + timestamp: 1756883734658 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py312h98f7732_0.conda sha256: 37ddaaa168ac048998d98d7757830f877c8aa3025040c2e8406a457eda586dc5 md5: 4e9c2239c5265227446453a52d10a31b @@ -4270,16 +4229,27 @@ packages: - pkg:pypi/cartopy?source=hash-mapping size: 1519785 timestamp: 1754074818662 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - sha256: 42a78446da06a2568cb13e69be3355169fbd0ea424b00fc80b7d840f5baaacf3 - md5: c207fa5ac7ea99b149344385a9c0880d +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py314ha3d490a_1.conda + sha256: 9f7ff06062d29b7096121478515e75afd02246b7c98fead6f0dac2f011eea4b0 + md5: 5def62152c68e2343228e1b27a9338c0 depends: - - python >=3.9 - license: ISC + - __osx >=11.0 + - libcxx >=19 + - matplotlib-base >=3.6 + - numpy >=1.23,<3 + - packaging >=21 + - pyproj >=3.3.1 + - pyshp >=2.3 + - python >=3.14.0rc2,<3.15.0a0 + - python >=3.14.0rc2,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - shapely >=2.0 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/certifi?source=compressed-mapping - size: 162721 - timestamp: 1739515973129 + - pkg:pypi/cartopy?source=hash-mapping + size: 1533650 + timestamp: 1756884104765 - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda sha256: a1ad5b0a2a242f439608f22a538d2175cac4444b7b3f4e2b8c090ac337aaea40 md5: 11f59985f49df4620890f3e746ed7102 @@ -4290,6 +4260,16 @@ packages: - pkg:pypi/certifi?source=compressed-mapping size: 158692 timestamp: 1754231530168 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 + md5: 765c4d97e877cdbbb88ff33152b86125 + depends: + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=compressed-mapping + size: 151445 + timestamp: 1772001170301 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 md5: a861504bbea4161a9170b85d4d2be840 @@ -4306,6 +4286,22 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 294403 timestamp: 1725560714366 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + sha256: 7dafe8173d5f94e46cf9cd597cc8ff476a8357fbbd4433a8b5697b2864845d9c + md5: 648ee28dcd4e07a1940a17da62eccd40 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 295716 + timestamp: 1761202958833 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f md5: 19a5456f72f505881ba493979777b24e @@ -4322,6 +4318,22 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 281206 timestamp: 1725560813378 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + sha256: 5b5ee5de01eb4e4fd2576add5ec9edfc654fbaf9293e7b7ad2f893a67780aa98 + md5: 10dd19e4c797b8f8bdb1ec1fbb6821d7 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 292983 + timestamp: 1761203354051 - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda sha256: d5696636733b3c301054b948cdd793f118efacce361d9bd4afb57d5980a9064f md5: 57df494053e17dce2ac3a0b33e1b2a2e @@ -4333,6 +4345,17 @@ packages: - pkg:pypi/cfgv?source=hash-mapping size: 12973 timestamp: 1734267180483 +- conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda + sha256: aa589352e61bb221351a79e5946d56916e3c595783994884accdb3b97fe9d449 + md5: 381bd45fb7aa032691f3063aff47e3a1 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cfgv?source=hash-mapping + size: 13589 + timestamp: 1763607964133 - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda sha256: 18f1c43f91ccf28297f92b094c2c8dbe9c6e8241c0d3cbd6cda014a990660fdd md5: 4336bd67920dd504cd8c6761d6a99645 @@ -4344,6 +4367,18 @@ packages: purls: [] size: 150272 timestamp: 1684262827894 +- conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.3-hecca717_0.conda + sha256: 53504e965499b4845ca3dc63d5905d5a1e686fcb9ab17e83c018efa479e787d0 + md5: 937ca49a245fcf2b88d51b6b52959426 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 161768 + timestamp: 1772712510770 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda sha256: b9f79954e6d37ad59016b434abfdd096a75ff08c6de14e5198bcea497a10fae5 md5: 6faf3cf8df25572c7f70138a45f37363 @@ -4354,17 +4389,17 @@ packages: purls: [] size: 116255 timestamp: 1684263271583 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b - md5: e83a31202d1c0a000fce3e9cf3825875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.3-hf6b4638_0.conda + sha256: 1009bd6c2bb26e41dada4015793a1edf44d1320c7ca14fc646f89b0b51236e20 + md5: 91f1daf22f72792e11382938bb0dd9ac depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/charset-normalizer?source=hash-mapping - size: 47438 - timestamp: 1735929811779 + - __osx >=11.0 + - libcxx >=19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 118790 + timestamp: 1772712898684 - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda sha256: 838d5a011f0e7422be6427becba3de743c78f3874ad2743c341accbba9bb2624 md5: 7e7d5ef1b9ed630e4a1c358d6bc62284 @@ -4376,6 +4411,17 @@ packages: - pkg:pypi/charset-normalizer?source=hash-mapping size: 51033 timestamp: 1754767444665 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 + md5: a9167b9571f3baa9d448faa2139d1089 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + size: 58872 + timestamp: 1775127203018 - conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.2-py312h66e93f0_0.conda sha256: 721dfa26074ae4a6526181845b4a91478188c8fd8d80584024c199689a284c9c md5: 9b06462fda3409cc954fc04077c96de1 @@ -4390,6 +4436,20 @@ packages: - pkg:pypi/ciso8601?source=hash-mapping size: 21597 timestamp: 1733868032557 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ciso8601-2.3.3-py312h5253ce2_1.conda + sha256: d99052fc454964b7eb386732f6801fff3a04e5514e3d7295e6805354eeab06e8 + md5: 3080031eae4c44f5f724628e710481a2 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ciso8601?source=hash-mapping + size: 24353 + timestamp: 1756691684825 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.2-py312hea69d52_0.conda sha256: b51fe7ae5a782d69b777edaac485a7cf395d4f4bfdc36c00e272498f6db87bcc md5: 21be5aa5ffd20117f269867aa7ef057c @@ -4404,18 +4464,20 @@ packages: - pkg:pypi/ciso8601?source=hash-mapping size: 20754 timestamp: 1733868183589 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab - md5: f22f4d4970e09d68a10b922cbb0408d3 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ciso8601-2.3.3-py314hf17b0b1_1.conda + sha256: a9f2eba648d6243e79518063ae3b01b61056106849133b91b98f05fbeb69bb7b + md5: cc1c0fa8c64618240b3126b59e983746 depends: - - __unix - - python >=3.9 - license: BSD-3-Clause - license_family: BSD + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT purls: - - pkg:pypi/click?source=hash-mapping - size: 84705 - timestamp: 1734858922844 + - pkg:pypi/ciso8601?source=hash-mapping + size: 26846 + timestamp: 1756691738851 - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda sha256: 8aee789c82d8fdd997840c952a586db63c6890b00e88c4fb6e80a38edd5f51c0 md5: 94b550b8d3a614dbd326af798c7dfb40 @@ -4428,18 +4490,19 @@ packages: - pkg:pypi/click?source=hash-mapping size: 87749 timestamp: 1747811451319 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda - sha256: e7e2371a2561fbda9d50deb895d56fb16ccefe54f6d81b35ba8f1d33d3cc6957 - md5: 82bea35e4dac4678ba623cf10e95e375 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda + sha256: 526d434cf5390310f40f34ea6ec4f0c225cdf1e419010e624d399b13b2059f0f + md5: 4d18bc3af7cfcea97bd817164672a08c depends: - - click >=3.0 - - python >=3.9 + - __unix + - python + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/click-plugins?source=hash-mapping - size: 12057 - timestamp: 1733731217399 + - pkg:pypi/click?source=compressed-mapping + size: 98253 + timestamp: 1775578217828 - conda: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda sha256: ba1ee6e2b2be3da41d70d0d51d1159010de900aa3f33fceaea8c52e9bd30a26e md5: e9b05deb91c013e5224672a4ba9cf8d1 @@ -4461,20 +4524,14 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/cligj?source=hash-mapping - size: 12521 - timestamp: 1733750069604 -- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - sha256: 21ecead7268241007bf65691610cd7314da68c1f88113092af690203b5780db5 - md5: 364ba6c9fb03886ac979b482f39ebb92 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cloudpickle?source=hash-mapping - size: 25870 - timestamp: 1736947650712 + - pkg:pypi/cligj?source=hash-mapping + size: 12521 + timestamp: 1733750069604 +- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + name: cloudpickle + version: 3.1.2 + sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 md5: 962b9857ee8e7018c22f2776ffa0b2d7 @@ -4486,58 +4543,46 @@ packages: - pkg:pypi/colorama?source=hash-mapping size: 27011 timestamp: 1733218222191 -- conda: https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda - sha256: 46055a0524ed3a48b23cd27a52246c89ac059ccce90a50b2eeb84d2f833ae827 - md5: 91d7152c744dc0f18ef8beb3cbc9980a +- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + sha256: 576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212 + md5: 2da13f2b299d8e1995bafbbe9689a2f7 depends: - python >=3.9 - license: CC-BY-4.0 - purls: - - pkg:pypi/colorcet?source=hash-mapping - size: 173950 - timestamp: 1734007415513 -- conda: https://conda.anaconda.org/conda-forge/noarch/compass-0.5.6-pyhd8ed1ab_0.conda - sha256: dbe0c5bb6716f5d951108b407d70643e9d931e21bb9754d6fe51140a077f7c8a - md5: 69a57e4669fc81e426d2168fe433ba30 - depends: - - gdal >=3.3 - - h5py >=3.5 - - isce3 >=0.14.0 - - numpy >=1.20 - - pandas >=1.4 - - pillow >=7.0 - - pyproj >=3.3 - - pysolid >=0.3 - - python >=3.9 - - requests >=2.0 - - ruamel.yaml >=0.15 - - s1reader >=0.2.0 - - scikit-image >=0.19 - - scipy >=1.0,<1.13 - - shapely >=1.8 - - yamale >=4.0 - license: Apache-2.0 - license_family: APACHE + - python + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/compass?source=hash-mapping - size: 871660 - timestamp: 1746276305372 -- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda - sha256: e977af50b844b5b8cfec358131a4e923f0aa718e8334321cf8d84f5093576259 - md5: f5fbba0394ee45e9a64a73c2a994126a + - pkg:pypi/comm?source=hash-mapping + size: 14690 + timestamp: 1753453984907 +- pypi: git+https://github.com/scottstanie/COMPASS.git?branch=develop-scott#18297ff1158720b44280b87a7c3ce9cd17d75a38 + name: compass + version: 0.5.6 + requires_dist: + - mkdocs ; extra == 'docs' + - mkdocs-gen-files ; extra == 'docs' + - mkdocs-literate-nav ; extra == 'docs' + - mkdocs-material ; extra == 'docs' + - mkdocs-section-index ; extra == 'docs' + - mkdocstrings[python] ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + sha256: 62447faf7e8eb691e407688c0b4b7c230de40d5ecf95bf301111b4d05c5be473 + md5: 43c2bc96af3ae5ed9e8a10ded942aa50 depends: + - numpy >=1.25 + - python - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.23 - - python >=3.12,<3.13.0a0 + - libstdcxx >=14 + - libgcc >=14 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/contourpy?source=hash-mapping - size: 276332 - timestamp: 1731428454756 + size: 320386 + timestamp: 1769155979897 - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312hd9148b4_1.conda sha256: d9cb7f97a184a383bf0c72e1fa83b983a1caa68d7564f4449a4de7c97df9cb3f md5: e25ed6c2e3b1effedfe9cd10a15ca8d8 @@ -4554,22 +4599,6 @@ packages: - pkg:pypi/contourpy?source=compressed-mapping size: 291827 timestamp: 1754063770363 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.1-py312hb23fbb9_0.conda - sha256: fa1f8505f45eac22f25c48cd46809da0d26bcb028c37517b3474bacddd029b0a - md5: f4408290387836e05ac267cd7ec80c5c - depends: - - __osx >=11.0 - - libcxx >=18 - - numpy >=1.23 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 245638 - timestamp: 1731428781337 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py312ha0dd364_1.conda sha256: a51a6f7f7e236cadc45790880dc0b7c91cf6a950277ffe839b689f072783a8d0 md5: e0b0bffaccf76ef33679dd2e5309442e @@ -4586,6 +4615,22 @@ packages: - pkg:pypi/contourpy?source=hash-mapping size: 257410 timestamp: 1754063952152 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + sha256: 754ab72f1c1ae99ef7c57995f59224dc9632cbd6731fe7e6277437fd01d43156 + md5: cddc851000ce131d757678c2f329eaad + depends: + - numpy >=1.25 + - python + - python 3.14.* *_cp314 + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 290405 + timestamp: 1769156069514 - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.10.3-py312h8a5da7c_0.conda sha256: 9e170e3cebebedd2e685aac8cab09f3ad7489c7f9de2d014c1d46e4b4270ab28 md5: 47633b6600c6ff2b4930b5b0b4704a53 @@ -4601,6 +4646,21 @@ packages: - pkg:pypi/coverage?source=hash-mapping size: 381000 timestamp: 1754910270194 +- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.5-py312h8a5da7c_0.conda + sha256: 9e88f91f85f0049686796fd25b20001bfbe9e4367714bb5d258849abcf54a705 + md5: c4d858e15305e70b255e756a4dc96e58 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tomli + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping + size: 387585 + timestamp: 1773761191371 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.10.3-py312h6daa0e5_0.conda sha256: 5395c4d622d56fbab9489136b7daf254d325fe2101bdb95f91c78dc88e0da2ad md5: 724b721d0f9a50826207779456d2c172 @@ -4616,34 +4676,65 @@ packages: - pkg:pypi/coverage?source=hash-mapping size: 380056 timestamp: 1754910268875 -- conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.7.1-py312h66e93f0_1.conda - sha256: de2f817228494f470d53ded033edbcd3b1a1eb19753c5ae4f125b14291933f6a - md5: ae67c01acdf1f9c80a2bdf674a9965e1 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.13.5-py314h6e9b3f0_0.conda + sha256: 808ebcb57027251f379f84e53a3755d2851918f78bdd512d131afe40ca64a041 + md5: cdbafe4a3e605024e7372c9580f9d734 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - tomli + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping + size: 412458 + timestamp: 1773761280047 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda + sha256: 57d1294ecfaf9dc8cdb5fc4be3e63ebc7614538bddb5de53cfd9b1b7de43aed5 + md5: cb15315d19b58bd9cd424084e58ad081 depends: - __glibc >=2.17,<3.0.a0 + - cuda-cudart_linux-64 12.9.79 h3f2d84a_0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: LGPL-2.1-or-later - license_family: LGPL - purls: - - pkg:pypi/crc32c?source=hash-mapping - size: 49935 - timestamp: 1741391665127 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/crc32c-2.7.1-py312hea69d52_1.conda - sha256: 01bc01776ed3678840bab56717c590570d0c2c25923e26ada827bcbcd62008ff - md5: 3cb6dcba8bd0cafa4a2af529a16979e3 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 23242 + timestamp: 1749218416505 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + sha256: 6cde0ace2b995b49d0db2eefb7bc30bf00ffc06bb98ef7113632dec8f8907475 + md5: 64508631775fbbf9eca83c84b1df0cae depends: - - __osx >=11.0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: LGPL-2.1-or-later - license_family: LGPL + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 197249 + timestamp: 1749218394213 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + sha256: 5f5f428031933f117ff9f7fcc650e6ea1b3fef5936cf84aa24af79167513b656 + md5: b6d5d7f1c171cbd228ea06b556cfa859 + constrains: + - cudatoolkit 12.9|12.9.* + - __cuda >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 21578 + timestamp: 1746134436166 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/crc32c?source=hash-mapping - size: 47887 - timestamp: 1741391809014 + - pkg:pypi/cycler?source=hash-mapping + size: 14778 + timestamp: 1764466758386 - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c md5: 44600c4667a319d67dbe0681fc0bc833 @@ -4655,6 +4746,22 @@ packages: - pkg:pypi/cycler?source=hash-mapping size: 13399 timestamp: 1733332563512 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 + md5: af491aae930edc096b58466c51c4126c + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 210103 + timestamp: 1771943128249 - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda sha256: ee09ad7610c12c7008262d713416d0b58bf365bc38584dce48950025850bdf3f md5: cae723309a49399d2949362f4ab5c9e4 @@ -4671,93 +4778,38 @@ packages: purls: [] size: 209774 timestamp: 1750239039316 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py312h66e93f0_0.conda - sha256: 63a64d4e71148c4efd8db17b4a19b8965990d1e08ed2e24b84bc36b6c166a705 - md5: 6198b134b1c08173f33653896974d477 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - toolz >=0.10.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cytoolz?source=hash-mapping - size: 394309 - timestamp: 1734107344014 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cytoolz-1.0.1-py312hea69d52_0.conda - sha256: 0df5e51c5598d5c098ac79c249f42f04bd6cb77969bc91a832c1ee763e40f55a - md5: e674d71e573746c29e99659a00391809 - depends: - - __osx >=11.0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - toolz >=0.10.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cytoolz?source=hash-mapping - size: 338844 - timestamp: 1734107464832 -- conda: https://conda.anaconda.org/conda-forge/noarch/dask-2025.7.0-pyhe01879c_0.conda - sha256: 03cf80a89674166ec5aabbc63dbe6a317f09e2b585ace2c1296ded91033d5f72 - md5: e764bbc4315343e806bc55d73d102335 - depends: - - python >=3.10 - - dask-core >=2025.7.0,<2025.7.1.0a0 - - distributed >=2025.7.0,<2025.7.1.0a0 - - cytoolz >=0.11.0 - - lz4 >=4.3.2 - - numpy >=1.24 - - pandas >=2.0 - - bokeh >=3.1.0 - - jinja2 >=2.10.3 - - pyarrow >=14.0.1 - - python - constrains: - - openssl !=1.1.1e - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 11522 - timestamp: 1752542237166 -- conda: https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda - sha256: 039130562a81522460f6638cabaca153798d865c24bb87781475e8fd5708d590 - md5: 3293644021329a96c606c3d95e180991 - depends: - - python >=3.10 - - click >=8.1 - - cloudpickle >=3.0.0 - - fsspec >=2021.9.0 - - packaging >=20.0 - - partd >=1.4.0 - - pyyaml >=5.3.1 - - toolz >=0.10.0 - - importlib-metadata >=4.13.0 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/dask?source=hash-mapping - size: 1058723 - timestamp: 1752524171028 -- conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.0-pyhd8ed1ab_1.conda - sha256: 8c2462b4ae71fd8e380dc96dbbd8a2b5e6943d4ca1b24dbe16f759ebd2178818 - md5: f008b2bd3dd6fa89d6beb5ad1d421d97 - depends: - - python >=3.9 - - python-dateutil - - pytz - - regex !=2019.02.19,!=2021.8.27 - - tzlocal - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/dateparser?source=hash-mapping - size: 173578 - timestamp: 1733285153408 +- pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + name: dask + version: 2026.3.0 + sha256: be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d + requires_dist: + - click>=8.1 + - cloudpickle>=3.0.0 + - fsspec>=2021.9.0 + - packaging>=20.0 + - partd>=1.4.0 + - pyyaml>=5.3.1 + - toolz>=0.12.0 + - importlib-metadata>=4.13.0 ; python_full_version < '3.12' + - numpy>=1.24 ; extra == 'array' + - dask[array] ; extra == 'dataframe' + - pandas>=2.0 ; extra == 'dataframe' + - pyarrow>=16.0 ; extra == 'dataframe' + - distributed>=2026.3.0,<2026.3.1 ; extra == 'distributed' + - bokeh>=3.1.0 ; extra == 'diagnostics' + - jinja2>=2.10.3 ; extra == 'diagnostics' + - dask[array,dataframe,diagnostics,distributed] ; extra == 'complete' + - pyarrow>=16.0 ; extra == 'complete' + - lz4>=4.3.2 ; extra == 'complete' + - pandas[test] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pre-commit ; extra == 'test' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.2.2-pyhd8ed1ab_0.conda sha256: 1af8502859dab5c953a7c248e83479619eba9a3385f5281c4a64f42fbfc861d8 md5: f7a7636abc623e0ef6128dcb153f4fe2 @@ -4773,6 +4825,21 @@ packages: - pkg:pypi/dateparser?source=hash-mapping size: 187828 timestamp: 1750962022198 +- conda: https://conda.anaconda.org/conda-forge/noarch/dateparser-1.4.0-pyhd8ed1ab_0.conda + sha256: 9ccdd848db68efc03afbf5fc67e92accc912c0b609a4f4ba54b720f0c27c41a2 + md5: 4d8650857be15983a33032bf18059787 + depends: + - python >=3.10 + - python-dateutil >=2.7.0 + - pytz >=2024.2 + - regex >=2024.9.11 + - tzlocal >=0.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/dateparser?source=hash-mapping + size: 180549 + timestamp: 1774525022824 - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 md5: 418c6ca5929a611cbd69204907a83995 @@ -4791,6 +4858,20 @@ packages: purls: [] size: 316394 timestamp: 1685695959391 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 + md5: ce96f2f470d39bd96ce03945af92e280 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 447649 + timestamp: 1764536047944 - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda sha256: 3b988146a50e165f0fa4e839545c679af88e4782ec284cc7b6d07dd226d6a068 md5: 679616eb5ad4e521c83da4650860aba7 @@ -4807,29 +4888,17 @@ packages: purls: [] size: 437860 timestamp: 1747855126005 -- conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.18-pyhd8ed1ab_0.conda - sha256: d614bcff10696f1efc714df07651b50bf3808401fcc03814309ecec242cc8870 - md5: 0cef44b1754ae4d6924ac0eef6b9fdbe +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 + md5: 9ce473d1d1be1cc3810856a48b3fab32 depends: - python >=3.9 - - wrapt <2,>=1.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/deprecated?source=hash-mapping - size: 14382 - timestamp: 1737987072859 -- conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - sha256: 0e160c21776bd881b79ce70053e59736f51036784fa43a50da10a04f0c1b9c45 - md5: 8d88f4a2242e6b96f9ecff9a6a05b2f1 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE + license: BSD-2-Clause + license_family: BSD purls: - - pkg:pypi/distlib?source=hash-mapping - size: 274151 - timestamp: 1733238487461 + - pkg:pypi/decorator?source=hash-mapping + size: 14129 + timestamp: 1740385067843 - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda sha256: 6d977f0b2fc24fee21a9554389ab83070db341af6d6f09285360b2e09ef8b26e md5: 003b8ba0a94e2f1e117d0bd46aebc901 @@ -4841,36 +4910,6 @@ packages: - pkg:pypi/distlib?source=hash-mapping size: 275642 timestamp: 1752823081585 -- conda: https://conda.anaconda.org/conda-forge/noarch/distributed-2025.7.0-pyhe01879c_0.conda - sha256: d8c43144fe7dd9d8496491a6bf60996ceb0bbe291e234542e586dba979967df8 - md5: b94b2b0dc755b7f1fd5d1984e46d932c - depends: - - python >=3.10 - - click >=8.0 - - cloudpickle >=3.0.0 - - cytoolz >=0.11.2 - - dask-core >=2025.7.0,<2025.7.1.0a0 - - jinja2 >=2.10.3 - - locket >=1.0.0 - - msgpack-python >=1.0.2 - - packaging >=20.0 - - psutil >=5.8.0 - - pyyaml >=5.4.1 - - sortedcontainers >=2.0.5 - - tblib >=1.6.0 - - toolz >=0.11.2 - - tornado >=6.2.0 - - urllib3 >=1.26.5 - - zict >=3.0.0 - - python - constrains: - - openssl !=1.1.1e - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/distributed?source=hash-mapping - size: 847541 - timestamp: 1752539128419 - conda: https://conda.anaconda.org/conda-forge/noarch/docstring_parser-0.17.0-pyhd8ed1ab_0.conda sha256: 3069a555097f084d3b7bc8f9efbb42f9907ecbfa24d310c63df9814a8df491af md5: ce49d3e5a7d20be2ba57a2c670bdd82e @@ -4882,44 +4921,61 @@ packages: - pkg:pypi/docstring-parser?source=hash-mapping size: 31742 timestamp: 1753195731224 -- conda: https://conda.anaconda.org/conda-forge/noarch/dolphin-0.41.0-pyhd8ed1ab_0.conda - sha256: 579348bf2bb295d0e6a7b3518046082de2237888e6bf025e4364a6496b725e12 - md5: 74c2601588c4fe5ea7a2ba68add3d212 - depends: - - gdal >=3.5 - - h5py >=3.6 - - hdf5 !=1.12.2 - - jax >=0.4.19 - - numba >=0.56 - - numpy >=1.23 - - opera-utils >=0.12.0 - - pydantic >=2.1 - - pyproj >=3.3 - - python >=3.10 - - rasterio >=1.3 - - ruamel.yaml >=0.15 - - scipy >=1.12 - - snaphu >=0.4.0 - - threadpoolctl >=3.0 - - tqdm >=4.60 - - tyro >=0.9.20,!=0.9.25 - license: BSD-3-Clause OR Apache-2.0 - purls: - - pkg:pypi/dolphin?source=hash-mapping - size: 163646 - timestamp: 1754998547099 -- conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda - sha256: d58e97d418f71703e822c422af5b9c431e3621a0ecdc8b0334c1ca33e076dfe7 - md5: c56a7fa5597ad78b62e1f5d21f7f8b8f - depends: - - python >=3.9 +- pypi: git+https://github.com/scottstanie/dolphin.git?branch=develop-scott#0e4df98990cfd6b6d7a34cd89ea624c8bf3bc053 + name: dolphin + version: 0.26.0.post1.dev318+g0e4df9899 + requires_dist: + - h5py>=3.6 + - jax>=0.4.19 + - numba>=0.56 + - numpy>=1.23 + - opera-utils>=0.4.1 + - pydantic>=2.1 + - pyproj>=3.3 + - rasterio>=1.3 + - ruamel-yaml>=0.15 + - scipy>=1.9 + - snaphu>=0.4.1 + - threadpoolctl>=3.0 + - tqdm>=4.60 + - tyro>=0.9.20 + - markdown ; extra == 'docs' + - mkdocs ; extra == 'docs' + - mkdocs-gen-files ; extra == 'docs' + - mkdocs-jupyter==0.25.0 ; extra == 'docs' + - mkdocs-literate-nav ; extra == 'docs' + - mkdocs-material ; extra == 'docs' + - mkdocs-section-index ; extra == 'docs' + - mkdocstrings[python] ; extra == 'docs' + - pybtex ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + - asv ; extra == 'test' + - black ; extra == 'test' + - boto3 ; extra == 'test' + - moto[s3,server] ; extra == 'test' + - pooch ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-randomly ; extra == 'test' + - pytest-xdist ; extra == 'test' + - shapely ; extra == 'test' + - snaphu>=0.4.1 ; extra == 'test' + - xarray ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + name: donfig + version: 0.8.1.post1 + sha256: 2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d + requires_dist: - pyyaml - license: MIT - license_family: MIT - purls: - - pkg:pypi/donfig?source=hash-mapping - size: 22491 - timestamp: 1734368817583 + - sphinx>=4.0.0 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pytest ; extra == 'docs' + - cloudpickle ; extra == 'docs' + - pytest ; extra == 'test' + - cloudpickle ; extra == 'test' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda sha256: 1bcc132fbcc13f9ad69da7aa87f60ea41de7ed4d09f3a00ff6e0e70e1c690bc2 md5: bfd56492d8346d669010eccafe0ba058 @@ -4932,6 +4988,18 @@ packages: purls: [] size: 69544 timestamp: 1739569648873 +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc + md5: dbe3ec0f120af456b3477743ffd99b74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71809 + timestamp: 1765193127016 - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda sha256: 2d721421a60676216e10837a240c75e2190e093920a4016a469fa9a62c95ab5f md5: 8681d7f876da5e66a1c7fce424509383 @@ -4945,16 +5013,19 @@ packages: - pkg:pypi/eval-type-backport?source=hash-mapping size: 11520 timestamp: 1734857840035 -- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 - md5: a16662747cdeb9abbac74d0057cc976e +- conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.3.1-pyha770c72_0.conda + sha256: 454f03ac61295b2bca852913af54248cfb9c1a9d2e057f3b5574d552255cda61 + md5: 9cb8eae2a1f3e4a2cb8c53559abf6d75 depends: - - python >=3.9 - license: MIT and PSF-2.0 + - python >=3.10 + constrains: + - eval-type-backport >=0.3.1,<0.3.2.0a0 + license: MIT + license_family: MIT purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 20486 - timestamp: 1733208916977 + - pkg:pypi/eval-type-backport?source=hash-mapping + size: 12244 + timestamp: 1764679328643 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca md5: 72e42d28960d875c7654614f8b50939a @@ -4966,6 +5037,17 @@ packages: - pkg:pypi/exceptiongroup?source=hash-mapping size: 21284 timestamp: 1746947398083 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab + depends: + - python >=3.10 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 21333 + timestamp: 1763918099466 - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda sha256: 9abc6c128cd40733e9b24284d0462e084d4aff6afe614f0754aa8533ebe505e4 md5: a71efeae2c160f6789900ba2631a2c90 @@ -4977,6 +5059,42 @@ packages: - pkg:pypi/execnet?source=hash-mapping size: 38835 timestamp: 1733231086305 +- conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda + sha256: 1acc6a420efc5b64c384c1f35f49129966f8a12c93b4bb2bdc30079e5dc9d8a8 + md5: a57b4be42619213a94f31d2c69c5dda7 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/execnet?source=hash-mapping + size: 39499 + timestamp: 1762974150770 +- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad + md5: ff9efb7f7469aed3c4a8106ffa29593c + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/executing?source=hash-mapping + size: 30753 + timestamp: 1756729456476 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_h3b011a4_112.conda + sha256: a564b8af44a113173c7d42ffe37a8d600e6ea21f6db87d252135ba07914a3d10 + md5: af1311c2d5e4bfc5cce2b86804c77972 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1925113 + timestamp: 1771754008607 - conda: https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda sha256: 3cc58c9d9a8cc0089e3839ae5ff7ba4ddfc6df99d5f6a147fe90ea963bc6fe45 md5: ee3e687b78b778db7b304e5b00a4dca6 @@ -5005,16 +5123,6 @@ packages: purls: [] size: 763281 timestamp: 1717758160882 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - sha256: de7b6d4c4f865609ae88db6fa03c8b7544c2452a1aa5451eb7700aad16824570 - md5: 4547b39256e296bb758166893e909a7c - depends: - - python >=3.9 - license: Unlicense - purls: - - pkg:pypi/filelock?source=compressed-mapping - size: 17887 - timestamp: 1741969612334 - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda sha256: 7a2497c775cc7da43b5e32fc5cf9f4e8301ca723f0eb7f808bbe01c6094a3693 md5: 9c418d067409452b2e87e0016257da68 @@ -5025,22 +5133,16 @@ packages: - pkg:pypi/filelock?source=compressed-mapping size: 18003 timestamp: 1755216353218 -- conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.19.5-pyhd8ed1ab_0.conda - sha256: 5536271960dbd1b030b7392ae9763d17c934f8aa09424d5e9fbba734771ad574 - md5: 4cb9e567a829a9083cc66eda88f2d330 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + sha256: dddea9ec53d5e179de82c24569d41198f98db93314f0adae6b15195085d5567f + md5: f58064cec97b12a7136ebb8a6f8a129b depends: - - branca >=0.6.0 - - jinja2 >=2.9 - - numpy - - python >=3.9 - - requests - - xyzservices - license: MIT - license_family: MIT + - python >=3.10 + license: Unlicense purls: - - pkg:pypi/folium?source=hash-mapping - size: 80606 - timestamp: 1740766728183 + - pkg:pypi/filelock?source=compressed-mapping + size: 25845 + timestamp: 1773314012590 - conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda sha256: 782fa186d7677fd3bc1ff7adb4cc3585f7d2c7177c30bcbce21f8c177135c520 md5: a6997a7dcd6673c0692c61dfeaea14ab @@ -5104,6 +5206,22 @@ packages: purls: [] size: 265599 timestamp: 1730283881107 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c + md5: 867127763fbe935bab59815b6e0b7b5c + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 270705 + timestamp: 1771382710863 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 md5: fee5683a3f04bd15cbd8318b096a27ab @@ -5127,23 +5245,19 @@ packages: purls: [] size: 4102 timestamp: 1566932280397 -- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.57.0-py312h178313f_0.conda - sha256: 3d230ff0d9e9fc482de22b807adf017736bd6d19b932eea68d68eeb52b139e04 - md5: 97907388593b27ac01237a1023d58d3d +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 depends: - - __glibc >=2.17,<3.0.a0 - - brotli - - libgcc >=13 - - munkres - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - unicodedata2 >=15.1.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/fonttools?source=compressed-mapping - size: 2842050 - timestamp: 1743732552050 + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4059 + timestamp: 1762351264405 - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.59.0-py312h8a5da7c_0.conda sha256: ead830a4d12f26066f09b6ea54fb5c9e26a548c901063381412636db92cf7f61 md5: 008d44a468c24a59d2e67c014fba8f12 @@ -5161,40 +5275,39 @@ packages: - pkg:pypi/fonttools?source=hash-mapping size: 2854951 timestamp: 1752723143 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.56.0-py312h998013c_0.conda - sha256: 6b003a5100ec58e1bd456bf55d0727606f7b067628aed1a7c5d8cf4f0174bfc5 - md5: a5cf7d0629863be81d90054882de908c +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda + sha256: 777c80a1aa0889e6b637631c31f95d0b048848c5ba710f89ed7cedd3ad318227 + md5: 526f7ffd63820e55d7992cc1cf931a36 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 - brotli + - libgcc >=14 - munkres - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 - unicodedata2 >=15.1.0 license: MIT license_family: MIT purls: - pkg:pypi/fonttools?source=hash-mapping - size: 2753059 - timestamp: 1738940607300 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.57.0-py312h998013c_0.conda - sha256: ff8b4b5b461d7e1e4444aff3cf06f160f6f1b2ab44e4d010de8b128324a125b3 - md5: 657512bc3ceb378aa59a5b5f5d7d1fe4 + size: 2935817 + timestamp: 1773137546716 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + sha256: ed4462f6e49b8dea4e45f7294cca576a38cf4fc41e04bbcd95f9cf55be7776b9 + md5: 049f68f9c90f00069c748cd6fb7bfb55 depends: - - __osx >=11.0 - brotli - munkres - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 + - python >=3.10 - unicodedata2 >=15.1.0 + track_features: + - fonttools_no_compile license: MIT license_family: MIT purls: - pkg:pypi/fonttools?source=compressed-mapping - size: 2733512 - timestamp: 1743732533022 + size: 837910 + timestamp: 1773137210630 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.59.0-py312h6daa0e5_0.conda sha256: fb5dabc7db09891e611723622c762f625f287fc54d1f914497baf95b713513c3 md5: 0fed8437f0bd51c23d4caa1a61fe7b3b @@ -5224,16 +5337,16 @@ packages: purls: [] size: 639682 timestamp: 1741863789964 -- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda - sha256: 7ef7d477c43c12a5b4cddcf048a83277414512d1116aba62ebadfa7056a7d84f - md5: 9ccd736d31e0c6e41f54e704e5312811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + sha256: c934c385889c7836f034039b43b05ccfa98f53c900db03d8411189892ced090b + md5: 8462b5322567212beeb025f3519fb3e2 depends: - - libfreetype 2.13.3 ha770c72_1 - - libfreetype6 2.13.3 h48d6fc4_1 + - libfreetype 2.14.3 ha770c72_0 + - libfreetype6 2.14.3 h73754d4_0 license: GPL-2.0-only OR FTL purls: [] - size: 172450 - timestamp: 1745369996765 + size: 173839 + timestamp: 1774298173462 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-h1d14073_0.conda sha256: 2c273de32431c431a118a8cd33afb6efc616ddbbab9e5ba0fe31e3b4d1ff57a3 md5: 630445a505ea6e59f55714853d8c9ed0 @@ -5245,16 +5358,16 @@ packages: purls: [] size: 590002 timestamp: 1741863913870 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-hce30654_1.conda - sha256: 6b63c72ea51a41d41964841404564c0729fdddd3e952e2715839fd759b7cfdfc - md5: e684de4644067f1956a580097502bf03 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_0.conda + sha256: 5952bd9db12207a18a112e8924aa2ce8c2f9d57b62584d58a97d2f6afe1ea324 + md5: 6dcc75ba2e04c555e881b72793d3282f depends: - - libfreetype 2.13.3 hce30654_1 - - libfreetype6 2.13.3 h1d14073_1 + - libfreetype 2.14.3 hce30654_0 + - libfreetype6 2.14.3 hdfa99f5_0 license: GPL-2.0-only OR FTL purls: [] - size: 172220 - timestamp: 1745370149658 + size: 173313 + timestamp: 1774298702053 - conda: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda sha256: c8960e00a6db69b85c16c693ce05484facf20f1a80430552145f652a880e0d2a md5: ecb5d11305b8ba1801543002e69d2f2f @@ -5297,6 +5410,19 @@ packages: - pkg:pypi/frozenlist?source=hash-mapping size: 55037 timestamp: 1752167383781 +- conda: https://conda.anaconda.org/conda-forge/noarch/frozenlist-1.7.0-pyhf298e5d_0.conda + sha256: d065c6c76ba07c148b07102f89fd14e39e4f0b2c022ad671bbef8fda9431ba1b + md5: 3998c9592e3db2f6809e4585280415f4 + depends: + - python >=3.9 + track_features: + - frozenlist_no_compile + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/frozenlist?source=hash-mapping + size: 18952 + timestamp: 1752167260183 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.7.0-py312h512c567_0.conda sha256: 690af95d69d97b6e1ffead1edd413ca0f8b9189fb867b6bd8fd351f8ad509043 md5: 9f016ae66f8ef7195561dbf7ce0e5944 @@ -5312,39 +5438,114 @@ packages: - pkg:pypi/frozenlist?source=hash-mapping size: 52265 timestamp: 1752167495152 -- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.0-pyhd8ed1ab_0.conda - sha256: 9cbba3b36d1e91e4806ba15141936872d44d20a4d1e3bb74f4aea0ebeb01b205 - md5: 5ecafd654e33d1f2ecac5ec97057593b - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/fsspec?source=hash-mapping - size: 141329 - timestamp: 1741404114588 -- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 - md5: 9c40692c3d24c7aaf335f673ac09d308 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/fsspec?source=compressed-mapping - size: 142117 - timestamp: 1743437355974 -- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda - sha256: f734d98cd046392fbd9872df89ac043d72ac15f6a2529f129d912e28ab44609c - md5: a31ce802cd0ebfce298f342c02757019 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/fsspec?source=hash-mapping - size: 145357 - timestamp: 1752608821935 +- pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + name: fsspec + version: 2026.3.0 + sha256: d2ceafaad1b3457968ed14efa28798162f1638dbb5d2a6868a2db002a5ee39a4 + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pre-commit ; extra == 'dev' + - ruff>=0.5 ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs>2024.2.0 ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs>2024.2.0 ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs>2024.2.0 ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs>2024.2.0 ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - backports-zstd ; python_full_version < '3.14' and extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas<3.0.0 ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr ; extra == 'test-full' + - zstandard ; python_full_version < '3.14' and extra == 'test-full' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py312hf50df08_12.conda sha256: c860506b4ef13f6e62f72d8c70ff4b9c4e7cf569922277bc6af1a88090a8f722 md5: 1fde0e8872364f83298f22133ba83ca3 @@ -5362,6 +5563,22 @@ packages: - pkg:pypi/gdal?source=hash-mapping size: 1783267 timestamp: 1753385675648 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.12.3-py312h5fc20e3_4.conda + sha256: eee1497ba4ef06e3a99caed392aac529442364523778d89f09896cff2a4790a1 + md5: 977eac80a6c290fe0e4f687fc8d19d00 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgdal-core 3.12.3.* + - libstdcxx >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + purls: + - pkg:pypi/gdal?source=hash-mapping + size: 1879373 + timestamp: 1775928739497 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.3-py312h93ff630_12.conda sha256: f0f881639c081bc70d71f4542f1af4881e5288207581eab626ffbd5b898b2632 md5: 54502c82a7ce753ec84b32610cac7cf2 @@ -5379,29 +5596,28 @@ packages: - pkg:pypi/gdal?source=hash-mapping size: 1717926 timestamp: 1753385737739 -- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.0.1-pyhd8ed1ab_3.conda - sha256: 04f7e616ebbf6352ff852b53c57901e43f14e2b3c92411f99b5547f106bc192e - md5: 1baca589eb35814a392eaad6d152447e +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.12.3-py314h0ed7ee7_4.conda + sha256: 1311e936e4ba04555cebe5237c163cdbc721d2f2e323cedfe4b797508f020072 + md5: 3c814c93d3d0e9f78ea17a93c75386f0 depends: - - folium - - geopandas-base 1.0.1 pyha770c72_3 - - mapclassify >=2.4.0 - - matplotlib-base - - pyogrio >=0.7.2 - - pyproj >=3.3.0 - - python >=3.9 - - xyzservices - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 7583 - timestamp: 1734346218849 -- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_0.conda - sha256: c296e9cf96d42f5402518065d7dd23cd3fb7179879effd914d066df916ce4070 - md5: 7f6eb8d806480c0f7273c448d45a0ef6 + - __osx >=11.0 + - libcxx >=19 + - libgdal-core 3.12.3.* + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + purls: + - pkg:pypi/gdal?source=hash-mapping + size: 1839648 + timestamp: 1775929836310 +- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.3-pyhd8ed1ab_0.conda + sha256: c9ed18fb6270202299671f8075dd4f2fdff42220e4fd958e84629375769747f0 + md5: 4eb8b870142ca06d2a1d2c74662eac7d depends: - folium - - geopandas-base 1.1.1 pyha770c72_0 + - geopandas-base 1.1.3 pyha770c72_0 - mapclassify >=2.5.0 - matplotlib-base - pyogrio >=0.7.2 @@ -5411,26 +5627,11 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 8044 - timestamp: 1751003353593 -- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.0.1-pyha770c72_3.conda - sha256: 2d031871b57c6d4e5e2d6cc23bd6d4e0084bb52ebca5c1b20bf06d03749e0f24 - md5: e8343d1b635bf09dafdd362d7357f395 - depends: - - numpy >=1.22 - - packaging - - pandas >=1.4.0 - - python >=3.9 - - shapely >=2.0.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/geopandas?source=hash-mapping - size: 239261 - timestamp: 1734346217454 -- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_0.conda - sha256: c6195500934234f0c52763e00cf8ffb79bcf34f248fa6c4af848379fe8436479 - md5: 8094c45b21a26cddd6354401eddc2567 + size: 8761 + timestamp: 1773131235020 +- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.3-pyha770c72_0.conda + sha256: b07fc3edb5cb86df52081e5cb120a03a178767ed079b5d2cd313212351460620 + md5: 18789a85c307970ae1786dfc6dfd234f depends: - numpy >=1.24 - packaging @@ -5441,8 +5642,8 @@ packages: license_family: BSD purls: - pkg:pypi/geopandas?source=hash-mapping - size: 250432 - timestamp: 1751003352592 + size: 254983 + timestamp: 1773131233972 - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda sha256: 3a9c854fa8cf1165015b6ee994d003c3d6a8b0f532ca22b6b29cd6e8d03942ed md5: 5bc18c66111bc94532b0d2df00731c66 @@ -5454,6 +5655,17 @@ packages: purls: [] size: 1871567 timestamp: 1741051481612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda + sha256: 08896dcd94e14a83f247e91748444e610f344ab42d80cbf2b6082b481c3f8f4b + md5: 4d4efd0645cd556fab54617c4ad477ef + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.1-only + purls: [] + size: 1974942 + timestamp: 1761593471198 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.1-hc9a1286_0.conda sha256: b3f116968699ef72271f608a8ef2794b609e9a3cecbd5c178d8ccb797be709d6 md5: 3528352bdf54e8b11eca0eb97daf7d55 @@ -5464,6 +5676,16 @@ packages: purls: [] size: 1470335 timestamp: 1741051878236 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda + sha256: 1ac5f5a3a35f2e4778025043c87993208d336e30539406e380e0952bb7ffd188 + md5: 4238412c29eff0bb2bb5c60a720c035a + depends: + - __osx >=11.0 + - libcxx >=19 + license: LGPL-2.1-only + purls: [] + size: 1530844 + timestamp: 1761594597236 - conda: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda sha256: 0cd4454921ac0dfbf9d092d7383ba9717e223f9e506bc1ac862c99f98d2a953c md5: b0c42bce162a38b1aa2f6dfb5c412bc4 @@ -5497,29 +5719,6 @@ packages: purls: [] size: 113025 timestamp: 1742402688792 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a - md5: d411fc29e338efb48c5fd4576d71d881 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 119654 - timestamp: 1726600001928 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 - md5: 57a511a5905caa37540eb914dfcbf1fb - depends: - - __osx >=11.0 - - libcxx >=17 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 82090 - timestamp: 1726600145480 - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff md5: 3bf7b9fd5a7136126e0234db4b87c8b6 @@ -5538,64 +5737,21 @@ packages: purls: [] size: 71613 timestamp: 1712692611426 -- conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.49.0-pl5321hc2ff736_2.conda - sha256: a92f89cf83b2010b2201df780f6db93595557faeefcb8f89b90cc2a75368f5b2 - md5: 79af03347d91a390ed07a0d76a35a047 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.14.1,<9.0a0 - - libexpat >=2.7.0,<3.0a0 - - libgcc >=13 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - - pcre2 >=10.45,<10.46.0a0 - - perl 5.* - license: GPL-2.0-or-later and LGPL-2.1-or-later - purls: [] - size: 11114939 - timestamp: 1751299061504 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.49.0-pl5321ha659579_2.conda - sha256: 001e31db2e69bdfdf716c0d0d401f4b7e362b4bcb88e343fc591ef61855478e4 - md5: 1da495d68b24e3b23f32d6404cc4433a - depends: - - __osx >=11.0 - - libcurl >=8.14.1,<9.0a0 - - libexpat >=2.7.0,<3.0a0 - - libiconv >=1.18,<2.0a0 - - libintl >=0.24.1,<1.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - - pcre2 >=10.45,<10.46.0a0 - - perl 5.* - license: GPL-2.0-or-later and LGPL-2.1-or-later - purls: [] - size: 11705021 - timestamp: 1751299276656 -- conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 - md5: ff862eebdfeb2fd048ae9dc92510baca - depends: - - gflags >=2.2.2,<2.3.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 143452 - timestamp: 1718284177264 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 - md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 - depends: - - __osx >=11.0 - - gflags >=2.2.2,<2.3.0a0 - - libcxx >=16 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 112215 - timestamp: 1718284365403 +- pypi: https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl + name: google-crc32c + version: 1.8.0 + sha256: e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + name: google-crc32c + version: 1.8.0 + sha256: 14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl + name: google-crc32c + version: 1.8.0 + sha256: 4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c md5: 2cd94587f3a401ae05e03a6caf09539d @@ -5622,6 +5778,20 @@ packages: purls: [] size: 413729 timestamp: 1738979105602 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.17.0-h84d6215_1.conda + sha256: 1f738280f245863c5ac78bcc04bb57266357acda45661c4aa25823030c6fb5db + md5: 55e29b72a71339bc651f9975492db71f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - gmock 1.17.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 416610 + timestamp: 1748320117187 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.16.0-ha393de7_0.conda sha256: 9b4d7dcde19d0034a7e11d7a7e7acf61cc6289eb3481e47c0df8098969fbe5cc md5: acf7a061dd9c54af21fa1ee9dd81713e @@ -5648,19 +5818,35 @@ packages: - pkg:pypi/h2?source=hash-mapping size: 53888 timestamp: 1738578623567 -- conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.6.4-pyhd8ed1ab_0.conda - sha256: aa4667d8a96afdbacafcf4178749f78f3b061e8c149208b45486e7ecaecdef32 - md5: 69bee100efb4f22b0072e5c806223609 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 depends: - - h5py - - packaging - - python >=3.9 - license: BSD-3-Clause - license_family: BSD + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python + license: MIT + license_family: MIT purls: - - pkg:pypi/h5netcdf?source=hash-mapping - size: 48412 - timestamp: 1754419452298 + - pkg:pypi/h2?source=hash-mapping + size: 95967 + timestamp: 1756364871835 +- pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + name: h5netcdf + version: 1.8.1 + sha256: a76ed7cfc9b8a8908ea7057c4e57e27307acff1049b7f5ed52db6c2247636879 + requires_dist: + - packaging + - numpy + - h5py ; extra == 'h5py' + - pyfive>=1.0.0 ; extra == 'pyfive' + - h5pyd ; extra == 'h5pyd' + - h5py ; extra == 'test' + - netcdf4 ; extra == 'test' + - pyfive>=1.0.0 ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py312hedeef09_100.conda sha256: 76bb853325f0c756599edb0be014723b01fea61e24817fd2f0b9ddfe4c570c0f md5: ed73cf6f5e1ce5e823e6efcf54cbdc51 @@ -5678,6 +5864,23 @@ packages: - pkg:pypi/h5py?source=hash-mapping size: 1388165 timestamp: 1739952623855 +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha4f8f14_102.conda + sha256: de9ec9b1b01b90f2da2d896a5835a2fd8049859aff0c6331ca4594327ec79a8b + md5: b270340809d19ae40ff9913f277b803a + depends: + - __glibc >=2.17,<3.0.a0 + - cached-property + - hdf5 >=1.14.6,<1.14.7.0a0 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1335314 + timestamp: 1775581269364 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.13.0-nompi_py312hd7c5113_100.conda sha256: 1cfd7bd567c2d8cd4c532f88c342f9346867ef52dab9d65ec1089c90eb94b6e4 md5: 227b0c53bc3d4131996bf7de479fe185 @@ -5695,27 +5898,23 @@ packages: - pkg:pypi/h5py?source=hash-mapping size: 1237897 timestamp: 1739953225445 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.2.1-h3beb420_0.conda - sha256: 5bd0f3674808862838d6e2efc0b3075e561c34309c5c2f4c976f7f1f57c91112 - md5: 0e6e192d4b3d95708ad192d957cf3163 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda + sha256: 0762ed080bf45ca475da96796a8883a6c719603c44fa9b07a5883785649a4a0f + md5: ab9a6c652fd25407c9cf67b9b6b87496 depends: - - __glibc >=2.17,<3.0.a0 - - cairo >=1.18.4,<2.0a0 - - freetype - - graphite2 - - icu >=75.1,<76.0a0 - - libexpat >=2.7.0,<3.0a0 - - libfreetype >=2.13.3 - - libfreetype6 >=2.13.3 - - libgcc >=13 - - libglib >=2.84.1,<3.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1730226 - timestamp: 1747091044218 + - __osx >=11.0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1203956 + timestamp: 1775583125726 - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.4.1-h15599e2_0.conda sha256: b43e4f3c70eca82d733eb26bb8f031552f30fa4fb24c9455555a8a1baba6e1cc md5: 7da3b5c281ded5bb6a634e1fe7d3272f @@ -5736,6 +5935,26 @@ packages: purls: [] size: 2435782 timestamp: 1755172296497 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.1.0-h6083320_0.conda + sha256: 22c4f6df7eb4684a4b60e62de84211e7d80a0df2d7cfdbbd093a73650e3f2d45 + md5: ca8a94b613db5d805c3d2498a7c30997 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.7.5,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2338203 + timestamp: 1775569314754 - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda sha256: 0d09b6dc1ce5c4005ae1c6a19dc10767932ef9a5e9c755cfdbb5189ac8fb0684 md5: bd77f8da987968ec3927990495dc22e4 @@ -5779,6 +5998,24 @@ packages: purls: [] size: 3930078 timestamp: 1737516601132 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h19486de_108.conda + sha256: 795c3a34643aa766450b8363b8c5dd6e65ad40e5cc64d138c3678d05068a380a + md5: cbb2d15a6e9aeb85f18f1a8f01c29b81 + depends: + - __glibc >=2.17,<3.0.a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.19.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3719931 + timestamp: 1774406907641 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_ha698983_109.conda sha256: daba95bd449b77c8d092458f8561d79ef96f790b505c69c17f5425c16ee16eca md5: be8bf1f5aabe7b5486ccfe5a3cc8bbfe @@ -5796,6 +6033,29 @@ packages: purls: [] size: 3483256 timestamp: 1737516321575 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hc95e3eb_104.conda + sha256: 5b96accf983be97718fbfaddd6706591d7ef6511b4ccdac8a09f6b9899d1b284 + md5: e5390fd4a3b964a3ed619480df918294 + depends: + - __osx >=11.0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.12,<0.10.13.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.11.5,<0.11.6.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.19.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3418702 + timestamp: 1775244340092 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba md5: 0a802cb9888dd14eeefc611f05c40b6e @@ -5830,6 +6090,18 @@ packages: purls: [] size: 12129203 timestamp: 1720853576813 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a + md5: c80d8a3b84358cb967fa81e7075fbc8a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 12723451 + timestamp: 1773822285671 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 md5: 5eb22c1d7b3fc4abb50d92d621583137 @@ -5840,6 +6112,16 @@ packages: purls: [] size: 11857802 timestamp: 1720853997952 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 12361647 + timestamp: 1773822915649 - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.13-pyhd8ed1ab_0.conda sha256: 7183512c24050c541d332016c1dd0f2337288faf30afc42d60981a49966059f7 md5: 52083ce9103ec11c8130ce18517d3e83 @@ -5852,119 +6134,40 @@ packages: - pkg:pypi/identify?source=hash-mapping size: 79080 timestamp: 1754777609249 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda - sha256: b74a2ffa7be9278d7b8770b6870c360747149c683865e63476b0e1db23038429 - md5: 542f45bf054c6b9cf8d00a3b1976f945 +- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.18-pyhd8ed1ab_0.conda + sha256: 3bae1b612ccc71e49c5795a369a82c4707ae6fd4e63360e8ecc129f9539f779b + md5: 635d1a924e1c55416fce044ed96144a2 depends: - - python >=3.9 + - python >=3.10 - ukkonen license: MIT - license_family: MIT - purls: - - pkg:pypi/identify?source=hash-mapping - size: 78600 - timestamp: 1741502780749 -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 - md5: 39a4f67be3286c86d696df570b1201b7 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/idna?source=hash-mapping - size: 49765 - timestamp: 1733211921194 -- conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2024.12.30-py312h097a544_0.conda - sha256: cbbb519ee4e52dbb6e23c192449831a23131d1b6210af2914538ad085ee15ce9 - md5: 0801fcea9eeff5c42a47968b0e01cbd5 - depends: - - __glibc >=2.17,<3.0.a0 - - blosc >=1.21.6,<2.0a0 - - brunsli >=0.1,<1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.15.2,<2.16.0a0 - - charls >=2.4.2,<2.5.0a0 - - giflib >=5.2.2,<5.3.0a0 - - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.16,<3.0a0 - - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.3,<2.0a0 - - libavif16 >=1.1.1,<2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libdeflate >=1.23,<1.24.0a0 - - libgcc >=13 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libjxl >=0.11,<0.12.0a0 - - liblzma >=5.6.3,<6.0a0 - - libpng >=1.6.45,<1.7.0a0 - - libstdcxx >=13 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - libzopfli >=1.0.3,<1.1.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - numpy >=1.19,<3 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - snappy >=1.2.1,<1.3.0a0 - - zfp >=1.0.1,<2.0a0 - - zlib-ng >=2.2.3,<2.3.0a0 - - zstd >=1.5.6,<1.6.0a0 + license_family: MIT + purls: + - pkg:pypi/identify?source=hash-mapping + size: 79749 + timestamp: 1774239544252 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 + md5: 39a4f67be3286c86d696df570b1201b7 + depends: + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/imagecodecs?source=hash-mapping - size: 2086243 - timestamp: 1736603645437 -- conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.3.30-py312hc3cc4c5_1.conda - sha256: 2aadb5077774ba6cd031bc8fea101dcd8f3d0f8b7cdf5ed2c253249f2702d91f - md5: 2c99bd90565819ad58fc89dee8a87e32 + - pkg:pypi/idna?source=hash-mapping + size: 49765 + timestamp: 1733211921194 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 + md5: 53abe63df7e10a6ba605dc5f9f961d36 depends: - - __glibc >=2.17,<3.0.a0 - - blosc >=1.21.6,<2.0a0 - - brunsli >=0.1,<1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.18.0,<2.19.0a0 - - charls >=2.4.2,<2.5.0a0 - - giflib >=5.2.2,<5.3.0a0 - - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.17,<3.0a0 - - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.3,<2.0a0 - - libavif16 >=1.3.0,<2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libdeflate >=1.24,<1.25.0a0 - - libgcc >=13 - - libjpeg-turbo >=3.1.0,<4.0a0 - - libjxl >=0.11,<0.12.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.47,<1.7.0a0 - - libstdcxx >=13 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - libzopfli >=1.0.3,<1.1.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - numpy >=1.23,<3 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - snappy >=1.2.1,<1.3.0a0 - - zfp >=1.0.1,<2.0a0 - - zlib-ng >=2.2.4,<2.3.0a0 - - zstd >=1.5.7,<1.6.0a0 + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/imagecodecs?source=hash-mapping - size: 1942970 - timestamp: 1749919745210 + - pkg:pypi/idna?source=hash-mapping + size: 50721 + timestamp: 1760286526795 - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2025.8.2-py312h76e1a71_1.conda sha256: fc9bd8aa075a0f0795a096364636a770a2e38bf7f325abd6b3d69e904e9ae159 md5: c69fd474794f978083dc7da00e3bb73c @@ -6010,78 +6213,79 @@ packages: - pkg:pypi/imagecodecs?source=hash-mapping size: 1933879 timestamp: 1755050920423 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2024.12.30-py312h8857d0e_0.conda - sha256: b4a9c2683737a677f380a1e00fac9031f5e42a05a3ff6c591cafd99d75aa0400 - md5: 4cdc06435567bdcee858144892147524 +- conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2026.3.6-py312h40df4bb_1.conda + sha256: 412f3a5e6da358505a3014d8f2bc7be648b7fcced4ccc92b3d061e960a2e4215 + md5: 6350061e5007b0c030810705a491cf2e depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 - blosc >=1.21.6,<2.0a0 - brunsli >=0.1,<1.0a0 - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.15.2,<2.16.0a0 - - charls >=2.4.2,<2.5.0a0 + - c-blosc2 >=2.23.1,<2.24.0a0 + - charls >=2.4.3,<2.5.0a0 - giflib >=5.2.2,<5.3.0a0 - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.16,<3.0a0 + - lcms2 >=2.18,<3.0a0 - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.3,<2.0a0 - - libavif16 >=1.1.1,<2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=18 - - libdeflate >=1.23,<1.24.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libjxl >=0.11,<0.12.0a0 - - liblzma >=5.6.3,<6.0a0 - - libpng >=1.6.45,<1.7.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 + - libaec >=1.1.5,<2.0a0 + - libavif16 >=1.4.0,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - libzopfli >=1.0.3,<1.1.0a0 - lz4-c >=1.10.0,<1.11.0a0 - - numpy >=1.19,<3 - - openjpeg >=2.5.3,<3.0a0 + - numpy >=1.23,<3 + - openjpeg >=2.5.4,<3.0a0 + - openjph >=0.26.3,<0.27.0a0 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 - - snappy >=1.2.1,<1.3.0a0 + - snappy >=1.2.2,<1.3.0a0 - zfp >=1.0.1,<2.0a0 - - zlib-ng >=2.2.3,<2.3.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/imagecodecs?source=hash-mapping - size: 1900624 - timestamp: 1736603722680 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.3.30-py312h77b8b70_1.conda - sha256: 514941e838a3302bae58b77e4504ae8da9078879fae0e74be39ee27c82abfe7d - md5: 54a00b9a593085d14407c516e713d217 + size: 2075890 + timestamp: 1772886186047 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.8.2-py312hd676ae3_1.conda + sha256: 6317f53bd28f694caa1da7702627c7e5a2afcb6c73c43f896f5c2e5987ce26d3 + md5: 1e3d0aa51222ab1869cc4775723d734f depends: - __osx >=11.0 - blosc >=1.21.6,<2.0a0 - brunsli >=0.1,<1.0a0 - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.18.0,<2.19.0a0 + - c-blosc2 >=2.20.0,<2.21.0a0 - charls >=2.4.2,<2.5.0a0 - giflib >=5.2.2,<5.3.0a0 - jxrlib >=1.1,<1.2.0a0 - lcms2 >=2.17,<3.0a0 - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.3,<2.0a0 + - libaec >=1.1.4,<2.0a0 - libavif16 >=1.3.0,<2.0a0 - libbrotlicommon >=1.1.0,<1.2.0a0 - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=18 + - libcxx >=19 - libdeflate >=1.24,<1.25.0a0 - libjpeg-turbo >=3.1.0,<4.0a0 - libjxl >=0.11,<0.12.0a0 - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.47,<1.7.0a0 + - libpng >=1.6.50,<1.7.0a0 - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - libzopfli >=1.0.3,<1.1.0a0 - lz4-c >=1.10.0,<1.11.0a0 @@ -6090,61 +6294,62 @@ packages: - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 - - snappy >=1.2.1,<1.3.0a0 + - snappy >=1.2.2,<1.3.0a0 - zfp >=1.0.1,<2.0a0 - - zlib-ng >=2.2.4,<2.3.0a0 + - zlib-ng >=2.2.5,<2.3.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/imagecodecs?source=hash-mapping - size: 1680314 - timestamp: 1749919895905 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2025.8.2-py312hd676ae3_1.conda - sha256: 6317f53bd28f694caa1da7702627c7e5a2afcb6c73c43f896f5c2e5987ce26d3 - md5: 1e3d0aa51222ab1869cc4775723d734f + size: 1659232 + timestamp: 1755051352117 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2026.3.6-py314hef3eda1_1.conda + sha256: cd250dc4575c5cee4b11b5e4d0d98c38806a01dd627ac5b57edb8206d0f135a1 + md5: b6ea4bf5f5d3171158b3892a9518f402 depends: - __osx >=11.0 - blosc >=1.21.6,<2.0a0 - brunsli >=0.1,<1.0a0 - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.20.0,<2.21.0a0 - - charls >=2.4.2,<2.5.0a0 + - c-blosc2 >=2.23.1,<2.24.0a0 + - charls >=2.4.3,<2.5.0a0 - giflib >=5.2.2,<5.3.0a0 - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.17,<3.0a0 + - lcms2 >=2.18,<3.0a0 - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.4,<2.0a0 - - libavif16 >=1.3.0,<2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 + - libaec >=1.1.5,<2.0a0 + - libavif16 >=1.4.0,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 - libcxx >=19 - - libdeflate >=1.24,<1.25.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - libjxl >=0.11,<0.12.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.50,<1.7.0a0 - - libtiff >=4.7.0,<4.8.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 - libwebp-base >=1.6.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - libzopfli >=1.0.3,<1.1.0a0 - lz4-c >=1.10.0,<1.11.0a0 - numpy >=1.23,<3 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 + - openjpeg >=2.5.4,<3.0a0 + - openjph >=0.26.3,<0.27.0a0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 - snappy >=1.2.2,<1.3.0a0 - zfp >=1.0.1,<2.0a0 - - zlib-ng >=2.2.5,<2.3.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/imagecodecs?source=hash-mapping - size: 1659232 - timestamp: 1755051352117 + size: 1652123 + timestamp: 1772886553647 - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe md5: b5577bc2212219566578fd5af9993af6 @@ -6158,18 +6363,11 @@ packages: - pkg:pypi/imageio?source=hash-mapping size: 293226 timestamp: 1738273949742 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 - md5: f4b39bf00c69f56ac01e020ebfac066c - depends: - - python >=3.9 - - zipp >=0.5 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/importlib-metadata?source=compressed-mapping - size: 29141 - timestamp: 1737420302391 +- pypi: https://files.pythonhosted.org/packages/a3/ce/f9018bf69ae91b273b6391a095e7c93fa5e1617f25b6ba81ad4b20c9df10/immutabledict-4.3.1-py3-none-any.whl + name: immutabledict + version: 4.3.1 + sha256: c9facdc0ff30fdb8e35bd16532026cac472a549e182c94fa201b51b25e4bf7bf + requires_python: '>=3.8,<4.0' - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 md5: 63ccfdc3a3ce25b027b8767eb722fca8 @@ -6183,31 +6381,19 @@ packages: - pkg:pypi/importlib-metadata?source=hash-mapping size: 34641 timestamp: 1747934053147 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - sha256: a99a3dafdfff2bb648d2b10637c704400295cb2ba6dc929e2d814870cf9f6ae5 - md5: e376ea42e9ae40f3278b0f79c9bf9826 - depends: - - importlib_resources >=6.5.2,<6.5.3.0a0 - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 9724 - timestamp: 1736252443859 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 - md5: c85c76dc67d75619a92f51dfbce06992 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 + md5: 080594bf4493e6bae2607e65390c520a depends: - - python >=3.9 - - zipp >=3.1.0 - constrains: - - importlib-resources >=6.5.2,<6.5.3.0a0 + - python >=3.10 + - zipp >=3.20 + - python license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/importlib-resources?source=hash-mapping - size: 33781 - timestamp: 1736252433366 + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 34387 + timestamp: 1773931568510 - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca md5: 6837f3eff7dcea42ecd714ce1ac2b108 @@ -6219,6 +6405,67 @@ packages: - pkg:pypi/iniconfig?source=hash-mapping size: 11474 timestamp: 1733223232820 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 + md5: 9614359868482abba1bd15ce465e3c42 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=compressed-mapping + size: 13387 + timestamp: 1760831448842 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + sha256: 932044bd893f7adce6c9b384b96a72fd3804cc381e76789398c2fae900f21df7 + md5: b293210beb192c3024683bf6a998a0b8 + depends: + - __unix + - decorator >=5.1.0 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.14.0 + - python >=3.12 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - pexpect >4.6 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=compressed-mapping + size: 649967 + timestamp: 1774609994657 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 + depends: + - pygments + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython-pygments-lexers?source=hash-mapping + size: 13993 + timestamp: 1737123723464 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda + sha256: 6bb58afb7eabc8b4ac0c7e92707fb498313cc0164cf04e7ba1090dbf49af514b + md5: d68e3f70d1f068f1b66d94822fdc644e + depends: + - comm >=0.1.3 + - ipython >=6.1.0 + - jupyterlab_widgets >=3.0.15,<3.1.0 + - python >=3.10 + - traitlets >=4.3.1 + - widgetsnbextension >=4.0.14,<4.1.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipywidgets?source=hash-mapping + size: 114376 + timestamp: 1762040524661 - conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py312h1234567_5_cpu.conda build_number: 5 sha256: e232b096d0627ab7798d780f49e1bc721265ef95abc2aa2db7e1ee7df67ecefc @@ -6249,6 +6496,39 @@ packages: purls: [] size: 3565018 timestamp: 1746050712573 +- conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-0.25.8-py312cuda129h25d0ca5_0_cuda.conda + sha256: 03fc07f0697752504693855a7a5a3fa77cc4e3c781eb18355c68a6b806906045 + md5: 45e283ed46fc4d8933851f1424caa167 + depends: + - __cuda >=12 + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex + - backoff + - cuda-cudart >=12.9.79,<13.0a0 + - cuda-version >=12.9,<13 + - fftw >=3.3.10,<4.0a0 + - gdal + - gtest >=1.17.0,<1.17.1.0a0 + - h5py + - hdf5 >=1.14.6,<1.14.7.0a0 + - libcufft >=11.4.1.4,<12.0a0 + - libgcc >=14 + - libgdal-core >=3.12.2,<3.13.0a0 + - libstdcxx >=14 + - numpy >=1.23,<3 + - pyre >=1.12.1,<=1.13.0 + - pysolid + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ruamel.yaml + - scipy + - shapely + - yamale + license: Apache-2.0 + license_family: Apache + purls: [] + size: 15748318 + timestamp: 1773191096321 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isce3-0.24.4-py312h1234567_5_cpu.conda build_number: 5 sha256: d1f6ed917b75ca85f63e3dc36cfb7e089dbedde65e8d1d0de132914f6de9f8da @@ -6279,191 +6559,153 @@ packages: purls: [] size: 3045037 timestamp: 1746050365551 -- conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda - sha256: 573a5582dfba84a8f67c351b6218cb9579cb8d0f6d4b4186a806852111d4a6f1 - md5: bd364feb12c744cf5c60e1e5b586171b - depends: - - importlib-metadata >=4.6 - - jaxlib >=0.6.0,<=0.6.0 - - ml_dtypes >=0.5.0 - - numpy >=1.25 - - opt_einsum - - python >=3.10 - - scipy >=1.11.1 - constrains: - - cudnn >=9.8,<10.0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jax?source=hash-mapping - size: 1538293 - timestamp: 1748688029463 -- conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda - sha256: c9dfa0d2fd5e42de88c8d2f62f495b6747a7d08310c4bbf94d0fa7e0dcaad573 - md5: cf9f37f6340f024ff8e3c3666de41bf5 - depends: - - importlib-metadata >=4.6 - - jaxlib >=0.7.0,<=0.7.0 - - ml_dtypes >=0.5.0 - - numpy >=1.26 - - opt_einsum - - python >=3.11 - - scipy >=1.12 - constrains: - - cudnn >=9.8,<10.0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jax?source=hash-mapping - size: 1836006 - timestamp: 1753869796115 -- conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.6.0-cpu_py312h860c521_0.conda - sha256: 8941335debcba5835d378717cb5f691fe4e8749e179653c6fae7a39ad593f33d - md5: df8ebae58f002df33e6bb75394656a34 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libgcc >=13 - - libgrpc >=1.71.0,<1.72.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - ml_dtypes >=0.2.0 - - numpy >=1.19,<3 - - openssl >=3.5.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - scipy >=1.9 - constrains: - - jax >=0.6.0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jaxlib?source=hash-mapping - size: 60656001 - timestamp: 1748656526943 -- conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.7.0-cpu_py312h73730d4_0.conda - sha256: c656c067f62f8a02b12c269c329a2e6d8d6b627d4cce20e492607c83cab7d5ff - md5: ea806e4824b4bf4f39ea2a2473552189 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libgcc >=14 - - libgrpc >=1.71.0,<1.72.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - ml_dtypes >=0.2.0 - - numpy >=1.23,<3 - - openssl >=3.5.1,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - scipy >=1.9 - constrains: - - jax >=0.7.0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jaxlib?source=hash-mapping - size: 67334239 - timestamp: 1753586875514 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/jaxlib-0.6.0-cpu_py312he253ca6_0.conda - sha256: b7d9ba3dd95f998e9c20c272293d06f570c7d6e101940acc4e62c1283d09a312 - md5: 694baa9a80a8229587db65e4063de530 - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcxx >=18 - - libgrpc >=1.71.0,<1.72.0a0 - - libzlib >=1.3.1,<2.0a0 - - ml_dtypes >=0.2.0 - - numpy >=1.19,<3 - - openssl >=3.5.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - scipy >=1.9 - constrains: - - jax >=0.6.0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jaxlib?source=hash-mapping - size: 51803228 - timestamp: 1748652224641 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py312h1f4f324_0.conda - sha256: a34a9fb32b8cad59b488adc5b40556fbe7fd0387c53e3ba4b39024c29d214dc1 - md5: e108589ad571a36e777b14c8d9bd29dd +- conda: https://conda.anaconda.org/conda-forge/linux-64/isce3-cuda-0.25.8-h74ed563_0.conda + sha256: 9ff2ff66a59a7ac5d05258459b9683895c356ddcf6f3cb0c89b7586cc6b293e2 + md5: 6acf85722094bea5f2e530091461d1be depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcxx >=19 - - libgrpc >=1.71.0,<1.72.0a0 - - libzlib >=1.3.1,<2.0a0 - - ml_dtypes >=0.2.0 - - numpy >=1.23,<3 - - openssl >=3.5.1,<4.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - scipy >=1.9 - constrains: - - jax >=0.7.0 + - isce3 0.25.8 *_cuda license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jaxlib?source=hash-mapping - size: 54233429 - timestamp: 1753579168523 -- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - sha256: f1ac18b11637ddadc05642e8185a851c7fab5998c6f5470d716812fae943b2af - md5: 446bd6c8cb26050d528881df495ce646 - depends: - - markupsafe >=2.0 - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jinja2?source=compressed-mapping - size: 112714 - timestamp: 1741263433881 -- conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_1.conda - sha256: 3d2f20ee7fd731e3ff55c189db9c43231bc8bde957875817a609c227bcb295c6 - md5: 972bdca8f30147135f951847b30399ea + license_family: Apache + purls: [] + size: 9341 + timestamp: 1773199125006 +- pypi: https://files.pythonhosted.org/packages/83/81/793d78c91b0546b3b1f08e55fdd97437174171cd7d70e46098f1a4d94b7b/jax-0.7.1-py3-none-any.whl + name: jax + version: 0.7.1 + sha256: 056e576e0e58465506125699f48111ac8891cce4c9ebf034704c42b219dfd4a6 + requires_dist: + - jaxlib<=0.7.1,>=0.7.1 + - ml-dtypes>=0.5.0 + - numpy>=1.26 + - opt-einsum + - scipy>=1.12 + - jaxlib==0.7.1 ; extra == 'minimum-jaxlib' + - jaxlib==0.7.0 ; extra == 'ci' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'tpu' + - libtpu==0.0.20.* ; extra == 'tpu' + - requests ; extra == 'tpu' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]<=0.7.1,>=0.7.1 ; extra == 'cuda' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]<=0.7.1,>=0.7.1 ; extra == 'cuda12' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'cuda13' + - jax-cuda13-plugin[with-cuda]<=0.7.1,>=0.7.1 ; extra == 'cuda13' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'cuda12-local' + - jax-cuda12-plugin<=0.7.1,>=0.7.1 ; extra == 'cuda12-local' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'cuda13-local' + - jax-cuda13-plugin<=0.7.1,>=0.7.1 ; extra == 'cuda13-local' + - jaxlib<=0.7.1,>=0.7.1 ; extra == 'rocm' + - jax-rocm60-plugin<=0.7.1,>=0.7.1 ; extra == 'rocm' + - kubernetes ; extra == 'k8s' + - xprof ; extra == 'xprof' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/17/9c/e897231c880f69e32251d3b1145894d7a04e4342d9bef8d29644c440d11b/jax-0.9.2-py3-none-any.whl + name: jax + version: 0.9.2 + sha256: 822a8ae155ab42e7bc59f2ae7a28705bcfccb01a7e76abfc8ae996190cdc5598 + requires_dist: + - jaxlib<=0.9.2,>=0.9.2 + - ml-dtypes>=0.5.0 + - numpy>=2.0 + - opt-einsum + - scipy>=1.13 + - jaxlib==0.9.2 ; extra == 'minimum-jaxlib' + - jaxlib==0.9.1 ; extra == 'ci' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'tpu' + - libtpu==0.0.37.* ; extra == 'tpu' + - requests ; extra == 'tpu' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]<=0.9.2,>=0.9.2 ; extra == 'cuda' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]<=0.9.2,>=0.9.2 ; extra == 'cuda12' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda13' + - jax-cuda13-plugin[with-cuda]<=0.9.2,>=0.9.2 ; extra == 'cuda13' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda12-local' + - jax-cuda12-plugin<=0.9.2,>=0.9.2 ; extra == 'cuda12-local' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'cuda13-local' + - jax-cuda13-plugin<=0.9.2,>=0.9.2 ; extra == 'cuda13-local' + - jaxlib<=0.9.2,>=0.9.2 ; extra == 'rocm7-local' + - jax-rocm7-plugin==0.9.2.* ; extra == 'rocm7-local' + - kubernetes ; extra == 'k8s' + - xprof ; extra == 'xprof' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/0d/50/e37d02e250f5feb755112ec95b1c012a36d48a99209277267037d100f630/jaxlib-0.7.1-cp312-cp312-manylinux_2_27_x86_64.whl + name: jaxlib + version: 0.7.1 + sha256: 74abd3135797f82440dd3711a35cba16c430d1bba65474b85bb70e41733a52e9 + requires_dist: + - scipy>=1.12 + - numpy>=1.26 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/ef/1f/10543d7a3f7e76dd4bbdc77134890ac2f41bc8570c565961464f6320009b/jaxlib-0.7.1-cp312-cp312-macosx_11_0_arm64.whl + name: jaxlib + version: 0.7.1 + sha256: 127c07c727703e5d59f84f655169bec849f4422e52f8546349cecc30a8a13e1d + requires_dist: + - scipy>=1.12 + - numpy>=1.26 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/33/a0/ddb3a71359c1df61f3edc408936b5bda7ed402e78ae7e9ef6afd438577c6/jaxlib-0.9.2-cp312-cp312-manylinux_2_27_x86_64.whl + name: jaxlib + version: 0.9.2 + sha256: 88b276a71f4f2071b1fd2e922abfd67c87c6977a551a1036febcea78d5ef7e22 + requires_dist: + - scipy>=1.13 + - numpy>=2.0 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/75/06/aa1e2c36db1ed893ea4a89528a9cc8617a31919ffe7307c4f56aaa87e5cc/jaxlib-0.9.2-cp314-cp314-macosx_11_0_arm64.whl + name: jaxlib + version: 0.9.2 + sha256: bab168d25555464461bd077323484f690c471e69ce8b0c39a39fb81b3e3a8bf0 + requires_dist: + - scipy>=1.13 + - numpy>=2.0 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 depends: + - parso >=0.8.3,<0.9.0 - python >=3.9 - license: MIT - license_family: MIT + license: Apache-2.0 AND MIT purls: - - pkg:pypi/jmespath?source=hash-mapping - size: 23708 - timestamp: 1733229244590 -- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda - sha256: 51cc2dc491668af0c4d9299b0ab750f16ccf413ec5e2391b924108c1fbacae9b - md5: bf8243ee348f3a10a14ed0cae323e0c1 + - pkg:pypi/jedi?source=hash-mapping + size: 843646 + timestamp: 1733300981994 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d depends: - - python >=3.9 - - setuptools + - markupsafe >=2.0 + - python >=3.10 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/joblib?source=hash-mapping - size: 220252 - timestamp: 1733736157394 -- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed - md5: fb1c14694de51a476ce8636d92b6f42c + - pkg:pypi/jinja2?source=hash-mapping + size: 120685 + timestamp: 1764517220861 +- pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + name: jmespath + version: 1.1.0 + sha256: a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + sha256: 301539229d7be6420c084490b8145583291123f0ce6b92f56be5948a2c83a379 + md5: 615de2a4d97af50c350e5cf160149e77 depends: - - python >=3.9 + - python >=3.10 - setuptools license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/joblib?source=hash-mapping - size: 224437 - timestamp: 1748019237972 + size: 226448 + timestamp: 1765794135253 - conda: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda sha256: 09e706cb388d3ea977fabcee8e28384bdaad8ce1fc49340df5f868a2bd95a7da md5: 38f5dbc9ac808e31c00650f7be1db93f @@ -6485,6 +6727,20 @@ packages: purls: [] size: 73715 timestamp: 1726487214495 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda + sha256: 5c03de243d7ae6247f39a402f4785d95e61c3be79ef18738e8f17155585d31a8 + md5: dbf8b81974504fa51d34e436ca7ef389 + depends: + - python >=3.10 + - python + constrains: + - jupyterlab >=3,<5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-widgets?source=hash-mapping + size: 216779 + timestamp: 1762267481404 - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda sha256: 2057ca87b313bde5b74b93b0e696f8faab69acd4cb0edebb78469f3f388040c0 md5: 5aeabe88534ea4169d4c49998f293d6c @@ -6503,15 +6759,6 @@ packages: purls: [] size: 197843 timestamp: 1703334079437 -- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb - md5: 30186d27e2c9fa62b45fb1476b7200e3 - depends: - - libgcc-ng >=10.3.0 - license: LGPL-2.1-or-later - purls: [] - size: 117831 - timestamp: 1646151697040 - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 md5: b38117a3c920364aff79f870c984b4a3 @@ -6522,21 +6769,6 @@ packages: purls: [] size: 134088 timestamp: 1754905959823 -- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py312h84d6215_0.conda - sha256: 3ce99d721c1543f6f8f5155e53eef11be47b2f5942a8d1060de6854f9d51f246 - md5: 6713467dc95509683bfa3aca08524e8a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=hash-mapping - size: 71649 - timestamp: 1736908364705 - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_0.conda sha256: abe5ba0c956c5b830c237a5aaf50516ac9ebccf3f9fd9ffb18a5a11640f43677 md5: f1f7cfc42b0fa6adb4c304d609077a78 @@ -6552,21 +6784,21 @@ packages: - pkg:pypi/kiwisolver?source=hash-mapping size: 77278 timestamp: 1754889408033 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.8-py312h2c4a281_0.conda - sha256: 01366fa9d65bedb4069266d08c8a7a2ebbe6f25cedf60eebeeb701067f162f68 - md5: a94f3ac940c391e7716b6ffd332d7463 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + sha256: eec7654c2d68f06590862c6e845cc70987b6d6559222b6f0e619dea4268f5dd5 + md5: cd74a9525dc74bbbf93cf8aa2fa9eb5b depends: - - __osx >=11.0 - - libcxx >=18 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/kiwisolver?source=hash-mapping - size: 61368 - timestamp: 1736908431125 + size: 77120 + timestamp: 1773067050308 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.9-py312hdc12c9d_0.conda sha256: 290d8f1016c9581bd4d2246bb21832ba4e4ba1c7b059eb9106d92bba561bccc7 md5: 91384df8de4c340a1232793cf39a12ce @@ -6582,6 +6814,21 @@ packages: - pkg:pypi/kiwisolver?source=hash-mapping size: 67692 timestamp: 1754889447292 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + sha256: 840de1b0ba2fa646475bc53ba0f723c8a13e66139633a070831b8279deaa7c64 + md5: eb1465d8a644ef290d18fb86af6e9bc4 + depends: + - python + - python 3.14.* *_cp314 + - libcxx >=19 + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 69284 + timestamp: 1773067285911 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 md5: 3f43953b7d3fb3aaa1d0d0723d91e368 @@ -6597,6 +6844,22 @@ packages: purls: [] size: 1370023 timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 + md5: fb53fb07ce46a575c5d004bbc96032c2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1386730 + timestamp: 1769769569681 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b md5: c6dc8a0fdec13a0565936655c33069a1 @@ -6611,19 +6874,32 @@ packages: purls: [] size: 1155530 timestamp: 1719463474401 -- conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda - sha256: d7ea986507090fff801604867ef8e79c8fda8ec21314ba27c032ab18df9c3411 - md5: d10d9393680734a8febc4b362a4c94f2 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed + md5: e446e1822f4da8e5080a9de93474184d + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1160828 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.5-pyhd8ed1ab_0.conda + sha256: 1a88069ac61d2756ccaf26a6c206ab4d56610fb054bd2fffb5df4cd0744ab78e + md5: 75932da6f03a6bef32b70a51e991f6eb depends: - - importlib-metadata - packaging - - python >=3.9 + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/lazy-loader?source=hash-mapping - size: 16298 - timestamp: 1733636905835 + size: 14883 + timestamp: 1772817374026 - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda sha256: d6a61830a354da022eae93fa896d0991385a875c6bba53c82263a289deda9db8 md5: 000e85703f0fd9594c81710dd5066471 @@ -6637,6 +6913,19 @@ packages: purls: [] size: 248046 timestamp: 1739160907615 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda + sha256: 836ec4b895352110335b9fdcfa83a8dcdbe6c5fb7c06c4929130600caea91c0a + md5: 6f2e2c8f58160147c4d1c6f4c14cbac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 249959 + timestamp: 1768184673131 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda sha256: 310a62c2f074ebd5aa43b3cd4b00d46385ce680fa2132ecee255a200e2d2f15f md5: 92a61fd30b19ebd5c1621a5bfe6d8b5f @@ -6649,18 +6938,18 @@ packages: purls: [] size: 212125 timestamp: 1739161108467 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - sha256: db73f38155d901a610b2320525b9dd3b31e4949215c870685fd92ea61b5ce472 - md5: 01f8d123c96816249efd255a31ad7712 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda + sha256: d768da024ab74a4b30642401877fa914a68bdc238667f16b1ec2e0e98b2451a6 + md5: 6631a7bd2335bb9699b1dbc234b19784 depends: - - __glibc >=2.17,<3.0.a0 - constrains: - - binutils_impl_linux-64 2.43 - license: GPL-3.0-only - license_family: GPL + - __osx >=11.0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT purls: [] - size: 671240 - timestamp: 1740155456116 + size: 211756 + timestamp: 1768184994800 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda sha256: 1a620f27d79217c1295049ba214c2f80372062fd251b569e9873d4a953d27554 md5: 0be7c6e070c19105f966d3758448d018 @@ -6673,18 +6962,19 @@ packages: purls: [] size: 676044 timestamp: 1752032747103 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - sha256: 412381a43d5ff9bbed82cd52a0bbca5b90623f62e41007c9c42d3870c60945ff - md5: 9344155d33912347b37f0ae6c410a835 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: Apache + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL purls: [] - size: 264243 - timestamp: 1745264221534 + size: 728002 + timestamp: 1774197446916 - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 md5: 76bbff344f0134279f225174e9064c8f @@ -6696,6 +6986,18 @@ packages: purls: [] size: 281798 timestamp: 1657977462600 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 261513 + timestamp: 1773113328888 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 md5: de462d5aacda3b30721b512c5da4e742 @@ -6706,57 +7008,17 @@ packages: purls: [] size: 215721 timestamp: 1657977558796 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-hd64df32_1.conda - sha256: 12361697f8ffc9968907d1a7b5830e34c670e4a59b638117a2cdfed8f63a38f8 - md5: a74332d9b60b62905e3d30709df08bf1 - depends: - - __osx >=11.0 - - libcxx >=18 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 188306 - timestamp: 1745264362794 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - sha256: 65d5ca837c3ee67b9d769125c21dc857194d7f6181bb0e7bd98ae58597b457d0 - md5: 00290e549c5c8a32cc271020acc9ec6b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - constrains: - - abseil-cpp =20250127.1 - - libabseil-static =20250127.1=cxx17* - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1325007 - timestamp: 1742369558286 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda - sha256: 9884f855bdfd5cddac209df90bdddae8b3a6d8accfd2d3f52bc9db2f9ebb69c9 - md5: 26aabb99a8c2806d8f617fd135f2fc6f +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + sha256: 66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51 + md5: 095e5749868adab9cae42d4b460e5443 depends: - __osx >=11.0 - - libcxx >=18 - constrains: - - abseil-cpp =20250127.1 - - libabseil-static =20250127.1=cxx17* + - libcxx >=19 license: Apache-2.0 license_family: Apache purls: [] - size: 1192962 - timestamp: 1742369814061 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 - md5: 5e97e271911b8b2001a8b71860c32faa - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 35446 - timestamp: 1711021212685 + size: 164222 + timestamp: 1773114244984 - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda sha256: 410ab78fe89bc869d435de04c9ffa189598ac15bb0fe1ea8ace8fb1b860a2aa3 md5: 01ba04e414e47f95c03d6ddd81fd37be @@ -6769,16 +7031,18 @@ packages: purls: [] size: 36825 timestamp: 1749993532943 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda - sha256: 896189b7b48a194c46a3556ea04943ef81cbe0498521231f8eb25816a68bc8ed - md5: 6f0b8e56d2e7bae12a18fc5b2cd9f310 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + sha256: 822e4ae421a7e9c04e841323526321185f6659222325e1a9aedec811c686e688 + md5: 86f7414544ae606282352fa1e116b41f depends: - - libcxx >=16 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 license: BSD-2-Clause license_family: BSD purls: [] - size: 28451 - timestamp: 1711021498493 + size: 36544 + timestamp: 1769221884824 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.4-h51d1e36_0.conda sha256: 0ea6b73b3fb1511615d9648186a7409e73b7a8d9b3d890d39df797730e3d1dbb md5: 8ed0f86b7a5529b98ec73b43a53ce800 @@ -6790,34 +7054,26 @@ packages: purls: [] size: 30173 timestamp: 1749993648288 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - sha256: 2466803e26ae9dbd2263de3a102b572b741c056549875c04b6ec10830bd5d338 - md5: a28808eae584c7f519943719b2a2b386 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + sha256: af9cd8db11eb719e38a3340c88bb4882cf19b5b4237d93845224489fc2a13b46 + md5: 13e6d9ae0efbc9d2e9a01a91f4372b41 depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - libgcc >=13 - - liblzma >=5.6.3,<6.0a0 - - libxml2 >=2.13.5,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - lzo >=2.10,<3.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 + - __osx >=11.0 + - libcxx >=19 license: BSD-2-Clause license_family: BSD purls: [] - size: 878021 - timestamp: 1734020918345 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.1-gpl_h98cc613_100.conda - sha256: 6f35e429909b0fa6a938f8ff79e1d7000e8f15fbb37f67be6f789348fea4c602 - md5: 9de6247361e1ee216b09cfb8b856e2ee + size: 30390 + timestamp: 1769222133373 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda + sha256: d49b2a3617b689763d1377a5d1fbfc3c914ee0afa26b3c1858e1c4329329c6df + md5: b80309616f188ac77c4740acba40f796 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - libgcc >=13 - liblzma >=5.8.1,<6.0a0 - - libxml2 >=2.13.8,<2.14.0a0 + - libxml2 >=2.13.7,<2.14.0a0 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - lzo >=2.10,<3.0a0 @@ -6826,27 +7082,28 @@ packages: license: BSD-2-Clause license_family: BSD purls: [] - size: 883383 - timestamp: 1749385818314 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - sha256: cbce64423e72bcd3576b5cfe0e4edd255900100f72467d5b4ea1d77449ac1ce9 - md5: 1c2eda2163510220b9f9d56a85c8da9d + size: 866358 + timestamp: 1745335292389 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda + sha256: 69ea8da58658ad26cb64fb0bfccd8a3250339811f0b57c6b8a742e5e51bacf70 + md5: 981d372c31a23e1aa9965d4e74d085d5 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 - - libxml2 >=2.13.5,<3.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libxml2 + - libxml2-16 >=2.14.6 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - lzo >=2.10,<3.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-2-Clause license_family: BSD purls: [] - size: 772780 - timestamp: 1734021109752 + size: 887139 + timestamp: 1773243188979 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.1-gpl_h46e8061_100.conda sha256: 7728d08880637622caaf03e6f8e92ee383715e145637a779d668e1ac677717f0 md5: b8d09de5df5352f9e0eb7a27cc79a675 @@ -6866,203 +7123,26 @@ packages: purls: [] size: 788465 timestamp: 1749385999215 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h1b9301b_8_cpu.conda - build_number: 8 - sha256: e218ae6165e6243d8850352640cee57f06a8d05743647918a0370cc5fcc8b602 - md5: 31fc3235e7c84fe61575041cad3756a8 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.10,<0.32.11.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.21.0,<1.22.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.10.0,<2.11.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.2,<2.1.3.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - arrow-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 9203820 - timestamp: 1750865083349 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-20.0.0-hd5f8272_8_cpu.conda - build_number: 8 - sha256: ce896671a627cc77c8398edd03afb2990195a76848d0b311cf8340b1e44c2865 - md5: 5294891741a19a606658427499b1c920 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.8.6-gpl_h6fbacd7_100.conda + sha256: 57fcc5cb6203cb0e119f46be708c8b2cf2bae47dc7580e5b4e76bd4b4c6d164a + md5: 4133c0cef1c6a25426b35f790e006648 depends: - __osx >=11.0 - - aws-crt-cpp >=0.32.10,<0.32.11.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=18 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.21.0,<1.22.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libutf8proc >=2.10.0,<2.11.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2 + - libxml2-16 >=2.14.6 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.2,<2.1.3.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 + - lzo >=2.10,<3.0a0 + - openssl >=3.5.5,<4.0a0 - zstd >=1.5.7,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - arrow-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 5711091 - timestamp: 1750863400325 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_8_cpu.conda - build_number: 8 - sha256: 7be0682610864ec3866214b935c9bf8adeda2615e9a663e3bf4fe57ef203fa2d - md5: a9d337e1f407c5d92e609cb39c803343 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h1b9301b_8_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 642522 - timestamp: 1750865165581 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-20.0.0-hf07054f_8_cpu.conda - build_number: 8 - sha256: e8fdad9df23847b22966472e667eab9d0bb89388181cf8e4602fcaa53d5f0e7d - md5: 1c80fcc1ccecafe2930af0274a59f8eb - depends: - - __osx >=11.0 - - libarrow 20.0.0 hd5f8272_8_cpu - - libcxx >=18 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 503240 - timestamp: 1750863544247 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_8_cpu.conda - build_number: 8 - sha256: 23f6a1dc75e8d12478aa683640169ac14baaeb086d1f0ed5bfe96a562a3c5bab - md5: 14bb8eeeff090f873056fa629d2d82b5 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h1b9301b_8_cpu - - libarrow-acero 20.0.0 hcb10f89_8_cpu - - libgcc >=13 - - libparquet 20.0.0 h081d1f1_8_cpu - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 607588 - timestamp: 1750865314449 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-20.0.0-hf07054f_8_cpu.conda - build_number: 8 - sha256: 0f0e32f55bc1705be5a6c914a062afb106b33ed484cfaecfe3613a12d969ce1f - md5: 4eafe2ccb3e2eadd76ac96202d45d65a - depends: - - __osx >=11.0 - - libarrow 20.0.0 hd5f8272_8_cpu - - libarrow-acero 20.0.0 hf07054f_8_cpu - - libcxx >=18 - - libparquet 20.0.0 h636d7b7_8_cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 502743 - timestamp: 1750863796548 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_8_cpu.conda - build_number: 8 - sha256: 04f214b1f6d5b35fa89a17cce43f5c321167038d409d1775d7457015c6a26cba - md5: 8a98f2bf0cf61725f8842ec45dbd7986 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 h1b9301b_8_cpu - - libarrow-acero 20.0.0 hcb10f89_8_cpu - - libarrow-dataset 20.0.0 hcb10f89_8_cpu - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 525599 - timestamp: 1750865405214 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-20.0.0-he749cb8_8_cpu.conda - build_number: 8 - sha256: eba75d8d52aa76c06fb3a81b3c284ddcfdae2fb62fe9722483c3f722422ca684 - md5: 486d3a2bd91aa28c689fcd62618b1689 - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 hd5f8272_8_cpu - - libarrow-acero 20.0.0 hf07054f_8_cpu - - libarrow-dataset 20.0.0 hf07054f_8_cpu - - libcxx >=18 - - libprotobuf >=5.29.3,<5.29.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 450755 - timestamp: 1750864011299 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda - sha256: cb728a2a95557bb6a5184be2b8be83a6f2083000d0c7eff4ad5bbe5792133541 - md5: 3b0d184bc9404516d418d4509e418bdc - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: LGPL-2.1-or-later - purls: [] - size: 53582 - timestamp: 1753342901341 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.25.1-h493aca8_0.conda - sha256: 7265547424e978ea596f51cc8e7b81638fb1c660b743e98cc4deb690d9d524ab - md5: 0deb80a2d6097c5fb98b495370b2435b - depends: - - __osx >=11.0 - - libcxx >=18 - license: LGPL-2.1-or-later + license: BSD-2-Clause + license_family: BSD purls: [] - size: 52316 - timestamp: 1751558366611 + size: 791560 + timestamp: 1773243648871 - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.3.0-h766b0b6_0.conda sha256: 170b51a3751c2f842ff9e11d22423494ef7254b448ef2b24751256ef18aa1302 md5: f17f2d0e5c9ad6b958547fd67b155771 @@ -7078,6 +7158,21 @@ packages: purls: [] size: 140052 timestamp: 1746836263991 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.4.1-hcfa2d63_0.conda + sha256: e29d8ed0334305c6bafecb32f9a1967cfc0a081eac916e947a1f2f7c4bb41947 + md5: f79415aee8862b3af85ea55dea37e46b + depends: + - __glibc >=2.17,<3.0.a0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - libgcc >=14 + - rav1e >=0.8.1,<0.9.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 148710 + timestamp: 1774042709303 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.3.0-hf1e31eb_0.conda sha256: bd8bc77a0c81c73ba955a05c4b4179b1bf9d0fef1a379bdb37fcd41961650175 md5: c61522d664c4ee27234f802d631ddb88 @@ -7092,6 +7187,38 @@ packages: purls: [] size: 111817 timestamp: 1746836468929 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.4.1-hfce71f6_0.conda + sha256: 09e31e51026a3b74d947ba4b30a68dd99013aeef2860bcb03565bf43cad18da6 + md5: 2df04ee54a2ce2d34cf375eb02a63725 + depends: + - __osx >=11.0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - rav1e >=0.8.1,<0.9.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 118959 + timestamp: 1774043016600 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + build_number: 6 + sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 + md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e + depends: + - libopenblas >=0.3.32,<0.3.33.0a0 + - libopenblas >=0.3.32,<1.0a0 + constrains: + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas + - mkl <2026 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18621 + timestamp: 1774503034895 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda build_number: 31 sha256: 9839fc4ac0cbb0aa3b9eea520adfb57311838959222654804e58f6f2d1771db5 @@ -7110,24 +7237,24 @@ packages: purls: [] size: 16859 timestamp: 1740087969120 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-34_h59b9bed_openblas.conda - build_number: 34 - sha256: 08a394ba934f68f102298259b150eb5c17a97c30c6da618e1baab4247366eab3 - md5: 064c22bac20fecf2a99838f9b979374c +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-6_h51639a9_openblas.conda + build_number: 6 + sha256: 979227fc03628925037ab2dfda008eb7b5592644d9c2c21dd285cefe8c42553d + md5: e551103471911260488a02155cef9c94 depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 + - libopenblas >=0.3.32,<0.3.33.0a0 + - libopenblas >=0.3.32,<1.0a0 constrains: - - mkl <2025 - - blas 2.134 openblas - - liblapacke 3.9.0 34*_openblas - - libcblas 3.9.0 34*_openblas - - liblapack 3.9.0 34*_openblas + - liblapacke 3.11.0 6*_openblas + - liblapack 3.11.0 6*_openblas + - blas 2.306 openblas + - libcblas 3.11.0 6*_openblas + - mkl <2026 license: BSD-3-Clause license_family: BSD purls: [] - size: 19306 - timestamp: 1754678416811 + size: 18859 + timestamp: 1774504387211 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda build_number: 31 sha256: 369586e7688b59b4f92c709b99d847d66d4d095425db327dd32ee5e6ab74697f @@ -7146,24 +7273,6 @@ packages: purls: [] size: 17123 timestamp: 1740088119350 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-34_h10e41b3_openblas.conda - build_number: 34 - sha256: 5de3c3bfcdc8ba05da1a7815c9953fe392c2065d9efdc2491f91df6d0d1d9e76 - md5: cdb3e1ca1661dbf19f9aad7dad524996 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - blas 2.134 openblas - - mkl <2025 - - liblapacke 3.9.0 34*_openblas - - libcblas 3.9.0 34*_openblas - - liblapack 3.9.0 34*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 19533 - timestamp: 1754678956963 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 md5: 41b599ed2b02abcfdd84302bff174b23 @@ -7175,27 +7284,17 @@ packages: purls: [] size: 68851 timestamp: 1725267660471 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda - sha256: 462a8ed6a7bb9c5af829ec4b90aab322f8bcd9d8987f793e6986ea873bbd05cf - md5: cb98af5db26e3f482bebb80ce9d947d3 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e + md5: 72c8fd1af66bd67bf580645b426513ed depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 69233 - timestamp: 1749230099545 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-h5505292_3.conda - sha256: 0e9c196ad8569ca199ea05103707cde0ae3c7e97d0cdf0417d873148ea9ad640 - md5: fbc4d83775515e433ef22c058768b84d - depends: - - __osx >=11.0 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 68972 - timestamp: 1749230317752 + size: 79965 + timestamp: 1764017188531 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda sha256: 839dacb741bdbb25e58f42088a2001b649f4f12195aeb700b5ddfca3267749e5 md5: d0bf1dff146b799b319ea0434b93f779 @@ -7206,6 +7305,16 @@ packages: purls: [] size: 68426 timestamp: 1725267943211 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 + md5: 006e7ddd8a110771134fcc4e1e3a6ffa + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 79443 + timestamp: 1764017945924 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf md5: 9566f0bd264fbd463002e759b8a82401 @@ -7218,29 +7327,18 @@ packages: purls: [] size: 32696 timestamp: 1725267669305 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda - sha256: 3eb27c1a589cbfd83731be7c3f19d6d679c7a444c3ba19db6ad8bf49172f3d83 - md5: 1c6eecffad553bde44c5238770cfb7da +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b + md5: 366b40a69f0ad6072561c1d09301c886 depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.1.0 hb9d3cd8_3 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 33148 - timestamp: 1749230111397 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-h5505292_3.conda - sha256: d888c228e7d4f0f2303538f6a9705498c81d56fedaab7811e1186cb6e24d689b - md5: 01c4b35a1c4b94b60801f189f1ac6ee3 - depends: - - __osx >=11.0 - - libbrotlicommon 1.1.0 h5505292_3 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 29249 - timestamp: 1749230338861 + size: 34632 + timestamp: 1764017199083 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda sha256: 6c6862eb274f21a7c0b60e5345467a12e6dda8b9af4438c66d496a2c1a538264 md5: 55e66e68ce55523a6811633dd1ac74e2 @@ -7252,6 +7350,17 @@ packages: purls: [] size: 28378 timestamp: 1725267980316 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf + md5: 079e88933963f3f149054eec2c487bc2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 29452 + timestamp: 1764017979099 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 md5: 06f70867945ea6a84d35836af780f1de @@ -7264,29 +7373,18 @@ packages: purls: [] size: 281750 timestamp: 1725267679782 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda - sha256: 76e8492b0b0a0d222bfd6081cae30612aa9915e4309396fdca936528ccf314b7 - md5: 3facafe58f3858eb95527c7d3a3fc578 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d + md5: 4ffbb341c8b616aa2494b6afb26a0c5f depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.1.0 hb9d3cd8_3 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 282657 - timestamp: 1749230124839 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-h5505292_3.conda - sha256: 0734a54db818ddfdfbf388fa53c5036a06bbe17de14005f33215d865d51d8a5e - md5: 1ce5e315293309b5bf6778037375fb08 - depends: - - __osx >=11.0 - - libbrotlicommon 1.1.0 h5505292_3 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 274404 - timestamp: 1749230355483 + size: 298378 + timestamp: 1764017210931 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda sha256: eeb1eb0d58b9d02bc1b98dc0a058f104ab168eb2f7d1c7bfa0570a12cfcdb7b7 md5: 4f3a434504c67b2c42565c0b85c1885c @@ -7298,6 +7396,32 @@ packages: purls: [] size: 279644 timestamp: 1725268003553 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 + md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 290754 + timestamp: 1764018009077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + build_number: 6 + sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 + md5: 36ae340a916635b97ac8a0655ace2a35 + depends: + - libblas 3.11.0 6_h4a7cf45_openblas + constrains: + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18622 + timestamp: 1774503050205 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda build_number: 31 sha256: ede8545011f5b208b151fe3e883eb4e31d495ab925ab7b9ce394edca846e0c0d @@ -7313,21 +7437,21 @@ packages: purls: [] size: 16796 timestamp: 1740087984429 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-34_he106b2a_openblas.conda - build_number: 34 - sha256: edde454897c7889c0323216516abb570a593de728c585b14ef41eda2b08ddf3a - md5: 148b531b5457ad666ed76ceb4c766505 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-6_hb0561ab_openblas.conda + build_number: 6 + sha256: 2e6b3e9b1ab672133b70fc6730e42290e952793f132cb5e72eee22835463eba0 + md5: 805c6d31c5621fd75e53dfcf21fb243a depends: - - libblas 3.9.0 34_h59b9bed_openblas + - libblas 3.11.0 6_h51639a9_openblas constrains: - - liblapacke 3.9.0 34*_openblas - - blas 2.134 openblas - - liblapack 3.9.0 34*_openblas + - liblapacke 3.11.0 6*_openblas + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 19313 - timestamp: 1754678426220 + size: 18863 + timestamp: 1774504433388 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda build_number: 31 sha256: f237486cc9118d09d0f3ff8820280de34365f98ee7b7dc5ab923b04c7cbf25a5 @@ -7343,21 +7467,6 @@ packages: purls: [] size: 17032 timestamp: 1740088127097 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-34_hb3479ef_openblas.conda - build_number: 34 - sha256: 6639f6c6b2e76cb1be62cd6d9033bda7dc3fab2e5a80f5be4b5c522c27dcba17 - md5: e15018d609b8957c146dcb6c356dd50c - depends: - - libblas 3.9.0 34_h10e41b3_openblas - constrains: - - liblapack 3.9.0 34*_openblas - - blas 2.134 openblas - - liblapacke 3.9.0 34*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 19521 - timestamp: 1754678970336 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_hddf928d_0.conda sha256: 202742a287db5889ae5511fab24b4aff40f0c515476c1ea130ff56fae4dd565a md5: b939740734ad5a8e8f6c942374dee68d @@ -7371,6 +7480,19 @@ packages: purls: [] size: 21250278 timestamp: 1752223579291 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda + sha256: de512ce246faec2d4f7766774769921a85b5aa053a74abd2f8c97ad50b393aac + md5: 24a2802074d26aecfdbc9b3f1d8168d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm21 >=21.1.8,<21.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 21066639 + timestamp: 1770190428756 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.8-default_ha444ac7_0.conda sha256: 39fdf9616df5dd13dee881fc19e8f9100db2319e121d9b673a3fc6a0c76743a3 md5: 783f9cdcb0255ed00e3f1be22e16de40 @@ -7384,27 +7506,45 @@ packages: purls: [] size: 12353158 timestamp: 1752223792409 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 - md5: c965a5aa0d5c1c37ffc62dff36e28400 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.3-default_h746c552_0.conda + sha256: 485de0c70865eb489d819defea714187c84502e3c50a511173d62135b8cef12f + md5: 9b47a4cd3aabb73201a2b8ed9f127189 depends: - - libgcc-ng >=9.4.0 - - libstdcxx-ng >=9.4.0 - license: BSD-3-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm22 >=22.1.3,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache purls: [] - size: 20440 - timestamp: 1633683576494 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 - md5: 32bd82a6a625ea6ce090a81c3d34edeb + size: 12822776 + timestamp: 1775789745068 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.4.1.4-hecca717_1.conda + sha256: 62d4214c182c89cfb02271a42eaac56a41f50bbbea3b0d795a8e33f167a39a4e + md5: 75ae571353ec92c8f34d4cf6ec6ba264 depends: - - libcxx >=11.1.0 - license: BSD-3-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 162080769 + timestamp: 1761098842719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 18765 - timestamp: 1633683992603 + size: 4518030 + timestamp: 1770902209173 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda sha256: cb83980c57e311783ee831832eb2c20ecb41e7dee6e86e8b70b8cef0e43eab55 md5: d4a250da4737ee127fb1fa6452a9002e @@ -7436,6 +7576,23 @@ packages: purls: [] size: 449910 timestamp: 1749033146806 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda + sha256: a0390fd0536ebcd2244e243f5f00ab8e76ab62ed9aa214cd54470fe7496620f4 + md5: d50608c443a30c341c24277d28290f76 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 466704 + timestamp: 1773218522665 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.14.1-h73640d1_0.conda sha256: 0055b68137309db41ec34c938d95aec71d1f81bd9d998d5be18f32320c3ccba0 md5: 1af57c823803941dfc97305248a56d57 @@ -7452,26 +7609,22 @@ packages: purls: [] size: 403456 timestamp: 1749033320430 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.1-ha82da77_0.conda - sha256: 80dd8ae3fbcf508ed72f074ada2c7784298e822e8d19c3b84c266bb31456d77c - md5: 833c4899914bf96caf64b52ef415e319 - depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 561543 - timestamp: 1742449846779 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.2-ha82da77_0.conda - sha256: e3ad5ba1ff49f988c1476f47f395499e841bdd8eafc3908cb1b64daae3a83f3b - md5: 85ea0d49eb61f57e02ce98dc29ca161f +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.19.0-hd5a2499_0.conda + sha256: c4d581b067fa60f9dc0e1c5f18b756760ff094a03139e6b206eb98d185ae2bb1 + md5: 9fc7771fc8104abed9119113160be15a depends: - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT purls: [] - size: 566452 - timestamp: 1743573280445 + size: 399616 + timestamp: 1773219210246 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda sha256: 119b3ac75cb1ea29981e5053c2cb10d5f0b06fcc81b486cb7281f160daf673a1 md5: a69ef3239d3268ef8602c7a7823fd982 @@ -7482,17 +7635,16 @@ packages: purls: [] size: 568267 timestamp: 1752814881595 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda - sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 - md5: 8dfae1d2e74767e9ce36d5fa0d8605db +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda + sha256: 34cc56c627b01928e49731bcfe92338e440ab6b5952feee8f1dd16570b8b8339 + md5: acbb3f547c4aae16b19e417db0c6e5ed depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache purls: [] - size: 72255 - timestamp: 1734373823254 + size: 570026 + timestamp: 1775565121045 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda sha256: 8420748ea1cc5f18ecc5068b4f24c7a023cc9b20971c99c824ba10641fb95ddf md5: 64f0c503da58ec25ebd359e4d990afa8 @@ -7504,16 +7656,17 @@ packages: purls: [] size: 72573 timestamp: 1747040452262 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - sha256: 887c02deaed6d583459eba6367023e36d8761085b2f7126e389424f57155da53 - md5: 1d8b9588be14e71df38c525767a1ac30 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 54132 - timestamp: 1734373971372 + size: 73490 + timestamp: 1761979956660 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.24-h5773f1b_0.conda sha256: 417d52b19c679e1881cce3f01cad3a2d542098fa2d6df5485aac40f01aede4d1 md5: 3baf58a5a87e7c2f4d243ce2f8f2fe5c @@ -7524,6 +7677,28 @@ packages: purls: [] size: 54790 timestamp: 1747040549847 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + sha256: 5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c + md5: a6130c709305cd9828b4e1bd9ba0000c + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 55420 + timestamp: 1761980066242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 + md5: 9314bc5a1fe7d1044dc9dfd3ef400535 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpciaccess >=0.18,<0.19.0a0 + license: MIT + license_family: MIT + purls: [] + size: 310785 + timestamp: 1757212153962 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda sha256: f53458db897b93b4a81a6dbfd7915ed8fa4a54951f97c698dde6faa028aadfd2 md5: 4c0ab57463117fbb8df85268415082f5 @@ -7589,40 +7764,6 @@ packages: purls: [] size: 107458 timestamp: 1702146414478 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - md5: a1cfcc585f0c42bf8d5546bb1dfb668d - depends: - - libgcc-ng >=12 - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 427426 - timestamp: 1685725977222 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 - md5: 1a109764bff3bdc7bdd84088347d71dc - depends: - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 368167 - timestamp: 1685726248899 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - sha256: 33ab03438aee65d6aa667cf7d90c91e5e7d734c19a67aa4c7040742c0a13d505 - md5: db0bfbe7dd197b68ad5f30333bae6ce0 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - expat 2.7.0.* - license: MIT - license_family: MIT - purls: [] - size: 74427 - timestamp: 1743431794976 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2 md5: 4211416ecba1866fab0c6470986c22d6 @@ -7636,18 +7777,19 @@ packages: purls: [] size: 74811 timestamp: 1752719572741 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.0-h286801f_0.conda - sha256: ee550e44765a7bbcb2a0216c063dcd53ac914a7be5386dd0554bd06e6be61840 - md5: 6934bbb74380e045741eb8637641a65b +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c + md5: 49f570f3bc4c874a06ea69b7225753af depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 constrains: - - expat 2.7.0.* + - expat 2.7.5.* license: MIT license_family: MIT purls: [] - size: 65714 - timestamp: 1743431789879 + size: 76624 + timestamp: 1774719175983 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda sha256: 8fbb17a56f51e7113ed511c5787e0dec0d4b10ef9df921c4fd1cccca0458f648 md5: b1ca5f21335782f71a8bd69bdc093f67 @@ -7660,6 +7802,18 @@ packages: purls: [] size: 65971 timestamp: 1752719657566 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda + sha256: 06780dec91dd25770c8cf01e158e1062fbf7c576b1406427475ce69a8af75b7e + md5: a32123f93e168eaa4080d87b0fb5da8a + depends: + - __osx >=11.0 + constrains: + - expat 2.7.5.* + license: MIT + license_family: MIT + purls: [] + size: 68192 + timestamp: 1774719211725 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab md5: ede4673863426c0883c0063d853bbd85 @@ -7671,14 +7825,17 @@ packages: purls: [] size: 57433 timestamp: 1743434498161 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca - md5: 086914b672be056eb70fd4285b6783b6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 39020 - timestamp: 1636488587153 + size: 58592 + timestamp: 1769456073053 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60 md5: c215a60c2935b517dcda8cad4705734d @@ -7689,6 +7846,16 @@ packages: purls: [] size: 39839 timestamp: 1743434670405 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 + md5: 43c04d9cb46ef176bb2a4c77e324d599 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 40979 + timestamp: 1769456747661 - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda sha256: 7be9b3dac469fe3c6146ff24398b685804dfc7a1de37607b84abd076f57cc115 md5: 51f5be229d83ecd401fb369ab96ae669 @@ -7698,6 +7865,15 @@ packages: purls: [] size: 7693 timestamp: 1745369988361 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8049 + timestamp: 1774298163029 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda sha256: 1f8c16703fe333cdc2639f7cdaf677ac2120843453222944a7c6c85ec342903c md5: d06282e08e55b752627a707d58779b8f @@ -7707,6 +7883,15 @@ packages: purls: [] size: 7813 timestamp: 1745370144506 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + sha256: a047a2f238362a37d484f9620e8cba29f513a933cd9eb68571ad4b270d6f8f3e + md5: f73b109d49568d5d1dda43bb147ae37f + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8091 + timestamp: 1774298691258 - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda sha256: 7759bd5c31efe5fbc36a7a1f8ca5244c2eabdbeb8fc1bee4b99cf989f35c7d81 md5: 3c255be50a506c50765a93a6644f32fe @@ -7721,6 +7906,20 @@ packages: purls: [] size: 380134 timestamp: 1745369987697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 384575 + timestamp: 1774298162622 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.13.3-h1d14073_1.conda sha256: c278df049b1a071841aa0aca140a338d087ea594e07dcf8a871d2cfe0e330e75 md5: b163d446c55872ef60530231879908b9 @@ -7734,20 +7933,19 @@ packages: purls: [] size: 333529 timestamp: 1745370142848 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - sha256: 3a572d031cb86deb541d15c1875aaa097baefc0c580b54dc61f5edab99215792 - md5: ef504d1acbd74b7cc6849ef8af47dd03 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + sha256: ff764608e1f2839e95e2cf9b243681475f8778c36af7a42b3f78f476fdbb1dd3 + md5: e98ba7b5f09a5f450eca083d5a1c4649 depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 + - __osx >=11.0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - libgomp 14.2.0 h767d61c_2 - - libgcc-ng ==14.2.0=*_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL purls: [] - size: 847885 - timestamp: 1740240653082 + size: 338085 + timestamp: 1774298689297 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda sha256: 144e35c1c2840f2dc202f6915fc41879c19eddbb8fa524e3ca4aa0d14018b26f md5: f406dcbb2e7bef90d793e50e79a2882b @@ -7762,16 +7960,33 @@ packages: purls: [] size: 824153 timestamp: 1753903866511 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - sha256: fb7558c328b38b2f9d2e412c48da7890e7721ba018d733ebdfea57280df01904 - md5: a2222a6ada71fb478682efe483ce0f92 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041788 + timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e + md5: 92df6107310b1fff92c4cc84f0de247b depends: - - libgcc 14.2.0 h767d61c_2 + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 53758 - timestamp: 1740240660904 + size: 401974 + timestamp: 1771378877463 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda sha256: 76ceac93ed98f208363d6e9c75011b0ff7b97b20f003f06461a619557e726637 md5: 28771437ffcd9f3417c66012dc49a3be @@ -7782,47 +7997,16 @@ packages: purls: [] size: 29249 timestamp: 1753903872571 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h02f45b3_12.conda - sha256: 2fe12ad5944893fb7293814d68bb773902a87357b6027445b8042b659a43592c - md5: 16ed071d277c04f4b6999845ebc69bc1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 depends: - - __glibc >=2.17,<3.0.a0 - - blosc >=1.21.6,<2.0a0 - - geos >=3.13.1,<3.13.2.0a0 - - geotiff >=1.7.4,<1.8.0a0 - - giflib >=5.2.2,<5.3.0a0 - - json-c >=0.18,<0.19.0a0 - - lerc >=4.0.0,<5.0a0 - - libarchive >=3.8.1,<3.9.0a0 - - libcurl >=8.14.1,<9.0a0 - - libdeflate >=1.24,<1.25.0a0 - - libexpat >=2.7.1,<3.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - libkml >=1.3.0,<1.4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.50,<1.7.0a0 - - libspatialite >=5.1.0,<5.2.0a0 - - libsqlite >=3.50.3,<4.0a0 - - libstdcxx >=14 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - libxml2 >=2.13.8,<2.14.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - openssl >=3.5.1,<4.0a0 - - pcre2 >=10.45,<10.46.0a0 - - proj >=9.6.2,<9.7.0a0 - - xerces-c >=3.2.5,<3.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - libgdal 3.10.3.* - license: MIT - license_family: MIT + - libgcc 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 11040471 - timestamp: 1753385547429 + size: 27526 + timestamp: 1771378224552 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-h86883d2_10.conda sha256: 346bf1be9e0c07e2a1e1fe9578a1b7033aed36947436982c17a95b3352535b7d md5: d00c87e2176e6119bf680f369f6f1463 @@ -7864,87 +8048,48 @@ packages: purls: [] size: 10821420 timestamp: 1747855171053 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-hc58de80_6.conda - sha256: 39b21725ce8768308672d8cc60878eea838630ceed200a059ab55ee9722142d2 - md5: 4fe60d3bac39eaf349b277817dddb453 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.12.3-he63569f_3.conda + sha256: 298497351f4a7dc94938a1ad8dc3df545a07efdc5f1b91b9256d04e65959a430 + md5: 83666e2c330f47ee6268396ee4467b63 depends: - __glibc >=2.17,<3.0.a0 - blosc >=1.21.6,<2.0a0 - - geos >=3.13.1,<3.13.2.0a0 - - geotiff >=1.7.4,<1.8.0a0 - - giflib >=5.2.2,<5.3.0a0 - - json-c >=0.18,<0.19.0a0 - - lerc >=4.0.0,<5.0a0 - - libarchive >=3.7.7,<3.8.0a0 - - libcurl >=8.13.0,<9.0a0 - - libdeflate >=1.23,<1.24.0a0 - - libexpat >=2.7.0,<3.0a0 - - libgcc >=13 - - libiconv >=1.18,<2.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - libkml >=1.3.0,<1.4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.47,<1.7.0a0 - - libspatialite >=5.1.0,<5.2.0a0 - - libsqlite >=3.49.1,<4.0a0 - - libstdcxx >=13 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxml2 >=2.13.7,<2.14.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - openssl >=3.5.0,<4.0a0 - - pcre2 >=10.45,<10.46.0a0 - - proj >=9.6.0,<9.7.0a0 - - xerces-c >=3.2.5,<3.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - libgdal 3.10.3.* - license: MIT - license_family: MIT - purls: [] - size: 10809482 - timestamp: 1746120653701 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.3-hd65cc67_6.conda - sha256: 0aad821140706726806b82e4e9de133e470285f70cfd4e7990bd7fc1f47f11ef - md5: 452ee6549e7217e3d47e2061013ccb85 - depends: - - __osx >=11.0 - - blosc >=1.21.6,<2.0a0 - - geos >=3.13.1,<3.13.2.0a0 - - geotiff >=1.7.4,<1.8.0a0 + - geos >=3.14.1,<3.14.2.0a0 - giflib >=5.2.2,<5.3.0a0 - json-c >=0.18,<0.19.0a0 - - lerc >=4.0.0,<5.0a0 - - libarchive >=3.7.7,<3.8.0a0 - - libcurl >=8.13.0,<9.0a0 - - libcxx >=18 - - libdeflate >=1.23,<1.24.0a0 - - libexpat >=2.7.0,<3.0a0 + - lerc >=4.1.0,<5.0a0 + - libarchive >=3.8.6,<3.9.0a0 + - libcurl >=8.19.0,<9.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libexpat >=2.7.5,<3.0a0 + - libgcc >=14 - libiconv >=1.18,<2.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - libkml >=1.3.0,<1.4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.47,<1.7.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libjxl >=0.11,<1.0a0 + - libkml >=1.3.0,<1.4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.57,<1.7.0a0 - libspatialite >=5.1.0,<5.2.0a0 - - libsqlite >=3.49.1,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxml2 >=2.13.7,<2.14.0a0 - - libzlib >=1.3.1,<2.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - - openssl >=3.5.0,<4.0a0 - - pcre2 >=10.45,<10.46.0a0 - - proj >=9.6.0,<9.7.0a0 - - xerces-c >=3.2.5,<3.3.0a0 + - muparser >=2.3.5,<2.4.0a0 + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - proj >=9.7.1,<9.8.0a0 + - xerces-c >=3.3.0,<3.4.0a0 - zstd >=1.5.7,<1.6.0a0 constrains: - - libgdal 3.10.3.* + - libgdal 3.12.3.* license: MIT license_family: MIT purls: [] - size: 8516842 - timestamp: 1746121234944 + size: 12920201 + timestamp: 1775712965350 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.3-hef24e92_12.conda sha256: fdde42ae94a276ebdc900b6965a1fc437b5b53c1d0167682f37627fafbb2254d md5: 8b9cd7305e27f21e99161a6cde559bfb @@ -7985,6 +8130,47 @@ packages: purls: [] size: 8510300 timestamp: 1753385360217 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.12.3-haccf57a_3.conda + sha256: 19376eefc969f055b5823dec7b847011b70a3013c094e53bf0380fffdf436504 + md5: 7c7439b43fee531ac02bf45df6caf870 + depends: + - __osx >=11.0 + - blosc >=1.21.6,<2.0a0 + - geos >=3.14.1,<3.14.2.0a0 + - giflib >=5.2.2,<5.3.0a0 + - json-c >=0.18,<0.19.0a0 + - lerc >=4.1.0,<5.0a0 + - libarchive >=3.8.6,<3.9.0a0 + - libcurl >=8.19.0,<9.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libexpat >=2.7.5,<3.0a0 + - libiconv >=1.18,<2.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libjxl >=0.11,<1.0a0 + - libkml >=1.3.0,<1.4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.57,<1.7.0a0 + - libspatialite >=5.1.0,<5.2.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - muparser >=2.3.5,<2.4.0a0 + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - proj >=9.7.1,<9.8.0a0 + - xerces-c >=3.3.0,<3.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - libgdal 3.12.3.* + license: MIT + license_family: MIT + purls: [] + size: 9896508 + timestamp: 1775715987003 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.10.0-hbbee16a_4.conda sha256: 160dafaa210aa8eca42ea0f9804e64c3c4b495815ca1144f45249300e1f37a43 md5: 61ffd025a02493159aef5566ee67c728 @@ -8001,6 +8187,21 @@ packages: purls: [] size: 580050 timestamp: 1733273342361 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf4-3.12.3-hf70aa56_3.conda + sha256: dc0ffd3fdce474ff3f975dadda48f971bff6604b83391b3cd9b4c3e43408335e + md5: 5429ab06028218ac67e11695b4b66a96 + depends: + - __glibc >=2.17,<3.0.a0 + - hdf4 >=4.2.15,<4.2.16.0a0 + - libaec >=1.1.5,<2.0a0 + - libgcc >=14 + - libgdal-core 3.12.3 he63569f_3 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 563445 + timestamp: 1775714610213 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.10.0-h4b24957_4.conda sha256: 528ff926217971ef579ed15a96e5924a3b76ac5e6eede21d0705a1cb494bf1a6 md5: 42a437ca38db839b71a8ff428737d0ff @@ -8016,6 +8217,20 @@ packages: purls: [] size: 580419 timestamp: 1733276000904 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf4-3.12.3-h44e20f9_3.conda + sha256: 10380e624d743fd92cca6397aa6be802c96c097fc120c6f6a4cf9061465748ca + md5: cd51394a24ab38f5b8e082936cf5d657 + depends: + - __osx >=11.0 + - hdf4 >=4.2.15,<4.2.16.0a0 + - libaec >=1.1.5,<2.0a0 + - libcxx >=19 + - libgdal-core 3.12.3 haccf57a_3 + license: MIT + license_family: MIT + purls: [] + size: 545580 + timestamp: 1775723667415 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.10.0-hd75530a_4.conda sha256: 8de3cc436bb6928bc652eefa136f2d20d8fe72a4302d799dcd2a48300b9e4df9 md5: 51209a1581a96d227f7b8e906bbc016d @@ -8031,6 +8246,20 @@ packages: purls: [] size: 645716 timestamp: 1733273414852 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-hdf5-3.12.3-hcaab353_3.conda + sha256: 8301b1f9398e24024106153eca3974689a5f2525cec4f10fd2b3d308f8808551 + md5: 84323ebb51560f4cae780b7ce8354702 + depends: + - __glibc >=2.17,<3.0.a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libgcc >=14 + - libgdal-core 3.12.3 he63569f_3 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 674717 + timestamp: 1775714757323 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.10.0-h30a2ec2_4.conda sha256: 59db88ef3d8ca5c002a4f5bd19f767bbff8e0f4b69a8a62bfd2a072160bfa303 md5: 7bfd2968562afdd1b4b9c576371b40e9 @@ -8045,6 +8274,19 @@ packages: purls: [] size: 594361 timestamp: 1733276212323 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-hdf5-3.12.3-hd534ca0_3.conda + sha256: 58e66517fb49a6e8d0dd464238751e4b7b7afa09a706c7dadd79e4942eade19a + md5: 083688dd4e17bfb2329c5887384c8be7 + depends: + - __osx >=11.0 + - hdf5 >=2.1.0,<3.0a0 + - libcxx >=19 + - libgdal-core 3.12.3 haccf57a_3 + license: MIT + license_family: MIT + purls: [] + size: 614216 + timestamp: 1775723952804 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.10.0-h2b12c9b_4.conda sha256: c2104d1c521582a8366e3a926b259e5c546cd5f887b32c6524646498fe8c8362 md5: 1e0c68ccb3dd917cfa0887d9398c24c9 @@ -8064,6 +8306,24 @@ packages: purls: [] size: 738757 timestamp: 1733274029995 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgdal-netcdf-3.12.3-h97b37a7_3.conda + sha256: 1fd3f6ec72a8e22aa0058f692375ec7020144480c070db5246ac585950249368 + md5: 3a6ab25648dcaa65193bc90571779248 + depends: + - __glibc >=2.17,<3.0.a0 + - hdf4 >=4.2.15,<4.2.16.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libgcc >=14 + - libgdal-core 3.12.3 he63569f_3 + - libgdal-hdf4 3.12.3.* + - libgdal-hdf5 3.12.3.* + - libnetcdf >=4.10.0,<4.10.1.0a0 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 746399 + timestamp: 1775715446575 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.10.0-hd29f476_4.conda sha256: 6ae6e8022a1fef8a4098df5118f8c65dc65f6a65d53987160b7d3ad61fac6e87 md5: 7672b24a85b0db21ef6a4ca48596b55f @@ -8082,42 +8342,23 @@ packages: purls: [] size: 669484 timestamp: 1733277966811 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.25.1-h3f43e3d_1.conda - sha256: 50a9e9815cf3f5bce1b8c5161c0899cc5b6c6052d6d73a4c27f749119e607100 - md5: 2f4de899028319b27eb7a4023be5dfd2 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - license: GPL-3.0-or-later - license_family: GPL - purls: [] - size: 188293 - timestamp: 1753342911214 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.25.1-h493aca8_0.conda - sha256: 3ba35ff26b3b9573b5df5b9bbec5c61476157ec3a9f12c698e2a9350cd4338fd - md5: 98acd9989d0d8d5914ccc86dceb6c6c2 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.12.3-h73a5ae7_3.conda + sha256: af427ee68fdd7f31bdc40b88c399362447426b61a1b4a96ca80bee307cb66e6a + md5: 78777b5cba9e31565682250f78a67ab9 depends: - __osx >=11.0 - - libiconv >=1.18,<2.0a0 - - libintl 0.25.1 h493aca8_0 - license: GPL-3.0-or-later - license_family: GPL - purls: [] - size: 183091 - timestamp: 1751558452316 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda - sha256: e05263e8960da03c341650f2a3ffa4ccae4e111cb198e8933a2908125459e5a6 - md5: fb54c4ea68b460c278d26eea89cfbcc3 - depends: - - libgfortran5 14.2.0 hf1ad2bd_2 - constrains: - - libgfortran-ng ==14.2.0=*_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - hdf4 >=4.2.15,<4.2.16.0a0 + - hdf5 >=2.1.0,<3.0a0 + - libcxx >=19 + - libgdal-core 3.12.3 haccf57a_3 + - libgdal-hdf4 3.12.3.* + - libgdal-hdf5 3.12.3.* + - libnetcdf >=4.10.0,<4.10.1.0a0 + license: MIT + license_family: MIT purls: [] - size: 53733 - timestamp: 1740240690977 + size: 674003 + timestamp: 1775728622505 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_4.conda sha256: 2fe41683928eb3c57066a60ec441e605a69ce703fc933d6d5167debfeba8a144 md5: 53e876bc2d2648319e94c33c57b9ec74 @@ -8130,26 +8371,30 @@ packages: purls: [] size: 29246 timestamp: 1753903898593 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_0.conda - sha256: 9620b4ac9d32fe7eade02081cd60d6a359a927d42bb8e121bd16489acd3c4d8c - md5: e3b7dca2c631782ca1317a994dfe19ec +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee + md5: 9063115da5bc35fdc3e1002e69b9ef6e depends: - - libgfortran5 15.1.0 hb74de2c_0 + - libgfortran5 15.2.0 h68bc16d_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 133859 - timestamp: 1750183546047 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b - md5: 4a55d9e169114b2b90d3ec4604cd7bbf + size: 27523 + timestamp: 1771378269450 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 + md5: 26981599908ed2205366e8fc91b37fc6 depends: - - libgfortran5 13.2.0 hf226fd6_3 + - libgfortran5 15.2.0 hdae7583_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 110233 - timestamp: 1707330749033 + size: 138973 + timestamp: 1771379054939 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda sha256: 8628746a8ecd311f1c0d14bb4f527c18686251538f7164982ccbe3b772de58b5 md5: 044a210bc1d5b8367857755665157413 @@ -8160,16 +8405,6 @@ packages: purls: [] size: 156291 timestamp: 1743863532821 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda - sha256: 688a5968852e677d2a64974c8869ffb120eac21997ced7d15c599f152ef6857e - md5: 4056c857af1a99ee50589a941059ec55 - depends: - - libgfortran 14.2.0 h69a702a_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 53781 - timestamp: 1740240884760 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-15.1.0-h69a702a_4.conda sha256: a5713d8e5a92b4522de132b82368ba93a061e47bc15e6b638c745f28c67fec31 md5: b1a97c0f2c4f1bb2b8872a21fc7e17a7 @@ -8180,19 +8415,6 @@ packages: purls: [] size: 29256 timestamp: 1753904061220 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda - sha256: c17b7cf3073a1f4e1f34d50872934fa326346e104d3c445abc1e62481ad6085c - md5: 556a4fdfac7287d349b8f09aba899693 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14.2.0 - constrains: - - libgfortran 14.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 1461978 - timestamp: 1740240671964 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_4.conda sha256: 3070e5e2681f7f2fb7af0a81b92213f9ab430838900da8b4f9b8cf998ddbdd84 md5: 8a4ab7ff06e4db0be22485332666da0f @@ -8206,18 +8428,19 @@ packages: purls: [] size: 1564595 timestamp: 1753903882088 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a - md5: 66ac81d54e95c534ae488726c1f698ea +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 + md5: 646855f357199a12f02a87382d429b75 depends: - - llvm-openmp >=8.0.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 constrains: - - libgfortran 5.0.0 13_2_0_*_3 + - libgfortran 15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 997381 - timestamp: 1707330687590 + size: 2482475 + timestamp: 1771378241063 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda sha256: 8599453990bd3a449013f5fa3d72302f1c68f0680622d419c3f751ff49f01f17 md5: 69806c1e957069f1d515830dcc9f6cbb @@ -8230,18 +8453,18 @@ packages: purls: [] size: 806566 timestamp: 1743863491726 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_0.conda - sha256: 44b8ce4536cc9a0e59c09ff404ef1b0120d6a91afc32799331d85268cbe42438 - md5: 8b158ccccd67a40218e12626a39065a1 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e + md5: c4a6f7989cffb0544bfd9207b6789971 depends: - - llvm-openmp >=8.0.0 + - libgcc >=15.2.0 constrains: - - libgfortran 15.1.0 + - libgfortran 15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 758352 - timestamp: 1750182604206 + size: 598634 + timestamp: 1771378886363 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d md5: 928b8be80851f5d8ffb016f9c81dae7a @@ -8269,6 +8492,22 @@ packages: purls: [] size: 3961899 timestamp: 1754315006443 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce + md5: bb26456332b07f68bf3b7622ed71c0da + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4398701 + timestamp: 1771863239578 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 md5: 434ca7e50e40f4918ab701e3facd59a0 @@ -8289,16 +8528,6 @@ packages: purls: [] size: 75504 timestamp: 1731330988898 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - sha256: 1a3130e0b9267e781b89399580f3163632d59fe5b0142900d63052ab1a53490e - md5: 06d02030237f4d5b3d9a7e7d348fe3c6 - depends: - - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 459862 - timestamp: 1740240588123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda sha256: e0487a8fec78802ac04da0ac1139c3510992bc58a58cde66619dde3b363c2933 md5: 3baf8976c96134738bba224e9ef6b1e5 @@ -8309,166 +8538,16 @@ packages: purls: [] size: 447289 timestamp: 1753903801049 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - sha256: 3a56c653231d6233de5853dc01f07afad6a332799a39c3772c0948d2e68547e4 - md5: ae36e6296a8dd8e8a9a8375965bf6398 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libcurl >=8.12.1,<9.0a0 - - libgcc >=13 - - libgrpc >=1.71.0,<1.72.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - - openssl >=3.4.1,<4.0a0 - constrains: - - libgoogle-cloud 2.36.0 *_1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1246764 - timestamp: 1741878603939 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.36.0-h9484b08_1.conda - sha256: 122a59ae466addc201ef0058d13aa041defd7fdf7f658bae4497c48441c37152 - md5: c3d4e6a0aee35d92c99b25bb6fb617eb - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libcurl >=8.12.1,<9.0a0 - - libcxx >=18 - - libgrpc >=1.71.0,<1.72.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - openssl >=3.4.1,<4.0a0 - constrains: - - libgoogle-cloud 2.36.0 *_1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 874398 - timestamp: 1741878533033 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - sha256: 54235d990009417bb20071f5ce7c8dcf186b19fa7d24d72bc5efd2ffb108001c - md5: a0f7588c1f0a26d550e7bae4fb49427a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 + md5: 239c5e9546c38a1e884d69effcf4c882 depends: - __glibc >=2.17,<3.0.a0 - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - - libgcc >=13 - - libgoogle-cloud 2.36.0 hc4361e1_1 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl - license: Apache-2.0 - license_family: Apache - purls: [] - size: 785719 - timestamp: 1741878763994 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.36.0-h7081f7f_1.conda - sha256: 64b97ae6ec5173d80ac177f2ef51389e76adecc329bcf9b8e3f2187a0a18d734 - md5: d363a9e8d601aace65af282870a40a09 - depends: - - __osx >=11.0 - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - - libcxx >=18 - - libgoogle-cloud 2.36.0 h9484b08_1 - - libzlib >=1.3.1,<2.0a0 - - openssl - license: Apache-2.0 - license_family: Apache - purls: [] - size: 529458 - timestamp: 1741879638484 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - sha256: 37267300b25f292a6024d7fd9331085fe4943897940263c3a41d6493283b2a18 - md5: c3cfd72cbb14113abee7bbd86f44ad69 - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.5,<2.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.71.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 7920187 - timestamp: 1745229332239 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda - sha256: bd8686a8aa0f840e7a7e63b3be57200d36c136cf1c6280b44a98b89ffac06186 - md5: 65e3fc5e73aa153bb069c1baec51fc12 - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.4,<2.0a0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.71.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 8228423 - timestamp: 1741431701085 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda - sha256: 082668830025c2a2842165724b44d4f742688353932a6705cd61aa4ecb9aa173 - md5: 59fe16787c94d3dc92f2dfa533de97c6 - depends: - - __osx >=11.0 - - c-ares >=1.34.5,<2.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcxx >=18 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.71.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 4908484 - timestamp: 1745191611284 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.71.0-hf667ad3_0.conda - sha256: c10eeef0a1152452fbda7299ca1dfb41e9435aa3a7fee9d169cbceb27b109fb6 - md5: 4c0d9b0ade1b4e01ee5a37c00cdb538d - depends: - - __osx >=11.0 - - c-ares >=1.34.4,<2.0a0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libcxx >=18 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.71.0 - license: Apache-2.0 - license_family: APACHE + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 5210004 - timestamp: 1741422151125 + size: 603262 + timestamp: 1771378117851 - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.2.0-hf40a0c7_0.conda sha256: 2834859c2216f26d9e024c22a0654267d582173bc93b1c44bf6c6416fecb5fd9 md5: 2f433d593a66044c3f163cb25f0a09de @@ -8481,6 +8560,17 @@ packages: purls: [] size: 1326964 timestamp: 1744841715208 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.3.0-h4c17acf_1.conda + sha256: 2bdd1cdd677b119abc5e83069bec2e28fe6bfb21ebaea3cd07acee67f38ea274 + md5: c2a0c1d0120520e979685034e0b79859 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 1448617 + timestamp: 1758894401402 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.2.0-h9a9ea7e_0.conda sha256: 68cb9cd08f8e2e50b3eb4b3cf93ba9fe4bb5fe4cc1777ccfe9dbda6294bf8a0b md5: 4f3cfa78d0b9dcf2b0bc7c558ea1f783 @@ -8492,6 +8582,16 @@ packages: purls: [] size: 525978 timestamp: 1744841624357 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.3.0-h48b13b8_1.conda + sha256: 837fe775ba8ec9f08655bb924e28dba390d917423350333a75fd5eeac0776174 + md5: 6375717f5fcd756de929a06d0e40fab0 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 581579 + timestamp: 1758894814983 - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f md5: 915f5995e94f60e9a4826e0b0920ee88 @@ -8530,44 +8630,6 @@ packages: purls: [] size: 681804 timestamp: 1740128227484 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - sha256: b009d936a67b0cc595cc7b11cde103069a9f334bf39553989705aeaedf2ac6f3 - md5: e155d7130e134619e41dc21276ed6ab5 - depends: - - __glibc >=2.17,<3.0.a0 - - libasprintf >=0.23.1,<1.0a0 - - libgcc >=13 - - libgettextpo >=0.23.1,<1.0a0 - - libunistring >=0,<1.0a0 - license: LGPL-2.0-only - license_family: LGPL - purls: [] - size: 137731 - timestamp: 1741525622652 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libidn2-2.3.8-h38aa460_0.conda - sha256: 6ca9944adcbf8f0dba21f631bcd43c4fcf9ebb240258880dff486465cd34c7fe - md5: 0ec9790e180a73524a591f642579a4f0 - depends: - - __osx >=11.0 - - libasprintf >=0.23.1,<1.0a0 - - libgettextpo >=0.23.1,<1.0a0 - - libintl >=0.23.1,<1.0a0 - - libunistring >=0,<1.0a0 - license: LGPL-2.0-only - license_family: LGPL - purls: [] - size: 146371 - timestamp: 1741525806666 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda - sha256: 99d2cebcd8f84961b86784451b010f5f0a795ed1c08f1e7c76fbb3c22abf021a - md5: 5103f6a6b210a3912faf8d7db516918c - depends: - - __osx >=11.0 - - libiconv >=1.18,<2.0a0 - license: LGPL-2.1-or-later - purls: [] - size: 90957 - timestamp: 1751558394144 - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda sha256: 98b399287e27768bf79d48faba8a99a2289748c65cd342ca21033fab1860d4a4 md5: 9fa334557db9f63da6c9285fd2a48638 @@ -8580,6 +8642,18 @@ packages: purls: [] size: 628947 timestamp: 1745268527144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 + md5: 6178c6f2fb254558238ef4e6c56fb782 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 633831 + timestamp: 1775962768273 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda sha256: 78df2574fa6aa5b6f5fc367c03192f8ddf8e27dc23641468d54e031ff560b9d4 md5: 01caa4fbcaf0e6b08b3aef1151e91745 @@ -8591,6 +8665,17 @@ packages: purls: [] size: 553624 timestamp: 1745268405713 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + sha256: 17e035ae6a520ff6a6bb5dd93a4a7c3895891f4f9743bcb8c6ef607445a31cd0 + md5: b8a7544c83a67258b0e8592ec6a5d322 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 555681 + timestamp: 1775962975624 - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.1-h7b0646d_2.conda sha256: 586e007075e79b9aea4c4f9cf5bcf517ac38cefec353c5a14d49bf52d423683a md5: 7b7baf93533744be2c0228bfa7149e2d @@ -8606,6 +8691,21 @@ packages: purls: [] size: 1504320 timestamp: 1749125999597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda + sha256: 0c2399cef02953b719afe6591223fb11d287d5a108ef8bb9a02dd509a0f738d7 + md5: 1df8c1b1d6665642107883685db6cf37 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libhwy >=1.3.0,<1.4.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1883476 + timestamp: 1770801977654 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.1-h72d67bc_2.conda sha256: bf137ab4a6c85f69dfe8abb8ebd90f645a7baa71abcfa76ea9c9230353a2c877 md5: 605099c8b0970146366c0087b2fc6c81 @@ -8620,6 +8720,35 @@ packages: purls: [] size: 920899 timestamp: 1749126156648 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h913acd8_0.conda + sha256: 44fdcae8ab3958f371565198f82d0748714dccc8a897ca202e54e18bde096f0d + md5: bec365333f77af833f8e46f6de96e2a2 + depends: + - libcxx >=19 + - __osx >=11.0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libhwy >=1.3.0,<1.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1032335 + timestamp: 1770802059749 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1022.conda + sha256: aa55f5779d6bc7bf24dc8257f053d5a0708b5910b6bc6ea1396f15febf812c98 + md5: 00f0f4a9d2eb174015931b1a234d61ca + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.1,<3.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - uriparser >=0.9.8,<1.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 411495 + timestamp: 1761132836798 - conda: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda sha256: 721c3916d41e052ffd8b60e77f2da6ee47ff0d18babfca48ccf93606f1e0656a md5: e8c7620cc49de0c6a2349b6dd6e39beb @@ -8635,6 +8764,20 @@ packages: purls: [] size: 402219 timestamp: 1724667059411 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-hc33e383_1022.conda + sha256: ef32d85c00aefa510e9f36f19609dddc93359c1abbe58c2a695a927d2537721f + md5: a91a7afac6eec20a07d9435bf1372bc1 + depends: + - __osx >=11.0 + - libcxx >=19 + - libexpat >=2.7.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - uriparser >=0.9.8,<1.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 284064 + timestamp: 1761133563691 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda sha256: e578ba448489465b8fea743e214272a9fcfccb0d152ba1ff57657aaa76a0cd7d md5: 891bb2a18eaef684f37bd4fb942cd8b2 @@ -8647,8 +8790,23 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 281362 - timestamp: 1724667138089 + size: 281362 + timestamp: 1724667138089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + build_number: 6 + sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d + md5: 881d801569b201c2e753f03c84b85e15 + depends: + - libblas 3.11.0 6_h4a7cf45_openblas + constrains: + - blas 2.306 openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18624 + timestamp: 1774503065378 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda build_number: 31 sha256: f583661921456e798aba10972a8abbd9d33571c655c1f66eff450edc9cbefcf3 @@ -8664,21 +8822,21 @@ packages: purls: [] size: 16790 timestamp: 1740087997375 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-34_h7ac8fdf_openblas.conda - build_number: 34 - sha256: 9c941d5da239f614b53065bc5f8a705899326c60c9f349d9fbd7bd78298f13ab - md5: f05a31377b4d9a8d8740f47d1e70b70e +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-6_hd9741b5_openblas.conda + build_number: 6 + sha256: 21606b7346810559e259807497b86f438950cf19e71838e44ebaf4bd2b35b549 + md5: ee33d2d05a7c5ea1f67653b37eb74db1 depends: - - libblas 3.9.0 34_h59b9bed_openblas + - libblas 3.11.0 6_h51639a9_openblas constrains: - - liblapacke 3.9.0 34*_openblas - - libcblas 3.9.0 34*_openblas - - blas 2.134 openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas + - blas 2.306 openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 19324 - timestamp: 1754678435277 + size: 18863 + timestamp: 1774504467905 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda build_number: 31 sha256: fe55b9aaf82c6c0192c3d1fcc9b8e884f97492dda9a8de5dae29334b3135fab5 @@ -8694,21 +8852,6 @@ packages: purls: [] size: 17033 timestamp: 1740088134988 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-34_hc9a63f6_openblas.conda - build_number: 34 - sha256: 659c7cc2d7104c5fa33482d28a6ce085fd116ff5625a117b7dd45a3521bf8efc - md5: 94b13d05122e301de02842d021eea5fb - depends: - - libblas 3.9.0 34_h10e41b3_openblas - constrains: - - libcblas 3.9.0 34*_openblas - - blas 2.134 openblas - - liblapacke 3.9.0 34*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 19532 - timestamp: 1754678979401 - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hecd9e04_0.conda sha256: a6fddc510de09075f2b77735c64c7b9334cf5a26900da351779b275d9f9e55e1 md5: 59a7b967b6ef5d63029b1712f8dcf661 @@ -8724,16 +8867,38 @@ packages: purls: [] size: 43987020 timestamp: 1752141980723 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda - sha256: f4f21dfc54b08d462f707b771ecce3fa9bc702a2a05b55654f64154f48b141ef - md5: 0e87378639676987af32fee53ba32258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + sha256: 91bb4f5be1601b40b4995911d785e29387970f0b3c80f33f7f9028f95335399f + md5: 1a2708a460884d6861425b7f9a7bef99 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: 0BSD + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache purls: [] - size: 112709 - timestamp: 1743771086123 + size: 44333366 + timestamp: 1765959132513 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.3-hf7376ad_0.conda + sha256: ad732019e8dd963efb5a54b5ff49168f191246bc418c3033762b6e8cb64b530c + md5: aeb186f7165bf287495a267fa8ff4129 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44235531 + timestamp: 1775641389057 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 md5: 1a580f7796c7bf6393fddb8bbbde58dc @@ -8746,15 +8911,18 @@ packages: purls: [] size: 112894 timestamp: 1749230047870 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_0.conda - sha256: 4291dde55ebe9868491dc29716b84ac3de21b8084cbd4d05c9eea79d206b8ab7 - md5: ba24e6f25225fea3d5b6912e2ac562f8 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* license: 0BSD purls: [] - size: 92295 - timestamp: 1743771392206 + size: 113478 + timestamp: 1775825492909 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda sha256: 0cb92a9e026e7bd4842f410a5c5c665c89b2eb97794ffddba519a626b8ce7285 md5: d6df911d4564d77c4374b02552cb17d1 @@ -8766,6 +8934,51 @@ packages: purls: [] size: 92286 timestamp: 1749230283517 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e + md5: b1fd823b5ae54fbec272cea0811bd8a9 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 92472 + timestamp: 1775825802659 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 + md5: 57c4be259f5e0b99a5983799a228ae55 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 73690 + timestamp: 1769482560514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.10.0-nompi_hb6f1874_103.conda + sha256: 657a4eaf5b9dfb3e8ef76bb4c5a682951ae8dcc9d35cd73c4ff62c144b356d13 + md5: 737fd40c9bfa4076d007f6ff7fa405e3 + depends: + - __glibc >=2.17,<3.0.a0 + - blosc >=1.21.6,<2.0a0 + - bzip2 >=1.0.8,<2.0a0 + - hdf4 >=4.2.15,<4.2.16.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.19.0,<9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzip >=1.11.2,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 861141 + timestamp: 1774633364108 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h00e09a9_116.conda sha256: 8c389b867452b13e7a2e0cf9c8120e0124a4ac1ab419fab23a565e2659084840 md5: 417864857bdb6c2be2e923e89bffd2e8 @@ -8790,6 +9003,29 @@ packages: purls: [] size: 834890 timestamp: 1733232226707 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.10.0-nompi_h28ce51b_103.conda + sha256: f4527262bcf4bf5d5032dfdbe32f0f2fb8f7841480332a5d986488719a16a3a8 + md5: 55d31ae60a8e3aa175d1dc55438755a0 + depends: + - __osx >=11.0 + - blosc >=1.21.6,<2.0a0 + - bzip2 >=1.0.8,<2.0a0 + - hdf4 >=4.2.15,<4.2.16.0a0 + - hdf5 >=2.1.0,<3.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.19.0,<9.0a0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.6 + - libzip >=1.11.2,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 679090 + timestamp: 1774634040865 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnetcdf-4.9.2-nompi_h610d594_116.conda sha256: 70f185c3a6aca2a5d1b5d27e4155cae23ae19b42bdfee6d4b2f4c9b522b3f93b md5: edff7b961600d73f88953eadd659fa40 @@ -8830,6 +9066,23 @@ packages: purls: [] size: 647599 timestamp: 1729571887612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f + md5: 2a45e7f8af083626f009645a6481f12d + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.6,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 663344 + timestamp: 1773854035739 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f md5: 3408c02539cee5f1141f9f11450b6a51 @@ -8846,6 +9099,22 @@ packages: purls: [] size: 566719 timestamp: 1729572385640 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a + md5: 6ea18834adbc3b33df9bd9fb45eaf95b + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 576526 + timestamp: 1773854624224 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 md5: d864d34357c3b65a4b731f78c0801dc4 @@ -8892,27 +9161,27 @@ packages: purls: [] size: 5919288 timestamp: 1739825731827 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_1.conda - sha256: 3f3fc30fe340bc7f8f46fea6a896da52663b4d95caed1f144e8ea114b4bb6b61 - md5: 7e2ba4ca7e6ffebb7f7fc2da2744df61 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9 + md5: 89d61bc91d3f39fda0ca10fcd3c68594 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: - - openblas >=0.3.30,<0.3.31.0a0 + - openblas >=0.3.32,<0.3.33.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 5918161 - timestamp: 1753405234435 + size: 5928890 + timestamp: 1774471724897 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda sha256: 8989d9e01ec8c9b2d48dbb5efbe70b356fcd15990fb53b64fcb84798982c0343 md5: 0cd1148c68f09027ee0b0f0179f77c30 depends: - __osx >=11.0 - - libgfortran 5.* + - libgfortran >=5 - libgfortran5 >=13.2.0 - llvm-openmp >=18.1.8 constrains: @@ -8922,21 +9191,21 @@ packages: purls: [] size: 4168442 timestamp: 1739825514918 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_1.conda - sha256: dfa2e506dcbd2b8e5656333021dbd422d2c1655dcfecbd7a50cac9d223c802b4 - md5: 165b15df4e15aba3a2b63897d6e4c539 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.32-openmp_he657e61_0.conda + sha256: 713e453bde3531c22a660577e59bf91ef578dcdfd5edb1253a399fa23514949a + md5: 3a1111a4b6626abebe8b978bb5a323bf depends: - __osx >=11.0 - libgfortran - libgfortran5 >=14.3.0 - llvm-openmp >=19.1.7 constrains: - - openblas >=0.3.30,<0.3.31.0a0 + - openblas >=0.3.32,<0.3.33.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 4282228 - timestamp: 1753404509306 + size: 4308797 + timestamp: 1774472508546 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda sha256: 215086c108d80349e96051ad14131b751d17af3ed2cb5a34edd62fa89bfe8ead md5: 7df50d44d4a14d6c31a2c54f2cd92157 @@ -8947,93 +9216,6 @@ packages: purls: [] size: 50757 timestamp: 1731330993524 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.21.0-hd1b1c89_0.conda - sha256: b88de51fa55513483e7c80c43d38ddd3559f8d17921879e4c99909ba66e1c16b - md5: 4b25cd8720fd8d5319206e4f899f2707 - depends: - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcurl >=8.14.0,<9.0a0 - - libgrpc >=1.71.0,<1.72.0a0 - - libopentelemetry-cpp-headers 1.21.0 ha770c72_0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libzlib >=1.3.1,<2.0a0 - - nlohmann_json - - prometheus-cpp >=1.3.0,<1.4.0a0 - constrains: - - cpp-opentelemetry-sdk =1.21.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 882002 - timestamp: 1748592427188 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-1.21.0-h0181452_0.conda - sha256: b8efde22e677991932fbae39ff38a1a63214e0df18dc3b21c6560e525fd2e087 - md5: 4f1b40f024b383fdbcc1446f932cc583 - depends: - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcurl >=8.14.0,<9.0a0 - - libgrpc >=1.71.0,<1.72.0a0 - - libopentelemetry-cpp-headers 1.21.0 hce30654_0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libzlib >=1.3.1,<2.0a0 - - nlohmann_json - - prometheus-cpp >=1.3.0,<1.4.0a0 - constrains: - - cpp-opentelemetry-sdk =1.21.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 561337 - timestamp: 1748592611158 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.21.0-ha770c72_0.conda - sha256: dbd811e7a7bd9b96fccffe795ba539ac6ffcc5e564d0bec607f62aa27fa86a17 - md5: 11b1bed92c943d3b741e8a1e1a815ed1 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 359509 - timestamp: 1748592389311 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopentelemetry-cpp-headers-1.21.0-hce30654_0.conda - sha256: e5f85f2c2744a214a16e4ab1ac8b333b426c9842c9bdb1e0dab8c16fb9abe810 - md5: be664b8a15a8cdbdb171668e4b8c203c - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 361341 - timestamp: 1748592544575 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_8_cpu.conda - build_number: 8 - sha256: c3bc9454b25f8d32db047c282645ae33fe96b5d4d9bde66099fb49cf7a6aa90c - md5: d64065a5ab0a8d466b7431049e531995 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h1b9301b_8_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1244187 - timestamp: 1750865279989 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-20.0.0-h636d7b7_8_cpu.conda - build_number: 8 - sha256: 010687e9255bbca6817a0844d87cd7b545199e96ad152eb2a7c6aaf458de04c9 - md5: 6ec5b1c82bce3fe6faa545eff50b8164 - depends: - - __osx >=11.0 - - libarrow 20.0.0 hd5f8272_8_cpu - - libcxx >=18 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 894664 - timestamp: 1750863733742 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda sha256: 0bd91de9b447a2991e666f284ae8c722ffb1d84acb594dbd0c031bd656fa32b2 md5: 70e3400cbbfa03e96dcde7fc13e38c7b @@ -9045,17 +9227,6 @@ packages: purls: [] size: 28424 timestamp: 1749901812541 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda - sha256: 23367d71da58c9a61c8cbd963fcffb92768d4ae5ffbef9a47cdf1f54f98c5c36 - md5: 55199e2ae2c3651f6f9b2a447b47bdc9 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement - purls: [] - size: 288701 - timestamp: 1739952993639 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda sha256: e75a2723000ce3a4b9fd9b9b9ce77553556c93e475a4657db6ed01abc02ea347 md5: 7af8e91b0deb5f8e25d1a595dea79614 @@ -9067,16 +9238,17 @@ packages: purls: [] size: 317390 timestamp: 1753879899951 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.47-h3783ad8_0.conda - sha256: dc93cc30f59b28e7812c6f14d2c2e590b509c38092cce7ababe6b23541b7ed8f - md5: 3550e05e3af94a3fa9cef2694417ccdf +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.57-h421ea60_0.conda + sha256: 06323fb0a831440f0b72a53013182e1d4bb219e3ea958bb37af98b25dc0cf518 + md5: 06f225e6d8c549ad6c0201679828a882 depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 license: zlib-acknowledgement purls: [] - size: 259332 - timestamp: 1739953032676 + size: 317779 + timestamp: 1775692841709 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.50-h280e0eb_1.conda sha256: a2e0240fb0c79668047b528976872307ea80cb330baf8bf6624ac2c6443449df md5: 4d0f5ce02033286551a32208a5519884 @@ -9087,6 +9259,16 @@ packages: purls: [] size: 287056 timestamp: 1753879907258 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.57-h132b30e_0.conda + sha256: 3f2b76a220844a7b2217688910d59c5fce075f54d0cee03da55a344e6be8f8a0 + md5: 1a28041d8d998688fd82e25b45582b21 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 289615 + timestamp: 1775692978357 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda sha256: 2dbcef0db82e0e7b6895b6c0dadd3d36c607044c40290c7ca10656f3fca3166f md5: 6458be24f09e1b034902ab44fe9de908 @@ -9101,126 +9283,33 @@ packages: purls: [] size: 2680582 timestamp: 1746743259857 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - sha256: 9965b1ada1f997202ad8c5a960e69057280b7b926c718df9b07c62924d9c1d73 - md5: 452518a9744fbac05fb45531979bdf29 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + sha256: c7e61b86c273ec1ce92c0e087d1a0f3ed3b9485507c6cd35e03bc63de1b6b03f + md5: 405ec206d230d9d37ad7c2636114cbf4 depends: - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.10,<2.7.0a0 + - openssl >=3.5.5,<4.0a0 + license: PostgreSQL purls: [] - size: 3352450 - timestamp: 1741126291267 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda - sha256: 674635c341a7838138a0698fc5704eab3b9a3a14f85e6f47a9d7568b8fa01a11 - md5: 25b96b519eb2ed19faeef1c12954e82b + size: 2865686 + timestamp: 1772136328077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h46dd2a8_20.conda + sha256: eb4082a5135102f5ba9c302da13164d4ed1181d5f0db9d49e5e11a815a7b526f + md5: df81fd57eacf341588d728c97920e86d depends: - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 + - geos >=3.14.1,<3.14.2.0a0 - libgcc >=14 - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3475015 - timestamp: 1753801238063 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda - sha256: 8c6350afed4c78fc5fbab85b8f00af084586176fd5f6e4340f66d2e239d028dc - md5: cb31a05af57f76e19766ef8b30b3b6d3 - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcxx >=19 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 2637991 - timestamp: 1753800039682 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.29.3-hccd9074_0.conda - sha256: 49d424913d018f3849c4153088889cb5ac4a37e5acedc35336b78c8a8450f764 - md5: 243704f59b7c09aab5b3070538026c92 - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 2630681 - timestamp: 1741125634671 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - sha256: 392ec1e49370eb03270ffd4cc8d727f8e03e1e3a92b12f10c53f396ae4554668 - md5: 545e93a513c10603327c76c15485e946 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libgcc >=13 - - libstdcxx >=13 - constrains: - - re2 2024.07.02.* - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 210073 - timestamp: 1741121121238 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda - sha256: 89535af669f63e0dc4ae75a5fc9abb69b724b35e0f2ca0304c3d9744a55c8310 - md5: f6881c04e6617ebba22d237c36f1b88e - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libgcc >=13 - - libstdcxx >=13 - constrains: - - re2 2025.06.26.* - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 211720 - timestamp: 1751053073521 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-hd41c47c_3.conda - sha256: 038db1da2b9f353df6532af224c20d985228d3408d2af25aa34974f6dbee76e1 - md5: 1466284c71c62f7a9c4fa08ed8940f20 - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - - libcxx >=18 - constrains: - - re2 2024.07.02.* - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 167268 - timestamp: 1741121355716 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda - sha256: d125de07bcdeadddd415d2f855f7fe383b066a373fa88244e51c58fef5cb8774 - md5: ce95f5724e52eb76f4cd4be6e7a0d9ae - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libcxx >=18 - constrains: - - re2 2025.06.26.* - license: BSD-3-Clause - license_family: BSD + license: GPL-2.0-or-later + license_family: GPL purls: [] - size: 167704 - timestamp: 1751053331260 + size: 231670 + timestamp: 1761670395043 - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda sha256: 394cf4356e0e26c4c95c9681e01e4def77049374ac78b737193e38c1861e8042 md5: 4f40dea96ff9935e7bd48893c24891b9 @@ -9246,6 +9335,42 @@ packages: purls: [] size: 192154 timestamp: 1741167142737 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha909e78_20.conda + sha256: 2b28c777889b1b638244f65d5bef4a8ba4624bdb740cecf26c845876653552c2 + md5: d07359797436cfc891b38e203cf0caac + depends: + - __osx >=11.0 + - geos >=3.14.1,<3.14.2.0a0 + - libcxx >=19 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 192590 + timestamp: 1761670939075 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda + sha256: 403c1ad74ee70caaac02216a233ef9ec4531497ee14e7fea93a254a005ece88d + md5: 887245164c408c289d0cb45bd508ce5f + depends: + - __glibc >=2.17,<3.0.a0 + - freexl >=2 + - freexl >=2.0.0,<3.0a0 + - geos >=3.14.1,<3.14.2.0a0 + - libgcc >=14 + - librttopo >=1.1.0,<1.2.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libxml2-devel + - libzlib >=1.3.1,<2.0a0 + - proj >=9.7.0,<9.8.0a0 + - sqlite + - zlib + license: MPL-1.1 + license_family: MOZILLA + purls: [] + size: 4097449 + timestamp: 1761681679109 - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda sha256: 82f7f5f4498a561edf84146bfcff3197e8b2d8796731d354446fc4fd6d058e94 md5: d010b5907ed39fdb93eb6180ab925115 @@ -9268,6 +9393,30 @@ packages: purls: [] size: 4047775 timestamp: 1742308519433 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-gpl_ha239c29_119.conda + sha256: 631e1bca330abc13bcbb0a16aea47aec969ddd5a82f695bdc840497069fc1dec + md5: babf54eb886241155434878f728ea099 + depends: + - __osx >=11.0 + - freexl >=2 + - freexl >=2.0.0,<3.0a0 + - geos >=3.14.1,<3.14.2.0a0 + - libcxx >=19 + - libiconv >=1.18,<2.0a0 + - librttopo >=1.1.0,<1.2.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libxml2-devel + - libzlib >=1.3.1,<2.0a0 + - proj >=9.7.0,<9.8.0a0 + - sqlite + - zlib + license: MPL-1.1 + license_family: MOZILLA + purls: [] + size: 2712485 + timestamp: 1761681521138 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda sha256: f586ba7ffa445514bf97778c3f6720a83980e8e9a4aa8c95f060d5ecf3ea531a md5: c2d44056e47c6985bb1dbe8c60788f64 @@ -9290,17 +9439,6 @@ packages: purls: [] size: 2942231 timestamp: 1742308744175 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - sha256: a086289bf75c33adc1daed3f1422024504ffb5c3c8b3285c49f025c29708ed16 - md5: 962d6ac93c30b1dfc54c9cccafd1003e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense - purls: [] - size: 918664 - timestamp: 1742083674731 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda sha256: 6d9c32fc369af5a84875725f7ddfbfc2ace795c28f246dc70055a79f9b2003da md5: 0b367fad34931cb79e0d6b7e5c06bb1c @@ -9312,16 +9450,18 @@ packages: purls: [] size: 932581 timestamp: 1753948484112 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.49.1-h3f77e49_2.conda - sha256: 907a95f73623c343fc14785cbfefcb7a6b4f2bcf9294fcb295c121611c3a590d - md5: 3b1e330d775170ac46dff9a94c253bd0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + sha256: ec37c79f737933bbac965f5dc0f08ef2790247129a84bb3114fad4900adce401 + md5: 810d83373448da85c3f673fbcb7ad3a3 depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing purls: [] - size: 900188 - timestamp: 1742083865246 + size: 958864 + timestamp: 1775753750179 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda sha256: 802ebe62e6bc59fc26b26276b793e0542cfff2d03c086440aeaf72fb8bbcec44 md5: 1dcb0468f5146e38fae99aef9656034b @@ -9333,6 +9473,16 @@ packages: purls: [] size: 902645 timestamp: 1753948599139 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda + sha256: 1a9d1e3e18dbb0b87cff3b40c3e42703730d7ac7ee9b9322c2682196a81ba0c3 + md5: 8423c008105df35485e184066cad4566 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 920039 + timestamp: 1775754485962 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 md5: eecce068c7e4eddeb169591baac20ac4 @@ -9381,17 +9531,6 @@ packages: purls: [] size: 279028 timestamp: 1732349599461 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - sha256: 8f5bd92e4a24e1d35ba015c5252e8f818898478cb3bc50bd8b12ab54707dc4da - md5: a78c856b6dc6bf4ea8daeb9beaaa3fb0 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 14.2.0 h767d61c_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 3884556 - timestamp: 1740240685253 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_4.conda sha256: b5b239e5fca53ff90669af1686c86282c970dd8204ebf477cf679872eb6d48ac md5: 3c376af8888c386b9d3d1c2701e2f3ab @@ -9403,55 +9542,39 @@ packages: purls: [] size: 3903453 timestamp: 1753903894186 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - sha256: e86f38b007cf97cc2c67cd519f2de12a313c4ee3f5ef11652ad08932a5e34189 - md5: c75da67f045c2627f59e6fcb5f4e3a9b +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb depends: - - libstdcxx 14.2.0 h8f9b012_2 + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_18 + constrains: + - libstdcxx-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 53830 - timestamp: 1740240722530 + size: 5852330 + timestamp: 1771378262446 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_4.conda sha256: 81c841c1cf4c0d06414aaa38a249f9fdd390554943065c3a0b18a9fb7e8cc495 md5: 2d34729cbc1da0ec988e57b13b712067 depends: - - libstdcxx 15.1.0 h8f9b012_4 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 29317 - timestamp: 1753903924491 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - sha256: ebb395232973c18745b86c9a399a4725b2c39293c9a91b8e59251be013db42f0 - md5: dcb95c0a98ba9ff737f7ae482aef7833 - depends: - - __glibc >=2.17,<3.0.a0 - - libevent >=2.1.12,<2.1.13.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: Apache-2.0 - license_family: APACHE + - libstdcxx 15.1.0 h8f9b012_4 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 425773 - timestamp: 1727205853307 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - sha256: 7a6c7d5f58cbbc2ccd6493b4b821639fdb0701b9b04c737a949e8cb6adf1c9ad - md5: 7ce2bd2f650f8c31ad7ba4c7bfea61b7 + size: 29317 + timestamp: 1753903924491 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 + md5: 6235adb93d064ecdf3d44faee6f468de depends: - - __osx >=11.0 - - libcxx >=17 - - libevent >=2.1.12,<2.1.13.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: Apache-2.0 - license_family: APACHE + - libstdcxx 15.2.0 h934c35e_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 324342 - timestamp: 1727206096912 + size: 27575 + timestamp: 1771378314494 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h8261f1e_6.conda sha256: c62694cd117548d810d2803da6d9063f78b1ffbf7367432c5388ce89474e9ebe md5: b6093922931b535a7ba566b6f384fbe6 @@ -9470,24 +9593,24 @@ packages: purls: [] size: 433078 timestamp: 1755011934951 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - sha256: b224e16b88d76ea95e4af56e2bc638c603bd26a770b98d117d04541d3aafa002 - md5: 0ea6510969e1296cc19966fad481f6de +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 + md5: cd5a90476766d53e901500df9215e927 depends: - __glibc >=2.17,<3.0.a0 - lerc >=4.0.0,<5.0a0 - - libdeflate >=1.23,<1.24.0a0 - - libgcc >=13 - - libjpeg-turbo >=3.0.0,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libstdcxx >=13 - - libwebp-base >=1.4.0,<2.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zstd >=1.5.7,<1.6.0a0 license: HPND purls: [] - size: 428173 - timestamp: 1734398813264 + size: 435273 + timestamp: 1762022005702 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h025e3ab_6.conda sha256: d6ed4b307dde5d66b73aa3f155b3ed40ba9394947cfe148e2cd07605ef4b410b md5: d0862034c2c563ef1f52a3237c133d8d @@ -9505,60 +9628,23 @@ packages: purls: [] size: 372136 timestamp: 1755012109767 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - sha256: 91417846157e04992801438a496b151df89604b2e7c6775d6f701fcd0cbed5ae - md5: a5d084a957563e614ec0c0196d890654 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + sha256: e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f + md5: e2a72ab2fa54ecb6abab2b26cde93500 depends: - __osx >=11.0 - lerc >=4.0.0,<5.0a0 - - libcxx >=18 - - libdeflate >=1.23,<1.24.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libwebp-base >=1.4.0,<2.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zstd >=1.5.7,<1.6.0a0 license: HPND purls: [] - size: 370600 - timestamp: 1734398863052 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - sha256: e88c45505921db29c08df3439ddb7f771bbff35f95e7d3103bf365d5d6ce2a6d - md5: 7245a044b4a1980ed83196176b78b73a - depends: - - libgcc-ng >=9.3.0 - license: GPL-3.0-only OR LGPL-3.0-only - purls: [] - size: 1433436 - timestamp: 1626955018689 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libunistring-0.9.10-h3422bc3_0.tar.bz2 - sha256: a1afe12ab199f82f339eae83405d293d197f2485d45346a709703bc7e8299949 - md5: d88e77a4861e20bd96bde6628ee7a5ae - license: GPL-3.0-only OR LGPL-3.0-only - purls: [] - size: 1577561 - timestamp: 1626955172521 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h202a827_0.conda - sha256: c4ca78341abb308134e605476d170d6f00deba1ec71b0b760326f36778972c0e - md5: 0f98f3e95272d118f7931b6bef69bfe5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 83080 - timestamp: 1748341697686 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.10.0-h74a6958_0.conda - sha256: db843568afeafcb7eeac95b44f00f3e5964b9bb6b94d6880886843416d3f7618 - md5: 639880d40b6e2083e20b86a726154864 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 83815 - timestamp: 1748341829716 + size: 373892 + timestamp: 1762022345545 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 md5: 40b61aab5c7ba9ff276c41cfffe6b80b @@ -9569,19 +9655,33 @@ packages: purls: [] size: 33601 timestamp: 1680112270483 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf - md5: 63f790534398730f59e1b899c3644d4a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + sha256: bc1b08c92626c91500fd9f26f2c797f3eb153b627d53e9c13cd167f1e12b2829 + md5: 38ffe67b78c9d4de527be8315e5ada2c depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - libwebp 1.5.0 + - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 429973 - timestamp: 1734777489810 + size: 40297 + timestamp: 1775052476770 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b + md5: 31ad065eda3c2d88f8215b1289df9c89 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 199795 + timestamp: 1770077125520 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b md5: aea31d2e5b1091feca96fcfe945c3cf9 @@ -9595,18 +9695,6 @@ packages: purls: [] size: 429011 timestamp: 1752159441324 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a - md5: 569466afeb84f90d5bb88c11cc23d746 - depends: - - __osx >=11.0 - constrains: - - libwebp 1.5.0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 290013 - timestamp: 1734777593617 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda sha256: a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd md5: e5e7d467f80da752be17796b87fe6385 @@ -9671,21 +9759,23 @@ packages: purls: [] size: 791328 timestamp: 1754703902365 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h4bc477f_1.conda - sha256: 01c471d9912c482297fd8e83afc193101ff4504c72361b6aec6d07f2fa379263 - md5: ad1f1f8238834cd3c88ceeaee8da444a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c + md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 depends: - __glibc >=2.17,<3.0.a0 - - icu >=75.1,<76.0a0 - - libgcc >=13 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - license: MIT + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative license_family: MIT purls: [] - size: 692101 - timestamp: 1743794568181 + size: 837922 + timestamp: 1764794163823 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h04c0eec_1.conda sha256: 03deb1ec6edfafc5aaeecadfc445ee436fecffcda11fcd97fde9b6632acb583f md5: 10bcbd05e1c1c9d652fccb42b776a9fa @@ -9701,20 +9791,22 @@ packages: purls: [] size: 698448 timestamp: 1754315344761 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.7-h52572c6_1.conda - sha256: 7afd5879a72e37f44a68b4af3e03f37fc1a310f041bf31fad2461d9a157e823b - md5: 522fcdaebf3bac06a7b5a78e0a89195b +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda + sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 + md5: e49238a1609f9a4a844b09d9926f2c3d depends: - - __osx >=11.0 - - icu >=75.1,<76.0a0 + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 hca6bf5a_0 - libzlib >=1.3.1,<2.0a0 license: MIT license_family: MIT purls: [] - size: 583561 - timestamp: 1743794674233 + size: 45968 + timestamp: 1772704614539 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h4a9ca0c_1.conda sha256: 365ad1fa0b213e3712d882f187e6de7f601a0e883717f54fe69c344515cdba78 md5: 05774cda4a601fc21830842648b3fe04 @@ -9729,17 +9821,100 @@ packages: purls: [] size: 582952 timestamp: 1754315458016 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda - sha256: 684e9b67ef7b9ca0ca993762eeb39705ec58e2e7f958555c758da7ef416db9f3 - md5: e71f31f8cfb0a91439f2086fc8aa0461 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.2-h8d039ee_0.conda + sha256: 99cb32dd06a2e58c12981b71a84b052293f27b5ab042e3f21d895f5d7ee13eff + md5: e476ba84e57f2bd2004a27381812ad4e depends: - - libgcc-ng >=12 - - libxml2 >=2.12.1,<3.0.0a0 + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 h5ef1a60_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 41206 + timestamp: 1772704982288 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c + md5: f3bc152cb4f86babe30f3a4bf0dbef69 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.2 + license: MIT + license_family: MIT + purls: [] + size: 557492 + timestamp: 1772704601644 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.2-h5ef1a60_0.conda + sha256: 6432259204e78c8a8a815afae987fbf60bd722605fe2c4b022e65196b17d4537 + md5: b284e2b02d53ef7981613839fb86beee + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.2 + license: MIT + license_family: MIT + purls: [] + size: 466220 + timestamp: 1772704950232 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-devel-2.15.2-he237659_0.conda + sha256: 4ac0f70a6b985573f057f839445044d6e8c0312599c4839488296666ee56a8dd + md5: 52a4ab30ceaaf314737892c82aadeca4 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2 2.15.2 he237659_0 + - libxml2-16 2.15.2 hca6bf5a_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 80239 + timestamp: 1772704626884 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-devel-2.15.2-h8d039ee_0.conda + sha256: 68a19126415ec95be7ee8c2d59b515690c59666e9025759ec9bbf5fcea894af4 + md5: 5048716172cc56fffb232db0d25a0da1 + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2 2.15.2 h8d039ee_0 + - libxml2-16 2.15.2 h5ef1a60_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 80392 + timestamp: 1772705008439 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 + md5: 87e6096ec6d542d1c1f8b33245fe8300 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 license: MIT license_family: MIT purls: [] - size: 254297 - timestamp: 1701628814990 + size: 245434 + timestamp: 1757963724977 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda sha256: 35ddfc0335a18677dd70995fa99b8f594da3beb05c11289c87b6de5b930b47a3 md5: 31059dc620fa57d787e3899ed0421e6d @@ -9752,16 +9927,6 @@ packages: purls: [] size: 244399 timestamp: 1753273455036 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.39-h223e5b9_0.conda - sha256: 2f1d99ef3fb960f23a63f06cf65ee621a5594a8b4616f35d9805be44617a92af - md5: 560c9cacc33e927f55b998eaa0cb1732 - depends: - - libxml2 >=2.12.1,<2.14.0a0 - license: MIT - license_family: MIT - purls: [] - size: 225705 - timestamp: 1701628966565 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-h429d6fd_0.conda sha256: 3491de18eb09c9d6298a7753bcc23b49a58886bd097d2653accaa1290f92c2c6 md5: f25eb0a9e2c2ecfd33a4b97bb1a84fb6 @@ -9773,6 +9938,18 @@ packages: purls: [] size: 219752 timestamp: 1753273652440 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.43-hb2570ba_1.conda + sha256: 7a4d0676ab1407fecb24d4ada7fe31a98c8889f61f04612ea533599c22b8c472 + md5: 90f7ed12bb3c164c758131b3d3c2ab0c + depends: + - __osx >=11.0 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 220345 + timestamp: 1757964000982 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda sha256: 991e7348b0f650d495fb6d8aa9f8c727bdf52dabf5853c0cc671439b160dce48 md5: a7b27c075c9b7f459f1c022090697cba @@ -9813,6 +9990,18 @@ packages: purls: [] size: 60963 timestamp: 1727963148474 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 63629 + timestamp: 1774072609062 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b md5: 369964e85dc26bfe78f41399b366c435 @@ -9825,6 +10014,18 @@ packages: purls: [] size: 46438 timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 47759 + timestamp: 1774072956767 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 sha256: ff94f30b2e86cbad6296cf3e5804d442d9e881f7ba8080d92170981662528c6e md5: c66fe2d123249af7651ebde8984c51c2 @@ -9859,65 +10060,51 @@ packages: purls: [] size: 283300 timestamp: 1753978829840 -- conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - sha256: 1fff6550e0adaaf49dd844038b6034657de507ca50ac695e22284898e8c1e2c2 - md5: 146d3cc72c65fdac198c09effb6ad133 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/llvmlite?source=hash-mapping - size: 29996918 - timestamp: 1742815908291 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmlite-0.44.0-py312h728bc31_1.conda - sha256: a8c486e6094863fdcd0ddf6f8e53d25b604c3b246bd70c26aaee42336c059de0 - md5: dfb6368d07cc87bc9ca88e50d8c957eb +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.3-hc7d1edf_0.conda + sha256: 71dcf9a9df103f57a0d5b0abc2594a15c2dd3afe52f07ac2d1c471552a61fb8d + md5: 086b00b77f5f0f7ef5c2a99855650df4 depends: - __osx >=11.0 - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/llvmlite?source=hash-mapping - size: 18899919 - timestamp: 1742816321457 -- conda: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - md5: 91e27ef3d05cc772ce627e51cff111c4 - depends: - - python >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/locket?source=hash-mapping - size: 8250 - timestamp: 1650660473123 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-5.4.0-py312h68d7fa5_0.conda - sha256: ee072aef31b8ec89bed4600ceb4c73aea81c2246c3244b2872571584b5dce045 - md5: 9143d654930fa7d0ad1e351705419cb5 + constrains: + - openmp 22.1.3|22.1.3.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 285886 + timestamp: 1775712563398 +- pypi: https://files.pythonhosted.org/packages/1c/d4/33c8af00f0bf6f552d74f3a054f648af2c5bc6bece97972f3bfadce4f5ec/llvmlite-0.47.0-cp314-cp314-macosx_12_0_arm64.whl + name: llvmlite + version: 0.47.0 + sha256: de966c626c35c9dff5ae7bf12db25637738d0df83fc370cf793bc94d43d92d14 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: llvmlite + version: 0.47.0 + sha256: 5853bf26160857c0c2573415ff4efe01c4c651e59e2c55c2a088740acfee51cd + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl + name: llvmlite + version: 0.47.0 + sha256: 306a265f408c259067257a732c8e159284334018b4083a9e35f67d19792b164f + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + name: locket + version: 1.0.0 + sha256: b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda + sha256: e4a07f357a4cf195a2345dabd98deab80f4d53574abe712a9cc7f22d3f2cc2c3 + md5: 49647ac1de4d1e4b49124aedf3934e02 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libxml2 >=2.13.7,<2.14.0a0 - - libxslt >=1.1.39,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause and MIT-CMU + - __unix + - python >=3.9 + license: MIT + license_family: MIT purls: - - pkg:pypi/lxml?source=hash-mapping - size: 1404621 - timestamp: 1745414227771 + - pkg:pypi/loguru?source=hash-mapping + size: 59696 + timestamp: 1746634858826 - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.0-py312h68d7fa5_0.conda sha256: 7d0b6283aab071a83731021384f31a132db341e3d784757e3cc60b7500a1af37 md5: 5f672474eea97c1d115e9ddd28ab8076 @@ -9934,22 +10121,23 @@ packages: - pkg:pypi/lxml?source=hash-mapping size: 1593117 timestamp: 1751021703851 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-5.4.0-py312hc2c121e_0.conda - sha256: d9ea36f6b68ab73e7c65040f46bf6f1566d578fd2ae1f6e2fa4fc72c16f607a6 - md5: 8bf1e82fa3bfb5905796c6e52d623903 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.4-py312h63ddcf0_0.conda + sha256: 1ea4a5ae5511d4e8bc3ccc56440a861a97d24b1d05139924e583bc9ba35be4d6 + md5: 1fca9c627365cbea654a1aeef2b0044a depends: - - __osx >=11.0 - - libxml2 >=2.13.7,<2.14.0a0 - - libxslt >=1.1.39,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libxslt >=1.1.43,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: BSD-3-Clause and MIT-CMU purls: - - pkg:pypi/lxml?source=hash-mapping - size: 1201897 - timestamp: 1745414239165 + - pkg:pypi/lxml?source=compressed-mapping + size: 1571533 + timestamp: 1776025079664 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.0-py312hc2c121e_0.conda sha256: cc0d35b5a80ad4807020cfc66bc08e0ead887e85c624649911c761a3f58302b4 md5: 7bcb5ffb2f3b83bcb19049481c7b6c57 @@ -9966,36 +10154,23 @@ packages: - pkg:pypi/lxml?source=hash-mapping size: 1366081 timestamp: 1751021867744 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.4-py312hf0f0c11_0.conda - sha256: a04aff570a27173eea3a2b515b4794ce20e058b658f642475f72ccc1f6d88cff - md5: f770ae71fc1800e7a735a7b452c0ab81 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - lz4-c >=1.10.0,<1.11.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/lz4?source=hash-mapping - size: 40315 - timestamp: 1746562078119 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.4-py312hf263c89_0.conda - sha256: 265cd74fdace1106dbaf395bcf8d1cc2b1d20f998ff0694451f2a91f9804c7d8 - md5: be22e508c6268b4c7b7b147845deb7f5 - depends: - - __osx >=11.0 - - lz4-c >=1.10.0,<1.11.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.0.4-py314h264e108_0.conda + sha256: 3a9f4ff901868fc35bd2d8aaae10071e351afc55d20e86daca96de6646a671e7 + md5: d2de5768285432b63f33d8b39c72b1d7 + depends: + - __osx >=11.0 + - libxml2 + - libxml2-16 >=2.14.6 + - libxslt >=1.1.43,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause and MIT-CMU purls: - - pkg:pypi/lz4?source=hash-mapping - size: 106981 - timestamp: 1746562316986 + - pkg:pypi/lxml?source=compressed-mapping + size: 1375397 + timestamp: 1776025480270 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -10074,22 +10249,6 @@ packages: - pkg:pypi/mapclassify?source=hash-mapping size: 810830 timestamp: 1752271625200 -- conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.8.1-pyhd8ed1ab_1.conda - sha256: c498a016b233be5a7defee443733a82d5fe41b83016ca8a136876a64fd15564b - md5: c48bbb2bcc3f9f46741a7915d67e6839 - depends: - - networkx >=2.7 - - numpy >=1.23 - - pandas >=1.4,!=1.5.0 - - python >=3.9 - - scikit-learn >=1.0 - - scipy >=1.8 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/mapclassify?source=hash-mapping - size: 56772 - timestamp: 1733731193211 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e md5: 5b5203189eb668f042ac2b0826244964 @@ -10102,12 +10261,12 @@ packages: - pkg:pypi/markdown-it-py?source=compressed-mapping size: 64736 timestamp: 1754951288511 -- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - sha256: 4a6bf68d2a2b669fecc9a4a009abd1cf8e72c2289522ff00d81b5a6e51ae78f5 - md5: eb227c3e0bf58f5bd69c0532b157975b +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + sha256: 5f3aad1f3a685ed0b591faad335957dbdb1b73abfd6fc731a0d42718e0653b33 + md5: 93a4752d42b12943a355b682ee43285b depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - libgcc >=14 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 constrains: @@ -10115,12 +10274,12 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 24604 - timestamp: 1733219911494 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - sha256: 4aa997b244014d3707eeef54ab0ee497d12c0d0d184018960cce096169758283 - md5: 46e547061080fddf9cf95a0327e8aba6 + - pkg:pypi/markupsafe?source=compressed-mapping + size: 26057 + timestamp: 1772445297924 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + sha256: 330394fb9140995b29ae215a19fad46fcc6691bdd1b7654513d55a19aaa091c1 + md5: 11d95ab83ef0a82cc2de12c1e0b47fe4 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -10132,8 +10291,24 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 24048 - timestamp: 1733219945697 + size: 25564 + timestamp: 1772445846939 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + sha256: 411153d14ee0d98be6e3751cf5cc0502db17bce2deebebb8779e33d29d0e525f + md5: d33c0a15882b70255abdd54711b06a45 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=compressed-mapping + size: 27256 + timestamp: 1772445397216 - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.5-py312h7900ff3_0.conda sha256: 34202064bc5a358ebbf561306dd259fd220ee22b14958f62d4990886f26db44a md5: 32511cef24b61a6e955417060d3812c5 @@ -10149,6 +10324,20 @@ packages: - pkg:pypi/matplotlib?source=compressed-mapping size: 17348 timestamp: 1754005897072 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda + sha256: 6d66175e1a4ffb91ed954e2c11066d2e03a05bce951a808275069836ddfc993e + md5: 2a7663896e5aab10b60833a768c4c272 + depends: + - matplotlib-base >=3.10.8,<3.10.9.0a0 + - pyside6 >=6.7.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 17415 + timestamp: 1763055550515 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.5-py312h1f38498_0.conda sha256: e75ed12886976f48e938ccd3afcc41165904589133b03e4e0f1c1ddd6ff3a071 md5: 92933847a00ad390bc9fe99c50c73b3f @@ -10161,36 +10350,21 @@ packages: license_family: PSF purls: - pkg:pypi/matplotlib?source=compressed-mapping - size: 17451 - timestamp: 1754005874746 -- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.1-py312hd3ec401_0.conda - sha256: 0fffd86b49f74e826be54b3bf26e5bbdebaecd2ed5538fc78292f4c0ff827555 - md5: 514d8a6894286f6d9894b352782c7e18 - depends: - - __glibc >=2.17,<3.0.a0 - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype >=2.12.1,<3.0a0 - - kiwisolver >=1.3.1 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - numpy >=1.23 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.12,<3.13.0a0 - - python-dateutil >=2.7 - - python_abi 3.12.* *_cp312 - - qhull >=2020.2,<2020.3.0a0 - - tk >=8.6.13,<8.7.0a0 + size: 17451 + timestamp: 1754005874746 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.8-py314he55896b_0.conda + sha256: 070b99e48cd6dda06086116626203c100e6f34af771b34384848ce5abeaf683e + md5: ad9a3f773f13989b92b41c0eabed5a38 + depends: + - matplotlib-base >=3.10.8,<3.10.9.0a0 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 license: PSF-2.0 license_family: PSF - purls: - - pkg:pypi/matplotlib?source=hash-mapping - size: 8304072 - timestamp: 1740781077913 + purls: [] + size: 17538 + timestamp: 1763055987021 - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.5-py312he3d6523_0.conda sha256: 66e94e6226fd3dd04bb89d04079e2d8e2c74d923c0bbf255e483f127aee621ff md5: 9246288e5ef2a944f7c9c648f9f331c7 @@ -10221,33 +10395,36 @@ packages: - pkg:pypi/matplotlib?source=compressed-mapping size: 8071030 timestamp: 1754005868258 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.1-py312hdbc7e53_0.conda - sha256: 45c20d3523cd6581950a804b0522d4d0fc1ed04306c06283156dbf572a48bbb5 - md5: 81e256fa3f734686f049a8cdb930887f +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda + sha256: 70cf0e7bfd50ef50eb712a6ca1eef0ef0d63b7884292acc81353327b434b548c + md5: b8dc157bbbb69c1407478feede8b7b42 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 - contourpy >=1.0.1 - cycler >=0.10 - fonttools >=4.22.0 - - freetype >=2.12.1,<3.0a0 + - freetype - kiwisolver >=1.3.1 - - libcxx >=18 - - numpy >=1.19,<3 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libstdcxx >=14 - numpy >=1.23 + - numpy >=1.23,<3 - packaging >=20.0 - pillow >=8 - pyparsing >=2.3.1 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python-dateutil >=2.7 - python_abi 3.12.* *_cp312 - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 license: PSF-2.0 license_family: PSF purls: - pkg:pypi/matplotlib?source=hash-mapping - size: 8025969 - timestamp: 1740781197157 + size: 8442149 + timestamp: 1763055517581 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.5-py312h05635fa_0.conda sha256: bc44413a9f1984e6ab39bd0b805430a4e11e41e1d0389254c4d2d056be610512 md5: 96e5de8c96b4557430f6af0d6693d4c9 @@ -10277,6 +10454,47 @@ packages: - pkg:pypi/matplotlib?source=compressed-mapping size: 8031746 timestamp: 1754005848626 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda + sha256: 198dcc0ed83e78bc7bf48e6ef8d4ecd220e9cf1f07db98508251b2bc0be067f9 + md5: c84152e510d41378b8758826655b6ed7 + depends: + - __osx >=11.0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libcxx >=19 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8286510 + timestamp: 1763055937766 +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 + md5: 00e120ce3e40bad7bfc78861ce3c4a25 + depends: + - python >=3.10 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping + size: 15175 + timestamp: 1761214578417 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -10306,42 +10524,6 @@ packages: purls: [] size: 93471 timestamp: 1746450475308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.7-h05a5f5f_3.conda - sha256: 9a9459024e9cdc68c799b057de021b8c652de542e24e9e48f2726578e822659c - md5: eec77634ccdb2ba6c231290c399b1dae - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - libgcc >=13 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: Zlib - license_family: Other - purls: [] - size: 92332 - timestamp: 1734012081442 -- conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.9-h05a5f5f_0.conda - sha256: e2f163bc0deb16a1826696b647c3fbaea455c074f87343a4cb868d6d77921e21 - md5: d031ed0497634655765d636329bb4c20 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - libgcc >=13 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: Zlib - license_family: Other - purls: [] - size: 92879 - timestamp: 1743943574510 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.10-hff1a8ea_0.conda sha256: b3503bd3da5d48d57b44835f423951f487574e08a999f13288c81464ac293840 md5: 93def148863d840e500490d6d78722f9 @@ -10359,144 +10541,96 @@ packages: purls: [] size: 78411 timestamp: 1746450560057 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - sha256: 6d904a6fc5e875e687b9fab244d5b286961222d72f546f9939d8f80ebe873c1c - md5: 666bd61287ad7ee417884eacd9aef2ea - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libcxx >=18 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: Zlib - license_family: Other - purls: [] - size: 77597 - timestamp: 1734012196026 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.9-hff1a8ea_0.conda - sha256: 4242003c1ae1205d332ceed1c27aa4cddcc83c5710252836a9bce6c8e0c71765 - md5: 477a73609bf1f7435c83d73d5eb63d3a - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libcxx >=18 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: Zlib - license_family: Other - purls: [] - size: 78663 - timestamp: 1743943764323 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py312hf9745cd_0.conda - sha256: 87928a36d350c470455a322c4c2b82266b88322d0fd5187ae8cc6fb5e3aad61f - md5: c45ac8395a27736c27b2e50b53ffe62c - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: MPL-2.0 AND Apache-2.0 - purls: - - pkg:pypi/ml-dtypes?source=hash-mapping - size: 290991 - timestamp: 1736538940686 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ml_dtypes-0.5.1-py312hcb1e3ce_0.conda - sha256: 17f70a0f345722e67f7437895a78cce84b758419f1c373186cec671607270747 - md5: d7a33fc18bf71480224e069be3072bbf - depends: - - __osx >=11.0 - - libcxx >=18 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: MPL-2.0 AND Apache-2.0 - purls: - - pkg:pypi/ml-dtypes?source=hash-mapping - size: 200130 - timestamp: 1736539205286 -- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda - sha256: 4bc53333774dea1330643b7e23aa34fd6880275737fc2e07491795872d3af8dd - md5: 5c9b020a3f86799cdc6115e55df06146 +- pypi: https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: ml-dtypes + version: 0.5.4 + sha256: 9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl + name: ml-dtypes + version: 0.5.4 + sha256: 2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22 + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl + name: ml-dtypes + version: 0.5.4 + sha256: a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda + sha256: c703d148a85ffb4f11001d31b7c4c686a46ad554eeeaa02c69da59fbf0e00dbb + md5: f4e246ec4ccdf73e50eefb0fa359a64e depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 105271 - timestamp: 1725975182669 -- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.1-py312h68727a3_0.conda - sha256: 969b8e50922b592228390c25ac417c0761fd6f98fccad870ac5cc84f35da301a - md5: 6998b34027ecc577efe4e42f4b022a98 + - pkg:pypi/multidict?source=hash-mapping + size: 97272 + timestamp: 1751310833783 +- conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda + sha256: 0da7e7f4e69bfd6c98eff92523e93a0eceeaec1c6d503d4a4cd0af816c3fe3dc + md5: 17c77acc59407701b54404cfd3639cac depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 102924 - timestamp: 1749813333354 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.0-py312h6142ec9_0.conda - sha256: 2b8c22f8a4e0031c2d6fa81d32814c8afdaf7e7fe2e681bf2369a35ff3eab1fd - md5: 0dfc3750cc6bbc463d72c0b727e60d8a - depends: - - __osx >=11.0 - - libcxx >=17 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 90793 - timestamp: 1725975279147 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.1-py312hb23fbb9_0.conda - sha256: 0cdc5fcdb75727a13cbcfc49e00b0fddf6705c7bd908aee1dd1e7a869de8dfe9 - md5: 4ae8111ba5af53e50cb6f9d1705c408c - depends: - - __osx >=11.0 - - libcxx >=18 + - libgcc >=14 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 91155 - timestamp: 1749813638452 -- conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.6.3-py312h178313f_0.conda - sha256: c703d148a85ffb4f11001d31b7c4c686a46ad554eeeaa02c69da59fbf0e00dbb - md5: f4e246ec4ccdf73e50eefb0fa359a64e + - pkg:pypi/multidict?source=hash-mapping + size: 100056 + timestamp: 1771611023053 +- conda: https://conda.anaconda.org/conda-forge/noarch/multidict-6.7.1-pyh62beb40_0.conda + sha256: e9933d2526345a4a1c08b76f2322dd482122b683369b0536605353b5b153d755 + md5: ad92dba7ca0af0e3dca083a0fa6a3423 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 + - python >=3.10 + - typing-extensions >=4.1.0 + track_features: + - multidict_no_compile license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/multidict?source=hash-mapping - size: 97272 - timestamp: 1751310833783 + size: 37745 + timestamp: 1771610804457 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.6.3-py312hdb8e49c_0.conda sha256: 4dda3bbaba0c35760950018aaae29f5ecae8d4d8964f6c61e50e8d29b293f674 md5: f6a2a3d93dec1aa42159639bb727c320 @@ -10533,23 +10667,30 @@ packages: - pkg:pypi/munkres?source=hash-mapping size: 15851 timestamp: 1749895533014 -- conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.15.0-py312h66e93f0_0.conda - sha256: b57c8bd233087479c70cb3ee3420861e0625b8a5a697f5abe41f5103fb2c2e69 - md5: a84061bc7e166712deb33bf7b32f756d +- conda: https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-h5888daf_0.conda + sha256: 320dfc59a94cb9e3635bda71b9e62278b34aa2fdaea0caa6832ddb9b37e9ccd5 + md5: ab3e3db511033340e75e7002e80ce8c0 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - mypy_extensions >=1.0.0 - - psutil >=4.0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - typing_extensions >=4.1.0 + - libstdcxx >=13 license: MIT license_family: MIT - purls: - - pkg:pypi/mypy?source=compressed-mapping - size: 18664849 - timestamp: 1738767977895 + purls: [] + size: 203174 + timestamp: 1747116762269 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/muparser-2.3.5-h11e0b38_0.conda + sha256: 5533e7e3d4b0819b4426f8a1b3f680e6b9c922cdae2b7fabcd0e8c59df22772a + md5: 1cdbe54881794ee356d3cba7e3ed6668 + depends: + - __osx >=11.0 + - libcxx >=18 + - llvm-openmp >=18.1.8 + license: MIT + license_family: MIT + purls: [] + size: 154087 + timestamp: 1747117056226 - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.17.1-py312h4c3975b_0.conda sha256: 7d010066a2b0a699f0a3ad18242f2a1dcd277d7311fb74417b370f47eee5d08f md5: 0a9db9dffdbd963f85ef4ac071a54d8c @@ -10568,23 +10709,25 @@ packages: - pkg:pypi/mypy?source=hash-mapping size: 18951584 timestamp: 1754001482966 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.15.0-py312hea69d52_0.conda - sha256: 7284d77173d385f5c7456c13d825dbae170920a31ca7a0996d2608ad17f17e2f - md5: 909034322685579577b1bbb9b47e39e1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.20.1-py312h4c3975b_0.conda + sha256: b9dc656d1f78e75ae07d57aefae6613ac94d55a4b33aabb35daa9451e624ef2f + md5: 672833a9f4e00c5e4ddbfa53b2aad6ee depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 - mypy_extensions >=1.0.0 + - pathspec >=1.0.0 - psutil >=4.0 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - python-librt >=0.8.0 - python_abi 3.12.* *_cp312 - - typing_extensions >=4.1.0 + - typing_extensions >=4.6.0 license: MIT license_family: MIT purls: - - pkg:pypi/mypy?source=hash-mapping - size: 10149670 - timestamp: 1738768707592 + - pkg:pypi/mypy?source=compressed-mapping + size: 21984603 + timestamp: 1776069494897 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.17.1-py312h163523d_0.conda sha256: 915fc9e810bc558593d7c9138f937008c20db77d349e7b5911c04469c15111ce md5: 4a3809bfa531f32f028c3b8cea3fdffc @@ -10603,17 +10746,25 @@ packages: - pkg:pypi/mypy?source=hash-mapping size: 10365038 timestamp: 1754002475755 -- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - sha256: 1895f47b7d68581a6facde5cb13ab8c2764c2e53a76bd746f8f98910dc4e08fe - md5: 29097e7ea634a45cc5386b95cac6568f +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.20.1-py314hbdd0d06_0.conda + sha256: 620325290662f847461e5ccbdbf7583acbb5fb3d85b09a7a467c52d9d75e9244 + md5: 119c54cbfd6815017af13e9ce7257639 depends: - - python >=3.9 + - __osx >=11.0 + - mypy_extensions >=1.0.0 + - pathspec >=1.0.0 + - psutil >=4.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python-librt >=0.8.0 + - python_abi 3.14.* *_cp314 + - typing_extensions >=4.6.0 license: MIT license_family: MIT purls: - - pkg:pypi/mypy-extensions?source=hash-mapping - size: 10854 - timestamp: 1733230986902 + - pkg:pypi/mypy?source=hash-mapping + size: 12126390 + timestamp: 1776070870528 - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 md5: e9c622e0d00fa24a6292279af3ab6d06 @@ -10625,18 +10776,6 @@ packages: - pkg:pypi/mypy-extensions?source=hash-mapping size: 11766 timestamp: 1745776666688 -- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.1.1-pyhe01879c_0.conda - sha256: 915fac9e2bf13b003e05da86d86de987a8c2c127f6efe32e7d6472a53df60f4b - md5: 0cc8c92d676f65dbda9fb6cb16a07a50 - depends: - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/narwhals?source=hash-mapping - size: 241994 - timestamp: 1755035827165 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -10656,56 +10795,35 @@ packages: purls: [] size: 797030 timestamp: 1738196177597 -- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117 - md5: fd40bf7f7f4bc4b647dc8512053d9873 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 + md5: a2c1eeadae7a309daed9d62c96012a2b depends: - - python >=3.10 + - python >=3.11 - python constrains: - - numpy >=1.24 - - scipy >=1.10,!=1.11.0,!=1.11.1 - - matplotlib >=3.7 + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib-base >=3.8 - pandas >=2.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/networkx?source=hash-mapping - size: 1265008 - timestamp: 1731521053408 -- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - sha256: 02019191a2597865940394ff42418b37bc585a03a1c643d7cea9981774de2128 - md5: 16bff3d37a4f99e3aa089c36c2b8d650 + size: 1587439 + timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda + sha256: 4fa40e3e13fc6ea0a93f67dfc76c96190afd7ea4ffc1bac2612d954b42cdc3ee + md5: eb52d14a901e23c39e9e7b4a1a5c015f depends: - - python >=3.11 - - python - constrains: - - numpy >=1.25 - - scipy >=1.11.2 - - matplotlib >=3.8 - - pandas >=2.0 + - python >=3.10 + - setuptools license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/networkx?source=hash-mapping - size: 1564462 - timestamp: 1749078300258 -- conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - sha256: e2fc624d6f9b2f1b695b6be6b905844613e813aa180520e73365062683fe7b49 - md5: d76872d096d063e226482c99337209dc - license: MIT - license_family: MIT - purls: [] - size: 135906 - timestamp: 1744445169928 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nlohmann_json-3.12.0-ha1acc90_0.conda - sha256: 6e689213c8d5e5f65ef426c0fcfb41b056e4c4d90fc020631cfddb6c87d5d6c9 - md5: c74975897efab6cdc7f5ac5a69cca2f3 - license: MIT - license_family: MIT - purls: [] - size: 136487 - timestamp: 1744445244122 + - pkg:pypi/nodeenv?source=hash-mapping + size: 40866 + timestamp: 1766261270149 - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda sha256: 3636eec0e60466a00069b47ce94b6d88b01419b6577d8e393da44bb5bc8d3468 md5: 7ba3f09fceae6a120d664217e58fe686 @@ -10718,99 +10836,102 @@ packages: - pkg:pypi/nodeenv?source=hash-mapping size: 34574 timestamp: 1734112236147 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h7bcfee6_1.conda - sha256: 58f4e5804a66ce3e485978f47461d5ac3b29653f86534bcc60554cdff8afb9e0 - md5: 4444225bda83e059d679990431962b86 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - - libgcc >=13 - - libstdcxx >=13 - - llvmlite >=0.44.0,<0.45.0a0 - - numpy >=1.21,<3 - - numpy >=1.24,<2.3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - scipy >=1.0 - - cuda-version >=11.2 - - tbb >=2021.6.0 - - libopenblas !=0.3.6 - - cuda-python >=11.6 - - cudatoolkit >=11.2 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/numba?source=hash-mapping - size: 5812060 - timestamp: 1749491507953 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numba-0.61.2-py312h22bc582_1.conda - sha256: 7ee05582607390e24aae02a12131c6842e075bd7cdcb157f6e86214f5166ec42 - md5: c3ad319f65ea4b72c91421f70cf30388 - depends: - - __osx >=11.0 - - libcxx >=18 - - llvm-openmp >=18.1.8 - - llvm-openmp >=20.1.6 - - llvmlite >=0.44.0,<0.45.0a0 - - numpy >=1.21,<3 - - numpy >=1.24,<2.3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - constrains: - - cuda-version >=11.2 - - scipy >=1.0 - - cuda-python >=11.6 - - libopenblas >=0.3.18,!=0.3.20 - - tbb >=2021.6.0 - - cudatoolkit >=11.2 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/numba?source=hash-mapping - size: 5797168 - timestamp: 1749491658806 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py312hf9745cd_0.conda - sha256: 2ffbd910965ecd095cd332b8bbba2a6b936379643b23ac58539bf24916b44b25 - md5: 052a1e577af1a760863ec643471ad796 - depends: - - __glibc >=2.17,<3.0.a0 - - deprecated - - libgcc >=13 - - libstdcxx >=13 - - msgpack-python - - numpy >=1.19,<3 - - numpy >=1.24 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - typing_extensions - license: MIT - license_family: MIT - purls: - - pkg:pypi/numcodecs?source=hash-mapping - size: 816575 - timestamp: 1747933348266 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.1-py312hcb1e3ce_0.conda - sha256: 580c05b778731c9408f93c3d07e395ee423bef6ef95878adf346c08aade03c14 - md5: 9c55d84011ead3d16f1d6c40c66568fd - depends: - - __osx >=11.0 - - deprecated - - libcxx >=18 - - msgpack-python - - numpy >=1.19,<3 - - numpy >=1.24 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - typing_extensions - license: MIT - license_family: MIT - purls: - - pkg:pypi/numcodecs?source=hash-mapping - size: 661241 - timestamp: 1747933438115 +- pypi: https://files.pythonhosted.org/packages/56/a4/90edb01e9176053578e343d7a7276bc28356741ee67059aed8ed2c1a4e59/numba-0.65.0-cp314-cp314-macosx_12_0_arm64.whl + name: numba + version: 0.65.0 + sha256: ee336b398a6fca51b1f626034de99f50cb1bd87d537a166275158a3cee744b82 + requires_dist: + - llvmlite>=0.47.0.dev0,<0.48 + - numpy>=1.22 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/6c/2f/8bd31a1ea43c01ac215283d83aa5f8d5acbe7a36c85b82f1757bfe9ccb31/numba-0.65.0-cp312-cp312-macosx_12_0_arm64.whl + name: numba + version: 0.65.0 + sha256: b27ee4847e1bfb17e9604d100417ee7c1d10f15a6711c6213404b3da13a0b2aa + requires_dist: + - llvmlite>=0.47.0.dev0,<0.48 + - numpy>=1.22 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: numba + version: 0.65.0 + sha256: a52d92ffd297c10364bce60cd1fcb88f99284ab5df085f2c6bcd1cb33b529a6f + requires_dist: + - llvmlite>=0.47.0.dev0,<0.48 + - numpy>=1.22 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a1/37/260fa42e7b2b08e6e00ad632f8dd620961a60a459426c26cea390f8c68d0/numcodecs-0.16.5-cp314-cp314-macosx_11_0_arm64.whl + name: numcodecs + version: 0.16.5 + sha256: 3832bd1b5af8bb3e413076b7d93318c8e7d7b68935006b9fa36ca057d1725a8f + requires_dist: + - numpy>=1.24 + - typing-extensions + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + - google-crc32c>=1.5 ; extra == 'google-crc32c' + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pyzstd ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - crc32c ; extra == 'test-extras' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/f5/6c/86644987505dcb90ba6d627d6989c27bafb0699f9fd00187e06d05ea8594/numcodecs-0.16.5-cp312-cp312-macosx_11_0_arm64.whl + name: numcodecs + version: 0.16.5 + sha256: 94ddfa4341d1a3ab99989d13b01b5134abb687d3dab2ead54b450aefe4ad5bd6 + requires_dist: + - numpy>=1.24 + - typing-extensions + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + - google-crc32c>=1.5 ; extra == 'google-crc32c' + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pyzstd ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - crc32c ; extra == 'test-extras' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: numcodecs + version: 0.16.5 + sha256: ad1a379a45bd3491deab8ae6548313946744f868c21d5340116977ea3be5b1d6 + requires_dist: + - numpy>=1.24 + - typing-extensions + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + - google-crc32c>=1.5 ; extra == 'google-crc32c' + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pyzstd ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - crc32c ; extra == 'test-extras' + requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 md5: d8285bea2a350f63fab23bf460221f3f @@ -10830,6 +10951,26 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7484186 timestamp: 1707225809722 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + sha256: 1aab7ba963affa572956b1bd8d239df52a9c7bc799c560f98bc658ab70224e10 + md5: 5930ee8a175a242b4f001b1e9e72024f + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8757569 + timestamp: 1773839284329 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda sha256: c8841d6d6f61fd70ca80682efbab6bdb8606dc77c68d8acabfbd7c222054f518 md5: d83fc83d589e2625a3451c9a7e21047c @@ -10849,21 +10990,26 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 6073136 timestamp: 1707226249608 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h55fea9a_1.conda - sha256: 0b7396dacf988f0b859798711b26b6bc9c6161dca21bacfd778473da58730afa - md5: 01243c4aaf71bde0297966125aea4706 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.3-py314h1569ea8_0.conda + sha256: fe565b09011e8b8edb11bc20564ab130b107d4717590c2464d6d7c2a5a53c6da + md5: 0fab9cf4fc5163131387f36742b50c79 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libpng >=1.6.50,<1.7.0a0 - - libstdcxx >=14 - - libtiff >=4.7.0,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-2-Clause + - python + - libcxx >=19 + - python 3.14.* *_cp314 + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause license_family: BSD - purls: [] - size: 357828 - timestamp: 1754297886899 + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6993182 + timestamp: 1773839150339 - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39 md5: 9e5816bc95d285c115a3ebc2f8563564 @@ -10879,20 +11025,21 @@ packages: purls: [] size: 342988 timestamp: 1733816638720 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h889cd5d_1.conda - sha256: 6013916893fcd9bc97c479279cfe4616de7735ec566bad0ee41bc729e14d31b2 - md5: ab581998c77c512d455a13befcddaac3 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d + md5: 11b3379b191f63139e29c0d19dee24cd depends: - - __osx >=11.0 - - libcxx >=19 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 - libpng >=1.6.50,<1.7.0a0 - - libtiff >=4.7.0,<4.8.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 - libzlib >=1.3.1,<2.0a0 license: BSD-2-Clause license_family: BSD purls: [] - size: 320198 - timestamp: 1754297986425 + size: 355400 + timestamp: 1758489294972 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda sha256: 1d59bc72ca7faac06d349c1a280f5cfb8a57ee5896f1e24225a997189d7418c7 md5: 4b71d78648dbcf68ce8bf22bb07ff838 @@ -10907,6 +11054,45 @@ packages: purls: [] size: 319362 timestamp: 1733816781741 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + sha256: 60aca8b9f94d06b852b296c276b3cf0efba5a6eb9f25feb8708570d3a74f00e4 + md5: 4b5d3a91320976eec71678fad1e3569b + depends: + - __osx >=11.0 + - libcxx >=19 + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 319697 + timestamp: 1772625397692 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.26.3-h8d634f6_0.conda + sha256: 4587e7762f27cad93619de77fa0573e2e17a899892d4bed3010196093e343533 + md5: 792d5b6e99677177f5527a758a02bc07 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libtiff >=4.7.1,<4.8.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 279846 + timestamp: 1771349499024 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjph-0.26.3-h2a4d681_0.conda + sha256: 8da463f8e61ce53ab8e577a7a039d8af84aa431058004b6b7d76606470933e78 + md5: a41bb9b11d64287b789c267f715efe75 + depends: + - __osx >=11.0 + - libcxx >=19 + - libtiff >=4.7.1,<4.8.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 182293 + timestamp: 1771349598209 - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda sha256: cb0b07db15e303e6f0a19646807715d28f1264c6350309a559702f4f34f37892 md5: 2e5bf4f1da39c0b32778561c3c4e5878 @@ -10922,18 +11108,21 @@ packages: purls: [] size: 780253 timestamp: 1748010165522 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - sha256: 38285d280f84f1755b7c54baf17eccf2e3e696287954ce0adca16546b85ee62c - md5: bb539841f2a3fde210f387d00ed4bb9d +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + sha256: 21c4f6c7f41dc9bec2ea2f9c80440d9a4d45a6f2ac13243e658f10dcf1044146 + md5: 680608784722880fbfe1745067570b00 depends: - __glibc >=2.17,<3.0.a0 - - ca-certificates - - libgcc >=13 - license: Apache-2.0 - license_family: Apache + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + license: OLDAP-2.8 + license_family: BSD purls: [] - size: 3121673 - timestamp: 1744132167438 + size: 786149 + timestamp: 1775741359582 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda sha256: c9f54d4e8212f313be7b02eb962d0cb13a8dae015683a403d3accd4add3e520e md5: ffffb341206dd0dab0c36053c048d621 @@ -10946,17 +11135,18 @@ packages: purls: [] size: 3128847 timestamp: 1754465526100 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_0.conda - sha256: 53f825acb8d3e13bdad5c869f6dc7df931941450eea7f6473b955b0aaea1a399 - md5: 3d2936da7e240d24c656138e07fa2502 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb + md5: da1b85b6a87e141f5140bb9924cecab0 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 - ca-certificates + - libgcc >=14 license: Apache-2.0 license_family: Apache purls: [] - size: 3067649 - timestamp: 1744132084304 + size: 3167099 + timestamp: 1775587756857 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda sha256: f6d1c87dbcf7b39fad24347570166dade1c533ae2d53c60a70fa4dc874ef0056 md5: bcb0d87dfbc199d0a461d2c7ca30b3d8 @@ -10968,96 +11158,129 @@ packages: purls: [] size: 3074848 timestamp: 1754465710470 -- conda: https://conda.anaconda.org/conda-forge/noarch/opera-utils-0.24.0-pyhd8ed1ab_0.conda - sha256: 88927ccbeb56c84961a7460bf5e091ffce3667b753f17bd86fe5c70442c8cf60 - md5: 07989c7c417cb99a420ed102ddfaaecf - depends: - - affine - - aiohttp - - asf_search >=6.7 - - botocore - - dask - - fsspec - - gdal >=3.8 - - h5netcdf - - h5py >=1.10 - - libgdal-netcdf - - numpy >=1.20 - - pandas - - pooch >=1.7 - - pyproj >=3.3 - - python >=3.11 - - rasterio >=1.3 - - s3fs - - shapely >=1.8 - - tqdm - - typing_extensions >=4.9 - - tyro >=0.9 - - xarray >=2025.01 - - zarr >=3 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/opera-utils?source=hash-mapping - size: 74596 - timestamp: 1753880224629 -- conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - sha256: af71aabb2bfa4b2c89b7b06403e5cec23b418452cae9f9772bd7ac3f9ea1ff44 - md5: 52919815cd35c4e1a0298af658ccda04 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/opt-einsum?source=hash-mapping - size: 62479 - timestamp: 1733688053334 -- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - sha256: f6ff644e27f42f2beb877773ba3adc1228dbb43530dbe9426dd672f3b847c7c5 - md5: ef7f9897a244b2023a066c22a1089ce4 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1242887 - timestamp: 1746604310927 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.1.2-hd90e43c_0.conda - sha256: b67606050e2f4c0fbd457c94e60d538a7646f404efa201049a26834674411856 - md5: 2eb36675dbc7c8dc0a24901ba0ca5542 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + sha256: c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea + md5: 25dcccd4f80f1638428613e0d7c9b4e1 depends: - __osx >=11.0 - - libcxx >=18 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 + - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 476870 - timestamp: 1746604427927 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 - md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa - depends: - - python >=3.8 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging?source=hash-mapping - size: 60164 - timestamp: 1733203368787 + size: 3106008 + timestamp: 1775587972483 +- pypi: git+https://github.com/scottstanie/opera-utils.git?branch=develop-scott#b032c25a7415d93792ec89483d09993c7c50d133 + name: opera-utils + version: 0.25.5.dev0 + requires_dist: + - h5py>=1.10 + - numpy>=1.24 + - pooch>=1.7 + - pyproj>=3.3 + - shapely>=1.8 + - typing-extensions>=4 + - tyro>=0.9 + - geopandas ; extra == 'geopandas' + - pyogrio ; extra == 'geopandas' + - affine ; extra == 'disp' + - aiohttp ; extra == 'disp' + - botocore ; extra == 'disp' + - dask ; extra == 'disp' + - fsspec ; extra == 'disp' + - h5netcdf ; extra == 'disp' + - s3fs ; extra == 'disp' + - tqdm ; extra == 'disp' + - rasterio ; extra == 'disp' + - rioxarray ; extra == 'disp' + - xarray ; extra == 'disp' + - zarr>=3 ; extra == 'disp' + - opera-utils[disp] ; extra == 'tropo' + - rioxarray ; extra == 'tropo' + - scipy ; extra == 'tropo' + - capella-reader ; extra == 'capella' + - opera-utils[tropo] ; extra == 'tropo-capella' + - capella-reader ; extra == 'tropo-capella' + - asf-search ; extra == 'asf' + - aiohttp ; extra == 'nisar' + - fsspec ; extra == 'nisar' + - s3fs ; extra == 'nisar' + - tqdm ; extra == 'nisar' + - opera-utils[asf,disp,geopandas,nisar,tropo] ; extra == 'all' + - asf-search ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-randomly ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-xdist ; extra == 'test' + - ruff ; extra == 'test' + - geopandas ; extra == 'test' + - pyogrio ; extra == 'test' + - ipywidgets ; extra == 'test' + - matplotlib ; extra == 'test' + - mkdocs ; extra == 'docs' + - mkdocs-gen-files ; extra == 'docs' + - mkdocs-jupyter ; extra == 'docs' + - mkdocs-literate-nav ; extra == 'docs' + - mkdocs-material ; extra == 'docs' + - mkdocs-section-index ; extra == 'docs' + - mkdocstrings[python] ; extra == 'docs' + - pybtex ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + name: opt-einsum + version: 3.4.0 + sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/31/ad/964ee5341767dd9e2f13e76f0a36d45aa8d81ad776c80bdd6dedc8f2f462/ortools-9.14.6206-cp312-cp312-macosx_11_0_arm64.whl + name: ortools + version: 9.14.6206 + sha256: db685073cbed9f8bfaa744f5e883f3dea57c93179b0abe1788276fd3b074fa61 + requires_dist: + - absl-py>=2.0.0 + - numpy>=1.13.3 + - pandas>=2.0.0 + - protobuf>=6.31.1,<6.32 + - typing-extensions>=4.12 + - immutabledict>=3.0.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/eb/74/1d374bf510e9fb36bba82ecd3e09461cd8394afef3e418fa5b060f129401/ortools-9.14.6206-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: ortools + version: 9.14.6206 + sha256: eb464a698837e7f90ca5f9b3d748b6ddf553198a70032bc77824d1cd88695d2b + requires_dist: + - absl-py>=2.0.0 + - numpy>=1.13.3 + - pandas>=2.0.0 + - protobuf>=6.31.1,<6.32 + - typing-extensions>=4.12 + - immutabledict>=3.0.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/13/54/ed73ec00369fb6d6c71049d62e4b7c87c918b61f86ddd55a11c20ada395e/ortools-9.15.6755-cp314-cp314-macosx_11_0_arm64.whl + name: ortools + version: 9.15.6755 + sha256: 1a0677270b0cd317a6b8dae42514264eaf5da5756c5bc7215eeea409424577df + requires_dist: + - absl-py>=2.0.0 + - numpy>=2.0.2 + - pandas>=2.0.0 + - protobuf>=6.33.1,<6.34 + - typing-extensions>=4.12 + - immutabledict>=3.0.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/49/0f/6d6d722102a0ceccf4a5038e2bc91d023da84a6dba98482a4634df3d27ab/ortools-9.15.6755-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: ortools + version: 9.15.6755 + sha256: 033836c0eb33bc72697a299e0caedbb25fc9d1cee0b13832d69cb30405f57b3e + requires_dist: + - absl-py>=2.0.0 + - numpy>=2.0.2 + - pandas>=2.0.0 + - protobuf>=6.33.1,<6.34 + - typing-extensions>=4.12 + - immutabledict>=3.0.0 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 md5: 58335b26c38bf4a20f399384c33cbcf9 @@ -11070,77 +11293,18 @@ packages: - pkg:pypi/packaging?source=hash-mapping size: 62477 timestamp: 1745345660407 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda - sha256: ad275a83bfebfa8a8fee9b0569aaf6f513ada6a246b2f5d5b85903d8ca61887e - md5: 8bce4f6caaf8c5448c7ac86d87e26b4b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - numpy >=1.22.4 - - python >=3.12,<3.13.0a0 - - python-dateutil >=2.8.1 - - python-tzdata >=2022a - - python_abi 3.12.* *_cp312 - - pytz >=2020.1,<2024.2 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pandas?source=hash-mapping - size: 15436913 - timestamp: 1726879054912 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - sha256: b0bed36b95757bbd269d30b2367536b802158bdf7947800ee7ae55089cfa8b9c - md5: 2979458c23c7755683a0598fb33e7666 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - numpy >=1.22.4 - - python >=3.12,<3.13.0a0 - - python-dateutil >=2.8.2 - - python-tzdata >=2022.7 - - python_abi 3.12.* *_cp312 - - pytz >=2020.1 - constrains: - - tabulate >=0.9.0 - - pytables >=3.8.0 - - html5lib >=1.1 - - lxml >=4.9.2 - - gcsfs >=2022.11.0 - - odfpy >=1.4.1 - - numexpr >=2.8.4 - - psycopg2 >=2.9.6 - - fsspec >=2022.11.0 - - qtpy >=2.3.0 - - tzdata >=2022.7 - - pyarrow >=10.0.1 - - pyqt5 >=5.15.9 - - xlrd >=2.0.1 - - sqlalchemy >=2.0.0 - - xarray >=2022.12.0 - - scipy >=1.10.0 - - fastparquet >=2022.12.0 - - pyreadstat >=1.2.0 - - matplotlib >=3.6.3 - - bottleneck >=1.3.6 - - s3fs >=2022.11.0 - - zstandard >=0.19.0 - - openpyxl >=3.1.0 - - blosc >=1.21.3 - - beautifulsoup4 >=4.11.2 - - pandas-gbq >=0.19.0 - - xlsxwriter >=3.0.5 - - numba >=0.56.4 - - pyxlsb >=1.0.10 - - python-calamine >=0.1.7 - license: BSD-3-Clause + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/pandas?source=hash-mapping - size: 15392153 - timestamp: 1744430987175 + - pkg:pypi/packaging?source=compressed-mapping + size: 72010 + timestamp: 1769093650580 - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.1-py312hf79963d_0.conda sha256: 6ec86b1da8432059707114270b9a45d767dac97c4910ba82b1f4fa6f74e077c8 md5: 7c73e62e62e5864b8418440e2a2cc246 @@ -11193,77 +11357,63 @@ packages: - pkg:pypi/pandas?source=hash-mapping size: 15092371 timestamp: 1752082221274 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcb1e3ce_3.conda - sha256: 57beb95a8c5c3c35a87d0c5a6c3235fb3673618445e60be952a2502781534613 - md5: 63af5cccfa8b67825d8358b149e96466 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.2-py312h8ecdadd_0.conda + sha256: 4aad0f99a06e799acdd46af0df8f7c8273164cabce8b5c94a44b012b7d1a30a6 + md5: 42050f82a0c0f6fa23eda3d93b251c18 depends: - - __osx >=11.0 - - libcxx >=18 - - numpy >=1.19,<3 - - numpy >=1.22.4 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - python + - numpy >=1.26.0 - python-dateutil >=2.8.2 - - python-tzdata >=2022.7 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - python_abi 3.12.* *_cp312 - - pytz >=2020.1 + - numpy >=1.23,<3 constrains: - - zstandard >=0.19.0 - - pyreadstat >=1.2.0 + - adbc-driver-postgresql >=1.2.0 + - adbc-driver-sqlite >=1.2.0 + - beautifulsoup4 >=4.12.3 - blosc >=1.21.3 - - fastparquet >=2022.12.0 - - qtpy >=2.3.0 - - openpyxl >=3.1.0 - - psycopg2 >=2.9.6 - - xlsxwriter >=3.0.5 - - lxml >=4.9.2 - - xarray >=2022.12.0 - - pyxlsb >=1.0.10 - - matplotlib >=3.6.3 - - python-calamine >=0.1.7 - - gcsfs >=2022.11.0 - - numba >=0.56.4 - - pandas-gbq >=0.19.0 + - bottleneck >=1.4.2 + - fastparquet >=2024.11.0 + - fsspec >=2024.10.0 + - gcsfs >=2024.10.0 + - html5lib >=1.1 + - hypothesis >=6.116.0 + - jinja2 >=3.1.5 + - lxml >=5.3.0 + - matplotlib >=3.9.3 + - numba >=0.60.0 + - numexpr >=2.10.2 - odfpy >=1.4.1 - - fsspec >=2022.11.0 - - numexpr >=2.8.4 - - xlrd >=2.0.1 - - scipy >=1.10.0 - - bottleneck >=1.3.6 + - openpyxl >=3.1.5 + - psycopg2 >=2.9.10 + - pyarrow >=13.0.0 + - pyiceberg >=0.8.1 + - pymysql >=1.1.1 - pyqt5 >=5.15.9 - - s3fs >=2022.11.0 - - html5lib >=1.1 - - pytables >=3.8.0 + - pyreadstat >=1.2.8 + - pytables >=3.10.1 + - pytest >=8.3.4 + - pytest-xdist >=3.6.1 + - python-calamine >=0.3.0 + - pytz >=2024.2 + - pyxlsb >=1.0.10 + - qtpy >=2.4.2 + - scipy >=1.14.1 + - s3fs >=2024.10.0 + - sqlalchemy >=2.0.36 - tabulate >=0.9.0 - - beautifulsoup4 >=4.11.2 - - pyarrow >=10.0.1 - - sqlalchemy >=2.0.0 - - tzdata >=2022.7 - license: BSD-3-Clause - purls: - - pkg:pypi/pandas?source=hash-mapping - size: 14442730 - timestamp: 1744431003090 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda - sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 - md5: c68bfa69e6086c381c74e16fd72613a8 - depends: - - __osx >=11.0 - - libcxx >=17 - - numpy >=1.19,<3 - - numpy >=1.22.4 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python-dateutil >=2.8.1 - - python-tzdata >=2022a - - python_abi 3.12.* *_cp312 - - pytz >=2020.1,<2024.2 + - xarray >=2024.10.0 + - xlrd >=2.0.1 + - xlsxwriter >=3.2.0 + - zstandard >=0.23.0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pandas?source=hash-mapping - size: 14470437 - timestamp: 1726878887799 + - pkg:pypi/pandas?source=compressed-mapping + size: 14849233 + timestamp: 1774916580467 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.1-py312h98f7732_0.conda sha256: f4f98436dde01309935102de2ded045bb5500b42fb30a3bf8751b15affee4242 md5: d3775e9b27579a0e96150ce28a2542bd @@ -11308,27 +11458,95 @@ packages: - pandas-gbq >=0.19.0 - html5lib >=1.1 - pyxlsb >=1.0.10 - - sqlalchemy >=2.0.0 - - gcsfs >=2022.11.0 + - sqlalchemy >=2.0.0 + - gcsfs >=2022.11.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 13991815 + timestamp: 1752082557265 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-3.0.2-py314he609de1_0.conda + sha256: 5569734c504ffa7ced5f6c8734f2ff62ba679e5923fbdf1f17b6032e01ea6df8 + md5: a28d1a3565d7c6d95479c2c6e52c1b16 + depends: + - python + - numpy >=1.26.0 + - python-dateutil >=2.8.2 + - python 3.14.* *_cp314 + - libcxx >=19 + - __osx >=11.0 + - numpy >=1.23,<3 + - python_abi 3.14.* *_cp314 + constrains: + - adbc-driver-postgresql >=1.2.0 + - adbc-driver-sqlite >=1.2.0 + - beautifulsoup4 >=4.12.3 + - blosc >=1.21.3 + - bottleneck >=1.4.2 + - fastparquet >=2024.11.0 + - fsspec >=2024.10.0 + - gcsfs >=2024.10.0 + - html5lib >=1.1 + - hypothesis >=6.116.0 + - jinja2 >=3.1.5 + - lxml >=5.3.0 + - matplotlib >=3.9.3 + - numba >=0.60.0 + - numexpr >=2.10.2 + - odfpy >=1.4.1 + - openpyxl >=3.1.5 + - psycopg2 >=2.9.10 + - pyarrow >=13.0.0 + - pyiceberg >=0.8.1 + - pymysql >=1.1.1 + - pyqt5 >=5.15.9 + - pyreadstat >=1.2.8 + - pytables >=3.10.1 + - pytest >=8.3.4 + - pytest-xdist >=3.6.1 + - python-calamine >=0.3.0 + - pytz >=2024.2 + - pyxlsb >=1.0.10 + - qtpy >=2.4.2 + - scipy >=1.14.1 + - s3fs >=2024.10.0 + - sqlalchemy >=2.0.36 + - tabulate >=0.9.0 + - xarray >=2024.10.0 + - xlrd >=2.0.1 + - xlsxwriter >=3.2.0 + - zstandard >=0.23.0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pandas?source=hash-mapping - size: 13991815 - timestamp: 1752082557265 -- conda: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - sha256: 472fc587c63ec4f6eba0cc0b06008a6371e0a08a5986de3cf4e8024a47b4fe6c - md5: 0badf9c54e24cecfb0ad2f99d680c163 + - pkg:pypi/pandas?source=compressed-mapping + size: 14349246 + timestamp: 1774916749510 +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + sha256: 42b2d77ccea60752f3aa929a6413a7835aaacdbbde679f2f5870a744fa836b94 + md5: 97c1ce2fffa1209e7afb432810ec6e12 depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/parso?source=hash-mapping + size: 82287 + timestamp: 1770676243987 +- pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + name: partd + version: 1.4.2 + sha256: 978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f + requires_dist: - locket - - python >=3.9 - toolz - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/partd?source=hash-mapping - size: 20884 - timestamp: 1715026639309 + - numpy>=1.20.0 ; extra == 'complete' + - pandas>=1.3 ; extra == 'complete' + - pyzmq ; extra == 'complete' + - blosc ; extra == 'complete' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee md5: 617f15191456cc6a13db418a275435e5 @@ -11340,6 +11558,17 @@ packages: - pkg:pypi/pathspec?source=hash-mapping size: 41075 timestamp: 1733233471940 +- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + sha256: 29ea20d0faf20374fcd61c25f6d32fb8e9a2c786a7f1473a0c3ead359470fbe1 + md5: 2908273ac396d2cd210a8127f5f1c0d6 + depends: + - python >=3.10 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 53739 + timestamp: 1769677743677 - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda sha256: 27c4014f616326240dcce17b5f3baca3953b6bc5f245ceb49c3fa1e6320571eb md5: b90bece58b4c2bf25969b70f3be42d25 @@ -11353,6 +11582,19 @@ packages: purls: [] size: 1197308 timestamp: 1745955064657 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.45-ha881caa_0.conda sha256: e9ecb706b58b5a2047c077b3a1470e8554f3aad02e9c3c00cfa35d537420fea3 md5: a52385b93558d8e6bbaeec5d61a21cd7 @@ -11365,47 +11607,29 @@ packages: purls: [] size: 837826 timestamp: 1745955207242 -- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - build_number: 7 - sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 - md5: f2cfec9406850991f4e3d960cc9e3321 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + sha256: 5e2e443f796f2fd92adf7978286a525fb768c34e12b1ee9ded4000a41b2894ba + md5: 9b4190c4055435ca3502070186eba53a depends: - - libgcc-ng >=12 - - libxcrypt >=4.4.36 - license: GPL-1.0-or-later OR Artistic-1.0-Perl - purls: [] - size: 13344463 - timestamp: 1703310653947 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda - build_number: 7 - sha256: b0c55040d2994fd6bf2f83786561d92f72306d982d6ea12889acad24a9bf43b8 - md5: ba3cbe93f99e896765422cc5f7c3a79e - license: GPL-1.0-or-later OR Artistic-1.0-Perl + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 14439531 - timestamp: 1703311335652 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.1.0-py312h80c1187_0.conda - sha256: 5c347962202b55ae4d8a463e0555c5c6ca33396266a08284bf1384399894e541 - md5: d3894405f05b2c0f351d5de3ae26fa9c + size: 850231 + timestamp: 1763655726735 +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea depends: - - __glibc >=2.17,<3.0.a0 - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libgcc >=13 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - tk >=8.6.13,<8.7.0a0 - license: HPND + - ptyprocess >=0.5 + - python >=3.9 + license: ISC purls: - - pkg:pypi/pillow?source=hash-mapping - size: 42749785 - timestamp: 1735929845390 + - pkg:pypi/pexpect?source=hash-mapping + size: 53561 + timestamp: 1733302019362 - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h80c1187_0.conda sha256: 7c9a8f65a200587bf7a0135ca476f9c472348177338ed8b825ddcc08773fde68 md5: 7911e727a6c24db662193a960b81b6b2 @@ -11429,28 +11653,29 @@ packages: - pkg:pypi/pillow?source=hash-mapping size: 42964111 timestamp: 1751482158083 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda - sha256: b29b7c915053e06a7a5b4118760202c572c9c35d23bd6ce8e73270b6a50e50ee - md5: 94d6ba8cd468668a9fb04193b0f4b36e +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py312h50c33e8_0.conda + sha256: fa291f8915114733dc1df9f1627b8c63c517217c1eee1a6ede2ceb5e368cf27a + md5: 9e5609720e31213d4f39afe377f6217e depends: - - __osx >=11.0 - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - lcms2 >=2.18,<3.0a0 - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - libjpeg-turbo >=3.1.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - openjpeg >=2.5.4,<3.0a0 - python_abi 3.12.* *_cp312 - tk >=8.6.13,<8.7.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - zlib-ng >=2.3.3,<2.4.0a0 license: HPND purls: - - pkg:pypi/pillow?source=hash-mapping - size: 42852329 - timestamp: 1735930118976 + - pkg:pypi/pillow?source=compressed-mapping + size: 1039561 + timestamp: 1775060059882 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.3.0-py312h50aef2c_0.conda sha256: 3d60288e8cfd42e4548c9e5192a285e73f81df2869f69b9d3905849b45d9bd2a md5: dddff48655b5cd24a5170a6df979943a @@ -11474,6 +11699,29 @@ packages: - pkg:pypi/pillow?source=hash-mapping size: 42514714 timestamp: 1751482419501 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + sha256: 3d8a86c8cf69ea4bdfeaa3e89e7218bcdc1522e58c9c6298263bfede8ab48cee + md5: adf49537da0e0c34cf735e71fe579506 + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - tk >=8.6.13,<8.7.0a0 + - openjpeg >=2.5.4,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - python_abi 3.14.* *_cp314 + - libtiff >=4.7.1,<4.8.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - lcms2 >=2.18,<3.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + size: 1006294 + timestamp: 1775060469004 - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.2-pyh8b19718_0.conda sha256: ec9ed3cef137679f3e3a68e286c6efd52144684e1be0b05004d9699882dadcdd md5: dfce4b2af4bfe90cdcaf56ca0b28ddf5 @@ -11487,6 +11735,30 @@ packages: - pkg:pypi/pip?source=compressed-mapping size: 1177168 timestamp: 1753924973872 +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda + sha256: 5f66ea31d62188c266c5a8752119b0cc90a5bf05963f665cf48a33e0ec58d39c + md5: 09a970fbf75e8ed1aa633827ded6aa4f + depends: + - python >=3.13.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=compressed-mapping + size: 1180743 + timestamp: 1770270312477 +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + sha256: 8e1497814a9997654ed7990a79c054ea5a42545679407acbc6f7e809c73c9120 + md5: 67bdec43082fd8a9cffb9484420b39a2 + depends: + - python >=3.10,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=compressed-mapping + size: 1181790 + timestamp: 1770270305795 - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a md5: c01af13bdc553d1a8fbfff6e8db075f0 @@ -11500,18 +11772,6 @@ packages: purls: [] size: 450960 timestamp: 1754665235234 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda - sha256: ae7d3e58224d53d6b59e1f5ac5809803bb1972f0ac4fb10cd9b8c87d4122d3e0 - md5: e57da6fe54bb3a5556cf36d199ff07d8 - depends: - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/platformdirs?source=compressed-mapping - size: 23291 - timestamp: 1742485085457 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda sha256: 0f48999a28019c329cd3f6fd2f01f09fc32cc832f7d6bbe38087ddac858feaa3 md5: 424844562f5d337077b445ec6b1398a7 @@ -11524,17 +11784,18 @@ packages: - pkg:pypi/platformdirs?source=hash-mapping size: 23531 timestamp: 1746710438805 -- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 - md5: e9dcbce5f45f9ee500e728ae58b605b6 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 depends: - - python >=3.9 + - python >=3.10 + - python license: MIT license_family: MIT purls: - - pkg:pypi/pluggy?source=hash-mapping - size: 23595 - timestamp: 1733222855563 + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25862 + timestamp: 1775741140609 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc md5: 7da7ccd349dbf6487a7778579d2bb971 @@ -11546,23 +11807,35 @@ packages: - pkg:pypi/pluggy?source=hash-mapping size: 24246 timestamp: 1747339794916 -- conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda - sha256: 032405adb899ba7c7cc24d3b4cd4e7f40cf24ac4f253a8e385a4f44ccb5e0fc6 - md5: d2bbbd293097e664ffb01fc4cdaf5729 +- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e + md5: d7585b6550ad04c8c5e21097ada2888e depends: - - packaging >=20.0 - - platformdirs >=2.5.0 - python >=3.9 - - requests >=2.19.0 - license: BSD-3-Clause - license_family: BSD + - python + license: MIT + license_family: MIT purls: - - pkg:pypi/pooch?source=hash-mapping - size: 55588 - timestamp: 1754941801129 -- conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - sha256: d0bd8cce5f31ae940934feedec107480c00f67e881bf7db9d50c6fc0216a2ee0 - md5: 17e487cc8b5507cd3abc09398cf27949 + - pkg:pypi/pluggy?source=hash-mapping + size: 25877 + timestamp: 1764896838868 +- pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl + name: pooch + version: 1.9.0 + sha256: f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b + requires_dist: + - platformdirs>=2.5.0 + - packaging>=20.0 + - requests>=2.19.0 + - tqdm>=4.41.0,<5.0.0 ; extra == 'progress' + - paramiko>=2.7.0 ; extra == 'sftp' + - xxhash>=1.4.3 ; extra == 'xxhash' + - pytest-httpserver ; extra == 'test' + - pytest-localftpserver ; extra == 'test' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda + sha256: 66b6d429ab2201abaa7282af06b17f7631dcaafbc5aff112922b48544514b80a + md5: bc6c44af2a9e6067dd7e949ef10cdfba depends: - cfgv >=2.0.0 - identify >=1.0.0 @@ -11574,41 +11847,24 @@ packages: license_family: MIT purls: - pkg:pypi/pre-commit?source=hash-mapping - size: 195854 - timestamp: 1742475656293 -- conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.3.0-pyha770c72_0.conda - sha256: 66b6d429ab2201abaa7282af06b17f7631dcaafbc5aff112922b48544514b80a - md5: bc6c44af2a9e6067dd7e949ef10cdfba + size: 195839 + timestamp: 1754831350570 +- conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda + sha256: 5b81b7516d4baf43d0c185896b245fa7384b25dc5615e7baa504b7fa4e07b706 + md5: 7f3ac694319c7eaf81a0325d6405e974 depends: - cfgv >=2.0.0 - identify >=1.0.0 - nodeenv >=0.11.1 - - python >=3.9 + - python >=3.10 - pyyaml >=5.1 - virtualenv >=20.10.0 license: MIT license_family: MIT purls: - pkg:pypi/pre-commit?source=hash-mapping - size: 195839 - timestamp: 1754831350570 -- conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda - sha256: ca632e5d8d49f3cca1259097400862e9baf9f46bb999c8cbbab3b47e828376eb - md5: a3547a9c204da804d8ef9c40c7ac0b84 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.13.0,<9.0a0 - - libgcc >=13 - - libsqlite >=3.49.1,<4.0a0 - - libstdcxx >=13 - - libtiff >=4.7.0,<4.8.0a0 - - sqlite - constrains: - - proj4 ==999999999999 - license: MIT - purls: [] - size: 3197262 - timestamp: 1743652160571 + size: 200827 + timestamp: 1765937577534 - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda sha256: c1c9e38646a2d07007844625c8dea82404c8785320f8a6326b9338f8870875d0 md5: 1aeede769ec2fa0f474f8b73a7ac057f @@ -11627,23 +11883,26 @@ packages: purls: [] size: 3240415 timestamp: 1754927975218 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.0-h1318a7e_1.conda - sha256: ab750defa95873048f78f05c9ee6f206e80ca87951ae68269a6b3fc06c66911e - md5: d0d57e3502849d8bb2485c59c0897bf1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-he0df7b0_3.conda + sha256: c94d3d8ef40d1ea018860d66c416003bc03adede7d212efc9218bb64041fe2f7 + md5: 031e33ae075b336c0ce92b14efa886c5 depends: - - __osx >=11.0 - - libcurl >=8.13.0,<9.0a0 - - libcxx >=18 - - libsqlite >=3.49.1,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - sqlite + - libtiff + - libcurl + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libcurl >=8.18.0,<9.0a0 + - libsqlite >=3.51.2,<4.0a0 constrains: - proj4 ==999999999999 license: MIT license_family: MIT purls: [] - size: 2734723 - timestamp: 1743652164401 + size: 3593669 + timestamp: 1770890751115 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.6.2-hdbeaa80_2.conda sha256: 75e4bfa1a2d2b46b7aa11e2293abfe664f5775f21785fb7e3d41226489687501 md5: e68d0d91e188ab134cb25675de82b479 @@ -11661,35 +11920,39 @@ packages: purls: [] size: 2787374 timestamp: 1754927844772 -- conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - sha256: 013669433eb447548f21c3c6b16b2ed64356f726b5f77c1b39d5ba17a8a4b8bc - md5: a83f6a2fdc079e643237887a37460668 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.10.1,<9.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - zlib - license: MIT - license_family: MIT - purls: [] - size: 199544 - timestamp: 1730769112346 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/prometheus-cpp-1.3.0-h0967b3e_0.conda - sha256: 851a77ae1a8e90db9b9f3c4466abea7afb52713c3d98ceb0d37ba6ff27df2eff - md5: 7172339b49c94275ba42fec3eaeda34f +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.7.1-hfb14a63_3.conda + sha256: 14484430a32a13cb9c03ebf3084a4ffb1feb417aa4c23907844fba219924058f + md5: 8f33a4a2b856de0e8f006c489beca62a depends: + - sqlite + - libtiff + - libcurl - __osx >=11.0 - - libcurl >=8.10.1,<9.0a0 - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - - zlib + - libcxx >=19 + - libsqlite >=3.51.2,<4.0a0 + - libcurl >=8.18.0,<9.0a0 + - libtiff >=4.7.1,<4.8.0a0 + constrains: + - proj4 ==999999999999 license: MIT license_family: MIT purls: [] - size: 173220 - timestamp: 1730769371051 + size: 3098262 + timestamp: 1770890778843 +- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + sha256: 4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae + md5: edb16f14d920fb3faf17f5ce582942d6 + depends: + - python >=3.10 + - wcwidth + constrains: + - prompt_toolkit 3.0.52 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping + size: 273927 + timestamp: 1756321848365 - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda sha256: d0ff67d89cf379a9f0367f563320621f0bc3969fe7f5c85e020f437de0927bb4 md5: 0cf580c1b73146bb9ff1bbdb4d4c8cf9 @@ -11704,6 +11967,19 @@ packages: - pkg:pypi/propcache?source=hash-mapping size: 54233 timestamp: 1744525107433 +- conda: https://conda.anaconda.org/conda-forge/noarch/propcache-0.3.1-pyhe1237c8_0.conda + sha256: d8927d64b35e1fb82285791444673e47d3729853be962c7045e75fc0fd715cec + md5: b1cda654f58d74578ac9786909af84cd + depends: + - python >=3.9 + track_features: + - propcache_no_compile + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/propcache?source=hash-mapping + size: 17693 + timestamp: 1744525054494 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.3.1-py312h998013c_0.conda sha256: dd97df075f5198d42cc4be6773f1c41a9c07d631d95f91bfee8e9953eccc965b md5: d8280c97e09e85c72916a3d98a4076d7 @@ -11718,6 +11994,26 @@ packages: - pkg:pypi/propcache?source=hash-mapping size: 51972 timestamp: 1744525285336 +- pypi: https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl + name: protobuf + version: 6.31.1 + sha256: 6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 6.31.1 + sha256: 4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 6.33.6 + sha256: e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5c/01/a3c3ed5cd186f39e7880f8303cc51385a198a81469d53d0fdecf1f64d929/protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl + name: protobuf + version: 6.33.6 + sha256: 9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda sha256: 158047d7a80e588c846437566d0df64cec5b0284c7184ceb4f3c540271406888 md5: 8e30db4239508a538e4a3b3cdf5b9616 @@ -11732,6 +12028,20 @@ packages: - pkg:pypi/psutil?source=hash-mapping size: 466219 timestamp: 1740663246825 +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + sha256: d834fd656133c9e4eaf63ffe9a117c7d0917d86d89f7d64073f4e3a0020bd8a7 + md5: dd94c506b119130aef5a9382aed648e7 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=compressed-mapping + size: 225545 + timestamp: 1769678155334 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py312hea69d52_0.conda sha256: cb11dcb39b2035ef42c3df89b5a288744b5dcb5a98fb47385760843b1d4df046 md5: 0f461bd37cb428dc20213a08766bb25d @@ -11746,6 +12056,20 @@ packages: - pkg:pypi/psutil?source=hash-mapping size: 476376 timestamp: 1740663381256 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + sha256: e0f31c053eb11803d63860c213b2b1b57db36734f5f84a3833606f7c91fedff9 + md5: fc4c7ab223873eee32080d51600ce7e7 + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 245502 + timestamp: 1769678303655 - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 md5: b3c17d95b5a10c6e64a21fa17573e70e @@ -11767,78 +12091,27 @@ packages: purls: [] size: 8381 timestamp: 1726802424786 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - sha256: f7b08ff9ef4626e19a3cd08165ca1672675168fa9af9c2b0d2a5c104c71baf01 - md5: 57b626b4232b77ee6410c7c03a99774d - depends: - - libarrow-acero 20.0.0.* - - libarrow-dataset 20.0.0.* - - libarrow-substrait 20.0.0.* - - libparquet 20.0.0.* - - pyarrow-core 20.0.0 *_0_* - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25757 - timestamp: 1746001175919 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-20.0.0-py312h1f38498_0.conda - sha256: f8f793ea5b5f2a783295c57feb56435222a53565b198f92670403a4398ad8087 - md5: 681c50e46ae04ec1785e2dd2f37e8c04 - depends: - - libarrow-acero 20.0.0.* - - libarrow-dataset 20.0.0.* - - libarrow-substrait 20.0.0.* - - libparquet 20.0.0.* - - pyarrow-core 20.0.0 *_0_* - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25885 - timestamp: 1746000694903 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - sha256: afd636ecaea60e1ebb422b1a3e5a5b8f6f28da3311b7079cbd5caa4464a50a48 - md5: 9b1b453cdb91a2f24fb0257bbec798af +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0.* *cpu - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - apache-arrow-proc * cpu - - numpy >=1.21,<3 - license: Apache-2.0 - license_family: APACHE + - python >=3.9 + license: ISC purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 4658639 - timestamp: 1746000738593 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-20.0.0-py312hc40f475_0_cpu.conda - sha256: 55f587d72ab4215bcfa021d31f979eaf0160450be5d201608189863782eb7f28 - md5: f8e610b40d86396586cae815785ec471 + - pkg:pypi/ptyprocess?source=hash-mapping + size: 19457 + timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 depends: - - __osx >=11.0 - - libarrow 20.0.0.* *cpu - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - constrains: - - numpy >=1.21,<3 - - apache-arrow-proc * cpu - license: Apache-2.0 - license_family: APACHE + - python >=3.9 + license: MIT + license_family: MIT purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 4347328 - timestamp: 1746000664249 + - pkg:pypi/pure-eval?source=hash-mapping + size: 16668 + timestamp: 1733569518868 - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 md5: 12c566707c80111f9799308d9e265aef @@ -11867,6 +12140,21 @@ packages: - pkg:pypi/pydantic?source=hash-mapping size: 307333 timestamp: 1749927245525 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.0-pyhcf101f3_0.conda + sha256: 237330a57a9d4d742cdf22259daafada9f287b68da9ffccdf138af4647d0910f + md5: c176d6075acee8d6847988b7865bd1af + depends: + - typing-inspection >=0.4.2 + - typing_extensions >=4.14.1 + - python >=3.10 + - annotated-types >=0.6.0 + - pydantic-core ==2.46.0 + - python + license: MIT + purls: + - pkg:pypi/pydantic?source=compressed-mapping + size: 346673 + timestamp: 1776083858303 - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda sha256: 4d14d7634c8f351ff1e63d733f6bb15cba9a0ec77e468b0de9102014a4ddc103 md5: cfbd96e5a0182dfb4110fc42dda63e57 @@ -11884,6 +12172,22 @@ packages: - pkg:pypi/pydantic-core?source=hash-mapping size: 1890081 timestamp: 1746625309715 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.0-py312h868fb18_0.conda + sha256: d1e79e65c1a93a9b1fdc3e507859162d14b34a6431821acdc2b3b1b064e92549 + md5: ba29f93f3325186934a130553d78b340 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + size: 1913988 + timestamp: 1776075325221 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.2-py312hd3c0895_0.conda sha256: 4e583aab0854a3a9c88e3e5c55348f568a1fddce43952a74892e490537327522 md5: affb6b478c21735be55304d47bfe1c63 @@ -11892,15 +12196,31 @@ packages: - typing-extensions >=4.6.0,!=4.7.0 - python 3.12.* *_cpython - __osx >=11.0 - - python_abi 3.12.* *_cp312 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + size: 1715338 + timestamp: 1746625327204 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.46.0-py314h54f3292_0.conda + sha256: 14afdf0547263ed360551db9c204474b09fc8f7f4c3abe8bc80b9cfb1a8e2e11 + md5: c1ac3dd21a90f30b29485227e0b51405 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 constrains: - __osx >=11.0 license: MIT - license_family: MIT purls: - pkg:pypi/pydantic-core?source=hash-mapping - size: 1715338 - timestamp: 1746625327204 + size: 1729239 + timestamp: 1776075422352 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a md5: 6b6ece66ebcae2d5f326c77ef2c5a066 @@ -11912,24 +12232,17 @@ packages: - pkg:pypi/pygments?source=hash-mapping size: 889287 timestamp: 1750615908735 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.10.0-py312h02b19dd_1.conda - sha256: b1a2754f1ddda7f098dc1f6712153c8a184bf31e11e71ee8b6ca95d9791c2147 - md5: 6ebb12bd1833a52e08e63297b8621903 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 + md5: 16c18772b340887160c79a6acc022db0 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libgdal-core >=3.10.0,<3.11.0a0 - - libstdcxx >=13 - - numpy - - packaging - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: MIT - license_family: MIT + - python >=3.10 + license: BSD-2-Clause + license_family: BSD purls: - - pkg:pypi/pyogrio?source=hash-mapping - size: 640043 - timestamp: 1732013500715 + - pkg:pypi/pygments?source=compressed-mapping + size: 893031 + timestamp: 1774796815820 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.11.0-py312h02b19dd_0.conda sha256: 28ad34f1e1ddad99bbbd7d2609fe46855e920f6985644f52852adf9ecfddc868 md5: b4e4e057ab327b7a1270612587a75523 @@ -11948,24 +12261,24 @@ packages: - pkg:pypi/pyogrio?source=hash-mapping size: 665062 timestamp: 1746734790035 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.10.0-py312hfd5e53c_1.conda - sha256: af738bd24e6f2fcf763a0dbc22fb088222e7f52b99b7b5f49333d9da1320c8ea - md5: 19550465d36f2f513be5c62def9edfd9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyogrio-0.12.1-py312h053e1f3_0.conda + sha256: 2b0a366d9066e3d9f495369b95cdb1b9d3dba2f59577e4560b7d1086e1fe3d70 + md5: f8e7e5ddfbdca16b65335b0b6615eb4c depends: - - __osx >=11.0 - - libcxx >=18 - - libgdal-core >=3.10.0,<3.11.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgdal-core >=3.12.0,<3.13.0a0 + - libstdcxx >=14 - numpy - packaging - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: MIT license_family: MIT purls: - pkg:pypi/pyogrio?source=hash-mapping - size: 564110 - timestamp: 1732013713458 + size: 661347 + timestamp: 1764402531050 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.11.0-py312hfd5e53c_0.conda sha256: 194a0e283634a1640a262e77bb33b3f0c7a4acf2a799f747d5c5f11f03533d79 md5: e1b8ae9311eadbefed27cb87ff752596 @@ -11984,17 +12297,24 @@ packages: - pkg:pypi/pyogrio?source=hash-mapping size: 597009 timestamp: 1746734900747 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.2-pyhd8ed1ab_0.conda - sha256: 1a28878f9fc1b65004160c7f6ed447ef0cd3e492a0880745e97ab9aee66f2c4a - md5: 4a8479437c6e3407aaece60d9c9a820d +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyogrio-0.12.1-py314h3da1bed_0.conda + sha256: dcaaab4d8b539f7c4ee740e0242ae09c48f68e75949476ca36d9c67e61aafc3b + md5: 9b33fa020bd4da86a2dddfd0f63a43ba depends: - - python >=3.9 + - __osx >=11.0 + - libcxx >=19 + - libgdal-core >=3.12.0,<3.13.0a0 + - numpy + - packaging + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 license: MIT license_family: MIT purls: - - pkg:pypi/pyparsing?source=compressed-mapping - size: 95882 - timestamp: 1742806561842 + - pkg:pypi/pyogrio?source=hash-mapping + size: 599877 + timestamp: 1764402722213 - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda sha256: b92afb79b52fcf395fd220b29e0dd3297610f2059afac45298d44e00fcbf23b6 md5: 513d3c262ee49b54a8fec85c5bc99764 @@ -12018,22 +12338,18 @@ packages: - pkg:pypi/pyparsing?source=compressed-mapping size: 102292 timestamp: 1753873557076 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py312h03c6e1f_1.conda - sha256: 57083fca3c343e537a496e39666c7bd5c47e470d1b4b8e1d211663f452155de4 - md5: f754591f9ec0169e436fa84cb9db0c32 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + sha256: 417fba4783e528ee732afa82999300859b065dc59927344b4859c64aae7182de + md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 depends: - - __glibc >=2.17,<3.0.a0 - - certifi - - libgcc >=13 - - proj >=9.6.0,<9.7.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 + - python >=3.10 + - python license: MIT license_family: MIT purls: - - pkg:pypi/pyproj?source=hash-mapping - size: 555089 - timestamp: 1742323461761 + - pkg:pypi/pyparsing?source=hash-mapping + size: 110893 + timestamp: 1769003998136 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312h1c88c49_0.conda sha256: 090184b53185d5cf4c637d265ec2c225a326991c3f9aa46afa59336a9975d752 md5: b37103f94ef7f359fed67849c96dad10 @@ -12050,22 +12366,23 @@ packages: - pkg:pypi/pyproj?source=compressed-mapping size: 525698 timestamp: 1755183102397 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.1-py312h237c406_1.conda - sha256: d41a371e33a49c34ed9332cd1549be21a13b7b2d76ec0b16180039ceef4d343a - md5: 47281d6d45a7492a831026fb65206e01 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312he675c61_3.conda + sha256: ea0299f9699547531e81dd685f7ff0e50f7bc6dad932d8005ef24c3393cc07c1 + md5: c3258c31e507a81f0b52156bcca81e73 depends: - - __osx >=11.0 + - python + - proj - certifi - - proj >=9.6.0,<9.7.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - proj >=9.7.1,<9.8.0a0 - python_abi 3.12.* *_cp312 license: MIT license_family: MIT purls: - pkg:pypi/pyproj?source=hash-mapping - size: 511809 - timestamp: 1742323504810 + size: 551823 + timestamp: 1772623249858 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py312hf0774e8_0.conda sha256: 8fa1174707936d369cab091c95fbe554987b247df610596713c5a1305ed309ee md5: 175c82c0b0774557b76c8e5201610491 @@ -12082,6 +12399,23 @@ packages: - pkg:pypi/pyproj?source=hash-mapping size: 478584 timestamp: 1755183253366 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyproj-3.7.2-py314hb2113e1_3.conda + sha256: a2a7d692bbac993396569bf68aaeabdc1b80fbe33400ef7f59655d81f3025115 + md5: 841b9e806c0d84635ff9cf329623cf8f + depends: + - python + - proj + - certifi + - python 3.14.* *_cp314 + - __osx >=11.0 + - proj >=9.7.1,<9.8.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyproj?source=hash-mapping + size: 528919 + timestamp: 1772623276635 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py312hfab6c90_4.conda sha256: a5a9324ad04e50e9821c3704a1743e6397c892f57831abeb0b1e2523e577e918 md5: 67a33908a0abf4360d6d25cf9abab067 @@ -12098,6 +12432,22 @@ packages: purls: [] size: 2446646 timestamp: 1733344845629 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.6-py312hcf8a19e_0.conda + sha256: 3b82c1dc0f5a9579c96ef77136b0f46b2425a2e87f9d8d9ec9bb0610bb82812c + md5: 765f6aaae8612beb445d604ec34dd3f0 + depends: + - __glibc >=2.17,<3.0.a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3390307 + timestamp: 1775058020066 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyre-1.12.5-py312ha6e6942_4.conda sha256: f46cbbe81c93370ac2cccfcb2118a8624162ebacf2f95b2776c8c81c2edd3869 md5: 032bb466bb99c4169c25f240cc452f81 @@ -12114,17 +12464,6 @@ packages: purls: [] size: 2357972 timestamp: 1733345234322 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_1.conda - sha256: a721b3663d1917f3c9caa01069d23c44b0a378a6d3639f7e4f7b06887a9ac9bf - md5: 856b387c270e9eaf6e41e978057a2b62 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyshp?source=hash-mapping - size: 427368 - timestamp: 1733821648154 - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda sha256: 85d88ac0e1763f843ef47263176130f38faab81a959c8524d3459a6c12c08609 md5: 0e2556d607ec4bd6a765fe5a0e64ad74 @@ -12136,6 +12475,42 @@ packages: - pkg:pypi/pyshp?source=hash-mapping size: 450694 timestamp: 1754305213668 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.3-pyhd8ed1ab_0.conda + sha256: d9a0be08f14d5d513611f9902affb49ca3ed72e05509d15d3cdf1970a84b9233 + md5: c138c7aaa6a10b5762dcd92247864aff + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyshp?source=hash-mapping + size: 454408 + timestamp: 1764355333136 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_1.conda + sha256: 84acc0313f8961bda7e7f4ed1c5440a447cea225edef7045082c0b6ed3e6a032 + md5: 643b435a9f493c59c0d99f507ccead25 + depends: + - python + - qt6-main 6.11.0.* + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libclang13 >=21.1.8 + - libxml2 + - libxml2-16 >=2.14.6 + - python_abi 3.12.* *_cp312 + - libopengl >=1.7.0,<2.0a0 + - qt6-main >=6.11.0,<6.12.0a0 + - libegl >=1.7.0,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=compressed-mapping + size: 13203664 + timestamp: 1775055045447 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py312hdb827e4_0.conda sha256: 782c46d57daf2e027cd4d6a7c440ccecf09aca34e200d209b1d1a4ebb0548789 md5: 843ad8ae4523f47a7f636f576750c487 @@ -12172,24 +12547,6 @@ packages: - pkg:pypi/pysocks?source=hash-mapping size: 21085 timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312h3f74e48_3.conda - sha256: 1c7f718275c9aa235aa9ec9e37652300c1db91fdbaf05af75c293703952f1a6c - md5: 93920e5d1174d6136a3e724aa8b8e4a8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - scipy - license: GPL-3.0-or-later - license_family: GPL - purls: - - pkg:pypi/pysolid?source=hash-mapping - size: 89800 - timestamp: 1752090848165 - conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py312he6b159b_3.conda sha256: fa9ac8793375d3099ae38714c563c395391bc900feed8a6f4658f5bf52fd1474 md5: e8d6ed8695401b454d85303103ca8ddb @@ -12208,25 +12565,24 @@ packages: - pkg:pypi/pysolid?source=hash-mapping size: 87448 timestamp: 1725952051941 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h079ba4e_3.conda - sha256: 5e11c43f3cf3fe13e8629f7b699832751544422b125628f19aae1aaa2ef6e9a9 - md5: ff22f6892f13c7b36ec7104bc12bd2b6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.4-py312h3f74e48_0.conda + sha256: e508020db71bbdafef972b7c504bdef22d2aef8d1c2d6018f3d7f42c7b00a96d + md5: f08d7b5ac8df6069cb82d4a415344678 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 - - libgfortran5 >=15.1.0 - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 - scipy license: GPL-3.0-or-later license_family: GPL purls: - pkg:pypi/pysolid?source=hash-mapping - size: 85091 - timestamp: 1752091315068 + size: 89681 + timestamp: 1769254574708 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.3-py312h937420b_3.conda sha256: db20cddf0aa40e59ab2702609cf210b04d139c1d0cbb38e7616067bd720f4a5e md5: faaab824e323f4ab09d5456727aaaa3e @@ -12245,25 +12601,24 @@ packages: - pkg:pypi/pysolid?source=hash-mapping size: 84408 timestamp: 1725952086683 -- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda - sha256: 963524de7340c56615583ba7b97a6beb20d5c56a59defb59724dc2a3105169c9 - md5: c3c9316209dec74a705a36797970c6be +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pysolid-0.3.4-py314ha89eb22_0.conda + sha256: a3338b7b4449e2cca3048298d53ca2140d41de67b2362b59b4c927e38d43b19d + md5: 9a60c648eba6ea530bc588ef9ed4d254 depends: - - colorama - - exceptiongroup >=1.0.0rc8 - - iniconfig - - packaging - - pluggy <2,>=1.5 - - python >=3.9 - - tomli >=1 - constrains: - - pytest-faulthandler >=2 - license: MIT - license_family: MIT + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - scipy + license: GPL-3.0-or-later + license_family: GPL purls: - - pkg:pypi/pytest?source=hash-mapping - size: 259816 - timestamp: 1740946648058 + - pkg:pypi/pysolid?source=hash-mapping + size: 85108 + timestamp: 1769254870547 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda sha256: 93e267e4ec35353e81df707938a6527d5eb55c97bf54c3b87229b69523afb59d md5: a49c2283f24696a7b30367b7346a0144 @@ -12284,6 +12639,27 @@ packages: - pkg:pypi/pytest?source=hash-mapping size: 276562 timestamp: 1750239526127 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda + sha256: 39f41a52eb6f927caf5cd42a2ff98a09bb850ce9758b432869374b6253826962 + md5: da0c42269086f5170e2b296878ec13a6 + depends: + - pygments >=2.7.2 + - python >=3.10 + - iniconfig >=1 + - packaging >=20 + - pluggy >=1.5,<2 + - tomli >=1 + - colorama >=0.4 + - exceptiongroup >=1 + - python + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 294852 + timestamp: 1762354779909 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda sha256: 3a9fc07be76bc67aef355b78816b5117bfe686e7d8c6f28b45a1f89afe104761 md5: ce978e1b9ed8b8d49164e90a5cdc94cd @@ -12298,6 +12674,21 @@ packages: - pkg:pypi/pytest-cov?source=hash-mapping size: 28216 timestamp: 1749778064293 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + sha256: 44e42919397bd00bfaa47358a6ca93d4c21493a8c18600176212ec21a8d25ca5 + md5: 67d1790eefa81ed305b89d8e314c7923 + depends: + - coverage >=7.10.6 + - pluggy >=1.2 + - pytest >=7 + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest-cov?source=compressed-mapping + size: 29559 + timestamp: 1774139250481 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda sha256: bd1953e4bc20ffd52cfee41b27b3a781ca6e281004d0dd59e2dd60b0192c7a86 md5: 203b5d3f85a47940f7ec6b6e1747786e @@ -12311,6 +12702,21 @@ packages: - pkg:pypi/pytest-randomly?source=hash-mapping size: 14133 timestamp: 1692131735622 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-recording-0.13.4-pyhe01879c_1.conda + sha256: 15ca34a74e41d8f7bc39de2a9ab70e4242719f7437299a3e22848e305b9da039 + md5: cd0a8a0cd0e36705370b3ccf4e70dd2c + depends: + - attrs + - pytest >=3.5.0 + - python >=3.9 + - vcrpy >=2.0.1 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest-recording?source=hash-mapping + size: 20398 + timestamp: 1756036224668 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda sha256: b7b58a5be090883198411337b99afb6404127809c3d1c9f96e99b59f36177a96 md5: 8375cfbda7c57fbceeda18229be10417 @@ -12326,33 +12732,6 @@ packages: - pkg:pypi/pytest-xdist?source=hash-mapping size: 39300 timestamp: 1751452761594 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.10-h9e4cc4f_0_cpython.conda - sha256: 4dc1da115805bd353bded6ab20ff642b6a15fcc72ac2f3de0e1d014ff3612221 - md5: a41d26cd4d47092d683915d058380dec - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.0,<3.0a0 - - libffi >=3.4.6,<3.5.0a0 - - libgcc >=13 - - liblzma >=5.8.1,<6.0a0 - - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.49.1,<4.0a0 - - libuuid >=2.38.1,<3.0a0 - - libxcrypt >=4.4.36 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.0,<4.0a0 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - purls: [] - size: 31279179 - timestamp: 1744325164633 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda sha256: 6cca004806ceceea9585d4d655059e951152fc774a471593d4f5138e6a54c81d md5: 94206474a5608243a10c92cefbe0908f @@ -12380,56 +12759,33 @@ packages: purls: [] size: 31445023 timestamp: 1749050216615 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.9-h9e4cc4f_1_cpython.conda - build_number: 1 - sha256: 77f2073889d4c91a57bc0da73a0466d9164dbcf6191ea9c3a7be6872f784d625 - md5: d82342192dfc9145185190e651065aa9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e + md5: 7eccb41177e15cc672e1babe9056018e depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.6.4,<3.0a0 - - libffi >=3.4,<4.0a0 - - libgcc >=13 - - liblzma >=5.6.4,<6.0a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.49.1,<4.0a0 - - libuuid >=2.38.1,<3.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.4.1,<4.0a0 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - purls: [] - size: 31670716 - timestamp: 1741130026152 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.10-hc22306f_0_cpython.conda - sha256: 69aed911271e3f698182e9a911250b05bdf691148b670a23e0bea020031e298e - md5: c88f1a7e1e7b917d9c139f03b0960fea - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.0,<3.0a0 - - libffi >=3.4.6,<3.5.0a0 - - liblzma >=5.8.1,<6.0a0 - - libsqlite >=3.49.1,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.0,<4.0a0 - - readline >=8.2,<9.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata constrains: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 12932743 - timestamp: 1744323815320 + size: 31608571 + timestamp: 1772730708989 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda sha256: cde8b944c2dc378a5afbc48028d0843583fd215493d5885a80f1b41de085552f md5: 9207ebad7cfbe2a4af0702c92fd031c4 @@ -12452,29 +12808,31 @@ packages: purls: [] size: 13009234 timestamp: 1749048134449 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.9-hc22306f_1_cpython.conda - build_number: 1 - sha256: fe804fc462396baab8abe525a722d0254c839533c98c47abd2c6d1248ad45e93 - md5: d9fac7b334ff6e5f93abd27509a53060 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.4-h4c637c5_100_cp314.conda + build_number: 100 + sha256: 27e7d6cbe021f37244b643f06a98e46767255f7c2907108dd3736f042757ddad + md5: e1bc5a3015a4bbeb304706dba5a32b7f depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.4,<3.0a0 - - libffi >=3.4,<4.0a0 - - liblzma >=5.6.4,<6.0a0 - - libsqlite >=3.49.1,<4.0a0 - - libzlib >=1.3.1,<2.0a0 + - libexpat >=2.7.5,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.2,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libzlib >=1.3.2,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.4.1,<4.0a0 - - readline >=8.2,<9.0a0 + - openssl >=3.5.6,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - constrains: - - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 13042031 - timestamp: 1741128584924 + size: 13533346 + timestamp: 1775616188373 + python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 md5: 5b8d21249ff20967101ffa321cab24e8 @@ -12500,6 +12858,47 @@ packages: - pkg:pypi/python-dateutil?source=hash-mapping size: 222505 timestamp: 1733215763718 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.2.2-pyhcf101f3_0.conda + sha256: 498ad019d75ba31c7891dc6d9efc8a7ed48cd5d5973f3a9377eb1b174577d3db + md5: feb2e11368da12d6ce473b6573efab41 + depends: + - python >=3.10 + - filelock >=3.15.4 + - platformdirs <5,>=4.3.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/python-discovery?source=hash-mapping + size: 34341 + timestamp: 1775586706825 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.9.0-py312h5253ce2_0.conda + sha256: 124f40b723fdce04043728fbd3b83d8da908623d2fc031e750a5acafa9934abf + md5: ff391116e9ef3aa2e73a3fa5823b9d6e + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/librt?source=compressed-mapping + size: 80343 + timestamp: 1775764040950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-librt-0.9.0-py314ha14b1ff_0.conda + sha256: c68f760966344b6e7e31d7fe2dd90ebdcd4701413cdf2b058da29ff727673884 + md5: b409c6b041d02d3795f981f870dc5013 + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + purls: + - pkg:pypi/librt?source=hash-mapping + size: 74109 + timestamp: 1775825547864 - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0 md5: 88476ae6ebd24f39261e0854ac244f33 @@ -12533,6 +12932,17 @@ packages: purls: [] size: 6958 timestamp: 1752805918820 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + build_number: 8 + sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 + md5: 0539938c55b6b1a59b560e843ad864a4 + constrains: + - python 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1752805904792 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda build_number: 5 sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 @@ -12544,28 +12954,6 @@ packages: purls: [] size: 6278 timestamp: 1723823099686 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-6_cp312.conda - build_number: 6 - sha256: 5ed89c380e790b07f9a2e27de39445d2209fcdeb304577bc910884922648acc0 - md5: 3d84f3f8c97233b20d64019d3b9aea97 - constrains: - - python 3.12.* *_cpython - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 6937 - timestamp: 1743483237548 -- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - depends: - - python >=3.7 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pytz?source=hash-mapping - size: 188538 - timestamp: 1706886944988 - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 md5: bc8e3267d44011051f2eb14d22fb0960 @@ -12576,39 +12964,19 @@ packages: purls: - pkg:pypi/pytz?source=hash-mapping size: 189015 - timestamp: 1742920947249 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.9.0-py312h4f23490_0.conda - sha256: d21caa60428726ce4125ad37659e67f7c30dec0f4ffcff61f8851334b28f2fca - md5: 78fa1f2a2773c582ba0591030aa67431 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - numpy >=1.23,<3 - - numpy >=1.25,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pywavelets?source=hash-mapping - size: 3717020 - timestamp: 1754374928641 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.9.0-py312hc7121bb_0.conda - sha256: 240171cae0a56482ad1933d3c0914b9a1be89619c64c384e6e972a4a89a72bb0 - md5: 0b0e193d26cef0014e54012ba4c71e56 - depends: - - __osx >=11.0 - - numpy >=1.23,<3 - - numpy >=1.25,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 + timestamp: 1742920947249 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.1.post1-pyhcf101f3_0.conda + sha256: d35c15c861d5635db1ba847a2e0e7de4c01994999602db1f82e41b5935a9578a + md5: f8a489f43a1342219a3a4d69cecc6b25 + depends: + - python >=3.10 + - python license: MIT license_family: MIT purls: - - pkg:pypi/pywavelets?source=hash-mapping - size: 3629749 - timestamp: 1754375200626 + - pkg:pypi/pytz?source=compressed-mapping + size: 201725 + timestamp: 1773679724369 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda sha256: 159cba13a93b3fe084a1eb9bda0a07afc9148147647f0d437c3c3da60980503b md5: cf2485f39740de96e2a7f2bb18ed2fee @@ -12624,6 +12992,21 @@ packages: - pkg:pypi/pyyaml?source=hash-mapping size: 206903 timestamp: 1737454910324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf + md5: 15878599a87992e44c059731771591cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 198293 + timestamp: 1770223620706 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda sha256: ad225ad24bfd60f7719709791345042c3cb32da1692e62bd463b084cf140e00d md5: 68149ed4d4e9e1c42d2ba1f27f08ca96 @@ -12639,6 +13022,21 @@ packages: - pkg:pypi/pyyaml?source=hash-mapping size: 192148 timestamp: 1737454886351 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + sha256: 95f385f9606e30137cf0b5295f63855fd22223a4cf024d306cf9098ea1c4a252 + md5: dcf51e564317816cb8d546891019b3ab + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 189475 + timestamp: 1770223788648 - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc md5: 353823361b1d27eb3960efb076dfcaf6 @@ -12660,6 +13058,80 @@ packages: purls: [] size: 516376 timestamp: 1720814307311 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.0-pl5321h16c4a6b_2.conda + sha256: e83dabfeb6209c863a1555edad81b12b08a953a0d952359bf3f0be3250ab12ce + md5: c6ba2de6b22dedf2f20eba3bde1dbe8e + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libllvm21 >=21.1.8,<21.2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - pcre2 >=10.47,<10.48.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libclang-cpp21.1 >=21.1.8,<21.2.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - icu >=78.3,<79.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - libglib >=2.86.4,<3.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libpq >=18.3,<19.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - harfbuzz >=13.2.1 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - dbus >=1.16.2,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - libxcb >=1.17.0,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - libegl >=1.7.0,<2.0a0 + - libpng >=1.6.56,<1.7.0a0 + - wayland >=1.25.0,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - xorg-libxext >=1.3.7,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libclang13 >=21.1.8 + - libsqlite >=3.52.0,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + constrains: + - qt ==6.11.0 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 60993086 + timestamp: 1774634904948 - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.1-h6ac528c_2.conda sha256: 8795462e675b7235ad3e01ff3367722a37915c7084d0fb897b328b7e28a358eb md5: 34ccdb55340a25761efbac1ff1504091 @@ -12748,6 +13220,32 @@ packages: - pkg:pypi/rasterio?source=hash-mapping size: 7969647 timestamp: 1742428912430 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.5.0-py312hcedc861_0.conda + sha256: c7a9a69149a15262e14c32232459d45e3ef58aee65e46ed60b270a6ded54a573 + md5: f0d110978a87b200a06412b56b26407c + depends: + - __glibc >=2.17,<3.0.a0 + - affine + - attrs + - certifi + - click >=4,!=8.2.* + - click-plugins + - cligj >=0.5 + - libgcc >=14 + - libgdal-core >=3.12.1,<3.13.0a0 + - libstdcxx >=14 + - numpy >=1.23,<3 + - proj >=9.7.1,<9.8.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - setuptools >=0.9.8 + - snuggs >=1.4.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/rasterio?source=hash-mapping + size: 8133020 + timestamp: 1767632791843 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.4.3-py312h4623290_1.conda sha256: c03daa780954e576e2c13ffd1727b1d6763ac5e9b9a1542301f7680534fb39bb md5: 41a4c42552e1d0c37b5b44909008fd10 @@ -12774,6 +13272,32 @@ packages: - pkg:pypi/rasterio?source=hash-mapping size: 7916493 timestamp: 1742429338038 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rasterio-1.5.0-py314h5002e4e_0.conda + sha256: 39cbd44377e218d94e88a17dbafa82e18f3631929832ff7bdb3b3c2c3af672dd + md5: 8a3db2ceb5103f48878c510065febca3 + depends: + - __osx >=11.0 + - affine + - attrs + - certifi + - click >=4,!=8.2.* + - click-plugins + - cligj >=0.5 + - libcxx >=19 + - libgdal-core >=3.12.1,<3.13.0a0 + - numpy >=1.23,<3 + - proj >=9.7.1,<9.8.0a0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - setuptools >=0.9.8 + - snuggs >=1.4.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/rasterio?source=hash-mapping + size: 7442099 + timestamp: 1767632864203 - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda sha256: 6e5e704c1c21f820d760e56082b276deaf2b53cf9b751772761c3088a365f6f4 md5: 2c42649888aac645608191ffdc80d13a @@ -12787,6 +13311,19 @@ packages: purls: [] size: 5176669 timestamp: 1746622023242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.8.1-h1fbca29_0.conda + sha256: cf550bbc8e5ebedb6dba9ccaead3e07bd1cb86b183644a4c853e06e4b3ad5ac7 + md5: d83958768626b3c8471ce032e28afcd3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 5595970 + timestamp: 1772540833621 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.7.1-h0716509_3.conda sha256: 65f862b2b31ef2b557990a82015cbd41e5a66041c2f79b4451dd14b4595d4c04 md5: 7b37f30516100b86ea522350c8cab44c @@ -12799,46 +13336,18 @@ packages: purls: [] size: 856271 timestamp: 1746622200646 -- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - sha256: 66d34e3b4881f856486d11914392c585713100ca547ccfc0947f3a4765c2c486 - md5: 6f445fb139c356f903746b2b91bbe786 - depends: - - libre2-11 2024.07.02 hba17884_3 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 26811 - timestamp: 1741121137599 -- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda - sha256: 7a0b82cb162229e905f500f18e32118ef581e1fd182036f3298510b8e8663134 - md5: 2b4249747a9091608dbff2bd22afde44 - depends: - - libre2-11 2025.06.26 hba17884_0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 27330 - timestamp: 1751053087063 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_3.conda - sha256: 248af2869bf54f77f5b4c6e144b535bbc2a6d4c27228f4fb2ed689f8df9f071b - md5: d4e82bd66b71c29da35e1f634548e039 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.8.1-h8246384_0.conda + sha256: 925e35b71fe513e0380ecd2fe137e3f4f248bf7ce4bad96946c7c704b7a50d26 + md5: 4706a8a71474c692482c3f86c2175454 depends: - - libre2-11 2024.07.02 hd41c47c_3 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 26954 - timestamp: 1741121389739 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda - sha256: d7c4f0144530c829bc9c39d1e17f31242a15f4e91c9d7d0f8dda58ab245988bb - md5: d519f1f98599719494472639406faffb - depends: - - libre2-11 2025.06.26 hd41c47c_0 - license: BSD-3-Clause + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: BSD-2-Clause license_family: BSD purls: [] - size: 27423 - timestamp: 1751053372858 + size: 886953 + timestamp: 1772541394570 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c md5: 283b96675859b20a825f8fa30f311446 @@ -12850,6 +13359,18 @@ packages: purls: [] size: 282480 timestamp: 1740379431762 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 345073 + timestamp: 1765813471974 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34 md5: 63ef3f6e6d6d5c589e64f11263dc5676 @@ -12860,6 +13381,17 @@ packages: purls: [] size: 252359 timestamp: 1740379663071 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 + md5: f8381319127120ce51e081dce4865cf4 + depends: + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 313930 + timestamp: 1765813902568 - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2025.7.34-py312h4c3975b_0.conda sha256: 603e3208d9f0cb01708c7acc3521e460acfda2d01a182bc06e98beed219a825f md5: 3f7a1b14a111a4bc196f8e286ac29e65 @@ -12874,6 +13406,20 @@ packages: - pkg:pypi/regex?source=compressed-mapping size: 407782 timestamp: 1753984175334 +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.4.4-py312h4c3975b_0.conda + sha256: f2af90e06f2821c9bc9cc90e7346451586ddd08de7ad6bfd85b867f92e1e188e + md5: 83b5e0585164a81913418a4512f29175 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 AND CNRI-Python + license_family: PSF + purls: + - pkg:pypi/regex?source=hash-mapping + size: 411140 + timestamp: 1775259323073 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2025.7.34-py312h163523d_0.conda sha256: 0d36e59cb1b3bf93a401593287b632292784825604442819e3ac6c52c9f91d95 md5: 18d048b4f3cc035f84dbe25fa624d2ed @@ -12888,6 +13434,20 @@ packages: - pkg:pypi/regex?source=hash-mapping size: 370896 timestamp: 1753984618750 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2026.4.4-py314h6c2aa35_0.conda + sha256: c3c5895e763e0dcd154003edc1d0ed4eaea9912522a6673155c694aa9236dc47 + md5: 4db23ae5e7b3d38e9dfc98b0ae888633 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 AND CNRI-Python + license_family: PSF + purls: + - pkg:pypi/regex?source=hash-mapping + size: 377680 + timestamp: 1775259675012 - conda: https://conda.anaconda.org/conda-forge/noarch/remotezip-0.12.3-pyhd8ed1ab_1.conda sha256: ef52d7c1870a13740df224f370ff6457f1135f319ab7a0a2b13ce5fd34b0eeab md5: ae636b9c45eaf85205950fc94401fd8b @@ -12900,9 +13460,9 @@ packages: - pkg:pypi/remotezip?source=hash-mapping size: 13883 timestamp: 1734988437995 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad - md5: a9b9368f3701a417eac9edbcae7cb737 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda + sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 + md5: f6082eae112814f1447b56a5e1f6ed05 depends: - certifi >=2017.4.17 - charset-normalizer >=2,<4 @@ -12915,25 +13475,26 @@ packages: license_family: APACHE purls: - pkg:pypi/requests?source=hash-mapping - size: 58723 - timestamp: 1733217126197 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda - sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18 - md5: f6082eae112814f1447b56a5e1f6ed05 + size: 59407 + timestamp: 1749498221996 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + sha256: c0249bc4bf4c0e8e06d0e7b4d117a5d593cc4ab2144d5006d6d47c83cb0af18e + md5: 10afbb4dbf06ff959ad25a92ccee6e59 depends: - - certifi >=2017.4.17 + - python >=3.10 + - certifi >=2023.5.7 - charset-normalizer >=2,<4 - idna >=2.5,<4 - - python >=3.9 - - urllib3 >=1.21.1,<3 + - urllib3 >=1.26,<3 + - python constrains: - chardet >=3.0.2,<6 license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/requests?source=hash-mapping - size: 59407 - timestamp: 1749498221996 + - pkg:pypi/requests?source=compressed-mapping + size: 63712 + timestamp: 1774894783063 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.1.0-pyhe01879c_0.conda sha256: 3bda3cd6aa2ca8f266aeb8db1ec63683b4a7252d7832e8ec95788fb176d0e434 md5: c41e49bd1f1479bed6c6300038c5466e @@ -12949,23 +13510,20 @@ packages: - pkg:pypi/rich?source=hash-mapping size: 201098 timestamp: 1753436991345 -- conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.18.2-pyhd8ed1ab_0.conda - sha256: 77ca13bbbd01c0649eeac57db35ddf511d16e09b53703cc28cffa0ee32bf3f25 - md5: daf05c3baaae11700637ab0e9c678c00 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a + md5: 0242025a3c804966bf71aa04eee82f66 depends: - - numpy >=1.23 - - packaging - - pyproj >=3.3 + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 - python >=3.10 - - rasterio >=1.3.7 - - scipy - - xarray >=2024.7.0 - license: Apache-2.0 - license_family: Apache + - typing_extensions >=4.0.0,<5.0.0 + - python + license: MIT purls: - - pkg:pypi/rioxarray?source=hash-mapping - size: 52468 - timestamp: 1737141232838 + - pkg:pypi/rich?source=hash-mapping + size: 208577 + timestamp: 1775991661559 - conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.19.0-pyhd8ed1ab_0.conda sha256: 093f2a6e70e2fe2e235927639b50e4e5fa4e350ac979fe3a88b821c1a087af41 md5: 047d060dab87bd3de52bbbd6c6e9b5e4 @@ -12983,6 +13541,23 @@ packages: - pkg:pypi/rioxarray?source=hash-mapping size: 52774 timestamp: 1745317012687 +- conda: https://conda.anaconda.org/conda-forge/noarch/rioxarray-0.22.0-pyhc364b38_0.conda + sha256: a95c313b27b440368be0bf16e0a30d8413f1722a74b99147e406317d5d7968fa + md5: 3b15f93fcd0f02b829596ade8b8f0d5a + depends: + - python >=3.12 + - packaging + - rasterio >=1.4.3 + - xarray >=2026.2 + - pyproj >=3.3 + - numpy >=2 + - python + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/rioxarray?source=hash-mapping + size: 65348 + timestamp: 1772826126034 - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.14-py312h66e93f0_0.conda sha256: ba0216708dd5f3f419f58d337d0498d8d28ae508784b8111d79cecb6a547b2d6 md5: ebef257605116235f5feac68640b44ca @@ -12998,6 +13573,19 @@ packages: - pkg:pypi/ruamel-yaml?source=hash-mapping size: 268479 timestamp: 1749480091070 +- conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda + sha256: b48bebe297a63ae60f52e50be328262e880702db4d9b4e86731473ada459c2a1 + md5: 06ad944772941d5dae1e0d09848d8e49 + depends: + - python >=3.10 + - ruamel.yaml.clib >=0.2.15 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml?source=hash-mapping + size: 98448 + timestamp: 1767538149184 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.14-py312hea69d52_0.conda sha256: 701239de5094f567f2f3d54f2fdef87238de039c8405826011eadee2bb761d88 md5: c82d1ddf44663c982945f42f36f96f3d @@ -13013,6 +13601,20 @@ packages: - pkg:pypi/ruamel-yaml?source=hash-mapping size: 268872 timestamp: 1749480207447 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py312h5253ce2_1.conda + sha256: dc520329bdfd356e2f464393f8ad9b8450fd5a269699907b2b8d629300c2c068 + md5: 84aa470567e2211a2f8e5c8491cdd78c + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml-clib?source=hash-mapping + size: 148221 + timestamp: 1766159515069 - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda sha256: ac987b1c186d79e4e1ce4354a84724fc68db452b2bd61de3a3e1b6fc7c26138d md5: 532c3e5d0280be4fea52396ec1fa7d5d @@ -13027,6 +13629,20 @@ packages: - pkg:pypi/ruamel-yaml-clib?source=hash-mapping size: 145481 timestamp: 1728724626666 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.15-py314ha14b1ff_1.conda + sha256: ad575cae7f662b2dafca88c4ce05120e322f825c0610e54b0a116550c817bbbe + md5: 5836fbf79e5f279ffbe4ba06066c51a3 + depends: + - python + - python 3.14.* *_cp314 + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruamel-yaml-clib?source=hash-mapping + size: 133016 + timestamp: 1766159585543 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312h0bf5046_1.conda sha256: ce979a9bcb4b987e30c4aadfbd4151006cd6ac480bdbee1d059e6f0186b48bca md5: 2ed5f254c9ea57b6d0fd4e12baa4b87f @@ -13041,88 +13657,21 @@ packages: - pkg:pypi/ruamel-yaml-clib?source=hash-mapping size: 117121 timestamp: 1728724705098 -- conda: https://conda.anaconda.org/conda-forge/noarch/s1reader-0.2.5-pyhd8ed1ab_0.conda - sha256: 4d18b2785fde4de43b05db0cbd7d0e81b68f71cf91c31c06d5cfdb8960e72d87 - md5: 240d9e183f390979a6207f37f05758dd - depends: - - gdal >=3.0 - - importlib-resources - - isce3 >=0.13 - - lxml >=4.8 - - numpy >=1.20 - - packaging >=21.0 - - python >=3.9 - - requests >=2.0 - - scipy >=1.9 - - shapely >=1.8 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/s1reader?source=hash-mapping - size: 2928196 - timestamp: 1746193919671 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.21-h7ab7c64_0.conda - sha256: c8b252398b502a5cc6ea506fd2fafe7e102e7c9e2ef48b7813566e8a72ce2205 - md5: 28b5a7895024a754249b2ad7de372faa - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 358164 - timestamp: 1749095480268 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.22-h96f233e_0.conda - sha256: 12dc8ff959fbf28384fdfd8946a71bdfa77ec84f40dcd0ca5a4ae02a652583ca - md5: 2f6fc0cf7cd248a32a52d7c8609d93a9 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.5.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 357537 - timestamp: 1751932188890 -- conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-0.4.2-py_0.tar.bz2 - sha256: 7a4cb574ff7edf773e5e4c396733dcb08ffcfd6e4f8b27e5b84b35fd4666ef5b - md5: ead328eb12f01d88706126ba061e7a69 - depends: - - boto3 - - fsspec >=0.6.0 - - python >=3.5 - license: BSD 3-Clause - purls: - - pkg:pypi/s3fs?source=hash-mapping - size: 21157 - timestamp: 1585670623844 -- conda: https://conda.anaconda.org/conda-forge/noarch/s3fs-2025.7.0-pyhd8ed1ab_0.conda - sha256: 38addc258cf69e39c2df88c4c4995a2108ad782437bbae357b69493216c813db - md5: 00502db3bc89fb08171b34ccfcbf8046 - depends: - - aiobotocore >=2.5.4,<3.0.0 - - aiohttp - - fsspec 2025.7.0 - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/s3fs?source=hash-mapping - size: 33457 - timestamp: 1752634552936 -- conda: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.13.1-pyhd8ed1ab_0.conda - sha256: a9cc762b0a472ed3bb69784ebe71e99a72661cdf38001c5e717cb4c2a2505d6f - md5: d66713a183295206013e8f93db001e99 - depends: - - botocore >=1.37.4,<2.0a.0 - - python >=3.9 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/s3transfer?source=hash-mapping - size: 65715 - timestamp: 1752878105783 +- pypi: git+https://github.com/scottstanie/s1-reader.git?branch=develop-scott#b3fb4a9d7624363d7e36021bc3e177d10ba6ed92 + name: s1reader + version: 0.2.5 + requires_dist: + - setuptools + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/6a/52/5ccdc01f7a8a61357d15a66b5d8a6580aa8529cb33f32e6cbb71c52622c5/s3fs-2026.3.0-py3-none-any.whl + name: s3fs + version: 2026.3.0 + sha256: 2fa40a64c03003cfa5ae0e352788d97aa78ae8f9e25ea98b28ce9d21ba10c1b8 + requires_dist: + - aiobotocore>=2.19.0,<4.0.0 + - fsspec==2026.3.0 + - aiohttp>=3.9.0,!=4.0.0a0,!=4.0.0a1 + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.11.3-pyhd8ed1ab_1.conda sha256: cd06ec33f94dce22e46212866299bc5cb482039f5626f52deb11afd215ac2e8f md5: 89b2f2294138ad1367295221bac15d62 @@ -13136,162 +13685,178 @@ packages: - pkg:pypi/sardem?source=hash-mapping size: 31867 timestamp: 1735950090662 -- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.25.2-py312hf9745cd_1.conda - sha256: 413e20ba513fc7305a9f010ba8e0385ac29714141a0ee56df0eda6ee4a998d01 - md5: 7c03f16bb8578b48352ee006adf6a5b3 +- conda: https://conda.anaconda.org/conda-forge/noarch/sardem-0.13.0-pyhd8ed1ab_0.conda + sha256: ebbfa2fdf8ac584fe635ddc2c2446192dfd8e8e24c97afe09912a1103fd853e8 + md5: 6c1568503c6a02012f71918719a721fe depends: + - numpy + - python >=3.10 + - requests + license: MIT + license_family: MIT + purls: + - pkg:pypi/sardem?source=hash-mapping + size: 39844 + timestamp: 1771292542414 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.26.0-np2py312h4ae17e4_0.conda + sha256: 581a2228e6963b0707562f519ff68d6c97fad44711af56d3dbeb4a7377939cce + md5: 36772b1aa2dbd7b75664294d50fecb79 + depends: + - imageio >=2.33,!=2.35.0 + - lazy-loader >=0.4 + - networkx >=3.0 + - numpy >=1.24 + - packaging >=21.0 + - pillow >=10.1 + - python + - scipy >=1.11.4 + - tifffile >=2022.8.12 - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + - numpy >=1.23,<3 + constrains: + - astropy-base >=6.0 + - dask-core >=2023.2.0,!=2024.8.0 + - matplotlib-base >=3.7 + - pooch >=1.6.0 + - pyamg >=5.2 + - pywavelets >=1.6 + - scikit-learn >=1.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-image?source=hash-mapping + size: 18546003 + timestamp: 1766684359934 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py312ha921b1d_0.conda + sha256: 87f56777c91af0849bbcfc0f9f0d53cbf8eb651151975782fd4f744b7ccd1739 + md5: c582406829218aa701e9ce61aa57973e + depends: - imageio >=2.33,!=2.35.0 - lazy-loader >=0.4 - - libgcc >=13 - - libstdcxx >=13 - networkx >=3.0 - - numpy >=1.19,<3 - numpy >=1.24 - - packaging >=21 + - packaging >=21.0 - pillow >=10.1 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - pywavelets >=1.1.1 + - python - scipy >=1.11.4 - tifffile >=2022.8.12 + - __osx >=11.0 + - libcxx >=19 + - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 + - numpy >=1.23,<3 constrains: + - astropy-base >=6.0 + - dask-core >=2023.2.0,!=2024.8.0 - matplotlib-base >=3.7 - - numpy >=1.24 - pooch >=1.6.0 - - scikit-learn >=1.2 - - dask-core >=2022.11.0,!=2024.8.0 - pyamg >=5.2 - pywavelets >=1.6 - - cloudpickle >=3.0 - - astropy >=6.0 - - toolz >=0.10.0 - - cytoolz >=0.11.0 + - scikit-learn >=1.2 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scikit-image?source=hash-mapping - size: 10776652 - timestamp: 1747533274876 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.25.2-py312hcb1e3ce_1.conda - sha256: 5ba757ecbc7b0ce14a8d9c8e244b0f825663c928a08f7b261a83f947024ca017 - md5: d33850b853bca259d7631b278621cfd7 + size: 17963697 + timestamp: 1766684388162 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.26.0-np2py314hc49a259_0.conda + sha256: a52ff154b6761979aead2293f938e46db22b2b219d0545f5f3d22ba5f93a14db + md5: a9e8d641fa74e67f96713df35c448da5 depends: - - __osx >=11.0 - imageio >=2.33,!=2.35.0 - lazy-loader >=0.4 - - libcxx >=18 - networkx >=3.0 - - numpy >=1.19,<3 - numpy >=1.24 - - packaging >=21 + - packaging >=21.0 - pillow >=10.1 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - pywavelets >=1.1.1 + - python - scipy >=1.11.4 - tifffile >=2022.8.12 + - __osx >=11.0 + - python 3.14.* *_cp314 + - libcxx >=19 + - numpy >=1.23,<3 + - python_abi 3.14.* *_cp314 constrains: - - scikit-learn >=1.2 - - pooch >=1.6.0 - - toolz >=0.10.0 - - pywavelets >=1.6 - - dask-core >=2022.11.0,!=2024.8.0 - - numpy >=1.24 + - astropy-base >=6.0 + - dask-core >=2023.2.0,!=2024.8.0 - matplotlib-base >=3.7 - - cloudpickle >=3.0 - - astropy >=6.0 - - cytoolz >=0.11.0 + - pooch >=1.6.0 - pyamg >=5.2 + - pywavelets >=1.6 + - scikit-learn >=1.2 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scikit-image?source=hash-mapping - size: 10630850 - timestamp: 1747533106281 -- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.6.1-py312h7a48858_0.conda - sha256: 7c869c73c95ef09edef839448ae3d153c4e3a208fb110c4260225f342d23e08e - md5: 102727f71df02a51e9e173f2e6f87d57 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - - joblib >=1.2.0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - scipy - - threadpoolctl >=3.1.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scikit-learn?source=hash-mapping - size: 10628698 - timestamp: 1736497249999 -- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.7.1-py312h4f0b9e3_0.conda - sha256: c87194d7a0659493aa8ca9007bba2a4a8965e60037c396cd2e08fc1b5c91548b - md5: 7f96df096abbe0064f0ec5060c1d2af4 + size: 18049239 + timestamp: 1766684379132 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py312h3226591_1.conda + sha256: 23c643c37fafa14ba3f2b7a407126ea5e732a3655ea8157cf9f977098f863448 + md5: 38decbeae260892040709cafc0514162 depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - - joblib >=1.2.0 + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.3.0 + - threadpoolctl >=3.2.0 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - - numpy >=1.22.0 + - _openmp_mutex >=4.5 - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - - scipy >=1.8.0 - - threadpoolctl >=3.1.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping - size: 9685421 - timestamp: 1752826143141 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.6.1-py312h39203ce_0.conda - sha256: 63e7751b861b5d8a6bfe32a58e67b446b8235f8768e860db955b394e4c7a9edc - md5: 3d38707ed1991a65dd165c5460d7f3a2 + size: 9726193 + timestamp: 1765801245538 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py312he5ca3e3_1.conda + sha256: 5f640a06e001666f9d4dca7cca992f1753e722e9f6e50899d7d250c02ddf7398 + md5: ed7887c51edfa304c69a424279cec675 depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.3.0 + - threadpoolctl >=3.2.0 + - libcxx >=19 + - python 3.12.* *_cpython - __osx >=11.0 - - joblib >=1.2.0 - - libcxx >=18 - - llvm-openmp >=18.1.8 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - llvm-openmp >=19.1.7 + - numpy >=1.23,<3 - python_abi 3.12.* *_cp312 - - scipy - - threadpoolctl >=3.1.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping - size: 9769459 - timestamp: 1736497509734 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.1-py312h54d6233_0.conda - sha256: c1a079efc29fdb840f9a2b53ee44940aafbe81b4f1845c1281aa9da77b2c4ce5 - md5: d384e66a54996cc54614fdd111489d6a + size: 9124177 + timestamp: 1766550900752 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py314h15f0f0f_1.conda + sha256: 3b30f332fb87598de8c31a3cbec1bc79b926bcc6f535bda10054721a96c256dc + md5: d9bc75bfda103e05a55e4034fded8ddf depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.3.0 + - threadpoolctl >=3.2.0 + - llvm-openmp >=19.1.7 + - python 3.14.* *_cp314 - __osx >=11.0 - - joblib >=1.2.0 - libcxx >=19 - - llvm-openmp >=19.1.7 - - numpy >=1.22.0 + - python_abi 3.14.* *_cp314 - numpy >=1.23,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - - scipy >=1.8.0 - - threadpoolctl >=3.1.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping - size: 8931629 - timestamp: 1752826246695 + size: 9383244 + timestamp: 1766550871162 - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py312heda63a1_2.conda sha256: ec8a9d8699d4d42a6c190596a5e2757206328803cee2a00bb11d0e36decb9a37 md5: 17729ab9bbb780e93458c7857afffcab @@ -13313,6 +13878,29 @@ packages: - pkg:pypi/scipy?source=hash-mapping size: 17083471 timestamp: 1706042601027 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + sha256: e3ad577361d67f6c078a6a7a3898bf0617b937d44dc4ccd57aa3336f2b5778dd + md5: 3e38daeb1fb05a95656ff5af089d2e4c + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=compressed-mapping + size: 17109648 + timestamp: 1771880675810 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.12.0-py312h9d7df2b_2.conda sha256: c03f8f87df62b0da27f282f71ffff00ffb15a726061f145fbbb04dc964da7f33 md5: ecf0b30bef6d14ffdf83cfcc7f93fa23 @@ -13335,6 +13923,29 @@ packages: - pkg:pypi/scipy?source=hash-mapping size: 15547334 timestamp: 1706043853757 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda + sha256: 6ca2abcaff2cd071aabaabd82b10a87fc7de3a4619f6c98820cc28e90cc2cb20 + md5: 7806ce54b78b0b11517b465a3398e910 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 13986990 + timestamp: 1771881110844 - conda: https://conda.anaconda.org/conda-forge/noarch/sentineleof-0.11.1-pyhd8ed1ab_0.conda sha256: 36a5de7fc245678a4950c600c24b8a9cbe417a3b35dcbe1a865fd8c86cc1f963 md5: 1dc0e9e35285eec9f586e2e9348c249b @@ -13349,28 +13960,6 @@ packages: - pkg:pypi/sentineleof?source=hash-mapping size: 32773 timestamp: 1753437556805 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 - md5: 9bddfdbf4e061821a1a443f93223be61 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/setuptools?source=hash-mapping - size: 777736 - timestamp: 1740654030775 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-78.1.0-pyhff2d567_0.conda - sha256: d4c74d2140f2fbc72fe5320cbd65f3fd1d1f7832ab4d7825c37c38ab82440ae2 - md5: a42da9837e46c53494df0044c3eb1f53 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/setuptools?source=compressed-mapping - size: 786557 - timestamp: 1743775941985 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 md5: 4de79c071274a53dcaf2a8c749d1499e @@ -13382,21 +13971,17 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 748788 timestamp: 1748804951958 -- conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py312h21f5128_0.conda - sha256: 3174ecb1b9bc587f756ef5badc219d07fca1ebee4256a5c41087d77255b9a0db - md5: 761c745a289b3d6abf56eb1193343172 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd depends: - - __glibc >=2.17,<3.0.a0 - - geos >=3.13.1,<3.13.2.0a0 - - libgcc >=13 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause + - python >=3.10 + license: MIT + license_family: MIT purls: - - pkg:pypi/shapely?source=hash-mapping - size: 639799 - timestamp: 1743678518069 + - pkg:pypi/setuptools?source=hash-mapping + size: 639697 + timestamp: 1773074868565 - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.1-py312h21f5128_0.conda sha256: 5e4086909b5884d6ba1244f63ac83b6cff9d1a871e1c334cd07eb28d0feda5cd md5: d38eb6d34385f82b02ff776a66977cc4 @@ -13413,25 +13998,25 @@ packages: - pkg:pypi/shapely?source=hash-mapping size: 639956 timestamp: 1747664455853 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.0.7-py312hf733f26_1.conda - sha256: dc09fedd0ae7857571c1daf7ee1322f5535d486e4f939a4ce2ac4741ad85736d - md5: 5033b6bb0358d8a756ec2fbf7739ed36 +- conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda + sha256: da100ac0210f52399faf814f701165058fa2e2f65f5c036cdf2bf99a40223373 + md5: 69e400d3deca12ee7afd4b73a5596905 depends: - - __osx >=11.0 - - geos >=3.13.1,<3.13.2.0a0 - - numpy >=1.19,<3 + - __glibc >=2.17,<3.0.a0 + - geos >=3.14.1,<3.14.2.0a0 + - libgcc >=14 + - numpy >=1.23,<3 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/shapely?source=hash-mapping - size: 536480 - timestamp: 1741167452069 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.0-py312hf733f26_0.conda - sha256: 4817a39ccf08617b7ba4952efeb5f988af5773380d6bc97b8d969544f9331c1b - md5: c3b97e9e919a9bb33a8836c03252b2e0 + size: 631649 + timestamp: 1762523699384 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.1-py312hf733f26_0.conda + sha256: 9d4b0ef4b15f3b3a61e814db1949e0553b939e7a6ba9a2ca012bb0e141f54a7b + md5: a4d268689748c518130e8879c6a97ffe depends: - __osx >=11.0 - geos >=3.13.1,<3.13.2.0a0 @@ -13443,24 +14028,24 @@ packages: license_family: BSD purls: - pkg:pypi/shapely?source=hash-mapping - size: 601495 - timestamp: 1743678625203 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.1-py312hf733f26_0.conda - sha256: 9d4b0ef4b15f3b3a61e814db1949e0553b939e7a6ba9a2ca012bb0e141f54a7b - md5: a4d268689748c518130e8879c6a97ffe + size: 600145 + timestamp: 1747664641197 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.1.2-py314h277790e_2.conda + sha256: 3d6f64391563dbe47f2e795ce99b2389c84c695df12170e0a1743b10963ebce7 + md5: 947d1f4e3160c83140a9c8bcb046fdac depends: - __osx >=11.0 - - geos >=3.13.1,<3.13.2.0a0 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 + - geos >=3.14.1,<3.14.2.0a0 + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/shapely?source=hash-mapping - size: 600145 - timestamp: 1747664641197 + size: 618928 + timestamp: 1762524178138 - conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.7.2-pyhd8ed1ab_0.conda sha256: d6af628ecc3bbe9784b2fda6301ee65e03a634b2457199f81525a5d358034e16 md5: 6da1912e2881409483bcd57632d23d49 @@ -13472,6 +14057,17 @@ packages: - pkg:pypi/shtab?source=hash-mapping size: 20225 timestamp: 1744494202036 +- conda: https://conda.anaconda.org/conda-forge/noarch/shtab-1.8.0-pyhd8ed1ab_0.conda + sha256: 02567ec721dd5ff6e8942c1cf1db9bb12df64409ff48fc3571b212c122ef9006 + md5: 3b92b45edc5da4cbd603dd7a059f402a + depends: + - python >=3.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/shtab?source=hash-mapping + size: 20495 + timestamp: 1763470677024 - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db md5: a451d576819089b0d672f18768be0f65 @@ -13495,46 +14091,36 @@ packages: - pkg:pypi/six?source=hash-mapping size: 18455 timestamp: 1753199211006 -- conda: https://conda.anaconda.org/conda-forge/linux-64/snaphu-0.4.1-py312h66e93f0_1.conda - sha256: 6403dfd6d8db067915e46fa02c1fa9cf090fca58c9fe99e5c20dd8eb1e86e173 - md5: bd463ac4b065ced713bce8eca66fb51a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - numpy >=1.20 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: (Apache-2.0 OR BSD-3-Clause) AND LicenseRef-SNAPHU - purls: - - pkg:pypi/snaphu?source=hash-mapping - size: 172486 - timestamp: 1726558767926 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/snaphu-0.4.1-py312h024a12e_1.conda - sha256: 8e2a9975b8d67f10c42166cd63c88c73a8d458f368f91de3274ba9882b8f9feb - md5: 696ce0105b67fa1b32bddd69ade19b59 - depends: - - __osx >=11.0 - - numpy >=1.20 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: (Apache-2.0 OR BSD-3-Clause) AND LicenseRef-SNAPHU - purls: - - pkg:pypi/snaphu?source=hash-mapping - size: 157913 - timestamp: 1726559099485 -- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - sha256: ec91e86eeb2c6bbf09d51351b851e945185d70661d2ada67204c9a6419d282d3 - md5: 3b3e64af585eadfb52bb90b553db5edf - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 42739 - timestamp: 1733501881851 +- pypi: https://files.pythonhosted.org/packages/3b/b9/50d7a530c3dc97f61d30fefb31aa50f4710954de12e0cebcae8c9fc8d301/snaphu-0.4.1.tar.gz + name: snaphu + version: 0.4.1 + sha256: 41a7f48e1b8809fa19e9fa5c7e90bfbd1502b1d5b437d2a302fc4938e64095b6 + requires_dist: + - numpy>=1.20 + - rasterio>=1.2 ; extra == 'raster' + - pytest>=6 ; extra == 'test' + - pytest-cov>=3 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/56/f3/b594fe851ad520a07127a9680bbf9732c74f8d4e6b6dc5a2cdd196bf5974/snaphu-0.4.1-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: snaphu + version: 0.4.1 + sha256: d38d0b016718b0945cc1a6d3240ca0257d415b416e62a06964140ad0cd8c261d + requires_dist: + - numpy>=1.20 + - rasterio>=1.2 ; extra == 'raster' + - pytest>=6 ; extra == 'test' + - pytest-cov>=3 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ce/63/4ac4488f3999d8f0d5fcfce5ed8cbe9abc0d64daffd59c5411e15a7fdb40/snaphu-0.4.1-cp312-cp312-macosx_11_0_arm64.whl + name: snaphu + version: 0.4.1 + sha256: 2ed89e57afce7ef3df748553e283b0ba606a14eb844147ce4e9a917fd87158e8 + requires_dist: + - numpy>=1.20 + - rasterio>=1.2 ; extra == 'raster' + - pytest>=6 ; extra == 'test' + - pytest-cov>=3 ; extra == 'test' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_0.conda sha256: 8b8acbde6814d1643da509e11afeb6bb30eb1e3004cf04a7c9ae43e9b097f063 md5: 3d8da0248bdae970b4ade636a104b7f5 @@ -13548,17 +14134,30 @@ packages: purls: [] size: 45805 timestamp: 1753083455352 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - sha256: 4242f95b215127a006eb664fe26ed5a82df87e90cbdbc7ce7ff4971f0720997f - md5: ded86dee325290da2967a3fea3800eb5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11 + md5: 98b6c9dc80eb87b2519b97bcf7e578dd depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 45829 + timestamp: 1762948049098 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + sha256: cb9305ede19584115f43baecdf09a3866bfcd5bcca0d9e527bd76d9a1dbe2d8d + md5: fca4a2222994acd7f691e57f94b750c5 + depends: + - libcxx >=19 - __osx >=11.0 - - libcxx >=18 license: BSD-3-Clause license_family: BSD purls: [] - size: 35857 - timestamp: 1733502172664 + size: 38883 + timestamp: 1762948066818 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hd121638_0.conda sha256: b3d447d72d2af824006f4ba78ae4188747886d6d95f2f165fe67b95541f02b05 md5: ba9ca3813f4db8c0d85d3c84404e02ba @@ -13583,31 +14182,28 @@ packages: - pkg:pypi/snuggs?source=hash-mapping size: 11313 timestamp: 1733818738919 -- conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7 - md5: 0401a17ae845fa72c7210e206ec5647d - depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/sortedcontainers?source=hash-mapping - size: 28657 - timestamp: 1738440459037 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_2.conda - sha256: 85c5b96686a900411ad8bdd424dcc2efb2044f15488bb89e57dff3bfcb74cc65 - md5: 1894a9d3a8c3ffa53f8ca09fcd2fac25 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libsqlite 3.49.1 hee588c1_2 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - readline >=8.2,<9.0a0 - license: Unlicense - purls: [] - size: 859553 - timestamp: 1742083683966 +- pypi: git+https://github.com/scottstanie/spurt.git?branch=develop-scott#5adae527a49657a78d470868a6fb3999559f943c + name: spurt + version: 0.1.dev186 + requires_dist: + - h5py>=3.6 + - numpy>=1.23 + - ortools>=9.8.3296 + - rasterio>=1.2 + - scipy>=1.12 + - pytest>=6 ; extra == 'test' + - pytest-cov>=3 ; extra == 'test' + - mkdocs ; extra == 'docs' + - mkdocs-gen-files ; extra == 'docs' + - mkdocs-jupyter ; extra == 'docs' + - mkdocs-literate-nav ; extra == 'docs' + - mkdocs-material ; extra == 'docs' + - mkdocs-section-index ; extra == 'docs' + - mkdocs-mermaid2-plugin ; extra == 'docs' + - mkdocstrings[python] ; extra == 'docs' + - pybtex ; extra == 'docs' + - pymdown-extensions ; extra == 'docs' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda sha256: ea12e0714d70a536abe5968df612c57a966aa93c5a152cc4a1974046248d72a4 md5: 8376bd3854542be0c8c7cd07525d31c6 @@ -13622,19 +14218,21 @@ packages: purls: [] size: 166233 timestamp: 1753948493149 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.49.1-hd7222ec_2.conda - sha256: d359322cb4404df74d938a11a22b932e49d5f8c931a03e63d34127c9fecac200 - md5: 69dd1428d6a7d068bfc1d2ad70ab6701 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.0-h04a0ce9_0.conda + sha256: a0e35087ebf0720fa758cb261583bee0a328143238524ea47625b37108280291 + md5: dc540e5bd5616d83a1ec46af8315ff98 depends: - - __osx >=11.0 - - libsqlite 3.49.1 h3f77e49_2 - - libzlib >=1.3.1,<2.0a0 + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libsqlite 3.53.0 hf4e2dac_0 + - libzlib >=1.3.2,<2.0a0 - ncurses >=6.5,<7.0a0 - - readline >=8.2,<9.0a0 - license: Unlicense + - readline >=8.3,<9.0a0 + license: blessing purls: [] - size: 883664 - timestamp: 1742083897015 + size: 205091 + timestamp: 1775753763547 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.50.4-hb5dd463_0.conda sha256: 3b25888b1fa1aac88571127a8a8e16d25a522f94114cb339d0f7a613a911cbe2 md5: 1da3d5a9ab6f1dbc8fd5b57fd65e0d3d @@ -13649,6 +14247,33 @@ packages: purls: [] size: 149389 timestamp: 1753948618445 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.0-h85ec8f2_0.conda + sha256: 3c92c6268b9bfdc7bb6990a3df73d586d0650f8c0a3111b8b2414391ad7a2f6d + md5: 60a9b64bc09b5f7af723273c3fe8d856 + depends: + - __osx >=11.0 + - libsqlite 3.53.0 h1b79a29_0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.5,<7.0a0 + - readline >=8.3,<9.0a0 + license: blessing + purls: [] + size: 181936 + timestamp: 1775754522288 +- conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + md5: b1b505328da7a6b246787df4b5a49fbc + depends: + - asttokens + - executing + - pure_eval + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/stack-data?source=hash-mapping + size: 26988 + timestamp: 1733569565672 - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.0.2-h5888daf_0.conda sha256: fb4b97a3fd259eff4849b2cfe5678ced0c5792b697eb1f7bcd93a4230e90e80e md5: 0096882bd623e6cc09e8bf920fc8fb47 @@ -13661,6 +14286,18 @@ packages: purls: [] size: 2750235 timestamp: 1742907589246 +- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + sha256: 4a1d2005153b9454fc21c9bad1b539df189905be49e851ec62a6212c2e045381 + md5: 2a2170a3e5c9a354d09e4be718c43235 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2619743 + timestamp: 1769664536467 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-3.0.2-h8ab69cd_0.conda sha256: d6bb376dc9a00728be26be2b1b859d13534067922c13cc4adbbc441ca4c4ca6d md5: 76f20156833dea73510379b6cd7975e5 @@ -13672,52 +14309,48 @@ packages: purls: [] size: 1484549 timestamp: 1742907655838 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + sha256: bdef3c1c4d2a396ad4f7dc64c5e9a02d4c5a21ff93ed07a33e49574de5d2d18d + md5: 8badc3bf16b62272aa2458f138223821 + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 1456245 + timestamp: 1769664727051 - pypi: ./ name: sweets - version: 0.2.2.post1.dev169+g9903efb.d20250815 - sha256: b81f0ab1525c3e7b9956186577ef064282cfc03848c376de0c203a01b8ce35ca + version: 0.2.2.post1.dev261+g38640783d + sha256: 0759c0b11c96ecb5cf478a7a753e50d9a96c5fa9c23e66e0f7179dc8983ed01e requires_dist: - - dask + - asf-search + - burst2safe - dolphin - h5py + - loguru - numpy + - opera-utils - pandas + - pydantic>=2.1 - pyproj + - python-dateutil + - rasterio - requests - rich - - shapely - - geopandas - rioxarray - - opera-utils - - pydantic - - python-dateutil - - rasterio - sardem - sentineleof + - shapely + - tyro + - fastapi>=0.100 ; extra == 'web' + - uvicorn[standard] ; extra == 'web' + - sqlmodel ; extra == 'web' + - python-multipart ; extra == 'web' + - websockets ; extra == 'web' + - titiler-core ; extra == 'web' requires_python: '>=3.11' - editable: true -- conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - sha256: 6869cd2e043426d30c84d0ff6619f176b39728f9c75dc95dca89db994548bb8a - md5: 60ce69f73f3e75b21f1c27b1b471320c - depends: - - python >=3.9 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/tblib?source=hash-mapping - size: 17421 - timestamp: 1733842487151 -- conda: https://conda.anaconda.org/conda-forge/noarch/tblib-3.1.0-pyhd8ed1ab_0.conda - sha256: a83c83f5e622a2f34fb1d179c55c3ff912429cd0a54f9f3190ae44a0fdba2ad2 - md5: a15c62b8a306b8978f094f76da2f903f - depends: - - python >=3.9 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/tblib?source=compressed-mapping - size: 17914 - timestamp: 1743515657639 - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.2-pyhd8ed1ab_0.conda sha256: 23abf9c14b59fa9787a56a6abb519ac14a9b19091d6c5d7446886d955493b95e md5: 7b39e842b52966a99e229739cd4dc36e @@ -13753,8 +14386,37 @@ packages: license_family: BSD purls: - pkg:pypi/tifffile?source=hash-mapping - size: 182492 - timestamp: 1749714772656 + size: 182492 + timestamp: 1749714772656 +- conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2026.4.11-pyhd8ed1ab_0.conda + sha256: c40fc550bea852303f0f5a8ef71273163361bfe599ab9906a5c6d4406aa20d16 + md5: e0ed123314d08b63cd1ee95331c67ae3 + depends: + - imagecodecs >=2026.3.6 + - numpy >=2.0 + - python >=3.12 + constrains: + - matplotlib-base >=3.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/tifffile?source=hash-mapping + size: 195446 + timestamp: 1775989449649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3301196 + timestamp: 1769460227866 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e md5: d453b98d9c83e71da0741bb0ff4d76bc @@ -13766,18 +14428,17 @@ packages: purls: [] size: 3318875 timestamp: 1699202167581 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda - sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 - md5: a0116df4f4ed05c303811a837d5b39d8 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 license: TCL license_family: BSD purls: [] - size: 3285204 - timestamp: 1748387766691 + size: 3127137 + timestamp: 1769460817696 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 md5: b50a57ba89c32b62428b71a875291c9b @@ -13788,17 +14449,6 @@ packages: purls: [] size: 3145523 timestamp: 1699202432999 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda - sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e - md5: 7362396c170252e7b7b0c8fb37fe9c78 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3125538 - timestamp: 1748388189063 - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938 md5: b0dd904de08b7db706167240bf37b164 @@ -13821,43 +14471,23 @@ packages: - pkg:pypi/tomli?source=hash-mapping size: 19167 timestamp: 1733256819729 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda - sha256: 040a5a05c487647c089ad5e05ad5aff5942830db2a4e656f1e300d73436436f1 - md5: 30a0a26c8abccf4b7991d590fe17c699 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 depends: - - python >=3.9 + - python >=3.10 - python license: MIT license_family: MIT purls: - pkg:pypi/tomli?source=compressed-mapping - size: 21238 - timestamp: 1753796677376 -- conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87 - md5: 40d0ed782a8aaa16ef248e68c06c168d - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/toolz?source=hash-mapping - size: 52475 - timestamp: 1733736126261 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda - sha256: 062a3a3a37fa8615ce57929ba7e982c76f5a5810bcebd435950f6d6c4147c310 - md5: e417822cb989e80a0d2b1b576fdd1657 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 840414 - timestamp: 1732616043734 + size: 21561 + timestamp: 1774492402955 +- pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + name: toolz + version: 1.1.0 + sha256: 15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.2-py312h4c3975b_0.conda sha256: 891965f8e495ad5cef399db03a13df48df7add06ae131f4b77a88749c74b2060 md5: 82dacd4832dcde0c2b7888248a3b3d7c @@ -13872,20 +14502,20 @@ packages: - pkg:pypi/tornado?source=compressed-mapping size: 850503 timestamp: 1754732194289 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - sha256: 964a2705a36c50040c967b18b45b9cc8de3c2aff4af546979a574e0b38e58e39 - md5: fb0605888a475d6a380ae1d1a819d976 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + sha256: 4629b1c9139858fb08bb357df917ffc12e4d284c57ff389806bb3ae476ef4e0a + md5: 2b37798adbc54fd9e591d24679d2133a depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/tornado?source=hash-mapping - size: 842549 - timestamp: 1732616081362 + - pkg:pypi/tornado?source=compressed-mapping + size: 859665 + timestamp: 1774358032165 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.2-py312h163523d_0.conda sha256: 82ceea2527ac484f5c8d7dee95033935b7fecb0b42afb2d9538f7397404aa6d8 md5: 181a5ca410bad66be792da0e11038016 @@ -13900,39 +14530,70 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 853490 timestamp: 1754732280524 -- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 - md5: 9efbfdc37242619130ea42b1cc4ed861 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py314h6c2aa35_0.conda + sha256: 4ccc4a20d676c0ba85adee9c99015bec7f5b685df0cf8006e34573f1d6c2ce75 + md5: 3f81f8b2fe2c26a82c0abf57ab2b9610 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 910845 + timestamp: 1774358965067 +- pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + name: tqdm + version: 4.67.3 + sha256: ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf + requires_dist: + - colorama ; sys_platform == 'win32' + - importlib-metadata ; python_full_version < '3.8' + - pytest>=6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-asyncio>=0.24 ; extra == 'dev' + - nbval ; extra == 'dev' + - requests ; extra == 'discord' + - slack-sdk ; extra == 'slack' + - requests ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed depends: - - colorama - python >=3.9 - license: MPL-2.0 or MIT + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/tqdm?source=hash-mapping - size: 89498 - timestamp: 1735661472632 -- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - sha256: 0b4dce14a4bbe36e9e2d8637436292ab1fafa608317dd3121e119695e75c4764 - md5: 5a0d90b98099e52389c668ba1c0734a4 + - pkg:pypi/traitlets?source=hash-mapping + size: 110051 + timestamp: 1733367480074 +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda + sha256: 591e03a61b4966a61b15a99f91d462840b6e77bf707ecb48690b24649fee921a + md5: 8b2613dbfd4e2bc9080b2779b53fc210 depends: - importlib-metadata >=3.6 - python >=3.9 - typing-extensions >=4.10.0 - - typing_extensions >=4.10.0 + - typing_extensions >=4.14.0 constrains: - pytest >=7 license: MIT license_family: MIT purls: - pkg:pypi/typeguard?source=hash-mapping - size: 35184 - timestamp: 1739732461765 -- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.4-pyhd8ed1ab_0.conda - sha256: 591e03a61b4966a61b15a99f91d462840b6e77bf707ecb48690b24649fee921a - md5: 8b2613dbfd4e2bc9080b2779b53fc210 + size: 35158 + timestamp: 1750249264892 +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda + sha256: 39d8ae33c43cdb8f771373e149b0b4fae5a08960ac58dcca95b2f1642bb17448 + md5: 260af1b0a94f719de76b4e14094e9a3b depends: - importlib-metadata >=3.6 - - python >=3.9 + - python >=3.10 - typing-extensions >=4.10.0 - typing_extensions >=4.14.0 constrains: @@ -13941,28 +14602,8 @@ packages: license_family: MIT purls: - pkg:pypi/typeguard?source=hash-mapping - size: 35158 - timestamp: 1750249264892 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.0-h9fa5a19_1.conda - sha256: 4dc1002493f05bf4106e09f0de6df57060c9aab97ad709392ab544ceb62faadd - md5: 3fbcc45b908040dca030d3f78ed9a212 - depends: - - typing_extensions ==4.13.0 pyh29332c3_1 - license: PSF-2.0 - license_family: PSF - purls: [] - size: 89631 - timestamp: 1743201626659 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 - md5: 568ed1300869dca0ba09fb750cda5dbb - depends: - - typing_extensions ==4.13.2 pyh29332c3_0 - license: PSF-2.0 - license_family: PSF - purls: [] - size: 89900 - timestamp: 1744302253997 + size: 36838 + timestamp: 1771532971545 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.1-h4440ef1_0.conda sha256: 349951278fa8d0860ec6b61fcdc1e6f604e6fce74fabf73af2e39a37979d0223 md5: 75be1a943e0a7f99fcf118309092c635 @@ -13973,6 +14614,16 @@ packages: purls: [] size: 90486 timestamp: 1751643513473 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c + md5: edd329d7d3a4ab45dcf905899a7a6115 + depends: + - typing_extensions ==4.15.0 pyhcf101f3_0 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 91383 + timestamp: 1756220668932 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f md5: e0c3cd765dc15751ee2f0b03cd015712 @@ -13985,30 +14636,18 @@ packages: - pkg:pypi/typing-inspection?source=hash-mapping size: 18809 timestamp: 1747870776989 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.0-pyh29332c3_1.conda - sha256: 18eb76e8f19336ecc9733c02901b30503cdc4c1d8de94f7da7419f89b3ff4c2f - md5: 4c446320a86cc5d48e3b80e332d6ebd7 - depends: - - python >=3.9 - - python - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/typing-extensions?source=hash-mapping - size: 52077 - timestamp: 1743201626659 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 - md5: 83fc6ae00127671e301c9f44254c31b8 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 + md5: a0a4a3035667fc34f29bfbd5c190baa6 depends: - - python >=3.9 - - python - license: PSF-2.0 - license_family: PSF + - python >=3.10 + - typing_extensions >=4.12.0 + license: MIT + license_family: MIT purls: - - pkg:pypi/typing-extensions?source=compressed-mapping - size: 52189 - timestamp: 1744302253997 + - pkg:pypi/typing-inspection?source=hash-mapping + size: 18923 + timestamp: 1764158430324 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.1-pyhe01879c_0.conda sha256: 4f52390e331ea8b9019b87effaebc4f80c6466d09f68453f52d5cdc2a3e1194f md5: e523f4f1e980ed7a4240d7e27e9ec81f @@ -14021,6 +14660,18 @@ packages: - pkg:pypi/typing-extensions?source=hash-mapping size: 51065 timestamp: 1751643513473 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 - conda: https://conda.anaconda.org/conda-forge/noarch/tyro-0.9.28-pyhd8ed1ab_0.conda sha256: 093921bd653b916aaa6f3d7c4c22aa7a88d5bdead9299bbe34e992e7ad41740c md5: 8dbf8264c7074f6e5d8cfc52e22fab59 @@ -14040,6 +14691,25 @@ packages: - pkg:pypi/tyro?source=compressed-mapping size: 101382 timestamp: 1754787152901 +- conda: https://conda.anaconda.org/conda-forge/noarch/tyro-1.0.12-pyhd8ed1ab_0.conda + sha256: f8efa15ac462909de765f426dfc3f21d9be11773659edcfb6f4485f5cc71db58 + md5: 42d577aebd481b60bacad30c501c666e + depends: + - colorama >=0.4.0 + - docstring_parser >=0.15 + - eval_type_backport >=0.1.3 + - python >=3.10 + - pyyaml >=6.0 + - rich >=11.1.0 + - shtab >=1.5.6 + - typeguard >=4.0.0 + - typing-extensions >=4.13.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tyro?source=hash-mapping + size: 136830 + timestamp: 1775132361781 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 md5: 4222072737ccff51314b5ece9c7d6f5a @@ -14047,6 +14717,13 @@ packages: purls: [] size: 122968 timestamp: 1742727099393 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + size: 119135 + timestamp: 1767016325805 - conda: https://conda.anaconda.org/conda-forge/linux-64/tzlocal-5.3-py312h7900ff3_0.conda sha256: 2954d15fbf5d8fb8ee71475eb5bd94dc450ff1fc6f211da6877e1439ef465dd1 md5: a38354f639cd0d0ddf265e7b95166a58 @@ -14059,6 +14736,19 @@ packages: - pkg:pypi/tzlocal?source=hash-mapping size: 40960 timestamp: 1739472100401 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzlocal-5.3.1-pyh8f84b5b_0.conda + sha256: 6447388bd870ab0a2b38af5aa64185cd71028a2a702f0935e636a01d81fba7fc + md5: 369f3170d6f727d3102d83274e403b66 + depends: + - python >=3.10 + - __unix + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tzlocal?source=hash-mapping + size: 23880 + timestamp: 1756227235167 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tzlocal-5.3-py312h81bd7bf_0.conda sha256: c990750ee555207fdef1b977ce8064f818fc4e1b0c72902bb741091aa113927c md5: 698106d1f12864aa48b218159a2cee0c @@ -14088,6 +14778,22 @@ packages: - pkg:pypi/ukkonen?source=hash-mapping size: 13904 timestamp: 1725784191021 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.1.0-py312hd9148b4_0.conda + sha256: c975070ac28fe23a5bbb2b8aeca5976b06630eb2de2dc149782f74018bf07ae8 + md5: 55fd03988b1b1bc6faabbfb5b481ecd7 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ukkonen?source=hash-mapping + size: 14882 + timestamp: 1769438717830 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda sha256: 1e4452b4a12d8a69c237f14b876fbf0cdc456914170b49ba805779c749c31eca md5: 2b485a809d1572cbe7f0ad9ee107e4b0 @@ -14104,6 +14810,22 @@ packages: - pkg:pypi/ukkonen?source=hash-mapping size: 13605 timestamp: 1725784243533 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.1.0-py314h6cfcd04_0.conda + sha256: 033dbf9859fe58fb85350cf6395be6b1346792e1766d2d5acab538a6eb3659fb + md5: e229f444fbdb28d8c4f40e247154d993 + depends: + - __osx >=11.0 + - cffi + - libcxx >=19 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ukkonen?source=hash-mapping + size: 14884 + timestamp: 1769439056290 - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda sha256: 638916105a836973593547ba5cf4891d1f2cb82d1cf14354fcef93fd5b941cdc md5: 617f5d608ff8c28ad546e5d9671cbb95 @@ -14118,6 +14840,20 @@ packages: - pkg:pypi/unicodedata2?source=compressed-mapping size: 404401 timestamp: 1736692621599 +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + sha256: 895bbfe9ee25c98c922799de901387d842d7c01cae45c346879865c6a907f229 + md5: 0b6c506ec1f272b685240e70a29261b8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=compressed-mapping + size: 410641 + timestamp: 1770909099497 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-16.0.0-py312hea69d52_0.conda sha256: c6ca9ea11eecc650df4bce4b3daa843821def6d753eeab6d81de35bb43f9d984 md5: 9a835052506b91ea8f0d8e352cd12246 @@ -14132,6 +14868,20 @@ packages: - pkg:pypi/unicodedata2?source=hash-mapping size: 409745 timestamp: 1736692768349 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda + sha256: 09bfbee5a2bcf4df06f21a2aa9eb40a7af97864a569beb5ea85fd6baf6e03ce7 + md5: 4fffb3ba871bb05f34ffb705534dfef5 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 416130 + timestamp: 1770909728445 - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda sha256: 2aad2aeff7c69a2d7eecd7b662eef756b27d6a6b96f3e2c2a7071340ce14543e md5: d71d3a66528853c0a1ac2c02d79a0284 @@ -14154,9 +14904,9 @@ packages: purls: [] size: 40625 timestamp: 1715010029254 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e - md5: 32674f8dbfb7b26410ed580dd3c10a29 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8 + md5: 436c165519e140cb08d246a4472a9d6a depends: - brotli-python >=1.0.9 - h2 >=4,<5 @@ -14167,67 +14917,70 @@ packages: license_family: MIT purls: - pkg:pypi/urllib3?source=hash-mapping - size: 100102 - timestamp: 1734859520452 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - sha256: a25403b76f7f03ca1a906e1ef0f88521edded991b9897e7fed56a3e334b3db8c - md5: c1e349028e0052c4eea844e94f773065 + size: 101735 + timestamp: 1750271478254 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a + md5: 9272daa869e03efe68833e3dc7a02130 depends: - - brotli-python >=1.0.9 + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 - h2 >=4,<5 - pysocks >=1.5.6,<2.0,!=1.5.7 - - python >=3.9 - - zstandard >=0.18.0 + - python >=3.10 license: MIT license_family: MIT purls: - pkg:pypi/urllib3?source=hash-mapping - size: 100791 - timestamp: 1744323705540 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8 - md5: 436c165519e140cb08d246a4472a9d6a + size: 103172 + timestamp: 1767817860341 +- conda: https://conda.anaconda.org/conda-forge/noarch/vcrpy-8.1.1-pyhd8ed1ab_0.conda + sha256: 5adab36e82bbb076fa0de7aa53703ce33769b4b3934d494dc41fdc3cb756b2a5 + md5: e044ec4bc6639b225f219859c9ecda94 depends: - - brotli-python >=1.0.9 - - h2 >=4,<5 - - pysocks >=1.5.6,<2.0,!=1.5.7 - - python >=3.9 - - zstandard >=0.18.0 + - python >=3.10 + - pyyaml + - wrapt + - yarl license: MIT license_family: MIT purls: - - pkg:pypi/urllib3?source=hash-mapping - size: 101735 - timestamp: 1750271478254 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - sha256: 1dbb24b144f7b8400b30cca760cdee1b7de61716cd7f06d7ea82b741645823ce - md5: c0e0b4a09aa5a698a1bdd4ebfe28be38 + - pkg:pypi/vcrpy?source=hash-mapping + size: 40168 + timestamp: 1767657867270 +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + sha256: 398f40090e80ec5084483bb798555d0c5be3d1bb30f8bb5e4702cd67cdb595ee + md5: 2bd6c0c96cfc4dbe9bde604a122e3e55 depends: - distlib >=0.3.7,<1 - filelock >=3.12.2,<4 - platformdirs >=3.9.1,<5 - python >=3.9 + - typing_extensions >=4.13.2 license: MIT license_family: MIT purls: - - pkg:pypi/virtualenv?source=hash-mapping - size: 3635535 - timestamp: 1743474070226 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda - sha256: 398f40090e80ec5084483bb798555d0c5be3d1bb30f8bb5e4702cd67cdb595ee - md5: 2bd6c0c96cfc4dbe9bde604a122e3e55 + - pkg:pypi/virtualenv?source=compressed-mapping + size: 4381624 + timestamp: 1755111905876 +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.1-pyhcf101f3_0.conda + sha256: a3b38bb79ebbb830574b6e0ba1303f103601b5ed658ac400a3f9e43806e8e4fe + md5: fa76df129efc4550f272d8668acbe658 depends: + - python >=3.10 - distlib >=0.3.7,<1 - - filelock >=3.12.2,<4 + - filelock <4,>=3.24.2 + - importlib-metadata >=6.6 - platformdirs >=3.9.1,<5 - - python >=3.9 + - python-discovery >=1 - typing_extensions >=4.13.2 + - python license: MIT license_family: MIT purls: - pkg:pypi/virtualenv?source=compressed-mapping - size: 4381624 - timestamp: 1755111905876 + size: 4658762 + timestamp: 1775771531130 - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda sha256: ba673427dcd480cfa9bbc262fd04a9b1ad2ed59a159bd8f7e750d4c52282f34c md5: 0f2ca7906bf166247d1d760c3422cb8a @@ -14242,35 +14995,31 @@ packages: purls: [] size: 330474 timestamp: 1751817998141 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wget-1.21.4-hda4d442_0.conda - sha256: 70df4ac8cca488618458af4705706551cef7e402bac9c2c41dd17148f60cbd1f - md5: 361e96b664eac64a33c20dfd11affbff +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + sha256: ea374d57a8fcda281a0a89af0ee49a2c2e99cc4ac97cf2e2db7064e74e764bdb + md5: 996583ea9c796e5b915f7d7580b51ea6 depends: - - libgcc-ng >=12 - - libidn2 >=2,<3.0a0 - - libunistring >=0,<1.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.1,<4.0a0 - - zlib - license: GPL-3.0-or-later - license_family: GPL + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT purls: [] - size: 770380 - timestamp: 1710770110704 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wget-1.21.4-he2df1f1_0.conda - sha256: df0ef5aed0791ebcb27692bfdee0785ebcf02eb770479c53a3e4cdd775d18f1a - md5: c56417aa2d4f73708bf453cfc295a25d + size: 334139 + timestamp: 1773959575393 +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa + md5: c3197f8c0d5b955c904616b716aca093 depends: - - libidn2 >=2,<3.0a0 - - libunistring >=0,<1.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.1,<4.0a0 - - zlib - license: GPL-3.0-or-later - license_family: GPL - purls: [] - size: 777150 - timestamp: 1710770624608 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wcwidth?source=compressed-mapping + size: 71550 + timestamp: 1770634638503 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce md5: 75cb7132eb58d97896e173ef12ac9986 @@ -14282,9 +15031,32 @@ packages: - pkg:pypi/wheel?source=hash-mapping size: 62931 timestamp: 1733130309598 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py312h4c3975b_0.conda - sha256: af711a6449d2ca3fa4c245dee78665050c6ff3a08e8ea5d4bed8472f290c8b67 - md5: 28f4b2672dab90c896adf9acf2b774c1 +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae + md5: bdbd7385b4a67025ac2dba4ef8cb6a8f + depends: + - packaging >=24.0 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 31858 + timestamp: 1769139207397 +- conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda + sha256: 826af5e2c09e5e45361fa19168f46ff524e7a766022615678c3a670c45895d9a + md5: dc257b7e7cad9b79c1dfba194e92297b + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/widgetsnbextension?source=hash-mapping + size: 889195 + timestamp: 1762040404362 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + sha256: 5bf21e14a364018a36869a16d9f706fb662c6cb6da3066100ba6822a70f93d2d + md5: 7f2ef073d94036f8b16b6ee7d3562a88 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -14293,12 +15065,12 @@ packages: license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/wrapt?source=compressed-mapping - size: 64581 - timestamp: 1755007045538 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.3-py312h163523d_0.conda - sha256: 96d3b22da285244f83f6f7be54471634c88516f661326a9caa2eb9e44fae0ea0 - md5: 91548390b971bf77d15369b0916b6ff0 + - pkg:pypi/wrapt?source=hash-mapping + size: 87514 + timestamp: 1772794814485 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda + sha256: 5dbc29e84b2d14bbfcaf5372571312991e749ac1dc55e822ccb15d71e752ed67 + md5: ff5ed7b9da564a701eae86999617a247 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -14307,79 +15079,23 @@ packages: license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/wrapt?source=hash-mapping - size: 61356 - timestamp: 1755006569811 -- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.3.0-pyhd8ed1ab_0.conda - sha256: 2bd415ea2f71fe0458905923c4039f41107766377530301f2f95465f11f1b4d2 - md5: 8ff602aae12466f334754064aa6d8aab - depends: - - numpy >=1.24 - - packaging >=23.2 - - pandas >=2.1 - - python >=3.10 - constrains: - - netcdf4 >=1.6.0 - - cftime >=1.6 - - pint >=0.22 - - sparse >=0.14 - - distributed >=2023.11 - - hdf5 >=1.12 - - flox >=0.7 - - seaborn-base >=0.13 - - dask-core >=2023.11 - - h5py >=3.8 - - nc-time-axis >=1.4 - - matplotlib-base >=3.8 - - toolz >=0.12 - - scipy >=1.11 - - cartopy >=0.22 - - numba >=0.57 - - zarr >=2.16 - - iris >=3.7 - - h5netcdf >=1.3 - - bottleneck >=1.3 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/xarray?source=compressed-mapping - size: 852028 - timestamp: 1742448453517 -- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.3.1-pyhd8ed1ab_0.conda - sha256: e2b175eaee8ac7eebd4bf136d03dc1586f0f4b23a3a3ce92852083e3c1bc4f81 - md5: 976dd71c7eade7422717aa192afd1c71 + - pkg:pypi/wrapt?source=hash-mapping + size: 83872 + timestamp: 1772795226695 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py314h6c2aa35_0.conda + sha256: 01e523dd50b90981c3c62e3a0ec6115a8b93bf27a93811d682ca59cb2c633350 + md5: 0ae7bae2e2fa519cd59681c7c1af83d6 depends: - - numpy >=1.24 - - packaging >=23.2 - - pandas >=2.1 - - python >=3.10 - constrains: - - bottleneck >=1.3 - - hdf5 >=1.12 - - dask-core >=2023.11 - - seaborn-base >=0.13 - - cartopy >=0.22 - - flox >=0.7 - - numba >=0.57 - - h5netcdf >=1.3 - - sparse >=0.14 - - zarr >=2.16 - - netcdf4 >=1.6.0 - - toolz >=0.12 - - nc-time-axis >=1.4 - - cftime >=1.6 - - matplotlib-base >=3.8 - - scipy >=1.11 - - distributed >=2023.11 - - h5py >=3.8 - - iris >=3.7 - - pint >=0.22 - license: Apache-2.0 - license_family: APACHE + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-2-Clause + license_family: BSD purls: - - pkg:pypi/xarray?source=compressed-mapping - size: 854249 - timestamp: 1743444491374 + - pkg:pypi/wrapt?source=hash-mapping + size: 85647 + timestamp: 1772795720805 - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda sha256: e27b45ca791cfbcad37d64b8615d0672d94aafa00b014826fcbca2ce18bd1cc0 md5: 145c6f2ac90174d9ad1a2a51b9d7c1dd @@ -14415,6 +15131,44 @@ packages: - pkg:pypi/xarray?source=hash-mapping size: 879913 timestamp: 1749743321359 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.2.0-pyhcf101f3_0.conda + sha256: 1d49f2c80c63913c5a9a525b64434a30cf1386502d0f24607db61bd46fa36a40 + md5: b1b3a2477c1b888f15bbef01d7a9615f + depends: + - python >=3.11 + - numpy >=1.26 + - packaging >=24.1 + - pandas >=2.2 + - python + constrains: + - bottleneck >=1.4 + - cartopy >=0.23 + - cftime >=1.6 + - dask-core >=2024.6 + - distributed >=2024.6 + - flox >=0.9 + - h5netcdf >=1.3 + - h5py >=3.11 + - hdf5 >=1.14 + - iris >=3.9 + - matplotlib-base >=3.8 + - nc-time-axis >=1.4 + - netcdf4 >=1.6.0 + - numba >=0.60 + - numbagg >=0.8 + - pint >=0.24 + - pydap >=3.5.0 + - scipy >=1.13 + - seaborn-base >=0.13 + - sparse >=0.15 + - toolz >=0.12 + - zarr >=2.18 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/xarray?source=hash-mapping + size: 1011911 + timestamp: 1771083999178 - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d md5: fdc27cb255a7a2cc73b7919a968b48f0 @@ -14442,6 +15196,21 @@ packages: purls: [] size: 20296 timestamp: 1726125844850 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 + md5: 4d1fc190b99912ed557a8236e958c559 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20829 + timestamp: 1763366954390 - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 md5: a0901183f08b6c7107aab109733a3c91 @@ -14501,6 +15270,20 @@ packages: purls: [] size: 1648243 timestamp: 1727733890754 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.3.0-hd9031aa_1.conda + sha256: 605980121ad3ee9393a9b53fb0996929c9732f8fc6b9f796d25244ca6fa23032 + md5: 66a1db55ecdb7377d2b91f54cd56eafa + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.1,<79.0a0 + - libgcc >=14 + - libnsl >=2.0.1,<2.1.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1660075 + timestamp: 1766327494699 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda sha256: 863a7c2a991a4399d362d42c285ebc20748a4ea417647ebd3a171e2220c7457d md5: 50b7325437ef0901fe25dc5c9e743b88 @@ -14513,6 +15296,18 @@ packages: purls: [] size: 1277884 timestamp: 1727733870250 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.3.0-h25f632f_1.conda + sha256: 89152175f45b5e84e0f1575848f607e305ffc122ab59d9704ea77ce699b1bd2b + md5: 0b886d06130b774f086d3b2ce0b7277a + depends: + - __osx >=11.0 + - icu >=78.1,<79.0a0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1283088 + timestamp: 1766327630028 - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.45-hb9d3cd8_0.conda sha256: a5d4af601f71805ec67403406e147c48d6bad7aaeae92b0622b7e2396842d3fe md5: 397a013c2dc5145a70737871aaa87e98 @@ -14525,6 +15320,18 @@ packages: purls: [] size: 392406 timestamp: 1749375847832 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 + md5: b56e0c8432b56decafae7e78c5f29ba5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 399291 + timestamp: 1772021302485 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b md5: fb901ff28063514abb6046c9ec2c4a45 @@ -14561,6 +15368,29 @@ packages: purls: [] size: 835896 timestamp: 1741901112627 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 + md5: 861fb6ccbc677bb9a9fb2468430b9c6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 839652 + timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b + md5: b2895afaf55bf96a8c8282a2e47a5de0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 15321 + timestamp: 1762976464266 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 @@ -14582,6 +15412,16 @@ packages: purls: [] size: 13593 timestamp: 1734229104321 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + sha256: adae11db0f66f86156569415ed79cda75b2dbf4bea48d1577831db701438164f + md5: 78b548eed8227a689f93775d5d23ae09 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 14105 + timestamp: 1762976976084 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda sha256: 753f73e990c33366a91fd42cc17a3d19bb9444b9ca5ff983605fa9e953baf57f md5: d3c295b50f092ab525ffe3c2aa4b7413 @@ -14595,6 +15435,19 @@ packages: purls: [] size: 13603 timestamp: 1727884600744 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14415 + timestamp: 1770044404696 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a md5: 2ccd714aa2242315acaf0a67faea780b @@ -14623,6 +15476,17 @@ packages: purls: [] size: 13217 timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 + md5: 1dafce8548e38671bea82e3f5c6ce22f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20591 + timestamp: 1762976546182 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee md5: 8035c64cb77ed555e3f150b7b3972480 @@ -14634,6 +15498,16 @@ packages: purls: [] size: 19901 timestamp: 1727794976192 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + sha256: f7fa0de519d8da589995a1fe78ef74556bb8bc4172079ae3a8d20c3c81354906 + md5: 9d1299ace1924aa8f4e0bc8e71dd0cf7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 19156 + timestamp: 1762977035194 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 md5: 77c447f48cab5d3a15ac224edb86a968 @@ -14656,6 +15530,18 @@ packages: purls: [] size: 50060 timestamp: 1727752228921 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f + md5: 34e54f03dfea3e7a2dcf1453a85f1085 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50326 + timestamp: 1769445253162 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda sha256: 2fef37e660985794617716eb915865ce157004a4d567ed35ec16514960ae9271 md5: 4bdb303603e9821baf5fe5fdff1dc8f8 @@ -14668,6 +15554,18 @@ packages: purls: [] size: 19575 timestamp: 1727794961233 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + sha256: 83c4c99d60b8784a611351220452a0a85b080668188dce5dfa394b723d7b64f4 + md5: ba231da7fccf9ea1e768caf5c7099b84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20071 + timestamp: 1759282564045 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a md5: 17dcc85db3c7886650b8908b183d6876 @@ -14696,6 +15594,20 @@ packages: purls: [] size: 29599 timestamp: 1727794874300 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 + md5: e192019153591938acf7322b6459d36e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 30456 + timestamp: 1769445263457 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 md5: 96d57aba173e878a2089d5638016dc5e @@ -14735,28 +15647,30 @@ packages: purls: [] size: 17819 timestamp: 1734214575628 -- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.1.0-pyhd8ed1ab_0.conda - sha256: 9978c22319e85026d5a4134944f73bac820c948ca6b6c32af6b6985b5221cd8a - md5: fdf07e281a9e5e10fc75b2dd444136e9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 depends: - - python >=3.8 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/xyzservices?source=hash-mapping - size: 48641 - timestamp: 1737234992057 -- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.4.0-pyhd8ed1ab_0.conda - sha256: ac6d4d4133b1e0f69075158cdf00fccad20e29fc6cc45faa480cec37a84af6ae - md5: 5663fa346821cd06dc1ece2c2600be2c + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18701 + timestamp: 1769434732453 +- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 + md5: 4487b9c371d0161d54b5c7bbd890c0fc depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/xyzservices?source=hash-mapping - size: 49477 - timestamp: 1745598150265 + - pkg:pypi/xyzservices?source=compressed-mapping + size: 51732 + timestamp: 1774900074457 - conda: https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda sha256: 1c85f17dad61edd3f899328d1656ae5221b46a3c581c878a4bca888aa0c88e6c md5: d4b5f3a50decd28cd747f4b5f7aea33f @@ -14769,6 +15683,18 @@ packages: - pkg:pypi/yamale?source=hash-mapping size: 45904 timestamp: 1735891293976 +- conda: https://conda.anaconda.org/conda-forge/noarch/yamale-6.1.0-pyhd8ed1ab_0.conda + sha256: c4b7d034adfa2009ced2584c0db47052a3c18868074fa3a6c362714c2d7a22dc + md5: 305b5b626d10c990cb7b59788c0c9862 + depends: + - python >=3.10 + - pyyaml + license: MIT + license_family: MIT + purls: + - pkg:pypi/yamale?source=hash-mapping + size: 47564 + timestamp: 1763729031524 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad md5: a77f85f77be52ff59391544bfe73390a @@ -14825,6 +15751,39 @@ packages: - pkg:pypi/yarl?source=hash-mapping size: 149496 timestamp: 1749555225039 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.23.0-py312h8a5da7c_0.conda + sha256: 5d991a8f418675338528ea8097e55143ad833807a110c4251879040351e0d4af + md5: 4b403cb52e72211c489a884b29290c2c + depends: + - __glibc >=2.17,<3.0.a0 + - idna >=2.0 + - libgcc >=14 + - multidict >=4.0 + - propcache >=0.2.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/yarl?source=hash-mapping + size: 147028 + timestamp: 1772409590700 +- conda: https://conda.anaconda.org/conda-forge/noarch/yarl-1.23.0-pyh7db6752_0.conda + sha256: efab7a6002d12c8b009ca91271020f704ebe2d148bcc31494298dd19607ea708 + md5: 9db770f25f3abcb0f97fca493fe46646 + depends: + - idna >=2.0 + - multidict >=4.0 + - propcache >=0.2.1 + - python >=3.10 + track_features: + - yarl_no_compile + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/yarl?source=hash-mapping + size: 74947 + timestamp: 1772409403116 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.20.1-py312h998013c_0.conda sha256: 3fb5693a501a950ef15a693a08577beee0165521bd9677b0e1380c36b6b6bd3a md5: a2cba8a1c0e3fda1503437cc3f0c1bd6 @@ -14842,27 +15801,75 @@ packages: - pkg:pypi/yarl?source=hash-mapping size: 144423 timestamp: 1749555083669 -- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.1-pyhe01879c_0.conda - sha256: 02dc1151dbfbe8e144789c06b22227986bd6ff39b3d56d8834cf66daa7e50635 - md5: acefafa3e5c5191d9ec2bf3df0868875 - depends: - - python >=3.11 - - packaging >=22.0 - - numpy >=1.25 - - numcodecs >=0.14 - - typing_extensions >=4.9 - - donfig >=0.8 - - crc32c - - python - constrains: - - fsspec >=2023.10.0 - - obstore >=0.5.1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/zarr?source=hash-mapping - size: 267884 - timestamp: 1753948848920 +- pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl + name: zarr + version: 3.1.5 + sha256: 29cd905afb6235b94c09decda4258c888fcb79bb6c862ef7c0b8fe009b5c8563 + requires_dist: + - donfig>=0.8 + - google-crc32c>=1.5 + - numcodecs>=0.14 + - numpy>=1.26 + - packaging>=22.0 + - typing-extensions>=4.9 + - typer ; extra == 'cli' + - astroid<4 ; extra == 'docs' + - griffe-inherited-docstrings ; extra == 'docs' + - markdown-exec[ansi] ; extra == 'docs' + - mike>=2.1.3 ; extra == 'docs' + - mkdocs-material[imaging]>=9.6.14 ; extra == 'docs' + - mkdocs-redirects>=1.2.0 ; extra == 'docs' + - mkdocs>=1.6.1 ; extra == 'docs' + - mkdocstrings-python>=1.16.10 ; extra == 'docs' + - mkdocstrings>=0.29.1 ; extra == 'docs' + - numcodecs[msgpack] ; extra == 'docs' + - pytest ; extra == 'docs' + - rich ; extra == 'docs' + - ruff ; extra == 'docs' + - s3fs>=2023.10.0 ; extra == 'docs' + - towncrier ; extra == 'docs' + - cupy-cuda12x ; extra == 'gpu' + - rich ; extra == 'optional' + - universal-pathlib ; extra == 'optional' + - fsspec>=2023.10.0 ; extra == 'remote' + - obstore>=0.5.1 ; extra == 'remote' + - botocore ; extra == 'remote-tests' + - fsspec>=2023.10.0 ; extra == 'remote-tests' + - moto[s3,server] ; extra == 'remote-tests' + - obstore>=0.5.1 ; extra == 'remote-tests' + - requests ; extra == 'remote-tests' + - s3fs>=2023.10.0 ; extra == 'remote-tests' + - coverage>=7.10 ; extra == 'test' + - hypothesis ; extra == 'test' + - mypy ; extra == 'test' + - numpydoc ; extra == 'test' + - packaging ; extra == 'test' + - pytest-accept ; extra == 'test' + - pytest-asyncio ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pytest<8.4 ; extra == 'test' + - rich ; extra == 'test' + - tomlkit ; extra == 'test' + - uv ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + name: zarr + version: 3.1.6 + sha256: b5a82c5079d1c3d4ee8f06746fa3b9a98a7d804300fa3f4be154362a33e1207e + requires_dist: + - donfig>=0.8 + - google-crc32c>=1.5 + - numcodecs>=0.14 + - numpy>=2.0 + - packaging>=22.0 + - typing-extensions>=4.12 + - typer ; extra == 'cli' + - cupy-cuda12x ; extra == 'gpu' + - universal-pathlib ; extra == 'optional' + - fsspec>=2023.10.0 ; extra == 'remote' + - obstore>=0.5.1 ; extra == 'remote' + requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda sha256: 0dfafc75c72f308c0200836f2b973766cdcb8741b1ab61e0b462a34dd6b6ad20 md5: e0409515c467b87176b070bff5d9442e @@ -14876,6 +15883,19 @@ packages: purls: [] size: 279120 timestamp: 1726925529897 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + sha256: 5fabe6cccbafc1193038862b0b0d784df3dae84bc48f12cac268479935f9c8b7 + md5: 6a0eb48e58684cca4d7acc8b7a0fd3c7 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 277694 + timestamp: 1766549572069 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda sha256: 814af9f9429cca403aa308cef46455e745284fb1ecbad83a5722bfc58db8b11a md5: 8066eb9d5acdbaf825cf8cf689517a33 @@ -14888,28 +15908,30 @@ packages: purls: [] size: 200112 timestamp: 1726925701356 -- conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d - md5: e52c2ef711ccf31bb7f70ca87d144b9e +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-ha86207d_5.conda + sha256: 5b8bc86ca206f456ca9fe9e1a629f68b949ac47070211bccf4b44d29141c85d7 + md5: 581bd74656ccd460cf2bbe152292a1eb depends: - - python >=3.9 + - __osx >=11.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/zict?source=hash-mapping - size: 36341 - timestamp: 1733261642963 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 - md5: 0c3cc595284c5e8f0f9900a9b228a332 + purls: [] + size: 204043 + timestamp: 1766549790975 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 depends: - - python >=3.9 + - python >=3.10 + - python license: MIT license_family: MIT purls: - pkg:pypi/zipp?source=hash-mapping - size: 21809 - timestamp: 1732827613585 + size: 24194 + timestamp: 1764460141901 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad md5: df5e78d904988eb55042c0c97446079f @@ -14933,6 +15955,17 @@ packages: purls: [] size: 92286 timestamp: 1727963153079 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda + sha256: 245c9ee8d688e23661b95e3c6dd7272ca936fabc03d423cdb3cdee1bbcf9f2f2 + md5: c2a01a08fc991620a74b32420e97868a + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib 1.3.2 h25fd6f3_2 + license: Zlib + license_family: Other + purls: [] + size: 95931 + timestamp: 1774072620848 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 md5: e3170d898ca6cb48f1bb567afb92f775 @@ -14944,6 +15977,17 @@ packages: purls: [] size: 77606 timestamp: 1727963209370 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + sha256: 8dd2ac25f0ba714263aac5832d46985648f4bfb9b305b5021d702079badc08d2 + md5: f1c0bce276210bed45a04949cfe8dc20 + depends: + - __osx >=11.0 + - libzlib 1.3.2 h8088a28_2 + license: Zlib + license_family: Other + purls: [] + size: 81123 + timestamp: 1774072974535 - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_0.conda sha256: 3a8e7798deafd0722b6b5da50c36b7f361a80b30165d600f7760d569a162ff95 md5: 1920c3502e7f6688d650ab81cd3775fd @@ -14956,6 +16000,18 @@ packages: purls: [] size: 110843 timestamp: 1754587144298 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f + md5: 2aadb0d17215603a82a2a6b0afd9a4cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + purls: [] + size: 122618 + timestamp: 1770167931827 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.2.5-hf787086_0.conda sha256: 4b4220f03844aaaffa7868023963415e14cddd456f00b8fa78ee4a16fecd1b60 md5: fb78d469f8e0f1eb5bbbfd249aeed447 @@ -14967,6 +16023,17 @@ packages: purls: [] size: 87638 timestamp: 1754587529491 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + sha256: a339606a6b224bb230ff3d711e801934f3b3844271df9720165e0353716580d4 + md5: d99c2a23a31b0172e90f456f580b695e + depends: + - __osx >=11.0 + - libcxx >=19 + license: Zlib + license_family: Other + purls: [] + size: 94375 + timestamp: 1770168363685 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda sha256: b4fd6bd1cb87a183a8bbe85b4e87a1e7c51473309d0d82cd88d38fb021bcf41e md5: d28b82fcc8d1b462b595af4b15a6cdcf @@ -14982,21 +16049,6 @@ packages: - pkg:pypi/zstandard?source=hash-mapping size: 731658 timestamp: 1741853415477 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - sha256: ff62d2e1ed98a3ec18de7e5cf26c0634fd338cb87304cf03ad8cbafe6fe674ba - md5: 630db208bc7bbb96725ce9832c7423bb - depends: - - __glibc >=2.17,<3.0.a0 - - cffi >=1.11 - - libgcc >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/zstandard?source=hash-mapping - size: 732224 - timestamp: 1745869780524 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_1.conda sha256: db7ed45ce0ed42de5b799c094f15c064e5e7e88bbee128f8d15a0565367f3c41 md5: b0af1b749dbf9621fbea742c2de68ff8 @@ -15012,21 +16064,17 @@ packages: - pkg:pypi/zstandard?source=hash-mapping size: 531069 timestamp: 1741853718145 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda - sha256: c499a2639c2981ac2fd33bae2d86c15d896bc7524f1c5651a7d3b088263f7810 - md5: ba0eb639914e4033e090b46f53bec31c +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 depends: - - __osx >=11.0 - - cffi >=1.11 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/zstandard?source=hash-mapping - size: 532173 - timestamp: 1745870087418 + purls: [] + size: 601375 + timestamp: 1764777111296 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 @@ -15051,3 +16099,14 @@ packages: purls: [] size: 399979 timestamp: 1742433432699 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 433413 + timestamp: 1764777166076 diff --git a/pyproject.toml b/pyproject.toml index 43653ad..14de03c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,21 @@ requires = ["setuptools>=64.0", "setuptools_scm[toml]>=6.2"] build-backend = "setuptools.build_meta" +# ---------------------------------------------------------------------------- +# Installation +# +# Recommended: pixi (https://pixi.sh). The pixi config below is the canonical +# environment definition; it pins the conda-forge versions of compass, isce3, +# gdal etc. that cannot ship on PyPI, and points s1-reader at the maintained +# fork at scottstanie/s1-reader@develop-scott. +# +# pixi install # solve + create the default env +# pixi run sweets --help # run inside the env +# +# For users who prefer plain conda/mamba, an environment.yml synced from this +# pyproject is provided at the repo root. +# ---------------------------------------------------------------------------- + [project] name = "sweets" description = "Workflows for generating surface displacement maps using InSAR" @@ -9,96 +24,161 @@ readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.11" classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3", "License = file : LICENSE", "Operating System :: OS Independent", ] -# The version will be written into a version.py upon install, auto-generated -# see section: setuptools_scm -# https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html#dynamic-metadata +# The version is written into _version.py at install time by setuptools_scm. dynamic = ["version"] - +# These are the pip-installable runtime deps. Several heavy native deps +# (compass, isce3, gdal, libgdal-netcdf) are conda-only and live in +# [tool.pixi.dependencies] below. dependencies = [ - "dask", + "asf_search", + "burst2safe", "dolphin", - # Not pypi-installable - # "compass", - # "gdal", - # "libgdal-netcdf", - # "isce3", "h5py", + "loguru", "numpy", + # opera-utils comes from scottstanie/opera-utils@develop-scott via the + # pixi pypi-dependencies block (carries the tropo workflow); a permissive + # version pin here is fine for non-pixi installs. + "opera-utils", "pandas", + "pydantic>=2.1", "pyproj", + "python-dateutil", + "rasterio", "requests", "rich", - "shapely", - "geopandas", "rioxarray", - "opera-utils", - "pydantic", - "python-dateutil", - "rasterio", "sardem", "sentineleof", + "shapely", + "tyro", +] + +[project.optional-dependencies] +web = [ + "fastapi>=0.100", + "uvicorn[standard]", + "sqlmodel", + "python-multipart", + "websockets", + "titiler.core", ] [project.urls] -Homepage = "https://github.com/scottstanie/sweets" -"Bug Tracker" = "https://github.com/scottstanie/sweets/issues" +Homepage = "https://github.com/isce-framework/sweets" +"Bug Tracker" = "https://github.com/isce-framework/sweets/issues" # Entry points for the command line interface [project.scripts] sweets = "sweets.cli:main" -[tool.pixi.project] +# ---------------------------------------------------------------------------- +# pixi: canonical environment definition +# ---------------------------------------------------------------------------- + +[tool.pixi.workspace] channels = ["conda-forge"] platforms = ["osx-arm64", "linux-64"] [tool.pixi.pypi-dependencies] sweets = { path = ".", editable = true } +# Use the recently-updated forks. Upstream isce-framework/s1-reader has a numpy 2 +# incompat (polyfit scalar regression, see sweets#132); upstream +# opera-adt/COMPASS still uses np.string_ / np.unicode_ which were removed +# in numpy 2. Both forks restore numpy-2 compatibility on develop-scott. +s1reader = { git = "https://github.com/scottstanie/s1-reader.git", branch = "develop-scott" } +compass = { git = "https://github.com/scottstanie/COMPASS.git", branch = "develop-scott" } +# scottstanie/opera-utils@develop-scott carries the high-level +# `create_tropo_corrections_for_stack` workflow + `search_tropo` CMR client +# that the sweets tropo step builds on, plus the OPERA CSLC download +# helpers used by the OperaCslcSearch source and the NISAR GSLC helpers +# used by NisarGslcSearch. +opera-utils = { git = "https://github.com/scottstanie/opera-utils.git", branch = "develop-scott", extras = [ + "all", +] } +# scottstanie/dolphin@develop-scott carries the YamlModel commented-yaml +# fix for Union-of-submodels JSON schema, which unblocks the +# `Workflow.search: BurstSearch | OperaCslcSearch | NisarGslcSearch` +# discriminated union. +dolphin = { git = "https://github.com/scottstanie/dolphin.git", branch = "develop-scott" } +# scottstanie/spurt@develop-scott is significantly ahead of upstream +# isce-framework/spurt for temporal phase unwrapping - performance +# fixes, macOS multiprocessing memory fix, richer logging, reader- +# interface cleanups. dolphin only pulls `spurt` transitively, so +# pinning the fork explicitly here gets everyone who sets +# `dolphin.unwrap_method: spurt` in their sweets config onto the +# supported version. +spurt = { git = "https://github.com/scottstanie/spurt.git", branch = "develop-scott" } [tool.pixi.dependencies] -python = ">=3.8" +python = ">=3.11" pip = ">=21.3" -wget = "*" -git = "*" -dask = ">=2022.6.0" -dolphin = "*" +# Heavy native / conda-only deps. +# compass and opera-utils are intentionally not here - they come from scottstanie/ +# via [tool.pixi.pypi-dependencies] +# isce3 is NOT shared - it lives in the `cpu` / `gpu` features below so +# users on CUDA Linux boxes can select the `gpu` environment and get +# isce3-cuda (GPU-accelerated geocoding / crossmul / resampling). Every +# existing environment folds the `cpu` feature in by default. gdal = "*" -compass = ">=0.4.1" libgdal-netcdf = "*" -isce3 = ">=0.24" +# Pure-python deps mirrored from [project.dependencies] so the env solves +# fully through conda when possible. (dolphin is intentionally NOT here - +# it comes from scottstanie/dolphin@develop-scott via the pypi-dependencies +# block above.) +asf_search = "*" +burst2safe = "*" h5py = ">=3.6" +loguru = "*" numpy = ">=1.25" pandas = "*" +pydantic = ">=2.1" pyproj = ">=3.2" +python-dateutil = "*" +rasterio = "*" requests = ">=2.10" rich = ">=12.0" -shapely = ">=1.8" -geopandas = "*" rioxarray = "*" -opera-utils = ">=0.24" -pydantic = ">=2.1" -python-dateutil = "*" -rasterio = "*" sardem = "*" sentineleof = "*" +shapely = ">=2.0" +tyro = "*" +# compass runtime deps. compass's pyproject.toml has no [project.dependencies], +# so pip/uv-installed compass (from scottstanie/COMPASS@develop-scott) comes +# with zero runtime deps - they live only in compass's environment.yml and the +# conda-forge compass-feedstock meta.yaml. We mirror the subset sweets exercises +# here so the conda solver pulls them in. dem_stitcher / progressbar are +# RAiDER-path only and deliberately omitted. +scikit-image = "*" +pillow = "*" +pysolid = "*" +"ruamel.yaml" = "*" +yamale = "*" +lxml = "*" +scipy = "*" [tool.pixi.tasks] test = "pytest" -install = { depends-on = "pre-commit_install" } +install = { depends-on = ["pre-commit_install"] } pre-commit_install = "pre-commit install" +# Regenerate environment.yml from the pixi solve so non-pixi users have a +# current conda env spec to fall back on. +export-env = "pixi project export conda-environment > environment.yml" [tool.pixi.feature.test.dependencies] pytest = ">=8.3.5,<9" pytest-cov = "*" pytest-randomly = "*" +pytest-recording = "*" pytest-xdist = "*" pre-commit = "*" mypy = "*" @@ -106,13 +186,32 @@ mypy = "*" [tool.pixi.feature.plotting.dependencies] cartopy = "*" matplotlib = "*" -colorcet = "*" +geopandas = "*" +ipywidgets = "*" + +# CPU (default) isce3 build - works on every platform sweets supports. +[tool.pixi.feature.cpu.dependencies] +isce3 = ">=0.24" + +# CUDA-accelerated isce3 for geometry / crossmul / resampling. Only +# available on linux-64; conda-forge doesn't ship osx-arm64 builds. +# Requires CUDA 12+ on the host. Activate with `pixi shell -e gpu`. +[tool.pixi.feature.gpu.target.linux-64.dependencies] +isce3-cuda = ">=0.24" + +[tool.pixi.feature.gpu.system-requirements] +cuda = "12" [tool.pixi.environments] -default = ["test", "plotting"] -test = ["test"] -plotting = ["plotting"] -minimal = [] +# `cpu` is folded into every CPU environment so isce3 is always present. +default = { features = ["test", "plotting", "cpu"], solve-group = "default" } +test = { features = ["test", "plotting", "cpu"], solve-group = "default" } +plotting = { features = ["plotting", "cpu"], solve-group = "default" } +minimal = { features = ["cpu"], solve-group = "default" } +# GPU environment: same extras as `default` but swaps isce3 -> isce3-cuda. +# `solve-group` is deliberately separate so pixi doesn't try to reconcile +# the CPU and GPU isce3 builds in a single resolution. +gpu = { features = ["test", "plotting", "gpu"] } [tool.setuptools_scm] # https://github.com/pypa/setuptools_scm#configuration-parameters @@ -122,7 +221,7 @@ version_scheme = "no-guess-dev" # Will not guess the next version [tool.black] -target-version = ["py311", "py312", "py313"] +target-version = ["py311", "py312", "py313", "py314"] preview = true [tool.isort] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 3f96750..0000000 --- a/requirements.txt +++ /dev/null @@ -1,18 +0,0 @@ -# "dask[complete]" for pip version -# COMPASS extra dependencies (that don't get installed through pip) -# Conda ones -# SYNC THIS WITH conda-env -# These are the packages easily-installable through pip -colorcet -dask>=2022.6.0 -h5py>=3.6 -numpy>=1.20 -opera-utils>0.1.1 -pandas -pydantic>=2 -pyproj>=3.2 -requests>=2.10 -rich>=12.0 -sardem>=0.11.1 -sentineleof>=0.6.5 -shapely>=1.8 diff --git a/scripts/demo_sweet.py b/scripts/demo_sweet.py index 9656891..6374ebc 100644 --- a/scripts/demo_sweet.py +++ b/scripts/demo_sweet.py @@ -1,29 +1,32 @@ +"""Quick smoke-test driver for sweets v0.2. + +Edit the bbox / dates below for your own AOI. The default targets a tiny +patch over Pecos, TX, where Sentinel-1 track 78 has good summer 2021 +coverage. + +Run with:: + + python scripts/demo_sweet.py +""" + +from __future__ import annotations + from rich import print from sweets.core import Workflow if __name__ == "__main__": - # start, end, track, n_workers, tpw = "2018-02-09", "2018-02-21", 64, 2, 4 - - # midland eq - # TexNetEvent(event_id='texnet2022yplg', dt=datetime.datetime(2022, 12, 16, 23, ), - # magnitude=5.22863731, latitude=32.19085693, longitude=-102.1406965, depth=8.1923) - # lon, lat = -102.1407, 32.1909 - # bbox = Point(lon, lat).buffer(0.05).bounds - bbox = [-102.2, 32.15, -102.1, 32.22] - # start, end, track = "2022-10-15", "2023-02-20", 78 - start, end, track = "2022-12-15", "2022-12-29", 78 - n_workers, tpw = 1, 16 - - w = Workflow( - asf_query=dict( - start=start, - end=end, - relativeOrbit=track, - ), - bbox=bbox, - n_workers=n_workers, - threads_per_worker=tpw, - max_bandwidth=1, + w = Workflow.model_validate( + { + "bbox": (-102.96, 31.22, -101.91, 31.56), + "search": { + "start": "2021-06-05", + "end": "2021-08-10", + "track": 78, + "out_dir": "data", + }, + "n_workers": 2, + "threads_per_worker": 8, + } ) - print(w.run()) # Print out the final output results + print(w.run()) diff --git a/scripts/prep_mintpy.py b/scripts/prep_mintpy.py deleted file mode 100755 index 0ba41b5..0000000 --- a/scripts/prep_mintpy.py +++ /dev/null @@ -1,603 +0,0 @@ -#!/usr/bin/env python -############################################################ -# Program is part of MintPy # -# Copyright (c) 2013, Zhang Yunjun, Heresh Fattahi # -# Author: Talib Oliver Cabrerra, Scott Staniewicz # -############################################################ - - -import argparse -import datetime -import glob -import itertools -import os -import sys -from pathlib import Path - -import h5py -import numpy as np -import pyproj -from dolphin import io -from dolphin.utils import full_suffix -from mintpy.utils import arg_utils, ptime, readfile, writefile -from mintpy.utils.utils0 import calc_azimuth_from_east_north_obs -from opera_utils import OPERA_DATASET_ROOT, get_dates - -#################################################################################### -EXAMPLE = """example: - - python ./prep_mintpy.py -u 'interferograms/unwrapped/*.unw.tif' -c 'interferograms/stitched/*.cor' -m gslcs/ - -""" # noqa: E501 - -# """ -# Scott TODO: -# - UTM_ZONE, EPSG from the stitched IFG (it won't work to get a single GSLC burst) -# - pixel size is wrong since we're taking range/azimuth size, instead of geocoded size -# - HEIGHT: do we wanna try to get that from the saved orbit info? - - -def _create_parser(): - parser = argparse.ArgumentParser( - description="Prepare Sweets products for MintPy", - formatter_class=argparse.RawTextHelpFormatter, - epilog=EXAMPLE, - ) - - parser.add_argument( - "-u", - "--unw-file-glob", - type=str, - default="./interferograms/unwrapped/*.unw.tif", - help="path pattern of unwrapped interferograms (default: %(default)s).", - ) - parser.add_argument( - "-c", - "--cor-file-glob", - type=str, - default="./interferograms/stitched/*.cor", - help="path pattern of unwrapped interferograms (default: %(default)s).", - ) - parser.add_argument( - "-g", - "--geom-dir", - default="./geometry", - help="Geometry directory (default: %(default)s).\n", - ) - parser.add_argument( - "-m", - "--meta-file", - type=str, - help="GSLC metadata file or directory", - ) - parser.add_argument( - "-b", - "--baseline-dir", - dest="baselineDir", - type=str, - default=None, - help="baseline directory (default: %(default)s).", - ) - parser.add_argument( - "-o", - "--out-dir", - type=str, - default="./mintpy", - help="output directory (default: %(default)s).", - ) - parser.add_argument( - "-r", - "--range", - dest="lks_x", - type=int, - default=1, - help=( - "number of looks in range direction, for multilooking applied after fringe" - " processing.\nOnly impacts metadata. (default: %(default)s)." - ), - ) - parser.add_argument( - "-a", - "--azimuth", - dest="lks_y", - type=int, - default=1, - help=( - "number of looks in azimuth direction, for multilooking applied after" - " fringe processing.\nOnly impacts metadata. (default: %(default)s)." - ), - ) - parser.add_argument( - "--single-reference", - action="store_true", - help=( - "Indicate that all the unwrapped ifgs are single reference, which allows" - " use to create the timeseries.h5 file directly without inversion." - ), - ) - - parser = arg_utils.add_subset_argument(parser, geo=True) - - return parser - - -def cmd_line_parse(iargs=None): - """Create the command line parser.""" - parser = _create_parser() - inps = parser.parse_args(args=iargs) - - # in case meta_file is input as wildcard - inps.meta_file = sorted(glob.glob(inps.meta_file))[0] - - return inps - - -def prepare_metadata(meta_file, int_file, nlks_x=1, nlks_y=1): - """Get the metadata from the GSLC metadata file and the unwrapped interferogram.""" - print("-" * 50) - - cols, rows = io.get_raster_xysize(int_file) - - meta_compass = h5py.File(meta_file, "r") - meta = {} - - geotransform = io.get_raster_gt(int_file) - meta["LENGTH"] = rows - meta["WIDTH"] = cols - - meta["X_FIRST"] = geotransform[0] - meta["Y_FIRST"] = geotransform[3] - meta["X_STEP"] = geotransform[1] - meta["Y_STEP"] = geotransform[5] - meta["X_UNIT"] = meta["Y_UNIT"] = "meters" - - crs = io.get_raster_crs(int_file) - meta["EPSG"] = crs.to_epsg() - - if "/science" in meta_compass: - root = "/science/SENTINEL1/CSLC" - processing_ds = f"{root}/metadata/processing_information" - burst_ds = f"{processing_ds}/s1_burst_metadata" - if burst_ds not in meta_compass: - burst_ds = f"{processing_ds}/input_burst_metadata" - else: - root = OPERA_DATASET_ROOT - processing_ds = f"{root}/metadata/processing_information" - burst_ds = f"{processing_ds}/input_burst_metadata" - - meta["WAVELENGTH"] = meta_compass[f"{burst_ds}/wavelength"][()] - meta["RANGE_PIXEL_SIZE"] = meta_compass[f"{burst_ds}/range_pixel_spacing"][()] - meta["AZIMUTH_PIXEL_SIZE"] = 14.1 - meta["EARTH_RADIUS"] = 6371000.0 - - t0 = datetime.datetime.strptime( - meta_compass[f"{burst_ds}/sensing_start"][()].decode("utf-8"), - "%Y-%m-%d %H:%M:%S.%f", - ) - t1 = datetime.datetime.strptime( - meta_compass[f"{burst_ds}/sensing_stop"][()].decode("utf-8"), - "%Y-%m-%d %H:%M:%S.%f", - ) - t_mid = t0 + (t1 - t0) / 2.0 - meta["CENTER_LINE_UTC"] = ( - t_mid - datetime.datetime(t_mid.year, t_mid.month, t_mid.day) - ).total_seconds() - meta["HEIGHT"] = 750000.0 - meta["STARTING_RANGE"] = meta_compass[f"{burst_ds}/starting_range"][()] - meta["PLATFORM"] = meta_compass[f"{burst_ds}/platform_id"][()].decode("utf-8") - meta["ORBIT_DIRECTION"] = meta_compass[f"{root}/metadata/orbit/orbit_direction"][ - () - ].decode("utf-8") - meta["ALOOKS"] = 1 - meta["RLOOKS"] = 1 - - # apply optional user multilooking - if nlks_x > 1: - meta["RANGE_PIXEL_SIZE"] = str(float(meta["RANGE_PIXEL_SIZE"]) * nlks_x) - meta["RLOOKS"] = str(float(meta["RLOOKS"]) * nlks_x) - - if nlks_y > 1: - meta["AZIMUTH_PIXEL_SIZE"] = str(float(meta["AZIMUTH_PIXEL_SIZE"]) * nlks_y) - meta["ALOOKS"] = str(float(meta["ALOOKS"]) * nlks_y) - - return meta - - -def _get_xy_arrays(atr): - x0 = float(atr["X_FIRST"]) - y0 = float(atr["Y_FIRST"]) - x_step = float(atr["X_STEP"]) - y_step = float(atr["Y_STEP"]) - rows = int(atr["LENGTH"]) - cols = int(atr["WIDTH"]) - x_arr = x0 + x_step * np.arange(cols) - y_arr = y0 + y_step * np.arange(rows) - # Shift by half pixel to get the centers - x_arr += x_step / 2 - y_arr += y_step / 2 - return x_arr, y_arr - - -def write_coordinate_system( - filename, dset_name, xy_dim_names=("x", "y"), grid_mapping_dset="spatial_ref" -): - """Write the coordinate system CF metadata to an existing HDF5 file.""" - x_dim_name, y_dim_name = xy_dim_names - atr = readfile.read_attribute(filename) - epsg = int(atr.get("EPSG", 4326)) - - with h5py.File(filename, "a") as hf: - crs = pyproj.CRS.from_user_input(epsg) - dset = hf[dset_name] - - # Setup the dataset holding the SRS information - srs_dset = hf.require_dataset(grid_mapping_dset, shape=(), dtype=int) - srs_dset.attrs.update(crs.to_cf()) - dset.attrs["grid_mapping"] = grid_mapping_dset - - if "date" in hf: - date_arr = [ - datetime.datetime.strptime(ds, "%Y%m%d") - for ds in hf["date"][()].astype(str) - ] - days_since = [(d - date_arr[0]).days for d in date_arr] - dt_dim = hf.create_dataset("time", data=days_since) - dt_dim.make_scale() - cf_attrs = dict( - units=f"days since {str(date_arr[0])}", calendar="proleptic_gregorian" - ) - dt_dim.attrs.update(cf_attrs) - dset.dims[0].attach_scale(dt_dim) - dset.dims[0].label = "time" - else: - dt_dim = date_arr = None - # If we want to do something other than time as a 3rd dimension... - # We'll need to figure out what other valid dims there are - # otherwise, we can just do `phony_dims="sort"` in xarray - - # add metadata to x,y coordinates - is_projected = crs.is_projected - is_geographic = crs.is_geographic - x_arr, y_arr = _get_xy_arrays(atr) - x_dim_dset = hf.create_dataset(x_dim_name, data=x_arr) - x_dim_dset.make_scale(x_dim_name) - y_dim_dset = hf.create_dataset(y_dim_name, data=y_arr) - y_dim_dset.make_scale(y_dim_name) - - x_coord_attrs = {} - x_coord_attrs["axis"] = "X" - y_coord_attrs = {} - y_coord_attrs["axis"] = "Y" - if is_projected: - units = "meter" - # X metadata - x_coord_attrs["long_name"] = "x coordinate of projection" - x_coord_attrs["standard_name"] = "projection_x_coordinate" - x_coord_attrs["units"] = units - # Y metadata - y_coord_attrs["long_name"] = "y coordinate of projection" - y_coord_attrs["standard_name"] = "projection_y_coordinate" - y_coord_attrs["units"] = units - elif is_geographic: - # X metadata - x_coord_attrs["long_name"] = "longitude" - x_coord_attrs["standard_name"] = "longitude" - x_coord_attrs["units"] = "degrees_east" - # Y metadata - y_coord_attrs["long_name"] = "latitude" - y_coord_attrs["standard_name"] = "latitude" - y_coord_attrs["units"] = "degrees_north" - y_dim_dset.attrs.update(y_coord_attrs) - x_dim_dset.attrs.update(x_coord_attrs) - - ndim = dset.ndim - dset.dims[ndim - 1].attach_scale(x_dim_dset) - dset.dims[ndim - 2].attach_scale(y_dim_dset) - dset.dims[ndim - 1].label = x_dim_name - dset.dims[ndim - 2].label = y_dim_name - - -def _get_date_pairs(filenames): - str_list = [Path(f).stem for f in filenames] - return [str(f).replace(full_suffix(f), "") for f in str_list] - - -def prepare_timeseries( - outfile, - unw_files, - metadata, - baseline_dir=None, -): - """Prepare the timeseries file.""" - print("-" * 50) - print("preparing timeseries file: {}".format(outfile)) - - # copy metadata to meta - meta = {key: value for key, value in metadata.items()} - phase2range = -1 * float(meta["WAVELENGTH"]) / (4.0 * np.pi) - - # grab date list from the filename - date12_list = _get_date_pairs(unw_files) - num_file = len(unw_files) - print("number of unwrapped interferograms: {}".format(num_file)) - - date_pairs = [dl.split("_") for dl in date12_list] - date_list = sorted(set(itertools.chain.from_iterable(date_pairs))) - # ref_date = date12_list[0].split("_")[0] - # date_list = [ref_date] + [date12.split("_")[1] for date12 in date12_list] - num_date = len(date_list) - print("number of acquisitions: {}\n{}".format(num_date, date_list)) - - # baseline info - pbase = np.zeros(num_date, dtype=np.float32) - if baseline_dir is not None: - raise NotImplementedError - - # size info - cols, rows = io.get_raster_xysize(unw_files[0]) - - # define dataset structure - dates = np.array(date_list, dtype=np.string_) - ds_name_dict = { - "date": [dates.dtype, (num_date,), dates], - "bperp": [np.float32, (num_date,), pbase], - "timeseries": [np.float32, (num_date, rows, cols), None], - } - - # initiate HDF5 file - meta["FILE_TYPE"] = "timeseries" - meta["UNIT"] = "m" - # meta["REF_DATE"] = ref_date # might not be the first date! - writefile.layout_hdf5(outfile, ds_name_dict, metadata=meta) - - # writing data to HDF5 file - print("writing data to HDF5 file {} with a mode ...".format(outfile)) - with h5py.File(outfile, "a") as f: - prog_bar = ptime.progressBar(maxValue=num_file) - for i, unw_file in enumerate(unw_files): - # read data using gdal - data = io.load_gdal(unw_file) - - f["timeseries"][i + 1] = data * phase2range - prog_bar.update(i + 1, suffix=date12_list[i]) - prog_bar.close() - - print("set value at the first acquisition to ZERO.") - f["timeseries"][0] = 0.0 - - print("finished writing to HDF5 file: {}".format(outfile)) - return outfile - - -def prepare_geometry(outfile, geom_dir, metadata, water_mask_file=None): - """Prepare the geometry file.""" - print("-" * 50) - print(f"preparing geometry file: {outfile}") - - geom_path = Path(geom_dir) - # copy metadata to meta - meta = {key: value for key, value in metadata.items()} - meta["FILE_TYPE"] = "geometry" - - file_to_path = { - "los_east": geom_path / "los_east.tif", - "los_north": geom_path / "los_north.tif", - "height": geom_path / "height.tif", - "shadowMask": geom_path / "layover_shadow_mask.tif", - } - - if water_mask_file: - file_to_path["waterMask"] = water_mask_file - - dsDict = {} - for dsName, fname in file_to_path.items(): - try: - data = readfile.read(fname, datasetName=dsName)[0] - # TODO: add general functionality to handle nodata into Mintpy - data[data == 0] = np.nan - dsDict[dsName] = data - - # write data to HDF5 file - except KeyError as e: # https://github.com/insarlab/MintPy/issues/1081 - print(f"Skipping {fname}: {e}") - - # Compute the azimuth and incidence angles from east/north coefficients - east = dsDict["los_east"] - north = dsDict["los_north"] - azimuth_angle = calc_azimuth_from_east_north_obs(east, north) - dsDict["azimuthAngle"] = azimuth_angle - - up = np.sqrt(1 - east**2 - north**2) - incidence_angle = np.rad2deg(np.arccos(up)) - dsDict["incidenceAngle"] = incidence_angle - - writefile.write(dsDict, outfile, metadata=meta) - return outfile - - -def prepare_temporal_coherence(outfile, infile, metadata): - """Prepare the temporal coherence file.""" - print("-" * 50) - print("preparing temporal coherence file: {}".format(outfile)) - - # copy metadata to meta - meta = {key: value for key, value in metadata.items()} - meta["FILE_TYPE"] = "temporalCoherence" - meta["UNIT"] = "1" - - data = io.load_gdal(infile) - - print(data.shape) - # write to HDF5 file - writefile.write(data, outfile, metadata=meta) - return outfile - - -def prepare_ps_mask(outfile, infile, metadata): - """Prepare the PS mask file.""" - print("-" * 50) - print("preparing PS mask file: {}".format(outfile)) - - # copy metadata to meta - meta = {key: value for key, value in metadata.items()} - meta["FILE_TYPE"] = "mask" - meta["UNIT"] = "1" - - # read data using gdal - data = io.load_gdal(infile) - - # write to HDF5 file - writefile.write(data, outfile, metadata=meta) - return outfile - - -def prepare_stack( - outfile, - unw_files, - cor_files, - metadata, - # baseline_dir=None, -): - """Prepare the input unw stack.""" - print("-" * 50) - print("preparing ifgramStack file: {}".format(outfile)) - # copy metadata to meta - meta = {key: value for key, value in metadata.items()} - - # get list of *.unw file - num_pair = len(unw_files) - unw_ext = full_suffix(unw_files[0]) - - print(unw_files) - print(f"number of unwrapped interferograms: {num_pair}") - print(f"number of correlation files: {len(cor_files)}") - print(cor_files) - - # get list of *.unw.conncomp file - cc_files = [str(x).replace(unw_ext, ".unw.conncomp") for x in unw_files] - cc_files = [x for x in cc_files if Path(x).exists()] - print(f"number of connected components files: {len(cc_files)}") - - if len(cc_files) != len(unw_files) or len(cor_files) != len(unw_files): - print( - "the number of *.unw and *.unw.conncomp or *.cor files are NOT consistent" - ) - if len(unw_files) > len(cor_files): - print("skip creating ifgramStack.h5 file.") - return - print("Keeping only cor files which match a unw file") - unw_dates_set = set([tuple(get_dates(f)) for f in unw_files]) - cor_files = [f for f in cor_files if tuple(get_dates(f)) in unw_dates_set] - - # get date info: date12_list - date12_list = _get_date_pairs(unw_files) - - # TODO: compute the spatial baseline using COMPASS metadata - pbase = np.zeros(num_pair, dtype=np.float32) - - # size info - cols, rows = io.get_raster_xysize(unw_files[0]) - - # define (and fill out some) dataset structure - date12_arr = np.array([x.split("_") for x in date12_list], dtype=np.string_) - drop_ifgram = np.ones(num_pair, dtype=np.bool_) - ds_name_dict = { - "date": [date12_arr.dtype, (num_pair, 2), date12_arr], - "bperp": [np.float32, (num_pair,), pbase], - "dropIfgram": [np.bool_, (num_pair,), drop_ifgram], - "unwrapPhase": [np.float32, (num_pair, rows, cols), None], - "coherence": [np.float32, (num_pair, rows, cols), None], - "connectComponent": [ - np.float32, - (num_pair, rows, cols), - None, - ], - } - - # initiate HDF5 file - meta["FILE_TYPE"] = "ifgramStack" - writefile.layout_hdf5(outfile, ds_name_dict, metadata=meta) - - # writing data to HDF5 file - print("writing data to HDF5 file {} with a mode ...".format(outfile)) - with h5py.File(outfile, "a") as f: - prog_bar = ptime.progressBar(maxValue=num_pair) - for i, (unw_file, cor_file, cc_file) in enumerate( - zip(unw_files, cor_files, cc_files) - ): - # read/write *.unw file - f["unwrapPhase"][i] = io.load_gdal(unw_file) - - # read/write *.cor file - f["coherence"][i] = io.load_gdal(cor_file) - - # read/write *.unw.conncomp file - f["connectComponent"][i] = io.load_gdal(cc_file) - - prog_bar.update(i + 1, suffix=date12_list[i]) - prog_bar.close() - - print("finished writing to HDF5 file: {}".format(outfile)) - return outfile - - -def main(iargs=None): - """Run the preparation functions.""" - inps = cmd_line_parse(iargs) - - unw_files = sorted(glob.glob(inps.unw_file_glob)) - print(f"Found {len(unw_files)} unwrapped files") - cor_files = sorted(glob.glob(inps.cor_file_glob)) - print(f"Found {len(cor_files)} correlation files") - - # translate input options - processor = "sweets" # isce_utils.get_processor(inps.meta_file) - # metadata - meta_file = Path(inps.meta_file) - if meta_file.is_dir(): - # Search for the line of sight static_layers file - try: - # Grab the first one in in the directory - meta_file = next(meta_file.rglob("static_*.h5")) - except StopIteration: - raise ValueError(f"No static layers file found in {meta_file}") - - meta = prepare_metadata( - meta_file, unw_files[0], nlks_x=inps.lks_x, nlks_y=inps.lks_y - ) - - # output directory - for dname in [inps.out_dir, os.path.join(inps.out_dir, "inputs")]: - os.makedirs(dname, exist_ok=True) - - stack_file = os.path.join(inps.out_dir, "inputs/ifgramStack.h5") - ts_file = os.path.join(inps.out_dir, "timeseries.h5") - geom_file = os.path.join(inps.out_dir, "geometryGeo.h5") - - if inps.single_reference: - # time-series (if inputs are all single-reference) - prepare_timeseries( - outfile=ts_file, - unw_files=unw_files, - metadata=meta, - processor=processor, - # baseline_dir=inps.baseline_dir, - ) - - prepare_geometry(geom_file, geom_dir=inps.geom_dir, metadata=meta) - - # prepare ifgstack with connected components - prepare_stack( - outfile=stack_file, - unw_files=unw_files, - cor_files=cor_files, - metadata=meta, - # baseline_dir=inps.baseline_dir, - ) - - print("Done.") - return - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/src/sweets/__main__.py b/src/sweets/__main__.py index 3c99193..5809c63 100644 --- a/src/sweets/__main__.py +++ b/src/sweets/__main__.py @@ -1,9 +1,7 @@ """Main module to provide command line interface to the workflows.""" -import sys - from .cli import main # https://docs.python.org/3/library/__main__.html#packaging-considerations # allows `python -m sweets` to work -sys.exit(main()) +main() diff --git a/src/sweets/_burst_db.py b/src/sweets/_burst_db.py index 2860063..612ab56 100644 --- a/src/sweets/_burst_db.py +++ b/src/sweets/_burst_db.py @@ -3,15 +3,13 @@ from typing import Optional import requests +from loguru import logger -from ._log import get_log from ._types import Filename from .utils import get_cache_dir BURST_DB_URL = "https://github.com/scottstanie/burst_db/raw/frames-with-data/data/s1-frames-9frames-5min-10max-bbox-only.gpkg.zip" # noqa: E501 -logger = get_log(__name__) - def get_burst_db(url: str = BURST_DB_URL, out_file: Optional[Filename] = None) -> Path: """Read or download the burst-db file. diff --git a/src/sweets/_dolphin.py b/src/sweets/_dolphin.py new file mode 100644 index 0000000..66fab84 --- /dev/null +++ b/src/sweets/_dolphin.py @@ -0,0 +1,321 @@ +"""Adapter that runs ``dolphin.workflows.displacement`` over a stack of CSLCs. + +The job here is small: take the geocoded SLCs that COMPASS produced, build a +:class:`dolphin.workflows.config.DisplacementWorkflow` config from a handful +of sweets-friendly knobs, and call :func:`dolphin.workflows.displacement.run`. + +dolphin owns everything from this point on: + +- phase linking (sequential estimator over ministacks) +- interferogram network selection +- stitching across bursts +- unwrapping (SNAPHU / SPURT / WHIRLWIND) +- displacement timeseries inversion +- velocity estimation + +This module is intentionally a thin shim — do not re-implement any of the +above here. +""" + +from __future__ import annotations + +from math import cos, floor, log2, radians +from pathlib import Path +from typing import TYPE_CHECKING, Literal, Optional + +from pydantic import BaseModel, Field + +from loguru import logger + +from ._log import log_runtime + +if TYPE_CHECKING: + from dolphin.workflows.displacement import OutputPaths + + +UnwrapMethod = Literal["snaphu", "spurt", "whirlwind"] + + +def _estimate_snaphu_tiles_from_bounds( + bounds: tuple[float, float, float, float], strides: tuple[int, int] +) -> tuple[int, int]: + """Estimate a square SNAPHU tile grid from geographic bounds.""" + west, south, east, north = bounds + center_lat = (south + north) / 2 + lat_size_m = abs(north - south) * 111_320.0 + lon_size_m = abs(east - west) * 111_320.0 * abs(cos(radians(center_lat))) + # For ~1000x1000 outputs, use 2x2 tiles. Every doubling adds one tile. + approx_rows = lat_size_m / (10.0 * strides[0]) + approx_cols = lon_size_m / (5.0 * strides[1]) + max_side = max(approx_rows, approx_cols) + tile_count = 1 if max_side < 1000 else floor(log2(max_side / 1000.0)) + 2 + return (tile_count, tile_count) + + +class DolphinOptions(BaseModel): + """Sweets-friendly configuration for the dolphin displacement workflow. + + These map straight onto fields of + :class:`dolphin.workflows.config.DisplacementWorkflow`. Anything not + exposed here can still be set after the fact by mutating the returned + config object before :meth:`run`. + """ + + half_window: tuple[int, int] = Field( + default=(11, 5), + description=( + "Half-window (y, x) for phase linking. The default of (11, 5) gives" + " roughly square windows for the OPERA 10x5 m geocoded posting." + ), + ) + strides: tuple[int, int] = Field( + default=(6, 12), + description=( + "Output strides (y, x). With OPERA 10x5 m posting and the default" + " (6, 12), outputs end up at 60 x 60 m." + ), + ) + ministack_size: int = Field( + default=10, + ge=2, + description="Number of SLCs per ministack for the sequential estimator.", + ) + use_evd: bool = Field( + default=False, + description="Use EVD instead of EMI for phase linking.", + ) + max_bandwidth: int = Field( + default=4, + ge=1, + description="Form nearest-N interferograms (by index) for the network.", + ) + nearest_n_coherence: int = Field( + default=1, + ge=1, + description="Save N nearest-neighbor multilooked coherence rasters.", + ) + unwrap_method: UnwrapMethod = Field( + default="snaphu", + description="Unwrapping algorithm to invoke through dolphin.", + ) + n_parallel_unwrap: int = Field( + default=2, + ge=1, + description="Parallel unwrapping jobs (interferograms in flight).", + ) + snaphu_ntiles: tuple[int, int] | Literal["auto"] = Field( + default="auto", + description="SNAPHU tile grid (rows, cols). 'auto' lets dolphin decide based on image size.", + ) + snaphu_parallel_tiles: int = Field( + default=4, + ge=1, + description="Number of SNAPHU tiles to process in parallel (for each of `n_parallel_unwrap` jobs).", + ) + snaphu_tile_overlap: tuple[int, int] = Field( + default=(300, 300), + description="SNAPHU tile overlap (rows, cols).", + ) + snaphu_cost: Literal["defo", "smooth"] = Field( + default="smooth", + description="SNAPHU statistical cost mode.", + ) + run_timeseries: bool = Field( + default=True, + description="Run dolphin's timeseries inversion + velocity estimation.", + ) + gpu_enabled: bool = Field( + default=True, + description=( + "Enable GPU acceleration if dolphin can find a usable device." + " Harmless on machines without a GPU — dolphin falls back to CPU." + ), + ) + n_parallel_bursts: int = Field( + default=1, + ge=1, + description=( + "Number of parallel burst stacks (S1) or blocks (NISAR) to process during phase linking." + ), + ) + block_shape: tuple[int, int] = Field( + default=(256, 256), + description="Block shape (rows, cols) used for streaming I/O.", + ) + + +def build_displacement_config( + cslc_files: list[Path], + work_directory: Path, + *, + options: Optional[DolphinOptions] = None, + mask_file: Optional[Path] = None, + bounds: Optional[tuple[float, float, float, float]] = None, + subdataset: str = "/data/VV", + wavelength: Optional[float] = None, +): + """Build a :class:`DisplacementWorkflow` config from sweets options. + + Parameters + ---------- + cslc_files + Geocoded SLC files (COMPASS HDF5 outputs or OPERA CSLC HDF5s or + NISAR GSLC HDF5s). + work_directory + Where dolphin will write its scratch and output products. + options + Sweets-side knobs. Defaults if None. + mask_file + Optional water/validity mask. Convention: 1 = good, 0 = bad, dtype uint8. + bounds + Optional crop bounds (left, bottom, right, top) in EPSG:4326. + subdataset + HDF5 dataset path for the complex SLC inside each input file. + Defaults to ``/data/VV`` (COMPASS / OPERA CSLC layout); callers + with NISAR GSLCs pass e.g. + ``/science/LSAR/GSLC/grids/frequencyA/HH``. + + Returns + ------- + dolphin.workflows.config.DisplacementWorkflow + Configured workflow ready to be passed to :func:`run_displacement`. + + """ + from dolphin.workflows.config import DisplacementWorkflow + + if options is None: + options = DolphinOptions() + + work_directory = Path(work_directory).resolve() + work_directory.mkdir(parents=True, exist_ok=True) + + if options.snaphu_ntiles == "auto": + snaphu_tiles = ( + (1, 1) + if bounds is None + else _estimate_snaphu_tiles_from_bounds(bounds, options.strides) + ) + else: + snaphu_tiles = options.snaphu_ntiles + + unwrap_options: dict = { + "unwrap_method": options.unwrap_method, + "n_parallel_jobs": options.n_parallel_unwrap, + } + if options.unwrap_method == "snaphu": + unwrap_options["snaphu_options"] = { + "ntiles": list(snaphu_tiles), + "tile_overlap": list(options.snaphu_tile_overlap), + "cost": options.snaphu_cost, + "single_tile_reoptimize": True, # always better + } + + output_options: dict = { + "strides": {"y": options.strides[0], "x": options.strides[1]}, + } + if bounds is not None: + output_options["bounds"] = list(bounds) + output_options["bounds_epsg"] = 4326 + + input_options: dict = {"subdataset": subdataset} + if wavelength is not None: + input_options["wavelength"] = wavelength + + # Use model_validate so the nested dolphin sub-models accept dicts + # rather than requiring us to import each one explicitly here. + cfg = DisplacementWorkflow.model_validate( + { + "cslc_file_list": [Path(p).resolve() for p in cslc_files], + "work_directory": work_directory, + "mask_file": mask_file, + "input_options": input_options, + "worker_settings": { + "gpu_enabled": options.gpu_enabled, + "threads_per_worker": 2, + "n_parallel_bursts": options.n_parallel_bursts, + "block_shape": list(options.block_shape), + }, + "phase_linking": { + "ministack_size": options.ministack_size, + "half_window": { + "y": options.half_window[0], + "x": options.half_window[1], + }, + "use_evd": options.use_evd, + "output_reference_idx": 0, + "max_num_compressed": 5, + }, + "interferogram_network": { + "max_bandwidth": options.max_bandwidth, + }, + "unwrap_options": unwrap_options, + "timeseries_options": { + "run_inversion": options.run_timeseries, + "run_velocity": options.run_timeseries, + "apply_mask_to_timeseries": True, # more commonly requested + }, + "output_options": output_options, + } + ) + return cfg + + +@log_runtime +def run_displacement( + cslc_files: list[Path], + work_directory: Path, + *, + options: Optional[DolphinOptions] = None, + mask_file: Optional[Path] = None, + bounds: Optional[tuple[float, float, float, float]] = None, + config_yaml: Optional[Path] = None, + subdataset: str = "/data/VV", + wavelength: Optional[float] = None, +) -> "OutputPaths": + """Build the dolphin config and run the displacement workflow. + + Parameters + ---------- + cslc_files + Geocoded SLCs from COMPASS, OPERA, or NISAR. + work_directory + dolphin work / output directory. + options + Sweets-side knobs (defaults to :class:`DolphinOptions`). + mask_file + Optional water/validity mask. + bounds + Optional crop bounds in EPSG:4326. + config_yaml + If given, the resolved dolphin config is dumped to this YAML path + before running, for reproducibility. + subdataset + HDF5 dataset path for the complex SLC inside each input file; + forwarded to :func:`build_displacement_config`. + + Returns + ------- + dolphin.workflows.displacement.OutputPaths + Dataclass of output paths produced by dolphin. + + """ + from dolphin.workflows.displacement import run + + cfg = build_displacement_config( + cslc_files=cslc_files, + work_directory=work_directory, + options=options, + mask_file=mask_file, + bounds=bounds, + subdataset=subdataset, + wavelength=wavelength, + ) + if config_yaml is not None: + cfg.to_yaml(config_yaml) + logger.info(f"Wrote dolphin config: {config_yaml}") + + logger.info( + f"Running dolphin displacement on {len(cfg.cslc_file_list)} CSLCs" + f" in {cfg.work_directory}" + ) + return run(cfg) diff --git a/src/sweets/_geocode_slcs.py b/src/sweets/_geocode_slcs.py index 4519c2a..78a7df6 100644 --- a/src/sweets/_geocode_slcs.py +++ b/src/sweets/_geocode_slcs.py @@ -11,11 +11,9 @@ from compass import s1_geocode_stack from compass.utils.geo_runconfig import GeoRunConfig -from ._log import get_log -from ._types import Filename - -logger = get_log(__name__) +from loguru import logger +from ._types import Filename ModuleNames = Literal["s1_geocode_slc", "s1_static_layers"] @@ -68,7 +66,11 @@ def _get_cfg_setup( burst_id_date = "_".join(burst_id_tup) outfile = Path(params.hdf5_path) if module_name == "s1_static_layers": - outfile = outfile.with_name("static_layers_" + outfile.name) + # Static layers are per-burst, not per-date — COMPASS writes them as + # `static_layers_.h5`. Strip the trailing date from the name + # before adding the prefix. + burst_no_date = outfile.stem.rsplit("_", 1)[0] + outfile = outfile.with_name(f"static_layers_{burst_no_date}.h5") return cfg, outfile, burst_id_date diff --git a/src/sweets/_geometry.py b/src/sweets/_geometry.py index 0f2b9c1..55e0777 100644 --- a/src/sweets/_geometry.py +++ b/src/sweets/_geometry.py @@ -8,10 +8,9 @@ from dolphin._types import Bbox from opera_utils import group_by_burst -from ._log import get_log -from ._types import Filename +from loguru import logger -logger = get_log(__name__) +from ._types import Filename def stitch_geometry( @@ -59,20 +58,28 @@ def stitch_geometry( # Convert row/col looks to strides for the right shape strides = {"x": looks[1], "y": looks[0]} stitched_geom_files = [] - # local_incidence_angle needed by anyone? - datasets = ["los_east", "los_north", "layover_shadow_mask"] + # local_incidence_angle is now stitched too — needed by the tropo + # correction step (apply_tropo wants per-pixel incidence in degrees). + datasets = [ + "los_east", + "los_north", + "local_incidence_angle", + "layover_shadow_mask", + ] # Descriptions from: # https://github.com/opera-adt/Static_Layers_CSLC-S1_Specs/blob/main/XML/static_layers_cslc-s1.xml descriptions = [ "East component of LOS unit vector from target to sensor", "North component of LOS unit vector from target to sensor", + "Local incidence angle in degrees", ( "Layover shadow mask. 0=no layover, no shadow; 1=shadow; 2=layover;" " 3=shadow and layover." ), ] - # layover_shadow_mask is Int8 with 127 meaning nodata - nodatas = [0, 0, 127] + # layover_shadow_mask is Int8 with 127 meaning nodata; the float layers + # use 0 as nodata (matches the pre-existing convention). + nodatas = [0, 0, 0, 127] for ds_name, nodata, desc in zip(datasets, nodatas, descriptions): outfile = geom_dir / f"{ds_name}.tif" logger.info(f"Creating {outfile}") diff --git a/src/sweets/_log.py b/src/sweets/_log.py index 387c00d..efe0299 100644 --- a/src/sweets/_log.py +++ b/src/sweets/_log.py @@ -1,86 +1,23 @@ -"""Exports a get_log function which sets up easy logging. +"""Logging helpers for sweets. -Uses the standard python logging utilities + Rich formatting. +Logging is handled by `loguru`. Modules should import the logger directly:: -Usage: - - from ._log import get_log - logger = get_log(__name__) + from loguru import logger logger.info("Something happened") - logger.warning("Something concerning happened") - logger.error("Something bad happened") - logger.critical("Something just awful happened") - logger.debug("Extra printing we often don't need to see.") - # Custom output for this module: logger.success("Something great happened: highlight this success") + +This module only provides the `log_runtime` decorator for timing functions; +loguru's default stderr handler is used as-is. """ -import logging import time from collections.abc import Callable from functools import wraps -from rich.console import Console -from rich.logging import RichHandler - -__all__ = ["get_log", "log_runtime", "console"] - -console = Console() - - -def get_log( - name: str = "sweets._log", - debug: bool = False, -) -> logging.Logger: - """Create a nice log format for use across multiple files. - - Default logging level is INFO - - Parameters - ---------- - debug : bool, optional - If true, sets logging level to DEBUG (Default value = False) - name : str, optional - The name the logger will use when printing statements - (Default value = "sweets._log") - filename : Filename, optional - If provided, will log to this file in addition to stderr. - - Returns - ------- - logging.Logger - """ - logger = logging.getLogger(name) - return format_log(logger, debug=debug) - - -def format_log(logger: logging.Logger, debug: bool = False) -> logging.Logger: - """Make the logging output pretty and colored with times. - - Parameters - ---------- - logger : logging.Logger - The logger to format - debug : bool (Default value = False) - If true, sets logging level to DEBUG - filename : Filename, optional - If provided, will log to this file in addition to stderr. - - Returns - ------- - logging.Logger - """ - log_level = logging.DEBUG if debug else logging.INFO - - if not logger.handlers: - logger.addHandler(RichHandler(rich_tracebacks=True, level=log_level)) - logger.setLevel(log_level) - - if debug: - logger.setLevel(debug) +from loguru import logger - return logger +__all__ = ["log_runtime"] def log_runtime(f: Callable) -> Callable: @@ -92,23 +29,17 @@ def log_runtime(f: Callable) -> Callable: def test_func(): return 2 + 4 """ - logger = get_log(__name__) @wraps(f) def wrapper(*args, **kwargs): t1 = time.time() - result = f(*args, **kwargs) - - t2 = time.time() - elapsed_seconds = t2 - t1 + elapsed_seconds = time.time() - t1 elapsed_minutes = elapsed_seconds / 60.0 - time_string = ( + logger.info( f"Total elapsed time for {f.__module__}.{f.__name__} : " f"{elapsed_minutes:.2f} minutes ({elapsed_seconds:.2f} seconds)" ) - - logger.info(time_string) return result return wrapper diff --git a/src/sweets/_missing_data.py b/src/sweets/_missing_data.py deleted file mode 100644 index 11e667b..0000000 --- a/src/sweets/_missing_data.py +++ /dev/null @@ -1,306 +0,0 @@ -from __future__ import annotations - -import os -from concurrent.futures import ThreadPoolExecutor -from dataclasses import dataclass -from functools import reduce -from math import nan -from pathlib import Path -from typing import Iterable, Optional, Sequence, Union - -import geopandas as gpd -import h5py -import matplotlib.pyplot as plt -import numpy as np -import pandas as pd -from dolphin._types import Filename -from matplotlib.colors import BoundaryNorm, ListedColormap -from osgeo import gdal -from shapely import geometry, intersection_all, union_all, wkt -from tqdm.contrib.concurrent import thread_map - -from sweets._log import get_log - -logger = get_log(__name__) - - -def get_geodataframe( - gslc_files: Iterable[Filename], - max_workers: int = 5, - one_per_burst: bool = True, - polygons: Optional[Sequence[geometry.Polygon]] = None, -) -> gpd.GeoDataFrame: - """Get a GeoDataFrame of the CSLC footprints. - - Parameters - ---------- - gslc_files : list[Filename] - List of CSLC files. - max_workers : int - Number of threads to use. - one_per_burst : bool, default=True - If True, only keep one footprint per burst ID. - polygons : Sequence[shapely.geometry.Polygon], optional - If provided, skips computing them from the CSLCs. - Otherwise, will read them in with `get_cslc_polygon`. - """ - gslc_files = list(gslc_files) # make sure generator doesn't deplete after first run - if not polygons: - polys: list[geometry.Polygon] = [] - if one_per_burst: - from opera_utils import group_by_burst - - burst_to_file_list = group_by_burst(gslc_files) - slc_files = [file_list[0] for file_list in burst_to_file_list.values()] - unique_polygons = thread_map( - get_cslc_polygon, slc_files, max_workers=max_workers - ) - assert len(unique_polygons) == len(burst_to_file_list) - # Repeat the polys for each burst - for burst_id, p in zip(burst_to_file_list, unique_polygons): - for _ in range(len(burst_to_file_list[burst_id])): - polys.append(p) - else: - polys = thread_map(get_cslc_polygon, gslc_files, max_workers=max_workers) - polygons = polys - - gdf = gpd.GeoDataFrame(geometry=polygons, crs="EPSG:4326") - gdf["count"] = 1 - gdf["filename"] = [Path(p).stem for p in gslc_files] - gdf["date"] = pd.to_datetime(gdf.filename.str.split("_").str[3]) - gdf["burst_id"] = gdf.filename.str[:15] - return gdf - - -def get_cslc_polygon( - opera_file: Filename, buffer_degrees: float = 0.0 -) -> Union[geometry.Polygon, None]: - """Get the union of the bounding polygons of the given files. - - Parameters - ---------- - opera_file : list[Filename] - list of COMPASS SLC filenames. - buffer_degrees : float, optional - Buffer the polygons by this many degrees, by default 0.0 - """ - dset_name = "/identification/bounding_polygon" - with h5py.File(opera_file) as hf: - if dset_name not in hf: - logger.debug(f"Could not find {dset_name} in {opera_file}") - return None - wkt_str = hf[dset_name][()].decode("utf-8") - return wkt.loads(wkt_str).buffer(buffer_degrees) - - -def get_common_dates( - *, - gslc_files: Optional[Sequence[Filename]] = None, - gdf=None, - max_workers: int = 5, - one_per_burst: bool = True, -) -> list[str]: - """Get the date common to all GSLCs.""" - if gdf is None: - if gslc_files is None: - raise ValueError("Need `gdf` or `gslc_files`") - gdf = get_geodataframe( - gslc_files, max_workers=max_workers, one_per_burst=one_per_burst - ) - - grouped_by_burst = _get_per_burst_df(gdf) - common_dates = list( - reduce( - lambda x, y: x.intersection(set(y)), # type: ignore - grouped_by_burst.date[1:], - set(grouped_by_burst.date[0]), - ) - ) - return pd.Series(common_dates).dt.strftime("%Y%m%d").tolist() - - -def _filter_gslcs_by_common_dates(gslc_files: list[Filename]) -> list[Path]: - common_datestrs = get_common_dates(gslc_files=gslc_files) - return [ - Path(p) for p in gslc_files if any(d in Path(p).stem for d in common_datestrs) - ] - - -def _get_per_burst_df( - gdf: gpd.GeoDataFrame, how: str = "intersection" -) -> gpd.GeoDataFrame: - func = union_all if how == "union" else intersection_all - grouped = gpd.GeoDataFrame( - gdf.groupby("burst_id").agg({"count": "sum", "date": list, "geometry": func}) - ).reset_index() - grouped = grouped.set_crs(epsg=4326) - return grouped - - -def plot_count_per_burst( - *, - gdf: Optional[gpd.GeoDataFrame] = None, - gslc_files: Optional[Sequence[Filename]] = None, - one_per_burst: bool = True, - ax: Optional[plt.Axes] = None, -) -> None: - """Plot the number of GSLC files found per burst.""" - if gdf is None: - if gslc_files is None: - raise ValueError("Need `gdf` or `gslc_files`") - gdf = get_geodataframe(gslc_files, one_per_burst=one_per_burst) - gdf_grouped = _get_per_burst_df(gdf) - - if ax is None: - fig, ax = plt.subplots(ncols=1) - - # Make a unique colormap for the specific count values - unique_counts = np.unique(gdf_grouped["count"]) - - cmap = ListedColormap(plt.cm.tab10(np.linspace(0, 1, len(unique_counts)))) - boundaries = np.concatenate([[unique_counts[0] - 1], unique_counts + 1]) - norm = BoundaryNorm(boundaries, cmap.N) - - kwds = dict( - column="count", - legend=False, - cmap=cmap, - norm=norm, - linewidth=0.8, - edgecolor="0.8", - ) - - gdf_grouped.plot(ax=ax, **kwds) - cbar = plt.colorbar( - plt.cm.ScalarMappable(norm=norm, cmap=cmap), ax=ax, orientation="horizontal" - ) - cbar.set_label("Count") - cbar_ticks = [ - (boundaries[i] + boundaries[i + 1]) / 2 for i in range(len(boundaries) - 1) - ] - cbar.set_ticks(cbar_ticks) - cbar.set_ticklabels(unique_counts) - - return gdf_grouped - - -def plot_mini_timeseries( - ts_file: Filename, - sub: int = 20, - ncols: int = 10, - vm: float = 5, - save_to: str = "mini_timeseries", -): - """Plot a mintpy timeseries file heavily subsampled for a quick check.""" - with h5py.File(ts_file, "a") as hf: - dates = np.array(hf["date"]).astype(str) - if save_to in hf: - ts = hf[save_to][()] - else: - ts = hf["timeseries"][:, ::sub, ::sub] - if save_to: - hf[save_to] = ts - - ntotal = len(ts) - nrows = ntotal // ncols if (ntotal % ncols == 0) else ntotal // ncols + 1 - figsize = (ncols * 0.6, nrows * 0.6) - - fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=figsize) - - for i in range(nrows): - for j in range(ncols): - idx = j * ncols + i - if idx >= len(ts): - break - ax = axes[i, j] - axim = ax.imshow(100 * ts[idx], vmax=vm, vmin=-vm) - fig.colorbar(axim, ax=ax) - ax.set_title(str(idx) + ":" + str(dates[idx])) - - return fig, axes - - -@dataclass -class Stats: - """Class holding the raster stats returned by `gdalinfo`.""" - - min: float - max: float - mean: float - stddev: float - pct_valid: float - - -def get_raster_stats(filename: Filename, band: int = 1) -> Stats: - """Get the (Min, Max, Mean, StdDev, pct_valid) of the 1-band file.""" - try: - ii = gdal.Info(os.fspath(filename), stats=True, format="json") - except RuntimeError as e: - if "No such file or directory" in e.args[0]: - raise - elif "no valid pixels found" in e.args[0]: - return Stats(nan, nan, nan, nan, 0.0) - - s = ii["bands"][band - 1]["metadata"][""] - return Stats( - float(s["STATISTICS_MAXIMUM"]), - float(s["STATISTICS_MINIMUM"]), - float(s["STATISTICS_MEAN"]), - float(s["STATISTICS_STDDEV"]), - float(s["STATISTICS_VALID_PERCENT"]), - ) - - -def is_valid(filename: Filename) -> tuple[bool, str]: - """Check if GDAL can open the file and if there are any valid pixels. - - Parameters - ---------- - filename : Filename - Path to file. - - Returns - ------- - bool: - False if bad file, or no valid pixels. - str: - Reason behind a `False` value given by GDAL. - """ - try: - get_raster_stats(filename) - except RuntimeError as e: - return False, str(e) - return True, "" - - -def get_bad_files( - path: Filename, - ext: str = ".int", - pct_valid_threshold: float = 60, - max_jobs: int = 20, -) -> tuple[list[Path], list[Stats]]: - """Check all files in `path` for (partially) invalid rasters.""" - files = sorted(Path(path).glob(f"*{ext}")) - logger.info(f"Searching {len(files)} in {path} with extension {ext}") - - with ThreadPoolExecutor(max_jobs) as exc: - stats = list(exc.map(get_raster_stats, files)) - - bad_files = [ - (f, s) for (f, s) in zip(files, stats) if s.pct_valid < pct_valid_threshold - ] - if len(bad_files) == 0: - return [], [] - out_files, out_stats = list(zip(*bad_files)) - return out_files, out_stats # type: ignore - - -def remove_invalid_ifgs(bad_files: list[Filename]): - """Remove invalid ifgs and their unwrapped counterparts.""" - for ff in bad_files: - u = str(ff).replace("stitched", "unwrapped").replace(".int", ".unw") - try: - Path(u).unlink() - except FileNotFoundError: - continue - Path(ff).unlink() diff --git a/src/sweets/_netrc.py b/src/sweets/_netrc.py index 562a7df..e6248af 100644 --- a/src/sweets/_netrc.py +++ b/src/sweets/_netrc.py @@ -1,10 +1,8 @@ +import getpass import netrc import os from pathlib import Path -from rich.panel import Panel - -from ._log import console from ._types import Filename NASA_HOST = "urs.earthdata.nasa.gov" @@ -17,12 +15,9 @@ def setup_nasa_netrc(netrc_file: Filename = "~/.netrc"): n = netrc.netrc(netrc_file) has_correct_permission = _file_is_0600(netrc_file) if not has_correct_permission: - # User has a netrc file, but it's not set up correctly - console.print( - "Your ~/.netrc file does not have the correct" - " permissions.\n[underline]Changing permissions to 0600" - " (read/write for user only).", - style="bold", + print( + "Your ~/.netrc file does not have the correct permissions.\n" + "Changing permissions to 0600 (read/write for user only)." ) os.chmod(netrc_file, 0o600) # Check account exists, as well is having username and password @@ -35,14 +30,14 @@ def setup_nasa_netrc(netrc_file: Filename = "~/.netrc"): return except FileNotFoundError: # User doesn't have a netrc file, make one - console.print("No ~/.netrc file found, creating one.", style="bold") + print("No ~/.netrc file found, creating one.") Path(netrc_file).write_text("") n = netrc.netrc(netrc_file) username, password = _get_username_pass() # Add NASA account to netrc file n.hosts[NASA_HOST] = (username, "", password) - console.print(f"Saving credentials to {netrc_file} (machine={NASA_HOST}).") + print(f"Saving credentials to {netrc_file} (machine={NASA_HOST}).") with open(netrc_file, "w") as f: f.write(str(n)) # Set permissions to 0600 (read/write for user only) @@ -57,14 +52,8 @@ def _file_is_0600(filename: Filename): def _get_username_pass(): """If netrc is not set up, get username/password via command line input.""" - console.print( - Panel("Please enter NASA Earthdata credentials to download ASF-hosted data.") - ) - console.print( - "See the https://urs.earthdata.nasa.gov/users/new for signup info", - style="link https://urs.earthdata.nasa.gov/users/new", - ) - - username = console.input("Username: ") - password = console.input("Password (will not be displayed): ", password=True) + print("Please enter NASA Earthdata credentials to download ASF-hosted data.") + print("See https://urs.earthdata.nasa.gov/users/new for signup info") + username = input("Username: ") + password = getpass.getpass("Password (will not be displayed): ") return username, password diff --git a/src/sweets/_orbit.py b/src/sweets/_orbit.py index e707046..5d3079f 100644 --- a/src/sweets/_orbit.py +++ b/src/sweets/_orbit.py @@ -2,10 +2,7 @@ from typing import List from eof import download - -from ._log import get_log - -logger = get_log(__name__) +from loguru import logger def download_orbits(search_path: Path, save_dir: Path) -> List[Path]: diff --git a/src/sweets/_report.py b/src/sweets/_report.py new file mode 100644 index 0000000..bfea108 --- /dev/null +++ b/src/sweets/_report.py @@ -0,0 +1,582 @@ +"""Single-file HTML report generator for a finished sweets run. + +Walks a work directory's ``dolphin/`` output tree and renders a +self-contained HTML document with: + +- A summary table (AOI, date range, source, track/frame, wall time) +- The velocity raster +- The temporal-coherence raster (dolphin's quality map) +- The longest-baseline cumulative-displacement raster +- A histogram of per-pair coherence means +- A file inventory of everything in ``dolphin/`` + +All raster images are rendered to PNG with matplotlib and embedded as +base64 data URIs so the resulting HTML is fully portable — no external +image files, no JS, no network fetches at view time. +""" + +from __future__ import annotations + +import base64 +import html +import io +import re +from dataclasses import dataclass +from datetime import datetime +from pathlib import Path +from typing import TYPE_CHECKING, Any, Optional + +from loguru import logger + +if TYPE_CHECKING: + from sweets.core import Workflow + +__all__ = ["build_report"] + + +# --------------------------------------------------------------------------- +# Section dataclass + top-level entry point +# --------------------------------------------------------------------------- + + +@dataclass +class _Section: + title: str + body_html: str + + +def build_report( + config_file: Path, + output: Optional[Path] = None, +) -> Path: + """Render an HTML report for a completed sweets run. + + Parameters + ---------- + config_file + Path to the ``sweets_config.yaml`` used for the run. A work + directory containing a ``sweets_config.yaml`` is also accepted + and resolved to the yaml inside it. + output + Where to write the report. Defaults to + ``/sweets_report.html``. + + Returns + ------- + Path + The report path. + """ + from sweets.core import Workflow + + config_file = Path(config_file).resolve() + if config_file.is_dir(): + config_file = config_file / "sweets_config.yaml" + assert config_file.is_file(), f"Config file not found: {config_file}" + + workflow = Workflow.from_yaml(config_file) + work_dir = Path(workflow.work_dir).resolve() + dolphin_dir = work_dir / "dolphin" + assert dolphin_dir.exists(), f"No dolphin/ under {work_dir}" + + if output is None: + output = work_dir / "sweets_report.html" + + sections: list[_Section] = [] + sections.append(_build_header(workflow, config_file)) + sections.append(_build_raster_section(dolphin_dir, "velocity")) + sections.append(_build_raster_section(dolphin_dir, "temporal_coherence")) + sections.append(_build_raster_section(dolphin_dir, "longest_displacement")) + sections.append(_build_coherence_histogram(dolphin_dir)) + sections.append(_build_inventory(dolphin_dir)) + + title = f"sweets report — {work_dir.name}" + output.write_text(_render_html(title, sections)) + logger.info(f"Wrote sweets report to {output}") + return output + + +# --------------------------------------------------------------------------- +# Section builders +# --------------------------------------------------------------------------- + + +def _build_header(workflow: "Workflow", config_path: Path) -> _Section: + rows: list[tuple[str, str]] = [ + ("Work directory", str(workflow.work_dir)), + ("Config file", str(config_path)), + ("Generated", datetime.now().isoformat(timespec="seconds")), + ] + + if workflow.bbox: + rows.append(("AOI (bbox)", _fmt_bbox(workflow.bbox))) + elif workflow.wkt: + rows.append(("AOI (WKT)", _truncate(str(workflow.wkt), 90))) + + search = workflow.search + rows.append(("Source", search.kind)) + # `model_dump(exclude_none=True)` gives us a uniform view across the + # discriminated-union variants so we don't have to hard-code which + # optional fields each Search subclass carries. + search_dict = search.model_dump(exclude_none=True) + for k in ("track", "frame", "frequency", "polarizations", "swaths", "burst_ids"): + v = search_dict.get(k) + if v is not None: + rows.append((f"search.{k}", str(v))) + + rows.append(("Date range", f"{search.start.date()} to {search.end.date()}")) + + wall = _wall_time(workflow.work_dir) + if wall is not None: + rows.append(("Wall time (est.)", f"{wall}")) + + dolphin_version = _dolphin_version() + if dolphin_version: + rows.append(("dolphin version", dolphin_version)) + + table = "\n" + for k, v in rows: + table += f" " f"\n" + table += "
{html.escape(k)}{html.escape(v)}
" + return _Section("Summary", table) + + +def _build_raster_section(dolphin_dir: Path, kind: str) -> _Section: + """Build a section for one of: velocity, temporal_coherence, longest_displacement.""" + ts_dir = dolphin_dir / "timeseries" + ifg_dir = dolphin_dir / "interferograms" + + path: Optional[Path] = None + title = kind + cbar_label = "" + cmap = "RdBu_r" + diverging = True + clip_nodata_zero = False + fixed_vlim: Optional[tuple[float, float]] = None + + if kind == "velocity": + path = ts_dir / "velocity.tif" + title = "Velocity" + cbar_label = "m / yr" + clip_nodata_zero = True + elif kind == "temporal_coherence": + # There's one per compressed-SLC ministack; take the first. + tc_paths = sorted(ifg_dir.glob("temporal_coherence_*.tif")) + path = tc_paths[0] if tc_paths else None + title = "Temporal coherence" + cbar_label = "coherence" + cmap = "viridis" + diverging = False + # Coherence is bounded to [0, 1]; pin the color range so a + # mostly-high-coherence AOI doesn't collapse the colorbar. + fixed_vlim = (0.0, 1.0) + elif kind == "longest_displacement": + longest = _longest_timeseries_pair(ts_dir) + if longest: + path, d1, d2 = longest + title = f"Cumulative displacement: {d1.strftime('%Y-%m-%d')} → {d2.strftime('%Y-%m-%d')}" + cbar_label = "m" + + if path is None or not path.exists(): + return _Section( + title.replace("_", " ").title(), + _note(f"No raster found for `{kind}`; skipping."), + ) + + try: + data, bounds, nodata, unit = _read_raster(path, default_unit=cbar_label) + except Exception as e: + return _Section(title, _note(f"Could not read {path.name}: {e}")) + + import numpy as np + + if clip_nodata_zero and nodata is not None and nodata == 0: + data = np.where(data == 0, np.nan, data) + + png = _render_raster_png( + data, + bounds=bounds, + cmap=cmap, + diverging=diverging, + cbar_label=unit, + title=path.name, + fixed_vlim=fixed_vlim, + ) + stats = _summary_stats(data) + body = ( + _img(png, alt=title) + + "

" + + f"{html.escape(path.name)}" + + f" — min {stats['min']:.4f}, max {stats['max']:.4f}," + + f" mean {stats['mean']:.4f}, std {stats['std']:.4f} ({html.escape(unit)})," + + f" {stats['n_valid']} valid pixels" + + "

" + ) + return _Section(title, body) + + +def _build_coherence_histogram(dolphin_dir: Path) -> _Section: + ifg_dir = dolphin_dir / "interferograms" + cor_paths = sorted(ifg_dir.glob("*.int.cor.tif")) + if not cor_paths: + return _Section( + "Per-pair coherence", + _note("No per-pair coherence rasters found; skipping."), + ) + + try: + import matplotlib.pyplot as plt + import numpy as np + except ImportError: + return _Section( + "Per-pair coherence", + _note("matplotlib not available; cannot render."), + ) + + means: list[tuple[str, float]] = [] + for p in cor_paths: + try: + arr, _, _, _ = _read_raster(p) + except Exception as e: + logger.warning(f"Could not read {p.name}: {e}; skipping") + continue + vals = np.asarray(arr).ravel() + vals = vals[np.isfinite(vals) & (vals > 0)] + if vals.size == 0: + continue + label = p.name.replace(".int.cor.tif", "") + means.append((label, float(vals.mean()))) + + if not means: + return _Section( + "Per-pair coherence", + _note("All coherence rasters were empty or masked."), + ) + + labels = [m[0] for m in means] + values = [m[1] for m in means] + + fig, ax = plt.subplots(figsize=(7, max(2.5, 0.35 * len(labels) + 1.5))) + y = np.arange(len(labels)) + ax.barh(y, values, color="#4c72b0") + ax.set_yticks(y) + ax.set_yticklabels(labels, fontsize=8) + ax.set_xlim(0, 1) + ax.set_xlabel("mean coherence") + ax.set_title(f"{len(labels)} interferogram pairs") + ax.axvline(0.3, color="#999", linewidth=0.8, linestyle="--", label="0.3") + ax.axvline(0.5, color="#666", linewidth=0.8, linestyle="--", label="0.5") + ax.legend(loc="lower right", fontsize=8) + fig.tight_layout() + png = _fig_to_png(fig) + plt.close(fig) + + table = "\n\n" + for label, v in means: + table += f"\n" + table += "
pairmean coherence
{html.escape(label)}{v:.3f}
" + return _Section("Per-pair coherence", _img(png, alt="coherence bar chart") + table) + + +def _build_inventory(dolphin_dir: Path) -> _Section: + interesting_globs = [ + ("dolphin/timeseries/", "*.tif"), + ("dolphin/interferograms/", "*.tif"), + ("dolphin/unwrapped/", "*.tif"), + ] + rows = [] + for rel_dir, pattern in interesting_globs: + sub = dolphin_dir / Path(rel_dir).name + if not sub.exists(): + continue + for p in sorted(sub.glob(pattern)): + rows.append((p.relative_to(dolphin_dir.parent), p.stat().st_size)) + + if not rows: + return _Section( + "Output inventory", + _note("No raster outputs found under dolphin/."), + ) + + # Group by parent dir for readability + out = "\n" + out += "\n" + current_parent: Optional[str] = None + for rel, size in rows: + parent = str(rel.parent) + if parent != current_parent: + out += ( + f"\n" + ) + current_parent = parent + out += ( + f"" + f"\n" + ) + out += "
filesize
{html.escape(parent)}/" + "
  {html.escape(rel.name)}{_fmt_bytes(size)}
" + return _Section(f"Output inventory ({len(rows)} files)", out) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +_PAIR_RE = re.compile(r"^(\d{8})_(\d{8})\.tif$") + + +def _read_raster( + path: Path, *, default_unit: str = "" +) -> tuple[Any, tuple[float, float, float, float], Optional[float], str]: + """Read a single-band raster via GDAL and return (data, bounds, nodata, unit). + + Uses GDAL directly because rasterio's ``_band_dtype`` map doesn't + handle ``GDT_Float16`` (code 15), which dolphin uses for a few + outputs (notably the temporal coherence raster). + """ + import numpy as np + from osgeo import gdal + + gdal.UseExceptions() + ds = gdal.Open(str(path)) + if ds is None: + msg = f"gdal.Open returned None for {path}" + raise RuntimeError(msg) + band = ds.GetRasterBand(1) + arr = band.ReadAsArray() + if arr is None: + msg = f"ReadAsArray returned None for {path}" + raise RuntimeError(msg) + data = np.asarray(arr, dtype=np.float64) + # Mask the file's nodata to NaN (if declared) + nodata = band.GetNoDataValue() + if nodata is not None and np.isfinite(nodata): + data[data == nodata] = np.nan + gt = ds.GetGeoTransform() + xs = ds.RasterXSize + ys = ds.RasterYSize + # Corner convention: (x_origin, dx, 0, y_origin, 0, dy) with dy typically negative. + left = gt[0] + top = gt[3] + right = left + gt[1] * xs + bottom = top + gt[5] * ys + if bottom > top: + bottom, top = top, bottom + unit = (band.GetUnitType() or default_unit or "").strip() + ds = None + return data, (left, bottom, right, top), nodata, unit + + +def _longest_timeseries_pair(ts_dir: Path) -> Optional[tuple[Path, datetime, datetime]]: + """Return the `YYYYMMDD_YYYYMMDD.tif` timeseries step with the widest baseline.""" + best: Optional[tuple[Path, datetime, datetime]] = None + best_span = -1 + for p in ts_dir.glob("*.tif"): + m = _PAIR_RE.match(p.name) + if not m: + continue + d1 = datetime.strptime(m.group(1), "%Y%m%d") + d2 = datetime.strptime(m.group(2), "%Y%m%d") + span = (d2 - d1).days + if span > best_span: + best_span = span + best = (p, d1, d2) + return best + + +def _fmt_bbox(bbox: Any) -> str: + if isinstance(bbox, (list, tuple)) and len(bbox) == 4: + return f"({bbox[0]}, {bbox[1]}, {bbox[2]}, {bbox[3]})" + return str(bbox) + + +def _truncate(s: str, n: int) -> str: + return s if len(s) <= n else s[: n - 3] + "..." + + +def _wall_time(work_dir: Path) -> Optional[str]: + """Estimate wall time from log mtimes in work_dir / dolphin / .""" + dolphin_dir = work_dir / "dolphin" + candidates = list(dolphin_dir.rglob("*.tif")) + if not candidates: + return None + mtimes = [p.stat().st_mtime for p in candidates] + span = max(mtimes) - min(mtimes) + if span < 60: + return f"{span:.0f} s" + if span < 3600: + return f"{span / 60:.1f} min" + return f"{span / 3600:.1f} h" + + +def _dolphin_version() -> Optional[str]: + try: + import dolphin + + return getattr(dolphin, "__version__", None) + except Exception: + return None + + +def _summary_stats(arr: Any) -> dict[str, float]: + import numpy as np + + vals = np.asarray(arr).ravel() + vals = vals[np.isfinite(vals)] + if vals.size == 0: + return { + "min": float("nan"), + "max": float("nan"), + "mean": float("nan"), + "std": float("nan"), + "n_valid": 0, + } + return { + "min": float(vals.min()), + "max": float(vals.max()), + "mean": float(vals.mean()), + "std": float(vals.std()), + "n_valid": int(vals.size), + } + + +def _render_raster_png( + data: Any, + bounds: tuple[float, float, float, float], + *, + cmap: str, + diverging: bool, + cbar_label: str, + title: str, + fixed_vlim: Optional[tuple[float, float]] = None, +) -> str: + import matplotlib.pyplot as plt + import numpy as np + + vmin: Optional[float] + vmax: Optional[float] + if fixed_vlim is not None: + vmin, vmax = fixed_vlim + else: + finite = np.asarray(data).ravel() + finite = finite[np.isfinite(finite)] + if finite.size == 0: + vmin = vmax = None + elif diverging: + lim = float(np.nanpercentile(np.abs(finite), 98)) + vmin, vmax = -lim, lim + else: + vmin = float(np.nanpercentile(finite, 2)) + vmax = float(np.nanpercentile(finite, 98)) + + fig, ax = plt.subplots(figsize=(7, 5.5), constrained_layout=True) + im = ax.imshow( + data, + extent=(bounds[0], bounds[2], bounds[1], bounds[3]), + vmin=vmin, + vmax=vmax, + cmap=cmap, + aspect="equal", + ) + ax.set_xlabel("easting (m)") + ax.set_ylabel("northing (m)") + ax.set_title(title, fontsize=10) + fig.colorbar(im, ax=ax, shrink=0.85, label=cbar_label) + png = _fig_to_png(fig) + plt.close(fig) + return png + + +def _fig_to_png(fig) -> str: # noqa: ANN001 + buf = io.BytesIO() + fig.savefig(buf, format="png", dpi=120, bbox_inches="tight") + return base64.b64encode(buf.getvalue()).decode("ascii") + + +def _img(png_b64: str, alt: str = "") -> str: + return f'{html.escape(alt)}' + + +def _note(text: str) -> str: + return f"

{html.escape(text)}

" + + +def _fmt_bytes(size: int) -> str: + amount = float(size) + for unit in ("B", "KiB", "MiB", "GiB"): + if amount < 1024: + return f"{amount:.1f} {unit}" + amount /= 1024 + return f"{amount:.1f} TiB" + + +# --------------------------------------------------------------------------- +# HTML render +# --------------------------------------------------------------------------- + +_STYLE = """ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", + Helvetica, Arial, sans-serif; + max-width: 900px; + margin: 2rem auto; + padding: 0 1rem; + color: #222; + line-height: 1.45; +} +h1 { font-size: 1.6rem; margin-bottom: 0.2rem; } +h2 { + font-size: 1.2rem; + border-bottom: 1px solid #ccc; + padding-bottom: 0.3rem; + margin-top: 2rem; +} +table { border-collapse: collapse; margin: 0.5rem 0; } +table.kv th { text-align: left; padding: 0.2rem 0.8rem 0.2rem 0; color: #555; } +table.kv td { font-family: monospace; padding: 0.2rem 0; } +table.pairs, table.inv { + font-size: 0.85rem; + font-family: monospace; + margin-top: 0.5rem; +} +table.pairs th, table.pairs td, +table.inv th, table.inv td { + padding: 0.15rem 0.6rem 0.15rem 0; +} +table.pairs th, table.inv th { color: #555; border-bottom: 1px solid #ccc; } +tr.parent td { color: #666; padding-top: 0.5rem; } +img { max-width: 100%; height: auto; } +p.caption { font-size: 0.85rem; color: #555; margin-top: 0.2rem; } +p.note { color: #a33; font-style: italic; } +footer { + margin-top: 3rem; + color: #888; + font-size: 0.8rem; + border-top: 1px solid #eee; + padding-top: 0.6rem; +} +""" + + +def _render_html(title: str, sections: list[_Section]) -> str: + esc_title = html.escape(title) + parts: list[str] = [ + "", + '', + "", + '', + f"{esc_title}", + f"", + "", + "", + f"

{esc_title}

", + ] + for sec in sections: + parts.append(f"

{html.escape(sec.title)}

") + parts.append(sec.body_html) + parts.append( + "" + ) + parts.append("") + return "\n".join(parts) diff --git a/src/sweets/_tropo.py b/src/sweets/_tropo.py new file mode 100644 index 0000000..5d5529a --- /dev/null +++ b/src/sweets/_tropo.py @@ -0,0 +1,469 @@ +"""Tropospheric correction step using OPERA L4 TROPO-ZENITH products. + +Wraps :func:`opera_utils.tropo.create_tropo_corrections_for_stack` (the +high-level workflow on `scottstanie/opera-utils@develop-scott`) and applies +the resulting per-date LOS-projected delays to dolphin's unwrapped phase +outputs. + +The flow is: + +1. Register an :class:`OperaCslcReader` so opera_utils' SLCReader registry + knows how to parse OPERA CSLC HDF5s for ``datetime`` / ``bounds``. +2. Call ``create_tropo_corrections_for_stack`` with the workflow's CSLC + stack, the (already-stitched) DEM and the (already-stitched) local + incidence angle raster, producing one ``tropo_correction_
.tif`` per + acquisition referenced to the first date. +3. For each unwrapped interferogram pair from dolphin, look up the two + tropo files, compute the differential, convert metres of LOS delay to + radians of phase via ``4 * pi / wavelength``, and subtract from the + unwrapped phase. Write the corrected raster alongside the originals. + +The OPERA CSLC reader is registered eagerly when this module is imported, +so any sweets code path that triggers tropo gets the backend automatically. +""" + +from __future__ import annotations + +import re +import warnings +from datetime import datetime +from pathlib import Path +from typing import TYPE_CHECKING, Literal, Optional + +import h5py +import numpy as np +import rasterio +import rioxarray as rxr +from pydantic import BaseModel, Field +from shapely import wkt as shp_wkt + +from loguru import logger + +from ._log import log_runtime + +if TYPE_CHECKING: + pass + +# Sentinel-1 C-band carrier wavelength used by OPERA CSLCs and burst2safe +# SAFEs alike. +S1_WAVELENGTH_M = 0.05546576 + +# OPERA tropo correction filenames look like +# `tropo_correction_20210606T005125.tif`. The reference (first) date is +# saved as `reference_
.tif`. +_TROPO_FILENAME_RE = re.compile(r"^(?:reference|tropo_correction)_(\d{8}T\d{6})\.tif$") + + +class TropoOptions(BaseModel): + """Sweets-side configuration for the optional tropo correction step.""" + + enabled: bool = Field( + default=False, + description=( + "Whether to run the OPERA L4 TROPO-ZENITH correction after" + " dolphin produces unwrapped interferograms." + ), + ) + height_max: float = Field( + default=10000.0, + description="Max DEM height (m) included when cropping the tropo cube.", + ) + margin_deg: float = Field( + default=0.3, + description="Padding (degrees) added around the AOI when cropping.", + ) + interp_method: str = Field( + default="linear", + description="Interpolation method passed through to apply_tropo.", + ) + num_workers: int = Field( + default=2, + ge=1, + description="Parallel workers for crop_tropo / apply_tropo.", + ) + + +# ---------------------------------------------------------------------------- +# OPERA CSLC SLCReader implementation +# ---------------------------------------------------------------------------- + + +class OperaCslcReader: + """SLCReader implementation for OPERA CSLC HDF5 files. + + The CSLC HDF5 layout (as written by COMPASS / OPERA) puts identification + metadata under `/identification/` — `zero_doppler_start_time`, + `bounding_polygon` and the per-burst incidence angles live in the static + layers file rather than the per-date CSLC, but for the tropo workflow we + only need the datetime and bounds, both of which are in `/identification`. + """ + + @staticmethod + def _identification(slc_file: Path) -> dict[str, object]: + with h5py.File(slc_file, "r") as hf: + ident = hf["/identification"] + return {k: ident[k][()] for k in ident.keys()} + + def read_datetime(self, slc_file: Path) -> datetime: + ident = self._identification(slc_file) + raw = ident["zero_doppler_start_time"] + if isinstance(raw, (bytes, bytearray)): + raw = raw.decode("utf-8") + # OPERA's HDF5 attribute is `YYYY-MM-DD HH:MM:SS.ffffff` + return datetime.fromisoformat(str(raw).strip()) + + def read_bounds(self, slc_file: Path) -> tuple[float, float, float, float]: + ident = self._identification(slc_file) + raw = ident["bounding_polygon"] + if isinstance(raw, (bytes, bytearray)): + raw = raw.decode("utf-8") + poly = shp_wkt.loads(str(raw)) + west, south, east, north = poly.bounds + return (west, south, east, north) + + def read_incidence_angle(self, slc_file: Path) -> float: + # The per-burst incidence is in the static_layers file, not the + # per-date CSLC. The tropo workflow always passes a separate + # `incidence_angle` raster (the stitched local_incidence_angle.tif), + # so this method is intentionally a no-op stub — extract_stack_info + # never calls it. + msg = ( + "OperaCslcReader does not provide per-file incidence angle;" + " pass `incidence_angle_path` to apply_tropo / the workflow." + ) + raise NotImplementedError(msg) + + +def _register_opera_cslc_reader() -> None: + """Idempotently register the OPERA CSLC reader with opera_utils.tropo.""" + from opera_utils.tropo._slc_stack import _sensor_registry, register_sensor + + for name in ("opera-cslc", "sentinel1"): + if name not in _sensor_registry: + register_sensor(name, OperaCslcReader()) + + +def _force_threaded_dns_resolver() -> None: + """Sidestep aiohttp's c-ares resolver, which DNS-times out on some networks. + + Both burst2safe and the OPERA tropo `crop_tropo` open HTTPS URLs via + aiohttp under the hood; aiohttp's default ``AsyncResolver`` (aiodns) + fails with ``Timeout while contacting DNS servers`` on networks where + c-ares can't reach a usable resolver. Falling back to the stdlib + threaded resolver fixes it without changing behavior elsewhere. + """ + import aiohttp.resolver + + aiohttp.resolver.DefaultResolver = aiohttp.resolver.ThreadedResolver + + +_register_opera_cslc_reader() +_force_threaded_dns_resolver() + + +# ---------------------------------------------------------------------------- +# Workflow integration +# ---------------------------------------------------------------------------- + + +@log_runtime +def create_tropo_corrections( + slc_files: list[Path], + dem_path: Path, + incidence_angle_path: Path, + output_dir: Path, + options: Optional[TropoOptions] = None, +) -> list[Path]: + """Run the OPERA tropo workflow over a stack of SLC files. + + Parameters + ---------- + slc_files + Paths to the per-date CSLC HDF5s (or COMPASS-produced GSLC HDF5s). + dem_path + DEM raster used by apply_tropo to interpolate to surface heights. + incidence_angle_path + Per-pixel incidence-angle raster (produced by stitch_geometry). + output_dir + Directory where ``tropo_correction_
.tif`` files will be written. + options + Sweets-side knobs (defaults if None). + + Returns + ------- + list[Path] + Sorted paths to the produced tropo correction GeoTIFFs. + + """ + from opera_utils.tropo import create_tropo_corrections_for_stack + + options = options or TropoOptions() + output_dir = Path(output_dir).resolve() + output_dir.mkdir(parents=True, exist_ok=True) + + return create_tropo_corrections_for_stack( + slc_files=list(slc_files), + dem_path=Path(dem_path), + output_dir=output_dir, + sensor="opera-cslc", + incidence_angle=Path(incidence_angle_path), + margin_deg=options.margin_deg, + height_max=options.height_max, + subtract_first_date=True, + num_workers=options.num_workers, + ) + + +def _parse_tropo_filename(p: Path) -> Optional[datetime]: + """Return the datetime encoded in a tropo correction filename.""" + m = _TROPO_FILENAME_RE.match(p.name) + if not m: + return None + return datetime.strptime(m.group(1), "%Y%m%dT%H%M%S") + + +def _group_tropo_files_by_date(tropo_files: list[Path]) -> dict[str, list[Path]]: + """Bucket per-burst tropo correction rasters under their YYYYMMDD. + + `opera_utils.tropo.create_tropo_corrections_for_stack` writes one + correction GeoTIFF per CSLC sensing time — interpolated from the + 6-hourly OPERA L4 TROPO-ZENITH products down to the exact time. + For an OPERA burst stack that gives ~9 files per date (one per + burst), each ~1-3 seconds apart. Dolphin collapses these back to + a single stitched raster per date pair, so on the sweets side we + average the per-burst tropo rasters into a single "per-date" + correction before applying. + """ + out: dict[str, list[Path]] = {} + for p in tropo_files: + dt = _parse_tropo_filename(p) + if dt is None: + continue + out.setdefault(dt.strftime("%Y%m%d"), []).append(p) + return out + + +def _mean_tropo_on_grid(tropo_files: list[Path], target) -> np.ndarray: # noqa: ANN001 + """Reproject a list of tropo rasters onto `target` and return the mean. + + `target` is an xarray DataArray that carries the desired grid + CRS + (usually the dolphin interferogram we're about to correct). Pixels + where any input is nodata are carried as NaN in the mean. + """ + stack: list[np.ndarray] = [] + for p in tropo_files: + da = rxr.open_rasterio(p, masked=True).squeeze(drop=True) + matched = da.rio.reproject_match(target) + stack.append(np.asarray(matched.values, dtype=np.float32)) + return np.nanmean(np.stack(stack, axis=0), axis=0) + + +def _ifg_dates(path: Path) -> Optional[tuple[str, str]]: + """Pull the (date1, date2) pair out of a `_*.tif` name.""" + m = re.match(r"(\d{8})_(\d{8})", path.name) + if not m: + return None + return m.group(1), m.group(2) + + +TargetUnits = Literal["radians", "meters"] + + +def _apply_one_pair( + target_path: Path, + tropo_by_date: dict[str, list[Path]], + output_path: Path, + scale: float, +) -> Optional[Path]: + """Subtract the per-date differential tropo from one raster. + + ``scale`` is applied to the metres-of-LOS-delay difference before + subtraction. Use ``4*pi/wavelength`` for radians-of-phase targets + (unwrapped ifgs) and ``1.0`` for metres-of-displacement targets + (dolphin timeseries). + """ + pair = _ifg_dates(target_path) + if pair is None: + logger.warning(f"Skipping {target_path.name}: no date pair in filename") + return None + d1, d2 = pair + if d1 not in tropo_by_date or d2 not in tropo_by_date: + missing = d1 if d1 not in tropo_by_date else d2 + logger.warning(f"Skipping {target_path.name}: no tropo for {missing}") + return None + + with rasterio.open(target_path) as src: + arr = src.read(1) + profile = src.profile.copy() + + target = rxr.open_rasterio(target_path, masked=True).squeeze(drop=True) + # `nanmean` warns on all-NaN slices for pixels the tropo grid doesn't + # cover; the resulting NaN is what we want, so the warning is noise. + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", "Mean of empty slice") + t1_mean = _mean_tropo_on_grid(tropo_by_date[d1], target) + t2_mean = _mean_tropo_on_grid(tropo_by_date[d2], target) + diff_m = t2_mean - t1_mean + + corrected = arr.astype(np.float32) - (scale * diff_m).astype(np.float32) + + output_path.parent.mkdir(parents=True, exist_ok=True) + profile.update(dtype="float32", count=1, compress="deflate") + with rasterio.open(output_path, "w", **profile) as dst: + dst.write(corrected, 1) + logger.info(f"Wrote {output_path.name}") + return output_path + + +@log_runtime +def apply_tropo_to_pairs( + target_files: list[Path], + tropo_files: list[Path], + output_dir: Path, + units: TargetUnits, + suffix: str = ".tropo_corrected.tif", + wavelength: float = S1_WAVELENGTH_M, +) -> list[Path]: + """Subtract differential tropo from each date-pair raster. + + For each pair (date1, date2): + + corrected = original - scale * (mean(tropo[d2]) - mean(tropo[d1])) + + where ``scale`` depends on ``units``: + + - ``radians``: ``4*pi/wavelength`` — converts metres of LOS delay + to radians of phase for unwrapped interferograms. + - ``meters``: ``1.0`` — the dolphin timeseries rasters are already in + metres of LOS displacement after the radians-to-metres conversion + driven by the config wavelength. + + ``mean(tropo[d])`` is the per-burst average of tropo correction rasters + tagged with date ``d`` (see :func:`_group_tropo_files_by_date`): an + OPERA burst stack produces ~9 correction rasters per date (one per + burst sensing time), which we average down before applying so the + result matches dolphin's per-date-pair stitched output grid. + + Parameters + ---------- + target_files + Rasters to correct. Expected to be named ``_*.tif``. + tropo_files + Paths to ``tropo_correction_
.tif`` rasters produced by + :func:`create_tropo_corrections`. + output_dir + Where corrected rasters will be written. + units + Units of ``target_files`` — either ``"radians"`` (phase) or + ``"meters"`` (displacement). + suffix + Suffix appended to ``_`` to form the output name. + wavelength + Radar carrier wavelength in metres. Defaults to S1 C-band. + + Returns + ------- + list[Path] + Paths to the written corrected rasters. + + """ + output_dir = Path(output_dir).resolve() + output_dir.mkdir(parents=True, exist_ok=True) + + tropo_by_date = _group_tropo_files_by_date(list(tropo_files)) + if not tropo_by_date: + msg = f"No tropo correction files found in {tropo_files!r}" + raise ValueError(msg) + + scale = (4.0 * np.pi / wavelength) if units == "radians" else 1.0 + written: list[Path] = [] + for src_path in sorted(target_files): + pair = _ifg_dates(src_path) + if pair is None: + continue + out_path = output_dir / f"{pair[0]}_{pair[1]}{suffix}" + result = _apply_one_pair(src_path, tropo_by_date, out_path, scale) + if result is not None: + written.append(result) + return written + + +@log_runtime +def run_tropo_correction( + slc_files: list[Path], + dem_path: Path, + incidence_angle_path: Path, + dolphin_work_dir: Path, + options: Optional[TropoOptions] = None, + wavelength: float = S1_WAVELENGTH_M, +) -> list[Path]: + """Build tropo corrections + apply to dolphin's unwrapped and timeseries. + + Runs :func:`create_tropo_corrections` to produce the per-CSLC tropo + rasters, then applies the differential correction to every + ``_*.tif`` raster it finds under ``dolphin_work_dir``: + + - ``unwrapped/.unw.tif`` (the unwrapped interferogram) + - ``timeseries/.tif`` (the post-inversion per-pair timeseries + raster, when dolphin has produced one — for single-pair stacks + this is just the unwrapped pair referenced to a point) + + Corrected outputs are written to ``/tropo_corrected/`` + with filenames ``.unw.tropo_corrected.tif`` and + ``.timeseries.tropo_corrected.tif`` respectively. + """ + options = options or TropoOptions() + dolphin_work_dir = Path(dolphin_work_dir).resolve() + tropo_corr_dir = dolphin_work_dir / "tropo" + corrected_dir = dolphin_work_dir / "tropo_corrected" + + tropo_files = create_tropo_corrections( + slc_files=slc_files, + dem_path=dem_path, + incidence_angle_path=incidence_angle_path, + output_dir=tropo_corr_dir, + options=options, + ) + + written: list[Path] = [] + + # Apply to unwrapped interferograms (radians of phase). + unwrapped_dir = dolphin_work_dir / "unwrapped" + unw_files = sorted(p for p in unwrapped_dir.glob("*.unw.tif")) + if unw_files: + written.extend( + apply_tropo_to_pairs( + target_files=unw_files, + tropo_files=tropo_files, + output_dir=corrected_dir, + units="radians", + suffix=".unw.tropo_corrected.tif", + wavelength=wavelength, + ) + ) + + # Apply to the per-pair timeseries rasters (metres of LOS displacement, + # post inversion + radians-to-metres conversion via wavelength). Single- + # pair stacks also get one `_.tif` here. + timeseries_dir = dolphin_work_dir / "timeseries" + ts_files = sorted( + p for p in timeseries_dir.glob("[0-9]*_[0-9]*.tif") if _ifg_dates(p) is not None + ) + if ts_files: + written.extend( + apply_tropo_to_pairs( + target_files=ts_files, + tropo_files=tropo_files, + output_dir=corrected_dir, + units="meters", + suffix=".timeseries.tropo_corrected.tif", + wavelength=wavelength, + ) + ) + + if not written: + logger.warning( + "Tropo correction: no unwrapped or timeseries pair rasters found" + f" under {dolphin_work_dir}; nothing applied." + ) + return written diff --git a/src/sweets/_unzip.py b/src/sweets/_unzip.py deleted file mode 100644 index ed5b152..0000000 --- a/src/sweets/_unzip.py +++ /dev/null @@ -1,65 +0,0 @@ -import zipfile -from concurrent.futures import ThreadPoolExecutor, as_completed -from pathlib import Path -from typing import List - -from sweets._log import get_log -from sweets._types import Filename - -logger = get_log(__name__) - - -def unzip_one( - filepath: Filename, pol: str = "vv", out_dir: Filename = Path(".") -) -> Path: - """Unzip one Sentinel-1 zip file.""" - if pol is None: - pol = "" - - # unzip all of these - to_unzip = [pol.lower(), "preview", "support", "manifest.safe"] - with zipfile.ZipFile(filepath, "r") as zipref: - # Get the list of files in the zip - names_to_extract = [ - fp - for fp in zipref.namelist() - if any(key in str(fp).lower() for key in to_unzip) - ] - zipref.extractall(path=out_dir, members=names_to_extract) - # Return the path to the unzipped file - return Path(filepath).with_suffix(".SAFE") - - -def unzip_all( - path: Filename = ".", - pol: str = "vv", - out_dir: Filename = Path("."), - delete_zips: bool = False, - n_workers: int = 4, -) -> List[Path]: - """Find all .zips and unzip them, skipping overwrites.""" - zip_files = list(Path(path).glob("S1[AB]_*IW*.zip")) - logger.info(f"Found {len(zip_files)} zip files to unzip") - - existing_safes = list(Path(path).glob("S1[AB]_*IW*.SAFE")) - logger.info(f"Found {len(existing_safes)} SAFE files already unzipped") - - # Skip if already unzipped - files_to_unzip = [ - fp for fp in zip_files if fp.stem not in [sf.stem for sf in existing_safes] - ] - logger.info(f"Unzipping {len(files_to_unzip)} zip files") - # Unzip in parallel - newly_unzipped = [] - with ThreadPoolExecutor(max_workers=n_workers) as executor: - futures = [ - executor.submit(unzip_one, fp, pol=pol, out_dir=out_dir) - for fp in files_to_unzip - ] - for future in as_completed(futures): - newly_unzipped.append(future.result()) - - if delete_zips: - for fp in files_to_unzip: - fp.unlink() - return newly_unzipped + existing_safes diff --git a/src/sweets/_water_mask.py b/src/sweets/_water_mask.py new file mode 100644 index 0000000..70b5068 --- /dev/null +++ b/src/sweets/_water_mask.py @@ -0,0 +1,221 @@ +"""High-resolution water mask creation from ASF water mask tiles. + +ASF's water mask tiles mosaic OpenStreetMap and ESA WorldCover data at high +resolution. The public bucket is at +``https://asf-dem-west.s3.amazonaws.com/WATER_MASK/TILES/`` and uses a +5-degree grid with the naming convention +``{lat_dir}{lat:02d}{lon_dir}{lon:03d}.tif`` (e.g. ``n55w165.tif``). + +Source convention: ``0 = land``, ``1 = water``. The +:class:`WaterValue` enum lets the caller pick the output convention; sweets +itself wants ``0 = water (invalid)`` / ``1 = land (valid)`` to match dolphin's +mask convention. + +Optional shoreline buffering expands the water class into adjacent land +pixels via morphological dilation, which is helpful for InSAR users who +want to mask out coastal noise. +""" + +from __future__ import annotations + +from enum import Enum +from os import fspath +from pathlib import Path +from typing import Optional + +import numpy as np +from osgeo import gdal +from scipy import ndimage + +from loguru import logger + +gdal.UseExceptions() + +TILE_URL_BASE = "https://asf-dem-west.s3.amazonaws.com/WATER_MASK/TILES/" + + +class WaterValue(Enum): + """Convention for water mask pixel values.""" + + ZERO = 0 # water=0 (invalid), land=1 (valid) — dolphin convention + ONE = 1 # water=1, land=0 — ASF tile native convention + + +def _coord_to_tile_name(lon: float, lat: float) -> str: + """Convert a coordinate to ASF tile filename. + + Tiles are on a 5-degree grid. E.g., (lon=-163.5, lat=59.0) -> n55w165.tif + """ + lat_floor = int(np.floor(lat / 5) * 5) + lon_floor = int(np.floor(lon / 5) * 5) + + lat_dir = "n" if lat_floor >= 0 else "s" + lon_dir = "e" if lon_floor >= 0 else "w" + + return f"{lat_dir}{abs(lat_floor):02d}{lon_dir}{abs(lon_floor):03d}.tif" + + +def _get_tile_urls(west: float, south: float, east: float, north: float) -> list[str]: + """Return /vsicurl URLs for all tiles covering the given bounds.""" + tiles: list[str] = [] + corners = [ + (west, north), + (west, south), + (east, north), + (east, south), + ] + # Wide extents (high latitudes) might span more than two 5-deg cells in + # longitude — sample the midpoint too. + width = east - west + if width > 5: + mid_lon = west + width / 2 + corners.extend([(mid_lon, north), (mid_lon, south)]) + + for lon, lat in corners: + url = f"/vsicurl/{TILE_URL_BASE}{_coord_to_tile_name(lon, lat)}" + if url not in tiles: + tiles.append(url) + return tiles + + +def _buffer_mask( + mask: np.ndarray, + buffer_pixels: int, + water_value: WaterValue, +) -> np.ndarray: + """Expand water regions by `buffer_pixels` using morphological dilation.""" + if buffer_pixels <= 0: + return mask + + diameter = 2 * buffer_pixels + 1 + y, x = np.ogrid[:diameter, :diameter] + center = buffer_pixels + struct = ((x - center) ** 2 + (y - center) ** 2) <= buffer_pixels**2 + + if water_value == WaterValue.ONE: + return ndimage.binary_dilation(mask, structure=struct).astype(np.uint8) + # WaterValue.ZERO: water=0, land=1 — erode the land class instead. + land = mask == 1 + eroded_land = ~ndimage.binary_dilation(~land, structure=struct) + return eroded_land.astype(np.uint8) + + +def create_water_mask( + bounds: tuple[float, float, float, float], + output: Path, + resolution: Optional[float] = None, + buffer_meters: float = 0.0, + water_value: WaterValue = WaterValue.ZERO, + overwrite: bool = False, +) -> Path: + """Create a water mask GeoTIFF for the given bounds. + + Parameters + ---------- + bounds : tuple[float, float, float, float] + ``(west, south, east, north)`` in EPSG:4326 degrees. + output : Path + Output GeoTIFF path. + resolution : float, optional + Pixel size in degrees. If None, uses native tile resolution + (~0.0001 deg). + buffer_meters : float + Buffer distance to expand water mask into land. Approximate + conversion to pixels uses 111 km/degree at the AOI center latitude. + water_value : WaterValue + Output convention. Defaults to ``ZERO`` (water=0, land=1) which + matches dolphin's mask convention. + overwrite : bool + If False and `output` exists, skip creation. + + Returns + ------- + Path + Path to the output raster. + + """ + output = Path(output) + if output.exists() and not overwrite: + logger.info(f"Water mask already exists: {output}") + return output + + west, south, east, north = bounds + tiles = _get_tile_urls(west, south, east, north) + if not tiles: + msg = f"No water mask tiles found for bounds {bounds}" + raise ValueError(msg) + + tile_names = [t.rsplit("/", 1)[-1] for t in tiles] + logger.info(f"Building water mask from {len(tiles)} tile(s): {tile_names}") + + vrt_options = gdal.BuildVRTOptions(resampleAlg="nearest") + vrt_ds = gdal.BuildVRT("", tiles, options=vrt_options) + if vrt_ds is None: + msg = f"Failed to build VRT from tiles: {tiles}" + raise RuntimeError(msg) + + if resolution is None: + tile_ds = gdal.Open(tiles[0]) + resolution = float(tile_ds.GetGeoTransform()[1]) + tile_ds = None + assert resolution is not None + + width = int(np.ceil((east - west) / resolution)) + height = int(np.ceil((north - south) / resolution)) + + warp_options = gdal.WarpOptions( + format="MEM", + outputBounds=(west, south, east, north), + width=width, + height=height, + resampleAlg="nearest", + ) + mem_ds = gdal.Warp("", vrt_ds, options=warp_options) + vrt_ds = None + if mem_ds is None: + msg = "Failed to warp water mask to target extent" + raise RuntimeError(msg) + + data = mem_ds.GetRasterBand(1).ReadAsArray() + geotransform = mem_ds.GetGeoTransform() + projection = mem_ds.GetProjection() + mem_ds = None + + # ASF tiles ship as 0=land, 1=water. Flip if the caller wants the + # dolphin convention (0=water, 1=land). + if water_value == WaterValue.ZERO: + data = 1 - data + + if buffer_meters > 0: + center_lat = (south + north) / 2 + meters_per_deg = 111_000 * np.cos(np.radians(center_lat)) + buffer_pixels = int(np.ceil(buffer_meters / (resolution * meters_per_deg))) + logger.info( + f"Buffering water by {buffer_pixels} pixels (~{buffer_meters:.0f} m)" + ) + data = _buffer_mask(data, buffer_pixels, water_value) + + output.parent.mkdir(parents=True, exist_ok=True) + driver = gdal.GetDriverByName("GTiff") + out_ds = driver.Create( + fspath(output), + width, + height, + 1, + gdal.GDT_Byte, + options=["COMPRESS=LZW", "TILED=YES"], + ) + out_ds.SetGeoTransform(geotransform) + out_ds.SetProjection(projection) + band = out_ds.GetRasterBand(1) + band.WriteArray(data) + band.SetNoDataValue(255) + if water_value == WaterValue.ZERO: + band.SetDescription("water_mask: 0=water (invalid), 1=land (valid)") + else: + band.SetDescription("water_mask: 1=water (invalid), 0=land (valid)") + band.FlushCache() + out_ds = None + + logger.info(f"Created water mask: {output}") + return output diff --git a/src/sweets/cli.py b/src/sweets/cli.py index f2bcb7a..3fcd495 100644 --- a/src/sweets/cli.py +++ b/src/sweets/cli.py @@ -1,237 +1,228 @@ +"""Sweets command-line interface (tyro-driven). + +Three subcommands: + +- ``sweets config`` — write a ``sweets_config.yaml`` from a few flags. +- ``sweets run`` — execute a workflow from a config file. +- ``sweets server`` — launch the (WIP) web UI server. + +The CLI intentionally exposes only the most common knobs. For the long tail +(dolphin half-window, COMPASS posting, etc.) edit the YAML directly or +construct :class:`sweets.core.Workflow` in Python. +""" + from __future__ import annotations -import argparse import sys +from dataclasses import dataclass, field from pathlib import Path +from typing import Annotated, Literal, Optional + +import tyro + +SourceKind = Literal["safe", "opera-cslc", "nisar-gslc"] + + +@dataclass +class ConfigCmd: + """Create a sweets_config.yaml from CLI arguments.""" + + start: str + """Start date for the burst search (YYYY-MM-DD).""" + + end: str + """End date for the burst search (YYYY-MM-DD).""" + + bbox: Optional[tuple[float, float, float, float]] = None + """AOI as left bottom right top in decimal degrees. One of --bbox or --wkt is required.""" + + wkt: Optional[str] = None + """AOI as a WKT polygon string, or path to a .wkt file. Overrides --bbox.""" + + source: SourceKind = "safe" + """Where the input SLCs come from. `safe` (default): raw S1 bursts via burst2safe + COMPASS. `opera-cslc`: pre-made OPERA CSLC HDF5s from ASF. `nisar-gslc`: pre-made NISAR GSLC HDF5s via CMR (L-band, UTM, already geocoded).""" + + track: Optional[int] = None + """Relative orbit / track number. Required for --source safe; optional but recommended for --source opera-cslc and --source nisar-gslc. For NISAR this is the `Track` field on ASF Vertex (the RRR digits in the granule filename).""" + + frame: Optional[int] = None + """NISAR track-frame number — the `Frame` field on ASF Vertex (the TTT digits in the granule filename, e.g. `71`). Only honored by --source nisar-gslc.""" + + frequency: Literal["A", "B"] = "A" + """NISAR frequency band (`A` = L-band, `B` reserved). Only honored by --source nisar-gslc.""" + + out_dir: Path = field(default_factory=lambda: Path("data")) + """Where downloaded SLC inputs will live.""" + + work_dir: Path = field(default_factory=Path.cwd) + """Top-level working directory for the workflow.""" + + polarizations: list[str] = field(default_factory=lambda: ["VV"]) + """Polarizations to keep. Defaults to ['VV'] for S1/OPERA; pass --polarizations HH for NISAR.""" + + swaths: Optional[list[str]] = None + """Restrict to specific subswaths (e.g. ['IW2']). Only honored by --source safe.""" + + n_workers: int = 4 + """Process pool size for COMPASS geocoding (--source safe only).""" + + do_tropo: bool = False + """Run the OPERA L4 TROPO-ZENITH correction step after dolphin (off by default; not supported with --source nisar-gslc).""" + + output: Path = Path("sweets_config.yaml") + """Where to write the config file.""" + + with_schema: bool = True + """Also write a sibling `.schema.json` next to the YAML and + prepend a `# yaml-language-server: $schema=...` modeline. Editors + with the YAML Language Server (VS Code, Neovim-yamlls, JetBrains, + etc.) use that to provide inline hover docs, autocomplete, and + validation for every field in the sweets config. Pass + --no-with-schema to skip.""" + + def run(self) -> None: + """Build and dump a Workflow config to YAML.""" + # Heavy imports go here so `sweets --help` is snappy. + from sweets.core import Workflow + + if self.bbox is None and self.wkt is None: + print("error: one of --bbox or --wkt is required", file=sys.stderr) + raise SystemExit(2) + + search: dict = { + "kind": self.source, + "start": self.start, + "end": self.end, + "out_dir": self.out_dir, + } + if self.source == "safe": + if self.track is None: + print("error: --track is required for --source safe", file=sys.stderr) + raise SystemExit(2) + search["track"] = self.track + search["polarizations"] = self.polarizations + search["swaths"] = self.swaths + elif self.source == "opera-cslc": + # `track` is optional on OPERA — ASF will filter on AOI alone. + if self.track is not None: + search["track"] = self.track + elif self.source == "nisar-gslc": + if self.track is not None: + search["track"] = self.track + if self.frame is not None: + search["frame"] = self.frame + search["frequency"] = self.frequency + search["polarizations"] = self.polarizations + + workflow = Workflow.model_validate( + { + "bbox": self.bbox, + "wkt": self.wkt, + "work_dir": self.work_dir, + "n_workers": self.n_workers, + "search": search, + "tropo": {"enabled": self.do_tropo}, + } + ) + workflow.to_yaml(self.output) + if self.with_schema: + _emit_schema_sidecar(self.output) + print(f"wrote {self.output}", file=sys.stderr) -def _get_cli_args() -> dict: - parser = argparse.ArgumentParser( - prog=__package__, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) - subparsers = parser.add_subparsers() - config_parser = subparsers.add_parser( - "config", - help="Create a sweets_config.yaml file", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) - config_parser._action_groups.pop() +def _emit_schema_sidecar(yaml_path: Path) -> None: + """Write a JSON schema next to the YAML and add a modeline comment. - base = config_parser.add_argument_group() - base.add_argument( - "--save-empty", - action="store_true", - help="Print an empty config file to `outfile", - ) - base.add_argument( - "-o", - "--outfile", - help=( - "Path to save the config file to. \nIf not specified, will save to" - " `sweets_config.yaml` in the current directory." - ), - default="sweets_config.yaml", - ) - base.add_argument( - "-b", - "--bbox", - nargs=4, - metavar=("left", "bottom", "right", "top"), - type=float, - help=( - "Bounding box of area of interest in decimal degrees longitude/latitude: \n" - " (e.g. --bbox -106.1 30.1 -103.1 33.1 ). \n" - ), - ) - base.add_argument( - "--wkt", - help=( - "Alternate to bounding box specification: \nWKT string (or file containing" - " polygon) for AOI bounds (e.g. from the ASF Vertex tool). \nIf passing " - " a string polygon, you must enclose in quotes." - ), - ) - aoi = config_parser.add_argument_group( - title="asf_query", - description="Arguments specifying the area of interest for the S1 data query", - ) - aoi.add_argument( - "--track", - "--relativeOrbit", - dest="relativeOrbit", - type=int, - help="Required: the relative orbit/track", - ) - aoi.add_argument( - "--start", - help="Starting date for query (recommended: YYYY-MM-DD)", - ) - aoi.add_argument( - "--end", - help="Ending date for query (recommended: YYYY-MM-DD). Defaults to today.", - ) - aoi.add_argument( - "--frames", - type=int, - nargs=2, - metavar=("start_frame", "end_frame"), - help=( - "Limit to a range of frames (e.g. --frames 1 10). Frame numbers come from" - " ASF website" - ), - ) - aoi.add_argument( - "--out-dir", - help=( - "Directory to store data in (or directory containing existing downloads)." - " If None, will store in `data/` " - ), - ) + The schema is `Workflow.model_json_schema()` emitted verbatim; pydantic + produces JSON Schema Draft 2020-12 with a `oneOf + discriminator` for + the `Workflow.search` field, which the YAML Language Server handles + natively. The modeline is read by the redhat.vscode-yaml extension + (and every editor that speaks yamlls) to attach the schema at load + time. + """ + import json - interferogram_options = config_parser.add_argument_group("interferogram_options") - interferogram_options.add_argument( - "--looks", - type=int, - nargs=2, - metavar=("az_looks", "range_looks"), - default=[6, 12], - help=( - "Number of looks in azimuth (rows) and range (cols) to use for" - " interferograms (e.g. --looks 6 12). GSLCs are geocoded at 10m x 5m" - " posting, so default looks of 6x12 are 60m x 60m." - ), - ) - interferogram_options.add_argument( - "-t", - "--max-temporal-baseline", - type=int, - help="Maximum temporal baseline (in days) to consider for interferograms.", - ) - interferogram_options.add_argument( - "--max-bandwidth", - type=int, - default=4, - help="Alternative to temporal baseline: form the nearest n- ifgs.", - ) - base.add_argument( - "--orbit-dir", - help=( - "Directory to store orbit files in (or directory containing existing" - " orbits). If None, will store in `orbits/` " - ), - ) - base.add_argument( - "-nw", - "--n-workers", - type=int, - default=4, - help=( - "Number of background workers to use for parallel processing" - " GSLC/ifgs/unwrapping." - ), - ) - base.add_argument( - "-tpw", - "--threads-per-worker", - type=int, - default=16, - help=( - "For each background worker, number of threads to use (e.g." - " OMP_NUM_THREADS, or in numpy multithreading)." - ), - ) - config_parser.set_defaults(func=create_config) + from sweets.core import Workflow - # ########################## - run_parser = subparsers.add_parser( - "run", - help="Run the workflow using a sweets_config.yaml file", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) + schema_path = yaml_path.with_suffix(yaml_path.suffix + ".schema.json") + schema_path.write_text(json.dumps(Workflow.model_json_schema(), indent=2) + "\n") - run_parser.add_argument( - "config_file", - type=Path, - help=( - "Path to a pre-existing sweets_config.yaml file. \nIf not specified, a new" - " config will be created from the command line arguments." - ), - ) - run_parser.add_argument( - "--starting-step", - type=int, - default=1, - help=( - "If > 1, will skip earlier steps of the workflow. Step: " - "1. Download RSLC data from ASF. 2. Create GSLCs. " - "3. Create burst interfereograms. " - "4. Stitch burst interferograms into one per date. " - "5. Unwrap. " - ), - ) + existing = yaml_path.read_text() + modeline = f"# yaml-language-server: $schema={schema_path.name}\n" + if modeline.strip() not in existing: + yaml_path.write_text(modeline + existing) + print(f"wrote {schema_path}", file=sys.stderr) - run_parser.set_defaults(func=run_workflow) - arg_groups = {} +@dataclass +class SchemaCmd: + """Dump the JSON schema for the sweets workflow config to stdout.""" - args = parser.parse_args() - arg_dict = vars(args) - if not arg_dict: - parser.print_help() - sys.exit(1) + def run(self) -> None: + import json - if arg_dict["func"].__name__ == "create_config": - for group in config_parser._action_groups: - # skip positional arguments - if group.title == "positional arguments": - continue - group_dict = { - a.dest: getattr(args, a.dest, None) for a in group._group_actions - } - # remove None values - group_dict = {k: v for k, v in group_dict.items() if v is not None} - if group.title: - arg_groups[group.title] = group_dict - else: - arg_groups.update(group_dict) # type: ignore - arg_groups["func"] = arg_dict["func"] - return arg_groups - else: - return arg_dict - - -def run_workflow(kwargs: dict): - """Run the workflow using a sweets_config.yaml file.""" - # importing below for faster CLI startup - from sweets.core import Workflow + from sweets.core import Workflow - cfg_file = kwargs["config_file"] - if not cfg_file.exists(): - raise ValueError(f"Config file {cfg_file} does not exist") + print(json.dumps(Workflow.model_json_schema(), indent=2)) - if "yaml" not in cfg_file.suffix and "yml" not in cfg_file.suffix: - raise ValueError(f"Config file {cfg_file} is not a yaml file.") - workflow = Workflow.from_yaml(cfg_file) - workflow.run(starting_step=kwargs.get("starting_step", 1)) +@dataclass +class ReportCmd: + """Render a single-file HTML report for a finished sweets run.""" + config_file: Annotated[Path, tyro.conf.Positional] + """Path to the sweets_config.yaml used for the run. A work directory + containing a sweets_config.yaml is also accepted and resolved to the + yaml inside it.""" -def create_config(kwargs: dict): - """Create a sweets_config.yaml file from command line arguments.""" - from sweets.core import Workflow + output: Optional[Path] = None + """Where to write the report. Defaults to `/sweets_report.html`.""" - outfile = kwargs.pop("outfile", None) - print(f"Creating config file at {outfile}.", file=sys.stderr) - if kwargs.pop("save_empty", False): - Workflow.print_yaml_schema(outfile) - else: - workflow = Workflow(**kwargs) - workflow.to_yaml(outfile) + def run(self) -> None: + from sweets._report import build_report + + path = build_report( + config_file=self.config_file, + output=self.output, + ) + print(f"wrote {path}", file=sys.stderr) + + +@dataclass +class RunCmd: + """Execute a sweets workflow from a config file.""" + + config_file: Annotated[Path, tyro.conf.Positional] + """Path to a sweets_config.yaml.""" + + starting_step: int = 1 + """Skip earlier stages (1=download, 2=geocode, 3=dolphin).""" + + def run(self) -> None: + """Load the workflow and run it.""" + from sweets.core import Workflow + + if not self.config_file.exists(): + msg = f"config file {self.config_file} does not exist" + raise SystemExit(msg) + workflow = Workflow.from_yaml(self.config_file) + workflow.run(starting_step=self.starting_step) + + +def main() -> None: + """Top-level CLI entry point.""" + cmd = tyro.extras.subcommand_cli_from_dict( + { + "config": ConfigCmd, + "run": RunCmd, + "schema": SchemaCmd, + "report": ReportCmd, + }, + prog="sweets", + description="Sentinel-1 InSAR workflow runner.", + ) + cmd.run() -def main(): - """Top-level command line interface to the workflows.""" - arg_dict = _get_cli_args() - func = arg_dict.pop("func") - func(arg_dict) +if __name__ == "__main__": + main() diff --git a/src/sweets/core.py b/src/sweets/core.py index 7d023b9..4e6b9d3 100644 --- a/src/sweets/core.py +++ b/src/sweets/core.py @@ -1,41 +1,61 @@ +"""End-to-end Sentinel-1 InSAR workflow. + +Two source paths share the same downstream pipeline: + +- ``BurstSearch`` (default): download burst-trimmed S1 SAFEs via burst2safe, + geocode them with COMPASS, then run dolphin. +- ``OperaCslcSearch``: download pre-made OPERA CSLCs from ASF (skips COMPASS, + locked to OPERA's posting), then run dolphin. + +Optional post-step: tropospheric correction using OPERA L4 TROPO-ZENITH +products via opera_utils.tropo. + +The workflow is defined as a single :class:`Workflow` Pydantic model that +can be serialized to / loaded from a ``sweets_config.yaml``. +""" + from __future__ import annotations -from concurrent.futures import Future, ProcessPoolExecutor, ThreadPoolExecutor, wait +import shutil +from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor, wait from functools import partial from pathlib import Path -from typing import Any, Literal, Optional, Tuple - -import h5py -import numpy as np -from dolphin import stitching, unwrap -from dolphin.interferogram import Network -from dolphin.utils import _format_date_pair, set_num_threads -from dolphin.workflows.config import ( - UnwrapOptions, - YamlModel, -) -from opera_utils import group_by_burst, group_by_date +from typing import TYPE_CHECKING, Annotated, Any, Literal, Optional, Union + +from dolphin.utils import set_num_threads +from dolphin.workflows.config import YamlModel +from opera_utils import group_by_burst from pydantic import ConfigDict, Field, computed_field, field_validator, model_validator -from shapely import geometry, wkt +from shapely import wkt as shp_wkt + +from loguru import logger from ._burst_db import get_burst_db +from ._dolphin import DolphinOptions, run_displacement from ._geocode_slcs import create_config_files, run_geocode, run_static_layers from ._geometry import stitch_geometry -from ._log import get_log, log_runtime +from ._log import log_runtime from ._netrc import setup_nasa_netrc from ._orbit import download_orbits +from ._tropo import TropoOptions, run_tropo_correction from ._types import Filename from .dem import create_dem, create_water_mask -from .download import ASFQuery -from .interferogram import InterferogramOptions, create_cor, create_ifg +from .download import BurstSearch, NisarGslcSearch, OperaCslcSearch -logger = get_log(__name__) +if TYPE_CHECKING: + from dolphin.workflows.displacement import OutputPaths -UNW_SUFFIX = ".unw.tif" +# Discriminated union on the `kind` field. Pydantic dispatches directly to +# the matching variant — much cleaner errors than a plain Union, which +# tries each variant in order and reports failures from all of them. +Source = Annotated[ + Union[BurstSearch, OperaCslcSearch, NisarGslcSearch], + Field(discriminator="kind"), +] class Workflow(YamlModel): - """Class for end-to-end processing of Sentinel-1 data.""" + """End-to-end Sentinel-1 InSAR workflow configuration.""" work_dir: Path = Field( default_factory=Path.cwd, @@ -44,192 +64,192 @@ class Workflow(YamlModel): ) bbox: Optional[tuple[float, float, float, float]] = Field( - None, + default=None, description=( - "Area of interest: [left, bottom, right, top] longitude/latitude " - "e.g. `bbox=(-150.2,65.0,-150.1,65.5)`" + "AOI as (left, bottom, right, top) in decimal degrees. Either" + " `bbox` or `wkt` must be set." ), ) wkt: Optional[str] = Field( - None, - description=( - "Well Known Text (WKT) string (overrides bbox). Must specify `bbox` or" - " `wkt`" - ), - ) - - orbit_dir: Path = Field( - Path("orbits"), - description="Directory for orbit files.", - validate_default=True, + default=None, + description="AOI as a WKT polygon (or path to a `.wkt` file). Overrides bbox.", ) - asf_query: ASFQuery - skip_download_if_exists: bool = Field( - True, + search: Source = Field( + ..., description=( - "Don't re-query ASF if there's any existing data in the download directory." - " Otherwise, will re-query and only skip files that match checksums (done" - " by aria2)." + "Source of input SLCs. Either a `BurstSearch` (raw S1 bursts via" + " burst2safe + COMPASS) or an `OperaCslcSearch` (pre-made OPERA" + " CSLCs); discriminated by the `kind` field." ), ) + dem_filename: Path = Field( - # requires that `work_dir` is specified earlier than `dem_filename` default_factory=lambda data: data["work_dir"] / "dem.tif", description=( - "Path to custom digital elevation model (DEM). If left out (default behaviour), sweets will download the copernicus DEM using the sardem package and will store it in `work_dir`. The DEM should be supplied as EPSG:4326." + "DEM in EPSG:4326. If left as the default, sweets downloads a" + " Copernicus DEM via sardem." ), ) - water_mask_filename: Optional[Path] = Field( - # requires that `work_dir` is specified earlier than `water_mask_filename` - default_factory=lambda data: data["work_dir"] / "watermask.flg", + dem_bbox: Optional[tuple[float, float, float, float]] = Field( + default=None, description=( - "Path to custom water mask. If left out (default behaviour), sweets will download an SRTM-based watermask using the sardem package and will store it in `work_dir`. The DEM should be supplied as EPSG:4326." + "Optional AOI override for DEM download (left, bottom, right," + " top) in decimal degrees. Use this when the default buffer" + " around the study-area `bbox` isn't enough — most commonly," + " when running COMPASS on a `BurstSearch` whose full IW burst" + " footprint extends beyond the study area. If unset, sweets" + " picks a default: ~1 deg around `bbox` for BurstSearch (large" + " enough to cover a full IW burst) and ~0.25 deg around `bbox`" + " for NISAR / OPERA-CSLC sources (which are already geocoded" + " and only need the DEM for tropo + water-mask context)." ), ) - interferogram_options: InterferogramOptions = Field( - default_factory=InterferogramOptions - ) - unwrap_options: UnwrapOptions = Field( - default_factory=UnwrapOptions, - description="Options for unwrapping after wrapped phase estimation.", + water_mask_filename: Path = Field( + default_factory=lambda data: data["work_dir"] / "watermask.tif", + description=( + "Water mask in EPSG:4326 (uint8 GTiff, 1=land, 0=water). If left" + " as the default, sweets derives one from a Copernicus DEM." + ), ) - do_unwrap: bool = Field( - True, - description="Run the unwrapping step for all interferograms.", + orbit_dir: Path = Field( + default=Path("orbits"), + description="Directory for Sentinel-1 precise orbit files.", + validate_default=True, ) + slc_posting: tuple[float, float] = Field( - (10, 5), - description="Spacing of geocoded SLCs (in meters) along the (y, x)-directions.", + default=(10, 5), + description="Geocoded SLC posting (y, x) in meters.", ) pol_type: Literal["co-pol", "cross-pol"] = Field( - "co-pol", - description="Type of polarization to process for GSLCs", + default="co-pol", + description="Polarization type to geocode (COMPASS knob).", ) - n_workers: int = Field( - 1, - description="Number of workers to use for processing.", + dolphin: DolphinOptions = Field( + default_factory=DolphinOptions, + description="Configuration for the dolphin displacement workflow.", ) - threads_per_worker: int = Field( - 8, + + tropo: TropoOptions = Field( + default_factory=TropoOptions, description=( - "Number of threads per worker, set using OMP_NUM_THREADS. This affects the" - " number of threads used by isce3 geocodeSlc, as well as the number of" - " threads numpy uses." + "Configuration for the optional tropospheric correction step that" + " runs after dolphin. Off by default; set `tropo.enabled = true`" + " (or pass `--do-tropo` on the CLI) to turn it on." ), ) + + n_workers: int = Field( + default=4, + description="Process pool size for COMPASS geocoding.", + ge=1, + ) + threads_per_worker: int = Field( + default=8, + description="OMP_NUM_THREADS for each geocoding worker.", + ge=1, + ) overwrite: bool = Field( - False, - description="Overwrite existing files.", + default=False, + description="Overwrite existing intermediate / output files.", ) - model_config = ConfigDict(extra="allow") + + model_config = ConfigDict(extra="allow", populate_by_name=True) + + # ------------------------------------------------------------------ + # Validators + # ------------------------------------------------------------------ @field_validator("wkt", mode="before") @classmethod def _check_file_and_parse_wkt(cls, v): - if v is not None: - if Path(v).exists(): - v = Path(v).read_text().strip() - - try: - wkt.loads(v) - except Exception as e: - raise ValueError(f"Invalid WKT string: {e}") + if v is None: + return v + if Path(v).exists(): + v = Path(v).read_text().strip() + try: + shp_wkt.loads(v) + except Exception as e: + msg = f"Invalid WKT string: {e}" + raise ValueError(msg) from e return v - # Note: this model_validator's `info.data` only contains the fields that have - # been passed in by a user. - @model_validator(mode="before") - @classmethod - def _check_unset_dirs(cls, values: Any) -> "Workflow": - # TODO: Use the newer checks for fields set - if isinstance(values, dict): - if "asf_query" not in values: - values["asf_query"] = {} - elif isinstance(values["asf_query"], ASFQuery): - values["asf_query"] = values["asf_query"].model_dump( - exclude_unset=True, by_alias=True - ) - elif not isinstance(values["asf_query"], dict): - # forward validation of unknown object to ASFQuery - ASFQuery.model_validate(values["asf_query"]) - - # also if they passed a wkt to the outer constructor, we need to - # pass through to the ASF query - values["asf_query"]["wkt"] = values.get("asf_query", {}).get( - "wkt" - ) or values.get("wkt") - values["asf_query"]["bbox"] = values.get("asf_query", {}).get( - "bbox" - ) or values.get("bbox") - # sync the other way too: - values["wkt"] = values["asf_query"]["wkt"] - values["bbox"] = values["asf_query"]["bbox"] - if not values.get("bbox") and not values.get("wkt"): - raise ValueError("Must specify either `bbox` or `wkt`") - - return values - - # expanduser and resolve each of the dirs: @field_validator("work_dir", "orbit_dir") @classmethod def _expand_dirs(cls, v): return Path(v).expanduser().resolve() - # # while this one has all the fields - # @model_validator() - # def _move_inside_workdir(self): - # # TODO: pydantic has made this easier with new attributes to check attrs set - # if not values["_orbit_dir_is_set"]: - # values["orbit_dir"] = (values["work_dir"] / values["orbit_dir"]).resolve() - # if not values["_data_dir_is_set"] and "asf_query" in values: - # values["asf_query"].out_dir = ( - # values["work_dir"] / values["asf_query"].out_dir - # ).resolve() - - # return values + @model_validator(mode="before") + @classmethod + def _sync_aoi(cls, values: Any) -> Any: + """Push the top-level bbox/wkt down into the search source. + + The outer ``Workflow.bbox`` / ``Workflow.wkt`` are the canonical AOI; + the nested ``search`` field (either BurstSearch or OperaCslcSearch) + gets the same bbox so the downloader knows what to fetch. Only + ``bbox`` is forced — ``search.wkt`` is left alone so non-rectangular + search polygons can be specified at the source level if a user wants. + + If ``search`` is provided as a dict without ``kind``, default to + ``"safe"`` for backwards compatibility with existing configs. + """ + if not isinstance(values, dict): + return values + if "search" not in values: + values["search"] = {} + elif isinstance( + values["search"], (BurstSearch, OperaCslcSearch, NisarGslcSearch) + ): + values["search"] = values["search"].model_dump( + exclude_unset=True, by_alias=True + ) + if isinstance(values["search"], dict) and "kind" not in values["search"]: + values["search"]["kind"] = "safe" + outer_bbox = values.get("bbox") + outer_wkt = values.get("wkt") + inner = values["search"] + inner_bbox = inner.get("bbox") + inner_wkt = inner.get("wkt") + bbox = outer_bbox or inner_bbox + wkt_value = outer_wkt or inner_wkt + if not bbox and not wkt_value: + msg = "Must specify `bbox` or `wkt` (on Workflow or `search`)" + raise ValueError(msg) + if bbox is not None: + values["bbox"] = bbox + if not inner_bbox: + inner["bbox"] = bbox + if outer_wkt is not None: + values["wkt"] = outer_wkt + if not inner_wkt: + inner["wkt"] = outer_wkt + return values @model_validator(mode="after") - def _set_bbox_and_wkt(self, values): - # If they've specified a bbox, set the wkt - if not self.bbox: - self.bbox = wkt.loads(self.wkt).bounds - else: - # otherwise, make WKT just a 5 point polygon - self.wkt = wkt.dumps(geometry.box(*self.bbox)) - # Check that bottom is lower than top, left is left of right + def _set_bbox_and_wkt(self) -> "Workflow": + # Derive bbox from wkt if only wkt was supplied; downstream code + # (DEM, dolphin bounds, etc.) all reads bbox, not wkt. We do NOT + # auto-fill wkt from bbox: nothing in the workflow reads outer wkt + # past this validator, and round-tripping a computed wkt was + # contaminating reload equality (the inner search would gain a + # wkt it never had on the first pass). + if self.bbox is None and self.wkt is not None: + self.bbox = shp_wkt.loads(self.wkt).bounds + assert self.bbox is not None if self.bbox[1] > self.bbox[3]: - raise ValueError(f"Latitude must be lower than top, got {self.bbox}") + msg = f"Latitude min must be lower than max, got {self.bbox}" + raise ValueError(msg) if self.bbox[0] > self.bbox[2]: - raise ValueError(f"Longitude max must be greater than min, got {self.bbox}") + msg = f"Longitude min must be lower than max, got {self.bbox}" + raise ValueError(msg) return self - def save(self, config_file: Filename = "sweets_config.yaml"): - """Save the workflow configuration.""" - logger.info(f"Saving config to {config_file}") - self.to_yaml(config_file) - - @classmethod - def load(cls, config_file: Filename = "sweets_config.yaml"): - """Load the workflow configuration.""" - logger.info(f"Loading config from {config_file}") - return cls.from_yaml(config_file) - - # Override the constructor to allow recursively construct without validation - @classmethod - def construct(cls, **values): - cls.model_construct(**values) - - @classmethod - def model_construct(cls, _fields_set=None, **values): - if "asf_query" not in values: - values["asf_query"] = ASFQuery.model_construct() - return super().model_construct( - **values, - ) + # ------------------------------------------------------------------ + # Computed paths + # ------------------------------------------------------------------ - # Track the directories that need to be created at start of workflow @computed_field # type: ignore[prop-decorator] @property def log_dir(self) -> Path: @@ -247,99 +267,275 @@ def geom_dir(self) -> Path: @computed_field # type: ignore[prop-decorator] @property - def ifg_dir(self) -> Path: - return self.work_dir / "interferograms" - - @computed_field # type: ignore[prop-decorator] - @property - def stitched_ifg_dir(self) -> Path: - return self.ifg_dir / "stitched" - - @computed_field # type: ignore[prop-decorator] - @property - def unw_dir(self) -> Path: - return self.ifg_dir / "unwrapped" + def dolphin_dir(self) -> Path: + return self.work_dir / "dolphin" + + # Buffer (deg) padded around `bbox` when deriving an implicit DEM / water- + # mask extent. The BurstSearch value is large enough to cover the full + # footprint of any IW burst (~20 x 85 km) regardless of where within the + # burst the study area sits; COMPASS geocoding needs DEM coverage for the + # whole burst, not just the crop area. All other sources consume the DEM + # only for water masking + tropo context, so the study area + a small + # buffer is plenty. + _DEM_BUFFER_DEG_BURST = 1.0 + _DEM_BUFFER_DEG_DEFAULT = 0.25 + + def _pad_bbox( + self, bbox: tuple[float, float, float, float], buf_deg: float + ) -> tuple[float, float, float, float]: + return ( + bbox[0] - buf_deg, + bbox[1] - buf_deg, + bbox[2] + buf_deg, + bbox[3] + buf_deg, + ) - @computed_field # type: ignore[prop-decorator] @property - def scratch_dir(self) -> Path: - return self.work_dir / "scratch" + def _dem_bbox(self) -> tuple[float, float, float, float]: + """Bbox passed to ``sardem`` when creating the DEM. + + Priority: user-set ``dem_bbox`` > BurstSearch default (~1 deg buffer) + > everything-else default (~0.25 deg buffer). COMPASS needs DEM + coverage for the full IW burst extent, not just the study area, so + the BurstSearch buffer has to be big enough to absorb a whole burst. + """ + if self.dem_bbox is not None: + return self.dem_bbox + assert self.bbox is not None + buf = ( + self._DEM_BUFFER_DEG_BURST + if isinstance(self.search, BurstSearch) + else self._DEM_BUFFER_DEG_DEFAULT + ) + return self._pad_bbox(self.bbox, buf) - # Expanded version used for internal processing @property - def _dem_bbox(self) -> Tuple[float, float, float, float]: - assert isinstance(self.bbox, tuple) - return ( - self.bbox[0] - 0.25, - self.bbox[1] - 0.25, - self.bbox[2] + 0.25, - self.bbox[3] + 0.25, - ) + def _water_mask_bbox(self) -> tuple[float, float, float, float]: + """Bbox passed to the ASF water-mask tile mosaic. + + Always study-area-scoped: the water mask is only evaluated inside + the dolphin bounds, and oversizing it would just waste tile + downloads on the BurstSearch path (where ``_dem_bbox`` is large). + """ + assert self.bbox is not None + return self._pad_bbox(self.bbox, self._DEM_BUFFER_DEG_DEFAULT) + + # ------------------------------------------------------------------ + # Persistence helpers + # ------------------------------------------------------------------ + + def save(self, config_file: Filename = "sweets_config.yaml") -> None: + """Save this configuration to a YAML file.""" + logger.info(f"Saving config to {config_file}") + self.to_yaml(config_file) - # Intermediate outputs: - # From step 1: - def _get_existing_rslcs(self) -> list[Path]: - ext = ".SAFE" if self.asf_query.unzip else ".zip" - return sorted(self.asf_query.out_dir.glob("S*" + ext)) + @classmethod + def load(cls, config_file: Filename = "sweets_config.yaml") -> "Workflow": + """Load a configuration from a YAML file.""" + logger.info(f"Loading config from {config_file}") + return cls.from_yaml(config_file) - # From step 2: - def _get_existing_gslcs(self) -> list[Path]: - return sorted(self.gslc_dir.glob("t*/*/t*.h5")) + # ------------------------------------------------------------------ + # Step helpers + # ------------------------------------------------------------------ + + def _existing_safes(self) -> list[Path]: + # Only meaningful for the BurstSearch path; OperaCslcSearch doesn't + # produce SAFE directories. + assert isinstance(self.search, BurstSearch) + return self.search.existing_safes() + + # COMPASS-written CSLC HDF5s are tens to hundreds of MB. A 6-KB shell is + # a leftover from a crashed run that wrote the attribute scaffolding but + # never the data — accepting those silently breaks dolphin downstream + # (issue #107). Treat anything below this size as not-yet-produced. + _MIN_VALID_GSLC_BYTES = 1 * 1024 * 1024 + + def _existing_gslcs(self) -> list[Path]: + """Return on-disk CSLCs for whichever source variant is selected. + + - BurstSearch: COMPASS-written burst-organized HDF5s under gslc_dir. + - OperaCslcSearch: pre-made OPERA CSLCs under search.out_dir. + - NisarGslcSearch: pre-made NISAR GSLC HDF5s under search.out_dir. + Each candidate is opened to confirm it actually carries the + expected `/science/LSAR/GSLC/grids/frequency` group — opera- + utils' subsetter writes a metadata-only stub when the requested + bbox doesn't intersect a product, and dolphin would crash on + those. + """ + if isinstance(self.search, OperaCslcSearch): + return [ + p + for p in self.search.existing_cslcs() + if p.stat().st_size >= self._MIN_VALID_GSLC_BYTES + ] + if isinstance(self.search, NisarGslcSearch): + # NisarGslcSearch.existing_files() returns the per-polarization + # VRT wrappers that sweets writes alongside each downloaded + # subset HDF5. The VRTs are tiny (~1 KB) so the MIN_VALID + # byte-count guard from the COMPASS path doesn't apply; instead, + # open each one through rasterio to confirm GDAL can see a real + # geotransform and CRS through the VRT -> HDF5 subdataset. + import rasterio + + valid: list[Path] = [] + for p in self.search.existing_files(): + try: + with rasterio.open(p) as src: + assert not (src.transform.a == 1.0 and src.transform.e == 1.0) + assert src.crs is not None + except Exception as e: + logger.warning(f"Dropping {p.name}: not a valid raster ({e}).") + continue + valid.append(p) + return valid + return [ + p + for p in sorted(self.gslc_dir.glob("t*/*/t*.h5")) + if not p.name.startswith("static_") + and p.stat().st_size >= self._MIN_VALID_GSLC_BYTES + ] - def _get_burst_static_layers(self) -> list[Path]: + def _existing_static_layers(self) -> list[Path]: + if isinstance(self.search, OperaCslcSearch): + return self.search.existing_static_layers() + # NisarGslcSearch has no separate static layers product — the caller + # is expected to skip the geometry-stitch step entirely. + if isinstance(self.search, NisarGslcSearch): + return [] return sorted(self.gslc_dir.glob("t*/*/static_*.h5")) - # From step 3: - def _get_existing_burst_ifgs(self) -> list[Path]: - return sorted(self.ifg_dir.glob("t*/2*_2*.tif")) - - # From step 4: - def _get_existing_stitched_ifgs(self) -> tuple[list[Path], list[Path]]: - ifg_file_list = sorted(Path(self.ifg_dir / "stitched").glob("2*.int")) - cor_file_list = [f.with_suffix(".cor") for f in ifg_file_list] - return ifg_file_list, cor_file_list - - # Download helpers to kick off for step 1: - def _download_dem(self) -> Future: - """Kick off download/creation the DEM.""" - return self._client.submit(create_dem, self.dem_filename, self._dem_bbox) - - def _download_burst_db(self) -> Future: - """Kick off download of burst database to get the GSLC bbox/EPSG.""" - return self._client.submit(get_burst_db) - - def _download_water_mask(self) -> Future: - """Kick off download of water mask.""" - return self._client.submit( - create_water_mask, self.water_mask_filename, self._dem_bbox + def _gslc_root(self) -> Path: + """Return the directory we consider the 'root' of downloaded GSLCs. + + Used by `_apply_missing_data_filter` to compute relative paths + for files that get moved into the excluded-CSLCs debug folder. + """ + if isinstance(self.search, (OperaCslcSearch, NisarGslcSearch)): + return self.search.out_dir + return self.gslc_dir + + def _apply_missing_data_filter(self, gslc_files: list[Path]) -> list[Path]: + """Keep only the largest spatially-consistent (burst_id, date) subset. + + Runs `opera_utils.missing_data.get_missing_data_options` to + enumerate every (set of burst IDs, set of dates) subset where + *every* chosen burst has *every* chosen date. The top option + maximizes total bursts under that constraint — i.e. we keep the + widest stack where dolphin can form a coherent network without + spatial discontinuities from bursts-with-missing-dates. + + Files that aren't in the top option get moved (not deleted) to + `/excluded_cslcs/...` preserving their relative path + from the gslc root. That way a debugging user can pull them + back if they want the raw download. + + NISAR GSLCs aren't burst-organized so this is a no-op for the + NisarGslcSearch source — its `_download_group` already handles + coverage selection via `_rank_signatures`. + """ + if isinstance(self.search, NisarGslcSearch): + return gslc_files + if len(gslc_files) < 2: + return gslc_files + + from opera_utils.missing_data import ( + get_missing_data_options, + print_with_rich, ) - def _download_rslcs(self) -> list[Path]: - """Download Sentinel zip files from ASF.""" - self.log_dir.mkdir(parents=True, exist_ok=True) - # The final name will depend on if we're unzipping or not - existing_files = self._get_existing_rslcs() + try: + options = get_missing_data_options( + slc_files=[str(p) for p in gslc_files], + ) + except Exception as e: + logger.warning( + f"get_missing_data_options failed ({e}); skipping" + " missing-data filter." + ) + return gslc_files + if not options: + logger.warning("No missing-data options returned; skipping filter.") + return gslc_files - if existing_files and self.skip_download_if_exists: + top = options[0] + if top.num_candidate_bursts == top.total_num_bursts: logger.info( - f"Found {len(existing_files)} existing files in" - f" {self.asf_query.out_dir}. Skipping download." + f"Missing-data filter: all {top.total_num_bursts} CSLCs form a" + f" complete {top.num_burst_ids}-burst x {top.num_dates}-date" + " stack; nothing to exclude." ) - return existing_files + return gslc_files + + logger.info(f"Missing-data filter: {len(options)} consistent subset option(s).") + print_with_rich(options, use_stderr=False) + logger.info( + f"Keeping option #1: {top.num_burst_ids} burst(s) x" + f" {top.num_dates} date(s) = {top.total_num_bursts} CSLCs" + f" (excluding {top.num_candidate_bursts - top.total_num_bursts}" + " partial-coverage CSLCs)." + ) + + kept_set = {Path(p) for p in top.inputs} + to_exclude = [p for p in gslc_files if p not in kept_set] + + root = self._gslc_root().resolve() + excluded_dir = (self.work_dir / "excluded_cslcs").resolve() + for f in to_exclude: + src = f.resolve() + try: + rel = src.relative_to(root) + except ValueError: + rel = Path(src.name) + dst = excluded_dir / rel + dst.parent.mkdir(parents=True, exist_ok=True) + logger.warning(f"Excluding {rel} -> excluded_cslcs/{rel}") + shutil.move(str(src), str(dst)) - # If we didn't have any, we need to download them - # TODO: how should we handle partial/failed downloads... do we really - # want to re-search for them each time? - # Maybe there can be a "force" flag to re-download everything? - # or perhaps an API search, then if the number matches, we can skip - # rather than let aria2c start and do the checksums - return self.asf_query.download(log_dir=self.log_dir) + return sorted(kept_set) @log_runtime - def _geocode_slcs(self, slc_files, dem_file, burst_db_file): + def _download(self) -> list[Path]: + if isinstance(self.search, OperaCslcSearch): + existing = self.search.existing_cslcs() + if existing and not self.overwrite: + logger.info( + f"Found {len(existing)} existing OPERA CSLCs in" + f" {self.search.out_dir}; skipping ASF download." + ) + else: + self.search.download() + # Always make sure static layers are present too. + if not self.search.existing_static_layers() or self.overwrite: + self.search.download_static_layers() + return self.search.existing_cslcs() + + if isinstance(self.search, NisarGslcSearch): + existing = self.search.existing_files() + if existing and not self.overwrite: + logger.info( + f"Found {len(existing)} existing NISAR GSLCs in" + f" {self.search.out_dir}; skipping CMR download." + ) + return existing + return self.search.download() + + existing = self._existing_safes() + if existing and not self.overwrite: + logger.info( + f"Found {len(existing)} existing SAFE dirs in" + f" {self.search.out_dir}; skipping burst2safe download." + ) + return existing + return self.search.download() + + @log_runtime + def _geocode_slcs( + self, safes: list[Path], dem_file: Path, burst_db_file: Path + ) -> tuple[list[Path], list[Path]]: self.log_dir.mkdir(parents=True, exist_ok=True) compass_cfg_files = create_config_files( - slc_dir=slc_files[0].parent, + slc_dir=safes[0].parent, burst_db_file=burst_db_file, dem_file=dem_file, orbit_dir=self.orbit_dir, @@ -349,245 +545,278 @@ def _geocode_slcs(self, slc_files, dem_file, burst_db_file): pol_type=self.pol_type, out_dir=self.gslc_dir, overwrite=self.overwrite, - using_zipped=not self.asf_query.unzip, + using_zipped=False, ) - def cfg_to_filename(cfg_path: Path) -> str: - # Convert the YAML filename to a .h5 filename with date switched - # geo_runconfig_20221029_t078_165578_iw3.yaml -> t078_165578_iw2_20221029.h5 - date = cfg_path.name.split("_")[2] - burst = "_".join(cfg_path.stem.split("_")[3:]) - return f"{burst}_{date}.h5" - - # Check which ones we have without submitting a future - all_gslc_files = [] - todo_gslc = [] - existing_paths = self._get_existing_gslcs() - name_to_paths = {p.name: p for p in existing_paths} - logger.info(f"Found {len(name_to_paths)} existing GSLC files") - for cfg_file in compass_cfg_files: - name = cfg_to_filename(cfg_file) - if name in name_to_paths: - all_gslc_files.append(name_to_paths[name]) + existing = {p.name: p for p in self._existing_gslcs()} + logger.info(f"Found {len(existing)} existing GSLCs") + gslc_files: list[Path] = [] + todo: list[Path] = [] + for cfg in compass_cfg_files: + name = _cfg_to_filename(cfg) + if name in existing: + gslc_files.append(existing[name]) else: - # Run the geocoding if we dont have it already - todo_gslc.append(cfg_file) - - run_func = partial(run_geocode, log_dir=self.log_dir) - with ProcessPoolExecutor(max_workers=self.n_workers) as _client: - new_files = _client.map(run_func, todo_gslc) - - new_files = list(new_files) - all_gslc_files.extend(new_files) - - # Get the first config file (by date) for each of the bursts. - # We only need to create the static layers once per burst - def cfg_to_static_filename(cfg_path: Path) -> str: - # Convert the YAML filename to a .h5 filename with date switched - # geo_runconfig_20221029_t078_165578_iw3.yaml -> t078_165578_iw2_20221029.h5 - burst = "_".join(cfg_path.stem.split("_")[3:]) - return f"static_layers_{burst}.h5" - - existing_static_paths = self._get_burst_static_layers() - name_to_paths = {p.name: p for p in existing_static_paths} - logger.info(f"Found {len(name_to_paths)} existing geometry files") - day1_cfg_paths = [ - paths[0] for paths in group_by_burst(compass_cfg_files).values() + todo.append(cfg) + + if todo: + run = partial(run_geocode, log_dir=self.log_dir) + with ProcessPoolExecutor(max_workers=self.n_workers) as pool: + gslc_files.extend(pool.map(run, todo)) + + # Static layers (one per burst, not per date) + static_existing = {p.name: p for p in self._existing_static_layers()} + first_per_burst = [ + cfgs[0] for cfgs in group_by_burst(compass_cfg_files).values() ] - static_files = [] - todo_static = [] - for cfg_file in day1_cfg_paths: - name = cfg_to_static_filename(cfg_file) - if name in name_to_paths: - static_files.append(name_to_paths[name]) + static_files: list[Path] = [] + static_todo: list[Path] = [] + for cfg in first_per_burst: + name = _cfg_to_static_filename(cfg) + if name in static_existing: + static_files.append(static_existing[name]) else: - # Run the geocoding if we dont have it already - todo_static.append(cfg_file) - run_func = partial(run_static_layers, log_dir=self.log_dir) - with ProcessPoolExecutor(max_workers=self.n_workers) as _client: - new_files = _client.map(run_func, todo_static) + static_todo.append(cfg) + + if static_todo: + run_sl = partial(run_static_layers, log_dir=self.log_dir) + with ProcessPoolExecutor(max_workers=self.n_workers) as pool: + static_files.extend(pool.map(run_sl, static_todo)) + + return sorted(gslc_files), sorted(static_files) @log_runtime - def _stitch_geometry(self, geom_path_list): + def _stitch_geometry(self, static_files: list[Path]) -> list[Path]: + from dolphin._types import Bbox + + bbox = Bbox(*self.bbox) if self.bbox is not None else None return stitch_geometry( - geom_path_list=geom_path_list, + geom_path_list=[Path(p) for p in static_files], geom_dir=self.geom_dir, dem_filename=self.dem_filename, - looks=self.interferogram_options.looks, - bbox=self.bbox, + looks=self.dolphin.strides, + bbox=bbox, overwrite=self.overwrite, ) - @staticmethod - def _get_subdataset(f): - if not (str(f).endswith(".h5") or str(f).endswith(".nc")): - return "" - with h5py.File(f) as hf: - for pol_str in ["VV", "HV", "VH", "HH"]: - dset = f"/data/{pol_str}" - if dset in hf: - return dset - - @log_runtime - def _create_burst_interferograms(self, gslc_files): - # Group the SLCs by burst: - # {'t078_165573_iw2': [PosixPath('gslcs/t078_165573_iw2/20221029/...], 't078_... - burst_to_gslc = group_by_burst(gslc_files) - burst_to_ifg = group_by_burst(self._get_existing_burst_ifgs()) - ifg_path_list = [] - for burst, gslc_files in burst_to_gslc.items(): - subdatasets = [self._get_subdataset(f) for f in gslc_files] - outdir = self.ifg_dir / burst - outdir.mkdir(parents=True, exist_ok=True) - network = Network( - gslc_files, - outdir=outdir, - max_temporal_baseline=self.interferogram_options.max_temporal_baseline, - max_bandwidth=self.interferogram_options.max_bandwidth, - subdataset=subdatasets, - write=False, - ) - logger.info( - f"{len(network)} interferograms to create for burst {burst} in {outdir}" - ) - cur_existing = burst_to_ifg.get(burst, []) - logger.info(f"{len(cur_existing)} existing interferograms") - if len(network) == len(cur_existing): - ifg_path_list.extend(cur_existing) - else: - ifg_futures = [] - with ThreadPoolExecutor(max_workers=self.n_workers) as _client: - for vrt_ifg in network.ifg_list: - outfile = vrt_ifg.path.with_suffix(".tif") - ifg_fut = _client.submit( - create_ifg, - vrt_ifg.ref_slc, - vrt_ifg.sec_slc, - outfile, - looks=self.interferogram_options.looks, - ) - - ifg_futures.append(ifg_fut) - - for fut in ifg_futures: - ifg_path_list.append(fut.result()) - - return ifg_path_list + def _dolphin_subdataset(self) -> str: + """Pick the right HDF5 subdataset path for the current source. + + - COMPASS / OPERA CSLCs are HDF5 files; dolphin reads them via + ``input_options.subdataset = /data/VV``. + - NISAR GSLCs are wrapped by sweets in per-polarization VRTs + that inject georeferencing on top of the raw HDF5 subdataset; + dolphin opens the VRTs as plain rasters and ignores + ``subdataset``, so any placeholder string works. + """ + if isinstance(self.search, NisarGslcSearch): + return "/unused-for-raster-inputs" + return "/data/VV" + + def _dolphin_wavelength(self) -> Optional[float]: + """Wavelength override for dolphin, or None to let dolphin auto-detect. + + For the NISAR source, sweets reads the precise carrier from the + HDF5's ``centerFrequency`` dataset when available; this is + richer than dolphin's own filename-based fallback (which can + only tell L-band from S-band). dolphin's filename parser can't + see through sweets' VRT wrappers anyway, so sweets must be the + one peeking the HDF5. For every other source, return None and + let dolphin's `model_post_init` handle it. + """ + if isinstance(self.search, NisarGslcSearch): + return self.search.wavelength() + return None @log_runtime - def _stitch_interferograms(self, ifg_path_list): - self.stitched_ifg_dir.mkdir(parents=True, exist_ok=True) - grouped_images = group_by_date(ifg_path_list) - stitched_ifg_files = [] - for dates, cur_images in grouped_images.items(): - logger.info(f"{dates}: Stitching {len(cur_images)} images.") - outfile = self.stitched_ifg_dir / (_format_date_pair(*dates) + ".int") - stitched_ifg_files.append(outfile) - - stitching.merge_images( - cur_images, - outfile=outfile, - driver="ENVI", - out_bounds=self.bbox, - out_bounds_epsg=4326, - target_aligned_pixels=True, - overwrite=self.overwrite, - ) - - # Also need to write out a temp correlation file for unwrapping - with ProcessPoolExecutor(max_workers=self.n_workers) as _client: - cor_files = list(_client.map(create_cor, stitched_ifg_files)) - - return stitched_ifg_files, cor_files - - def _unwrap_ifgs(self, ifg_files, cor_files): - unwrapped_files = [] - if not self.do_unwrap: - logger.info("Skipping unwrapping") - return unwrapped_files - - self.unw_dir.mkdir(parents=True, exist_ok=True) - self.scratch_dir.mkdir(parents=True, exist_ok=True) - # Warp the water mask to match the interferogram - self._warped_water_mask = self.work_dir / "warped_mask.tif" - if self._warped_water_mask.exists(): - logger.info(f"Mask already exists at {self._warped_water_mask}") - else: - stitching.warp_to_match( - input_file=self.water_mask_filename, - match_file=ifg_files[0], - output_file=self._warped_water_mask, - ) - - # dolphin allows for parallel jobs, use PorcessPool here? - unw_paths, _ = unwrap.run( - ifg_files, - cor_files, - self.unw_dir, - unwrap_options=self.unwrap_options, - nlooks=int(np.prod(self.interferogram_options.looks)), - mask_filename=self._warped_water_mask, - overwrite=self.overwrite, - scratchdir=self.scratch_dir, - delete_intermediate=False, + def _run_dolphin(self, gslc_files: list[Path]) -> "OutputPaths": + mask = self.water_mask_filename if self.water_mask_filename.exists() else None + return run_displacement( + cslc_files=gslc_files, + work_directory=self.dolphin_dir, + options=self.dolphin, + mask_file=mask, + bounds=self.bbox, + config_yaml=self.work_dir / "dolphin_config.yaml", + subdataset=self._dolphin_subdataset(), + wavelength=self._dolphin_wavelength(), ) - # TODO: Maybe check the return codes here? or log the snaphu output? - return unw_paths + + # ------------------------------------------------------------------ + # Top-level run + # ------------------------------------------------------------------ @log_runtime - def run(self, starting_step: int = 1): - """Run the workflow.""" + def run(self, starting_step: int = 1) -> "OutputPaths": + """Run the full workflow. + + Parameters + ---------- + starting_step : int + Skip earlier stages if intermediate outputs are already on disk. + ``1`` = download, ``2`` = geocode (BurstSearch only, OPERA path + stitches geometry directly), ``3`` = dolphin. + + Returns + ------- + dolphin.workflows.displacement.OutputPaths + Output paths produced by dolphin. + + """ setup_nasa_netrc() set_num_threads(self.threads_per_worker) + self.work_dir.mkdir(parents=True, exist_ok=True) + self.log_dir.mkdir(parents=True, exist_ok=True) - # First step: data download - logger.info(f"Setting up {self.n_workers} workers for ThreadPoolExecutor") + is_safe = isinstance(self.search, BurstSearch) + is_nisar = isinstance(self.search, NisarGslcSearch) + # COMPASS is only needed for the raw-SAFE path. OPERA and NISAR both + # deliver pre-geocoded HDF5s. + needs_compass = is_safe + + # ---- Step 1: download (DEM, water mask, burst DB, source SLCs) ---- if starting_step <= 1: - with ThreadPoolExecutor(max_workers=self.n_workers) as _client: - # TODO: fix this odd workaround once the isce3 hanging issues - # are being resolved - self._client = _client - - dem_fut = self._download_dem() - burst_db_fut = self._download_burst_db() - water_mask_future = self._download_water_mask() - # Gather the futures once everything is downloaded - burst_db_file = burst_db_fut.result() + with ThreadPoolExecutor(max_workers=4) as pool: + dem_fut = pool.submit(create_dem, self.dem_filename, self._dem_bbox) + mask_fut = pool.submit( + create_water_mask, + self.water_mask_filename, + self._water_mask_bbox, + ) + # burst-db is only needed by COMPASS. + burst_db_fut = pool.submit(get_burst_db) if needs_compass else None + futures: list = [dem_fut, mask_fut] + if burst_db_fut is not None: + futures.append(burst_db_fut) + wait(futures) dem_fut.result() - wait([water_mask_future]) - - rslc_files = self._download_rslcs() + mask_fut.result() + burst_db_file = burst_db_fut.result() if burst_db_fut else None + self._download() + else: + burst_db_file = get_burst_db() if needs_compass else None - # Second step: + # ---- Step 2: produce CSLCs + stitch geometry ---- if starting_step <= 2: - burst_db_file = get_burst_db() - download_orbits(self.asf_query.out_dir, self.orbit_dir) - rslc_files = self._get_existing_rslcs() - self._geocode_slcs(rslc_files, self.dem_filename, burst_db_file) + if isinstance(self.search, NisarGslcSearch): + # NISAR GSLCs are already geocoded and carry their own + # per-frame metadata; there's no static-layers product to + # stitch, and dolphin reads the grid from the HDF5 itself. + logger.info( + "NISAR source: skipping COMPASS and geometry stitching;" + " dolphin will read the grid from the GSLC HDF5s." + ) + elif isinstance(self.search, OperaCslcSearch): + # OPERA path: pre-made CSLCs, just stitch the static layers. + static_files = self._existing_static_layers() + if not static_files: + msg = ( + f"No CSLC-STATIC layers found in" + f" {self.search.static_layers_dir!s}; cannot stitch geometry." + ) + raise RuntimeError(msg) + self._stitch_geometry(static_files) + else: + safes = self._existing_safes() + if not safes: + msg = ( + f"No SAFE directories found in {self.search.out_dir};" + " cannot geocode." + ) + raise RuntimeError(msg) + download_orbits(self.search.out_dir, self.orbit_dir) + assert burst_db_file is not None + _, static_files = self._geocode_slcs( + safes, self.dem_filename, burst_db_file + ) + self._stitch_geometry(static_files) + + # ---- Step 3: dolphin ---- + # Always re-collect GSLCs from disk before dolphin so a starting_step=3 + # run still finds them. + gslc_files = self._existing_gslcs() + logger.info(f"Found {len(gslc_files)} GSLC files for dolphin") + if not gslc_files: + where = ( + self.search.out_dir + if (is_nisar or isinstance(self.search, OperaCslcSearch)) + else self.gslc_dir + ) + msg = f"No GSLCs found in {where}; cannot run dolphin." + raise RuntimeError(msg) + + # Trim the stack to the largest spatially-consistent (burst, + # date) subset — any burst missing one or more of the chosen + # dates gets moved out to `excluded_cslcs/`. Keeps dolphin from + # forming a network across partially-covered bursts (which + # produces spatial discontinuities in the displacement field) + # and from crashing on 1-SLC per-burst stacks like the one + # that bit the BurstSearch path with a burst-boundary AOI. + gslc_files = self._apply_missing_data_filter(gslc_files) + + if len(gslc_files) < 2: + msg = ( + f"Only 1 usable GSLC survived for dolphin ({gslc_files[0].name});" + " need at least 2 to form an interferogram. Widen the date" + " range, pick a different track/frame, or drop the" + " `frequency` / `polarizations` pins so sweets can auto-" + "select whichever signature actually has a coherent stack." + ) + raise RuntimeError(msg) + out_paths = self._run_dolphin(gslc_files) + + # ---- Optional post-step: tropospheric correction ---- + if self.tropo.enabled: + if isinstance(self.search, NisarGslcSearch): + logger.warning( + "Tropo correction is not supported with the NISAR GSLC" + " source yet (no stitched incidence angle raster is" + " produced for NISAR). Skipping." + ) + else: + self._run_tropo(gslc_files, out_paths) - geom_path_list = self._get_burst_static_layers() - logger.info(f"Found {len(geom_path_list)} burst static layers") - self._stitch_geometry(geom_path_list) + return out_paths - if starting_step <= 3: - gslc_files = self._get_existing_gslcs() - logger.info( - f"Found {len(gslc_files)} existing GSLC files in {self.gslc_dir}" + @log_runtime + def _run_tropo( + self, gslc_files: list[Path], out_paths: "OutputPaths" + ) -> list[Path]: + """Apply OPERA L4 TROPO-ZENITH corrections to dolphin's outputs. + + The new `run_tropo_correction` reaches into `dolphin_dir/unwrapped/` + and `dolphin_dir/timeseries/` itself, correcting both the unwrapped + interferograms and the per-pair timeseries rasters in one shot. + """ + del out_paths # glob from disk — survives starting_step=3 reruns + incidence_path = self.geom_dir / "local_incidence_angle.tif" + if not incidence_path.exists(): + msg = ( + f"Tropo correction needs the stitched local_incidence_angle" + f" raster at {incidence_path}; rerun starting_step=2 first." ) - self._create_burst_interferograms(gslc_files) + raise RuntimeError(msg) + return run_tropo_correction( + slc_files=gslc_files, + dem_path=self.dem_filename, + incidence_angle_path=incidence_path, + dolphin_work_dir=self.dolphin_dir, + options=self.tropo, + ) - if starting_step <= 4: - logger.info(f"Searching for existing burst ifgs in {self.ifg_dir}") - ifg_path_list = self._get_existing_burst_ifgs() - logger.info(f"Found {len(ifg_path_list)} burst ifgs") - self._stitch_interferograms(ifg_path_list) +def _cfg_to_filename(cfg_path: Path) -> str: + """COMPASS runconfig path -> expected GSLC HDF5 filename. - stitched_ifg_files, cor_files = self._get_existing_stitched_ifgs() - logger.info(f"Found {len(stitched_ifg_files)} stitched ifgs") + e.g. ``geo_runconfig_20221029_t078_165578_iw3.yaml`` + -> ``t078_165578_iw3_20221029.h5`` + """ + date = cfg_path.name.split("_")[2] + burst = "_".join(cfg_path.stem.split("_")[3:]) + return f"{burst}_{date}.h5" - # make sure we have the water mask - create_water_mask(self.water_mask_filename, self._dem_bbox) - unwrapped_files = self._unwrap_ifgs(stitched_ifg_files, cor_files) - return unwrapped_files +def _cfg_to_static_filename(cfg_path: Path) -> str: + """COMPASS runconfig path -> expected static-layers HDF5 filename.""" + burst = "_".join(cfg_path.stem.split("_")[3:]) + return f"static_layers_{burst}.h5" diff --git a/src/sweets/dem.py b/src/sweets/dem.py index 89e82d2..f6f8b0a 100644 --- a/src/sweets/dem.py +++ b/src/sweets/dem.py @@ -5,18 +5,18 @@ from typing import Tuple import sardem.dem -from osgeo import gdal +from loguru import logger -from sweets._log import get_log, log_runtime +from sweets._log import log_runtime from sweets._types import Filename +from sweets._water_mask import WaterValue +from sweets._water_mask import create_water_mask as _create_water_mask_tiles from sweets.utils import get_cache_dir -logger = get_log(__name__) - @log_runtime def create_dem(output_name: Filename, bbox: Tuple[float, float, float, float]) -> Path: - """Create the output file.""" + """Download a Copernicus Global DEM clipped to `bbox`.""" output_name = Path(output_name).resolve() if output_name.exists(): logger.info(f"DEM already exists: {output_name}") @@ -35,24 +35,24 @@ def create_dem(output_name: Filename, bbox: Tuple[float, float, float, float]) - @log_runtime def create_water_mask( - output_name: Path, bbox: Tuple[float, float, float, float] + output_name: Path, + bbox: Tuple[float, float, float, float], + buffer_meters: float = 0.0, ) -> Path: - """Create the output file.""" - output_name = Path(output_name).resolve() - if output_name.exists(): - logger.info(f"Water mask already exists: {output_name}") - return output_name - - sardem.dem.main( - output_name=fspath(output_name), - bbox=bbox, - cache_dir=get_cache_dir(), - output_format="ROI_PAC", - data_source="NASA_WATER", - output_type="uint8", + """Create a high-resolution binary land(1) / water(0) mask. + + Mosaics ASF's `WATER_MASK/TILES` product (OpenStreetMap + ESA WorldCover, + served as 5-degree GeoTIFFs at ~0.0001-deg native posting) for `bbox`, + inverts to dolphin's convention (0=water/invalid, 1=land/valid), and + optionally dilates the water class by `buffer_meters` to mask shoreline + noise. + + Replaces the older ``NASA_WATER`` / SRTMSWBD path (broken on macOS, + restricted to ENVI) and the brief Copernicus-DEM threshold hack. + """ + return _create_water_mask_tiles( + bounds=bbox, + output=Path(output_name).resolve(), + buffer_meters=buffer_meters, + water_value=WaterValue.ZERO, ) - # Flip the mask so that 1 is land and 0 is water - ds = gdal.Open(fspath(output_name), gdal.GA_Update) - band = ds.GetRasterBand(1) - band.WriteArray(1 - band.ReadAsArray()) - return output_name diff --git a/src/sweets/download.py b/src/sweets/download.py index ef93cae..c2d85f7 100644 --- a/src/sweets/download.py +++ b/src/sweets/download.py @@ -1,326 +1,1167 @@ -#!/usr/bin/env python -"""Script for downloading through https://asf.alaska.edu/api/. +"""Sensor source models: raw S1 bursts, pre-made OPERA CSLCs, or NISAR GSLCs. -Base taken from -https://github.com/scottyhq/isce_notes/blob/master/BatchProcessing.md -https://github.com/scottstanie/apertools/blob/master/apertools/asfdownload.py +Three source classes are exposed; all are :class:`YamlModel` Pydantic models +with the same external shape (an AOI, a date range, an optional track and +``out_dir``) so :class:`sweets.core.Workflow` can swap between them: +- :class:`BurstSearch` — wraps :func:`burst2safe.burst2stack.burst2stack` + to download burst-trimmed ``.SAFE`` directories that the rest of the + workflow then geocodes via COMPASS. Default; works anywhere S1 flies. +- :class:`OperaCslcSearch` — wraps :func:`opera_utils.download.download_cslcs` + + :func:`opera_utils.download.download_cslc_static_layers` to grab + pre-geocoded OPERA CSLC HDF5s + their static layers from ASF DAAC. Skips + COMPASS entirely; locked to OPERA's 5 m x 10 m posting; CONUS-friendly + but coverage depends on what OPERA has actually produced for the AOI. +- :class:`NisarGslcSearch` — wraps :func:`opera_utils.nisar.run_download` + to grab pre-geocoded NISAR GSLC HDF5s (L-band, UTM, 5x10 m posting) + with CMR-based search and optional bbox-level subsetting. Skips COMPASS + and static layer stitching (NISAR GSLCs have no separate static layers + product). Coverage and availability depend on NISAR's acquisition plan. -You need a .netrc to download: - -# cat ~/.netrc -machine urs.earthdata.nasa.gov - login CHANGE - password CHANGE - +Authentication for any source relies on a ``~/.netrc`` entry for +``urs.earthdata.nasa.gov``. """ from __future__ import annotations -import argparse -import json -import os -import subprocess -import sys -import zipfile -from concurrent.futures import ThreadPoolExecutor from datetime import date, datetime -from functools import lru_cache from pathlib import Path from typing import Any, Literal, Optional -from urllib.parse import urlencode -import requests -from dateutil.parser import parse +from dateutil.parser import parse as parse_date from dolphin.workflows.config import YamlModel -from pydantic import ConfigDict, Field, PrivateAttr, field_validator, model_validator -from shapely.geometry import box +from pydantic import ConfigDict, Field, field_validator, model_validator +from shapely import wkt as shp_wkt +from shapely.geometry import Polygon, box -from ._log import get_log, log_runtime -from ._types import Filename -from ._unzip import unzip_all +from loguru import logger -logger = get_log(__name__) +from ._log import log_runtime -DIRNAME = os.path.dirname(os.path.abspath(__file__)) +FlightDirection = Literal["ASCENDING", "DESCENDING"] -class ASFQuery(YamlModel): - """Class holding the Sentinel-1 ASF query parameters.""" +class BurstSearch(YamlModel): + """Sentinel-1 burst search/download configuration. + Wraps :func:`burst2safe.burst2stack.burst2stack` so the user can pin a + small AOI (bbox or WKT polygon) plus a date range and a track number, + and get back ``.SAFE`` directories containing only the bursts that + intersect the AOI. + """ + + kind: Literal["safe"] = Field( + default="safe", + description="Discriminator for the source type. Always `safe`.", + ) out_dir: Path = Field( - Path(".") / "data", - description="Output directory for downloaded files", + Path("data"), + description="Directory where SAFE directories will be written.", validate_default=True, ) - bbox: Optional[tuple] = Field( + bbox: Optional[tuple[float, float, float, float]] = Field( None, description=( - "lower left lon, lat, upper right format e.g." - " bbox=(-150.2,65.0,-150.1,65.5)" + "Area of interest as (left, bottom, right, top) in decimal degrees." + " Either `bbox` or `wkt` must be set." ), ) wkt: Optional[str] = Field( None, - description="Well Known Text (WKT) string", + description=( + "Area of interest as a WKT polygon string (or path to a `.wkt` file)." + " Takes precedence over `bbox` if both are provided." + ), ) start: datetime = Field( ..., - description=( - "Starting time for search. Can be datetime or string (goes to" - " `dateutil.parse`)" - ), + description="Search start time (parsed by `dateutil.parser`).", ) end: datetime = Field( default_factory=datetime.now, - description=( - "Ending time for search. Can be datetime or string (goes to" - " `dateutil.parse`)" - ), + description="Search end time. Defaults to now.", ) track: Optional[int] = Field( None, alias="relativeOrbit", - description="Path number", + description="Sentinel-1 relative orbit / track number.", ) - flight_direction: Optional[Literal["ASCENDING", "DESCENDING"]] = Field( + flight_direction: Optional[FlightDirection] = Field( None, alias="flightDirection", - description="Direction of satellite during acquisition.", + description="Restrict to ASCENDING or DESCENDING acquisitions.", ) - frames: Optional[tuple[int, int]] = Field( + polarizations: list[str] = Field( + default_factory=lambda: ["VV"], + description="Polarizations to include (e.g. ['VV'], ['VV', 'VH']).", + ) + swaths: Optional[list[str]] = Field( None, - description="(start, end) range of ASF frames.", + description=( + "Restrict to specific subswaths (e.g. ['IW2']). If None, all swaths" + " covering the AOI are downloaded." + ), ) - unzip: bool = Field( - False, - description="Unzip downloaded files into .SAFE directories", + min_bursts: int = Field( + 1, + description="Minimum number of bursts a SAFE must contain to be kept.", + ge=1, ) - _url: str = PrivateAttr() - model_config = ConfigDict(extra="forbid") + all_anns: bool = Field( + True, + description=( + "Include annotations for all swaths in the produced SAFE files." + " Required by `s1-reader` / COMPASS, which always reads the IW2" + " annotation regardless of the subswath being processed." + ), + ) + + model_config = ConfigDict(extra="forbid", populate_by_name=True) + + # ------------------------------------------------------------------ + # Validators + # ------------------------------------------------------------------ @field_validator("start", "end", mode="before") @classmethod - def _parse_date(cls, v): + def _parse_datetime(cls, v: Any) -> datetime: if isinstance(v, datetime): return v - elif isinstance(v, date): - # Convert to datetime + if isinstance(v, date): return datetime.combine(v, datetime.min.time()) - return parse(v) + return parse_date(str(v)) @field_validator("out_dir") - def _is_absolute(cls, v): - return Path(v).resolve() + @classmethod + def _absolute_out_dir(cls, v: Path) -> Path: + return Path(v).expanduser().resolve() - @field_validator("flight_direction") + @field_validator("flight_direction", mode="before") @classmethod - def _accept_prefixes(cls, v): + def _normalize_flight_direction(cls, v: Any) -> Optional[str]: if v is None: - return v - if v.lower().startswith("a"): + return None + s = str(v).upper() + if s.startswith("A"): return "ASCENDING" - elif v.lower().startswith("d"): + if s.startswith("D"): return "DESCENDING" + msg = f"Unrecognized flight direction: {v!r}" + raise ValueError(msg) + + @field_validator("polarizations") + @classmethod + def _upper_pols(cls, v: list[str]) -> list[str]: + return [p.upper() for p in v] + + @field_validator("swaths") + @classmethod + def _upper_swaths(cls, v: Optional[list[str]]) -> Optional[list[str]]: + return [s.upper() for s in v] if v else v + + @model_validator(mode="after") + def _check_aoi_and_dates(self) -> "BurstSearch": + if not self.wkt and not self.bbox: + msg = "Must provide either `bbox` or `wkt`" + raise ValueError(msg) + if self.wkt and Path(self.wkt).exists(): + self.wkt = Path(self.wkt).read_text().strip() + if self.wkt: + try: + shp_wkt.loads(self.wkt) + except Exception as e: + msg = f"Invalid WKT polygon: {e}" + raise ValueError(msg) from e + if self.end < self.start: + msg = f"`end` ({self.end}) must be after `start` ({self.start})" + raise ValueError(msg) + return self + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + @property + def aoi(self) -> Polygon: + """Return the search AOI as a shapely Polygon.""" + if self.wkt: + return shp_wkt.loads(self.wkt) + assert self.bbox is not None # enforced in validator + return box(*self.bbox) + + def summary(self) -> str: + """Return a human-readable summary of the planned search.""" + bounds = self.aoi.bounds + return ( + "BurstSearch:\n" + f" AOI bounds : {bounds}\n" + f" Dates : {self.start.date()} -> {self.end.date()}\n" + f" Track : {self.track}\n" + f" Direction : {self.flight_direction or 'any'}\n" + f" Pols : {self.polarizations}\n" + f" Swaths : {self.swaths or 'any'}\n" + f" Output : {self.out_dir}" + ) - @model_validator(mode="before") - def _check_search_area(cls, values: Any): - if isinstance(values, dict): - if not values.get("wkt"): - if values.get("bbox") is not None: - values["wkt"] = box(*values["bbox"]).wkt - else: - raise ValueError("Must provide a bbox or wkt") - - elif Path(values["wkt"]).exists(): - values["wkt"] = Path(values["wkt"]).read_text().strip() - - # Check that end is after start - if values.get("start") is not None and values.get("end") is not None: - if values["end"] < values["start"]: - raise ValueError("End must be after start") - return values - - def __init__(self, **data: Any) -> None: - super().__init__(**data) - # Form the url for the ASF query. - self._url = self._form_url() - - def _form_url(self) -> str: - """Form the url for the ASF query.""" - frame_str = f"{self.frames[0]}-{self.frames[1]}" if self.frames else None - params = dict( - # bbox is getting deprecated in favor of intersectsWith - # https://docs.asf.alaska.edu/api/keywords/#geospatial-parameters - intersectsWith=self.wkt, + @log_runtime + def download(self) -> list[Path]: + """Download bursts covering the AOI as SAFE directories. + + Returns + ------- + list[Path] + Paths of the produced ``.SAFE`` directories. + + """ + # Imported lazily so importing this module is cheap and so users + # without burst2safe still get a clear error. + from burst2safe.burst2stack import burst2stack + + self.out_dir.mkdir(parents=True, exist_ok=True) + logger.info(self.summary()) + + result = burst2stack( + rel_orbit=self.track, + start_date=self.start, + end_date=self.end, + extent=self.aoi, + polarizations=self.polarizations, + swaths=self.swaths, + min_bursts=self.min_bursts, + all_anns=self.all_anns, + work_dir=self.out_dir, + ) + safes = sorted(Path(p) for p in result) + logger.info(f"Downloaded {len(safes)} SAFE directories to {self.out_dir}") + if self.flight_direction is not None: + safes = _filter_by_flight_direction(safes, self.flight_direction) + return safes + + def existing_safes(self) -> list[Path]: + """Return any SAFEs already present in `out_dir` (does not query ASF).""" + return sorted(self.out_dir.glob("S1[AB]_*.SAFE")) + + +def _filter_by_flight_direction( + safes: list[Path], flight_direction: FlightDirection +) -> list[Path]: + """Drop SAFEs whose first manifest does not match `flight_direction`. + + burst2safe does not expose a flight-direction filter directly. We can + cheaply infer it from the manifest.safe inside the .SAFE bundle. + """ + import xml.etree.ElementTree as ET + + keep: list[Path] = [] + for s in safes: + manifest = s / "manifest.safe" + if not manifest.exists(): + keep.append(s) + continue + try: + tree = ET.parse(manifest) + except ET.ParseError as e: + logger.warning(f"Could not parse {manifest}: {e}; keeping SAFE.") + keep.append(s) + continue + text = ET.tostring(tree.getroot(), encoding="unicode") + upper = flight_direction.upper() + if upper in text.upper(): + keep.append(s) + else: + logger.info(f"Dropping {s.name}: not {upper}") + return keep + + +# ---------------------------------------------------------------------------- +# OPERA CSLC source +# ---------------------------------------------------------------------------- + + +class OperaCslcSearch(YamlModel): + """Pre-made OPERA CSLC search/download configuration. + + Wraps :func:`opera_utils.download.download_cslcs` and + :func:`opera_utils.download.download_cslc_static_layers` to fetch + pre-geocoded OPERA CSLC HDF5s + their per-burst static layers from the + ASF DAAC. Posting is whatever OPERA produced (currently 5 m x 10 m for + Sentinel-1 OPERA CSLCs); use :class:`BurstSearch` instead if you need + a custom posting. + """ + + kind: Literal["opera-cslc"] = Field( + default="opera-cslc", + description="Discriminator for the source type. Always `opera-cslc`.", + ) + out_dir: Path = Field( + Path("data"), + description=( + "Directory where the OPERA CSLC HDF5s and static layers will be" + " written. Static layers go into a `static_layers/` subdirectory." + ), + validate_default=True, + ) + bbox: Optional[tuple[float, float, float, float]] = Field( + None, + description=( + "Area of interest as (left, bottom, right, top) in decimal degrees." + " Either `bbox` or `wkt` must be set." + ), + ) + wkt: Optional[str] = Field( + None, + description=( + "Area of interest as a WKT polygon string (or path to a `.wkt` file)." + ), + ) + start: datetime = Field( + ..., + description="Search start time (parsed by `dateutil.parser`).", + ) + end: datetime = Field( + default_factory=datetime.now, + description="Search end time. Defaults to now.", + ) + track: Optional[int] = Field( + None, + alias="relativeOrbit", + description="Sentinel-1 relative orbit / track number.", + ) + burst_ids: Optional[list[str]] = Field( + None, + description=( + "Restrict to specific OPERA burst IDs (e.g. ['t078_165573_iw2']);" + " if None, ASF returns whichever bursts intersect the AOI." + ), + ) + max_jobs: int = Field( + 3, + ge=1, + description="Concurrent download jobs.", + ) + + model_config = ConfigDict(extra="forbid", populate_by_name=True) + + # ------------------------------------------------------------------ + # Validators (mirrors BurstSearch shape) + # ------------------------------------------------------------------ + + @field_validator("start", "end", mode="before") + @classmethod + def _parse_datetime(cls, v: Any) -> datetime: + if isinstance(v, datetime): + return v + if isinstance(v, date): + return datetime.combine(v, datetime.min.time()) + return parse_date(str(v)) + + @field_validator("out_dir") + @classmethod + def _absolute_out_dir(cls, v: Path) -> Path: + return Path(v).expanduser().resolve() + + @model_validator(mode="after") + def _check_aoi_and_dates(self) -> "OperaCslcSearch": + if not self.wkt and not self.bbox: + msg = "Must provide either `bbox` or `wkt`" + raise ValueError(msg) + if self.wkt and Path(self.wkt).exists(): + self.wkt = Path(self.wkt).read_text().strip() + if self.wkt: + try: + shp_wkt.loads(self.wkt) + except Exception as e: + msg = f"Invalid WKT polygon: {e}" + raise ValueError(msg) from e + if self.end < self.start: + msg = f"`end` ({self.end}) must be after `start` ({self.start})" + raise ValueError(msg) + return self + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + @property + def aoi(self) -> Polygon: + """Return the search AOI as a shapely Polygon.""" + if self.wkt: + return shp_wkt.loads(self.wkt) + assert self.bbox is not None + return box(*self.bbox) + + @property + def static_layers_dir(self) -> Path: + """Return the directory where CSLC-STATIC HDF5s live.""" + return self.out_dir / "static_layers" + + def summary(self) -> str: + """Return a human-readable summary of the planned search.""" + return ( + "OperaCslcSearch:\n" + f" AOI bounds : {self.aoi.bounds}\n" + f" Dates : {self.start.date()} -> {self.end.date()}\n" + f" Track : {self.track}\n" + f" Burst IDs : {self.burst_ids or 'auto (from AOI)'}\n" + f" Output : {self.out_dir}" + ) + + def _resolve_burst_ids(self) -> list[str]: + """Get the list of OPERA burst IDs covering the AOI. + + If the user supplied burst_ids explicitly, use them. Otherwise query + ASF with the AOI + track to discover them. Querying without an + explicit list returns one result *per acquisition*, so we + deduplicate to unique burst IDs before passing to download_cslcs + (which expects burst IDs and applies the date filter itself). + """ + if self.burst_ids: + return list(self.burst_ids) + from opera_utils.download import search_cslcs + + bounds: tuple[float, float, float, float] = tuple(self.aoi.bounds) # type: ignore[assignment] + results = search_cslcs( start=self.start, end=self.end, - processingLevel="SLC", - relativeOrbit=self.track, - flightDirection=self.flight_direction, - maxResults=2000, - output="geojson", - platform="S1", # Currently only supporting S1 right now - beamMode="IW", - frame=frame_str, + bounds=bounds, + track=self.track, ) - params = {k: v for k, v in params.items() if v is not None} - base_url = "https://api.daac.asf.alaska.edu/services/search/param?{params}" - return base_url.format(params=urlencode(params)) - - def query_results(self) -> dict: - """Query the ASF API and save the results to a file.""" - return _query_url(self._url) - - @staticmethod - def _get_urls(results: dict) -> list[str]: - return [r["properties"]["url"] for r in results["features"]] - - @staticmethod - def _file_names(results: dict) -> list[str]: - return [r["properties"]["fileName"] for r in results["features"]] - - def _download_with_aria(self, urls, log_dir: Filename = Path(".")): - url_filename = self.out_dir / "urls.txt" - with open(self.out_dir / url_filename, "w") as f: - for u in urls: - f.write(u + "\n") - - log_filename = Path(log_dir) / "aria2c.log" - aria_cmd = f'aria2c -i "{url_filename}" -d "{self.out_dir}" --continue=true' - logger.info("Downloading with aria2c") - logger.info(aria_cmd) - with open(log_filename, "w") as f: - subprocess.run(aria_cmd, shell=True, stdout=f, stderr=f, text=True) - - def _download_with_wget(self, urls, log_dir: Filename = Path(".")): - def download_url(idx_url_pair): - idx, u = idx_url_pair - log_filename = Path(log_dir) / f"wget_{idx:02d}.log" - with open(log_filename, "w") as f: - wget_cmd = f'wget -nc -c "{u}" -P "{self.out_dir}"' - logger.info(f"({idx} / {len(urls)}): Downloading {u} with wget") - logger.info(wget_cmd) - subprocess.run(wget_cmd, shell=True, stdout=f, stderr=f, text=True) - - # Parallelize the download using ThreadPoolExecutor - with ThreadPoolExecutor(max_workers=3) as executor: - list(executor.map(download_url, enumerate(urls))) + seen: dict[str, None] = {} + for r in results: # type: ignore[union-attr] + props = getattr(r, "properties", {}) + bid = props.get("operaBurstID") or props.get("burstID") + if bid: + seen[bid.lower().replace("-", "_")] = None + burst_ids = sorted(seen) + if not burst_ids: + msg = ( + "No OPERA CSLCs found for the requested AOI / track / dates." + " Coverage may be missing — fall back to BurstSearch + COMPASS." + ) + raise RuntimeError(msg) + logger.info(f"Resolved {len(burst_ids)} OPERA burst IDs from ASF") + return burst_ids @log_runtime - def download(self, log_dir: Filename = Path(".")) -> list[Path]: - # Start by saving data available as geojson - results = self.query_results() - urls = self._get_urls(results) + def download(self) -> list[Path]: + """Download OPERA CSLC HDF5 files into `out_dir`. + + Returns + ------- + list[Path] + Paths to the downloaded ``.h5`` files (one per burst per date). - if not urls: - raise ValueError("No results found for query") + """ + from opera_utils.download import download_cslcs - # Make the output directory - logger.info(f"Saving to {self.out_dir}") self.out_dir.mkdir(parents=True, exist_ok=True) - file_names = [self.out_dir / f for f in self._file_names(results)] - - # TODO: use aria if available? or just make wget parallel... - self._download_with_wget(urls, log_dir=log_dir) - - if self.unzip: - # Change to .SAFE extension - logger.info("Unzipping files...") - file_names = unzip_all(self.out_dir, out_dir=self.out_dir) - return file_names - - -@lru_cache(maxsize=10) -def _query_url(url: str) -> dict: - """Query the ASF API and save the results to a file.""" - logger.info("Querying url:") - print(url, file=sys.stderr) - resp = requests.get(url) - resp.raise_for_status() - results = json.loads(resp.content.decode("utf-8")) - return results - - -def cli(): - """Run the command line interface.""" - p = argparse.ArgumentParser() - p.add_argument( - "--out-dir", - "-o", - help="Path to directory for saving output files (default=%(default)s)", - default="./", - ) - p.add_argument( - "--bbox", - nargs=4, - metavar=("left", "bottom", "right", "top"), - type=float, - help=( - "Bounding box of area of interest (e.g. --bbox -106.1 30.1 -103.1 33.1 ). " + logger.info(self.summary()) + + burst_ids = self._resolve_burst_ids() + files = download_cslcs( + burst_ids=burst_ids, + output_dir=self.out_dir, + start=self.start, + end=self.end, + max_jobs=self.max_jobs, + ) + files = sorted(Path(f) for f in files) + logger.info(f"Downloaded {len(files)} OPERA CSLC files to {self.out_dir}") + return files + + @log_runtime + def download_static_layers(self) -> list[Path]: + """Download the CSLC-STATIC HDF5 files for the resolved burst IDs.""" + from opera_utils.download import download_cslc_static_layers + + self.static_layers_dir.mkdir(parents=True, exist_ok=True) + burst_ids = self._resolve_burst_ids() + files = download_cslc_static_layers( + burst_ids=burst_ids, + output_dir=self.static_layers_dir, + max_jobs=self.max_jobs, + ) + files = sorted(Path(f) for f in files) + logger.info( + f"Downloaded {len(files)} CSLC-STATIC files to {self.static_layers_dir}" + ) + return files + + def existing_cslcs(self) -> list[Path]: + """Return any OPERA CSLC HDF5s already present in `out_dir`.""" + return sorted(self.out_dir.glob("OPERA_L2_CSLC-S1_*.h5")) + + def existing_static_layers(self) -> list[Path]: + """Return any CSLC-STATIC HDF5s already present in `static_layers_dir`.""" + return sorted(self.static_layers_dir.glob("OPERA_L2_CSLC-S1-STATIC_*.h5")) + + # Mirror BurstSearch.existing_safes for symmetry — used by Workflow to + # check whether the download step can be skipped. + def existing_files(self) -> list[Path]: + return self.existing_cslcs() + + +# ---------------------------------------------------------------------------- +# NISAR GSLC source +# ---------------------------------------------------------------------------- + + +class NisarGslcSearch(YamlModel): + """Pre-made NISAR GSLC search/download configuration. + + Wraps :func:`opera_utils.nisar.run_download` to search CMR for NISAR + GSLC products covering the AOI + date range, fetch the matching HDF5s, + and optionally subset each one to the AOI in a single pass. NISAR + GSLCs are already geocoded (UTM projection) and have no separate + "static layers" product, so the downstream workflow skips both COMPASS + and the geometry stitching step. + """ + + kind: Literal["nisar-gslc"] = Field( + default="nisar-gslc", + description="Discriminator for the source type. Always `nisar-gslc`.", + ) + out_dir: Path = Field( + Path("data"), + description="Directory where the NISAR GSLC HDF5s will be written.", + validate_default=True, + ) + bbox: Optional[tuple[float, float, float, float]] = Field( + None, + description=( + "Area of interest as (left, bottom, right, top) in decimal degrees." + " Used for both the CMR query and the bbox subset. Either `bbox`" + " or `wkt` must be set." ), ) - p.add_argument( - "--wkt-file", - help="Filename of a WKT polygon to search within", - ) - p.add_argument( - "--start", - help="Starting date for query (recommended: YYYY-MM-DD)", - ) - p.add_argument( - "--end", - help="Ending date for query (recommended: YYYY-MM-DD)", - ) - p.add_argument( - "--relativeOrbit", - type=int, - help="Limit to one path / relativeOrbit", - ) - p.add_argument( - "--flightDirection", - type=str.upper, - help="Satellite orbit direction during acquisition", - choices=["A", "D", "ASCENDING", "DESCENDING"], - ) - p.add_argument( - "--maxResults", - type=int, - default=2000, - help="Limit of number of products to download (default=%(default)s)", - ) - p.add_argument( - "--query-only", - action="store_true", - help="display available data in format of --query-file, no download", - ) - args = p.parse_args() - - q = ASFQuery(**vars(args)) - if args.query_only: - q.query_only() - else: - q.download_data() - - -def _unzip_one(filepath: Filename, pol: str = "vv", out_dir=Path(".")): - """Unzip one Sentinel-1 zip file.""" - if pol is None: - pol = "" - with zipfile.ZipFile(filepath, "r") as zipref: - # Get the list of files in the zip - names_to_extract = [ - fp for fp in zipref.namelist() if pol.lower() in str(fp).lower() - ] - zipref.extractall(path=out_dir, members=names_to_extract) - - -def delete_tiffs_within_zip(data_path: Filename, pol: str = "vh"): - """Delete (in place) the tiff files within a zip file matching `pol`.""" - cmd = f"""find {data_path} -name "S*.zip" | xargs -I{{}} -n1 -P4 zip -d {{}} '*-vh-*.tiff'""" # noqa - logger.info(cmd) - subprocess.run(cmd, shell=True, check=True) - - -if __name__ == "__main__": - cli() + wkt: Optional[str] = Field( + None, + description=( + "Area of interest as a WKT polygon string (or path to a `.wkt`" + " file). Converted to a bbox by `run_download`." + ), + ) + start: datetime = Field( + ..., + description="Search start time (parsed by `dateutil.parser`).", + ) + end: datetime = Field( + default_factory=datetime.now, + description="Search end time. Defaults to now.", + ) + track: Optional[int] = Field( + None, + alias="relative_orbit_number", + description=( + "NISAR relative orbit / track number — the `Track` field on ASF" + " Vertex, the `RRR` digits in the granule filename. Constant" + " across repeat passes. Combined with `frame` it pins a single" + " repeat-pass stack." + ), + ) + frame: Optional[int] = Field( + None, + alias="track_frame_number", + description=( + "NISAR track-frame number — the `Frame` field on ASF Vertex, the" + " `TTT` digits in the granule filename (e.g. `71`). Constant" + " across repeat passes." + ), + ) + frequency: Optional[Literal["A", "B"]] = Field( + default=None, + description=( + "NISAR frequency band: `A` (L-band primary) or `B`. If left as" + " the default (None), sweets peeks at the first matching CMR" + " hit and uses whichever frequency is actually present in the" + " HDF5. Different NISAR product releases ship different bands" + " (early BETA was A; recent PR products are B), so guessing is" + " usually wrong." + ), + ) + polarizations: Optional[list[str]] = Field( + None, + description=( + "Polarizations to keep (e.g. ['HH']). If left as the default" + " (None), sweets uses every polarization present under the" + " resolved frequency in the first matching CMR hit." + ), + ) + short_name: str = Field( + default="NISAR_L2_GSLC_BETA_V1", + description="CMR collection short-name to query.", + ) + num_workers: int = Field( + default=4, + ge=1, + description="Concurrent download jobs.", + ) + + model_config = ConfigDict(extra="forbid", populate_by_name=True) + + # ------------------------------------------------------------------ + # Validators + # ------------------------------------------------------------------ + + @field_validator("start", "end", mode="before") + @classmethod + def _parse_datetime(cls, v: Any) -> datetime: + if isinstance(v, datetime): + return v + if isinstance(v, date): + return datetime.combine(v, datetime.min.time()) + return parse_date(str(v)) + + @field_validator("out_dir") + @classmethod + def _absolute_out_dir(cls, v: Path) -> Path: + return Path(v).expanduser().resolve() + + @field_validator("polarizations") + @classmethod + def _upper_pols(cls, v: Optional[list[str]]) -> Optional[list[str]]: + return [p.upper() for p in v] if v else v + + @model_validator(mode="after") + def _check_aoi_and_dates(self) -> "NisarGslcSearch": + if not self.wkt and not self.bbox: + msg = "Must provide either `bbox` or `wkt`" + raise ValueError(msg) + if self.wkt and Path(self.wkt).exists(): + self.wkt = Path(self.wkt).read_text().strip() + if self.wkt: + try: + shp_wkt.loads(self.wkt) + except Exception as e: + msg = f"Invalid WKT polygon: {e}" + raise ValueError(msg) from e + if self.end < self.start: + msg = f"`end` ({self.end}) must be after `start` ({self.start})" + raise ValueError(msg) + return self + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + @property + def aoi(self) -> Polygon: + if self.wkt: + return shp_wkt.loads(self.wkt) + assert self.bbox is not None + return box(*self.bbox) + + def hdf5_subdataset(self) -> str: + """Return the dolphin `input_options.subdataset` path for this config. + + NISAR GSLCs put the complex data at + ``/science/LSAR/GSLC/grids/frequency{A,B}/{POL}``. If `frequency` + and `polarizations` are unset, this peeks at the first cached HDF5 + in `out_dir` (or, if there isn't one yet, the first matching CMR + hit) to learn what's actually in the product. + """ + freq, pols = self._resolve_frequency_and_pols() + return f"/science/LSAR/GSLC/grids/frequency{freq}/{pols[0]}" + + def summary(self) -> str: + return ( + "NisarGslcSearch:\n" + f" AOI bounds : {self.aoi.bounds}\n" + f" Dates : {self.start.date()} -> {self.end.date()}\n" + f" Track : {self.track or 'any'}\n" + f" Frame : {self.frame or 'any'}\n" + f" Frequency : {self.frequency or 'auto'}\n" + f" Polarizations : {self.polarizations or 'auto'}\n" + f" CMR short_name : {self.short_name}\n" + f" Output : {self.out_dir}" + ) + + def _resolve_frequency_and_pols(self) -> tuple[str, list[str]]: + """Pick the actual `frequency` + polarizations to feed dolphin / run_download. + + Order of preference: + + 1. Already-downloaded HDF5 in ``out_dir`` — peek inside. + 2. First CMR hit — open it remotely. + + Returns the user's overrides where they make sense (e.g. they + asked for `HH` and the file does have it), otherwise falls back + to whichever frequency / polarization is actually present in + the HDF5. Logs a warning when the user-requested values don't + match what's available. + """ + local = self.existing_files() + if local: + freq, pols = _peek_nisar_grid(local[0]) + else: + from opera_utils.nisar import search + + results = search( + bbox=tuple(self.aoi.bounds), # type: ignore[arg-type] + relative_orbit_number=self.track, + track_frame_number=self.frame, + start_datetime=self.start, + end_datetime=self.end, + short_name=self.short_name, + ) + if not results: + msg = ( + "No NISAR GSLC products found for the requested AOI /" + " track / frame / dates. Cannot resolve frequency." + ) + raise RuntimeError(msg) + with results[0]._open() as hf: + freq, pols = _peek_nisar_grid_from_handle(hf) + return self._reconcile(freq, pols) + + def _reconcile( + self, available_freq: str, available_pols: list[str] + ) -> tuple[str, list[str]]: + """Reconcile user request against what's actually in the file.""" + if self.frequency and self.frequency != available_freq: + logger.warning( + f"NISAR: requested frequency={self.frequency!r} but the" + f" product only has frequency{available_freq!r}; using" + f" frequency{available_freq!r}." + ) + freq = available_freq + if self.polarizations: + kept = [p for p in self.polarizations if p in available_pols] + dropped = [p for p in self.polarizations if p not in available_pols] + if dropped: + logger.warning( + f"NISAR: requested polarizations {dropped} not present" + f" in product (available: {available_pols}); using" + f" {kept or available_pols} instead." + ) + pols = kept or available_pols + else: + pols = available_pols + return freq, pols + + @log_runtime + def download(self) -> list[Path]: + """Search + download + bbox-subset NISAR GSLC HDF5s into `out_dir`. + + Per-product peeking: each search result is opened remotely to + learn its actual ``(frequency, polarizations)`` signature. We + keep only the largest signature group so dolphin gets a stack + with a single shared subdataset path; mismatched cycles get + skipped with a warning. Row/col slices are computed per product + (not once for the whole stack) so cycles whose grid origins + don't perfectly line up still get a valid subset. + """ + from opera_utils.nisar import search + from opera_utils.nisar._download import process_file + + self.out_dir.mkdir(parents=True, exist_ok=True) + logger.info(self.summary()) + + results = search( + bbox=tuple(self.aoi.bounds), # type: ignore[arg-type] + relative_orbit_number=self.track, + track_frame_number=self.frame, + start_datetime=self.start, + end_datetime=self.end, + short_name=self.short_name, + ) + if not results: + msg = ( + "No NISAR GSLC products found for the requested AOI /" + " track / frame / dates." + ) + raise RuntimeError(msg) + + groups = _group_nisar_results_by_signature(results) + logger.info( + f"NISAR found {len(results)} hit(s) across " + f"{len(groups)} (frequency, polarization) signature(s):" + ) + for sig, items in groups.items(): + logger.info(f" frequency{sig[0]}/{sorted(sig[1])}: {len(items)} cycle(s)") + + ranked = self._rank_signatures(groups) + bounds: tuple[float, float, float, float] = tuple(self.aoi.bounds) # type: ignore[assignment] + + downloaded: list[Path] = [] + attempted: list[str] = [] + for sig in ranked: + chosen = groups[sig] + chosen_freq, chosen_pols = self._reconcile(sig[0], sorted(sig[1])) + logger.info( + f"NISAR trying frequency={chosen_freq}," + f" polarizations={chosen_pols} ({len(chosen)} cycle(s));" + f" {len(results) - len(chosen)} cycle(s) belong to other" + " signatures." + ) + attempted.append(f"frequency{chosen_freq}/{chosen_pols}") + + group_outputs = self._download_group( + chosen=chosen, + chosen_freq=chosen_freq, + chosen_pols=chosen_pols, + bounds=bounds, + process_file=process_file, + ) + if group_outputs: + downloaded.extend(group_outputs) + break + logger.warning( + f"NISAR: signature frequency{chosen_freq}/{chosen_pols} produced" + " no usable GeoTIFFs (bbox likely outside the actual data" + " extent); falling back to next signature." + ) + + downloaded.sort() + if not downloaded: + msg = ( + f"NISAR: no usable GeoTIFFs for AOI {bounds} after trying" + f" signatures {attempted}. Either the bbox doesn't actually" + " intersect any product's grid extent, or the pinned" + " frequency/polarizations don't match what's available." + " Try widening the date range or removing the `frequency` /" + " `polarizations` pins from the config to let sweets" + " auto-detect." + ) + raise RuntimeError(msg) + logger.info(f"Wrote {len(downloaded)} NISAR GSLC GeoTIFFs to {self.out_dir}") + return downloaded + + def _download_group( + self, + chosen: list, # noqa: ANN001 + chosen_freq: str, + chosen_pols: list[str], + bounds: tuple[float, float, float, float], + process_file, # noqa: ANN001 + ) -> list[Path]: + """Download + GeoTIFF-convert every product in one signature group.""" + outputs: list[Path] = [] + for product in chosen: + short = Path(product.filename).name + try: + rows, cols = _get_per_product_rowcol_slice(product, bounds, chosen_freq) + except Exception as e: + logger.warning( + f"NISAR: failed to compute row/col slice for {short}:" + f" {e}; skipping." + ) + continue + try: + h5_path = Path( + process_file( + url=product.filename, + rows=rows, + cols=cols, + output_dir=self.out_dir, + frequency=chosen_freq, + polarizations=chosen_pols, + ) + ) + except Exception as e: + logger.warning(f"NISAR: download failed for {short}: {e}; skipping.") + continue + # NISAR HDF5s store coordinates as separate xCoordinates / + # yCoordinates 1D arrays. Complex data makes CF-compliance hard. + # GDAL's HDF5 driver reads an identity geotransform for the + # subdataset. Wrap each polarization in a tiny VRT that injects + # the real geotransform + SRS on top of the HDF5 subdataset — + # dolphin opens the VRT natively and the HDF5 stays the single + # source of truth for the pixel values. + try: + vrt_paths = _nisar_h5_to_vrts( + h5_path=h5_path, + frequency=chosen_freq, + polarizations=chosen_pols, + ) + except Exception as e: + logger.warning( + f"NISAR: VRT wrap failed for {h5_path.name}:" f" {e}; skipping." + ) + continue + outputs.extend(vrt_paths) + return outputs + + def _rank_signatures( + self, + groups: dict[tuple[str, frozenset[str]], list], + ) -> list[tuple[str, frozenset[str]]]: + """Rank (frequency, polarization-set) groups from best to worst. + + Sort key (descending): + + 1. Stack size — more cycles is always better for InSAR. + 2. User polarization overlap — pols are what dolphin actually + consumes, so a VV pin matters more than a frequency pin. + 3. User frequency match — soft preference; sweets will override + it if the pinned frequency has no data in the AOI. + + The caller iterates this list and stops at the first signature + whose products actually yield usable GeoTIFFs. + """ + user_pols = set(self.polarizations or []) + user_freq = self.frequency + + def key(item: tuple[tuple[str, frozenset[str]], list]) -> tuple[int, int, int]: + sig, prods = item + n_cycles = len(prods) + pol_match = int(bool(user_pols and (user_pols & sig[1]))) + freq_match = int(user_freq is not None and sig[0] == user_freq) + return (n_cycles, pol_match, freq_match) + + return [sig for sig, _ in sorted(groups.items(), key=key, reverse=True)] + + def existing_files(self) -> list[Path]: + """Return on-disk NISAR GSLC VRTs (the dolphin-ready wrappers). + + sweets stores the raw subset HDF5s (written by opera-utils' + `process_file`) alongside a tiny per-polarization VRT wrapper + that injects the real geotransform + SRS on top of the HDF5 + subdataset. dolphin consumes the VRTs. + """ + return sorted(self.out_dir.glob("NISAR_L2_*GSLC*.*.vrt")) + + def wavelength(self) -> float: + """Radar wavelength (m) for the downloaded stack. + + Three-tier strategy, from most authoritative to most generic: + + 1. **Runtime read from the HDF5.** NISAR D-102269 §4 specifies a + Float64 scalar ``centerFrequency`` under each + ``/science/LSAR/GSLC/grids/frequency{A,B}`` group, carrying + the exact carrier of the processed image in Hz. When present + we return ``C / centerFrequency`` directly. + 2. **Filename MODE lookup.** Current BETA PR products don't + populate ``centerFrequency``, but they do embed the + acquisition MODE code in slot 8 of the NISAR D-102269 §3.4 + granule filename (e.g. ``4005`` = 40+5 MHz split). Combined + with the chosen frequency letter (detected from which + ``frequency{A,B}`` subgroup exists in the downloaded subset), + ``NISAR_L_MODE_CENTERS_HZ`` from ``dolphin.constants`` gives + us the exact center frequency for that mode, per Figure 3-1. + 3. **Coarse band fallback.** If neither of the above resolves + (unrecognized MODE, or the granule doesn't start with + ``NISAR_L`` / ``NISAR_S``), fall back to the generic band + constants. ``NISAR_L_WAVELENGTH`` matches the full-band + 77 MHz mode exactly, which is not in the MODE table on + purpose — the fallback is correct for it. + + The caller forwards the result to + ``build_displacement_config(wavelength=...)`` so dolphin writes + timeseries outputs in meters instead of radians. + """ + import h5py + + from dolphin import constants + from dolphin.constants import SPEED_OF_LIGHT + + h5_files = sorted(self.out_dir.glob("NISAR_*GSLC*.h5")) + candidates = h5_files if h5_files else self.existing_files() + assert candidates, f"No NISAR files in {self.out_dir}; run download() first" + + chosen_letter: Optional[str] = None + if h5_files: + with h5py.File(h5_files[0], "r") as hf: + for freq_letter in ("A", "B"): + cf_path = ( + f"/science/LSAR/GSLC/grids/frequency{freq_letter}" + "/centerFrequency" + ) + if cf_path in hf: + return SPEED_OF_LIGHT / float(hf[cf_path][()]) + # No centerFrequency → remember which frequency letter is + # actually in the subset so the MODE-table lookup below + # can pick the right column. + for freq_letter in ("A", "B"): + if f"/science/LSAR/GSLC/grids/frequency{freq_letter}" in hf: + chosen_letter = freq_letter + break + + name = candidates[0].name + parts = name.split("_") + # NISAR_IL_PT_PROD_CYL_REL_P_FRM_MODE_POLE_... -> MODE is slot 8. + if len(parts) >= 9 and chosen_letter is not None and parts[1].startswith("L"): + mode = parts[8] + centers = constants.NISAR_L_MODE_CENTERS_HZ.get(mode) + if centers is not None: + center_hz = centers[0 if chosen_letter == "A" else 1] + if center_hz is not None: + return SPEED_OF_LIGHT / center_hz + logger.warning( + f"NISAR MODE {mode!r} has no frequency{chosen_letter}" + " entry in Figure 3-1; falling back to the generic" + " L-band wavelength." + ) + + stem = name.upper() + if stem.startswith("NISAR_L"): + return constants.NISAR_L_WAVELENGTH + if stem.startswith("NISAR_S"): + return constants.NISAR_S_WAVELENGTH + msg = f"Cannot infer NISAR band from filename {name}" + raise RuntimeError(msg) + + +def _group_nisar_results_by_signature( + results, # noqa: ANN001 +) -> dict[tuple[str, frozenset[str]], list]: + """Group NISAR search results by (frequency_letter, frozenset(pols)). + + Each result is opened remotely to inspect its actual grid layout. + Products that fail to peek (e.g. transient network error) are skipped + with a warning. + """ + groups: dict[tuple[str, frozenset[str]], list] = {} + for prod in results: + short = Path(prod.filename).name + try: + with prod._open() as hf: + freq, pols = _peek_nisar_grid_from_handle(hf) + except Exception as e: + logger.warning(f"NISAR: failed to peek {short}: {e}; skipping.") + continue + sig = (freq, frozenset(pols)) + groups.setdefault(sig, []).append(prod) + return groups + + +def _get_per_product_rowcol_slice( + product, # noqa: ANN001 + bbox: tuple[float, float, float, float], + frequency: str, +) -> tuple[Optional[slice], Optional[slice]]: + """Compute row/col slices for `bbox` against this product's own grid. + + opera-utils' default `_get_rowcol_slice` uses results[0]'s grid for + the whole stack, which gives wrong indices when cycles have slightly + different grid origins. Recomputing per-product is safer. + """ + west, south, east, north = bbox + row_start, col_start = product.lonlat_to_rowcol(west, north, frequency) + row_stop, col_stop = product.lonlat_to_rowcol(east, south, frequency) + if row_start > row_stop: + row_start, row_stop = row_stop, row_start + if col_start > col_stop: + col_start, col_stop = col_stop, col_start + return slice(row_start, row_stop), slice(col_start, col_stop) + + +def _peek_nisar_grid(h5path: Path) -> tuple[str, list[str]]: + """Open a NISAR GSLC HDF5 and return (frequency_letter, polarizations).""" + import h5py + + with h5py.File(h5path, "r") as hf: + return _peek_nisar_grid_from_handle(hf) + + +def _nisar_h5_to_vrts( + h5_path: Path, + frequency: str, + polarizations: list[str], +) -> list[Path]: + """Wrap each NISAR GSLC HDF5 polarization in a tiny georeferenced VRT. + + NISAR HDF5s store their grid as separate ``xCoordinates`` / + ``yCoordinates`` arrays under ``/science/LSAR/GSLC/grids/frequency/`` + instead of CF-compliant CRS metadata, so GDAL's HDF5 driver opens the + subdataset but reports an identity geotransform. Every downstream tool + that expects a georeferenced raster (dolphin masking, sweets bounds + intersection, rasterio) then trips over it. + + Writing a ~1-KB VRT that references the HDF5 subdataset and injects + the correct ```` + ```` fixes the problem without + rewriting the ~20 MB of complex data. dolphin opens the VRT natively, + sees the right grid, and the source HDF5 stays the single source of + truth for the pixel values. + + Output filenames: ``..vrt`` next to the source + HDF5. Existing VRTs are left in place. + """ + import h5py + from osgeo import osr + + out_paths: list[Path] = [] + grid_path = f"/science/LSAR/GSLC/grids/frequency{frequency}" + with h5py.File(h5_path, "r") as hf: + if grid_path not in hf: + msg = ( + f"{h5_path.name}: no `{grid_path}` group — likely a" + " metadata-only stub from a non-intersecting bbox." + ) + raise RuntimeError(msg) + grid = hf[grid_path] + x_coords = grid["xCoordinates"][:] + y_coords = grid["yCoordinates"][:] + epsg = int(grid["projection"][()]) + + n_cols = len(x_coords) + n_rows = len(y_coords) + assert ( + n_cols >= 2 and n_rows >= 2 + ), f"{h5_path.name}: grid is degenerate ({n_rows}x{n_cols})" + + # NISAR coordinates are pixel centers; the VRT geotransform is + # the top-left corner, so step back by half a pixel. + dx = float(x_coords[1] - x_coords[0]) + dy = float(y_coords[1] - y_coords[0]) # negative when y decreases (typical) + x_origin = float(x_coords[0]) - dx / 2 + y_origin = float(y_coords[0]) - dy / 2 + + srs = osr.SpatialReference() + srs.ImportFromEPSG(epsg) + wkt = srs.ExportToWkt() + + for pol in polarizations: + if pol not in grid: + logger.warning( + f"{h5_path.name}: polarization {pol} not in HDF5; skipping." + ) + continue + out_path = h5_path.with_suffix(f".{pol}.vrt") + if out_path.exists(): + logger.debug(f"{out_path.name} already exists; skipping.") + out_paths.append(out_path) + continue + vrt_xml = ( + f'\n' + f" {wkt}\n" + f" {x_origin}, {dx}, 0.0," + f" {y_origin}, 0.0, {dy}\n" + f' \n' + " \n" + ' ' + f'HDF5:"{h5_path}"://science/LSAR/GSLC/grids/' + f"frequency{frequency}/{pol}\n" + " 1\n" + f' \n' + f' \n' + " \n" + " \n" + "\n" + ) + out_path.write_text(vrt_xml) + out_paths.append(out_path) + logger.info(f"Wrote {out_path.name}") + return out_paths + + +def _peek_nisar_grid_from_handle(hf) -> tuple[str, list[str]]: # noqa: ANN001 + """Inspect an open NISAR GSLC HDF5 file handle for grid layout.""" + grids_path = "/science/LSAR/GSLC/grids" + if grids_path not in hf: + msg = f"NISAR HDF5 has no `{grids_path}` group" + raise RuntimeError(msg) + freq_groups = [k for k in hf[grids_path].keys() if k.startswith("frequency")] + if not freq_groups: + msg = f"NISAR HDF5 `{grids_path}` has no frequency subgroup" + raise RuntimeError(msg) + # Pick the first available frequency (filename order: A before B). + freq_groups.sort() + freq_path = f"{grids_path}/{freq_groups[0]}" + freq_letter = freq_groups[0].removeprefix("frequency") + pols = [ + k + for k in hf[freq_path].keys() + if k in ("HH", "VV", "HV", "VH", "RH", "RV", "LH", "LV") + ] + return freq_letter, pols diff --git a/src/sweets/interferogram.py b/src/sweets/interferogram.py deleted file mode 100644 index 594f232..0000000 --- a/src/sweets/interferogram.py +++ /dev/null @@ -1,357 +0,0 @@ -#!/usr/bin/env python -from __future__ import annotations - -import argparse -import warnings -from pathlib import Path -from typing import Optional - -import dask -import dask.array as da -import h5py -import numpy as np -import rioxarray -from compass.utils.helpers import bbox_to_utm -from dask.distributed import Client -from dolphin.io import DEFAULT_HDF5_OPTIONS, get_raster_xysize, load_gdal, write_arr -from opera_utils import OPERA_DATASET_NAME, get_dates -from pydantic import BaseModel, Field, model_validator -from rich.progress import track - -from ._log import get_log, log_runtime -from ._types import Filename -from .utils import get_intersection_bounds, get_overlapping_bounds - -logger = get_log(__name__) - - -def create_ifg( - ref_slc: Filename, - sec_slc: Filename, - outfile: Filename, - *, - looks: tuple[int, int], - overwrite: bool = False, - bbox: Optional[tuple[float, float, float, float]] = None, - overlapping_with: Optional[Path] = None, -) -> Path: - """Create a multi-looked, normalized interferogram from GDAL-readable SLCs. - - Parameters - ---------- - ref_slc : Filename - Path to reference SLC. - sec_slc : Filename - Path to secondary SLC. - outfile : Filename - Path to output file. - looks : tuple[int, int] - row looks, column looks. - overwrite : bool, optional - Overwrite existing interferogram in `outfile`, by default False. - bbox : Optional[tuple[float, float, float, float]], optional - Bounding box to crop the interferogram to, by default None. - Assumes (lon_min, lat_min, lon_max, lat_max) format. - overlapping_with : Optional[Path], optional - Alternative to bbox: Path to another file to crop to the overlap. - If the bounding boxes overlap, the output interferogram will be cropped - to the intersection of the two bounding boxes - If None, will not check for overlapping bounding boxes, by default None. - - - Returns - ------- - Path - Path to Geotiff file containing the multi-looked, normalized interferogram. - """ - outfile = Path(outfile) - if outfile.exists(): - if not overwrite: - logger.debug(f"Skipping {outfile} because it already exists.") - return outfile - else: - logger.info(f"Overwriting {outfile} because overwrite=True.") - outfile.unlink() - - dask_chunks = (1, 128 * 10, 128 * 10) - da_ref = rioxarray.open_rasterio(ref_slc, chunks=dask_chunks).sel(band=1) - da_sec = rioxarray.open_rasterio(sec_slc, chunks=dask_chunks).sel(band=1) - bb_utm = None - if bbox is not None: - bb_target = bbox_to_utm(bbox, epsg_src=4326, epsg_dst=da_ref.rio.crs.to_epsg()) - bb_utm = get_overlapping_bounds(bb_target, da_ref.rio.bounds()) - elif overlapping_with: - bb_utm = get_intersection_bounds( - overlapping_with, ref_slc, epsg_code=da_ref.rio.crs.to_epsg() - ) - if bb_utm is not None: - # (left, bottom, right, top) -> (left, right), (top, bottom) - da_ref = da_ref.sel( - x=slice(bb_utm[0], bb_utm[2]), y=slice(bb_utm[3], bb_utm[1]) - ) - da_sec = da_sec.sel( - x=slice(bb_utm[0], bb_utm[2]), y=slice(bb_utm[3], bb_utm[1]) - ) - - logger.info(f"Creating {looks[0]}x{looks[1]} multi-looked interferogram: {outfile}") - # PerformanceWarning: Reshaping is producing a large chunk... - with dask.config.set(**{"array.slicing.split_large_chunks": False}): - # _form_ifg(da_ref, da_sec, looks, outfile, ref_filename=vrt_ifg.ref_slc) - _form_ifg(da_ref, da_sec, looks, outfile) - del da_ref - del da_sec - - return outfile - - -class InterferogramOptions(BaseModel): - """Options for creating interferograms in workflow.""" - - looks: tuple[int, int] = Field( - (6, 12), - description="Row looks, column looks. Default is 6, 12 (for 60x60 m).", - ) - max_bandwidth: Optional[int] = Field( - 4, - description="Form interferograms using the nearest n- dates", - ) - max_temporal_baseline: Optional[float] = Field( - None, - description="Alt. to max_bandwidth: maximum temporal baseline in days.", - ) - - @model_validator(mode="after") - def _check_max_temporal_baseline(self): - """Make sure they didn't specify max_bandwidth and max_temporal_baseline.""" - max_temporal_baseline = self.max_temporal_baseline - if max_temporal_baseline is not None: - self.max_bandwidth = None - # TODO :use the new field set functions for this - # raise ValueError( - # "Cannot specify both max_bandwidth and max_temporal_baseline" - # ) - return self - - -def _take_looks_da(da: da.Array, row_looks: int, col_looks: int): - return da.coarsen(x=col_looks, y=row_looks, boundary="trim").mean() - - -def _form_ifg( - da1: da.Array, - da2: da.Array, - looks: tuple[int, int], - outfile: Filename, - # ref_filename=None, -): - """Create a normalized ifg from two SLC files using dask. - - Parameters - ---------- - da1 : dask.array.Array - First SLC loaded as a dask array - da2 : da.array.Array - Secondary SLC loaded as a dask array - looks : tuple[int, int] - (row looks, column looks) - outfile : Filename - Output file to write to. - Supported file types are .tif, .h5 and .int (binary) - ref_filename : str, optional - Reference filename where the geo metadata comes from, by default None - - """ - # da1 = da.from_array(da1) - # da2 = da.from_array(da2) - - # Phase cross multiply for numerator - # numer = utils.take_looks(da1 * da2.conj(), *looks, func_type="mean") - numer = _take_looks_da(da1 * da2.conj(), *looks) - - # Normalize so absolute value is correlation - # pow1 = utils.take_looks((da1 * da1.conj()).real, *looks, func_type="mean") - # pow2 = utils.take_looks((da2 * da2.conj()).real, *looks, func_type="mean") - pow1 = _take_looks_da(da1 * da1.conj(), *looks) - pow2 = _take_looks_da(da2 * da2.conj(), *looks) - denom = np.sqrt(pow1 * pow2) - # RuntimeWarning: invalid value encountered in divide - # filter out warnings - with warnings.catch_warnings(): - warnings.simplefilter("ignore", category=RuntimeWarning) - ifg = (numer / denom).astype("complex64") - - # TODO: do I care to save it as ENVI? I don't think so. - suffix = Path(outfile).suffix - if suffix in (".tif", ".int"): - # Make sure we didn't lose the geo information - ifg.rio.write_crs(da1.rio.crs, inplace=True) - ifg.rio.write_nodata(float("NaN"), inplace=True) - - if suffix == ".tif": - ifg.rio.to_raster(outfile, tiled=True) - else: - ifg.rio.to_raster(outfile, driver="ENVI") - - # Since each multi-looked burst will be small, just load into memory. - # ifg_np = ifg.compute() - # # with open(outfile, "wb") as f: - # # TODO: alternative is .store with a memmap - # write_arr( - # arr=ifg_np, - # output_name=outfile, - # like_filename=ref_filename, - # strides={"x": looks[1], "y": looks[0]}, - # nodata=np.nan, - # ) - else: - # TODO: saving as HDF5 will be more work to get the projection copied over - DEFAULT_HDF5_OPTIONS["chunks"] = tuple(DEFAULT_HDF5_OPTIONS["chunks"]) - ifg.to_hdf5(outfile, "ifg", **DEFAULT_HDF5_OPTIONS) - del ifg # Deleting to tell dask it is done - - -def _form_ifg_name(slc1: Filename, slc2: Filename, out_dir: Filename) -> Path: - """Form the name of the interferogram file. - - Parameters - ---------- - slc1 : Filename - First SLC - slc2 : Filename - Second SLC - out_dir : Filename - Output directory - - Returns - ------- - Path - Path to the interferogram file. - - """ - date1 = get_dates(slc1)[0] - date2 = get_dates(slc2)[0] - fmt = "%Y%m%d" - ifg_name = f"{date1.strftime(fmt)}_{date2.strftime(fmt)}.h5" - return Path(out_dir) / ifg_name - - -def create_cor(ifg_filename: Filename, outfile: Optional[Filename] = None): - """Write out a binary correlation file for an interferogram. - - Assumes the interferogram has been normalized so that the absolute value - is the correlation. - - Parameters - ---------- - ifg_filename : Filename - Complex interferogram filename - outfile : Optional[Filename], optional - Output filename, by default None - If None, will use the same name as the interferogram but with the - extension changed to .cor - - Returns - ------- - Filename - Output filename - """ - if outfile is None: - outfile = Path(ifg_filename).with_suffix(".cor") - da_ifg = rioxarray.open_rasterio(ifg_filename, chunks=True) - np.abs(da_ifg).rio.to_raster(outfile, driver="ENVI", suffix="add") - return outfile - - -def _get_cli_args(): - parser = argparse.ArgumentParser() - parser.add_argument( - "--slcs", nargs=2, metavar=("ref_slc_file", "sec_slc_file"), required=True - ) - parser.add_argument("--dset", default=OPERA_DATASET_NAME) - parser.add_argument("-l", "--looks", type=int, nargs=2, default=(1, 1)) - parser.add_argument( - "-o", - "--outfile", - ) - parser.add_argument("--n-workers", type=int, default=4) - args = parser.parse_args() - if not args.outfile: - args.outfile = _form_ifg_name(args.slcs[0], args.slcs[1], ".") - logger.debug(f"Setting outfile to {args.outfile}") - return args - - -@log_runtime -def main(): - """Create one interferogram from two SLCs.""" - args = _get_cli_args() - Client( - threads_per_worker=4, - n_workers=args.n_workers, - memory_limit=f"{args.max_ram_gb}GB", - ) - with h5py.File(args.slcs[0]) as hf1, h5py.File(args.slcs[1]) as hf2: - da1 = da.from_array(hf1[args.dset]) - da2 = da.from_array(hf2[args.dset]) - create_ifg(da1, da2, args.looks, outfile=args.outfile) - - -def get_average_correlation( - file_path: Filename, - cor_ext: str = ".cor", - output_name: Optional[Filename] = None, - mask_where_incomplete: bool = True, -) -> np.ndarray: - """Get the average correlation from a directory of correlation files. - - Parameters - ---------- - file_path : Filename - Path to the directory containing the correlation files. - cor_ext : str, optional - Extension of the correlation files, by default ".cor" - output_name : str, optional - Name of the output file. - If not provided, outputs to "average_correlation.cor.tif" in the - directory of `file_path`. - mask_where_incomplete : bool, optional - If True, will mask out pixels where the correlation is not present in all files. - - Returns - ------- - np.ndarray - Average correlation array. - """ - cor_files = sorted(Path(file_path).glob(f"*{cor_ext}")) - if not cor_files: - raise ValueError(f"No files found with {cor_ext} in {file_path}") - if output_name is None: - output_name = cor_files[0].parent / "average_correlation.cor.tif" - count_output_name = Path(output_name).parent / "average_correlation_count.tif" - if Path(output_name).exists(): - return load_gdal(output_name) - - cols, rows = get_raster_xysize(cor_files[0]) - avg_c = np.zeros((rows, cols), dtype=np.float32) - count = np.zeros((rows, cols), dtype=np.int32) - for f in track(cor_files): - cor = load_gdal(f) - cor_masked = np.ma.masked_invalid(cor) - avg_c += cor_masked - bad_mask = np.logical_or(cor_masked.mask, cor_masked == 0) - count[~bad_mask] += 1 - avg_c /= len(cor_files) - if mask_where_incomplete: - avg_c[count != len(cor_files)] = np.nan - write_arr( - arr=avg_c, like_filename=cor_files[0], output_name=output_name, nodata=np.nan - ) - write_arr( - arr=count, like_filename=cor_files[0], output_name=count_output_name, nodata=0 - ) - - return avg_c - - -if __name__ == "__main__": - main() diff --git a/src/sweets/plotting.py b/src/sweets/plotting.py index 567bd13..b0ba353 100644 --- a/src/sweets/plotting.py +++ b/src/sweets/plotting.py @@ -5,7 +5,6 @@ import cartopy.crs as ccrs import cartopy.feature as cfeature -import colorcet import geopandas as gpd import ipywidgets import matplotlib as mpl @@ -15,18 +14,41 @@ from cartopy.io import shapereader from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER from dolphin import io +from matplotlib.colors import LinearSegmentedColormap from matplotlib.image import AxesImage from numpy.typing import ArrayLike from shapely.geometry import Polygon, box from ._types import Filename -from .core import UNW_SUFFIX + +# Cyclic "oil slick" colormap inspired by thin-film interference colors. +# Node order follows the interference sequence +# dark -> violet -> blue -> cyan -> green -> yellow -> orange -> red -> dark +# and loops back to dark so it is safe to wrap phase in [-pi, pi]. +_OIL_SLICK_NODES = np.array( + [ + (0.02, 0.01, 0.06), # near-black (origin / 2pi) + (0.22, 0.00, 0.48), # deep violet + (0.02, 0.08, 0.82), # royal blue + (0.00, 0.58, 0.88), # cyan + (0.00, 0.72, 0.32), # green + (0.72, 0.92, 0.00), # yellow-green + (1.00, 0.82, 0.00), # yellow + (1.00, 0.40, 0.00), # orange + (0.88, 0.02, 0.18), # red + (0.52, 0.00, 0.38), # dark magenta + (0.02, 0.01, 0.06), # back to near-black + ] +) +OIL_SLICK_CMAP = LinearSegmentedColormap.from_list("oil_slick", _OIL_SLICK_NODES, N=512) +if "oil_slick" not in mpl.colormaps: + mpl.colormaps.register(OIL_SLICK_CMAP, name="oil_slick") def plot_ifg( img: Optional[ArrayLike] = None, filename: Optional[Filename] = None, - phase_cmap: str = colorcet.m_CET_C8, + phase_cmap: str = "oil_slick", ax: Optional[plt.Axes] = None, add_colorbar: bool = True, title: str = "", @@ -128,7 +150,7 @@ def browse_ifgs( figsize: tuple[int, int] = (7, 4), vm_unw: float = 10, vm_cor: float = 1, - unw_suffix: str = UNW_SUFFIX, + unw_suffix: str = ".unw.tif", layout="box", axes: Optional[plt.Axes] = None, ref_unw: Optional[tuple[float, float]] = None, @@ -411,6 +433,7 @@ def plot_area_of_interest( scale="110m", facecolor="none", ) + assert bbox is not None buffered_bounds = box(*bbox).buffer(buffer).bounds left, bottom, right, top = buffered_bounds extent = (left, right, bottom, top) diff --git a/src/sweets/utils.py b/src/sweets/utils.py index 8d96647..2390c36 100644 --- a/src/sweets/utils.py +++ b/src/sweets/utils.py @@ -2,7 +2,6 @@ import json import os -import sys from pathlib import Path from typing import Optional, Tuple @@ -13,39 +12,17 @@ from ._types import Filename -def get_cache_dir(force_posix: bool = False) -> Path: - """Return the config folder for the application. - - Source: - https://github.com/pallets/click/blob/a63679e77f9be2eb99e2f0884d617f9635a485e2/src/click/utils.py#L408 - - The following folders could be returned: - Mac OS X: - ``~/Library/Application Support/sweets`` - Mac OS X (POSIX): - ``~/.sweets`` - Unix: - ``~/.cache/sweets`` - Unix (POSIX): - ``~/.sweets`` - - Parameters - ---------- - force_posix : bool - If this is set to `True` then on any POSIX system the - folder will be stored in the home folder with a leading - dot instead of the XDG config home or darwin's - application support folder. +def get_cache_dir() -> Path: + """Return the per-user cache directory used for downloaded artifacts. + Resolved to ``$XDG_CACHE_HOME/sweets`` (or ``~/.cache/sweets`` if unset) + on every platform — explicitly *not* macOS's ``~/Library/Application + Support/sweets`` because the space in ``Application Support`` trips + upstream sardem's ``unzip_cmd.split(" ")`` water-mask download path. """ app_name = "sweets" - if force_posix: - path = Path("~/.sweets") / app_name - elif sys.platform == "darwin": - path = Path("~/Library/Application Support") / app_name - else: - path = Path(os.environ.get("XDG_CONFIG_HOME", "~/.cache")) / app_name - path = path.expanduser() + base = os.environ.get("XDG_CACHE_HOME", "~/.cache") + path = Path(base).expanduser() / app_name path.mkdir(parents=True, exist_ok=True) return path diff --git a/tests/cassettes/test_download_search/test_opera_cslc_search_resolves_burst_ids.yaml b/tests/cassettes/test_download_search/test_opera_cslc_search_resolves_burst_ids.yaml new file mode 100644 index 0000000..e50b4a9 --- /dev/null +++ b/tests/cassettes/test_download_search/test_opera_cslc_search_resolves_burst_ids.yaml @@ -0,0 +1,161 @@ +interactions: +- request: + body: attribute%5B%5D=int%2CPATH_NUMBER%2C71&echo_collection_id%5B%5D=C1259976861-ASF&echo_collection_id%5B%5D=C2777443834-ASF&bounding_box=-118.3957%2C33.7284%2C-118.3459%2C33.772&temporal=2025-12-01T00%3A00%3A00Z%2C2025-12-06T00%3A00%3A00Z%2C&page_size=250&options%5Btemporal%5D%5Band%5D=true&sort_key%5B%5D=-end_date&sort_key%5B%5D=granule_ur&options%5Bplatform%5D%5Bignore_case%5D=true&provider=ASF + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br, zstd + Client-Id: + - asf_search_v11.0.2 + Connection: + - keep-alive + Content-Length: + - '396' + Content-Type: + - application/x-www-form-urlencoded + User-Agent: + - Python/3.12.7; requests/2.32.3; asf_search/11.0.2 + method: POST + uri: https://cmr.earthdata.nasa.gov/search/granules.umm_json + response: + body: + string: '{"hits":2,"took":190,"items":[{"meta":{"concept-type":"granule","concept-id":"G3899439645-ASF","revision-id":1,"native-id":"OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1","collection-concept-id":"C2777443834-ASF","provider-id":"ASF","format":"application/vnd.nasa.cmr.umm+json","revision-date":"2025-12-06T09:26:26.867Z"},"umm":{"TemporalExtent":{"RangeDateTime":{"BeginningDateTime":"2025-12-05T13:51:50Z","EndingDateTime":"2025-12-05T13:51:53Z"}},"OrbitCalculatedSpatialDomains":[{"OrbitNumber":5317}],"GranuleUR":"OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1","AdditionalAttributes":[{"Name":"ASCENDING_DESCENDING","Values":["DESCENDING"]},{"Name":"BEAM_MODE","Values":["IW"]},{"Name":"GROUP_ID","Values":["S1C_IWDV_0478_0485_005317_071"]},{"Name":"LOOK_DIRECTION","Values":["RIGHT"]},{"Name":"OPERA_BURST_ID","Values":["T071_151230_IW3"]},{"Name":"PATH_NUMBER","Values":["71"]},{"Name":"POLARIZATION","Values":["VV"]},{"Name":"PROCESSING_TYPE","Values":["CSLC"]},{"Name":"PRODUCT_VERSION","Values":["1.1"]},{"Name":"SUBSWATH_NAME","Values":["IW3"]}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":33.82847,"Longitude":-118.30924},{"Latitude":33.94967,"Longitude":-119.16891},{"Latitude":33.78414,"Longitude":-119.20194},{"Latitude":33.66276,"Longitude":-118.34352},{"Latitude":33.82847,"Longitude":-118.30924}]}}]}}},"ProviderDates":[{"Type":"Insert","Date":"2025-12-06T09:26:24Z"},{"Type":"Update","Date":"2025-12-06T09:26:24Z"}],"CollectionReference":{"ShortName":"OPERA_L2_CSLC-S1_V1","Version":"1"},"PGEVersionClass":{"PGEName":"CSLC_S1_PGE","PGEVersion":"2.1.3"},"RelatedUrls":[{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5","Type":"GET + DATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5","Format":"HDF5"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5","Type":"GET + DATA VIA DIRECT ACCESS","Description":"This link provides direct download + access via S3 to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5","Format":"HDF5"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Type":"GET + RELATED VISUALIZATION","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Format":"PNG"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Type":"GET + RELATED VISUALIZATION","Description":"This link provides direct download access + via S3 to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Format":"PNG"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Type":"GET + RELATED VISUALIZATION","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Format":"PNG"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Type":"GET + RELATED VISUALIZATION","Description":"This link provides direct download access + via S3 to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Format":"PNG"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Type":"GET + RELATED VISUALIZATION","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Format":"PNG"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Type":"GET + RELATED VISUALIZATION","Description":"This link provides direct download access + via S3 to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Format":"PNG"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Format":"XML"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Format":"XML"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/s3credentials","Type":"VIEW + RELATED INFORMATION","Description":"S3 credentials endpoint for direct in-region + bucket access"}],"InputGranules":["S1C_IW_SLC__1SDV_20251205T135133_20251205T135200_005317_00A912_F375"],"Projects":[{"ShortName":"SNWG/OPERA"}],"DataGranule":{"DayNightFlag":"Unspecified","ProductionDateTime":"2025-12-06T09:20:22Z","ArchiveAndDistributionInformation":[{"Name":"OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.h5","SizeInBytes":228049521,"Format":"HDF5","Checksum":{"Value":"8939a1825ebad3c4a15af3b0b7754cd4","Algorithm":"MD5"}},{"Name":"OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","SizeInBytes":213171,"Format":"XML","Checksum":{"Value":"1432b58c41fa2c5871f8b11f90c9ae30","Algorithm":"MD5"}}],"Identifiers":[{"IdentifierType":"ProducerGranuleId","Identifier":"OPERA_L2_CSLC-S1_T071-151230-IW3_20251205T135150Z_20251206T084103Z_S1C_VV_v1.1"},{"Identifier":"0.24.4","IdentifierType":"Other","IdentifierName":"ISCE3Version"},{"Identifier":"0.2.5","IdentifierType":"Other","IdentifierName":"S1ReaderVersion"},{"Identifier":"0.5.6","IdentifierType":"Other","IdentifierName":"SASVersionId"}]},"Platforms":[{"ShortName":"Sentinel-1C","Instruments":[{"ShortName":"C-SAR","Characteristics":[{"Name":"LookDirection","Value":"RIGHT"}],"OperationalModes":["IW"]}]}],"MetadataSpecification":{"URL":"https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6","Name":"UMM-G","Version":"1.6.6"}}},{"meta":{"concept-type":"granule","concept-id":"G3899439659-ASF","revision-id":1,"native-id":"OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1","collection-concept-id":"C2777443834-ASF","provider-id":"ASF","format":"application/vnd.nasa.cmr.umm+json","revision-date":"2025-12-06T09:26:28.493Z"},"umm":{"TemporalExtent":{"RangeDateTime":{"BeginningDateTime":"2025-12-05T13:51:49Z","EndingDateTime":"2025-12-05T13:51:52Z"}},"OrbitCalculatedSpatialDomains":[{"OrbitNumber":5317}],"GranuleUR":"OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1","AdditionalAttributes":[{"Name":"ASCENDING_DESCENDING","Values":["DESCENDING"]},{"Name":"BEAM_MODE","Values":["IW"]},{"Name":"GROUP_ID","Values":["S1C_IWDV_0478_0485_005317_071"]},{"Name":"LOOK_DIRECTION","Values":["RIGHT"]},{"Name":"OPERA_BURST_ID","Values":["T071_151230_IW2"]},{"Name":"PATH_NUMBER","Values":["71"]},{"Name":"POLARIZATION","Values":["VV"]},{"Name":"PROCESSING_TYPE","Values":["CSLC"]},{"Name":"PRODUCT_VERSION","Values":["1.1"]},{"Name":"SUBSWATH_NAME","Values":["IW2"]}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":33.74769,"Longitude":-117.36529},{"Latitude":33.89118,"Longitude":-118.33223},{"Latitude":33.72559,"Longitude":-118.36813},{"Latitude":33.58226,"Longitude":-117.40462},{"Latitude":33.74769,"Longitude":-117.36529}]}}]}}},"ProviderDates":[{"Type":"Insert","Date":"2025-12-06T09:26:26Z"},{"Type":"Update","Date":"2025-12-06T09:26:26Z"}],"CollectionReference":{"ShortName":"OPERA_L2_CSLC-S1_V1","Version":"1"},"PGEVersionClass":{"PGEName":"CSLC_S1_PGE","PGEVersion":"2.1.3"},"RelatedUrls":[{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5","Type":"GET + DATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5","Format":"HDF5"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5","Type":"GET + DATA VIA DIRECT ACCESS","Description":"This link provides direct download + access via S3 to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5","Format":"HDF5"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Type":"GET + RELATED VISUALIZATION","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Format":"PNG"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Type":"GET + RELATED VISUALIZATION","Description":"This link provides direct download access + via S3 to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png","Format":"PNG"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Type":"GET + RELATED VISUALIZATION","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Format":"PNG"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Type":"GET + RELATED VISUALIZATION","Description":"This link provides direct download access + via S3 to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png","Format":"PNG"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Type":"GET + RELATED VISUALIZATION","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Format":"PNG"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Type":"GET + RELATED VISUALIZATION","Description":"This link provides direct download access + via S3 to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png","Format":"PNG"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Format":"XML"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","Format":"XML"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-products/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE.png.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_low-res.png.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/BROWSE/OPERA/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Type":"EXTENDED + METADATA","Description":"Download OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Format":"Text + File"},{"URL":"s3://asf-cumulus-prod-opera-browse/OPERA_L2_CSLC-S1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1/OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Type":"EXTENDED + METADATA","Description":"This link provides direct download access via S3 + to OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1_BROWSE_thumbnail.png.md5","Format":"Text + File"},{"URL":"https://cumulus.asf.earthdatacloud.nasa.gov/s3credentials","Type":"VIEW + RELATED INFORMATION","Description":"S3 credentials endpoint for direct in-region + bucket access"}],"InputGranules":["S1C_IW_SLC__1SDV_20251205T135133_20251205T135200_005317_00A912_F375"],"Projects":[{"ShortName":"SNWG/OPERA"}],"DataGranule":{"DayNightFlag":"Unspecified","ProductionDateTime":"2025-12-06T09:06:46Z","ArchiveAndDistributionInformation":[{"Name":"OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.h5","SizeInBytes":271805291,"Format":"HDF5","Checksum":{"Value":"9807c605b4885b372cbb2d66906ee674","Algorithm":"MD5"}},{"Name":"OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1.iso.xml","SizeInBytes":213163,"Format":"XML","Checksum":{"Value":"68692032641cbb25ec5fa1340d388f98","Algorithm":"MD5"}}],"Identifiers":[{"IdentifierType":"ProducerGranuleId","Identifier":"OPERA_L2_CSLC-S1_T071-151230-IW2_20251205T135149Z_20251206T084103Z_S1C_VV_v1.1"},{"Identifier":"0.24.4","IdentifierType":"Other","IdentifierName":"ISCE3Version"},{"Identifier":"0.2.5","IdentifierType":"Other","IdentifierName":"S1ReaderVersion"},{"Identifier":"0.5.6","IdentifierType":"Other","IdentifierName":"SASVersionId"}]},"Platforms":[{"ShortName":"Sentinel-1C","Instruments":[{"ShortName":"C-SAR","Characteristics":[{"Name":"LookDirection","Value":"RIGHT"}],"OperationalModes":["IW"]}]}],"MetadataSpecification":{"URL":"https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6","Name":"UMM-G","Version":"1.6.6"}}}]}' + headers: + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - CMR-Hits, CMR-Request-Id, X-Request-Id, CMR-Scroll-Id, CMR-Search-After, CMR-Timed-Out, + CMR-Shapefile-Original-Point-Count, CMR-Shapefile-Simplified-Point-Count + CMR-Hits: + - '2' + CMR-Request-Id: + - 5559f822-c6ed-47dc-92cb-9044b7ee14e4 + CMR-Search-After: + - '[1764942712000,"opera_l2_cslc-s1_t071-151230-iw2_20251205t135149z_20251206t084103z_s1c_vv_v1.1",3899439659]' + CMR-Took: + - '191' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-MD5: + - 8a0a5a9a87d11c93af294c815097e166 + Content-SHA1: + - b9393a57d8b685f10a0c6add2503e95155127178 + Content-Type: + - application/vnd.nasa.cmr.umm_results+json;version=1.6.6; charset=utf-8 + Date: + - Mon, 13 Apr 2026 20:09:45 GMT + Server: + - ServerTokens ProductOnly + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 7375f2360b80ec8c602f04aa2cc7a57c.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - LbjmsfEgraW1-GBt32AOh7PRX_37u2nisXJm89Q5yGs5rg_9d0jEfg== + X-Amz-Cf-Pop: + - IAD12-P3 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Request-Id: + - LbjmsfEgraW1-GBt32AOh7PRX_37u2nisXJm89Q5yGs5rg_9d0jEfg== + X-XSS-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/tests/requirements.txt b/tests/requirements.txt deleted file mode 100644 index d163904..0000000 --- a/tests/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -black -flake8 -pre-commit -pytest -pytest-cov -pytest-xdist # parallel tests: https://pytest-xdist.readthedocs.io/en/latest/ -ruff diff --git a/tests/test_core.py b/tests/test_core.py index 763fcd2..3170017 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1,115 +1,205 @@ +"""Lightweight tests for the Workflow config object. + +These avoid touching ASF, COMPASS or dolphin — they exercise validation, +YAML round-trip, and the bbox/wkt cross-fill logic. +""" + +from __future__ import annotations + from pathlib import Path -from typing import List import pytest -from shapely import wkt from sweets.core import Workflow -from sweets.download import ASFQuery +from sweets.download import BurstSearch, NisarGslcSearch, OperaCslcSearch -class TestWorkflow: - @pytest.fixture(scope="class") - def bbox(self) -> List[float]: - return [-102.2, 32.15, -102.1, 32.22] +@pytest.fixture +def bbox() -> tuple[float, float, float, float]: + return (-102.2, 32.15, -102.1, 32.22) - def test_workflow_construct(self, tmp_path, bbox): - start, end, track = "2022-12-15", "2022-12-29", 78 - n_workers, tpw = 1, 16 +@pytest.fixture +def search_kwargs() -> dict: + return { + "start": "2022-12-15", + "end": "2022-12-29", + "track": 78, + } + + +class TestWorkflow: + def test_construct_from_dict(self, tmp_path, bbox, search_kwargs): w = Workflow( - asf_query=dict( - start=start, - end=end, - relativeOrbit=track, - out_dir="data", - ), bbox=bbox, - n_workers=n_workers, - threads_per_worker=tpw, - max_bandwidth=1, - orbit_dir="orbits", + search={**search_kwargs, "out_dir": "data"}, + n_workers=1, + threads_per_worker=16, ) outfile = tmp_path / "config.yaml" w.to_yaml(outfile, with_comments=True) w2 = Workflow.from_yaml(outfile) - assert w.model_dump() == w2.model_dump() # computed fields affect equality + assert w.model_dump() == w2.model_dump() - def test_workflow_construct_model(self, bbox): - start, end, track = "2022-12-15", "2022-12-29", 78 - w = Workflow( - asf_query=ASFQuery( - start=start, end=end, relativeOrbit=track, out_dir="data", bbox=bbox - ), - ) - assert w.bbox == tuple(bbox) + def test_construct_from_burst_search_instance(self, bbox, search_kwargs): + search = BurstSearch(bbox=bbox, **search_kwargs) + w = Workflow(search=search, bbox=bbox) + assert w.bbox == bbox + assert w.search.track == 78 - def test_workflow_bbox_wkt(self, tmp_path): - start, end, track = "2022-12-15", "2022-12-29", 78 + def test_bbox_wkt_cross_fill(self, tmp_path, search_kwargs): wkt_str = "POLYGON((-10.0 30.0,-9.0 30.0,-9.0 31.0,-10.0 31.0,-10.0 30.0))" - loaded_wkt = wkt.loads(wkt_str) - - kwargs = dict( - asf_query=dict( - start=start, - end=end, - relativeOrbit=track, - ), - ) - wkt_bbox = wkt.loads( - "POLYGON ((-9. 30.0, -9.0 31.0, -10.0 31.0, -10.0 30.0, -9.0 30.0))" - ) expected_bbox = (-10, 30, -9, 31) - w = Workflow( - bbox=expected_bbox, - **kwargs, - ) + + # bbox in -> bbox stays bbox (no auto-wkt fill anymore — outer wkt is + # only set if the user explicitly supplied one) + w = Workflow(bbox=expected_bbox, search=search_kwargs) assert w.bbox == expected_bbox - assert _iou(wkt.loads(w.wkt), wkt_bbox) == 1.0 - w = Workflow( - wkt=wkt_str, - **kwargs, - ) + # wkt string in -> bbox derived from wkt + w = Workflow(wkt=wkt_str, search=search_kwargs) assert w.bbox == expected_bbox - assert _iou(wkt.loads(w.wkt), loaded_wkt) == 1.0 + assert w.wkt == wkt_str + # And the wkt is propagated down into the search source for + # downloaders that need a polygon (NisarGslcSearch, OperaCslcSearch). + assert w.search.wkt == wkt_str + # wkt path in -> bbox out (file content is read at validation time) wkt_file = tmp_path / "aoi.wkt" wkt_file.write_text(wkt_str) - w = Workflow( - **kwargs, - wkt=wkt_file, - ) - assert _iou(wkt.loads(w.wkt), loaded_wkt) == 1.0 + w = Workflow(wkt=str(wkt_file), search=search_kwargs) assert w.bbox == expected_bbox - def test_workflow_default_factory_order(self, bbox): - start, end, track = "2022-12-15", "2022-12-29", 78 - dem_path = Path() / "dem" - mask_path = Path() / "mask" - w = Workflow( - water_mask_filename=mask_path, - dem_filename=dem_path, - asf_query=ASFQuery( - start=start, end=end, relativeOrbit=track, out_dir="data", bbox=bbox - ), - ) - # assert can set - assert w.water_mask_filename == mask_path - assert w.dem_filename == dem_path - + def test_default_factory_order(self, bbox, search_kwargs): + # Custom paths are honored. + dem = Path("dem") + mask = Path("mask") w = Workflow( - asf_query=ASFQuery( - start=start, end=end, relativeOrbit=track, out_dir="data", bbox=bbox - ) + bbox=bbox, + search=search_kwargs, + dem_filename=dem, + water_mask_filename=mask, ) - # assert defaults work - assert w.work_dir / "dem.tif" == w.dem_filename - assert w.work_dir / "watermask.flg" == w.water_mask_filename + assert w.dem_filename == dem + assert w.water_mask_filename == mask - # assert computed fields work + # Defaults are derived from work_dir. + w = Workflow(bbox=bbox, search=search_kwargs) + assert w.dem_filename == w.work_dir / "dem.tif" + assert w.water_mask_filename == w.work_dir / "watermask.tif" assert w.log_dir == w.work_dir / "logs" - -def _iou(poly1, poly2): - return poly1.intersection(poly2).area / poly1.union(poly2).area + def test_missing_aoi_raises(self, search_kwargs): + with pytest.raises(ValueError, match="bbox.*wkt"): + Workflow(search=search_kwargs) + + def test_invalid_bbox_raises(self, search_kwargs): + # Latitude swapped + with pytest.raises(ValueError, match="Latitude"): + Workflow(bbox=(-10, 31, -9, 30), search=search_kwargs) + # Longitude swapped + with pytest.raises(ValueError, match="Longitude"): + Workflow(bbox=(-9, 30, -10, 31), search=search_kwargs) + + def test_default_kind_is_safe(self, bbox, search_kwargs): + """A `search` dict without a `kind` key should default to BurstSearch.""" + w = Workflow(bbox=bbox, search=search_kwargs) + assert isinstance(w.search, BurstSearch) + assert w.search.kind == "safe" + + def test_opera_cslc_kind(self, bbox, search_kwargs): + """`kind: opera-cslc` should produce an OperaCslcSearch source.""" + w = Workflow.model_validate( + { + "bbox": bbox, + "search": {"kind": "opera-cslc", **search_kwargs}, + } + ) + assert isinstance(w.search, OperaCslcSearch) + assert w.search.kind == "opera-cslc" + # bbox cross-fill still works + assert w.search.bbox == bbox + + def test_opera_cslc_yaml_roundtrip(self, tmp_path, bbox, search_kwargs): + w = Workflow.model_validate( + { + "bbox": bbox, + "search": {"kind": "opera-cslc", **search_kwargs}, + "tropo": {"enabled": True}, + } + ) + out = tmp_path / "config.yaml" + w.to_yaml(out, with_comments=True) + w2 = Workflow.from_yaml(out) + assert isinstance(w2.search, OperaCslcSearch) + assert w2.tropo.enabled is True + + def test_nisar_gslc_kind(self, bbox): + """`kind: nisar-gslc` should produce a NisarGslcSearch source.""" + w = Workflow.model_validate( + { + "bbox": bbox, + "search": { + "kind": "nisar-gslc", + "start": "2024-06-01", + "end": "2024-08-10", + "frequency": "A", + "polarizations": ["HH"], + }, + } + ) + assert isinstance(w.search, NisarGslcSearch) + assert w.search.kind == "nisar-gslc" + assert w.search.frequency == "A" + assert w.search.polarizations == ["HH"] + assert w.search.bbox == bbox + # NISAR subdataset path that gets handed to dolphin + # `hdf5_subdataset()` would normally peek at a CMR result or a + # cached file to learn the actual frequency / pol; here we just + # check that the user's explicit choices feed straight through + # the construction (the resolver is exercised in the smoke test). + assert w.search.frequency == "A" + assert w.search.polarizations == ["HH"] + + def test_nisar_gslc_yaml_roundtrip(self, tmp_path, bbox): + # `track`/`frame` are the user-facing names; the opera-utils field + # aliases (`relative_orbit_number` / `track_frame_number`) also work. + w = Workflow.model_validate( + { + "bbox": bbox, + "search": { + "kind": "nisar-gslc", + "start": "2024-06-01", + "end": "2024-08-10", + "track": 13, + "frame": 71, + "frequency": "A", + "polarizations": ["HH"], + }, + } + ) + out = tmp_path / "config.yaml" + w.to_yaml(out, with_comments=True) + w2 = Workflow.from_yaml(out) + assert isinstance(w2.search, NisarGslcSearch) + assert w2.search.track == 13 + assert w2.search.frame == 71 + assert w2.search.frequency == "A" + + def test_nisar_gslc_alias_field_names(self, bbox): + """opera-utils' canonical names should still validate via aliases.""" + w = Workflow.model_validate( + { + "bbox": bbox, + "search": { + "kind": "nisar-gslc", + "start": "2024-06-01", + "end": "2024-08-10", + "relative_orbit_number": 13, + "track_frame_number": 71, + }, + } + ) + assert isinstance(w.search, NisarGslcSearch) + assert w.search.track == 13 + assert w.search.frame == 71 diff --git a/tests/test_dolphin.py b/tests/test_dolphin.py new file mode 100644 index 0000000..8d5cd70 --- /dev/null +++ b/tests/test_dolphin.py @@ -0,0 +1,22 @@ +from sweets._dolphin import _estimate_snaphu_tiles_from_bounds + + +def test_estimate_snaphu_tiles_small_bounds(): + bounds = (-102.2, 32.15, -102.1, 32.22) + assert _estimate_snaphu_tiles_from_bounds(bounds, (6, 12)) == (1, 1) + + +def test_estimate_snaphu_tiles_thresholds(): + assert _estimate_snaphu_tiles_from_bounds((0.0, 0.0, 0.01, 0.539), (6, 12)) == ( + 2, + 2, + ) + assert _estimate_snaphu_tiles_from_bounds((0.0, 0.0, 0.01, 1.078), (6, 12)) == ( + 3, + 3, + ) + + +def test_estimate_snaphu_tiles_respects_strides(): + bounds = (0.0, 0.0, 0.01, 0.539) + assert _estimate_snaphu_tiles_from_bounds(bounds, (12, 24)) == (1, 1) diff --git a/tests/test_download_search.py b/tests/test_download_search.py new file mode 100644 index 0000000..f8755a9 --- /dev/null +++ b/tests/test_download_search.py @@ -0,0 +1,39 @@ +"""Network-dependent tests for sweets.download search paths. + +These replay recorded HTTP via pytest-recording, so they run offline in +CI after the cassette is committed. Re-record after an opera_utils / ASF +contract change with: + + pixi run pytest tests/test_download_search.py --record-mode=once +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from sweets.download import OperaCslcSearch + + +@pytest.mark.vcr +def test_opera_cslc_search_resolves_burst_ids(tmp_path: Path) -> None: + """`_resolve_burst_ids` returns OPERA burst IDs for a known AOI/track. + + Uses the same LA AOI + track 71 as `docs/example_opera_cslc.ipynb`, + trimmed to a 5-day window so the cassette stays small. + """ + search = OperaCslcSearch.model_validate( + { + "bbox": (-118.3957, 33.7284, -118.3459, 33.772), + "start": "2025-12-01", + "end": "2025-12-06", + "track": 71, + "out_dir": tmp_path, + } + ) + burst_ids = search._resolve_burst_ids() + assert burst_ids, "ASF returned no OPERA bursts for this AOI/track/dates" + # OPERA burst IDs look like "t071_151200_iw2": track-prefixed, _iw suffix. + assert all(bid.startswith("t071_") for bid in burst_ids) + assert all("_iw" in bid for bid in burst_ids) diff --git a/tests/test_missing_data.py b/tests/test_missing_data.py deleted file mode 100644 index cc1aab0..0000000 --- a/tests/test_missing_data.py +++ /dev/null @@ -1,72 +0,0 @@ -from pathlib import Path - -import numpy as np -import pytest -from osgeo import gdal - -try: - from sweets._missing_data import Stats, get_bad_files, get_raster_stats, is_valid - - MISSING_DEPS = False -except ImportError as e: - if "geopandas" in e.msg or "matplotlib" in e.msg: - MISSING_DEPS = True - else: - MISSING_DEPS = False - - -# Fixture for creating temporary files -@pytest.fixture() -def slc_file_list(tmp_path): - # Cannot skip fixture, see: - # https://docs.pytest.org/en/stable/deprecations.html#applying-a-mark-to-a-fixture-function - if MISSING_DEPS: - pytest.skip(reason="geopandas/matplotlib not installed") - shape = (10, 100, 100) - nodata = np.nan # Set nodata value - - # Create random data with a certain percentage of nodata pixels - slc_stack = np.random.random(shape) - nodata_mask = np.random.choice( - [True, False], shape, p=[0.2, 0.8] - ) # 20% of pixels are nodata - slc_stack[nodata_mask] = nodata - - # Write to a file - driver = gdal.GetDriverByName("GTiff") - start_date = 20220101 - d = tmp_path / "gtiffs" - d.mkdir() - name_template = d / "{date}.slc.tif" - file_list = [] - for i in range(shape[0]): - fname = str(name_template).format(date=str(start_date + i)) - file_list.append(Path(fname)) - ds = driver.Create(fname, shape[-1], shape[-2], 1, gdal.GDT_CFloat32) - ds.GetRasterBand(1).WriteArray(slc_stack[i]) - ds.GetRasterBand(1).SetNoDataValue(nodata) - ds = None - - return file_list - - -# Now we write test cases using the created fixture -@pytest.mark.skipif(MISSING_DEPS, reason="geopandas/matplotlib not installed") -def test_get_bad_files(slc_file_list): - bad_files, bad_stats = get_bad_files(str(slc_file_list[0].parent), max_jobs=1) - assert isinstance(bad_files, list) - assert isinstance(bad_stats, list) - get_bad_files(str(slc_file_list[0].parent), max_jobs=5) - - -@pytest.mark.skipif(MISSING_DEPS, reason="geopandas/matplotlib not installed") -def test_is_valid(slc_file_list): - valid, reason = is_valid(str(slc_file_list[0])) - assert valid - assert reason == "" - - -@pytest.mark.skipif(MISSING_DEPS, reason="geopandas/matplotlib not installed") -def test_get_raster_stats(slc_file_list): - stats = get_raster_stats(str(slc_file_list[0])) - assert isinstance(stats, Stats) diff --git a/tests/test_plotting.py b/tests/test_plotting.py new file mode 100644 index 0000000..5e75ae8 --- /dev/null +++ b/tests/test_plotting.py @@ -0,0 +1,55 @@ +"""Tests for sweets.plotting. + +Covers the oil_slick colormap registration (import-time side effect) and +a minimal plot_ifg invocation on a synthetic array, no raster I/O. +""" + +from __future__ import annotations + +import inspect + +import matplotlib + +matplotlib.use("Agg") + +import matplotlib as mpl # noqa: E402 +import matplotlib.pyplot as plt # noqa: E402 +import numpy as np # noqa: E402 + +from sweets import plotting # noqa: E402 + + +def test_oil_slick_registered_with_matplotlib() -> None: + assert "oil_slick" in mpl.colormaps + cm = mpl.colormaps["oil_slick"] + assert cm.name == "oil_slick" + + +def test_oil_slick_cmap_properties() -> None: + assert plotting.OIL_SLICK_CMAP.name == "oil_slick" + assert len(plotting._OIL_SLICK_NODES) == 11 + # First and last nodes must match so the colormap is seamless at 2pi wrap. + assert np.allclose(plotting._OIL_SLICK_NODES[0], plotting._OIL_SLICK_NODES[-1]) + + +def test_plot_ifg_default_is_oil_slick() -> None: + sig = inspect.signature(plotting.plot_ifg) + assert sig.parameters["phase_cmap"].default == "oil_slick" + + +def test_plot_ifg_accepts_complex_array() -> None: + y, x = np.mgrid[0:32, 0:32] + phase = 0.1 * x - 0.05 * y + ifg = np.exp(1j * phase).astype(np.complex64) + fig, ax = plotting.plot_ifg(img=ifg, figsize=(3, 3)) + assert fig is not None and ax is not None + assert len(ax.images) == 1 + plt.close("all") + + +def test_plot_ifg_accepts_real_phase_array() -> None: + phase = np.linspace(-np.pi, np.pi, 64).reshape(8, 8) + fig, ax = plotting.plot_ifg(img=phase, figsize=(3, 3), add_colorbar=False) + assert fig is not None and ax is not None + assert len(ax.images) == 1 + plt.close("all") diff --git a/tests/test_show_versions.py b/tests/test_show_versions.py new file mode 100644 index 0000000..fbee555 --- /dev/null +++ b/tests/test_show_versions.py @@ -0,0 +1,42 @@ +"""Tests for sweets._show_versions.""" + +from __future__ import annotations + +import pytest + +from sweets import _show_versions as sv + + +def test_get_sys_info_has_expected_keys() -> None: + info = sv._get_sys_info() + assert set(info.keys()) == {"python", "executable", "machine"} + for v in info.values(): + assert isinstance(v, str) + assert v + + +def test_get_version_returns_real_version_for_numpy() -> None: + v = sv._get_version("numpy") + assert v is not None + assert isinstance(v, str) + assert v[0].isdigit() + + +def test_get_version_returns_none_for_missing_module() -> None: + assert sv._get_version("definitely_not_a_real_module_xyz_123") is None + + +def test_get_deps_info_returns_dict() -> None: + deps = sv._get_deps_info() + assert isinstance(deps, dict) + for name in ("numpy", "pydantic", "shapely"): + assert name in deps + assert deps[name] is not None + + +def test_show_versions_prints_output(capsys: pytest.CaptureFixture[str]) -> None: + sv.show_versions() + out = capsys.readouterr().out + assert "sweets core packages" in out + assert "System:" in out + assert "Python deps:" in out diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..0e5adc3 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,70 @@ +"""Tests for sweets.utils pure helpers. + +No network, no real raster files - exercises the conversion functions +(to_wkt, to_bbox, get_overlapping_bounds) and the cache-dir resolver. +""" + +from __future__ import annotations + +import json +from pathlib import Path + +import pytest + +from sweets.utils import get_cache_dir, get_overlapping_bounds, to_bbox, to_wkt + + +@pytest.fixture +def square_geojson() -> str: + """Return a unit-square polygon at the origin as a GeoJSON string.""" + return json.dumps( + { + "type": "Polygon", + "coordinates": [ + [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0], [0.0, 0.0]], + ], + } + ) + + +def test_to_wkt_and_back_round_trips(square_geojson: str) -> None: + wkt_str = to_wkt(square_geojson) + assert wkt_str.startswith("POLYGON") + assert to_bbox(wkt_str=wkt_str) == (0.0, 0.0, 1.0, 1.0) + + +def test_to_bbox_from_geojson(square_geojson: str) -> None: + assert to_bbox(geojson=square_geojson) == (0.0, 0.0, 1.0, 1.0) + + +def test_to_bbox_from_wkt() -> None: + wkt_str = "POLYGON ((-1 -2, 3 -2, 3 4, -1 4, -1 -2))" + assert to_bbox(wkt_str=wkt_str) == (-1.0, -2.0, 3.0, 4.0) + + +def test_to_bbox_raises_without_input() -> None: + with pytest.raises(ValueError, match="geojson or wkt_str"): + to_bbox() + + +def test_overlapping_bounds_partial_overlap() -> None: + assert get_overlapping_bounds((0, 0, 2, 2), (1, 1, 3, 3)) == (1.0, 1.0, 2.0, 2.0) + + +def test_overlapping_bounds_disjoint_is_nan() -> None: + # Shapely 2.x returns (nan, nan, nan, nan) for the bounds of an empty + # geometry; callers relying on intersection nonemptiness need to check. + import math + + bounds = get_overlapping_bounds((0, 0, 1, 1), (2, 2, 3, 3)) + assert len(bounds) == 4 + assert all(math.isnan(v) for v in bounds) + + +def test_get_cache_dir_respects_xdg( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.setenv("XDG_CACHE_HOME", str(tmp_path)) + p = get_cache_dir() + assert p == tmp_path / "sweets" + assert p.is_dir()