From 85f5cf6eeaa5affc54bd65c8a7d0ac1e8e363290 Mon Sep 17 00:00:00 2001 From: Michael Booth Date: Mon, 2 Feb 2026 14:58:42 +1100 Subject: [PATCH 1/5] Add examples-all runner and pre-submit examples check - Add scripts/run_examples.py and pixi examples-all task - Run examples-all from pre_submit_checklist Co-Authored-By: Warp --- pixi.toml | 2 +- scripts/pre_submit_checklist.py | 12 ++++ scripts/run_examples.py | 98 +++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 scripts/run_examples.py diff --git a/pixi.toml b/pixi.toml index 07961cd..2ce8479 100644 --- a/pixi.toml +++ b/pixi.toml @@ -37,7 +37,7 @@ clean = "rm -rf dist __pycache__ .pytest_cache dotenv.mojopkg" submit-modular-community = "bash scripts/submit-to-modular-community.sh" # Example tasks -example-simple = "mojo -I src examples/simple.mojo" +examples-all = "python scripts/run_examples.py" # Code quality tasks pre-commit = "pre-commit run --all-files" diff --git a/scripts/pre_submit_checklist.py b/scripts/pre_submit_checklist.py index a89d0c7..214432f 100644 --- a/scripts/pre_submit_checklist.py +++ b/scripts/pre_submit_checklist.py @@ -162,6 +162,17 @@ def check_tests() -> CheckResult: return CheckResult("Full test suite", False, "Tests failed") +def check_examples() -> CheckResult: + section("CHECK 2: Running examples (pixi run examples-all)") + cp = run_command(["pixi", "run", "examples-all"], check_name="Examples") + if cp.returncode == 0: + success("All examples ran successfully") + return CheckResult("Examples", True, "All examples ran successfully") + msg = "Examples run failed" + error(msg) + return CheckResult("Examples", False, msg) + + def check_recipe_validation() -> CheckResult: section("CHECK 2: Validating recipe schema") @@ -559,6 +570,7 @@ def main(argv: list[str] | None = None) -> int: # Run checks sequentially to preserve readable output ordering all_results.append(check_tests()) + all_results.append(check_examples()) all_results.append(check_recipe_validation()) all_results.extend(check_build_and_artifacts()) all_results.extend(check_git_tag()) diff --git a/scripts/run_examples.py b/scripts/run_examples.py new file mode 100644 index 0000000..851c028 --- /dev/null +++ b/scripts/run_examples.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +"""Example runner for Mojo libraries. + +Automatically discovers and runs all *.mojo files in the examples/ directory. +""" + +import os +import subprocess +import sys +from pathlib import Path +from typing import List, Tuple + + +def get_project_root() -> Path: + """Return the project root directory (parent of this script).""" + return Path(__file__).resolve().parents[1] + + +def discover_examples(project_root: Path) -> List[Path]: + """Return the list of example files to run in order. + + Looks for *.mojo files in the examples/ directory. If the directory does + not exist or contains no Mojo files, returns an empty list. + """ + + examples_dir = project_root / "examples" + if not examples_dir.is_dir(): + return [] + + return sorted(examples_dir.glob("*.mojo")) + + +def format_example_name(example_file: Path) -> str: + """Convert example filename to a readable name.""" + name = example_file.stem + return name.replace("_", " ").title() + + +def run_example(example_file: Path, current: int, total: int) -> Tuple[bool, int]: + """Run a single example and return (success, returncode).""" + example_name = format_example_name(example_file) + print(f"[{current}/{total}] {example_name}") + print("-" * 60) + + project_root = get_project_root() + + try: + result = subprocess.run( + ["mojo", "-I", "src", str(example_file)], + cwd=str(project_root), + check=False, + ) + print() + return result.returncode == 0, result.returncode + except KeyboardInterrupt: + print("\nInterrupted by user") + raise + except Exception as e: # pragma: no cover - defensive + print(f" ✗ ERROR: {e}") + print() + return False, 1 + + +def main() -> int: + project_root = get_project_root() + os.chdir(project_root) + + project_name = project_root.name + print(f"=== {project_name} Examples ===") + print() + + example_files = discover_examples(project_root) + if not example_files: + print("No example files found in examples/ directory") + return 1 + + print(f"Found {len(example_files)} example(s)") + print() + + failed: List[str] = [] + for i, example_file in enumerate(example_files, 1): + success, _ = run_example(example_file, i, len(example_files)) + if not success: + failed.append(example_file.name) + + print("=" * 60) + if failed: + print(f"✗ {len(failed)} example(s) FAILED:") + for name in failed: + print(f" - {name}") + return 1 + + print(f"✓ All {len(example_files)} examples ran successfully") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From e9d0bc929e1e1043780e821ec35d53cc7042f760 Mon Sep 17 00:00:00 2001 From: Michael Booth Date: Sat, 30 May 2026 17:44:39 +1000 Subject: [PATCH 2/5] chore: align mojo-dotenv with mojo 1.0 beta migration Co-Authored-By: Oz --- .github/workflows/validate-recipe.yml | 6 +-- .pre-commit-config.yaml | 4 +- RECIPE_SETUP.md | 30 ++++++------- docs/PLATFORM_BUILDS.md | 4 +- docs/RECIPE_VALIDATION.md | 26 ++++++------ docs/pixi-pre-submit.md | 2 +- packaging/recipe.yaml | 61 +++++++++++++++++++++++++++ packaging/test_package.mojo | 10 +++++ pixi.toml | 2 +- scripts/build-recipe.sh | 2 +- scripts/pre_submit_checklist.py | 27 ++++++++---- scripts/validate-recipe.sh | 6 +-- src/dotenv/__init__.mojo | 2 +- src/dotenv/parser.mojo | 2 +- tests/test_helpers.mojo | 4 +- 15 files changed, 133 insertions(+), 55 deletions(-) create mode 100644 packaging/recipe.yaml create mode 100644 packaging/test_package.mojo diff --git a/.github/workflows/validate-recipe.yml b/.github/workflows/validate-recipe.yml index 389c2f5..1f1111f 100644 --- a/.github/workflows/validate-recipe.yml +++ b/.github/workflows/validate-recipe.yml @@ -3,10 +3,10 @@ name: Validate Recipe on: push: paths: - - 'recipe.yaml' + - 'packaging/recipe.yaml' pull_request: paths: - - 'recipe.yaml' + - 'packaging/recipe.yaml' workflow_dispatch: jobs: @@ -25,7 +25,7 @@ jobs: - name: Validate recipe schema run: | pixi exec rattler-build build \ - --recipe recipe.yaml \ + --recipe packaging/recipe.yaml \ --channel conda-forge \ --channel https://conda.modular.com/max \ --channel https://prefix.dev/modular-community \ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 105583d..0fcdb39 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,8 +13,8 @@ repos: - repo: local hooks: - id: validate-recipe - name: Validate recipe.yaml schema + name: Validate packaging/recipe.yaml schema entry: ./scripts/validate-recipe.sh language: system - files: ^recipe\.yaml$ + files: ^packaging/recipe\\.yaml$ pass_filenames: false diff --git a/RECIPE_SETUP.md b/RECIPE_SETUP.md index 4fe0d44..21ceda5 100644 --- a/RECIPE_SETUP.md +++ b/RECIPE_SETUP.md @@ -1,6 +1,6 @@ # Recipe Validation Setup - Quick Start -Your mojo-toml repo now has local validation tools that match modular-community CI exactly. +Your mojo-dotenv repo now has local validation tools that match modular-community CI exactly. ## ✅ What's Been Added @@ -13,7 +13,7 @@ Your mojo-toml repo now has local validation tools that match modular-community - Auto-validates on push/PR - Shows results in Actions tab -3. **recipe.yaml** - Root-level recipe file +3. **packaging/recipe.yaml** - Canonical recipe file - Validated schema (tests:, documentation:, repository:) - Mojo 0.25.7 with context variables - Ready for modular-community submission @@ -28,14 +28,14 @@ Your mojo-toml repo now has local validation tools that match modular-community ### Validate Locally (Before Committing) ```bash -cd /Users/mjboothaus/code/github/databooth/mojo-toml -./scripts/validate-recipe.sh recipe.yaml +cd /Users/mjboothaus/code/github/databooth/mojo-dotenv +./scripts/validate-recipe.sh packaging/recipe.yaml ``` **Expected output:** ``` ✅ Recipe validation passed! -Your recipe.yaml follows the modular-community schema. +Your packaging/recipe.yaml follows the modular-community schema. ``` ### Update Other Packages @@ -49,13 +49,13 @@ cp .github/workflows/validate-recipe.yml ../mojo-yaml/.github/workflows/ cp docs/RECIPE_VALIDATION.md ../mojo-yaml/docs/ # Copy recipe from modular-community (already validated) -cp /path/to/modular-community/recipes/mojo-yaml/recipe.yaml ../mojo-yaml/ +cp /path/to/modular-community/recipes/mojo-yaml/recipe.yaml ../mojo-yaml/packaging/recipe.yaml ``` ### Automated Validation -The GitHub Actions workflow runs automatically when `recipe.yaml` changes. View results at: -`https://github.com/DataBooth/mojo-toml/actions` +The GitHub Actions workflow runs automatically when `packaging/recipe.yaml` changes. View results at: +`https://github.com/DataBooth/mojo-dotenv/actions` ## 📋 Integration Options @@ -67,10 +67,10 @@ Add to `.pre-commit-config.yaml`: - repo: local hooks: - id: validate-recipe - name: Validate recipe.yaml + name: Validate packaging/recipe.yaml entry: ./scripts/validate-recipe.sh language: system - files: ^recipe\.yaml$ + files: ^packaging/recipe\\.yaml$ pass_filenames: false ``` @@ -82,7 +82,7 @@ Add to `justfile`: ```just validate-recipe: - ./scripts/validate-recipe.sh recipe.yaml + ./scripts/validate-recipe.sh packaging/recipe.yaml ``` Usage: `just validate-recipe` @@ -93,15 +93,15 @@ Add to `pixi.toml`: ```toml [tasks] -validate-recipe = "./scripts/validate-recipe.sh recipe.yaml" +validate-recipe = "./scripts/validate-recipe.sh packaging/recipe.yaml" ``` Usage: `pixi run validate-recipe` ## 🔄 Workflow -1. **Update recipe.yaml** - Make your changes -2. **Validate locally** - `./scripts/validate-recipe.sh recipe.yaml` +1. **Update packaging/recipe.yaml** - Make your changes +2. **Validate locally** - `./scripts/validate-recipe.sh packaging/recipe.yaml` 3. **Fix issues** - If validation fails 4. **Commit** - Once validation passes 5. **Submit PR** - To modular-community with confidence @@ -124,7 +124,7 @@ See `docs/RECIPE_VALIDATION.md` for: ## 🔗 Next Steps -1. Test validation: `./scripts/validate-recipe.sh recipe.yaml` +1. Test validation: `./scripts/validate-recipe.sh packaging/recipe.yaml` 2. Add to pre-commit: Edit `.pre-commit-config.yaml` 3. Replicate to other packages: Copy files as shown above 4. Read full guide: `docs/RECIPE_VALIDATION.md` diff --git a/docs/PLATFORM_BUILDS.md b/docs/PLATFORM_BUILDS.md index 7e0e4af..3c557ba 100644 --- a/docs/PLATFORM_BUILDS.md +++ b/docs/PLATFORM_BUILDS.md @@ -11,7 +11,7 @@ All your mojo-* packages contain **pure Mojo source code** with no platform-spec ### What You're Running Locally When you run `./scripts/validate-recipe.sh`, it performs: -- **Schema validation** - Checks recipe.yaml structure +- **Schema validation** - Checks `packaging/recipe.yaml` structure - **Dependency resolution** - Verifies channels and requirements - **Render-only mode** - Doesn't actually compile/build @@ -114,7 +114,7 @@ build: ```bash docker run -it --rm -v $(pwd):/workspace condaforge/miniforge3:latest bash cd /workspace -./scripts/validate-recipe.sh recipe.yaml +./scripts/validate-recipe.sh packaging/recipe.yaml ``` ### Test on Linux (via GitHub Actions) diff --git a/docs/RECIPE_VALIDATION.md b/docs/RECIPE_VALIDATION.md index b3fbe9c..543aa76 100644 --- a/docs/RECIPE_VALIDATION.md +++ b/docs/RECIPE_VALIDATION.md @@ -1,6 +1,6 @@ # Recipe Validation for modular-community -This guide explains how to validate your `recipe.yaml` locally before submitting to modular-community, ensuring it passes CI on the first try. +This guide explains how to validate your `packaging/recipe.yaml` locally before submitting to modular-community, ensuring it passes CI on the first try. ## Why Validate Locally? @@ -27,27 +27,27 @@ modular-community uses `rattler-build` to parse and build packages. Running the Run the validation script from your package root: ```bash -./scripts/validate-recipe.sh recipe.yaml +./scripts/validate-recipe.sh packaging/recipe.yaml ``` This runs the exact same validation as modular-community CI in `--render-only` mode (no actual build). **Example output:** ``` -🔍 Validating recipe.yaml against modular-community schema... +🔍 Validating packaging/recipe.yaml against modular-community schema... 🏗️ Running rattler-build validation... ✅ Recipe validation passed! -Your recipe.yaml follows the modular-community schema. +Your packaging/recipe.yaml follows the modular-community schema. It should pass CI when submitted. ``` ### Method 2: GitHub Actions (Automated) The `.github/workflows/validate-recipe.yml` workflow runs automatically when you: -- Push changes to `recipe.yaml` -- Create a PR that modifies `recipe.yaml` +- Push changes to `packaging/recipe.yaml` +- Create a PR that modifies `packaging/recipe.yaml` View results in the "Actions" tab of your repo. @@ -57,7 +57,7 @@ For advanced users who want full control: ```bash pixi exec rattler-build build \ - --recipe recipe.yaml \ + --recipe packaging/recipe.yaml \ --channel conda-forge \ --channel https://conda.modular.com/max \ --channel https://prefix.dev/modular-community \ @@ -123,10 +123,10 @@ repos: - repo: local hooks: - id: validate-recipe - name: Validate recipe.yaml + name: Validate packaging/recipe.yaml entry: ./scripts/validate-recipe.sh language: system - files: ^recipe\.yaml$ + files: ^packaging/recipe\\.yaml$ pass_filenames: false ``` @@ -137,9 +137,9 @@ Then install: `pre-commit install` Add to `justfile`: ```just -# Validate recipe.yaml against modular-community schema +# Validate packaging/recipe.yaml against modular-community schema validate-recipe: - ./scripts/validate-recipe.sh recipe.yaml + ./scripts/validate-recipe.sh packaging/recipe.yaml ``` Usage: `just validate-recipe` @@ -150,7 +150,7 @@ Add to `pixi.toml`: ```toml [tasks] -validate-recipe = "./scripts/validate-recipe.sh recipe.yaml" +validate-recipe = "./scripts/validate-recipe.sh packaging/recipe.yaml" ``` Usage: `pixi run validate-recipe` @@ -172,7 +172,7 @@ Read the error output carefully - it tells you exactly which line/field is probl ### Need more details? Run with verbose output: ```bash -RATTLER_BUILD_LOG=debug ./scripts/validate-recipe.sh recipe.yaml +RATTLER_BUILD_LOG=debug ./scripts/validate-recipe.sh packaging/recipe.yaml ``` ## Reference diff --git a/docs/pixi-pre-submit.md b/docs/pixi-pre-submit.md index b98364b..03f234d 100644 --- a/docs/pixi-pre-submit.md +++ b/docs/pixi-pre-submit.md @@ -45,7 +45,7 @@ There are two equivalent tasks: Both run `python scripts/pre_submit_checklist.py`, which performs: 1. **Tests** – `pixi run test-all` for the full test suite. -2. **Recipe validation** – `./scripts/validate-recipe.sh recipe.yaml` against the modular-community schema. +2. **Recipe validation** – `./scripts/validate-recipe.sh packaging/recipe.yaml` against the modular-community schema. 3. **Package build** – `./scripts/build-recipe.sh`, using `rattler-build` with tests disabled (tests are already covered by `test-all`). 4. **Git tag check** – ensures a `v` tag exists and matches `HEAD`. 5. **Install check** – creates a temporary pixi project, adds a file:// channel pointing at `output/`, and verifies that the built package can be installed and that the expected files appear under `.pixi/envs/default/lib/mojo`. diff --git a/packaging/recipe.yaml b/packaging/recipe.yaml new file mode 100644 index 0000000..8d31460 --- /dev/null +++ b/packaging/recipe.yaml @@ -0,0 +1,61 @@ +context: + version: "0.2.2" + mojo_version: "=0.26.1" + +package: + name: mojo-dotenv + version: ${{ version }} + +source: + git: https://github.com/DataBooth/mojo-dotenv + tag: v${{ version }} + +build: + number: 0 + noarch: generic + script: + - mkdir -p $PREFIX/lib/mojo/dotenv + - cp -r src/dotenv/* $PREFIX/lib/mojo/dotenv/ + +requirements: + build: + - mojo-compiler ${{ mojo_version }} + host: + - mojo-compiler ${{ mojo_version }} + run: + # Mojo bytecode is not forwards-compatible across compiler minor versions, + # so we require the exact compiler series used at build time. + - mojo-compiler ${{ mojo_version }} + +tests: + - files: + source: + - test_package.mojo + script: + # Basic sanity checks: files installed under PREFIX + - test -f $PREFIX/lib/mojo/dotenv/__init__.mojo + - test -f $PREFIX/lib/mojo/dotenv/parser.mojo + - test -f $PREFIX/lib/mojo/dotenv/loader.mojo + - test -f $PREFIX/lib/mojo/dotenv/finder.mojo + # Execute smoke test. In the build test environment the file lives under + # info/recipe/, while in the installed test-files environment it is copied + # next to this script. Handle both cases. + - if [ -f info/recipe/test_package.mojo ]; then $PREFIX/bin/mojo -I $PREFIX/lib/mojo info/recipe/test_package.mojo; else $PREFIX/bin/mojo -I $PREFIX/lib/mojo test_package.mojo; fi + +about: + homepage: https://github.com/DataBooth/mojo-dotenv + repository: https://github.com/DataBooth/mojo-dotenv + documentation: https://github.com/DataBooth/mojo-dotenv/blob/main/README.md + license: Apache-2.0 + license_file: LICENSE + summary: Load environment variables from .env files in Mojo + description: | + A production-ready .env file parser and loader for Mojo with near-100% python-dotenv compatibility. + + Features: + - Parse .env files to Dict or load into environment + - Variable expansion (${VAR} and $VAR syntax) + - Multiline values and escape sequences + - Auto-discovery with find_dotenv() + - 98%+ compatible with python-dotenv + - 49 comprehensive tests using Mojo's TestSuite framework diff --git a/packaging/test_package.mojo b/packaging/test_package.mojo new file mode 100644 index 0000000..2aee751 --- /dev/null +++ b/packaging/test_package.mojo @@ -0,0 +1,10 @@ +from dotenv import dotenv_values, load_dotenv, find_dotenv + +fn main() raises: + # Basic smoke test: ensure we can import and call the public API without error. + var path = find_dotenv() + # We do not assert on specific values here; we just ensure calls succeed. + var _ = dotenv_values(path) + var _ = load_dotenv(path, verbose=False, override=False) + + print("ok") diff --git a/pixi.toml b/pixi.toml index 2ce8479..ae322e6 100644 --- a/pixi.toml +++ b/pixi.toml @@ -47,7 +47,7 @@ pre-commit-install = "pre-commit install" check-mojoenv = "cd ../mojoenv && mojo main.mojo" # Release / validation tasks -validate-recipe = "./scripts/validate-recipe.sh recipe.yaml" +validate-recipe = "./scripts/validate-recipe.sh packaging/recipe.yaml" pre-submit = "python scripts/pre_submit_checklist.py" pre-submit-modular-community = "python scripts/pre_submit_checklist.py" diff --git a/scripts/build-recipe.sh b/scripts/build-recipe.sh index df9a064..20f5325 100644 --- a/scripts/build-recipe.sh +++ b/scripts/build-recipe.sh @@ -10,7 +10,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" -RECIPE_FILE="$PROJECT_ROOT/recipe.yaml" +RECIPE_FILE="$PROJECT_ROOT/packaging/recipe.yaml" OUTPUT_DIR="$PROJECT_ROOT/output" # Colours for output diff --git a/scripts/pre_submit_checklist.py b/scripts/pre_submit_checklist.py index 214432f..f333308 100644 --- a/scripts/pre_submit_checklist.py +++ b/scripts/pre_submit_checklist.py @@ -41,7 +41,7 @@ PROJECT_ROOT = Path(__file__).resolve().parents[1] SCRIPT_DIR = PROJECT_ROOT / "scripts" -RECIPE_FILE = PROJECT_ROOT / "recipe.yaml" +RECIPE_FILE = PROJECT_ROOT / "packaging" / "recipe.yaml" OUTPUT_DIR = PROJECT_ROOT / "output" PIXl_MANIFEST = PROJECT_ROOT / "pixi.toml" @@ -117,17 +117,19 @@ def run_command( def get_recipe_version(path: Path) -> str | None: - """Extract the concrete numeric version from recipe.yaml. + """Extract recipe version from context.version or package.version. - The file contains multiple "version" fields (context.version, - package.version template). We want the numeric value from the - context block, e.g. "0.5.1". + Prefer context.version when present. Ignore templated values such as + "${{ version }}". """ if not path.is_file(): return None + context_version: str | None = None + package_version: str | None = None in_context = False + in_package = False try: with path.open("r", encoding="utf-8") as f: for raw_line in f: @@ -138,18 +140,25 @@ def get_recipe_version(path: Path) -> str | None: # Top-level key if not line.startswith(" "): in_context = line.strip().startswith("context:") + in_package = line.strip().startswith("package:") continue - if in_context: + if in_context or in_package: stripped = line.strip() if stripped.startswith("version:"): _, value = stripped.split(":", 1) - return value.strip().strip("'\"") + version = value.strip().strip("'\"") + if "${{" in version: + continue + if in_context: + context_version = version + elif in_package: + package_version = version except OSError as exc: error(f"Failed to read recipe file: {exc}") return None - return None + return context_version or package_version def check_tests() -> CheckResult: @@ -234,7 +243,7 @@ def check_git_tag() -> List[CheckResult]: version = get_recipe_version(RECIPE_FILE) if not version: - msg = "Could not extract version from recipe.yaml" + msg = f"Could not extract version from {RECIPE_FILE}" error(msg) results.append(CheckResult("Git tag exists", False, msg)) return results diff --git a/scripts/validate-recipe.sh b/scripts/validate-recipe.sh index d0ace3e..ee6f369 100755 --- a/scripts/validate-recipe.sh +++ b/scripts/validate-recipe.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -# Validate recipe.yaml against modular-community schema +# Validate packaging/recipe.yaml against modular-community schema # This runs the same validation as modular-community CI set -euo pipefail -RECIPE_FILE="${1:-recipe.yaml}" +RECIPE_FILE="${1:-packaging/recipe.yaml}" echo "🔍 Validating ${RECIPE_FILE} against modular-community schema..." echo "" @@ -36,7 +36,7 @@ echo "" if [ $EXIT_CODE -eq 0 ]; then echo "✅ Recipe validation passed!" echo "" - echo "Your recipe.yaml follows the modular-community schema." + echo "Your ${RECIPE_FILE} follows the modular-community schema." echo "It should pass CI when submitted." else echo "❌ Recipe validation failed!" diff --git a/src/dotenv/__init__.mojo b/src/dotenv/__init__.mojo index 6cac992..388969c 100644 --- a/src/dotenv/__init__.mojo +++ b/src/dotenv/__init__.mojo @@ -4,7 +4,7 @@ A modern implementation of .env file parsing for Mojo, compatible with python-do """ from pathlib import Path -from collections import Dict +from std.collections import Dict from .parser import parse_dotenv from .loader import load_dotenv from .finder import find_dotenv diff --git a/src/dotenv/parser.mojo b/src/dotenv/parser.mojo index 5872934..e1653e9 100644 --- a/src/dotenv/parser.mojo +++ b/src/dotenv/parser.mojo @@ -3,7 +3,7 @@ This module provides functions to parse .env file lines and extract key-value pairs. """ -from collections import Dict, Optional, List +from std.collections import Dict, List, Optional from os import getenv diff --git a/tests/test_helpers.mojo b/tests/test_helpers.mojo index 87e5861..aea05a7 100644 --- a/tests/test_helpers.mojo +++ b/tests/test_helpers.mojo @@ -1,8 +1,7 @@ """Test helper functions and edge cases.""" -from testing import assert_equal, assert_true +from testing import assert_equal, assert_true, TestSuite from dotenv import dotenv_values, find_dotenv -from pathlib import Path def test_backslash_counting(): @@ -73,7 +72,6 @@ def test_inline_comments_respect_quotes(): def main(): - from testing import TestSuite var suite = TestSuite() suite.test[test_backslash_counting]() suite.test[test_undefined_variables_remain_literal]() From bbe949367e512cc1b259f5cdb32b5a279c0e5dee Mon Sep 17 00:00:00 2001 From: Michael Booth Date: Sat, 30 May 2026 18:33:10 +1000 Subject: [PATCH 3/5] Align release metadata to 0.9.1 Co-Authored-By: Oz --- packaging/recipe.yaml | 2 +- pixi.toml | 2 +- recipe.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/recipe.yaml b/packaging/recipe.yaml index 8d31460..79a8457 100644 --- a/packaging/recipe.yaml +++ b/packaging/recipe.yaml @@ -1,5 +1,5 @@ context: - version: "0.2.2" + version: "0.9.1" mojo_version: "=0.26.1" package: diff --git a/pixi.toml b/pixi.toml index ae322e6..b90f868 100644 --- a/pixi.toml +++ b/pixi.toml @@ -3,7 +3,7 @@ authors = ["Michael Booth "] channels = ["conda-forge", "https://conda.modular.com/max"] name = "mojo-dotenv" platforms = ["linux-64", "linux-aarch64", "osx-arm64"] -version = "0.2.1" +version = "0.9.1" [activation] env = { MOJO_PATH = "$PIXI_PROJECT_ROOT/src" } diff --git a/recipe.yaml b/recipe.yaml index 8d31460..79a8457 100644 --- a/recipe.yaml +++ b/recipe.yaml @@ -1,5 +1,5 @@ context: - version: "0.2.2" + version: "0.9.1" mojo_version: "=0.26.1" package: From 4044107b37e92a9e40fcf9d95fd3b502ba7218ec Mon Sep 17 00:00:00 2001 From: Michael Booth Date: Sat, 30 May 2026 20:12:19 +1000 Subject: [PATCH 4/5] ci: update validate-recipe pixi version Co-Authored-By: Oz --- .github/workflows/validate-recipe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-recipe.yml b/.github/workflows/validate-recipe.yml index 1f1111f..7ceed4a 100644 --- a/.github/workflows/validate-recipe.yml +++ b/.github/workflows/validate-recipe.yml @@ -17,7 +17,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.9.3 with: - pixi-version: v0.37.0 + pixi-version: latest - name: Install rattler-build run: pixi global install rattler-build From 7d89ea708d476bb7c76c089174527bb2b64baebe Mon Sep 17 00:00:00 2001 From: Michael Booth Date: Sun, 16 Aug 2026 18:55:18 +1000 Subject: [PATCH 5/5] Migrate mojo-dotenv to Mojo 1.0 baseline Co-Authored-By: Oz --- CHANGELOG.md | 8 +- docs/JUST_SETUP.md | 31 + examples/simple.mojo | 4 +- justfile | 17 + packaging/recipe.yaml | 4 +- packaging/test_package.mojo | 2 +- pixi.lock | 2457 +++++++++++++++------------------ pixi.toml | 10 +- recipe.yaml | 4 +- src/dotenv/__init__.mojo | 4 +- src/dotenv/finder.mojo | 4 +- src/dotenv/loader.mojo | 8 +- src/dotenv/parser.mojo | 36 +- tests/test_basic.mojo | 14 +- tests/test_escapes.mojo | 16 +- tests/test_export.mojo | 8 +- tests/test_helpers.mojo | 20 +- tests/test_load_dotenv.mojo | 10 +- tests/test_missing_files.mojo | 22 +- tests/test_multiline.mojo | 16 +- tests/test_override.mojo | 16 +- tests/test_phase3plus.mojo | 14 +- tests/test_python_compat.mojo | 20 +- tests/test_variables.mojo | 16 +- 24 files changed, 1300 insertions(+), 1461 deletions(-) create mode 100644 docs/JUST_SETUP.md create mode 100644 justfile diff --git a/CHANGELOG.md b/CHANGELOG.md index bc1ebc8..8438541 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed -- Bumped MAX / Mojo toolchain dependency to `max ">=26.1.0,<27"` and updated recipes to pin `mojo_version = "=0.26.1"`. -- Updated parser string handling to use `codepoint_slices()` and `List[String]` helpers instead of direct `String` indexing, matching Mojo 0.26.1 `__getitem__` semantics while preserving python-dotenv compatibility. -- Adopted a "no warnings" policy for the core library and tests so future migrations surface only new issues. +- Migrated workspace/runtime dependencies and recipe compiler pins to Mojo `1.0.0`. +- Updated source/tests/examples/packaging from legacy `fn` syntax and older imports to Mojo 1.0-compatible forms (`def`, `std.pathlib`, `std.os`, `std.python`). +- Fixed UTF-8-safe string handling for Mojo 1.0 by replacing `len(String)` and direct string slicing with explicit APIs (`byte_length()`, `s[byte=...]`). +- Added missing `raises` annotations through test call chains to satisfy Mojo 1.0 checked-raises behaviour. +- Revalidated migration with `pixi run test-all` (all 11 suites passing) and `pixi run build-package` (success with warnings only). ### Planned for v0.3.0 - Multiple .env file support with precedence handling diff --git a/docs/JUST_SETUP.md b/docs/JUST_SETUP.md new file mode 100644 index 0000000..a30a163 --- /dev/null +++ b/docs/JUST_SETUP.md @@ -0,0 +1,31 @@ +# Just setup +This repository uses `just` to expose self-documented workflows. + +## What is Just? +Just is a command runner similar to `make`, with a simpler syntax. + +Official site: +- https://just.systems + +Installation instructions: +- https://just.systems/man/en/chapter_4.html + +Install options: +- macOS (Homebrew): `brew install just` +- Linux (Cargo): `cargo install just` +- Windows (Chocolatey): `choco install just` +- Windows (Scoop): `scoop install just` + +## Quick start +From the repository root: + +```shell +just --list +``` + +## Key recipes +- `just pixi-tasks` +- `just test` +- `just build` +- `just examples` +- `just run ` diff --git a/examples/simple.mojo b/examples/simple.mojo index 66a71d2..30ab847 100644 --- a/examples/simple.mojo +++ b/examples/simple.mojo @@ -1,10 +1,10 @@ """Simple example using mojo-dotenv.""" from dotenv import dotenv_values, load_dotenv -from os import getenv +from std.os import getenv -fn main() raises: +def main() raises: print("=" * 60) print("mojo-dotenv Example") print("=" * 60) diff --git a/justfile b/justfile new file mode 100644 index 0000000..c9613e0 --- /dev/null +++ b/justfile @@ -0,0 +1,17 @@ +default: + @just --list + +pixi-tasks: + @pixi task list + +run task: + pixi run {{task}} + +test: + pixi run test-all + +build: + pixi run build-package + +examples: + pixi run examples-all diff --git a/packaging/recipe.yaml b/packaging/recipe.yaml index 79a8457..099193e 100644 --- a/packaging/recipe.yaml +++ b/packaging/recipe.yaml @@ -1,6 +1,6 @@ context: version: "0.9.1" - mojo_version: "=0.26.1" + mojo_version: "=1.0.0" package: name: mojo-dotenv @@ -25,7 +25,7 @@ requirements: run: # Mojo bytecode is not forwards-compatible across compiler minor versions, # so we require the exact compiler series used at build time. - - mojo-compiler ${{ mojo_version }} + - ${{ pin_compatible('mojo-compiler') }} tests: - files: diff --git a/packaging/test_package.mojo b/packaging/test_package.mojo index 2aee751..cbf0806 100644 --- a/packaging/test_package.mojo +++ b/packaging/test_package.mojo @@ -1,6 +1,6 @@ from dotenv import dotenv_values, load_dotenv, find_dotenv -fn main() raises: +def main() raises: # Basic smoke test: ensure we can import and call the public API without error. var path = find_dotenv() # We do not assert on specific values here; we just ensure calls succeed. diff --git a/pixi.lock b/pixi.lock index e7e4b15..72fbb36 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1,182 +1,177 @@ -version: 6 +version: 7 +platforms: +- name: linux-64 +- name: linux-aarch64 +- name: osx-arm64 environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://conda.modular.com/max/ - 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/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.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/libexpat-2.7.3-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/libgcc-15.2.0-he0feb66_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max/linux-64/max-26.1.0-3.14release.conda - - conda: https://conda.modular.com/max/linux-64/max-core-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.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.1-py314h2b28147_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.13-hb17b654_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.2-h32b2ec7_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rattler-build-0.55.1-he64ecbb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_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/typing-extensions-4.15.0-h396c80c_0.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/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.1.0-py314h9891dd4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-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/tornado-6.5.8-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_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/packaging-26.3-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.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-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.modular.com/max/linux-64/mojo-1.0.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-compiler-1.0.0-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.5.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-1.0.0-release.conda linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h5bc82ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h095d8e5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.22-h80f16a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max/linux-aarch64/max-26.1.0-3.14release.conda - - conda: https://conda.modular.com/max/linux-aarch64/max-core-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.1-py314haac167e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/patchelf-0.17.2-h884eca8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/prek-0.4.13-h069e38c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.2-hb06a95a_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rattler-build-0.55.1-hb434046_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.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_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ukkonen-1.1.0-py314hd7d8586_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.8-py314hafb4487_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hec9560f_11.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_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/packaging-26.3-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.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-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-1.0.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-1.0.0-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.5.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-1.0.0-release.conda 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/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_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/noarch/click-8.4.2-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_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/packaging-26.3-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.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-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.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/libexpat-2.7.3-haf25636_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/libgcc-15.2.0-hcbb3090_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-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/libopenblas-0.3.30-openmp_ha158390_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_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/llvm-openmp-21.1.8-h4a912ad_0.conda - - conda: https://conda.modular.com/max/osx-arm64/max-26.1.0-3.14release.conda - - conda: https://conda.modular.com/max/osx-arm64/max-core-26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.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.1-py314hae46ccb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.13-h6fdd925_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.2-h40d2674_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rattler-build-0.55.1-h6fdd925_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_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/typing-extensions-4.15.0-h396c80c_0.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/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.1.0-py314h6cfcd04_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-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/tornado-6.5.8-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.5.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-1.0.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-1.0.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-1.0.0-release.conda packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -197,28 +192,6 @@ packages: license_family: BSD size: 23621 timestamp: 1650670423406 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 - md5: 6168d71addc746e8f2b8d57dfd2edcea - depends: - - libgomp >=7.5.0 - constrains: - - openmp_impl 9999 - license: BSD-3-Clause - license_family: BSD - size: 23712 - timestamp: 1650670790230 -- 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 - size: 8325 - timestamp: 1764092507920 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 md5: 51a19bba1b8ebfb60df25cde030b7ebc @@ -229,109 +202,6 @@ packages: license_family: BSD size: 260341 timestamp: 1757437258798 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - sha256: d2a296aa0b5f38ed9c264def6cf775c0ccb0f110ae156fcde322f3eccebf2e01 - md5: 2921ac0b541bf37c69e66bd6d9a43bca - depends: - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - size: 192536 - timestamp: 1757437302703 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 - md5: 58fd217444c2a5701a44244faf518206 - depends: - - __osx >=11.0 - license: bzip2-1.0.6 - license_family: BSD - size: 125061 - timestamp: 1757437486465 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2 - md5: bddacf101bb4dd0e51811cb69c7790e2 - depends: - - __unix - license: ISC - size: 146519 - timestamp: 1767500828366 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - sha256: c6339858a0aaf5d939e00d345c98b99e4558f285942b27232ac098ad17ac7f8e - md5: cf45f4278afd6f4e6d03eda0f435d527 - depends: - - __glibc >=2.17,<3.0.a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - pycparser - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 300271 - timestamp: 1761203085220 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda - sha256: 728e55b32bf538e792010308fbe55d26d02903ddc295fbe101167903a123dd6f - md5: f333c475896dbc8b15efd8f7c61154c7 - depends: - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - pycparser - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 318357 - timestamp: 1761203973223 -- 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 - size: 292983 - timestamp: 1761203354051 -- 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 - size: 13589 - timestamp: 1763607964133 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda - noarch: generic - sha256: 2831632c7a1a8d406739cab7e45e3a22a4109542baf0b486dffc104d14e3d3c3 - md5: ff215afbcf27f6267d6ec09209a4fe0f - depends: - - python >=3.14,<3.15.0a0 - - python_abi * *_cp314 - license: Python-2.0 - size: 49613 - timestamp: 1769457358023 -- conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - sha256: 6d977f0b2fc24fee21a9554389ab83070db341af6d6f09285360b2e09ef8b26e - md5: 003b8ba0a94e2f1e117d0bd46aebc901 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - size: 275642 - timestamp: 1752823081585 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - sha256: 8b90dc21f00167a7e58abb5141a140bdb31a7c5734fe1361b5f98f4a4183fd32 - md5: 2cfaaccf085c133a477f0a7a8657afe9 - depends: - - python >=3.10 - license: Unlicense - size: 18661 - timestamp: 1768022315929 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 md5: 186a18e3ba246eccfc7cff00cd19a870 @@ -343,35 +213,36 @@ packages: license_family: MIT size: 12728445 timestamp: 1767969922681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - sha256: 09f7f9213eb68e7e4291cd476e72b37f3ded99ed957528567f32f5ba6b611043 - md5: 15b35dc33e185e7d2aac1cfcd6778627 - depends: - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 12852963 - timestamp: 1767975394622 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - sha256: d4cefbca587429d1192509edc52c88de52bc96c2447771ddc1f8bee928aed5ef - md5: 1e93aca311da0210e660d2247812fa02 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda + sha256: dd053c96dcb0dcfd59422aefea9d2fe937a190167f34fba7893ec1e10a7e8963 + md5: ba55d1b89fd7775e67de8291029b4059 depends: - - __osx >=11.0 - license: MIT - license_family: MIT - size: 12358010 - timestamp: 1767970350308 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda - sha256: 6a88cdde151469131df1948839ac2315ada99cf8d38aaacc9a7a5984e9cd8c19 - md5: 8bc5851c415865334882157127e75799 + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: + weak: + - keyutils >=1.6.3,<2.0a0 + size: 135295 + timestamp: 1786739238128 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda + sha256: 2a5c38c85e63df84c4e69ee71439841ce570d259ae3060627bb9a49a938d66f4 + md5: 53318d715316929a574f83591308b1f8 depends: - - python >=3.10 - - ukkonen + - __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 >=15 + - libstdcxx >=15 + - openssl >=3.5.7,<4.0a0 license: MIT license_family: MIT - size: 79302 - timestamp: 1768295306539 + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1394333 + timestamp: 1786762112514 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda sha256: 1027bd8aa0d5144e954e426ab6218fd5c14e54a98f571985675468b339c808ca md5: 3ec0aa5037d39b06554109a01e6fb0c6 @@ -384,119 +255,21 @@ packages: license_family: GPL size: 730831 timestamp: 1766513089214 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda - sha256: 12e7341b89e9ea319a3b4de03d02cd988fa02b8a678f4e46779515009b5e475c - md5: 849c4cbbf8dd1d71e66c13afed1d2f12 - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-aarch64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 876257 - timestamp: 1766513180236 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - build_number: 5 - sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c - md5: c160954f7418d7b6e87eaf05a8913fa9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - liblapack 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18213 - timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - build_number: 5 - sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 - md5: 5afcea37a46f76ec1322943b3c4dfdc0 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD - size: 18369 - timestamp: 1765818610617 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - build_number: 5 - sha256: 620a6278f194dcabc7962277da6835b1e968e46ad0c8e757736255f5ddbfca8d - md5: bcc025e2bbaf8a92982d20863fe1fb69 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - mkl <2026 - license: BSD-3-Clause - license_family: BSD - size: 18546 - timestamp: 1765819094137 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - build_number: 5 - sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 - md5: 6636a2b6f1a87572df2970d3ebc87cc0 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapack 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18194 - timestamp: 1765818837135 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - build_number: 5 - sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 - md5: 0b2f1143ae2d0aa4c991959d0daaf256 - depends: - - libblas 3.11.0 5_haddc8a3_openblas - constrains: - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD - size: 18371 - timestamp: 1765818618899 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - build_number: 5 - sha256: 38809c361bbd165ecf83f7f05fae9b791e1baa11e4447367f38ae1327f402fc0 - md5: efd8bd15ca56e9d01748a3beab8404eb - depends: - - libblas 3.11.0 5_h51639a9_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause license_family: BSD - size: 18548 - timestamp: 1765819108956 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda - sha256: 3a924cbce92b0dceb5d392036e692bac1e60ae90d85c7c78264c672a205c007b - md5: cd7367d0c0f49853f8f3560bfb4456ab - depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - size: 570705 - timestamp: 1769754656112 + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 134676 + timestamp: 1738479519902 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda sha256: 1e1b08f6211629cbc2efe7a5bca5953f8f6b3cae0eeb04ca4dacee1bd4e2db2f md5: 8b09ae86839581147ef2e5c5e229d164 @@ -509,28 +282,6 @@ packages: license_family: MIT size: 76643 timestamp: 1763549731408 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - sha256: cc2581a78315418cc2e0bb2a273d37363203e79cefe78ba6d282fed546262239 - md5: b414e36fbb7ca122030276c75fa9c34a - depends: - - libgcc >=14 - constrains: - - expat 2.7.3.* - license: MIT - license_family: MIT - size: 76201 - timestamp: 1763549910086 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda - sha256: fce22610ecc95e6d149e42a42fbc3cc9d9179bd4eb6232639a60f06e080eec98 - md5: b79875dbb5b1db9a4a22a4520f918e1a - depends: - - __osx >=11.0 - constrains: - - expat 2.7.3.* - license: MIT - license_family: MIT - size: 67800 - timestamp: 1763549994166 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -541,24 +292,6 @@ packages: license_family: MIT size: 58592 timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 - md5: 2f364feefb6a7c00423e80dcb12db62a - depends: - - libgcc >=14 - license: MIT - license_family: MIT - size: 55952 - timestamp: 1769456078358 -- 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 - size: 40979 - timestamp: 1769456747661 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda sha256: 6eed58051c2e12b804d53ceff5994a350c61baf117ec83f5f10c953a3f311451 md5: 6d0363467e6ed84f11435eb309f2ff06 @@ -572,30 +305,6 @@ packages: license_family: GPL size: 1042798 timestamp: 1765256792743 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - sha256: 44bfc6fe16236babb271e0c693fe7fd978f336542e23c9c30e700483796ed30b - md5: cf9cd6739a3b694dcf551d898e112331 - depends: - - _openmp_mutex >=4.5 - constrains: - - libgomp 15.2.0 h8acb6b2_16 - - libgcc-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 620637 - timestamp: 1765256938043 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_16.conda - sha256: 646c91dbc422fe92a5f8a3a5409c9aac66549f4ce8f8d1cab7c2aa5db789bb69 - md5: 8b216bac0de7a9d60f3ddeba2515545c - depends: - - _openmp_mutex - constrains: - - libgcc-ng ==15.2.0=*_16 - - libgomp 15.2.0 16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 402197 - timestamp: 1765258985740 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda sha256: 5f07f9317f596a201cc6e095e5fc92621afca64829785e483738d935f8cab361 md5: 5a68259fac2da8f2ee6f7bfe49c9eb8b @@ -605,140 +314,15 @@ packages: license_family: GPL size: 27256 timestamp: 1765256804124 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - sha256: 22d7e63a00c880bd14fbbc514ec6f553b9325d705f08582e9076c7e73c93a2e1 - md5: 3e54a6d0f2ff0172903c0acfda9efc0e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + sha256: 5b3e5e4e9270ecfcd48f47e3a68f037f5ab0f529ccb223e8e5d5ac75a58fc687 + md5: 26c46f90d0e727e95c6c9498a33a09f3 depends: - - libgcc 15.2.0 h8acb6b2_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27356 - timestamp: 1765256948637 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - sha256: 8a7b01e1ee1c462ad243524d76099e7174ebdd94ff045fe3e9b1e58db196463b - md5: 40d9b534410403c821ff64f00d0adc22 - depends: - - libgfortran5 15.2.0 h68bc16d_16 - constrains: - - libgfortran-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27215 - timestamp: 1765256845586 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - sha256: 02fa489a333ee4bb5483ae6bf221386b67c25d318f2f856237821a7c9333d5be - md5: 776cca322459d09aad229a49761c0654 - depends: - - libgfortran5 15.2.0 h1b7bec0_16 - constrains: - - libgfortran-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27314 - timestamp: 1765256989755 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_16.conda - sha256: 68a6c1384d209f8654112c4c57c68c540540dd8e09e17dd1facf6cf3467798b5 - md5: 11e09edf0dde4c288508501fe621bab4 - depends: - - libgfortran5 15.2.0 hdae7583_16 - constrains: - - libgfortran-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 138630 - timestamp: 1765259217400 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - sha256: d0e974ebc937c67ae37f07a28edace978e01dc0f44ee02f29ab8a16004b8148b - md5: 39183d4e0c05609fd65f130633194e37 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 2480559 - timestamp: 1765256819588 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - sha256: bde541944566254147aab746e66014682e37a259c9a57a0516cf5d05ec343d14 - md5: 87b4ffedaba8b4d675479313af74f612 - depends: - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 1485817 - timestamp: 1765256963205 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_16.conda - sha256: 9fb7f4ff219e3fb5decbd0ee90a950f4078c90a86f5d8d61ca608c913062f9b0 - md5: 265a9d03461da24884ecc8eb58396d57 - depends: - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 598291 - timestamp: 1765258993165 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda - sha256: 5b3e5e4e9270ecfcd48f47e3a68f037f5ab0f529ccb223e8e5d5ac75a58fc687 - md5: 26c46f90d0e727e95c6c9498a33a09f3 - depends: - - __glibc >=2.17,<3.0.a0 + - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL size: 603284 timestamp: 1765256703881 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda - sha256: 0a9d77c920db691eb42b78c734d70c5a1d00b3110c0867cfff18e9dd69bc3c29 - md5: 4d2f224e8186e7881d53e3aead912f6c - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 587924 - timestamp: 1765256821307 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - build_number: 5 - sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 - md5: b38076eb5c8e40d0106beda6f95d7609 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18200 - timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - build_number: 5 - sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 - md5: 88d1e4133d1182522b403e9ba7435f04 - depends: - - libblas 3.11.0 5_haddc8a3_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - libcblas 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18392 - timestamp: 1765818627104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - build_number: 5 - sha256: 735a6e6f7d7da6f718b6690b7c0a8ae4815afb89138aa5793abe78128e951dbb - md5: ca9d752201b7fa1225bca036ee300f2b - depends: - - libblas 3.11.0 5_h51639a9_openblas - constrains: - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18551 - timestamp: 1765819121855 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -750,26 +334,6 @@ packages: license: 0BSD size: 113207 timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 - md5: 96944e3c92386a12755b94619bae0b35 - depends: - - libgcc >=14 - constrains: - - xz 5.8.2.* - license: 0BSD - size: 125916 - timestamp: 1768754941722 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e - md5: 009f0d956d7bfb00de86901d16e486c7 - depends: - - __osx >=11.0 - constrains: - - xz 5.8.2.* - license: 0BSD - size: 92242 - timestamp: 1768752982486 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa @@ -780,65 +344,18 @@ packages: license_family: BSD size: 92400 timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 - md5: 7b9813e885482e3ccb1fa212b86d7fd0 - depends: - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD - size: 114056 - timestamp: 1769482343003 -- 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 - size: 73690 - timestamp: 1769482560514 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 - md5: be43915efc66345cccb3c310b6ed0374 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + sha256: b677bbf1c339d894757c3dcfbb2f88649e499e4991d70ae09a1466da9a6c92d6 + md5: 965e4d531b588b2e42f66fd8e48b056c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - size: 5927939 - timestamp: 1763114673331 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 - md5: 11d7d57b7bdd01da745bbf2b67020b2e - depends: - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - size: 4959359 - timestamp: 1763114173544 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - sha256: ebbbc089b70bcde87c4121a083c724330f02a690fb9d7c6cd18c30f1b12504fa - md5: a6f6d3a31bb29e48d37ce65de54e2df0 - depends: - - __osx >=11.0 - - libgfortran - - libgfortran5 >=14.3.0 - - llvm-openmp >=19.1.7 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - size: 4284132 - timestamp: 1768547079205 + license: ISC + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 269272 + timestamp: 1779163468406 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 md5: da5be73701eecd0e8454423fd6ffcf30 @@ -850,26 +367,6 @@ packages: license: blessing size: 942808 timestamp: 1768147973361 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b - md5: 4e3ba0d5d192f99217b85f07a0761e64 - depends: - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - size: 944688 - timestamp: 1768147991301 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 - md5: 4b0bf313c53c3e89692f020fb55d5f2c - depends: - - __osx >=11.0 - - icu >=78.2,<79.0a0 - - libzlib >=1.3.1,<2.0a0 - license: blessing - size: 909777 - timestamp: 1768148320535 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda sha256: 813427918316a00c904723f1dfc3da1bbc1974c5cfe1ed1e704c6f4e0798cbc6 md5: 68f68355000ec3f1d6f26ea13e8f525f @@ -882,17 +379,6 @@ packages: license_family: GPL size: 5856456 timestamp: 1765256838573 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - sha256: 4db11a903707068ae37aa6909511c68e9af6a2e97890d1b73b0a8d87cb74aba9 - md5: 52d9df8055af3f1665ba471cce77da48 - depends: - - libgcc 15.2.0 h8acb6b2_16 - constrains: - - libstdcxx-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 5541149 - timestamp: 1765256980783 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda sha256: 81f2f246c7533b41c5e0c274172d607829019621c4a0823b5c0b4a8c7028ee84 md5: 1b3152694d236cf233b76b8c56bf0eae @@ -902,15 +388,6 @@ packages: license_family: GPL size: 27300 timestamp: 1765256885128 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda - sha256: dd5c813ae5a4dac6fa946352674e0c21b1847994a717ef67bd6cc77bc15920be - md5: 20b7f96f58ccbe8931c3a20778fb3b32 - depends: - - libstdcxx 15.2.0 hef695bb_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27376 - timestamp: 1765257033344 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -921,15 +398,6 @@ packages: license_family: BSD size: 40311 timestamp: 1766271528534 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 - md5: cf2861212053d05f27ec49c3784ff8bb - depends: - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - size: 43453 - timestamp: 1766271546875 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -942,246 +410,6 @@ packages: license_family: Other size: 60963 timestamp: 1727963148474 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 - md5: 08aad7cbe9f5a6b460d0976076b6ae64 - depends: - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 66657 - timestamp: 1727963199518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 - depends: - - __osx >=11.0 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 46438 - timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.8-h4a912ad_0.conda - sha256: 56bcd20a0a44ddd143b6ce605700fdf876bcf5c509adc50bf27e76673407a070 - md5: 206ad2df1b5550526e386087bef543c7 - depends: - - __osx >=11.0 - constrains: - - openmp 21.1.8|21.1.8.* - - intel-openmp <0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - size: 285974 - timestamp: 1765964756583 -- conda: https://conda.modular.com/max/linux-64/max-26.1.0-3.14release.conda - sha256: 4077fab89741140eeb64e74fcbca7390d926b73785aa1aa2b239e617cb31244f - depends: - - numpy >=1.18 - - typing-extensions >=4.12.2 - - pyyaml >=6.0.1 - - python-gil - - max-core ==26.1.0 release - - python_abi 3.14.* *_cp314 - constrains: - - click >=8.0.0 - - exceptiongroup >=0.2.2 - - gguf >=0.17.1 - - hf-transfer >=0.1.9 - - huggingface_hub >=0.28.0 - - llguidance >=0.7.30 - - jinja2 >=3.1.0 - - pillow >=11.0.0 - - psutil >=6.1.1 - - pydantic-settings >=2.7.1 - - pydantic - - pydantic-core - - requests >=2.32.3 - - rich >=13.0.1 - - sentencepiece >=0.2.0 - - taskgroup >=0.2.2 - - tqdm >=4.67.1 - - transformers >=4.57.0,<5.0.0 - - uvicorn >=0.34.0 - - uvloop >=0.21.0 - - aiofiles >=24.1.0 - - asgiref >=3.8.1 - - fastapi >=0.115.3 - - grpcio >=1.68.0 - - httpx >=0.28.1,<0.29 - - msgspec >=0.19.0 - - opentelemetry-api >=1.29.0 - - opentelemetry-exporter-otlp-proto-http >=1.27.0 - - opentelemetry-exporter-prometheus >=0.50b0 - - opentelemetry-sdk >=1.29.0,<1.36.0 - - prometheus_client >=0.21.0 - - protobuf >=6.31.1,<6.32.0 - - pyinstrument >=5.0.1 - - python-json-logger >=2.0.7 - - pyzmq >=26.3.0 - - regex >=2024.11.6 - - scipy >=1.13.0 - - sse-starlette >=2.1.2 - - starlette >=0.47.2 - license: LicenseRef-Modular-Proprietary - size: 6163459 - timestamp: 1769478151312 -- conda: https://conda.modular.com/max/linux-aarch64/max-26.1.0-3.14release.conda - sha256: 652fc2fb665313c402393d35abb23ec7fc0c2028ced4e71097c0256df773b4c5 - depends: - - numpy >=1.18 - - typing-extensions >=4.12.2 - - pyyaml >=6.0.1 - - python-gil - - max-core ==26.1.0 release - - python_abi 3.14.* *_cp314 - constrains: - - click >=8.0.0 - - exceptiongroup >=0.2.2 - - gguf >=0.17.1 - - hf-transfer >=0.1.9 - - huggingface_hub >=0.28.0 - - llguidance >=0.7.30 - - jinja2 >=3.1.0 - - pillow >=11.0.0 - - psutil >=6.1.1 - - pydantic-settings >=2.7.1 - - pydantic - - pydantic-core - - requests >=2.32.3 - - rich >=13.0.1 - - sentencepiece >=0.2.0 - - taskgroup >=0.2.2 - - tqdm >=4.67.1 - - transformers >=4.57.0,<5.0.0 - - uvicorn >=0.34.0 - - uvloop >=0.21.0 - - aiofiles >=24.1.0 - - asgiref >=3.8.1 - - fastapi >=0.115.3 - - grpcio >=1.68.0 - - httpx >=0.28.1,<0.29 - - msgspec >=0.19.0 - - opentelemetry-api >=1.29.0 - - opentelemetry-exporter-otlp-proto-http >=1.27.0 - - opentelemetry-exporter-prometheus >=0.50b0 - - opentelemetry-sdk >=1.29.0,<1.36.0 - - prometheus_client >=0.21.0 - - protobuf >=6.31.1,<6.32.0 - - pyinstrument >=5.0.1 - - python-json-logger >=2.0.7 - - pyzmq >=26.3.0 - - regex >=2024.11.6 - - scipy >=1.13.0 - - sse-starlette >=2.1.2 - - starlette >=0.47.2 - license: LicenseRef-Modular-Proprietary - size: 6208474 - timestamp: 1769478094501 -- conda: https://conda.modular.com/max/osx-arm64/max-26.1.0-3.14release.conda - sha256: c1b5d9f9c1026a48609ec118b85b842bf3e10630fe4e0692ebfe6ca3574e7bc2 - depends: - - numpy >=1.18 - - typing-extensions >=4.12.2 - - pyyaml >=6.0.1 - - python-gil - - max-core ==26.1.0 release - - python_abi 3.14.* *_cp314 - constrains: - - click >=8.0.0 - - exceptiongroup >=0.2.2 - - gguf >=0.17.1 - - hf-transfer >=0.1.9 - - huggingface_hub >=0.28.0 - - llguidance >=0.7.30 - - jinja2 >=3.1.0 - - pillow >=11.0.0 - - psutil >=6.1.1 - - pydantic-settings >=2.7.1 - - pydantic - - pydantic-core - - requests >=2.32.3 - - rich >=13.0.1 - - sentencepiece >=0.2.0 - - taskgroup >=0.2.2 - - tqdm >=4.67.1 - - transformers >=4.57.0,<5.0.0 - - uvicorn >=0.34.0 - - uvloop >=0.21.0 - - aiofiles >=24.1.0 - - asgiref >=3.8.1 - - fastapi >=0.115.3 - - grpcio >=1.68.0 - - httpx >=0.28.1,<0.29 - - msgspec >=0.19.0 - - opentelemetry-api >=1.29.0 - - opentelemetry-exporter-otlp-proto-http >=1.27.0 - - opentelemetry-exporter-prometheus >=0.50b0 - - opentelemetry-sdk >=1.29.0,<1.36.0 - - prometheus_client >=0.21.0 - - protobuf >=6.31.1,<6.32.0 - - pyinstrument >=5.0.1 - - python-json-logger >=2.0.7 - - pyzmq >=26.3.0 - - regex >=2024.11.6 - - scipy >=1.13.0 - - sse-starlette >=2.1.2 - - starlette >=0.47.2 - license: LicenseRef-Modular-Proprietary - size: 8630608 - timestamp: 1769480882531 -- conda: https://conda.modular.com/max/linux-64/max-core-26.1.0-release.conda - sha256: 68bd010262a735ba76b91968617fb058fb1a5a12f8dd9d27634fb8926acc3b58 - depends: - - mojo-compiler ==0.26.1.0 release - license: LicenseRef-Modular-Proprietary - size: 125228105 - timestamp: 1769478151311 -- conda: https://conda.modular.com/max/linux-aarch64/max-core-26.1.0-release.conda - sha256: 0251098f45a87e190eb6f3dd860ba0bd37d5508cd8f3163ef754be9e85fde987 - depends: - - mojo-compiler ==0.26.1.0 release - license: LicenseRef-Modular-Proprietary - size: 82165003 - timestamp: 1769478094501 -- conda: https://conda.modular.com/max/osx-arm64/max-core-26.1.0-release.conda - sha256: 964bbc6a2395095d491101b3ca5a50480f0dd27594daa1854a6c86507fdca567 - depends: - - mojo-compiler ==0.26.1.0 release - license: LicenseRef-Modular-Proprietary - size: 79089734 - timestamp: 1769480882531 -- conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - sha256: aad6cf9e55824ada1147acaee8b37c68ef1973b208a4a4182f7ac85bc20e690c - depends: - - mojo-python ==0.26.1.0 release - license: LicenseRef-Modular-Proprietary - size: 85722183 - timestamp: 1769478151311 -- conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - sha256: 5c1271c8bab4bafbc25053a2344b3a76b2b0cc0287999a7a43a2675db5f3a948 - depends: - - mojo-python ==0.26.1.0 release - license: LicenseRef-Modular-Proprietary - size: 83633893 - timestamp: 1769478094500 -- conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - sha256: 335323a29c632adaf75958366a93352082f2e6a8bee43353269e86eefa86a2cf - depends: - - mojo-python ==0.26.1.0 release - license: LicenseRef-Modular-Proprietary - size: 65952232 - timestamp: 1769480882531 -- conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda - noarch: python - sha256: 9bccbc9045984961426038832c8657198f8ef238d95e00d9bdcff2dd139b7fdf - depends: - - python - license: LicenseRef-Modular-Proprietary - size: 24169 - timestamp: 1769478151311 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -1191,86 +419,6 @@ packages: license: X11 AND BSD-3-Clause size: 891641 timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 - md5: 182afabe009dc78d8b73100255ee6868 - depends: - - libgcc >=13 - license: X11 AND BSD-3-Clause - size: 926034 - timestamp: 1738196018799 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 - md5: 068d497125e4bf8a66bf707254fff5ae - depends: - - __osx >=11.0 - license: X11 AND BSD-3-Clause - size: 797030 - timestamp: 1738196177597 -- conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda - sha256: 4fa40e3e13fc6ea0a93f67dfc76c96190afd7ea4ffc1bac2612d954b42cdc3ee - md5: eb52d14a901e23c39e9e7b4a1a5c015f - depends: - - python >=3.10 - - setuptools - license: BSD-3-Clause - license_family: BSD - size: 40866 - timestamp: 1766261270149 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.1-py314h2b28147_0.conda - sha256: 9af4bb8fef69f8b3c254b32da93bc63b7376b60b72c6ed9104fd3ad23a70891c - md5: 9536e29f857e5d0565e92fd1b54de16a - depends: - - python - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - libblas >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 8926121 - timestamp: 1768085696128 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.1-py314haac167e_0.conda - sha256: 807cbff20a80d6975e6b52eb2a4629e53954ae36d3cf77ebf6caa525a01e06e8 - md5: b95e050a9b3267193cda87e65b85c75d - depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - python 3.14.* *_cp314 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - liblapack >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 8004218 - timestamp: 1768085695526 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.1-py314hae46ccb_0.conda - sha256: e4fa9c378869e0c7e0a33ab1546ff9974050b55ad1e48b795dce4fb812513baf - md5: a67f36be1a584c382670c98b4ffea529 - depends: - - python - - __osx >=11.0 - - libcxx >=19 - - python 3.14.* *_cp314 - - liblapack >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 6991931 - timestamp: 1768085575848 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -1282,26 +430,6 @@ packages: license_family: Apache size: 3164551 timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f - md5: 25f5885f11e8b1f075bccf4a2da91c60 - depends: - - ca-certificates - - libgcc >=14 - license: Apache-2.0 - license_family: Apache - size: 3692030 - timestamp: 1769557678657 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 - md5: f4f6ad63f98f64191c3e77c5f5f29d76 - depends: - - __osx >=11.0 - - ca-certificates - license: Apache-2.0 - license_family: Apache - size: 3104268 - timestamp: 1769556384749 - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda sha256: eb355ac225be2f698e19dba4dcab7cb0748225677a9799e9cc8e4cadc3cb738f md5: ba76a6a448819560b5f8b08a9c74f415 @@ -1312,50 +440,19 @@ packages: license_family: GPL size: 94048 timestamp: 1673473024463 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/patchelf-0.17.2-h884eca8_0.conda - sha256: 8b98158f36a7a92013a1982ab7a60947151350ac5c513c1d1575825d0fa52518 - md5: bbd8dee69c4ac2e2d07bca100b8fcc31 - depends: - - libgcc-ng >=7.5.0 - - libstdcxx-ng >=7.5.0 - license: GPL-3.0-or-later - license_family: GPL - size: 101306 - timestamp: 1673473812166 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - sha256: 04c64fb78c520e5c396b6e07bc9082735a5cc28175dbe23138201d0a9441800b - md5: 1bd2e65c8c7ef24f4639ae6e850dacc2 - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - size: 23922 - timestamp: 1764950726246 -- conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda - sha256: 5b81b7516d4baf43d0c185896b245fa7384b25dc5615e7baa504b7fa4e07b706 - md5: 7f3ac694319c7eaf81a0325d6405e974 +- conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.13-hb17b654_0.conda + sha256: 5b579a2cb26b5123ef2ec1214a8f8c9d4466213515eeb151db7bff4b153e08be + md5: 3f47f856c67509daa0028bbec4e26560 depends: - - cfgv >=2.0.0 - - identify >=1.0.0 - - nodeenv >=0.11.1 - - python >=3.10 - - pyyaml >=5.1 - - virtualenv >=20.10.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 license: MIT license_family: MIT - size: 200827 - timestamp: 1765937577534 -- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 - md5: 12c566707c80111f9799308d9e265aef - depends: - - python >=3.9 - - python - license: BSD-3-Clause - license_family: BSD - size: 110100 - timestamp: 1733195786147 + run_exports: {} + size: 6509656 + timestamp: 1786372767261 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.2-h32b2ec7_101_cp314.conda build_number: 101 sha256: 24719868a471dd94041aa9873c6f87adf3b86c07878ad4e242ac97228f9e6460 @@ -1383,97 +480,23 @@ packages: size: 36833080 timestamp: 1769458770373 python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.2-hb06a95a_101_cp314.conda - build_number: 101 - sha256: daca72ef5fa5fc63077c65f5bda424d97d319889c94ae8240567d84fb185f417 - md5: 0cf826cf95b3ab14da780627c922566f - depends: - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 37220638 - timestamp: 1769457569486 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.2-h40d2674_101_cp314.conda - build_number: 101 - sha256: 0b3ae49a61b8baf1af8133e8dac0d404a66b634000de0760c8fb692a5ce86e84 - md5: f0999777d0ec086b14d68ed02a143b94 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 12570588 - timestamp: 1769459207868 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - sha256: aa98e0b1f5472161318f93224f1cfec1355ff69d2f79f896c0b9e033e4a6caf9 - md5: 083725d6cd3dc007f06d04bcf1e613a2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + noarch: python + sha256: 970b2a1d12983d8d1cc05d914ad88a0b6ef1fa14038c9649aa834dd6ebee65d7 + md5: acd216255e1370e9aeab5351b831f07c depends: - - python >=3.10 - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - _python_abi3_support 1.* + - cpython >=3.12 + - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD - size: 26922 - timestamp: 1761503229008 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda - sha256: ef9d512824e3d6e1d8d07236795b60b61f13f6f3dafcc93c4d9a87ed058f8928 - md5: 90fd30fc6dd044c0f79c7ef4e7e9fb16 - depends: - - cpython 3.14.2.* - - python_abi * *_cp314 - license: Python-2.0 - size: 49598 - timestamp: 1769457423645 -- 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 - size: 6989 - timestamp: 1752805904792 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyyaml-6.0.3-pyh7db6752_0.conda - sha256: 828af2fd7bb66afc9ab1c564c2046be391aaf66c0215f05afaf6d7a9a270fe2a - md5: b12f41c0d7fb5ab81709fcc86579688f - depends: - - python >=3.10.* - - yaml - track_features: - - pyyaml_no_compile - license: MIT - license_family: MIT - size: 45223 - timestamp: 1758891992558 + run_exports: {} + size: 210896 + timestamp: 1779483879367 - conda: https://conda.anaconda.org/conda-forge/linux-64/rattler-build-0.55.1-he64ecbb_0.conda sha256: d4115e45191c507e70c15d4fc0cf4bd283c64214c05f0ee6e35811b2d76a2348 md5: b6a10478e09eedf17c5a9f2a1e334c00 @@ -1488,30 +511,6 @@ packages: license_family: BSD size: 17663929 timestamp: 1767788793229 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rattler-build-0.55.1-hb434046_0.conda - sha256: 7f1948a71643927bca82149a3b23335920d1c76a0fe7094d99eefcdf2504fbcf - md5: 4868f77a820e8156bc744d8f09649437 - depends: - - patchelf - - libgcc >=14 - - openssl >=3.5.4,<4.0a0 - constrains: - - __glibc >=2.17 - license: BSD-3-Clause - license_family: BSD - size: 18377556 - timestamp: 1767788834221 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rattler-build-0.55.1-h6fdd925_0.conda - sha256: 7d31a25e45823fc4fda6281b019c7875d2626ea8b1522cd58c56c6035b92e5c5 - md5: 6b38c4d55fbdf0f06d3c08674d2a9379 - depends: - - __osx >=11.0 - constrains: - - __osx >=11.0 - license: BSD-3-Clause - license_family: BSD - size: 15105783 - timestamp: 1767788828061 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec @@ -1523,35 +522,6 @@ packages: license_family: GPL size: 345073 timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 - md5: 3d49cad61f829f4f0e0611547a9cda12 - depends: - - libgcc >=14 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - size: 357597 - timestamp: 1765815673644 -- 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 - size: 313930 - timestamp: 1765813902568 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.2-pyh332efcf_0.conda - sha256: f5fcb7854d2b7639a5b1aca41dd0f2d5a69a60bbc313e7f192e2dc385ca52f86 - md5: 7b446fcbb6779ee479debb4fd7453e6c - depends: - - python >=3.10 - license: MIT - license_family: MIT - size: 678888 - timestamp: 1769601206751 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac md5: cffd3bdd58090148f4cfcd831f4b26ab @@ -1565,136 +535,35 @@ packages: license_family: BSD size: 3301196 timestamp: 1769460227866 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 - md5: 7fc6affb9b01e567d2ef1d05b84aa6ed - depends: - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - size: 3368666 - timestamp: 1769464148928 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 - md5: a9d86bc62f39b94c4661716624eb21b0 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: TCL - license_family: BSD - size: 3127137 - timestamp: 1769460817696 -- 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 - size: 91383 - timestamp: 1756220668932 -- 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 - size: 51692 - timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c - md5: ad659d0a2b3e47e38d829aa8cad2d610 - license: LicenseRef-Public-Domain - size: 119135 - timestamp: 1767016325805 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.1.0-py314h9891dd4_0.conda - sha256: c84034056dc938c853e4f61e72e5bd37e2ec91927a661fb9762f678cbea52d43 - md5: 5d3c008e54c7f49592fca9c32896a76f +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.8-py314h5bd0f2a_0.conda + sha256: ebec0d90f99fa7bbe91eabab41ee77d3f36dbd58ec2f08aa4220fdd713610b6d + md5: faea84d2f2ccadf70cf9e55381d75b3e depends: - __glibc >=2.17,<3.0.a0 - - cffi - - libgcc >=14 - - libstdcxx >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 15004 - timestamp: 1769438727085 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ukkonen-1.1.0-py314hd7d8586_0.conda - sha256: 0a7efe469d7e2a34a1d017bc51cf6fb9a51436730256983694c5ad74a33bd4e0 - md5: f3a967efabf9cf450b7741487318ea6e - depends: - - cffi - libgcc >=14 - - libstdcxx >=14 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 15756 - timestamp: 1769438772414 -- 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 - size: 14884 - timestamp: 1769439056290 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-pyhd8ed1ab_0.conda - sha256: fa0a21fdcd0a8e6cf64cc8cd349ed6ceb373f09854fd3c4365f0bc4586dccf9a - md5: 6b0259cea8ffa6b66b35bae0ca01c447 - depends: - - distlib >=0.3.7,<1 - - filelock >=3.20.1,<4 - - platformdirs >=3.9.1,<5 - - python >=3.10 - - typing_extensions >=4.13.2 - license: MIT - license_family: MIT - size: 4404318 - timestamp: 1768069793682 -- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad - md5: a77f85f77be52ff59391544bfe73390a + license: Apache-2.0 + license_family: Apache + run_exports: {} + size: 923237 + timestamp: 1786226770518 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + sha256: dc9f28dedcb5f35a127fad2d847674d2833369dd616d294e423b8997df31d8a8 + md5: 96b08867e21d4694fa5c2c226e6581b0 depends: - libgcc >=14 - __glibc >=2.17,<3.0.a0 - license: MIT - license_family: MIT - size: 85189 - timestamp: 1753484064210 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - sha256: 66265e943f32ce02396ad214e27cb35f5b0490b3bd4f064446390f9d67fa5d88 - md5: 032d8030e4a24fe1f72c74423a46fb88 - depends: - - libgcc >=14 - license: MIT - license_family: MIT - size: 88088 - timestamp: 1753484092643 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac - md5: 78a0fe9e9c50d2c381e8ee47e3ea437d - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - size: 83386 - timestamp: 1753484079473 + - libstdcxx >=14 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 311184 + timestamp: 1779123989774 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 @@ -1705,17 +574,848 @@ packages: license_family: BSD size: 601375 timestamp: 1764777111296 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 - md5: c3655f82dcea2aa179b291e7099c1fcc +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea depends: - - libzlib >=1.3.1,<2.0a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 license: BSD-3-Clause license_family: BSD - size: 614429 - timestamp: 1764777145593 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + size: 23712 + timestamp: 1650670790230 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda + sha256: d2a296aa0b5f38ed9c264def6cf775c0ccb0f110ae156fcde322f3eccebf2e01 + md5: 2921ac0b541bf37c69e66bd6d9a43bca + depends: + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + size: 192536 + timestamp: 1757437302703 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda + sha256: 09f7f9213eb68e7e4291cd476e72b37f3ded99ed957528567f32f5ba6b611043 + md5: 15b35dc33e185e7d2aac1cfcd6778627 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + size: 12852963 + timestamp: 1767975394622 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h5bc82ec_1.conda + sha256: 3999b1472f1e549a0b766428e2823abf20626aac5314b474c9b76bf6eb679def + md5: 6d9be306ecb8dfc9ff46f02cb367d5c2 + depends: + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: + weak: + - keyutils >=1.6.3,<2.0a0 + size: 129546 + timestamp: 1786739205968 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h095d8e5_2.conda + sha256: 601d79af94d9562ba70e2d4947034ba159aae293a3c860855335a7c76c14400e + md5: a4d0da122ba952abf76981e76d0d283c + depends: + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=15 + - libstdcxx >=15 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1538590 + timestamp: 1786762058856 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda + sha256: 12e7341b89e9ea319a3b4de03d02cd988fa02b8a678f4e46779515009b5e475c + md5: 849c4cbbf8dd1d71e66c13afed1d2f12 + depends: + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-aarch64 2.45 + license: GPL-3.0-only + license_family: GPL + size: 876257 + timestamp: 1766513180236 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + sha256: c0b27546aa3a23d47919226b3a1635fccdb4f24b94e72e206a751b33f46fd8d6 + md5: fb640d776fc92b682a14e001980825b1 + depends: + - ncurses + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 148125 + timestamp: 1738479808948 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda + sha256: cc2581a78315418cc2e0bb2a273d37363203e79cefe78ba6d282fed546262239 + md5: b414e36fbb7ca122030276c75fa9c34a + depends: + - libgcc >=14 + constrains: + - expat 2.7.3.* + license: MIT + license_family: MIT + size: 76201 + timestamp: 1763549910086 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 + md5: 2f364feefb6a7c00423e80dcb12db62a + depends: + - libgcc >=14 + license: MIT + license_family: MIT + size: 55952 + timestamp: 1769456078358 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda + sha256: 44bfc6fe16236babb271e0c693fe7fd978f336542e23c9c30e700483796ed30b + md5: cf9cd6739a3b694dcf551d898e112331 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgomp 15.2.0 h8acb6b2_16 + - libgcc-ng ==15.2.0=*_16 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 620637 + timestamp: 1765256938043 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda + sha256: 22d7e63a00c880bd14fbbc514ec6f553b9325d705f08582e9076c7e73c93a2e1 + md5: 3e54a6d0f2ff0172903c0acfda9efc0e + depends: + - libgcc 15.2.0 h8acb6b2_16 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 27356 + timestamp: 1765256948637 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda + sha256: 0a9d77c920db691eb42b78c734d70c5a1d00b3110c0867cfff18e9dd69bc3c29 + md5: 4d2f224e8186e7881d53e3aead912f6c + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 587924 + timestamp: 1765256821307 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 + md5: 96944e3c92386a12755b94619bae0b35 + depends: + - libgcc >=14 + constrains: + - xz 5.8.2.* + license: 0BSD + size: 125916 + timestamp: 1768754941722 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 + md5: 7b9813e885482e3ccb1fa212b86d7fd0 + depends: + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + size: 114056 + timestamp: 1769482343003 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.22-h80f16a2_1.conda + sha256: 36fb7afb28fecb8d678611e05a96b1e135510369b7fe5e353e407308ef1f6796 + md5: 5cb9cebc948d70e6e7c81670f911dab3 + depends: + - libgcc >=14 + license: ISC + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 283426 + timestamp: 1779163468728 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b + md5: 4e3ba0d5d192f99217b85f07a0761e64 + depends: + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + size: 944688 + timestamp: 1768147991301 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda + sha256: 4db11a903707068ae37aa6909511c68e9af6a2e97890d1b73b0a8d87cb74aba9 + md5: 52d9df8055af3f1665ba471cce77da48 + depends: + - libgcc 15.2.0 h8acb6b2_16 + constrains: + - libstdcxx-ng ==15.2.0=*_16 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 5541149 + timestamp: 1765256980783 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda + sha256: dd5c813ae5a4dac6fa946352674e0c21b1847994a717ef67bd6cc77bc15920be + md5: 20b7f96f58ccbe8931c3a20778fb3b32 + depends: + - libstdcxx 15.2.0 hef695bb_16 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 27376 + timestamp: 1765257033344 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 + md5: cf2861212053d05f27ec49c3784ff8bb + depends: + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + size: 43453 + timestamp: 1766271546875 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 66657 + timestamp: 1727963199518 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 + md5: 182afabe009dc78d8b73100255ee6868 + depends: + - libgcc >=13 + license: X11 AND BSD-3-Clause + size: 926034 + timestamp: 1738196018799 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f + md5: 25f5885f11e8b1f075bccf4a2da91c60 + depends: + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + size: 3692030 + timestamp: 1769557678657 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/patchelf-0.17.2-h884eca8_0.conda + sha256: 8b98158f36a7a92013a1982ab7a60947151350ac5c513c1d1575825d0fa52518 + md5: bbd8dee69c4ac2e2d07bca100b8fcc31 + depends: + - libgcc-ng >=7.5.0 + - libstdcxx-ng >=7.5.0 + license: GPL-3.0-or-later + license_family: GPL + size: 101306 + timestamp: 1673473812166 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/prek-0.4.13-h069e38c_0.conda + sha256: 6a67726848391cf3d3e8788b6d98931004809d1ff349c420a1f390c35b1f6998 + md5: ef4be85b131cadb220a1fb34c59f8b7e + depends: + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + run_exports: {} + size: 6254336 + timestamp: 1786372771655 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.2-hb06a95a_101_cp314.conda + build_number: 101 + sha256: daca72ef5fa5fc63077c65f5bda424d97d319889c94ae8240567d84fb185f417 + md5: 0cf826cf95b3ab14da780627c922566f + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.7.3,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.4,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + size: 37220638 + timestamp: 1769457569486 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_3.conda + noarch: python + sha256: 0bf98beaccc17a101d8e8496b88708f938e098a2606f6cc802379dc716572614 + md5: acc7f0e3fc38e949267bc9a4f09ded15 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 212016 + timestamp: 1779483886884 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rattler-build-0.55.1-hb434046_0.conda + sha256: 7f1948a71643927bca82149a3b23335920d1c76a0fe7094d99eefcdf2504fbcf + md5: 4868f77a820e8156bc744d8f09649437 + depends: + - patchelf + - libgcc >=14 + - openssl >=3.5.4,<4.0a0 + constrains: + - __glibc >=2.17 + license: BSD-3-Clause + license_family: BSD + size: 18377556 + timestamp: 1767788834221 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 + md5: 3d49cad61f829f4f0e0611547a9cda12 + depends: + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 357597 + timestamp: 1765815673644 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 + md5: 7fc6affb9b01e567d2ef1d05b84aa6ed + depends: + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + size: 3368666 + timestamp: 1769464148928 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.8-py314hafb4487_0.conda + sha256: 5670d4ee4af4a1fb2d66005c81de9cd26e874dc27678fbe7e46f4527b4d235c4 + md5: ea3cff4bc2caabefda85ad44e3c0ac85 + depends: + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + run_exports: {} + size: 925205 + timestamp: 1786228594872 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hec9560f_11.conda + sha256: 134bceda31df1ad0dbadb61dd30e7254f5eab398288fcdd8b070946130533b5a + md5: 1ae4f546793d83754d79a43a38154746 + depends: + - libstdcxx >=14 + - libgcc >=14 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 355573 + timestamp: 1779123980042 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 + md5: c3655f82dcea2aa179b291e7099c1fcc + depends: + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 614429 + timestamp: 1764777145593 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + sha256: 2a7204314663eeda5dec482a956f0e2eaf289bd5b9953eaaaad0e81aa64638f2 + md5: 3845f3d75991bae0fb90884662f4327c + depends: + - cpython + - python-gil + license: MIT + license_family: MIT + run_exports: {} + size: 8144 + timestamp: 1784221492234 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2 + md5: bddacf101bb4dd0e51811cb69c7790e2 + depends: + - __unix + license: ISC + size: 146519 + timestamp: 1767500828366 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda + sha256: ccc4787f511964f9a1f2d2d2859c91c5d571fb60f7f09d4c4e092c9b7a94e671 + md5: 2c4bd6aeb90bb157456841c3270a0d92 + depends: + - __unix + - python + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 107155 + timestamp: 1783085363526 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.2-py314hd8ed1ab_101.conda + noarch: generic + sha256: 2831632c7a1a8d406739cab7e45e3a22a4109542baf0b486dffc104d14e3d3c3 + md5: ff215afbcf27f6267d6ec09209a4fe0f + depends: + - python >=3.14,<3.15.0a0 + - python_abi * *_cp314 + license: Python-2.0 + size: 49613 + timestamp: 1769457358023 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 + md5: ffc17e785d64e12fc311af9184221839 + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 34766 + timestamp: 1779714582554 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + md5: 4ebae00eae9705b0c3d6d1018a81d047 + depends: + - importlib-metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.9 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 106342 + timestamp: 1733441040958 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a + md5: b38fe4e78ee75def7e599843ef4c1ab0 + depends: + - __unix + - python + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 + - python + constrains: + - pywin32 >=300 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 65503 + timestamp: 1760643864586 +- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 + md5: e9c622e0d00fa24a6292279af3ab6d06 + depends: + - python >=3.9 + license: MIT + license_family: MIT + run_exports: {} + size: 11766 + timestamp: 1745776666688 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + sha256: c432626b16768b8dab228bfb706f7060c2d462a21c516d240f68f2f902b5a044 + md5: 936687ed80f295a1f5dbcf8bd34c252c + depends: + - python >=3.9 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 116363 + timestamp: 1785888127370 +- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.1.1-pyhd8ed1ab_0.conda + sha256: 6eaee417d33f298db79bc7185ab1208604c0e6cf51dade34cd513c6f9db9c6f3 + md5: 11adc78451c998c0fd162584abfa3559 + depends: + - python >=3.10 + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 56559 + timestamp: 1777271601895 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda + sha256: 04c64fb78c520e5c396b6e07bc9082735a5cc28175dbe23138201d0a9441800b + md5: 1bd2e65c8c7ef24f4639ae6e850dacc2 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + size: 23922 + timestamp: 1764950726246 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 233310 + timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + sha256: aa98e0b1f5472161318f93224f1cfec1355ff69d2f79f896c0b9e033e4a6caf9 + md5: 083725d6cd3dc007f06d04bcf1e613a2 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + size: 26922 + timestamp: 1761503229008 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.2-h4df99d1_101.conda + sha256: ef9d512824e3d6e1d8d07236795b60b61f13f6f3dafcc93c4d9a87ed058f8928 + md5: 90fd30fc6dd044c0f79c7ef4e7e9fb16 + depends: + - cpython 3.14.2.* + - python_abi * *_cp314 + license: Python-2.0 + size: 49598 + timestamp: 1769457423645 +- 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 + size: 6989 + timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 18455 + timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 21561 + timestamp: 1774492402955 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + sha256: 03dba5917f944c6684ab44c81daacac1624cd148e4b2cae215dcec594a210c48 + md5: a79bf97561232a31447b6246c2153ab5 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 116935 + timestamp: 1785761789772 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + size: 119135 + timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 + md5: ba3dcdc8584155c97c648ae9c044b7a3 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 24190 + timestamp: 1779159948016 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 + md5: 58fd217444c2a5701a44244faf518206 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 125061 + timestamp: 1757437486465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + sha256: d4cefbca587429d1192509edc52c88de52bc96c2447771ddc1f8bee928aed5ef + md5: 1e93aca311da0210e660d2247812fa02 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 12358010 + timestamp: 1767970350308 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda + sha256: aaea1d42b07769920db2af7471ece9399d2613448863da64ad8272998db5db34 + md5: 15235dd10450d67bc25ccafd5b46d2bc + depends: + - __osx >=11.0 + - libcxx >=21 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1165740 + timestamp: 1786762145768 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda + sha256: 3a924cbce92b0dceb5d392036e692bac1e60ae90d85c7c78264c672a205c007b + md5: cd7367d0c0f49853f8f3560bfb4456ab + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 570705 + timestamp: 1769754656112 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + sha256: fce22610ecc95e6d149e42a42fbc3cc9d9179bd4eb6232639a60f06e080eec98 + md5: b79875dbb5b1db9a4a22a4520f918e1a + depends: + - __osx >=11.0 + constrains: + - expat 2.7.3.* + license: MIT + license_family: MIT + size: 67800 + timestamp: 1763549994166 +- 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 + size: 40979 + timestamp: 1769456747661 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e + md5: 009f0d956d7bfb00de86901d16e486c7 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.2.* + license: 0BSD + size: 92242 + timestamp: 1768752982486 +- 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 + size: 73690 + timestamp: 1769482560514 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + sha256: 202be45db5726757a8ea1f374f85aacc18c504f5ff15b2558496dff4c8779c48 + md5: 9ed5ab909c449bdcae72322e44875a18 + depends: + - __osx >=11.0 + license: ISC + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 247352 + timestamp: 1779164136206 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 + md5: 4b0bf313c53c3e89692f020fb55d5f2c + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + size: 909777 + timestamp: 1768148320535 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 797030 + timestamp: 1738196177597 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 + md5: f4f6ad63f98f64191c3e77c5f5f29d76 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 3104268 + timestamp: 1769556384749 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.13-h6fdd925_0.conda + sha256: 0b37364caa6a843a510cc6c9658d46345fd580a46b4e498d4d57155f4d905449 + md5: 61ce3d8aa00cc017e2d955667b52edb4 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: {} + size: 5993401 + timestamp: 1786372983638 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.2-h40d2674_101_cp314.conda + build_number: 101 + sha256: 0b3ae49a61b8baf1af8133e8dac0d404a66b634000de0760c8fb692a5ce86e84 + md5: f0999777d0ec086b14d68ed02a143b94 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.2,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.4,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + size: 12570588 + timestamp: 1769459207868 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda + noarch: python + sha256: 086cc67ec57afb7c9c09b5e09e7356b536b5b1af6c2e97117dc022cd22f0d472 + md5: 73f22bde4991f30ae2bfac3811577c15 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 191432 + timestamp: 1779484184540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rattler-build-0.55.1-h6fdd925_0.conda + sha256: 7d31a25e45823fc4fda6281b019c7875d2626ea8b1522cd58c56c6035b92e5c5 + md5: 6b38c4d55fbdf0f06d3c08674d2a9379 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + size: 15105783 + timestamp: 1767788828061 +- 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 + size: 313930 + timestamp: 1765813902568 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + size: 3127137 + timestamp: 1769460817696 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.8-py314h6c2aa35_0.conda + sha256: 4af8e4394d249619b4f1641c82fd6c0a8b97d51991ca2986095bed400c2e5eb9 + md5: ab1bd70ec9c95d199f8ce456823004ab + 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 + run_exports: {} + size: 922067 + timestamp: 1786227125229 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda + sha256: 01fd50d2801b23b59fafea6bf704a6c5faf0f5969104400eae0e6572cb2e5304 + md5: d31c0e54c4f9c51100ec8c812ee925d1 + depends: + - libcxx >=19 + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 245404 + timestamp: 1779124076307 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 md5: ab136e4c34e97f34fb621d2592a393d8 depends: - __osx >=11.0 @@ -1724,3 +1424,92 @@ packages: license_family: BSD size: 433413 timestamp: 1764777166076 +- conda: https://conda.modular.com/max/linux-64/mojo-1.0.0-release.conda + sha256: 5778f999b69cf77bd6f07ccaf32d0bafc258fe75206afc8e88919269cebb6e75 + md5: afeb126acb57602a5f9b8153e75e1c3c + depends: + - python >=3.10 + - mojo-compiler ==1.0.0 + - mblack ==26.5.0 + - jupyter_client >=8.6.2,<8.7 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 115641078 + timestamp: 1786292404342 +- conda: https://conda.modular.com/max/linux-64/mojo-compiler-1.0.0-release.conda + sha256: 4394c6146d47ec7794a9a3ed5775ae158f59f83f8e1aed59408b17c4909821b3 + md5: 75d2e2ca9d87fdc76513d7939202e7dc + depends: + - mojo-python ==1.0.0 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 68511359 + timestamp: 1786292410712 +- conda: https://conda.modular.com/max/linux-aarch64/mojo-1.0.0-release.conda + sha256: 0f273174733386a584e41489e556c9014a5e975a57bd556d847f252fc9091d76 + md5: 169bbe721ee90fb2fb81744b9212d269 + depends: + - python >=3.10 + - mojo-compiler ==1.0.0 + - mblack ==26.5.0 + - jupyter_client >=8.6.2,<8.7 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 112856443 + timestamp: 1786292324875 +- conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-1.0.0-release.conda + sha256: da1772742c54f1f8f7b883e6338b1fe5de4592f2c882220dcceae623cc661e57 + md5: 5a07709330153bf6a5720a01d9294a39 + depends: + - mojo-python ==1.0.0 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 66479788 + timestamp: 1786292303628 +- conda: https://conda.modular.com/max/noarch/mblack-26.5.0-release.conda + noarch: python + sha256: 49102b55366eab56b04620533302b8693b4fa4a6c5972b3cc978b3f3bad83ebe + md5: 0cbfc119215c063cd279f0a6beb04285 + depends: + - python >=3.10 + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9.0 + - platformdirs >=2 + - tomli >=1.1.0 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 137187 + timestamp: 1786151006088 +- conda: https://conda.modular.com/max/noarch/mojo-python-1.0.0-release.conda + noarch: python + sha256: fc449a47c7707ed96a794768e29d5d2b0bf7afab373e2a9751f281ed7c4f822c + md5: 4a27e1596a5c2d27330a2377090b12c5 + depends: + - python >=3.10 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 24040 + timestamp: 1785891558838 +- conda: https://conda.modular.com/max/osx-arm64/mojo-1.0.0-release.conda + sha256: 200bd9ace6e06ad2a9b4f4cce9afa3e5f3c00b3d87a6d57206249df2a5568e38 + md5: 954433eb905b424cc3d4325c9c2242de + depends: + - python >=3.10 + - mojo-compiler ==1.0.0 + - mblack ==26.5.0 + - jupyter_client >=8.6.2,<8.7 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 101155040 + timestamp: 1786294689438 +- conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-1.0.0-release.conda + sha256: c52054bc444d851e5c38cc33e790fb011a1080470244aaa59351ac5056d08c59 + md5: b5103c9d9978173a1e97c5e5eed1aeba + depends: + - mojo-python ==1.0.0 + license: LicenseRef-Modular-Proprietary + run_exports: {} + size: 61221085 + timestamp: 1786294690001 diff --git a/pixi.toml b/pixi.toml index b90f868..f530764 100644 --- a/pixi.toml +++ b/pixi.toml @@ -1,4 +1,4 @@ -[project] +[workspace] authors = ["Michael Booth "] channels = ["conda-forge", "https://conda.modular.com/max"] name = "mojo-dotenv" @@ -40,8 +40,8 @@ submit-modular-community = "bash scripts/submit-to-modular-community.sh" examples-all = "python scripts/run_examples.py" # Code quality tasks -pre-commit = "pre-commit run --all-files" -pre-commit-install = "pre-commit install" +prek = "prek run --all-files" +prek-install = "prek install -f" # Validation tasks check-mojoenv = "cd ../mojoenv && mojo main.mojo" @@ -55,8 +55,8 @@ pre-submit-modular-community = "python scripts/pre_submit_checklist.py" clone-modular-community = "mkdir -p ~/code/github/external && cd ~/code/github/external && git clone https://github.com/modular-community/modular-community.git || (cd modular-community && git pull)" [dependencies] -max = ">=26.1.0,<27" +mojo = "==1.0.0" python = ">=3.11,<4" python-dotenv = ">=1.2.1,<2" -pre-commit = ">=4.5.1,<5" +prek = ">=0.4.5,<1" rattler-build = ">=0.55.1,<0.56" diff --git a/recipe.yaml b/recipe.yaml index 79a8457..099193e 100644 --- a/recipe.yaml +++ b/recipe.yaml @@ -1,6 +1,6 @@ context: version: "0.9.1" - mojo_version: "=0.26.1" + mojo_version: "=1.0.0" package: name: mojo-dotenv @@ -25,7 +25,7 @@ requirements: run: # Mojo bytecode is not forwards-compatible across compiler minor versions, # so we require the exact compiler series used at build time. - - mojo-compiler ${{ mojo_version }} + - ${{ pin_compatible('mojo-compiler') }} tests: - files: diff --git a/src/dotenv/__init__.mojo b/src/dotenv/__init__.mojo index 388969c..b3925a7 100644 --- a/src/dotenv/__init__.mojo +++ b/src/dotenv/__init__.mojo @@ -3,14 +3,14 @@ A modern implementation of .env file parsing for Mojo, compatible with python-dotenv. """ -from pathlib import Path +from std.pathlib import Path from std.collections import Dict from .parser import parse_dotenv from .loader import load_dotenv from .finder import find_dotenv -fn dotenv_values(dotenv_path: String, verbose: Bool = False) raises -> Dict[String, String]: +def dotenv_values(dotenv_path: String, verbose: Bool = False) raises -> Dict[String, String]: """Parse a .env file and return its content as a dictionary. This function reads a .env file and returns a dictionary mapping diff --git a/src/dotenv/finder.mojo b/src/dotenv/finder.mojo index 5e70693..32922f6 100644 --- a/src/dotenv/finder.mojo +++ b/src/dotenv/finder.mojo @@ -1,9 +1,9 @@ """Find .env files by searching parent directories.""" -from pathlib import Path +from std.pathlib import Path -fn find_dotenv(filename: String = ".env", raise_error_if_not_found: Bool = False, usecwd: Bool = False) raises -> String: +def find_dotenv(filename: String = ".env", raise_error_if_not_found: Bool = False, usecwd: Bool = False) raises -> String: """Search in increasingly higher folders for the given file. Searches upward from the current directory (or working directory if usecwd=True) diff --git a/src/dotenv/loader.mojo b/src/dotenv/loader.mojo index ed0f63c..580bf16 100644 --- a/src/dotenv/loader.mojo +++ b/src/dotenv/loader.mojo @@ -1,11 +1,11 @@ """Environment variable loading functionality.""" -from os import setenv, getenv -from pathlib import Path +from std.os import setenv, getenv +from std.pathlib import Path from .parser import parse_dotenv -fn load_dotenv(dotenv_path: String, override: Bool = False, verbose: Bool = False) raises -> Bool: +def load_dotenv(dotenv_path: String, override: Bool = False, verbose: Bool = False) raises -> Bool: """Load variables from a .env file into the environment. Reads a .env file and sets all found variables as environment variables. @@ -63,7 +63,7 @@ fn load_dotenv(dotenv_path: String, override: Bool = False, verbose: Bool = Fals else: # Only set if not already in environment var existing = getenv(key) - if len(existing) == 0: + if existing.byte_length() == 0: _ = setenv(key, value) count += 1 elif verbose: diff --git a/src/dotenv/parser.mojo b/src/dotenv/parser.mojo index e1653e9..ea4486e 100644 --- a/src/dotenv/parser.mojo +++ b/src/dotenv/parser.mojo @@ -4,10 +4,10 @@ This module provides functions to parse .env file lines and extract key-value pa """ from std.collections import Dict, List, Optional -from os import getenv +from std.os import getenv -fn to_chars(text: String) -> List[String]: +def to_chars(text: String) -> List[String]: """Convert a String into a list of single-codepoint Strings.""" var chars = List[String]() for slice in text.codepoint_slices(): @@ -15,7 +15,7 @@ fn to_chars(text: String) -> List[String]: return chars^ -fn join_chars(chars: List[String], start: Int, end: Int) -> String: +def join_chars(chars: List[String], start: Int, end: Int) -> String: """Join a slice of character list [start, end) into a String.""" var result = String("") var i = start @@ -25,7 +25,7 @@ fn join_chars(chars: List[String], start: Int, end: Int) -> String: return result -fn count_trailing_backslashes(text: String, end_pos: Int) -> Int: +def count_trailing_backslashes(text: String, end_pos: Int) -> Int: """Count consecutive backslashes before the given character position. Args: @@ -44,7 +44,7 @@ fn count_trailing_backslashes(text: String, end_pos: Int) -> Int: return count -fn lookup_variable(var_name: String, env_dict: Dict[String, String], fallback_literal: String) raises -> String: +def lookup_variable(var_name: String, env_dict: Dict[String, String], fallback_literal: String) raises -> String: """Look up a variable in env_dict, then system environment, else return literal. Args: @@ -59,13 +59,13 @@ fn lookup_variable(var_name: String, env_dict: Dict[String, String], fallback_li return env_dict[var_name] var sys_val = getenv(var_name) - if len(sys_val) > 0: + if sys_val.byte_length() > 0: return sys_val return fallback_literal -fn strip_inline_comment(line: String) -> String: +def strip_inline_comment(line: String) -> String: """Strip inline comments from a line. Handles # comments after values, but not within quotes. @@ -109,7 +109,7 @@ fn strip_inline_comment(line: String) -> String: return line -fn expand_variables(value: String, env_dict: Dict[String, String]) raises -> String: +def expand_variables(value: String, env_dict: Dict[String, String]) raises -> String: """Expand variable references in a value. Supports: @@ -182,7 +182,7 @@ fn expand_variables(value: String, env_dict: Dict[String, String]) raises -> Str return result -fn process_escapes(value: String) -> String: +def process_escapes(value: String) -> String: """Process escape sequences in a string. Handles: @@ -233,7 +233,7 @@ fn process_escapes(value: String) -> String: return result -fn strip_quotes(value: String) -> String: +def strip_quotes(value: String) -> String: """Strip outer quotes (single or double) from a value and process escapes. Args: @@ -261,7 +261,7 @@ fn strip_quotes(value: String) -> String: return v_str -fn parse_line(line: String, verbose: Bool = False) -> Optional[Tuple[String, String]]: +def parse_line(line: String, verbose: Bool = False) -> Optional[Tuple[String, String]]: """Parse a single line from a .env file. Handles: @@ -283,7 +283,7 @@ fn parse_line(line: String, verbose: Bool = False) -> Optional[Tuple[String, Str var stripped = String(line.strip()) # Ignore empty lines - if len(stripped) == 0: + if stripped.byte_length() == 0: return None # Ignore full-line comments @@ -295,7 +295,7 @@ fn parse_line(line: String, verbose: Bool = False) -> Optional[Tuple[String, Str # Strip 'export ' prefix if present if stripped.startswith("export "): - stripped = String(String(stripped[7:]).strip()) + stripped = String(String(stripped[byte=7:]).strip()) # Split on first '=' only var parts = stripped.split("=", 1) @@ -304,7 +304,7 @@ fn parse_line(line: String, verbose: Bool = False) -> Optional[Tuple[String, Str if len(parts) != 2: # python-dotenv treats this as key with None value # We'll use empty string (Mojo Dict doesn't support None values easily) - if len(parts) == 1 and len(parts[0].strip()) > 0: + if len(parts) == 1 and String(parts[0].strip()).byte_length() > 0: var key = String(parts[0].strip()) if verbose: print("[dotenv] Key without value: " + key + " (using empty string)") @@ -318,13 +318,13 @@ fn parse_line(line: String, verbose: Bool = False) -> Optional[Tuple[String, Str value = strip_quotes(value) # Empty key is invalid - if len(key) == 0: + if key.byte_length() == 0: return None return (key, value) -fn parse_dotenv(content: String, verbose: Bool = False) raises -> Dict[String, String]: +def parse_dotenv(content: String, verbose: Bool = False) raises -> Dict[String, String]: """Parse the entire content of a .env file. Performs two passes: @@ -348,10 +348,10 @@ fn parse_dotenv(content: String, verbose: Bool = False) raises -> Dict[String, S # Check if line starts a quoted value that may span multiple lines var stripped = String(line.strip()) - if len(stripped) > 0 and not stripped.startswith("#"): + if stripped.byte_length() > 0 and not stripped.startswith("#"): # Strip export prefix if present if stripped.startswith("export "): - stripped = String(String(stripped[7:]).strip()) + stripped = String(String(stripped[byte=7:]).strip()) # Check for KEY= pattern var parts = stripped.split("=", 1) diff --git a/tests/test_basic.mojo b/tests/test_basic.mojo index f4685cc..0a3c09c 100644 --- a/tests/test_basic.mojo +++ b/tests/test_basic.mojo @@ -1,10 +1,10 @@ """Basic tests for mojo-dotenv.""" -from testing import assert_equal +from std.testing import assert_equal from dotenv import dotenv_values -def test_basic_parsing(): +def test_basic_parsing() raises: """Test basic KEY=value parsing.""" var result = dotenv_values("tests/fixtures/basic.env") @@ -15,7 +15,7 @@ def test_basic_parsing(): assert_equal(result["PORT"], "8080") -def test_quotes(): +def test_quotes() raises: """Test quote stripping.""" var result = dotenv_values("tests/fixtures/quotes.env") @@ -24,7 +24,7 @@ def test_quotes(): assert_equal(result["MIXED"], 'has "inner" quotes') -def test_comments(): +def test_comments() raises: """Test comment handling.""" var result = dotenv_values("tests/fixtures/comments.env") @@ -33,7 +33,7 @@ def test_comments(): assert_equal(result["KEY3"], "value3") -def test_whitespace(): +def test_whitespace() raises: """Test whitespace trimming.""" var result = dotenv_values("tests/fixtures/whitespace.env") @@ -41,8 +41,8 @@ def test_whitespace(): assert_equal(result["KEY2"], "value2") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_basic_parsing]() suite.test[test_quotes]() diff --git a/tests/test_escapes.mojo b/tests/test_escapes.mojo index e02908c..25703f1 100644 --- a/tests/test_escapes.mojo +++ b/tests/test_escapes.mojo @@ -1,41 +1,41 @@ """Test escape sequence support.""" -from testing import assert_equal +from std.testing import assert_equal from dotenv import dotenv_values -def test_escape_newline(): +def test_escape_newline() raises: """Test newline escape sequence.""" var result = dotenv_values("tests/fixtures/escapes.env") assert_equal(result["NEWLINE"], "line1\nline2") -def test_escape_tab(): +def test_escape_tab() raises: """Test tab escape sequence.""" var result = dotenv_values("tests/fixtures/escapes.env") assert_equal(result["TAB"], "col1\tcol2") -def test_escape_backslash(): +def test_escape_backslash() raises: """Test backslash escape sequence.""" var result = dotenv_values("tests/fixtures/escapes.env") assert_equal(result["BACKSLASH"], "path\\to\\file") -def test_escape_quote(): +def test_escape_quote() raises: """Test quote escape sequence.""" var result = dotenv_values("tests/fixtures/escapes.env") assert_equal(result["QUOTE"], 'He said "hello"') -def test_unquoted_no_escapes(): +def test_unquoted_no_escapes() raises: """Test that unquoted values don't process escapes.""" var result = dotenv_values("tests/fixtures/escapes.env") assert_equal(result["UNQUOTED"], "no_escapes\\nhere") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_escape_newline]() suite.test[test_escape_tab]() diff --git a/tests/test_export.mojo b/tests/test_export.mojo index c6f4710..11a02b4 100644 --- a/tests/test_export.mojo +++ b/tests/test_export.mojo @@ -1,10 +1,10 @@ """Test export prefix support.""" -from testing import assert_equal +from std.testing import assert_equal from dotenv import dotenv_values -def test_export_prefix(): +def test_export_prefix() raises: """Test that export prefix is stripped correctly.""" var result = dotenv_values("tests/fixtures/export.env") @@ -15,8 +15,8 @@ def test_export_prefix(): assert_equal(result["KEY5"], "single quotes") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_export_prefix]() suite^.run() diff --git a/tests/test_helpers.mojo b/tests/test_helpers.mojo index aea05a7..4d88a00 100644 --- a/tests/test_helpers.mojo +++ b/tests/test_helpers.mojo @@ -1,34 +1,34 @@ """Test helper functions and edge cases.""" -from testing import assert_equal, assert_true, TestSuite +from std.testing import assert_equal, assert_true, TestSuite from dotenv import dotenv_values, find_dotenv -def test_backslash_counting(): +def test_backslash_counting() raises: """Test backslash counting in multiline parsing.""" var result = dotenv_values("tests/fixtures/escapes.env") assert_true("UNQUOTED" in result, "Should not consume next line") -def test_undefined_variables_remain_literal(): +def test_undefined_variables_remain_literal() raises: """Test undefined variables remain as literals.""" var result = dotenv_values("tests/fixtures/variables.env") assert_equal(result["UNDEFINED"], "${DOES_NOT_EXIST}") -def test_find_dotenv_nonexistent(): +def test_find_dotenv_nonexistent() raises: """Test find_dotenv returns empty for non-existent file.""" var not_found = find_dotenv("nonexistent.env", raise_error_if_not_found=False) assert_equal(not_found, "") -def test_verbose_mode(): +def test_verbose_mode() raises: """Test verbose mode works.""" var result = dotenv_values("tests/fixtures/basic.env", verbose=True) assert_true(len(result) > 0, "Should parse values") -def test_keys_without_equals(): +def test_keys_without_equals() raises: """Test keys without '=' return empty string.""" var result = dotenv_values("tests/fixtures/no_equals.env") assert_true("JUST_A_KEY" in result, "Should parse standalone key") @@ -36,7 +36,7 @@ def test_keys_without_equals(): assert_equal(result["NORMAL_KEY"], "normal_value") -def test_empty_file(): +def test_empty_file() raises: """Test empty file handling.""" var empty_path = "/tmp/empty_test.env" with open(empty_path, "w") as f: @@ -46,7 +46,7 @@ def test_empty_file(): assert_equal(len(result), 0) -def test_comments_only_file(): +def test_comments_only_file() raises: """Test file with only comments.""" var comments_path = "/tmp/comments_only.env" with open(comments_path, "w") as f: @@ -59,7 +59,7 @@ def test_comments_only_file(): assert_equal(len(result), 0) -def test_inline_comments_respect_quotes(): +def test_inline_comments_respect_quotes() raises: """Test inline comments respect quoted values.""" var inline_path = "/tmp/inline_test.env" with open(inline_path, "w") as f: @@ -71,7 +71,7 @@ def test_inline_comments_respect_quotes(): assert_equal(result["UNQUOTED"], "value") -def main(): +def main() raises: var suite = TestSuite() suite.test[test_backslash_counting]() suite.test[test_undefined_variables_remain_literal]() diff --git a/tests/test_load_dotenv.mojo b/tests/test_load_dotenv.mojo index 9ad257e..bf015a7 100644 --- a/tests/test_load_dotenv.mojo +++ b/tests/test_load_dotenv.mojo @@ -1,11 +1,11 @@ """Test load_dotenv functionality.""" -from testing import assert_equal, assert_true +from std.testing import assert_equal, assert_true from dotenv import load_dotenv -from os import getenv +from std.os import getenv -def test_load_dotenv_basic(): +def test_load_dotenv_basic() raises: """Test loading .env file into environment.""" var success = load_dotenv("tests/fixtures/basic.env") assert_true(success, "Failed to load .env file") @@ -16,8 +16,8 @@ def test_load_dotenv_basic(): assert_equal(getenv("PORT"), "8080") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_load_dotenv_basic]() suite^.run() diff --git a/tests/test_missing_files.mojo b/tests/test_missing_files.mojo index 005b187..b7fe318 100644 --- a/tests/test_missing_files.mojo +++ b/tests/test_missing_files.mojo @@ -1,31 +1,31 @@ """Test handling of non-existent .env files.""" -from testing import assert_equal, assert_true, assert_false +from std.testing import assert_equal, assert_true, assert_false from dotenv import load_dotenv, dotenv_values, find_dotenv -from os import getenv, setenv +from std.os import getenv, setenv -def test_load_dotenv_missing_file(): +def test_load_dotenv_missing_file() raises: """Test load_dotenv with non-existent file returns False.""" var success = load_dotenv("tests/fixtures/does_not_exist.env") assert_false(success, "Should return False for non-existent file") -def test_load_dotenv_missing_file_verbose(): +def test_load_dotenv_missing_file_verbose() raises: """Test load_dotenv with non-existent file in verbose mode.""" print("Expected output: '[dotenv] File not found: tests/fixtures/missing.env'") var success = load_dotenv("tests/fixtures/missing.env", verbose=True) assert_false(success, "Should return False for non-existent file") -def test_dotenv_values_missing_file_returns_empty(): +def test_dotenv_values_missing_file_returns_empty() raises: """Test dotenv_values with non-existent file returns empty dict.""" print("Expected output: '[dotenv] WARNING: File not found: tests/fixtures/nonexistent.env (returning empty dict)'") var result = dotenv_values("tests/fixtures/nonexistent.env") assert_equal(len(result), 0, "Should return empty dict for non-existent file") -def test_find_dotenv_missing_raises(): +def test_find_dotenv_missing_raises() raises: """Test find_dotenv with non-existent file raises when requested.""" var raised = False try: @@ -36,13 +36,13 @@ def test_find_dotenv_missing_raises(): assert_true(raised, "Should raise error when raise_error_if_not_found=True") -def test_find_dotenv_missing_returns_empty(): +def test_find_dotenv_missing_returns_empty() raises: """Test find_dotenv with non-existent file returns empty string.""" var result = find_dotenv("absolutely_does_not_exist.env", raise_error_if_not_found=False) assert_equal(result, "", "Should return empty string for non-existent file") -def test_load_dotenv_missing_does_not_affect_env(): +def test_load_dotenv_missing_does_not_affect_env() raises: """Test that loading non-existent file doesn't affect existing environment.""" # Set a known environment variable _ = setenv("TEST_EXISTING_VAR", "original_value") @@ -56,14 +56,14 @@ def test_load_dotenv_missing_does_not_affect_env(): assert_equal(value, "original_value", "Existing env var should be unchanged") -def test_load_dotenv_empty_path(): +def test_load_dotenv_empty_path() raises: """Test load_dotenv with empty path.""" var success = load_dotenv("") assert_false(success, "Should return False for empty path") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_load_dotenv_missing_file]() suite.test[test_load_dotenv_missing_file_verbose]() diff --git a/tests/test_multiline.mojo b/tests/test_multiline.mojo index c806b2b..3a6e366 100644 --- a/tests/test_multiline.mojo +++ b/tests/test_multiline.mojo @@ -1,16 +1,16 @@ """Test multiline value support.""" -from testing import assert_equal, assert_true +from std.testing import assert_equal, assert_true from dotenv import dotenv_values -def test_single_line_baseline(): +def test_single_line_baseline() raises: """Test single line value (baseline).""" var result = dotenv_values("tests/fixtures/multiline.env") assert_equal(result["SINGLE_LINE"], "single line") -def test_multiline_double_quotes(): +def test_multiline_double_quotes() raises: """Test multiline value with double quotes.""" var result = dotenv_values("tests/fixtures/multiline.env") var multiline_double = result["MULTILINE_DOUBLE"] @@ -19,7 +19,7 @@ def test_multiline_double_quotes(): assert_equal(len(lines), 3) -def test_multiline_single_quotes(): +def test_multiline_single_quotes() raises: """Test multiline value with single quotes.""" var result = dotenv_values("tests/fixtures/multiline.env") var multiline_single = result["MULTILINE_SINGLE"] @@ -28,7 +28,7 @@ def test_multiline_single_quotes(): assert_equal(len(single_lines), 3) -def test_json_multiline(): +def test_json_multiline() raises: """Test JSON-like multiline value.""" var result = dotenv_values("tests/fixtures/multiline.env") var json = result["JSON"] @@ -36,14 +36,14 @@ def test_json_multiline(): assert_true("value" in json, "JSON should contain 'value'") -def test_parsing_continues_after_multiline(): +def test_parsing_continues_after_multiline() raises: """Test that parsing continues correctly after multiline values.""" var result = dotenv_values("tests/fixtures/multiline.env") assert_equal(result["AFTER_MULTILINE"], "after_value") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_single_line_baseline]() suite.test[test_multiline_double_quotes]() diff --git a/tests/test_override.mojo b/tests/test_override.mojo index f8ec736..babb0e8 100644 --- a/tests/test_override.mojo +++ b/tests/test_override.mojo @@ -1,11 +1,11 @@ """Test load_dotenv override parameter functionality.""" -from testing import assert_equal +from std.testing import assert_equal from dotenv import load_dotenv -from os import setenv, getenv, unsetenv +from std.os import setenv, getenv, unsetenv -def test_override_false_preserves_existing(): +def test_override_false_preserves_existing() raises: """Test that override=False preserves existing variables.""" _ = setenv("PORT", "9999") _ = setenv("DEBUG", "false") @@ -15,7 +15,7 @@ def test_override_false_preserves_existing(): assert_equal(getenv("DEBUG"), "false") -def test_override_true_replaces_existing(): +def test_override_true_replaces_existing() raises: """Test that override=True replaces existing variables.""" _ = setenv("PORT", "7777") _ = setenv("DEBUG", "maybe") @@ -25,7 +25,7 @@ def test_override_true_replaces_existing(): assert_equal(getenv("DEBUG"), "true") -def test_new_variables_always_set(): +def test_new_variables_always_set() raises: """Test that new variables are set regardless of override.""" _ = unsetenv("KEY1") _ = load_dotenv("tests/fixtures/basic.env", override=False) @@ -33,7 +33,7 @@ def test_new_variables_always_set(): assert_equal(getenv("KEY1"), "value1") -def test_verbose_mode_with_override_false(): +def test_verbose_mode_with_override_false() raises: """Test verbose mode reports skipped variables.""" _ = setenv("API_KEY", "existing_key") _ = load_dotenv("tests/fixtures/basic.env", override=False, verbose=True) @@ -41,8 +41,8 @@ def test_verbose_mode_with_override_false(): assert_equal(getenv("API_KEY"), "existing_key") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_override_false_preserves_existing]() suite.test[test_override_true_replaces_existing]() diff --git a/tests/test_phase3plus.mojo b/tests/test_phase3plus.mojo index fac54ef..68634f3 100644 --- a/tests/test_phase3plus.mojo +++ b/tests/test_phase3plus.mojo @@ -1,37 +1,37 @@ """Test Phase 3+ features: find_dotenv, inline comments, verbose, keys without =""" -from testing import assert_equal, assert_true +from std.testing import assert_equal, assert_true from dotenv import dotenv_values, find_dotenv -def test_inline_comments(): +def test_inline_comments() raises: """Test inline comment stripping.""" var result = dotenv_values("tests/fixtures/inline_comments.env") assert_equal(result["KEY1"], "value1") -def test_keys_without_equals(): +def test_keys_without_equals() raises: """Test keys without = sign return empty string.""" var result = dotenv_values("tests/fixtures/no_equals.env") assert_true(result.__contains__("JUST_A_KEY"), "Should parse standalone keys") assert_equal(result["JUST_A_KEY"], "") -def test_verbose_mode(): +def test_verbose_mode() raises: """Test verbose mode executes without errors.""" var result = dotenv_values("tests/fixtures/basic.env", verbose=True) assert_true(len(result) > 0, "Should parse values") -def test_find_dotenv(): +def test_find_dotenv() raises: """Test find_dotenv() function.""" # Test with non-existent file var not_found = find_dotenv("nonexistent_file_xyz.env") assert_equal(not_found, "") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_inline_comments]() suite.test[test_keys_without_equals]() diff --git a/tests/test_python_compat.mojo b/tests/test_python_compat.mojo index b36ad61..5dda1d1 100644 --- a/tests/test_python_compat.mojo +++ b/tests/test_python_compat.mojo @@ -1,11 +1,11 @@ """Python compatibility tests - compare mojo-dotenv with python-dotenv.""" -from testing import assert_equal +from std.testing import assert_equal from dotenv import dotenv_values -from python import Python, PythonObject +from std.python import Python, PythonObject -fn test_fixture_against_python(fixture_path: String) raises: +def test_fixture_against_python(fixture_path: String) raises: """Test a fixture matches python-dotenv results.""" var mojo_result = dotenv_values(fixture_path) var py = Python.import_module("dotenv") @@ -29,33 +29,33 @@ fn test_fixture_against_python(fixture_path: String) raises: pass -def test_basic_fixture(): +def test_basic_fixture() raises: """Test basic.env matches python-dotenv.""" test_fixture_against_python("tests/fixtures/basic.env") -def test_quotes_fixture(): +def test_quotes_fixture() raises: """Test quotes.env matches python-dotenv.""" test_fixture_against_python("tests/fixtures/quotes.env") -def test_comments_fixture(): +def test_comments_fixture() raises: """Test comments.env matches python-dotenv.""" test_fixture_against_python("tests/fixtures/comments.env") -def test_whitespace_fixture(): +def test_whitespace_fixture() raises: """Test whitespace.env matches python-dotenv.""" test_fixture_against_python("tests/fixtures/whitespace.env") -def test_edge_cases_fixture(): +def test_edge_cases_fixture() raises: """Test edge_cases.env matches python-dotenv.""" test_fixture_against_python("tests/fixtures/edge_cases.env") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_basic_fixture]() suite.test[test_quotes_fixture]() diff --git a/tests/test_variables.mojo b/tests/test_variables.mojo index 95a86d3..2384e94 100644 --- a/tests/test_variables.mojo +++ b/tests/test_variables.mojo @@ -1,43 +1,43 @@ """Test variable expansion support.""" -from testing import assert_equal, assert_true +from std.testing import assert_equal, assert_true from dotenv import dotenv_values -def test_variable_expansion_brace_syntax(): +def test_variable_expansion_brace_syntax() raises: """Test ${VAR} syntax expansion.""" var result = dotenv_values("tests/fixtures/variables.env") assert_equal(result["BIN_DIR"], "/usr/local/bin") assert_equal(result["LIB_DIR"], "/usr/local/lib") -def test_variable_expansion_dollar_syntax(): +def test_variable_expansion_dollar_syntax() raises: """Test $VAR syntax expansion.""" var result = dotenv_values("tests/fixtures/variables.env") assert_equal(result["USER_BIN"], "/home/user/bin") -def test_variable_expansion_mixed(): +def test_variable_expansion_mixed() raises: """Test mixed ${VAR} and $VAR syntax.""" var result = dotenv_values("tests/fixtures/variables.env") assert_equal(result["FULL_PATH"], "/usr/local/share:/home/user/local") -def test_variable_forward_reference(): +def test_variable_forward_reference() raises: """Test forward reference (variable defined later in file).""" var result = dotenv_values("tests/fixtures/variables.env") assert_equal(result["DERIVED"], "derived_value") assert_equal(result["TARGET"], "derived_value") -def test_undefined_variable_literal(): +def test_undefined_variable_literal() raises: """Test that undefined variables remain literal.""" var result = dotenv_values("tests/fixtures/variables.env") assert_equal(result["UNDEFINED"], "${DOES_NOT_EXIST}") -def main(): - from testing import TestSuite +def main() raises: + from std.testing import TestSuite var suite = TestSuite() suite.test[test_variable_expansion_brace_syntax]() suite.test[test_variable_expansion_dollar_syntax]()