diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index cd94c32..1b66ddc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -24,7 +24,7 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. Linux Fedora 41, Windows 10...] + - OS: [e.g. Linux Fedora 43, Windows 11...] - Version [e.g. v0.1.1] **Additional context** diff --git a/.github/workflows/template-check-version.yml b/.github/workflows/template-check-version.yml index d7f6e3f..f99b70b 100644 --- a/.github/workflows/template-check-version.yml +++ b/.github/workflows/template-check-version.yml @@ -49,6 +49,6 @@ jobs: run: | gh issue --repo ${{ github.repository }} \ create --title "Template update" \ - --body "A new version of the template has been published. Please update this project using \`copier update --skip-answered --defaults\` and review changes. If you need help, refer to the \`clio\` documentation or reach out to the calliope project team." + --body "A new version of the template has been published. Please update this project using \`copier update --skip-answered --defaults\` and review changes. If you need help, refer to the Modelblocks documentation or reach out to the project team." env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/template-pr-ci.yml b/.github/workflows/template-pr-ci.yml deleted file mode 100644 index 6202862..0000000 --- a/.github/workflows/template-pr-ci.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Reusable Pull Request CI tests for modules - -on: - workflow_call: - secrets: - CDSAPI_KEY: - required: false - -jobs: - build: - name: Build - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest, macos-latest] - python-version: ["3.12"] - env: - CDSAPI_KEY: ${{ secrets.CDSAPI_KEY }} - steps: - - uses: actions/checkout@v4 - - name: Setup pixi - uses: prefix-dev/setup-pixi@v0.8.3 - - name: Run integration tests - id: tests - run: pixi run test-integration - continue-on-error: true - - name: Run snakemake linting - id: linting - run: | - pixi run snakemake --lint --snakefile workflow/Snakefile - pixi run snakemake --lint --snakefile tests/integration/Snakefile - continue-on-error: true - - name: Save integration logs - if: ${{ always() }} - uses: actions/upload-artifact@v4 - with: - name: integration-test-logs-${{ matrix.os }} - path: tests/integration/results/integration_test/logs - if-no-files-found: ignore - retention-days: 30 - - name: Fail if integration or linting failed - if: ${{ steps.tests.outcome == 'failure' || steps.linting.outcome == 'failure' }} - run: exit 1 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 905d83a..6bcc47d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,6 +12,7 @@ repos: # Repo quality - id: check-added-large-files args: [--enforce-all] + exclude: ^pixi\.lock$ - id: forbid-submodules - id: check-case-conflict - id: check-illegal-windows-names @@ -37,4 +38,4 @@ repos: - id: codespell ci: # https://pre-commit.ci/ - autoupdate_schedule: monthly + autoupdate_schedule: quarterly diff --git a/AUTHORS b/AUTHORS index ea29484..933d442 100644 --- a/AUTHORS +++ b/AUTHORS @@ -2,6 +2,6 @@ This is the list of contributors for copyright purposes. This does not necessarily list everyone who has contributed to this software's code or documentation. For a full contributor list, see: - + Ivan Ruiz Manuel, TU Delft diff --git a/CITATION.cff b/CITATION.cff index 1d3ca5d..8d13e52 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -3,8 +3,8 @@ # https://citation-file-format.github.io/ cff-version: 1.2.0 message: If you use this software or data produced by it, please cite it using the metadata from this file. -title: clio - data module template -repository: https://github.com/calliope-project/data-module-template +title: Modelblocks - data module template +repository: https://github.com/modelblocks-org/data-module-template license: Apache-2.0 authors: - given-names: Ivan diff --git a/README.md b/README.md index af73a96..22f2a82 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,48 @@ -# Data module template +# Modelblocks data module template -A template for modular data workflows using [`snakemake`](https://snakemake.readthedocs.io/en/stable/), part of the [`clio`](https://clio.readthedocs.io/) toolset. +A template for modular data workflows using [`snakemake`](https://snakemake.readthedocs.io/en/stable/) workflows, part of the [Modelblocks](https://www.modelblocks.org/) toolset. + +> [!TIP] +> Looking for general information on Modelblocks? +> Check the [Modelblocks](https://www.modelblocks.org/) website and our [documentation and guidelines](https://modelblocks.readthedocs.io/en). ## Resources -To familiarise yourself with `clio` data modules: +To familiarise yourself with Modelblocks data modules: - Check the auto-generated minimal example. You can find it in `tests/integration/Snakefile`. -- Read about the `clio` approach in [our documentation](https://clio.readthedocs.io/). - Read about `snakemake` modularisation in [their documentation](https://snakemake.readthedocs.io/en/stable/snakefiles/modularization.html#modules). +## Features + +- Standardised layout compliant with the [snakemake workflow catalogue's](https://snakemake.github.io/snakemake-workflow-catalog/#) listing requirements, enabling them to be automatically included in their listings once published. Read more about those requirements [here](https://snakemake.github.io/snakemake-workflow-catalog/docs/catalog.html#standardized-usage-workflows). +- Standardised input-output structure across modules: + - `resources/`: files needed for the module's processes. + - `user/`: files that should be provided by users. Document them well! + - `automatic/`: files that the module downloads or prepares in intermediate steps. + - `results/`: files generated by the module's algorithms that are relevant to the user. +- Pre-made integration setup for your module. + - Continuous Integration (CI) settings, ready for [pre-commit.ci](https://pre-commit.ci/). + - GitHub actions to automate chores during pull requests and releases. + - Premade `pytest` setup. + +> [!IMPORTANT] +> +> A few things to be aware of. +> +> - **Modules do not work like regular snakemake workflows** +> - The primary way to test them should be external (calling `module:`, passing resources, and requesting results). Check the pre-made example in `tests/integration` for more info. +> - Internal access (e.g., calling the `all:` rule) may not work, as the module may not have the necessary `resources/` to execute properly. +> - **Please be sure to maintain the following files to ensure Modelblocks compatibility** +> - `INTERFACE.yaml`: a simple description of the module's input/output structure. +> - `config/config.yaml`: a basic functioning example of how to configure this module. +> - `workflow/internal/config.schema.yaml`: the module's configuration schema, used by `snakemake` for [validation](https://snakemake.readthedocs.io/en/stable/snakefiles/configuration.html). +> - `AUTHORS` / `CITATION.cff` / `LICENSE`: licensing and attribution of this module's code and methods. + + ## How to use this template -We recommend using [`pixi`](https://pixi.sh/) as your package manager. Once installed, do the following: +We require [`pixi`](https://pixi.sh/) as a package manager. Once installed, do the following: 1. Install the templater tool [`copier`](https://copier.readthedocs.io/en/stable/). @@ -25,16 +55,17 @@ We recommend using [`pixi`](https://pixi.sh/) as your package manager. Once inst We recommend you use the module name as the directory name. ```shell - copier copy https://github.com/calliope-project/data-module-template.git ./path/to/ + copier copy https://github.com/modelblocks-org/data-module-template.git ./ ``` - If your terminal does not have access to `copier` then you may need to update your `PATH` variable to include `~/.pixi/bin`. + > [!TIP] + > If your terminal does not have access to `copier` then you may need to update your `PATH` variable to include `~/.pixi/bin`. 3. Answer some questions so can we pre-fill licensing, citation files, etc... 4. Initialise the `pixi` project environment of your new module. ```shell - cd ./path/to/ # navigate to the new project + cd ./ # navigate to the new project pixi install --all # install the project environment ``` @@ -44,30 +75,3 @@ We recommend using [`pixi`](https://pixi.sh/) as your package manager. Once inst cd tests/integration # go to the integration test... pixi run snakemake --use-conda # run it! ``` - -## Features - -- Standardised layout compliant with the [snakemake workflow catalogue's](https://snakemake.github.io/snakemake-workflow-catalog/#) listing requirements, enabling them to be automatically included in their listings once published. Read more about those requirements [here](https://snakemake.github.io/snakemake-workflow-catalog/docs/catalog.html#standardized-usage-workflows). -- Standardised input/output structure across modules: - - `resources/`: files needed for the module's processes. - - `user/`: files that should be provided by users. Document them well! - - `automatic/`: files that the module downloads or prepares in intermediate steps. - - `results/`: files generated by the module's algorithms that are relevant to the user. -- Pre-made integration setup for your module. - - Continuous Integration (CI) settings, ready for [pre-commit.ci](https://pre-commit.ci/). - - GitHub actions to automate chores during pull requests and releases. - - Premade `pytest` setup. - -> [!IMPORTANT] -> -> A few things to be aware of. -> -> - **Modules do not work like regular snakemake workflows** -> - The primary way to test them should be external (calling `module:`, passing resources, and requesting results). Check the pre-made example in `tests/integration` for more info. -> - Internal access (e.g., calling the `all:` rule) may not work, as the module may not have the necessary `resources/` to execute properly. -> - **Please be sure to maintain the following files to ensure `clio` compatibility** -> - These are: -> - `INTERFACE.yaml`: a simple description of the module's input/output structure. -> - `config/config.yaml`: a basic functioning example of how to configure this module. -> - `workflow/internal/config.schema.yaml`: the module's configuration schema, used by `snakemake` for [validation](https://snakemake.readthedocs.io/en/stable/snakefiles/configuration.html). -> - `AUTHORS` / `CITATION.cff` / `LICENSE`: licensing and attribution of this module's code and methods. diff --git a/copier.yaml b/copier.yaml index 0f66b2a..443dccb 100644 --- a/copier.yaml +++ b/copier.yaml @@ -21,8 +21,8 @@ _exclude: _skip_if_exists: # Respect user changes, except for a few standard files. - config/** - - docs/** - resources/** + - figures/** - results/** - tests/** - workflow/** @@ -32,7 +32,7 @@ _skip_if_exists: - INTERFACE.yaml # Special cases: these files should not be user-modified, even though they are in user-modifiable directories - "!config/README.md" - - "!tests/clio_test.py" + - "!tests/integration_test.py" _templates_suffix: .jinja _answers_file: .copier-answers.yml @@ -67,12 +67,12 @@ github_org: type: str help: >- Please provide the name of the github account or organisation where - this module will be created (e.g., 'calliope-project' in 'github.com/calliope-project'). + this module will be created (e.g., 'modelblocks-org' in 'github.com/modelblocks-org'). validator: >- {% if not (github_org | regex_search('^[a-zA-Z0-9][a-zA-Z0-9-]*$')) %} "Only lowercase letters, digits, hyphens and underscores are valid." {% endif %} - default: "calliope-project" + default: "modelblocks-org" license: type: str help: "Please choose a license." diff --git a/mypy.ini b/mypy.ini index c7b2d53..6769a42 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,3 +1,4 @@ [mypy] disable_error_code = import-untyped exclude = (^|/)\.(snakemake|pixi)(/|$) +exclude_gitignore = True diff --git a/pixi.lock b/pixi.lock index d13c782..4ef5df1 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,6 +3,8 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ + 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 @@ -10,44 +12,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.3.0-py313h920b4c0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.14.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-44.0.2-py313h6556f6e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dunamai-1.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval-type-backport-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/funcy-2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.48.1-pl5321h59d505e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-ansible-filters-1.3.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.12.1-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.15.0-py313h536fd9c_0.conda @@ -57,8 +47,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/plumbum-1.9.0-pyhd8ed1ab_0.conda @@ -75,7 +63,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.9.9-py313hfe82de2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda @@ -87,42 +75,31 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_1.conda osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-4.3.0-py313hdde674f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.14.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-44.0.2-py313h54e0d97_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dunamai-1.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval-type-backport-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/funcy-2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.48.1-pl5321hd71a902_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-ansible-filters-1.3.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.12.1-h73640d1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.23.1-h493aca8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.49.1-h3f77e49_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.15.0-py313h90d716c_0.conda @@ -132,8 +109,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/plumbum-1.9.0-pyhd8ed1ab_0.conda @@ -150,7 +125,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.9.9-py313h35210b4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda @@ -162,7 +137,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_1.conda win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bcrypt-4.3.0-py313hf3b5b86_0.conda @@ -170,14 +144,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2025.1.31-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.14.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cryptography-44.0.2-py313h9d39bda_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dunamai-1.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval-type-backport-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/eval_type_backport-0.2.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/funcy-2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/git-2.48.1-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda @@ -213,7 +186,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py313h5813708_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh07e9846_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.9.9-py313he8c32b4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda @@ -232,8 +205,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 - arch: x86_64 - platform: linux license: None size: 2562 timestamp: 1578324546067 @@ -246,8 +217,6 @@ packages: - libgomp >=7.5.0 constrains: - openmp_impl 9999 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 23621 @@ -272,8 +241,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache size: 258500 @@ -288,8 +255,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - __osx >=11.0 - arch: arm64 - platform: osx license: Apache-2.0 license_family: Apache size: 224598 @@ -303,8 +268,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 142695 @@ -315,8 +278,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - arch: x86_64 - platform: linux license: bzip2-1.0.6 license_family: BSD size: 252783 @@ -326,8 +287,6 @@ packages: md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab depends: - __osx >=11.0 - arch: arm64 - platform: osx license: bzip2-1.0.6 license_family: BSD size: 122909 @@ -339,56 +298,25 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: bzip2-1.0.6 license_family: BSD size: 54927 timestamp: 1720974860185 -- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda - sha256: d4f28d87b6339b94f74762c0076e29c8ef8ddfff51a564a92da2843573c18320 - md5: e2775acf57efd5af15b8e3d1d74d72d3 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - arch: x86_64 - platform: linux - license: MIT - license_family: MIT - size: 206085 - timestamp: 1734208189009 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - sha256: 09c0c8476e50b2955f474a4a1c17c4c047dd52993b5366b6ea8e968e583b921f - md5: c1c999a38a4303b29d75c636eaa13cf9 - depends: - - __osx >=11.0 - arch: arm64 - platform: osx - license: MIT - license_family: MIT - size: 179496 - timestamp: 1734208291879 - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda sha256: bf832198976d559ab44d6cdb315642655547e26d826e34da67cbee6624cda189 md5: 19f3a56f68d2fd06c516076bff482c52 - arch: x86_64 - platform: linux license: ISC size: 158144 timestamp: 1738298224464 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda sha256: 7e12816618173fe70f5c638b72adf4bfd4ddabf27794369bb17871c5bb75b9f9 md5: 3569d6a9141adc64d2fe4797f3289e06 - arch: arm64 - platform: osx license: ISC size: 158425 timestamp: 1738298167688 - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2025.1.31-h56e8100_0.conda sha256: 1bedccdf25a3bd782d6b0e57ddd97cdcda5501716009f2de4479a779221df155 md5: 5304a31607974dfc2110dfbb662ed092 - arch: x86_64 - platform: win license: ISC size: 158690 timestamp: 1738298232550 @@ -402,8 +330,6 @@ packages: - pycparser - python >=3.13.0rc1,<3.14.0a0 - python_abi 3.13.* *_cp313 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 295514 @@ -418,8 +344,6 @@ packages: - python >=3.13.0rc1,<3.14.0a0 - python >=3.13.0rc1,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 282115 @@ -434,8 +358,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 291828 @@ -449,30 +371,31 @@ packages: license_family: BSD size: 27011 timestamp: 1733218222191 -- conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.5.0-pyhd8ed1ab_0.conda - sha256: 719493a85e0970f379fbedecc0579c890ed14762dfb38a44e827f0da6d261464 - md5: e44f51674ff56200d5c8e476891ed8d5 +- conda: https://conda.anaconda.org/conda-forge/noarch/copier-9.14.1-pyhcf101f3_0.conda + sha256: 93d1b3ba43d15010c95938b491f11d53d058a8466aa11a0a7bb51ae8cf70d3e5 + md5: b5ddb42e9d800aacf070135d14b9423b depends: + - python >=3.10 - colorama >=0.4.6 - dunamai >=1.7.0 - - eval-type-backport >=0.1.3,<0.3.0 - funcy >=1.17 - - git >=2.27 - jinja2 >=3.1.5 - jinja2-ansible-filters >=1.3.1 - packaging >=23.0 - pathspec >=0.9.0 - - platformdirs >=4.3.6 - plumbum >=1.6.9 + - prompt-toolkit <3.0.52 - pydantic >=2.4.2 - pygments >=2.7.1 - - python >=3.9 - pyyaml >=5.3.1 - questionary >=1.8.1 + - eval-type-backport >=0.1.3,<0.3.0 + - platformdirs >=4.3.6 + - typing_extensions >=4.0.0,<5.0.0 + - python license: MIT - license_family: MIT - size: 45589 - timestamp: 1740395943025 + size: 56002 + timestamp: 1774962797854 - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-44.0.2-py313h6556f6e_0.conda sha256: 9c319cfad619775e6d8b7ea796aaa3afbbca76065abc59401c4f3c3f8b283fe8 md5: 3fff44ff412ed17629a239431e67b5d9 @@ -485,8 +408,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT license_family: BSD size: 1592265 @@ -503,8 +424,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - __osx >=11.0 - arch: arm64 - platform: osx license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT license_family: BSD size: 1480278 @@ -520,8 +439,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT license_family: BSD size: 1356637 @@ -574,50 +491,6 @@ packages: license_family: BSD size: 30249 timestamp: 1734381235500 -- conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.48.1-pl5321h59d505e_0.conda - sha256: 662bf3e50f515d9ba94bef75c0fe5400bd10408b2efa791a89c7e2de19fb34e5 - md5: f72d5757e89397a3a12dc6ad2ab65e8d - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.12.1,<9.0a0 - - libexpat >=2.6.4,<3.0a0 - - libgcc >=13 - - libiconv >=1.17,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - pcre2 >=10.44,<10.45.0a0 - - perl 5.* - arch: x86_64 - platform: linux - license: GPL-2.0-or-later and LGPL-2.1-or-later - size: 10134048 - timestamp: 1739539663070 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.48.1-pl5321hd71a902_0.conda - sha256: ed48233c8b7278c9624797f25475138700c23ca4d03b625ad6ec9c583360bc31 - md5: d8d2a5095794b73fa736b379e4e6d581 - depends: - - __osx >=11.0 - - libcurl >=8.12.1,<9.0a0 - - libexpat >=2.6.4,<3.0a0 - - libiconv >=1.17,<2.0a0 - - libintl >=0.23.1,<1.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - pcre2 >=10.44,<10.45.0a0 - - perl 5.* - arch: arm64 - platform: osx - license: GPL-2.0-or-later and LGPL-2.1-or-later - size: 11385672 - timestamp: 1739540137149 -- conda: https://conda.anaconda.org/conda-forge/win-64/git-2.48.1-h57928b3_0.conda - sha256: 706425ef0b18d23edcd3c6791e8db9b5fbcc01466063e5c7ef3ce08db78a0fa6 - md5: 9e4f02797e0dc75bbd556139109f79d2 - arch: x86_64 - platform: win - license: GPL-2.0-or-later and LGPL-2.1-or-later - size: 123514548 - timestamp: 1739540066099 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 md5: c85c76dc67d75619a92f51dfbce06992 @@ -659,47 +532,6 @@ packages: license_family: BSD size: 20315 timestamp: 1734906203051 -- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb - md5: 30186d27e2c9fa62b45fb1476b7200e3 - depends: - - libgcc-ng >=10.3.0 - arch: x86_64 - platform: linux - license: LGPL-2.1-or-later - size: 117831 - timestamp: 1646151697040 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 - md5: 3f43953b7d3fb3aaa1d0d0723d91e368 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.3.1,<4.0a0 - arch: x86_64 - platform: linux - license: MIT - license_family: MIT - size: 1370023 - timestamp: 1719463201255 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b - md5: c6dc8a0fdec13a0565936655c33069a1 - depends: - - __osx >=11.0 - - libcxx >=16 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - openssl >=3.3.1,<4.0a0 - arch: arm64 - platform: osx - license: MIT - license_family: MIT - size: 1155530 - timestamp: 1719463474401 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda sha256: db73f38155d901a610b2320525b9dd3b31e4949215c870685fd92ea61b5ce472 md5: 01f8d123c96816249efd255a31ad7712 @@ -707,105 +539,19 @@ packages: - __glibc >=2.17,<3.0.a0 constrains: - binutils_impl_linux-64 2.43 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL size: 671240 timestamp: 1740155456116 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.12.1-h332b0f4_0.conda - sha256: 2ebc3039af29269e4cdb858fca36265e5e400c1125a4bcd84ae73a596e0e76ca - md5: 45e9dc4e7b25e2841deb392be085500e - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.21.3,<1.22.0a0 - - libgcc >=13 - - libnghttp2 >=1.64.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - arch: x86_64 - platform: linux - license: curl - license_family: MIT - size: 426675 - timestamp: 1739512336799 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.12.1-h73640d1_0.conda - sha256: 0bddd1791eb0602c8c6aa465802e9d4526d3ec1251d900b209e767753565d5df - md5: 105f0cceef753644912f42e11c1ae9cf - depends: - - __osx >=11.0 - - krb5 >=1.21.3,<1.22.0a0 - - libnghttp2 >=1.64.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - arch: arm64 - platform: osx - license: curl - license_family: MIT - size: 387893 - timestamp: 1739512564746 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache size: 523505 timestamp: 1736877862502 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 - md5: c277e0a4d549b03ac1e9d6cbbe3d017b - depends: - - ncurses - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - ncurses >=6.5,<7.0a0 - arch: x86_64 - platform: linux - license: BSD-2-Clause - license_family: BSD - size: 134676 - timestamp: 1738479519902 -- 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 - arch: arm64 - platform: osx - license: BSD-2-Clause - license_family: BSD - size: 107691 - timestamp: 1738479560845 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - md5: 172bf1cd1ff8629f2b1179945ed45055 - depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux - license: BSD-2-Clause - license_family: BSD - size: 112766 - timestamp: 1702146165126 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f - md5: 36d33e440c31857372a72137f78bacf5 - arch: arm64 - platform: osx - license: BSD-2-Clause - license_family: BSD - size: 107458 - timestamp: 1702146414478 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 md5: db833e03127376d461e1e13e76f09b6c @@ -814,8 +560,6 @@ packages: - libgcc >=13 constrains: - expat 2.6.4.* - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 73304 @@ -827,8 +571,6 @@ packages: - __osx >=11.0 constrains: - expat 2.6.4.* - arch: arm64 - platform: osx license: MIT license_family: MIT size: 64693 @@ -842,8 +584,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - expat 2.6.4.* - arch: x86_64 - platform: win license: MIT license_family: MIT size: 139068 @@ -854,8 +594,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 53415 @@ -863,8 +601,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca md5: 086914b672be056eb70fd4285b6783b6 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 39020 @@ -876,8 +612,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 40830 @@ -891,8 +625,6 @@ packages: constrains: - libgomp 14.2.0 h767d61c_2 - libgcc-ng ==14.2.0=*_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL size: 847885 @@ -902,8 +634,6 @@ packages: md5: a2222a6ada71fb478682efe483ce0f92 depends: - libgcc 14.2.0 h767d61c_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL size: 53758 @@ -913,52 +643,16 @@ packages: md5: 06d02030237f4d5b3d9a7e7d348fe3c6 depends: - __glibc >=2.17,<3.0.a0 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL size: 459862 timestamp: 1740240588123 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - sha256: 18a4afe14f731bfb9cf388659994263904d20111e42f841e9eea1bb6f91f4ab4 - md5: e796ff8ddc598affdf7c173d6145f087 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - arch: x86_64 - platform: linux - license: LGPL-2.1-only - size: 713084 - timestamp: 1740128065462 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda - sha256: d30780d24bf3a30b4f116fca74dedb4199b34d500fe6c52cced5f8cc1e926f03 - md5: 450e6bdc0c7d986acf7b8443dce87111 - depends: - - __osx >=11.0 - arch: arm64 - platform: osx - license: LGPL-2.1-only - size: 681804 - timestamp: 1740128227484 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.23.1-h493aca8_0.conda - sha256: 30d2a8a37070615a61777ce9317968b54c2197d04e9c6c2eea6cdb46e47f94dc - md5: 7b8faf3b5fc52744bda99c4cd1d6438d - depends: - - __osx >=11.0 - - libiconv >=1.17,<2.0a0 - arch: arm64 - platform: osx - license: LGPL-2.1-or-later - size: 78921 - timestamp: 1739039271409 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.4-hb9d3cd8_0.conda sha256: cad52e10319ca4585bc37f0bc7cce99ec7c15dc9168e42ccb96b741b0a27db3f md5: 42d5b6a0f30d3c10cd88cb8584fda1cb depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: 0BSD size: 111357 timestamp: 1738525339684 @@ -967,8 +661,6 @@ packages: md5: e3fd1f8320a100f2b210e690a57cd615 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: 0BSD size: 98945 timestamp: 1738525462560 @@ -979,8 +671,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: 0BSD size: 104465 timestamp: 1738525557254 @@ -990,8 +680,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD size: 89991 @@ -1001,8 +689,6 @@ packages: md5: 7476305c35dd9acef48da8f754eedb40 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: BSD-2-Clause license_family: BSD size: 69263 @@ -1014,54 +700,15 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD size: 88657 timestamp: 1723861474602 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975 - md5: 19e57602824042dfd0446292ef90488b - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.32.3,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - arch: x86_64 - platform: linux - license: MIT - license_family: MIT - size: 647599 - timestamp: 1729571887612 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f - md5: 3408c02539cee5f1141f9f11450b6a51 - depends: - - __osx >=11.0 - - c-ares >=1.34.2,<2.0a0 - - libcxx >=17 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - arch: arm64 - platform: osx - license: MIT - license_family: MIT - size: 566719 - timestamp: 1729572385640 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 md5: a587892d3c13b6621a6091be690dbca2 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: ISC size: 205978 timestamp: 1716828628198 @@ -1070,8 +717,6 @@ packages: md5: a7ce36e284c5faaf93c220dfc39e3abd depends: - __osx >=11.0 - arch: arm64 - platform: osx license: ISC size: 164972 timestamp: 1716828607917 @@ -1082,8 +727,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: ISC size: 202344 timestamp: 1716828757533 @@ -1094,8 +737,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: Unlicense size: 915956 timestamp: 1739953155793 @@ -1105,8 +746,6 @@ packages: depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 - arch: arm64 - platform: osx license: Unlicense size: 898767 timestamp: 1739953312379 @@ -1117,81 +756,28 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Unlicense size: 1081190 timestamp: 1739953491995 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 - md5: be2de152d8073ef1c01b7728475f2fe7 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - arch: x86_64 - platform: linux - license: BSD-3-Clause - license_family: BSD - size: 304278 - timestamp: 1732349402869 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - sha256: f7047c6ed44bcaeb04432e8c74da87591940d091b0a3940c0d884b7faa8062e9 - md5: ddc7194676c285513706e5fc64f214d7 - depends: - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - arch: arm64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 279028 - timestamp: 1732349599461 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda sha256: 8f5bd92e4a24e1d35ba015c5252e8f818898478cb3bc50bd8b12ab54707dc4da md5: a78c856b6dc6bf4ea8daeb9beaaa3fb0 depends: - __glibc >=2.17,<3.0.a0 - libgcc 14.2.0 h767d61c_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL size: 3884556 timestamp: 1740240685253 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - sha256: e86f38b007cf97cc2c67cd519f2de12a313c4ee3f5ef11652ad08932a5e34189 - md5: c75da67f045c2627f59e6fcb5f4e3a9b - depends: - - libstdcxx 14.2.0 h8f9b012_2 - arch: x86_64 - platform: linux - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 53830 - timestamp: 1740240722530 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 md5: 40b61aab5c7ba9ff276c41cfffe6b80b depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 33601 timestamp: 1680112270483 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - md5: 5aa797f8787fe7a17d1b0821485b5adc - depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux - license: LGPL-2.1-or-later - size: 100393 - timestamp: 1702724383534 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -1200,8 +786,6 @@ packages: - libgcc >=13 constrains: - zlib 1.3.1 *_2 - arch: x86_64 - platform: linux license: Zlib license_family: Other size: 60963 @@ -1213,8 +797,6 @@ packages: - __osx >=11.0 constrains: - zlib 1.3.1 *_2 - arch: arm64 - platform: osx license: Zlib license_family: Other size: 46438 @@ -1228,8 +810,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - zlib 1.3.1 *_2 - arch: x86_64 - platform: win license: Zlib license_family: Other size: 55476 @@ -1244,8 +824,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - jinja2 >=3.0.0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 24856 @@ -1260,8 +838,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - jinja2 >=3.0.0 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD size: 24757 @@ -1277,8 +853,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - jinja2 >=3.0.0 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 27930 @@ -1294,8 +868,6 @@ packages: - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - typing_extensions >=4.1.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 17058016 @@ -1311,8 +883,6 @@ packages: - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - typing_extensions >=4.1.0 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 10275919 @@ -1329,8 +899,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 8300827 @@ -1350,8 +918,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: X11 AND BSD-3-Clause size: 891641 timestamp: 1738195959188 @@ -1360,8 +926,6 @@ packages: md5: 068d497125e4bf8a66bf707254fff5ae depends: - __osx >=11.0 - arch: arm64 - platform: osx license: X11 AND BSD-3-Clause size: 797030 timestamp: 1738196177597 @@ -1372,8 +936,6 @@ packages: - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc >=13 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache size: 2939306 @@ -1384,8 +946,6 @@ packages: depends: - __osx >=11.0 - ca-certificates - arch: arm64 - platform: osx license: Apache-2.0 license_family: Apache size: 2934522 @@ -1398,8 +958,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 8515197 @@ -1434,54 +992,6 @@ packages: license_family: MOZILLA size: 41075 timestamp: 1733233471940 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda - sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d - md5: df359c09c41cd186fffb93a2d87aa6f5 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - libgcc-ng >=12 - - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux - license: BSD-3-Clause - license_family: BSD - size: 952308 - timestamp: 1723488734144 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - sha256: 83153c7d8fd99cab33c92ce820aa7bfed0f1c94fc57010cf227b6e3c50cb7796 - md5: 147c83e5e44780c7492998acbacddf52 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - arch: arm64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 618973 - timestamp: 1723488853807 -- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - build_number: 7 - sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 - md5: f2cfec9406850991f4e3d960cc9e3321 - depends: - - libgcc-ng >=12 - - libxcrypt >=4.4.36 - arch: x86_64 - platform: linux - license: GPL-1.0-or-later OR Artistic-1.0-Perl - size: 13344463 - timestamp: 1703310653947 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda - build_number: 7 - sha256: b0c55040d2994fd6bf2f83786561d92f72306d982d6ea12889acad24a9bf43b8 - md5: ba3cbe93f99e896765422cc5f7c3a79e - arch: arm64 - platform: osx - license: GPL-1.0-or-later OR Artistic-1.0-Perl - size: 14439531 - timestamp: 1703311335652 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 md5: 577852c7e53901ddccc7e6a9959ddebe @@ -1541,8 +1051,6 @@ packages: - libgcc >=13 - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 475101 @@ -1555,8 +1063,6 @@ packages: - python >=3.13,<3.14.0a0 - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD size: 484139 @@ -1570,8 +1076,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 491314 @@ -1610,8 +1114,6 @@ packages: - typing-extensions >=4.6.0,!=4.7.0 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 1645605 @@ -1627,8 +1129,6 @@ packages: - typing-extensions >=4.6.0,!=4.7.0 constrains: - __osx >=11.0 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 1595692 @@ -1643,8 +1143,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 1615078 @@ -1669,8 +1167,6 @@ packages: - python >=3.13.0rc1,<3.14.0a0 - python_abi 3.13.* *_cp313 - six - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache size: 1186011 @@ -1686,8 +1182,6 @@ packages: - python >=3.13.0rc1,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - six - arch: arm64 - platform: osx license: Apache-2.0 license_family: Apache size: 1177945 @@ -1704,8 +1198,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 1178751 @@ -1749,8 +1241,6 @@ packages: - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - arch: x86_64 - platform: linux license: Python-2.0 size: 33233150 timestamp: 1739803603242 @@ -1774,8 +1264,6 @@ packages: - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - arch: arm64 - platform: osx license: Python-2.0 size: 11682568 timestamp: 1739801342527 @@ -1799,8 +1287,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Python-2.0 size: 16848398 timestamp: 1739800686310 @@ -1811,8 +1297,6 @@ packages: md5: 381bbd2a92c863f640a55b6ff3c35161 constrains: - python 3.13.* *_cp313 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 6217 @@ -1823,8 +1307,6 @@ packages: md5: b8e82d0a5c1664638f87f63cc5d241fb constrains: - python 3.13.* *_cp313 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD size: 6322 @@ -1835,8 +1317,6 @@ packages: md5: 44b4fe6f22b57103afb2299935c8b68e constrains: - python 3.13.* *_cp313 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 6716 @@ -1850,8 +1330,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: PSF-2.0 license_family: PSF size: 6060096 @@ -1885,8 +1363,6 @@ packages: - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - yaml >=0.2.5,<0.3.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 205919 @@ -1900,8 +1376,6 @@ packages: - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - yaml >=0.2.5,<0.3.0a0 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 194243 @@ -1916,30 +1390,26 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - yaml >=0.2.5,<0.3.0a0 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 182783 timestamp: 1737455202579 -- conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda - sha256: 7f348452dd30da9e915ecbe248681c62b321f77552cb66235b667a999bf61ceb - md5: 5cb508138c0534f6ecd123f29ae51bab +- conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda + sha256: 0604c6dff3af5f53e34fceb985395d08287137f220450108a795bcd1959caf14 + md5: 34fa231b5c5927684b03bb296bb94ddc depends: - - prompt_toolkit <=3.0.36,>=2.0 - - python >=3.9 + - prompt_toolkit >=2.0,<4.0 + - python >=3.10 license: MIT license_family: MIT - size: 30491 - timestamp: 1736021773640 + size: 31257 + timestamp: 1757356458097 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c md5: 283b96675859b20a825f8fa30f311446 depends: - libgcc >=13 - ncurses >=6.5,<7.0a0 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL size: 282480 @@ -1949,8 +1419,6 @@ packages: md5: 63ef3f6e6d6d5c589e64f11263dc5676 depends: - ncurses >=6.5,<7.0a0 - arch: arm64 - platform: osx license: GPL-3.0-only license_family: GPL size: 252359 @@ -1966,8 +1434,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 8830748 @@ -1983,8 +1449,6 @@ packages: - python_abi 3.13.* *_cp313 constrains: - __osx >=11.0 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 7760091 @@ -1998,8 +1462,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 7931075 @@ -2019,8 +1481,6 @@ packages: depends: - libgcc-ng >=12 - libzlib >=1.2.13,<2.0.0a0 - arch: x86_64 - platform: linux license: TCL license_family: BSD size: 3318875 @@ -2030,8 +1490,6 @@ packages: md5: b50a57ba89c32b62428b71a875291c9b depends: - libzlib >=1.2.13,<2.0.0a0 - arch: arm64 - platform: osx license: TCL license_family: BSD size: 3145523 @@ -2043,8 +1501,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: TCL license_family: BSD size: 3503410 @@ -2088,8 +1544,6 @@ packages: md5: 6797b005cd0f439c4c5c9ac565783700 constrains: - vs2015_runtime >=14.29.30037 - arch: x86_64 - platform: win license: LicenseRef-MicrosoftWindowsSDK10 size: 559710 timestamp: 1728377334097 @@ -2098,8 +1552,6 @@ packages: md5: 9098c5cfb418fc0b0204bf2efc1e9afa depends: - vc14_runtime >=14.42.34438 - arch: x86_64 - platform: win track_features: - vc14 license: BSD-3-Clause @@ -2113,8 +1565,6 @@ packages: - ucrt >=10.0.20348.0 constrains: - vs2015_runtime 14.42.34438.* *_24 - arch: x86_64 - platform: win license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary size: 751362 @@ -2124,8 +1574,6 @@ packages: md5: 1dd2e838eb13190ae1f1e2760c036fdc depends: - vc14_runtime >=14.42.34438 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 17474 @@ -2144,8 +1592,6 @@ packages: md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae depends: - libgcc-ng >=9.4.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 89141 @@ -2153,8 +1599,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7 md5: 4bb3f014845110883a3c5ee811fd84b4 - arch: arm64 - platform: osx license: MIT license_family: MIT size: 88016 @@ -2165,8 +1609,6 @@ packages: depends: - vc >=14.1,<15.0a0 - vs2015_runtime >=14.16.27012 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 63274 @@ -2180,29 +1622,3 @@ packages: license_family: MIT size: 21809 timestamp: 1732827613585 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_1.conda - sha256: 532d3623961e34c53aba98db2ad0a33b7a52ff90d6960e505fb2d2efc06bb7da - md5: 02e4e2fa41a6528afba2e54cbc4280ff - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux - license: BSD-3-Clause - license_family: BSD - size: 567419 - timestamp: 1740255350233 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_1.conda - sha256: f49bbeeb3a8ead81920e6c695fff1260cbd221e2cfcdf9fb34207260fbd60816 - md5: 66e5c4b02aa97230459efdd4f64c8ce6 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - arch: arm64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 399981 - timestamp: 1740255382232 diff --git a/pixi.toml b/pixi.toml index 6e4fc71..2499b65 100644 --- a/pixi.toml +++ b/pixi.toml @@ -1,12 +1,12 @@ -[project] +[workspace] name = "data-module-template" authors = ["See AUTHORS file"] -description = "A template for `clio` data modules." +description = "A template for Modelblocks data modules." license = "Apache-2.0" readme = "README.md" channels = ["conda-forge"] platforms = ["win-64", "linux-64", "osx-arm64"] -homepage = "https://clio.readthedocs.io/" +homepage = "https://www.modelblocks.org/" [dependencies] python = ">=3.12" diff --git a/template/.github/ISSUE_TEMPLATE/bug_report.md b/template/.github/ISSUE_TEMPLATE/bug_report.md index cd94c32..1b66ddc 100644 --- a/template/.github/ISSUE_TEMPLATE/bug_report.md +++ b/template/.github/ISSUE_TEMPLATE/bug_report.md @@ -24,7 +24,7 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. Linux Fedora 41, Windows 10...] + - OS: [e.g. Linux Fedora 43, Windows 11...] - Version [e.g. v0.1.1] **Additional context** diff --git a/template/.github/ISSUE_TEMPLATE/config.yaml b/template/.github/ISSUE_TEMPLATE/config.yaml new file mode 100644 index 0000000..28da94d --- /dev/null +++ b/template/.github/ISSUE_TEMPLATE/config.yaml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: General information + url: https://www.modelblocks.org/ + about: Please consult our website for general information on the Modelblocks methodology. diff --git a/template/.github/pull_request_template.md b/template/.github/pull_request_template.md index 9610b97..400a69f 100644 --- a/template/.github/pull_request_template.md +++ b/template/.github/pull_request_template.md @@ -8,6 +8,11 @@ Fixes # ## Reviewer checklist -* [ ] `INTERFACE.yaml` is up-to-date with all relevant user resources and results. -* [ ] The integration example is up-to-date with a minimal use-case of the module. -* [ ] Module documentation is up-to-date. +* [ ] There are no `pip` dependencies in the module's environment files (`workflow/envs/`). +* [ ] All rules use `pathvars` (e.g., ``) in their inputs and outputs. +* [ ] The integration test-suite is successful, including: + * [ ] `pre-commit.ci` tests pass. + * [ ] tests pass for all relevant OS configurations (linux, osx, windows). +* [ ] Module documentation is up-to-date, including: + * [ ] `INTERFACE.yaml` mentions all relevant `pathvars` and `wildcards`. + * [ ] `README.md` describes how to use the module and has the necessary citations. diff --git a/template/.github/workflows/check-version.yml b/template/.github/workflows/check-version.yml index 8e57b32..0a4a602 100644 --- a/template/.github/workflows/check-version.yml +++ b/template/.github/workflows/check-version.yml @@ -6,4 +6,4 @@ on: jobs: copier-update: - uses: calliope-project/data-module-template/.github/workflows/template-check-version.yml@latest + uses: modelblocks-org/data-module-template/.github/workflows/template-check-version.yml@latest diff --git a/template/.github/workflows/pr-ci.yml b/template/.github/workflows/pr-ci.yml index a216bf5..728b9c5 100644 --- a/template/.github/workflows/pr-ci.yml +++ b/template/.github/workflows/pr-ci.yml @@ -1,9 +1,41 @@ -name: CI +# !!!!! DO NOT MODIFY UNLESS ABSOLUTELY NECESSARY !!!!! +# This workflow helps standardise integration tests across data modules +name: Pull Request CI tests for Modelblocks data modules on: pull_request: branches: - "main" - jobs: - ci-tests: - uses: calliope-project/data-module-template/.github/workflows/template-pr-ci.yml@latest + build: + name: Build + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ["3.12"] + steps: + - uses: actions/checkout@v4 + - name: Setup pixi + uses: prefix-dev/setup-pixi@v0.8.3 + - name: Run integration tests + id: tests + run: pixi run test-integration + continue-on-error: true + - name: Run snakemake linting + id: linting + run: | + pixi run snakemake --lint --snakefile workflow/Snakefile + pixi run snakemake --lint --snakefile tests/integration/Snakefile + continue-on-error: true + - name: Save integration logs + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: integration-test-logs-${{ matrix.os }} + path: tests/integration/results/integration_test/logs + if-no-files-found: ignore + retention-days: 30 + - name: Fail if integration or linting failed + if: ${{ steps.tests.outcome == 'failure' || steps.linting.outcome == 'failure' }} + run: exit 1 diff --git a/template/.github/workflows/release.yml b/template/.github/workflows/release.yml index 32ab6f2..7cb7539 100644 --- a/template/.github/workflows/release.yml +++ b/template/.github/workflows/release.yml @@ -6,4 +6,4 @@ on: jobs: release-workflow: - uses: calliope-project/data-module-template/.github/workflows/template-release.yml@latest + uses: modelblocks-org/data-module-template/.github/workflows/template-release.yml@latest diff --git a/template/.pre-commit-config.yaml b/template/.pre-commit-config.yaml index c29fc99..ee59aa3 100644 --- a/template/.pre-commit-config.yaml +++ b/template/.pre-commit-config.yaml @@ -12,6 +12,7 @@ repos: # Repo quality - id: check-added-large-files args: [--enforce-all] + exclude: ^pixi\.lock$ - id: forbid-submodules - id: check-case-conflict - id: check-illegal-windows-names @@ -44,4 +45,4 @@ repos: files: .*\.(py|smk|md)$|^Snakefile$ ci: # https://pre-commit.ci/ - autoupdate_schedule: monthly + autoupdate_schedule: quarterly diff --git a/template/CITATION.cff.jinja b/template/CITATION.cff.jinja index a46293b..0e1de2c 100644 --- a/template/CITATION.cff.jinja +++ b/template/CITATION.cff.jinja @@ -3,7 +3,7 @@ # https://citation-file-format.github.io/ cff-version: 1.2.0 message: If you use this software or data produced by it, please cite it using the metadata from this file. -title: "clio - {{module_short_name}}: {{module_long_name}}" +title: "Modelblocks - {{module_short_name}}: {{module_long_name}}" repository: "https://github.com/{{github_org}}/{{module_short_name}}" license: {{license}} authors: diff --git a/template/INTERFACE.yaml b/template/INTERFACE.yaml index 72104d4..1283095 100644 --- a/template/INTERFACE.yaml +++ b/template/INTERFACE.yaml @@ -1,20 +1,48 @@ -# Module Input-Output structure for automated doc. generation -resources: - user: - user_message.md: "Example file emulating external files requested from a user." - automatic: - dummy_readme.md: "Example file emulating downloads determined by internal settings." -results: - combined_text.md: "Example file emulating module results." +# Module Input-Output structure for automated docs generation +pathvars: + snakemake_defaults: + logs: + default: "" + description: location of snakemake log files. + resources: + default: "" + description: "location of module resource (input) files." + results: + default: "" + description: "location of module result (output) files." + user_resources: + user_message: + default: "/user/user_message.md" + description: Example file emulating external files requested from a user. + results: + combined_text: + default: "/combined_text.md" + description: Example file emulating module results. # Wildcard example: -# resources: -# user: -# shapes_{resolution}.geojson: region geometries. -# automatic: -# technology_data.parquet: dataset with technology characteristics. -# results: -# '{resolution}/tech_capacity.parquet': description of output data. -# '{resolution}/results_image.png': description of output image. +# +# pathvars: +# snakemake_defaults: +# logs: +# default: "" +# description: location of rule log files. +# resources: +# default: "" +# description: "location of module resource files." +# results: +# default: "" +# description: "location of module results." +# user_resources: +# shapes: +# default: "/user/{shapes}/shapes.parquet" +# description: region-specific polygons to process. +# proxy: +# default: "/user/proxy.tiff" +# description: global proxy raster file. +# results: +# capacity: +# default: "/{shapes}/{scenario}/capacity.parquet" +# description: Module results # wildcards: -# resolution: description of the wildcard’s purpose. +# shapes: resolution case +# scenario: configured scenario case diff --git a/template/README.md.jinja b/template/README.md.jinja index 936eae9..49b55e4 100644 --- a/template/README.md.jinja +++ b/template/README.md.jinja @@ -2,17 +2,22 @@ {{module_description}} -A modular `snakemake` workflow built for [`clio`](https://clio.readthedocs.io/) data modules. +## About this module + -## Using this module +This is a modular `snakemake` workflow built for [Modelblocks](https://www.modelblocks.org/) data modules. This module can be imported directly into any `snakemake` workflow. -Please consult the integration example in `tests/integration/Snakefile` for more information. +For more information, please consult: +- The Modelblocks [documentation](https://modelblocks.readthedocs.io/en/latest/). +- The integration example in this repository (`tests/integration/Snakefile`). +- The `snakemake` [documentation on modularisation](https://snakemake.readthedocs.io/en/stable/snakefiles/modularization.html). ## Development + We use [`pixi`](https://pixi.sh/) as our package manager for development. -Once installed, run the following to clone this repo and install all dependencies. +Once installed, run the following to clone this repository and install all dependencies. ```shell git clone git@github.com:{{github_org}}/{{module_short_name}}.git @@ -26,12 +31,6 @@ For testing, simply run: pixi run test-integration ``` -To view the documentation locally, use: - -```shell -pixi run serve-docs -``` - To test a minimal example of a workflow using this module: ```shell @@ -39,3 +38,26 @@ pixi shell # activate this project's environment cd tests/integration/ # navigate to the integration example snakemake --use-conda --cores 2 # run the workflow! ``` + +## Documentation + +### Overview + + +### Configuration + + +Please consult the configuration [README](./config/README.md) and the [configuration example](./config/config.yaml) for a general overview on the configuration options of this module. + +### Input / output structure + + +Please consult the [interface file](./INTERFACE.yaml) for more information. + +### References + + +This module is based on the following research and datasets: + +* +* diff --git a/template/config/README.md b/template/config/README.md index 2bd88fa..720820c 100644 --- a/template/config/README.md +++ b/template/config/README.md @@ -1,9 +1,8 @@ -# Configuration +We recommend consulting the following before using this module: +- `config/config.yaml`: a generic example configuration of this module. +- `workflow/internal/config.schema.yaml`: a schematic overview of all the configuration options of this module. +- `INTERFACE.yaml`: lists module input and output files, and their default locations. +- `tests/integration/Snakefile`: an example of how to call this module from another workflow. -This workflow is part of the [clio project](https://clio.readthedocs.io/en/latest/). -Please consult our documentation for more details. -Other useful resources are: - -- `INTERFACE.yaml`: user input files (placed in `resources/user`) and module output files (placed in `results`). -- `workflow/internal/config.schema.yaml`: general configuration options. -- `tests/integration/`: a simple example of how to use this module. +This data module is part of the [Modelblocks](https://www.modelblocks.org/) project. +Please consult the [Modelblocks documentation](https://modelblocks.readthedocs.io/) for more details. diff --git a/template/docs/index.md.jinja b/template/docs/index.md.jinja deleted file mode 100644 index a403002..0000000 --- a/template/docs/index.md.jinja +++ /dev/null @@ -1,4 +0,0 @@ -# Home - -Welcome to the documentation of the `{{module_short_name}}` data module! -Please consult the [specification guidelines](./specification.md) and the [`clio` documentation](https://clio.readthedocs.io/) for more information. diff --git a/template/figures/.gitkeep b/template/figures/.gitkeep new file mode 100644 index 0000000..dcafcbe --- /dev/null +++ b/template/figures/.gitkeep @@ -0,0 +1 @@ +# For module documentation figures diff --git a/template/mypy.ini.jinja b/template/mypy.ini.jinja index c7b2d53..6769a42 100644 --- a/template/mypy.ini.jinja +++ b/template/mypy.ini.jinja @@ -1,3 +1,4 @@ [mypy] disable_error_code = import-untyped exclude = (^|/)\.(snakemake|pixi)(/|$) +exclude_gitignore = True diff --git a/template/pixi.toml.jinja b/template/pixi.toml.jinja index 9c8a2ff..5e49752 100644 --- a/template/pixi.toml.jinja +++ b/template/pixi.toml.jinja @@ -1,4 +1,4 @@ -[project] +[workspace] name = "{{ module_short_name }}" authors = ["See AUTHORS file"] description = "{{ module_description }}" @@ -6,10 +6,10 @@ license = "{{ license }}" readme = "README.md" channels = ["conda-forge", "bioconda"] platforms = ["win-64", "linux-64", "osx-arm64"] -homepage = "https://clio.readthedocs.io/" +homepage = "https://www.modelblocks.org/" [dependencies] -clio-tools = ">=2025.03.03" +clio-tools = ">=2026.03.30" conda = ">=25.0.0" ipdb = ">=0.13.13" ipykernel = ">=6.29.5" @@ -20,6 +20,7 @@ python = ">=3.12" ruff = ">=0.9.9" snakefmt = ">=0.10.2" snakemake-minimal = ">=8.29.0" +pytz = ">=2026.1.post1" [tasks] -test-integration = {cmd = "pytest tests/clio_test.py"} +test-integration = {cmd = "pytest tests/integration_test.py"} diff --git a/template/tests/integration/{% if true %}Snakefile{% endif %}.jinja b/template/tests/integration/{% if true %}Snakefile{% endif %}.jinja index da3c663..8e89702 100644 --- a/template/tests/integration/{% if true %}Snakefile{% endif %}.jinja +++ b/template/tests/integration/{% if true %}Snakefile{% endif %}.jinja @@ -5,7 +5,7 @@ configfile: workflow.source_path("./test_config.yaml") rule create_external_input: message: "Example of a rule external to your module." output: - text_file = "results/integration_test/resources/user/user_message.md" + text_file = "resources/user/user_message.md" run: from pathlib import Path from textwrap import dedent @@ -19,11 +19,21 @@ rule create_external_input: # Import the module and configure it. # `snakefile:` specifies the module. It can use file paths and special github(...) / gitlab(...) markers -# `prefix:` re-routes all input/output paths of the module, helping to avoid file conflicts. +# `config`: specifies the module configuration. +# `pathvars:` helps you re-wire where the module places files. module {{module_short_name}}: snakefile: "../../workflow/Snakefile" config: config["{{module_short_name}}"] - prefix: "results/integration_test/" + pathvars: + # Redirect specific user resources (inputs) + user_message=rules.create_external_input.output.text_file, + # Redirect specific module results (outputs) + combined_text="results/output/combined_text.md", + # Redirect intermediate files that are internal to the module + logs="resources/{{module_short_name}}/logs", + resources="resources/{{module_short_name}}/resources", + results="resources/{{module_short_name}}/results" + # rename all module rules with a prefix, to avoid naming conflicts. use rule * from {{module_short_name}} as {{module_short_name}}_* @@ -33,4 +43,4 @@ rule all: message: "A generic test case for your module." default_target: True input: - "results/integration_test/results/combined_text.md" + "results/output/combined_text.md" diff --git a/template/tests/clio_test.py.jinja b/template/tests/integration_test.py.jinja similarity index 78% rename from template/tests/clio_test.py.jinja rename to template/tests/integration_test.py.jinja index d810e92..009e87f 100644 --- a/template/tests/clio_test.py.jinja +++ b/template/tests/integration_test.py.jinja @@ -1,7 +1,7 @@ -"""Set of standard clio tests. +"""Set of standard Modelblocks tests. -DO NOT MANUALLY MODIFY THIS FILE! -It should be updated through our templating functions. +PLEASE ENSURE THIS SET OF MINIMAL TESTS WORKS BEFORE PUBLISHING YOUR MODULE. +Contents may be updated in future template updates. """ import subprocess @@ -25,15 +25,18 @@ def test_interface_file(module_path): @pytest.mark.parametrize( "file", [ - "CITATION.cff", "AUTHORS", + "CITATION.cff", "INTERFACE.yaml", "LICENSE", + "README.md", + "config/config.yaml", + "workflow/internal/config.schema.yaml", "tests/integration/Snakefile", ], ) def test_standard_file_existance(module_path, file): - """Check that a minimal set of files used for clio automatic docs are present.""" + """Check that a minimal set of files used for documentation are present.""" assert Path(module_path / file).exists() diff --git a/template/workflow/Snakefile b/template/workflow/Snakefile index 548c651..30e6c63 100644 --- a/template/workflow/Snakefile +++ b/template/workflow/Snakefile @@ -5,6 +5,16 @@ from snakemake.utils import min_version, validate min_version("8.10") +# !!!!! IMPORTANT !!!!! +# Define pathvars for all user resource files and result files +# This allows users to re-wire how the module is used in their workflow with ease. +pathvars: + # User resources + user_message="/user/user_message.md", + # Module results + combined_text="/combined_text.md" + + # Load the example configuration. This will be overridden by users. configfile: workflow.source_path("../config/config.yaml") diff --git a/template/workflow/internal/settings.yaml b/template/workflow/internal/settings.yaml index cbb8ff5..d92361a 100644 --- a/template/workflow/internal/settings.yaml +++ b/template/workflow/internal/settings.yaml @@ -2,4 +2,4 @@ resources: automatic: # Links for automatically downloaded files - dummy_readme: "https://raw.githubusercontent.com/calliope-project/clio/refs/heads/main/README.md" + dummy_readme: "https://raw.githubusercontent.com/modelblocks-org/docs/refs/heads/main/README.md" diff --git a/template/workflow/rules/automatic.smk b/template/workflow/rules/automatic.smk index 0ebb236..bdd8982 100644 --- a/template/workflow/rules/automatic.smk +++ b/template/workflow/rules/automatic.smk @@ -3,13 +3,13 @@ rule dummy_download: message: - "Download the clio README file." + "Download the Modelblocks README file." params: url=internal["resources"]["automatic"]["dummy_readme"], output: - readme="resources/automatic/dummy_readme.md", + readme="/automatic/dummy_readme.md", log: - "logs/dummy_download.log", + "/dummy_download.log", conda: "../envs/shell.yaml" shell: diff --git a/template/workflow/rules/dummy.smk b/template/workflow/rules/dummy.smk index af09f22..a0ab9a3 100644 --- a/template/workflow/rules/dummy.smk +++ b/template/workflow/rules/dummy.smk @@ -4,12 +4,12 @@ rule dummy_add_text: params: config_text=config["dummy_text"], input: - user_file="resources/user/user_message.md", - readme="resources/automatic/dummy_readme.md", + user_message="", + readme="/automatic/dummy_readme.md", output: - combined="results/combined_text.md", + combined_text="", log: - "logs/dummy_add_text.log", + "/dummy_add_text.log", conda: "../envs/shell.yaml" script: diff --git a/template/workflow/scripts/dummy_script.py b/template/workflow/scripts/dummy_script.py index 2ae0049..4ceba9b 100644 --- a/template/workflow/scripts/dummy_script.py +++ b/template/workflow/scripts/dummy_script.py @@ -13,8 +13,8 @@ config = snakemake.params.config_text readme = Path(snakemake.input.readme).read_text() -user = Path(snakemake.input.user_file).read_text() +user = Path(snakemake.input.user_message).read_text() output_text = "\n\n".join([readme, user, config]) -Path(snakemake.output.combined).write_text(output_text) +Path(snakemake.output.combined_text).write_text(output_text) diff --git a/template/{{_copier_conf.answers_file}}.jinja b/template/{{_copier_conf.answers_file}}.jinja index dea82c4..99e2857 100644 --- a/template/{{_copier_conf.answers_file}}.jinja +++ b/template/{{_copier_conf.answers_file}}.jinja @@ -1,3 +1,3 @@ # Changes here will be overwritten by Copier -# DO NOT MANUALLY MODIFY THIS FILE +# !!!!! DO NOT MANUALLY MODIFY THIS FILE !!!!! {{ _copier_answers|to_nice_yaml -}} diff --git a/tests/utils/simple_answers.yaml b/tests/utils/simple_answers.yaml index 924d60f..aab13c1 100644 --- a/tests/utils/simple_answers.yaml +++ b/tests/utils/simple_answers.yaml @@ -4,5 +4,5 @@ module_description: A simple module to test the template author_given_name: Tester author_family_name: McTest author_email: tester.mctest@example.com -github_org: calliope-project +github_org: modelblocks-org license: