diff --git a/.gitignore b/.gitignore
index 0292b483070c732cdf5d978d50f2c5fb7d22c6be..eb85b01c9a9584092ccfbc64d33b461b79825c19 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,21 +7,21 @@
 *.pyc
 *.egg-info
 .nfs*
-.coverage
+.coverage*
 *.DS_Store
 .envrc
 coverage.xml
 test_results.xml
 junit-coverage.xml
-environment.yaml
 html/
 build/
 doc/api/
 dist/
 cache/
-venv/
+.venv/
 _citools/
 _work/
 .mypy_cache/
 .pytest_cache/
+changelog.md
 .pixi/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 33ba40b6553c65c38298a4cdb2d22005bc7ea7fa..e83d3a931f91d5124d7c9f123161c437607cb039 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,4 +4,4 @@
 
 include:
   - project: software/dev-profile
-    file: /gitlab/python.yml
+    file: /gitlab/pixi.yml
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3cc867fac796880e62b14b1e365ee43ed542920e..d760e8d333cd079bbb42e8c1a59111d8b4c9576f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -24,13 +24,18 @@ repos:
       - id: check-added-large-files
       - id: check-toml
       - id: check-yaml
-        exclude: conda/meta.yaml
+      - id: check-json
       - id: debug-statements
       - id: check-case-conflict
       - id: trailing-whitespace
       - id: end-of-file-fixer
       - id: debug-statements
   - repo: https://github.com/fsfe/reuse-tool
-    rev: v3.0.1
+    rev: v3.0.2
     hooks:
       - id: reuse
+        exclude: |
+          (?x)(
+              ^.pixi/|
+              ^.pixi.lock|
+              )
diff --git a/conda/meta.yaml b/conda/meta.yaml
deleted file mode 100644
index 7921d8cb4122385137d9a46ac632b8ccb2db1263..0000000000000000000000000000000000000000
--- a/conda/meta.yaml
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-{% set data = load_file_data(RECIPE_DIR + '/../pyproject.toml') %}
-
-package:
-  name: {{ data['project']['name'] }}
-  version: {{ environ.get('PACKAGE_VERSION', environ.get('GIT_DESCRIBE_TAG')) }}
-
-source:
-  path: ..
-
-build:
-  noarch: python
-  number: {{ environ.get('NEXT_BUILD_NUMBER', 0) }}
-  run_exports:
-    - {{ pin_subpackage(data['project']['name']) }}
-  script:
-    - "{{ PYTHON }} -m pip install {{ SRC_DIR }} -vv"
-
-requirements:
-  host:
-    - python >=3.10
-    - pip
-    - hatchling
-    - versioningit
-  run:
-    - python >=3.10
-    - pip
-    # conda/mamba ecosystem dependencies
-    - conda
-    - conda-build
-    - mamba
-    - boa
-    # things we depend on
-    - click >=8
-    - tomli
-    - tomlkit
-    - cookiecutter
-    - packaging
-    - pyyaml
-    - gitpython
-    - python-gitlab
-    - python-dateutil
-    - pytz
-    - xdg
-
-test:
-  source_files:
-    - tests
-  imports:
-    - {{ data['project']['name'].replace('-','_') }}
-  commands:
-    - pytest -sv tests
-  requires:
-    - pytest {{ pytest }}
-    - git
-
-about:
-  home: {{ data['project']['urls']['homepage'] }}
-  summary: {{ data['project']['description'] }}
-  license: {{ data['project']['license'] }}
-  license_family: BSD
diff --git a/doc/api.rst b/doc/api.rst
index dd98683e92d124c94d09cde2f29f0f80ed78a5e5..003abb183c022c27e1d03c69964f02c3ce27ea86 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -17,11 +17,8 @@ This section includes information for using the Python API of
 
    idiap_devtools
    idiap_devtools.click
-   idiap_devtools.conda
    idiap_devtools.logging
-   idiap_devtools.profile
    idiap_devtools.python
-   idiap_devtools.update_pins
    idiap_devtools.utils
 
 .. autosummary::
diff --git a/doc/develop.rst b/doc/develop.rst
deleted file mode 100644
index 845e773a2d4ac0914e092a1fd87b676d82d45802..0000000000000000000000000000000000000000
--- a/doc/develop.rst
+++ /dev/null
@@ -1,203 +0,0 @@
-.. Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-..
-.. SPDX-License-Identifier: BSD-3-Clause
-
-.. _idiap-devtools.develop:
-
-===============================
- Local development of packages
-===============================
-
-We recommend you create isolated virtual environments using mamba_ (conda_) to
-develop existing or new projects, then pip_ install development requirements
-over that mamba_ environment.  We offer guidance of two variants for installing
-dependencies: one exclusively using Python packages, and a second which
-installs most dependencies as conda_ packages (being able to better handle
-non-Python dependencies such as Nvidia CUDA-compiled packages).  In both cases,
-the top-level package (or packages) is (are) always installed on the
-development environment through pip_ (with `the --editable option <pip-e_>`_).
-
-.. note::
-
-   Pip_ may be configured with command-line options as shown below, but equally
-   through environment variables, or `configuration files <pip-config_>`_.  We
-   leave to the developer's discretion the decision on how to best manage their
-   own use of pip_.
-
-
-.. note::
-
-   You may develop software against different development (c.f.
-   :ref:`idiap-devtools.install.setup.profile`).  In the context of these
-   instructions, we assume your development profile is located at
-   ``../profile``.
-
-.. tab:: pip
-
-   In this variant, the latest (beta) versions of internally developed
-   dependencies are fetched from our local package registry if applicable.
-   Furthermore, external dependencies are fetched from PyPI and respect
-   versions used on the continuous integration (CI) server.  It is useful to
-   reproduce bugs reported on the CI, during test builds:
-
-   .. code:: sh
-
-      $ git clone <PACKAGE-URL>  # e.g. git clone git@gitlab.idiap.ch/software/clapp
-      $ cd <PACKAGE>  # e.g. cd clapp
-      $ mamba create -n dev python=3.10 pip
-      $ conda activate dev
-      (dev) $ pip install --pre --index-url https://token:<YOUR-GITLAB-TOKEN>@gitlab.idiap.ch/api/v4/groups/software/-/packages/pypi/simple --extra-index-url https://pypi.org/simple --constraint ../profile/python/pip-constraints.txt --editable '.[qa,doc,test]'
-      (dev) $ # `dev` environment is now ready, just develop
-
-   .. note::
-
-      If you need to install *private* packages developed through GitLab, you
-      must `generate a personal token <gitlab-token_>`_ with at least access to
-      the package registry (currently implemented through the ``read_api``
-      privilege).
-
-      Otherwise, you may suppress ``token:<YOUR-GITLAB-TOKEN>@`` from the
-      index-url option above.
-
-   .. tip::
-
-      Optionally, you may create a standard Python virtual environment (instead of
-      a conda_ virtual environment) with either venv_ or virtualenv_, and then
-      apply the same instructions above to locally install dependencies and the
-      package itself.
-
-      The Python version in this case will match that used to create the virtual
-      environment.
-
-
-.. tab:: conda
-
-   In this variant, the latest (beta) versions of internally developed
-   dependencies are fetched from our local conda (beta) package registry, if
-   applicable. Furthermore, external dependencies are fetched from conda-forge_
-   and respect versions used on the continuous integration (CI) server.  It is
-   useful to reproduce bugs reported on the CI, during conda-package test
-   builds, or to install further non-Python dependencies required for package
-   development (e.g. Nvidia CUDA-enabled packages):
-
-   .. code:: sh
-
-      $ git clone <PACKAGE>
-      $ cd <PACKAGE>
-      $ mamba run -n idiap-devtools --live-stream devtool env -vv .
-      $ mamba env create -n dev -f environment.yaml
-      $ conda activate dev
-      (dev) $ pip install --no-build-isolation --no-dependencies --editable .
-      (dev) $ # `dev` environment is now ready, just develop
-
-   .. note::
-
-       The application ``devtool env`` uses the ``conda`` API to parse your
-       package's recipe (typically at ``conda/meta.yaml``) and
-       ``pyproject.toml``, and then to search dependencies (including those for
-       quality-assurance, documentation and tests, which may be not listed on
-       ``conda/meta.yaml``).  The installation respects CI constraints
-       established on your chosen profile.
-
-
-After that step, your package will be installed and ready for use inside the
-``dev`` environment.  You must activate the virtual environment everytime you
-want to further develop the package, or simply deactivate it when you branch
-off to another activity.
-
-With the development environment active, you can optionally test the package
-installation by either building its Sphinx documentation, doctests, running its
-test suite, or the quality assurance (pre-commit) checks:
-
-.. code:: sh
-
-   $ conda activate dev
-   (dev) $ pre-commit run --all-files  # quality assurance
-   (dev) $ pytest -sv tests/ # test units
-   (dev) $ sphinx-build doc sphinx  # documentation
-   (dev) $ sphinx-build doctest doc sphinx  # doctests
-
-
-Developing multiple existing packages simultaneously
-----------------------------------------------------
-
-It may happen that you may want to develop several packages against each other
-for your project.  This is the case if you are changing a high-level package
-``package-a``, that in turn depends on functionality on ``package-b`` you may
-also need to adapt.  While you change ``package-b``, you want to verify how
-these changes work on ``package-a``.  The procedure to accomodate this is
-similar to the above, except you will git-clone and pip-install more packages:
-
-
-.. tab:: pip
-
-   In this variant, the latest (beta) versions of internally developed
-   dependencies are fetched from our local package registry if applicable.
-   Furthermore, external dependencies are fetched from PyPI and respect
-   versions used on the continuous integration (CI) server.
-
-   To setup your environment, you must install packages in reverse dependence
-   order, with the top-level package (``package-a`` in this example), being
-   installed **by last**.
-
-   .. code:: sh
-
-      $ git clone <PACKAGE-A>
-      $ cd <PACKAGE-A>
-      $ git clone <PACKAGE-B> src/<PACKAGE-B>
-      $ mamba create -n dev python=3.10 pip
-      # get the constraints for the "target" development environment.
-      # this is just an example:
-      $ curl -O constraints.txt https://gitlab.idiap.ch/software/dev-profile/-/raw/main/python/pip-constraints.txt
-      $ conda activate dev
-      (dev) $ for pkg in "src/package-b" "."; do pip install --pre --index-url https://token:<YOUR-GITLAB-TOKEN>@gitlab.idiap.ch/api/v4/groups/software/-/packages/pypi/simple --extra-index-url https://pypi.org/simple --constraint constraints.txt --editable "${pkg}[qa,doc,test]"; done
-      (dev) $ # `dev` environment is now ready, just develop
-
-
-.. tab:: conda
-
-   In this variant, the latest (beta) versions of internally developed
-   dependencies are fetched from our local conda (beta) package registry, if
-   applicable. Furthermore, external dependencies are fetched from conda-forge_
-   and respect versions used on the continuous integration (CI) server.  It is
-   useful to reproduce bugs reported on the CI, during conda-package test
-   builds:
-
-   .. code:: sh
-
-      $ git clone <PACKAGE-A>
-      $ cd <PACKAGE-A>
-      $ git clone <PACKAGE-B> src/<PACKAGE-B>
-      $ mamba run -n idiap-devtools --live-stream devtool env -vv src/package-b .
-      $ mamba env create -n dev -f environment.yaml
-      $ conda activate dev
-      (dev) $ for pkg in "src/package-b" "."; do pip install --no-build-isolation --no-dependencies --editable "${pkg}"
-      (dev) $ # `dev` environment is now ready, just develop
-
-
-Installing all constrained packages
------------------------------------
-
-If you plan to develop many packages together, it may be faster to first
-pre-install all (constrained) packages, to then pip-install all the individual
-packages. Because the mamba_ (or conda_) ecosystem is a superset of Python
-packages, we only provide this option:
-
-
-.. code:: sh
-
-   $ mamba run -n idiap-devtools --live-stream devtool fullenv -vv
-   $ mamba env create -n dev -f environment.yaml
-   $ conda activate dev
-   (dev) $ for pkg in "src/*"; do pip install --no-build-isolation --no-dependencies --editable "${pkg}"
-
-
-Creating new packages
----------------------
-
-To create a new package, use our `cookiecutter template
-<cookiecutter-template_>`_ and associated instructions.  Do **not** copy
-another package source code, or no Xmas gifts for you...
-
-
-.. include:: links.rst
diff --git a/doc/index.rst b/doc/index.rst
index 2d241b45e87f541d0751646f5ecdd2be22b80702..0ffc07f4a8e7495c103352c94e07e5c0b794ebf4 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -11,7 +11,8 @@
 .. todolist::
 
 This package contains a set of small utilities to support development of Python
-packages through GitLab.  It is targetted for package development at Idiap.
+packages through GitLab.  It is targetted for package development at Idiap,
+however some of the commands provided can benefit a larger audience.
 
 
 Documentation
@@ -21,7 +22,6 @@ Documentation
    :maxdepth: 2
 
    install
-   develop
    release
    cli
    api
diff --git a/doc/install.rst b/doc/install.rst
index 3c9122c6a77d2956d3dde070cd9e9b6378f6a7ae..e6317dfc77dd72c1e58f4c793f8f3a1fd6955f44 100644
--- a/doc/install.rst
+++ b/doc/install.rst
@@ -8,42 +8,45 @@
  Installation
 ==============
 
-First install mamba_ or conda (preferably via mambaforge_, as it is already
-setup to use conda-forge_ as its main distribution channel).  Then, create a
-new environment, containing this package:
+Installation may follow one of two paths: deployment or development. Choose the
+relevant tab for details on each of those installation paths.
 
 
-.. tab:: mamba/conda (RECOMMENDED)
+.. tab:: Deployment (pixi)
 
-   .. code-block:: sh
+   Use pixi_ to add this package as a dependence:
 
-      # installs the latest release on conda-forge:
-      mamba create -n idiap-devtools idiap-devtools
+   .. code:: sh
 
-      # OR, installs the latest development code:
-      mamba create -n idiap-devtools -c https://www.idiap.ch/software/biosignal/conda/label/beta idiap-devtools
+      pixi add idiap-devtools
 
 
-.. tab:: pip
+.. tab:: Development
 
-   .. warning::
+   Checkout the repository, and then use pixi_ to setup a full development
+   environment:
 
-      While this is possible for testing purposes, it is **not recommended**,
-      as this package depends on conda/mamba for some of its functionality.  If
-      you decide to do so, create a new conda/mamba environment, and
-      pip-install this package on it.
+   .. code:: sh
 
-   .. code-block:: sh
+      git clone git@gitlab.idiap.ch:software/idiap-devtools
+      pixi install --frozen
 
-      # creates the new environment
-      mamba create -n idiap-devtools python=3 pip conda mamba conda-build boa
-      conda activate idiap-devtools
+   .. tip::
 
-      # installs the latest release on PyPI:
-      pip install idiap-devtools
+      The ``--frozen`` flag will ensure that the latest lock-file available
+      with sources is used.  If you'd like to update the lock-file to the
+      latest set of compatible dependencies, remove that option.
 
-      # OR, installs the latest development code:
-      pip install git+https://gitlab.idiap.ch/software/idiap-devtools
+      If you use `direnv to setup your pixi environment
+      <https://pixi.sh/latest/features/environment/#using-pixi-with-direnv>`_
+      when you enter the directory containing this package, you can use a
+      ``.envrc`` file similar to this:
+
+      .. code:: sh
+
+         watch_file pixi.lock
+         export PIXI_FROZEN="true"
+         eval "$(pixi shell-hook)"
 
 
 .. _idiap-devtools.install.running:
@@ -53,35 +56,11 @@ Running
 
 This package contains a single command-line executable named ``devtool``, which
 in turn contains subcommands with various actions.  To run the main
-command-line tool, you must first activate the environment where it is
-installed in, and then call it on the command-line:
-
-.. code-block:: sh
-
-   conda activate idiap-devtools
-   devtool --help
-   conda deactivate  # to go back to the previous state
-
-
-It is possible to use the command ``mamba run`` (or ``conda run``, if you
-installed miniforge) to, instead, automatically prefix the execution of
-``devtool`` with an environment activation, and follow it with a deactivation.
-This allows to compact the above form into a "one-liner":
+command-line tool, use ``pixi run``:
 
 .. code-block:: sh
 
-   mamba run -n idiap-devtools --live-stream devtool --help
-
-
-.. warning::
-
-   The ``devtool`` application requires that ``mamba``/``conda`` are available
-   on the environment it executes.  When using ``mamba``/``conda`` to create
-   new environments, ensure you are using the mamba executable **from the
-   ``base`` environment**.  Creating new environments as sub-environments of
-   the ``idiap-devtools`` environment may have surprising effects.  A way to do
-   this is to first activate the ``base`` environment, and then create the new
-   environment.
+   pixi run devtool --help
 
 
 .. _idiap-devtools.install.setup:
@@ -89,52 +68,6 @@ This allows to compact the above form into a "one-liner":
 Setup
 -----
 
-.. _idiap-devtools.install.setup.profile:
-
-Setting up Development Profiles
-===============================
-
-Development profiles contain a set of constants that are useful for developing,
-and interacting with projects from a particular GitLab group, or groups.  They
-may contain webserver addresses, and both Python and conda installation
-constraints (package pinnings).  Development profiles are GitLab repositories,
-organized in a specific way, and potentially used by various development,
-continuous integration, and administrative tools.  Some examples:
-
-* Software's group: https://gitlab.idiap.ch/software/dev-profile
-* Biosignal's group: https://gitlab.idiap.ch/biosignal/software/dev-profile
-* Bob's group: https://gitlab.idiap.ch/bob/dev-profile
-
-While developing using the command-line utility ``devtool``, one or more
-commands may require you pass the base directory of a development profile.
-
-You may set a number of development shortcuts by configuring the section
-``[profiles]`` on the file ``~/.config/idiap-devtools.toml``, like so:
-
-.. code-block:: toml
-
-   [profiles]
-   default = "software"
-   software = "~/dev-profiles/software"
-   biosignal = "~/dev-profiles/biosignal"
-   bob = "~/dev-profiles/bob"
-   custom = "~/dev-profiles/custom-profile"
-
-.. note::
-
-   The location of the configuration file respects ``${XDG_CONFIG_HOME}``,
-   which defaults to ``~/.config`` in typical UNIX-style operating systems.
-
-The special ``default`` entry refers to one of the other entries in this
-section, and determines the default profile to use, if none is passed on the
-command-line.  All other entries match name to a local directory where the
-profile is available.
-
-Development profiles are typically shared via GitLab as independent
-repositories.  In this case, **it is your job to clone and ensure the profile
-is kept up-to-date with your group's development requirements.**
-
-
 .. _idiap-devtools.install.setup.gitlab:
 
 Automated GitLab interaction
diff --git a/doc/links.rst b/doc/links.rst
index 09bee18e897fc6978082a039b786c68a39c78d36..f9720d365b7dd95b2e29acf420b8bcb93609f48c 100644
--- a/doc/links.rst
+++ b/doc/links.rst
@@ -5,19 +5,14 @@
 .. place re-used URLs here, then include this file
 .. on your other RST sources.
 
-.. _conda: https://conda.io
 .. _idiap: http://www.idiap.ch
 .. _python: http://www.python.org
-.. _mamba: https://mamba.readthedocs.io/en/latest/index.html
-.. _mambaforge: https://github.com/conda-forge/miniforge#mambaforge
-.. _conda-forge: https://conda-forge.org
+.. _pip: https://pip.pypa.io/en/stable/
+.. _uv: https://github.com/astral-sh/uv
+.. _rye: https://github.com/astral-sh/rye
+.. _poetry: https://python-poetry.org
+.. _pixi: https://pixi.sh
 .. _venv: https://docs.python.org/3/library/venv.html
 .. _virtualenv: https://virtualenv.pypa.io/en/latest/
 .. _gitlab-token: https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
-.. _cookiecutter: https://cookiecutter.readthedocs.io
-.. _cookiecutter-template: https://gitlab.idiap.ch/software/cookiecutter-idiap-pypackage
 .. _semantic version numbers: https://semver.org
-
-.. _pip: https://pip.pypa.io/en/stable/
-.. _pip-e: https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-e
-.. _pip-config: https://pip.pypa.io/en/stable/topics/configuration/
diff --git a/doc/release.rst b/doc/release.rst
index 595d0845e41ea6ff81929004ee1c7af4a76e35e7..6fa6a47f90f0ab4258f9e63e649d384d72d78eb9 100644
--- a/doc/release.rst
+++ b/doc/release.rst
@@ -29,9 +29,7 @@ Use the ``--help`` flag in each command to learn more about each phase.
 
    Pipelines for stable and non-stable (a.k.a. beta) packages may differ w.r.t.
    deployment locations for various artefacts (e.g. packages and
-   documentation), but also w.r.t. requirements for the version of the profile
-   to be used (e.g. tagged versions non-tagged).  You should check the target
-   development profile CI instructions for details.
+   documentation).
 
 
 Create the Changelogs
diff --git a/pixi.lock b/pixi.lock
index c80fba294aef8001dbd587d2d7c4cafe2b9d42ba..a07d8b6fb4b5933495143bc84737c9ecc7d2dd6e 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -1,27 +1,224 @@
-version: 4
+version: 5
 environments:
+  build-ci:
+    channels:
+    - url: https://conda.anaconda.org/conda-forge/
+    packages:
+      linux-64:
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py312hf06ca03_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/cmarkgfm-0.8.0-py312h98912ed_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.7-py312hbcc2302_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.10.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.24.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.1.0-hd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.2.0-pyha804496_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h55db66e_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.2-hf974151_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-hc0a3c3a_7.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.2.13-hd590300_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/nh3-0.2.17-py312h4b3b743_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-hd590300_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.43-hcad00b1_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.10.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-4_cp312.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-42.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.4.10-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/twine-5.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.1.42-h0ea3d13_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/versioningit-3.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py312hd58854c_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda
+      osx-arm64:
+      - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312h9f69965_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.16.0-py312h8e38eb3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmarkgfm-0.8.0-py312h02f2b3b_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.10.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.24.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.1.0-hd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.2.0-pyh534df25_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-17.0.6-h5f092b4_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_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/libsqlite-3.45.3-h091b4b1_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-hb89a1cb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nh3-0.2.17-py312h5280bc4_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-h0d3ecfb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.10.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.3-h4a7b5fc_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-4_cp312.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-42.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.4.10-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/twine-5.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.1.42-hc069d6b_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/versioningit-3.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.22.0-py312h7975427_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda
   default:
     channels:
     - url: https://conda.anaconda.org/conda-forge/
+    indexes:
+    - https://pypi.org/simple
     packages:
       linux-64:
       - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/auto-intersphinx-1.0.3-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/boa-0.17.0-pyhd8ed1ab_2.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/boolean.py-4.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.28.1-hd590300_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py312hf06ca03_0.conda
@@ -29,129 +226,110 @@ environments:
       - conda: https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py312h7900ff3_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/cmarkgfm-0.8.0-py312h98912ed_3.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-24.3.0-py312h7900ff3_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-build-24.3.0-py312h7900ff3_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-index-0.4.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/cookiecutter-2.6.0-pyhca7485f_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.4.4-py312h98912ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.5.1-py312h9a8786e_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.7-py312hbcc2302_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py312h7900ff3_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/fancycompleter-0.9.1-py312h7900ff3_1007.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.3-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.1.29-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.5.6-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.10.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.24.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.35-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.36-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.1.0-hd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.24-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py312h7900ff3_3.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.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.2-h659d440_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.7.1-hca28451_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.2.0-pyha804496_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h55db66e_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.2-hf974151_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/liblief-0.14.1-hac33072_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py312hd9e9ff6_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_2.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.2-h2797004_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-hc0a3c3a_7.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.6-h232c23b_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.6-h232c23b_2.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/license-expression-30.1.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-5.1.0-py312h37b5203_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/mamba-1.5.8-py312h9460a1c_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-5.2.2-py312hb90d8a5_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py312h98912ed_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py312h7900ff3_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4.20240210-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/nh3-0.2.17-py312h4b3b743_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-hd590300_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/patch-2.7.6-h7f98852_1002.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.43-hcad00b1_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pdbpp-0.10.3-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.10.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.0-pyha770c72_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py312h98912ed_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/py-lief-0.14.1-py312h7070661_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py312h98912ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.1-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/pyrepl-0.9.0-py312h98912ed_9.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.2.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.2-hab00c5b_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/python-debian-0.1.36-py_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/python-libarchive-c-5.1-py312h7900ff3_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-4_cp312.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py312h98912ed_1.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.4.post0-hd590300_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.4.post0-h59595ed_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-42.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/reuse-3.0.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/ripgrep-14.1.0-he8a937b_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.18.0-py312h4b3b743_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h98912ed_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h98912ed_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.3.5-py312h9118e91_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.4.4-py312h5715c7c_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-2.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-2.1.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-click-5.1.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda
@@ -162,174 +340,139 @@ environments:
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.7-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_1.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240316-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.4.10-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/twine-5.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h8572e83_4.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/watchgod-0.8.2-pyhd8ed1ab_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.1.42-h0ea3d13_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/versioningit-3.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/wmctrl-0.5-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/xdg-6.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py312hd58854c_0.conda
       - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda
       - pypi: .
       osx-arm64:
       - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/auto-intersphinx-1.0.3-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/boa-0.17.0-pyhd8ed1ab_2.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/boolean.py-4.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312h9f69965_1.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.28.1-h93a5062_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-986-h4c9edd9_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-986-hd11630f_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.16.0-py312h8e38eb3_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chardet-5.2.0-py312h81bd7bf_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmarkgfm-0.8.0-py312h02f2b3b_3.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/conda-24.3.0-py312h81bd7bf_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/conda-build-24.3.0-py312h81bd7bf_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-index-0.4.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/cookiecutter-2.6.0-pyhca7485f_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.4.4-py312he37b823_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.5.1-py312h7e5086c_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/docutils-0.20.1-py312h81bd7bf_3.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fancycompleter-0.9.1-py312h81bd7bf_1007.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.3-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-10.2.1-h2ffa867_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.1.29-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.5.6-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.10.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.24.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.35-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.36-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.1.0-hd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.24-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jsonpointer-2.4-py312h81bd7bf_3.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-711-h4c6efb1_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-711-h5e7191b_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.2-hcacb583_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.7.1-h2d989ff_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-16.0.6-h4653b0c_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.2.0-pyh534df25_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-17.0.6-h5f092b4_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_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.17-h0d3ecfb_2.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblief-0.14.1-h3f3aa29_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm18-18.1.2-h30cc82d_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmamba-1.5.8-h90c426b_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmambapy-1.5.8-py312h344e357_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsolv-0.7.28-h1059232_2.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.2-h091b4b1_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.6-h0d0cfa8_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.3-h091b4b1_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.6-h0d0cfa8_2.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.39-h223e5b9_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/license-expression-30.1.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-5.1.0-py312h9bf3b9e_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h642e427_1000.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mamba-1.5.8-py312h14bc7db_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-5.2.2-py312h0e5ab22_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py312he37b823_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/menuinst-2.0.2-py312h81bd7bf_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4.20240210-h078ce10_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-hb89a1cb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nh3-0.2.17-py312h5280bc4_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-h0d3ecfb_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/patch-2.7.6-h27ca646_1002.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pdbpp-0.10.3-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.10.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.0-pyha770c72_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.8-py312he37b823_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/py-lief-0.14.1-py312h2721eaf_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pycosat-0.6.6-py312h02f2b3b_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.1-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyrepl-0.9.0-py312he37b823_9.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.2.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.2-hdf0ec26_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.3-h4a7b5fc_0_cpython.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/python-debian-0.1.36-py_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-libarchive-c-5.1-py312h81bd7bf_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-4_cp312.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.1-py312h02f2b3b_1.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-14.2.4.post0-h93a5062_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-cpp-14.2.4.post0-h965bd2d_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-42.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/reuse-3.0.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ripgrep-14.1.0-h5ef7bb8_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.18.0-py312h77200ec_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.6-py312he37b823_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312he37b823_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.3.5-py312h1ae9fbf_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h44b9a77_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.4.4-py312h3402d49_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-2.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-2.1.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-click-5.1.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda
@@ -340,268 +483,460 @@ environments:
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.7-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1100.0.11-he4954df_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_1.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240316-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.4.10-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/twine-5.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h389731b_4.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.1-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/watchgod-0.8.2-pyhd8ed1ab_0.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.1.42-hc069d6b_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/versioningit-3.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/wmctrl-0.5-pyhd8ed1ab_0.conda
-      - conda: https://conda.anaconda.org/conda-forge/noarch/xdg-6.0.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2
-      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h13dd4ca_0.conda
       - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.22.0-py312h7975427_0.conda
       - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda
       - pypi: .
-packages:
-- kind: conda
-  name: _libgcc_mutex
-  version: '0.1'
-  build: conda_forge
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
-  sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
-  md5: d7c89558ba9fa0495403155b64376d81
-  license: None
-  size: 2562
-  timestamp: 1578324546067
-- kind: conda
-  name: _openmp_mutex
-  version: '4.5'
-  build: 2_gnu
-  build_number: 16
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
-  sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
-  md5: 73aaf86a425cc6e73fcf236a5a46396d
-  depends:
-  - _libgcc_mutex 0.1 conda_forge
-  - libgomp >=7.5.0
-  constrains:
-  - openmp_impl 9999
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 23621
-  timestamp: 1650670423406
-- kind: conda
-  name: alabaster
-  version: 0.7.16
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda
-  sha256: fd39ad2fabec1569bbb0dfdae34ab6ce7de6ec09dcec8638f83dad0373594069
-  md5: def531a3ac77b7fb8c21d17bb5d0badb
-  depends:
-  - python >=3.9
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/alabaster
-  size: 18365
-  timestamp: 1704848898483
-- kind: conda
-  name: anyio
-  version: 3.7.1
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda
-  sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4
-  md5: 7b517e7a6f0790337906c055aa97ca49
-  depends:
-  - exceptiongroup
-  - idna >=2.8
-  - python >=3.7
-  - sniffio >=1.1
-  - typing_extensions
-  constrains:
-  - trio >=0.16,<0.22
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/anyio
-  size: 96707
-  timestamp: 1688651250785
-- kind: conda
-  name: archspec
-  version: 0.2.3
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda
-  sha256: cef4062ea91f07a961a808801d6b34a163632150037f4bd28232310ff0301cd7
-  md5: 192278292e20704f663b9c766909d67b
-  depends:
-  - python >=3.6
-  license: MIT OR Apache-2.0
-  purls:
-  - pkg:pypi/archspec
-  size: 48780
-  timestamp: 1708969700251
-- kind: conda
-  name: arrow
-  version: 1.3.0
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda
-  sha256: ff49825c7f9e29e09afa6284300810e7a8640d621740efb47c4541f4dc4969db
-  md5: b77d8c2313158e6e461ca0efb1c2c508
-  depends:
-  - python >=3.8
-  - python-dateutil >=2.7.0
-  - types-python-dateutil >=2.8.10
-  license: Apache-2.0
-  license_family: Apache
-  size: 100096
-  timestamp: 1696129131844
-- kind: conda
-  name: attrs
-  version: 23.2.0
-  build: pyh71513ae_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda
-  sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea
-  md5: 5e4c0743c70186509d1412e03c2d8dfa
-  depends:
-  - python >=3.7
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/attrs
-  size: 54582
-  timestamp: 1704011393776
-- kind: conda
-  name: auto-intersphinx
-  version: 1.0.3
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/auto-intersphinx-1.0.3-pyhd8ed1ab_0.conda
-  sha256: e4267429a056d1ffe73e482b4b61fbec6426108033ea080b76f4105b8c8fba90
-  md5: 82ae03558e448895c9853852e6a8c996
-  depends:
-  - lxml
-  - packaging
-  - python >=3.9
-  - requests
-  - sphinx
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/auto-intersphinx
-  size: 28581
-  timestamp: 1687786070078
-- kind: conda
-  name: babel
-  version: 2.14.0
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda
-  sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6
-  md5: 9669586875baeced8fc30c0826c3270e
-  depends:
-  - python >=3.7
-  - pytz
-  - setuptools
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/babel
-  size: 7609750
-  timestamp: 1702422720584
-- kind: conda
-  name: beautifulsoup4
-  version: 4.12.3
-  build: pyha770c72_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
-  sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317
-  md5: 332493000404d8411859539a5a630865
-  depends:
-  - python >=3.6
-  - soupsieve >=1.2
-  license: MIT
-  license_family: MIT
-  size: 118200
-  timestamp: 1705564819537
-- kind: conda
-  name: binaryornot
-  version: 0.4.4
-  build: py_1
-  build_number: 1
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2
-  sha256: 8f65c16a9f85285e1f704a26d4c5ced25f46544f5cc20dc8a4aebd7796f8011a
-  md5: a556fa60840fcb9dd739d186bfd252f7
+  qa-ci:
+    channels:
+    - url: https://conda.anaconda.org/conda-forge/
+    packages:
+      linux-64:
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/boolean.py-4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py312hf06ca03_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py312h7900ff3_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.36-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h55db66e_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-hc0a3c3a_7.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.2.13-hd590300_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/license-expression-30.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py312h98912ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-hd590300_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.1-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-debian-0.1.36-py_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-4_cp312.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py312h98912ed_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/reuse-3.0.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.4.4-py312h5715c7c_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h8572e83_4.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
+      osx-arm64:
+      - conda: https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/boolean.py-4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312h9f69965_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.16.0-py312h8e38eb3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/chardet-5.2.0-py312h81bd7bf_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.36-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-17.0.6-h5f092b4_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_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/libsqlite-3.45.3-h091b4b1_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/license-expression-30.1.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py312he37b823_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-hb89a1cb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-h0d3ecfb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.1-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.3-h4a7b5fc_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-debian-0.1.36-py_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-4_cp312.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.1-py312h02f2b3b_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/reuse-3.0.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.4.4-py312h3402d49_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h389731b_4.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2
+  test-ci-alternative:
+    channels:
+    - url: https://conda.anaconda.org/conda-forge/
+    indexes:
+    - https://pypi.org/simple
+    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/brotli-python-1.1.0-py311hb755f60_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.5.1-py311h331c9d8_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h55db66e_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-hc0a3c3a_7.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.2.13-hd590300_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-hd590300_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.2.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.9-hb806964_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
+      - pypi: .
+      osx-arm64:
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py311ha891d26_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.5.1-py311hd3f4193_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-17.0.6-h5f092b4_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_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/libsqlite-3.45.3-h091b4b1_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-hb89a1cb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-h0d3ecfb_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.2.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.9-h932a869_0_cpython.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/python-gitlab-4.4.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.11-4_cp311.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
+      - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
+      - pypi: .
+packages:
+- kind: conda
+  name: _libgcc_mutex
+  version: '0.1'
+  build: conda_forge
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
+  sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
+  md5: d7c89558ba9fa0495403155b64376d81
+  license: None
+  size: 2562
+  timestamp: 1578324546067
+- kind: conda
+  name: _openmp_mutex
+  version: '4.5'
+  build: 2_gnu
+  build_number: 16
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
+  sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
+  md5: 73aaf86a425cc6e73fcf236a5a46396d
   depends:
-  - chardet
-  - python
+  - _libgcc_mutex 0.1 conda_forge
+  - libgomp >=7.5.0
+  constrains:
+  - openmp_impl 9999
   license: BSD-3-Clause
   license_family: BSD
-  size: 378445
-  timestamp: 1531097907306
+  size: 23621
+  timestamp: 1650670423406
 - kind: conda
-  name: boa
-  version: 0.17.0
-  build: pyhd8ed1ab_2
-  build_number: 2
+  name: alabaster
+  version: 0.7.16
+  build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/boa-0.17.0-pyhd8ed1ab_2.conda
-  sha256: 2282008dc67c6fd0ae1c1f0b9c17887219513bcf91a594eb7474cb94c71744b4
-  md5: c9c96644490a45ca16c61428fede3cf2
+  url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda
+  sha256: fd39ad2fabec1569bbb0dfdae34ab6ce7de6ec09dcec8638f83dad0373594069
+  md5: def531a3ac77b7fb8c21d17bb5d0badb
+  depends:
+  - python >=3.9
+  license: BSD-3-Clause
+  license_family: BSD
+  purls:
+  - pkg:pypi/alabaster
+  size: 18365
+  timestamp: 1704848898483
+- kind: conda
+  name: anyio
+  version: 4.3.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
+  sha256: 86aca4a31c09f9b4dbdb332cd9a6a7dbab62ca734d3f832651c0ab59c6a7f52e
+  md5: ac95aa8ed65adfdde51132595c79aade
+  depends:
+  - exceptiongroup >=1.0.2
+  - idna >=2.8
+  - python >=3.8
+  - sniffio >=1.1
+  - typing_extensions >=4.1
+  constrains:
+  - trio >=0.23
+  - uvloop >=0.17
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/anyio
+  size: 102331
+  timestamp: 1708355504396
+- kind: conda
+  name: attrs
+  version: 23.2.0
+  build: pyh71513ae_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda
+  sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea
+  md5: 5e4c0743c70186509d1412e03c2d8dfa
   depends:
-  - beautifulsoup4
-  - boltons
-  - conda >=23.3
-  - conda-build >=3.25,<24.5
-  - jinja2
-  - joblib
-  - json5
-  - jsonschema
-  - libmambapy >=1.5,<1.6
-  - prompt_toolkit
   - python >=3.7
-  - rich
-  - ruamel.yaml >=0.15.0
-  - watchgod
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/attrs
+  size: 54582
+  timestamp: 1704011393776
+- kind: conda
+  name: auto-intersphinx
+  version: 1.0.3
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/auto-intersphinx-1.0.3-pyhd8ed1ab_0.conda
+  sha256: e4267429a056d1ffe73e482b4b61fbec6426108033ea080b76f4105b8c8fba90
+  md5: 82ae03558e448895c9853852e6a8c996
+  depends:
+  - lxml
+  - packaging
+  - python >=3.9
+  - requests
+  - sphinx
   license: BSD-3-Clause
   license_family: BSD
-  size: 67972
-  timestamp: 1711841904460
+  purls:
+  - pkg:pypi/auto-intersphinx
+  size: 28581
+  timestamp: 1687786070078
 - kind: conda
-  name: boltons
-  version: 24.0.0
+  name: babel
+  version: 2.14.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda
-  sha256: e44d07932306392372411ab1261670a552f96077f925af00c1559a18a73a1bdc
-  md5: 61de176bd62041f9cd5bd4fcd09eb0ff
+  url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda
+  sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6
+  md5: 9669586875baeced8fc30c0826c3270e
+  depends:
+  - python >=3.7
+  - pytz
+  - setuptools
+  license: BSD-3-Clause
+  license_family: BSD
+  purls:
+  - pkg:pypi/babel
+  size: 7609750
+  timestamp: 1702422720584
+- kind: conda
+  name: backports
+  version: '1.0'
+  build: pyhd8ed1ab_3
+  build_number: 3
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda
+  sha256: 711602276ae39276cb0faaca6fd0ac851fff0ca17151917569174841ef830bbd
+  md5: 54ca2e08b3220c148a1d8329c2678e02
   depends:
-  - python ==2.7.*|>=3.7
+  - python >=2.7
   license: BSD-3-Clause
   license_family: BSD
-  size: 297896
-  timestamp: 1711936529147
+  size: 5950
+  timestamp: 1669158729416
+- kind: conda
+  name: backports.tarfile
+  version: 1.0.0
+  build: pyhd8ed1ab_1
+  build_number: 1
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda
+  sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3
+  md5: c747b1d79f136013c3b7ebcba876afa6
+  depends:
+  - backports
+  - python >=3.8
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/backports-tarfile
+  size: 31951
+  timestamp: 1712700751335
+- kind: conda
+  name: beautifulsoup4
+  version: 4.12.3
+  build: pyha770c72_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
+  sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317
+  md5: 332493000404d8411859539a5a630865
+  depends:
+  - python >=3.6
+  - soupsieve >=1.2
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/beautifulsoup4
+  size: 118200
+  timestamp: 1705564819537
+- kind: conda
+  name: binaryornot
+  version: 0.4.4
+  build: py_1
+  build_number: 1
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2
+  sha256: 8f65c16a9f85285e1f704a26d4c5ced25f46544f5cc20dc8a4aebd7796f8011a
+  md5: a556fa60840fcb9dd739d186bfd252f7
+  depends:
+  - chardet
+  - python
+  license: BSD-3-Clause
+  license_family: BSD
+  size: 378445
+  timestamp: 1531097907306
 - kind: conda
   name: boolean.py
   version: '4.0'
@@ -619,6 +954,50 @@ packages:
   - pkg:pypi/boolean-py
   size: 28706
   timestamp: 1690384476510
+- kind: conda
+  name: brotli-python
+  version: 1.1.0
+  build: py311ha891d26_1
+  build_number: 1
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py311ha891d26_1.conda
+  sha256: 2d78c79ccf2c17236c52ef217a4c34b762eb7908a6903d94439f787aac1c8f4b
+  md5: 5e802b015e33447d1283d599d21f052b
+  depends:
+  - libcxx >=15.0.7
+  - python >=3.11,<3.12.0a0
+  - python >=3.11,<3.12.0a0 *_cpython
+  - python_abi 3.11.* *_cp311
+  constrains:
+  - libbrotlicommon 1.1.0 hb547adb_1
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/brotli
+  size: 343332
+  timestamp: 1695991223439
+- kind: conda
+  name: brotli-python
+  version: 1.1.0
+  build: py311hb755f60_1
+  build_number: 1
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda
+  sha256: 559093679e9fdb6061b7b80ca0f9a31fe6ffc213f1dae65bc5c82e2cd1a94107
+  md5: cce9e7c3f1c307f2a5fb08a2922d6164
+  depends:
+  - libgcc-ng >=12
+  - libstdcxx-ng >=12
+  - python >=3.11,<3.12.0a0
+  - python_abi 3.11.* *_cp311
+  constrains:
+  - libbrotlicommon 1.1.0 hd590300_1
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/brotli
+  size: 351340
+  timestamp: 1695990160360
 - kind: conda
   name: brotli-python
   version: 1.1.0
@@ -637,6 +1016,8 @@ packages:
   - libbrotlicommon 1.1.0 hd590300_1
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/brotli
   size: 350604
   timestamp: 1695990206327
 - kind: conda
@@ -657,6 +1038,8 @@ packages:
   - libbrotlicommon 1.1.0 hb547adb_1
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/brotli
   size: 343435
   timestamp: 1695990731924
 - kind: conda
@@ -687,32 +1070,6 @@ packages:
   license_family: BSD
   size: 254228
   timestamp: 1699279927352
-- kind: conda
-  name: c-ares
-  version: 1.28.1
-  build: h93a5062_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.28.1-h93a5062_0.conda
-  sha256: 2fc553d7a75e912efbdd6b82cd7916cc9cb2773e6cd873b77e02d631dd7be698
-  md5: 04f776a6139f7eafc2f38668570eb7db
-  license: MIT
-  license_family: MIT
-  size: 150488
-  timestamp: 1711819630164
-- kind: conda
-  name: c-ares
-  version: 1.28.1
-  build: hd590300_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.28.1-hd590300_0.conda
-  sha256: cb25063f3342149c7924b21544109696197a9d774f1407567477d4f3026bf38a
-  md5: dcde58ff9a1f30b0037a2315d1846d1f
-  depends:
-  - libgcc-ng >=12
-  license: MIT
-  license_family: MIT
-  size: 168875
-  timestamp: 1711819445938
 - kind: conda
   name: ca-certificates
   version: 2024.2.2
@@ -735,44 +1092,6 @@ packages:
   license: ISC
   size: 155725
   timestamp: 1706844034242
-- kind: conda
-  name: cctools
-  version: '986'
-  build: h4c9edd9_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-986-h4c9edd9_0.conda
-  sha256: bfbfc99da17828d007286f40af86b44315769cfbcc4beba62a8ae64264bd1193
-  md5: abcfabe468c14e506fceab2e85380b3b
-  depends:
-  - cctools_osx-arm64 986 hd11630f_0
-  - ld64 711 h4c6efb1_0
-  - libllvm18 >=18.1.1,<18.2.0a0
-  license: APSL-2.0
-  license_family: Other
-  size: 21460
-  timestamp: 1710484691219
-- kind: conda
-  name: cctools_osx-arm64
-  version: '986'
-  build: hd11630f_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-986-hd11630f_0.conda
-  sha256: 4152323bbb78e2730fea9004333c9c51fb82a9ddd935f005280bf621849ec53d
-  md5: cce200c91b2d291c85e66098fe0d31c2
-  depends:
-  - ld64_osx-arm64 >=711,<712.0a0
-  - libcxx
-  - libllvm18 >=18.1.1,<18.2.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - sigtool
-  constrains:
-  - cctools 986.*
-  - clang 18.1.*
-  - ld64 711.*
-  license: APSL-2.0
-  license_family: Other
-  size: 1123368
-  timestamp: 1710484635601
 - kind: conda
   name: certifi
   version: 2024.2.2
@@ -785,6 +1104,8 @@ packages:
   depends:
   - python >=3.7
   license: ISC
+  purls:
+  - pkg:pypi/certifi
   size: 160559
   timestamp: 1707022289175
 - kind: conda
@@ -803,6 +1124,8 @@ packages:
   - python_abi 3.12.* *_cp312
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/cffi
   size: 284245
   timestamp: 1696002181644
 - kind: conda
@@ -821,6 +1144,8 @@ packages:
   - python_abi 3.12.* *_cp312
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/cffi
   size: 294523
   timestamp: 1696001868949
 - kind: conda
@@ -886,327 +1211,138 @@ packages:
   url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
   sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9
   md5: 7f4a9e3fcff3f6356ae99244a014da6a
-  depends:
-  - python >=3.7
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/charset-normalizer
-  size: 46597
-  timestamp: 1698833765762
-- kind: conda
-  name: click
-  version: 8.1.7
-  build: unix_pyh707e725_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
-  sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec
-  md5: f3ad426304898027fc619827ff428eca
-  depends:
-  - __unix
-  - python >=3.8
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/click
-  size: 84437
-  timestamp: 1692311973840
-- kind: conda
-  name: colorama
-  version: 0.4.6
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
-  sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698
-  md5: 3faab06a954c2a04039983f2c4a50d99
-  depends:
-  - python >=3.7
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/colorama
-  size: 25170
-  timestamp: 1666700778190
-- kind: conda
-  name: conda
-  version: 24.3.0
-  build: py312h7900ff3_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/conda-24.3.0-py312h7900ff3_0.conda
-  sha256: 64eee1c0f97bed16908ab6c4f3cd6c0bebb67fda5bba580888e513a1ef22f3f9
-  md5: 3b7d3f731e02380fb68b654b037ae727
-  depends:
-  - archspec >=0.2.3
-  - boltons >=23.0.0
-  - charset-normalizer
-  - conda-libmamba-solver >=23.11.0
-  - conda-package-handling >=2.2.0
-  - distro >=1.5.0
-  - jsonpatch >=1.32
-  - menuinst >=2
-  - packaging >=23.0
-  - platformdirs >=3.10.0
-  - pluggy >=1.0.0
-  - pycosat >=0.6.3
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  - requests >=2.28.0,<3
-  - ruamel.yaml >=0.11.14,<0.19
-  - setuptools >=60.0.0
-  - tqdm >=4
-  - truststore >=0.8.0
-  - zstandard >=0.19.0
-  constrains:
-  - conda-build >=24.3
-  - conda-env >=2.6
-  - conda-content-trust >=0.1.1
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 1195527
-  timestamp: 1711445992988
-- kind: conda
-  name: conda
-  version: 24.3.0
-  build: py312h81bd7bf_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/conda-24.3.0-py312h81bd7bf_0.conda
-  sha256: d8fb7f84ea5d946c5acf50d9687a1d9f112116ef6a06c0bb645320fd4e7db6e7
-  md5: 537dbde4ec642c05ea421a89ae16366a
-  depends:
-  - archspec >=0.2.3
-  - boltons >=23.0.0
-  - charset-normalizer
-  - conda-libmamba-solver >=23.11.0
-  - conda-package-handling >=2.2.0
-  - distro >=1.5.0
-  - jsonpatch >=1.32
-  - menuinst >=2
-  - packaging >=23.0
-  - platformdirs >=3.10.0
-  - pluggy >=1.0.0
-  - pycosat >=0.6.3
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  - requests >=2.28.0,<3
-  - ruamel.yaml >=0.11.14,<0.19
-  - setuptools >=60.0.0
-  - tqdm >=4
-  - truststore >=0.8.0
-  - zstandard >=0.19.0
-  constrains:
-  - conda-content-trust >=0.1.1
-  - conda-build >=24.3
-  - conda-env >=2.6
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 1197572
-  timestamp: 1711446174975
-- kind: conda
-  name: conda-build
-  version: 24.3.0
-  build: py312h7900ff3_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/conda-build-24.3.0-py312h7900ff3_1.conda
-  sha256: fd1418aded3d3242d2f4e5f6ee11702658c69528443d66b4a00bbd093aeeff11
-  md5: bfc15ed17aaea7bf1150dba5787c16d6
-  depends:
-  - beautifulsoup4
-  - chardet
-  - conda >=23.5.0
-  - conda-index >=0.4.0
-  - conda-package-handling >=1.3
-  - filelock
-  - jinja2
-  - jsonschema >=4.19
-  - menuinst >=2
-  - packaging
-  - patch >=2.6
-  - patchelf
-  - pkginfo
-  - psutil
-  - py-lief
-  - python >=3.12,<3.13.0a0
-  - python-libarchive-c
-  - python_abi 3.12.* *_cp312
-  - pytz
-  - pyyaml
-  - requests
-  - ripgrep
-  - tqdm
-  constrains:
-  - conda-verify  >=3.1.0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 752571
-  timestamp: 1711608769290
-- kind: conda
-  name: conda-build
-  version: 24.3.0
-  build: py312h81bd7bf_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/conda-build-24.3.0-py312h81bd7bf_1.conda
-  sha256: dc86c2edbd0f55b40ae81d5350b7ba11685675587d3a3ecae9472b682e5fdbfe
-  md5: 75828728b3438c9c3826c2f98fbb361f
-  depends:
-  - beautifulsoup4
-  - cctools
-  - chardet
-  - conda >=23.5.0
-  - conda-index >=0.4.0
-  - conda-package-handling >=1.3
-  - filelock
-  - jinja2
-  - jsonschema >=4.19
-  - menuinst >=2
-  - packaging
-  - patch >=2.6
-  - pkginfo
-  - psutil
-  - py-lief
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python-libarchive-c
-  - python_abi 3.12.* *_cp312
-  - pytz
-  - pyyaml
-  - requests
-  - ripgrep
-  - tqdm
-  constrains:
-  - conda-verify  >=3.1.0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 751442
-  timestamp: 1711608951046
-- kind: conda
-  name: conda-index
-  version: 0.4.0
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/conda-index-0.4.0-pyhd8ed1ab_0.conda
-  sha256: 4171355e42939f31cd154b84b5b98cb9fe5d9f784ead23e5b7abf05281b5bb60
-  md5: 6b2a22b4716391d141136cb8d5d4bd16
-  depends:
-  - click >=8
-  - conda >=4.12.0
-  - conda-package-streaming
-  - filelock
-  - jinja2
-  - more-itertools
+  depends:
   - python >=3.7
-  - pyyaml >=6
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 176354
-  timestamp: 1708062210737
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/charset-normalizer
+  size: 46597
+  timestamp: 1698833765762
 - kind: conda
-  name: conda-libmamba-solver
-  version: 24.1.0
-  build: pyhd8ed1ab_0
+  name: click
+  version: 8.1.7
+  build: unix_pyh707e725_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda
-  sha256: 0667d49300062da2b46b04c097a9ace55c7a133d035517ec093e54a54f8f6b55
-  md5: 304dc78ad6e52e0fd663df1d484c1531
+  url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
+  sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec
+  md5: f3ad426304898027fc619827ff428eca
   depends:
-  - boltons >=23.0.0
-  - conda >=23.7.4
-  - libmambapy >=1.5.6,<2.0a0
+  - __unix
   - python >=3.8
   license: BSD-3-Clause
   license_family: BSD
-  size: 41157
-  timestamp: 1706566194042
+  purls:
+  - pkg:pypi/click
+  size: 84437
+  timestamp: 1692311973840
 - kind: conda
-  name: conda-package-handling
-  version: 2.2.0
-  build: pyh38be061_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda
-  sha256: 9a221808405d813d8c555efce6944379b907d36d79e77d526d573efa6b996d26
-  md5: 8a3ae7f6318376aa08ea753367bb7dd6
+  name: cmarkgfm
+  version: 0.8.0
+  build: py312h02f2b3b_3
+  build_number: 3
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/cmarkgfm-0.8.0-py312h02f2b3b_3.conda
+  sha256: 2e95c3797cd2796f32de8408626d63cb1283f2b7b0826021d2e26cc58d9231a0
+  md5: ffedee35be7a5015d09e2660a66b89c9
   depends:
-  - conda-package-streaming >=0.9.0
-  - python >=3.7
-  - zstandard >=0.15
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 255143
-  timestamp: 1691048232276
+  - cffi >=1.0.0
+  - python >=3.12.0rc3,<3.13.0a0
+  - python >=3.12.0rc3,<3.13.0a0 *_cpython
+  - python_abi 3.12.* *_cp312
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/cmarkgfm
+  size: 113474
+  timestamp: 1695670347968
 - kind: conda
-  name: conda-package-streaming
-  version: 0.9.0
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda
-  sha256: 654a2488f77bf43555787d952dbffdc5d97956ff4aa9e0414a7131bb741dcf4c
-  md5: 38253361efb303deead3eab39ae9269b
+  name: cmarkgfm
+  version: 0.8.0
+  build: py312h98912ed_3
+  build_number: 3
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/cmarkgfm-0.8.0-py312h98912ed_3.conda
+  sha256: 1a9e60b18664c22f872435a1d2b1d727e37ea4159736b116afff364b9577dc02
+  md5: 0c9c09134b2fb151c2bd8181b2c56080
   depends:
-  - python >=3.7
-  - zstandard >=0.15
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 19183
-  timestamp: 1691009348105
+  - cffi >=1.0.0
+  - libgcc-ng >=12
+  - python >=3.12.0rc3,<3.13.0a0
+  - python_abi 3.12.* *_cp312
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/cmarkgfm
+  size: 135963
+  timestamp: 1695669875921
 - kind: conda
-  name: cookiecutter
-  version: 2.6.0
-  build: pyhca7485f_0
+  name: colorama
+  version: 0.4.6
+  build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/cookiecutter-2.6.0-pyhca7485f_0.conda
-  sha256: 5bed5805127757a4f03231eb7fe971cfe3c3411eeef036e670c41bfd8a42d91d
-  md5: d6260b53b9db90017321af0b45cc00da
-  depends:
-  - arrow
-  - binaryornot >=0.4.4
-  - click >=7.0,<9.0.0
-  - jinja2 >=2.7,<4.0.0
+  url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
+  sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698
+  md5: 3faab06a954c2a04039983f2c4a50d99
+  depends:
   - python >=3.7
-  - python-slugify >=4.0.0
-  - pyyaml >=5.3.1
-  - requests >=2.23.0
-  - rich
   license: BSD-3-Clause
   license_family: BSD
-  size: 100813
-  timestamp: 1708609086718
+  purls:
+  - pkg:pypi/colorama
+  size: 25170
+  timestamp: 1666700778190
 - kind: conda
   name: coverage
-  version: 7.4.4
-  build: py312h98912ed_0
+  version: 7.5.1
+  build: py311h331c9d8_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.4.4-py312h98912ed_0.conda
-  sha256: f160f9c89799bf6a14a023711d56cd800117c7a3ad2e117e1a2ced764b0b5206
-  md5: 7002151fcfe55ded0595fc7c3f5e1209
+  url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.5.1-py311h331c9d8_0.conda
+  sha256: 2ecb21dc0efec42419c50f63daf1db0d6910f47db1b2653ebc5c43f76302024e
+  md5: 9f35e13e3b9e05e153b78f42662061f6
   depends:
   - libgcc-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
+  - python >=3.11,<3.12.0a0
+  - python_abi 3.11.* *_cp311
   - tomli
   license: Apache-2.0
   license_family: APACHE
   purls:
   - pkg:pypi/coverage
-  size: 357166
-  timestamp: 1710462905888
+  size: 369007
+  timestamp: 1714846741185
 - kind: conda
   name: coverage
-  version: 7.4.4
-  build: py312he37b823_0
+  version: 7.5.1
+  build: py311hd3f4193_0
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.5.1-py311hd3f4193_0.conda
+  sha256: 6eaa811402fc3433bd891179410a434d0826da1f44579eccccc9dbb632769403
+  md5: 81834421a20531c880f6c0a5342f3922
+  depends:
+  - __osx >=11.0
+  - python >=3.11,<3.12.0a0
+  - python >=3.11,<3.12.0a0 *_cpython
+  - python_abi 3.11.* *_cp311
+  - tomli
+  license: Apache-2.0
+  license_family: APACHE
+  purls:
+  - pkg:pypi/coverage
+  size: 368146
+  timestamp: 1714846963260
+- kind: conda
+  name: coverage
+  version: 7.5.1
+  build: py312h7e5086c_0
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.4.4-py312he37b823_0.conda
-  sha256: dbc8525782d7fd0a42a3abbedcad306281b97790f940e1eacee403ad2f97b262
-  md5: 6b07da81f772158ca309d27f3deaf3f4
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.5.1-py312h7e5086c_0.conda
+  sha256: dc3d6d36edd2587da94cd0045ccf3460cf84ce77a40f62db4a75d3653e96c8d6
+  md5: 08067b92914143861a65b650dd0af4d0
   depends:
+  - __osx >=11.0
   - python >=3.12,<3.13.0a0
   - python >=3.12,<3.13.0a0 *_cpython
   - python_abi 3.12.* *_cp312
@@ -1215,8 +1351,64 @@ packages:
   license_family: APACHE
   purls:
   - pkg:pypi/coverage
-  size: 354947
-  timestamp: 1710463118659
+  size: 359716
+  timestamp: 1714846946149
+- kind: conda
+  name: coverage
+  version: 7.5.1
+  build: py312h9a8786e_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.5.1-py312h9a8786e_0.conda
+  sha256: 272e507f0ea567ec4c9cf2621c27d34eec5aaa70ebea5d03d508b33b4497de17
+  md5: 2d24a25dab0d00182eeed1ba9b64a12d
+  depends:
+  - libgcc-ng >=12
+  - python >=3.12,<3.13.0a0
+  - python_abi 3.12.* *_cp312
+  - tomli
+  license: Apache-2.0
+  license_family: APACHE
+  purls:
+  - pkg:pypi/coverage
+  size: 360545
+  timestamp: 1714846745949
+- kind: conda
+  name: cryptography
+  version: 42.0.7
+  build: py312hbcc2302_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.7-py312hbcc2302_0.conda
+  sha256: 91fa2d4229096ecffa36e71a33f2163d1138dc1ef98a0be20ba0e5905e420a85
+  md5: 7bc0e1aae21b2e82d03959931f4294f0
+  depends:
+  - cffi >=1.12
+  - libgcc-ng >=12
+  - openssl >=3.3.0,<4.0a0
+  - python >=3.12,<3.13.0a0
+  - python_abi 3.12.* *_cp312
+  license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT
+  license_family: BSD
+  purls:
+  - pkg:pypi/cryptography
+  size: 1978679
+  timestamp: 1715044173081
+- kind: conda
+  name: dbus
+  version: 1.13.6
+  build: h5008d03_3
+  build_number: 3
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2
+  sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5
+  md5: ecfff944ba3960ecb334b9a2663d708d
+  depends:
+  - expat >=2.4.2,<3.0a0
+  - libgcc-ng >=9.4.0
+  - libglib >=2.70.2,<3.0a0
+  license: GPL-2.0-or-later
+  license_family: GPL
+  size: 618596
+  timestamp: 1640112124844
 - kind: conda
   name: distlib
   version: 0.3.8
@@ -1235,57 +1427,38 @@ packages:
   size: 274915
   timestamp: 1702383349284
 - kind: conda
-  name: distro
-  version: 1.9.0
+  name: docutils
+  version: 0.21.2
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda
-  sha256: ae1c13d709c8001331b5b9345e4bcd77e9ae712d25f7958b2ebcbe0b068731b7
-  md5: bbdb409974cd6cb30071b1d978302726
-  depends:
-  - python >=3.6
-  license: Apache-2.0
-  license_family: APACHE
-  purls:
-  - pkg:pypi/distro
-  size: 42039
-  timestamp: 1704321683916
-- kind: conda
-  name: docutils
-  version: 0.20.1
-  build: py312h7900ff3_3
-  build_number: 3
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py312h7900ff3_3.conda
-  sha256: b9fb75d806afc53d9d7b98edb0c45ac38a3cc983916b8dac4ad7ddac5c18a024
-  md5: 1b90835ae26b9b8250b302649359a989
+  url: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
+  sha256: 362bfe3afaac18298c48c0c6a935641544077ce5105a42a2d8ebe750ad07c574
+  md5: e8cd5d629f65bdf0f3bb312cde14659e
   depends:
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
+  - python >=3.9
   license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
   purls:
   - pkg:pypi/docutils
-  size: 898253
-  timestamp: 1701882735141
+  size: 403226
+  timestamp: 1713930478970
 - kind: conda
-  name: docutils
-  version: 0.20.1
-  build: py312h81bd7bf_3
-  build_number: 3
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/docutils-0.20.1-py312h81bd7bf_3.conda
-  sha256: e1ad41c6401ab2ada143d6e1dbbe6ae8afbe3e651211bb414b9ae1f0f8c13249
-  md5: 50ea9a1ab48349f343ca2ae82833bda4
+  name: editables
+  version: '0.5'
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda
+  sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9
+  md5: 9873878e2a069bc358b69e9a29c1ecd5
   depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
+  - python >=3.7
+  license: MIT
+  license_family: MIT
   purls:
-  - pkg:pypi/docutils
-  size: 901757
-  timestamp: 1701883118423
+  - pkg:pypi/editables
+  size: 10988
+  timestamp: 1705857085102
 - kind: conda
   name: exceptiongroup
   version: 1.2.0
@@ -1303,6 +1476,21 @@ packages:
   - pkg:pypi/exceptiongroup
   size: 20551
   timestamp: 1704921321122
+- kind: conda
+  name: expat
+  version: 2.6.2
+  build: h59595ed_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda
+  sha256: 89916c536ae5b85bb8bf0cfa27d751e274ea0911f04e4a928744735c14ef5155
+  md5: 53fb86322bdb89496d7579fe3f02fd61
+  depends:
+  - libexpat 2.6.2 h59595ed_0
+  - libgcc-ng >=12
+  license: MIT
+  license_family: MIT
+  size: 137627
+  timestamp: 1710362144873
 - kind: conda
   name: fancycompleter
   version: 0.9.1
@@ -1344,58 +1532,29 @@ packages:
   timestamp: 1709161451678
 - kind: conda
   name: filelock
-  version: 3.13.3
+  version: 3.14.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.3-pyhd8ed1ab_0.conda
-  sha256: 3bb2b4b8b97160ee7d2ed40b9dbc78555932274e82ef314c8a400a1d17aa4626
-  md5: ff15f46b0d34308f4d40c1c51df07592
+  url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.14.0-pyhd8ed1ab_0.conda
+  sha256: 6031be667e1b0cc0dee713f1cbca887cdee4daafa8bac478da33096f3147d38b
+  md5: 831d85ae0acfba31b8efd0f0d07da736
   depends:
   - python >=3.7
   license: Unlicense
   purls:
   - pkg:pypi/filelock
-  size: 15611
-  timestamp: 1711394721380
-- kind: conda
-  name: fmt
-  version: 10.2.1
-  build: h00ab1b0_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda
-  sha256: 7b9ba098a3661e023c3555e01554354ac4891af8f8998e85f0fcbfdac79fc0d4
-  md5: 35ef8bc24bd34074ebae3c943d551728
-  depends:
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  license: MIT
-  license_family: MIT
-  size: 193853
-  timestamp: 1704454679950
-- kind: conda
-  name: fmt
-  version: 10.2.1
-  build: h2ffa867_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-10.2.1-h2ffa867_0.conda
-  sha256: 8570ae6fb7cd1179c646e2c48105e91b3ed8ba15855f12965cc5c9719753c06f
-  md5: 8cccde6755bdd787f9840f38a34b4e7d
-  depends:
-  - libcxx >=15
-  license: MIT
-  license_family: MIT
-  size: 174209
-  timestamp: 1704454873305
+  size: 15902
+  timestamp: 1714422911808
 - kind: conda
   name: furo
-  version: 2024.1.29
+  version: 2024.5.6
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/furo-2024.1.29-pyhd8ed1ab_0.conda
-  sha256: aba336c5d783817f63d8c8d12b3488911953dc6a88c692de242b6387482337eb
-  md5: f67437927d5ead424d7dcf1f4d9b7c66
+  url: https://conda.anaconda.org/conda-forge/noarch/furo-2024.5.6-pyhd8ed1ab_0.conda
+  sha256: 1c99f4b62b84b66b78a74d5781bf92c3ab1795c4d18476c4f7580dee0c8f3a07
+  md5: c5d6d467e2d8a74cdd2a888d8e348950
   depends:
   - beautifulsoup4
   - pygments >=2.7
@@ -1404,8 +1563,10 @@ packages:
   - sphinx-basic-ng
   license: MIT
   license_family: MIT
-  size: 80275
-  timestamp: 1706572345810
+  purls:
+  - pkg:pypi/furo
+  size: 83103
+  timestamp: 1715029589799
 - kind: conda
   name: gitdb
   version: 4.0.11
@@ -1443,6 +1604,196 @@ packages:
   - pkg:pypi/gitpython
   size: 156827
   timestamp: 1711991122366
+- kind: conda
+  name: h11
+  version: 0.14.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
+  sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085
+  md5: b21ed0883505ba1910994f1df031a428
+  depends:
+  - python >=3
+  - typing_extensions
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/h11
+  size: 48251
+  timestamp: 1664132995560
+- kind: conda
+  name: h2
+  version: 4.1.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+  sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a
+  md5: b748fbf7060927a6e82df7cb5ee8f097
+  depends:
+  - hpack >=4.0,<5
+  - hyperframe >=6.0,<7
+  - python >=3.6.1
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/h2
+  size: 46754
+  timestamp: 1634280590080
+- kind: conda
+  name: hatch
+  version: 1.10.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.10.0-pyhd8ed1ab_0.conda
+  sha256: c640173693bb4279977cb6f0ec5589080f8884c0b884425370a67333abfca96d
+  md5: b607d2f0443d35dc50251c50ea96fb10
+  depends:
+  - click >=8.0.6
+  - hatchling >=1.24.2
+  - httpx >=0.22.0
+  - hyperlink >=21.0.0
+  - keyring >=23.5.0
+  - packaging >=23.2
+  - pexpect >=4.8,<5
+  - platformdirs >=2.5.0
+  - python >=3.8
+  - rich >=11.2.0
+  - shellingham >=1.4.0
+  - tomli-w >=1.0
+  - tomlkit >=0.11.1
+  - userpath >=1.7,<2
+  - uv >=0.1.35
+  - virtualenv >=20.26.1
+  - zstandard <1.0
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/hatch
+  size: 174266
+  timestamp: 1714687924505
+- kind: conda
+  name: hatchling
+  version: 1.24.2
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.24.2-pyhd8ed1ab_0.conda
+  sha256: 1161601871d8aa6c5ff7719a277462cdf0160351a88f2a84a22d6ead3b90150f
+  md5: 28cef29029f6da70e7a987a76a3599a4
+  depends:
+  - editables >=0.3
+  - importlib-metadata
+  - packaging >=21.3
+  - pathspec >=0.10.1
+  - pluggy >=1.0.0
+  - python >=3.7
+  - tomli >=1.2.2
+  - trove-classifiers
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/hatchling
+  size: 63793
+  timestamp: 1713757830609
+- kind: conda
+  name: hpack
+  version: 4.0.0
+  build: pyh9f0ad1d_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+  sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8
+  md5: 914d6646c4dbb1fd3ff539830a12fd71
+  depends:
+  - python
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/hpack
+  size: 25341
+  timestamp: 1598856368685
+- kind: conda
+  name: httpcore
+  version: 1.0.5
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda
+  sha256: 4025644200eefa0598e4600a66fd4804a57d9fd7054a5c8c45e508fd875e0b84
+  md5: a6b9a0158301e697e4d0a36a3d60e133
+  depends:
+  - anyio >=3.0,<5.0
+  - certifi
+  - h11 >=0.13,<0.15
+  - h2 >=3,<5
+  - python >=3.8
+  - sniffio 1.*
+  license: BSD-3-Clause
+  license_family: BSD
+  purls:
+  - pkg:pypi/httpcore
+  size: 45816
+  timestamp: 1711597091407
+- kind: conda
+  name: httpx
+  version: 0.27.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda
+  sha256: fdaf341fb2630b7afe8238315448fc93947f77ebfa4da68bb349e1bcf820af58
+  md5: 9f359af5a886fd6ca6b2b6ea02e58332
+  depends:
+  - anyio
+  - certifi
+  - httpcore 1.*
+  - idna
+  - python >=3.8
+  - sniffio
+  license: BSD-3-Clause
+  license_family: BSD
+  purls:
+  - pkg:pypi/httpx
+  size: 64651
+  timestamp: 1708531043505
+- kind: conda
+  name: hyperframe
+  version: 6.0.1
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+  sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330
+  md5: 9f765cbfab6870c8435b9eefecd7a1f4
+  depends:
+  - python >=3.6
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/hyperframe
+  size: 14646
+  timestamp: 1619110249723
+- kind: conda
+  name: hyperlink
+  version: 21.0.0
+  build: pyhd3deb0d_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2
+  sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3
+  md5: 1303beb57b40f8f4ff6fb1bb23bf0553
+  depends:
+  - idna >=2.6
+  - python
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/hyperlink
+  size: 72732
+  timestamp: 1610092261086
 - kind: conda
   name: icu
   version: '73.2'
@@ -1472,37 +1823,36 @@ packages:
   timestamp: 1692902104771
 - kind: conda
   name: identify
-  version: 2.5.35
+  version: 2.5.36
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.35-pyhd8ed1ab_0.conda
-  sha256: 971683b13d1b820157bef9993c63dd8b0611d2d60fc4b522da163aee2e70e518
-  md5: 9472bfd206a2b7bb8143835e37667054
+  url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.36-pyhd8ed1ab_0.conda
+  sha256: dc98ab2233d3ed3692499e2a06b027489ee317658cef9277ec23cab00236f31c
+  md5: ba68cb5105760379432cebc82b45af40
   depends:
   - python >=3.6
   - ukkonen
   license: MIT
   license_family: MIT
-  size: 78364
-  timestamp: 1708283690891
+  purls:
+  - pkg:pypi/identify
+  size: 78375
+  timestamp: 1713673091737
 - kind: pypi
   name: idiap-devtools
-  version: 1.0.1.dev36+g96137c1.d20240416
+  version: 1.0.1.dev37+g2c4ecdc.d20240513
   path: .
-  sha256: 90209fe9fcfc82861e4b23eb0829bce7c9be7e2ff459126af6d3cedc37db2500
+  sha256: d31be5f4e9375e93a5e0c5b50cd840dc0baecf171e0b12cac9b8a4038a0c1b22
   requires_dist:
-  - click >=8
-  - cookiecutter
+  - click>=8
   - gitpython
   - packaging
   - python-dateutil
   - python-gitlab
   - pytz
-  - pyyaml
   - tomli
   - tomlkit
-  - xdg
   - auto-intersphinx ; extra == 'doc'
   - furo ; extra == 'doc'
   - sphinx ; extra == 'doc'
@@ -1517,21 +1867,21 @@ packages:
   editable: true
 - kind: conda
   name: idna
-  version: '3.6'
+  version: '3.7'
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda
-  sha256: 6ee4c986d69ce61e60a20b2459b6f2027baeba153f0a64995fd3cb47c2cc7e07
-  md5: 1a76f09108576397c41c0b0c5bd84134
+  url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+  sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b
+  md5: c0cc1420498b17414d8617d0b9f506ca
   depends:
   - python >=3.6
   license: BSD-3-Clause
   license_family: BSD
   purls:
   - pkg:pypi/idna
-  size: 50124
-  timestamp: 1701027126206
+  size: 52718
+  timestamp: 1713279497047
 - kind: conda
   name: imagesize
   version: 1.4.1
@@ -1563,8 +1913,25 @@ packages:
   - zipp >=0.5
   license: Apache-2.0
   license_family: APACHE
+  purls:
+  - pkg:pypi/importlib-metadata
   size: 27043
   timestamp: 1710971498183
+- kind: conda
+  name: importlib_metadata
+  version: 7.1.0
+  build: hd8ed1ab_0
+  subdir: noarch
+  noarch: generic
+  url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.1.0-hd8ed1ab_0.conda
+  sha256: 01dc057a45dedcc742a71599f67c7383ae2bf873be6018ebcbd06ac8d994dedb
+  md5: 6ef2b72d291b39e479d7694efa2b2b98
+  depends:
+  - importlib-metadata >=7.1.0,<7.1.1.0a0
+  license: Apache-2.0
+  license_family: APACHE
+  size: 9444
+  timestamp: 1710971502542
 - kind: conda
   name: importlib_resources
   version: 6.4.0
@@ -1603,410 +1970,172 @@ packages:
   size: 11101
   timestamp: 1673103208955
 - kind: conda
-  name: jinja2
-  version: 3.1.3
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda
-  sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc
-  md5: e7d8df6509ba635247ff9aea31134262
-  depends:
-  - markupsafe >=2.0
-  - python >=3.7
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/jinja2
-  size: 111589
-  timestamp: 1704967140287
-- kind: conda
-  name: joblib
-  version: 1.3.2
-  build: pyhd8ed1ab_0
+  name: jaraco.classes
+  version: 3.4.0
+  build: pyhd8ed1ab_1
+  build_number: 1
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda
-  sha256: 31e05d47970d956206188480b038829d24ac11fe8216409d8584d93d40233878
-  md5: 4da50d410f553db77e62ab62ffaa1abc
+  url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda
+  sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d
+  md5: 7b756504d362cbad9b73a50a5455cafd
   depends:
-  - python >=3.7
-  - setuptools
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 221200
-  timestamp: 1691577306309
+  - more-itertools
+  - python >=3.8
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/jaraco-classes
+  size: 12223
+  timestamp: 1713939433204
 - kind: conda
-  name: json5
-  version: 0.9.24
-  build: pyhd8ed1ab_0
+  name: jaraco.context
+  version: 5.3.0
+  build: pyhd8ed1ab_1
+  build_number: 1
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.24-pyhd8ed1ab_0.conda
-  sha256: 148a427d4867ecd367b2bb9c2ef11ae7795abeabc8454f802f28ff692b3ce1aa
-  md5: fc9780a517b51ea3798fc011c17ffd51
+  url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda
+  sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2
+  md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa
   depends:
-  - python >=3.7,<4.0
-  license: Apache-2.0
-  license_family: APACHE
+  - backports.tarfile
+  - python >=3.8
+  license: MIT
+  license_family: MIT
   purls:
-  - pkg:pypi/json5
-  size: 27927
-  timestamp: 1710632397456
+  - pkg:pypi/jaraco-context
+  size: 12456
+  timestamp: 1714372284922
 - kind: conda
-  name: jsonpatch
-  version: '1.33'
+  name: jaraco.functools
+  version: 4.0.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda
-  sha256: fbb17e33ace3225c6416d1604637c1058906b8223da968cc015128985336b2b4
-  md5: bfdb7c5c6ad1077c82a69a8642c87aff
+  url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda
+  sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6
+  md5: 547670a612fd335eaa5ffbf0fa75cb64
   depends:
-  - jsonpointer >=1.9
+  - more-itertools
   - python >=3.8
-  license: BSD-3-Clause
-  license_family: BSD
+  license: MIT
+  license_family: MIT
   purls:
-  - pkg:pypi/jsonpatch
-  size: 17366
-  timestamp: 1695536420928
+  - pkg:pypi/jaraco-functools
+  size: 15192
+  timestamp: 1701695329516
 - kind: conda
-  name: jsonpointer
-  version: '2.4'
-  build: py312h7900ff3_3
-  build_number: 3
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py312h7900ff3_3.conda
-  sha256: c211a79cff8aa001a6e14e923c37278231dca7f0970d8db155c4b9e48ac87a5a
-  md5: 50f62bdb9b60b13c2f6ae69957342e4d
+  name: jeepney
+  version: 0.8.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2
+  sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8
+  md5: 9800ad1699b42612478755a2d26c722d
   depends:
-  - python >=3.12.0rc3,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause
-  license_family: BSD
+  - python >=3.7
+  license: MIT
+  license_family: MIT
   purls:
-  - pkg:pypi/jsonpointer
-  size: 18033
-  timestamp: 1695397448370
+  - pkg:pypi/jeepney
+  size: 36895
+  timestamp: 1649085298891
 - kind: conda
-  name: jsonpointer
-  version: '2.4'
-  build: py312h81bd7bf_3
-  build_number: 3
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/jsonpointer-2.4-py312h81bd7bf_3.conda
-  sha256: 6cb2d17da9083e05f5ead7902a5cd6ec9567cd3da972c65c03f090515c9fa176
-  md5: 327361b24f5348cab04ad9b1f74e831d
+  name: jinja2
+  version: 3.1.4
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+  sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d
+  md5: 7b86ecb7d3557821c649b3c31e3eb9f2
   depends:
-  - python >=3.12.0rc3,<3.13.0a0
-  - python >=3.12.0rc3,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
+  - markupsafe >=2.0
+  - python >=3.7
   license: BSD-3-Clause
   license_family: BSD
   purls:
-  - pkg:pypi/jsonpointer
-  size: 18542
-  timestamp: 1695397720755
+  - pkg:pypi/jinja2
+  size: 111565
+  timestamp: 1715127275924
 - kind: conda
-  name: jsonschema
-  version: 4.21.1
-  build: pyhd8ed1ab_0
+  name: keyring
+  version: 25.2.0
+  build: pyh534df25_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda
-  sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129
-  md5: 8a3a3d01629da20befa340919e3dd2c4
-  depends:
-  - attrs >=22.2.0
-  - importlib_resources >=1.4.0
-  - jsonschema-specifications >=2023.03.6
-  - pkgutil-resolve-name >=1.3.10
+  url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.2.0-pyh534df25_0.conda
+  sha256: 29ffedc5e90f850a66007174f3785eb6a322a93cc6df9e8c9a7646f7761c694a
+  md5: acaf59f096327bc5757c91303cae99ca
+  depends:
+  - __osx
+  - importlib_metadata >=4.11.4
+  - importlib_resources
+  - jaraco.classes
+  - jaraco.context
+  - jaraco.functools
   - python >=3.8
-  - referencing >=0.28.4
-  - rpds-py >=0.7.1
   license: MIT
   license_family: MIT
-  size: 72817
-  timestamp: 1705707712082
+  purls:
+  - pkg:pypi/keyring
+  size: 36710
+  timestamp: 1714167932993
 - kind: conda
-  name: jsonschema-specifications
-  version: 2023.12.1
-  build: pyhd8ed1ab_0
+  name: keyring
+  version: 25.2.0
+  build: pyha804496_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda
-  sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2
-  md5: a0e4efb5f35786a05af4809a2fb1f855
-  depends:
-  - importlib_resources >=1.4.0
+  url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.2.0-pyha804496_0.conda
+  sha256: 3a6dc8525071aa1016b81d24ee3845a2c26280b863392d7551b40a6c8d0f60c0
+  md5: 7a14341f0ed09e83e28b28140f058ae0
+  depends:
+  - __linux
+  - importlib_metadata >=4.11.4
+  - importlib_resources
+  - jaraco.classes
+  - jaraco.context
+  - jaraco.functools
+  - jeepney >=0.4.2
   - python >=3.8
-  - referencing >=0.31.0
+  - secretstorage >=3.2
   license: MIT
   license_family: MIT
   purls:
-  - pkg:pypi/jsonschema-specifications
-  size: 16431
-  timestamp: 1703778502971
-- kind: conda
-  name: keyutils
-  version: 1.6.1
-  build: h166bdaf_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2
-  sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb
-  md5: 30186d27e2c9fa62b45fb1476b7200e3
-  depends:
-  - libgcc-ng >=10.3.0
-  license: LGPL-2.1-or-later
-  size: 117831
-  timestamp: 1646151697040
-- kind: conda
-  name: krb5
-  version: 1.21.2
-  build: h659d440_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda
-  sha256: 259bfaae731989b252b7d2228c1330ef91b641c9d68ff87dae02cbae682cb3e4
-  md5: cd95826dbd331ed1be26bdf401432844
-  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.1.2,<4.0a0
-  license: MIT
-  license_family: MIT
-  size: 1371181
-  timestamp: 1692097755782
-- kind: conda
-  name: krb5
-  version: 1.21.2
-  build: h92f50d5_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda
-  sha256: 70bdb9b4589ec7c7d440e485ae22b5a352335ffeb91a771d4c162996c3070875
-  md5: 92f1cff174a538e0722bf2efb16fc0b2
-  depends:
-  - libcxx >=15.0.7
-  - libedit >=3.1.20191231,<3.2.0a0
-  - libedit >=3.1.20191231,<4.0a0
-  - openssl >=3.1.2,<4.0a0
-  license: MIT
-  license_family: MIT
-  size: 1195575
-  timestamp: 1692098070699
-- kind: conda
-  name: ld64
-  version: '711'
-  build: h4c6efb1_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-711-h4c6efb1_0.conda
-  sha256: 467371e8dbd4fc99f507024c3d10c0ac4a8528286e9507a1f365e26cb90f4df0
-  md5: 289df626863e8c720c3aa220964378cc
-  depends:
-  - ld64_osx-arm64 711 h5e7191b_0
-  - libllvm18 >=18.1.1,<18.2.0a0
-  constrains:
-  - cctools 986.*
-  - cctools_osx-arm64 986.*
-  license: APSL-2.0
-  license_family: Other
-  size: 18678
-  timestamp: 1710484665887
-- kind: conda
-  name: ld64_osx-arm64
-  version: '711'
-  build: h5e7191b_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-711-h5e7191b_0.conda
-  sha256: 82f964dcff2052b327762ca44651407451ad396a1540c664928841c72b7cf3c0
-  md5: c751b76ae8112e3d516831063da179cc
-  depends:
-  - libcxx
-  - libllvm18 >=18.1.1,<18.2.0a0
-  - sigtool
-  - tapi >=1100.0.11,<1101.0a0
-  constrains:
-  - ld 711.*
-  - cctools 986.*
-  - cctools_osx-arm64 986.*
-  - clang >=18.1.1,<19.0a0
-  license: APSL-2.0
-  license_family: Other
-  size: 1064448
-  timestamp: 1710484550965
+  - pkg:pypi/keyring
+  size: 36608
+  timestamp: 1714167807674
 - kind: conda
   name: ld_impl_linux-64
   version: '2.40'
-  build: h41732ed_0
+  build: h55db66e_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda
-  sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd
-  md5: 7aca3059a1729aa76c597603f10b0dd3
+  url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h55db66e_0.conda
+  sha256: ef969eee228cfb71e55146eaecc6af065f468cb0bc0a5239bc053b39db0b5f09
+  md5: 10569984e7db886e4f1abc2b47ad79a1
   constrains:
   - binutils_impl_linux-64 2.40
   license: GPL-3.0-only
   license_family: GPL
-  size: 704696
-  timestamp: 1674833944779
-- kind: conda
-  name: libarchive
-  version: 3.7.2
-  build: h2aa1ff5_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda
-  sha256: 340ed0bb02fe26a2b2e29cedf6559e2999b820f434e745c108e788d629ae4b17
-  md5: 3bf887827d1968275978361a6e405e4f
-  depends:
-  - bzip2 >=1.0.8,<2.0a0
-  - libgcc-ng >=12
-  - libxml2 >=2.12.2,<3.0.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - lz4-c >=1.9.3,<1.10.0a0
-  - lzo >=2.10,<3.0a0
-  - openssl >=3.2.0,<4.0a0
-  - xz >=5.2.6,<6.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 866168
-  timestamp: 1701994227275
-- kind: conda
-  name: libarchive
-  version: 3.7.2
-  build: hcacb583_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.2-hcacb583_1.conda
-  sha256: 307dd9984deccab782a834022a708ba070950d3d0f3b370ce9331ad1db013576
-  md5: 1c8c447ce71bf5f769674b621142a73a
-  depends:
-  - bzip2 >=1.0.8,<2.0a0
-  - libiconv >=1.17,<2.0a0
-  - libxml2 >=2.12.2,<3.0.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - lz4-c >=1.9.3,<1.10.0a0
-  - lzo >=2.10,<3.0a0
-  - openssl >=3.2.0,<4.0a0
-  - xz >=5.2.6,<6.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 783812
-  timestamp: 1701994487530
-- kind: conda
-  name: libcurl
-  version: 8.7.1
-  build: h2d989ff_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.7.1-h2d989ff_0.conda
-  sha256: 973ac9368efca712a8fd19fe68524d7d9a3087fd88ad6b7fcdf60c3d2e19a498
-  md5: 34b9171710f0d9bf093d55bdc36ff355
-  depends:
-  - krb5 >=1.21.2,<1.22.0a0
-  - libnghttp2 >=1.58.0,<2.0a0
-  - libssh2 >=1.11.0,<2.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - openssl >=3.2.1,<4.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: curl
-  license_family: MIT
-  size: 358080
-  timestamp: 1711548548174
-- kind: conda
-  name: libcurl
-  version: 8.7.1
-  build: hca28451_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.7.1-hca28451_0.conda
-  sha256: 82a75e9a5d9ee5b2f487d850ec5d4edc18a56eb9527608a95a916c40baae3843
-  md5: 755c7f876815003337d2c61ff5d047e5
-  depends:
-  - krb5 >=1.21.2,<1.22.0a0
-  - libgcc-ng >=12
-  - libnghttp2 >=1.58.0,<2.0a0
-  - libssh2 >=1.11.0,<2.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - openssl >=3.2.1,<4.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: curl
-  license_family: MIT
-  size: 398293
-  timestamp: 1711548114077
+  size: 713322
+  timestamp: 1713651222435
 - kind: conda
   name: libcxx
-  version: 16.0.6
-  build: h4653b0c_0
+  version: 17.0.6
+  build: h5f092b4_0
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-16.0.6-h4653b0c_0.conda
-  sha256: 11d3fb51c14832d9e4f6d84080a375dec21ea8a3a381a1910e67ff9cedc20355
-  md5: 9d7d724faf0413bf1dbc5a85935700c8
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-17.0.6-h5f092b4_0.conda
+  sha256: 119d3d9306f537d4c89dc99ed99b94c396d262f0b06f7833243646f68884f2c2
+  md5: a96fd5dda8ce56c86a971e0fa02751d0
+  depends:
+  - __osx >=11.0
   license: Apache-2.0 WITH LLVM-exception
   license_family: Apache
-  size: 1160232
-  timestamp: 1686896993785
-- kind: conda
-  name: libedit
-  version: 3.1.20191231
-  build: hc8eb9b7_2
-  build_number: 2
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2
-  sha256: 3912636197933ecfe4692634119e8644904b41a58f30cad9d1fc02f6ba4d9fca
-  md5: 30e4362988a2623e9eb34337b83e01f9
-  depends:
-  - ncurses >=6.2,<7.0.0a0
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 96607
-  timestamp: 1597616630749
-- kind: conda
-  name: libedit
-  version: 3.1.20191231
-  build: he28a2e2_2
-  build_number: 2
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2
-  sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf
-  md5: 4d331e44109e3f0e19b4cb8f9b82f3e1
-  depends:
-  - libgcc-ng >=7.5.0
-  - ncurses >=6.2,<7.0.0a0
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 123878
-  timestamp: 1597616541093
-- kind: conda
-  name: libev
-  version: '4.33'
-  build: h93a5062_2
-  build_number: 2
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda
-  sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f
-  md5: 36d33e440c31857372a72137f78bacf5
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 107458
-  timestamp: 1702146414478
-- kind: conda
-  name: libev
-  version: '4.33'
-  build: hd590300_2
-  build_number: 2
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
-  sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4
-  md5: 172bf1cd1ff8629f2b1179945ed45055
-  depends:
-  - libgcc-ng >=12
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 112766
-  timestamp: 1702146165126
+  size: 1248885
+  timestamp: 1715020154867
 - kind: conda
   name: libexpat
   version: 2.6.2
@@ -2068,36 +2197,55 @@ packages:
 - kind: conda
   name: libgcc-ng
   version: 13.2.0
-  build: h807b86a_5
-  build_number: 5
+  build: h77fa898_7
+  build_number: 7
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda
-  sha256: d32f78bfaac282cfe5205f46d558704ad737b8dbf71f9227788a5ca80facaba4
-  md5: d4ff227c46917d3b4565302a2bbb276b
+  url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda
+  sha256: 62af2b89acbe74a21606c8410c276e57309c0a2ab8a9e8639e3c8131c0b60c92
+  md5: 72ec1b1b04c4d15d4204ece1ecea5978
   depends:
   - _libgcc_mutex 0.1 conda_forge
   - _openmp_mutex >=4.5
   constrains:
-  - libgomp 13.2.0 h807b86a_5
+  - libgomp 13.2.0 h77fa898_7
   license: GPL-3.0-only WITH GCC-exception-3.1
   license_family: GPL
-  size: 770506
-  timestamp: 1706819192021
+  size: 775806
+  timestamp: 1715016057793
+- kind: conda
+  name: libglib
+  version: 2.80.2
+  build: hf974151_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.2-hf974151_0.conda
+  sha256: 93e03b6cf4765bc06d64fa3dac65f22c53ae4a30247bb0e2dea0bd9c47a3fb26
+  md5: 72724f6a78ecb15559396966226d5838
+  depends:
+  - libffi >=3.4,<4.0a0
+  - libgcc-ng >=12
+  - libiconv >=1.17,<2.0a0
+  - libzlib >=1.2.13,<1.3.0a0
+  - pcre2 >=10.43,<10.44.0a0
+  constrains:
+  - glib 2.80.2 *_0
+  license: LGPL-2.1-or-later
+  size: 3912673
+  timestamp: 1715252654366
 - kind: conda
   name: libgomp
   version: 13.2.0
-  build: h807b86a_5
-  build_number: 5
+  build: h77fa898_7
+  build_number: 7
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_5.conda
-  sha256: 0d3d4b1b0134283ea02d58e8eb5accf3655464cf7159abf098cc694002f8d34e
-  md5: d211c42b9ce49aee3734fdc828731689
+  url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda
+  sha256: 781444fa069d3b50e8ed667b750571cacda785761c7fc2a89ece1ac49693d4ad
+  md5: abf3fec87c2563697defa759dec3d639
   depends:
   - _libgcc_mutex 0.1 conda_forge
   license: GPL-3.0-only WITH GCC-exception-3.1
   license_family: GPL
-  size: 419751
-  timestamp: 1706819107383
+  size: 422336
+  timestamp: 1715015995979
 - kind: conda
   name: libiconv
   version: '1.17'
@@ -2124,188 +2272,6 @@ packages:
   license: LGPL-2.1-only
   size: 705775
   timestamp: 1702682170569
-- kind: conda
-  name: liblief
-  version: 0.14.1
-  build: h3f3aa29_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/liblief-0.14.1-h3f3aa29_1.conda
-  sha256: 09ce81a54a7713058f5bf334dcd8e901435cce4eac9db05dcfe73454cab4f813
-  md5: ff67fa3d5bb43a834a9bf658b8c0aa6c
-  depends:
-  - __osx >=11.0
-  - libcxx >=16
-  license: Apache-2.0
-  license_family: Apache
-  size: 1547201
-  timestamp: 1711564083758
-- kind: conda
-  name: liblief
-  version: 0.14.1
-  build: hac33072_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/liblief-0.14.1-hac33072_1.conda
-  sha256: 9c43233e6a4dc4732150c5df7f22647f94eebfb0029f864ff08e406eacf4e941
-  md5: 2f6a34571bb9e99ecf3486012739e73b
-  depends:
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  license: Apache-2.0
-  license_family: Apache
-  size: 1843928
-  timestamp: 1711563126697
-- kind: conda
-  name: libllvm18
-  version: 18.1.2
-  build: h30cc82d_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm18-18.1.2-h30cc82d_0.conda
-  sha256: 0d94c605bae6d743713dd902e2f56f52f65cbd3456b90c5d7c464321607e2b5b
-  md5: 6e8e9ff62e7886035618ac93fad76f9e
-  depends:
-  - libcxx >=16
-  - libxml2 >=2.12.6,<3.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: Apache-2.0 WITH LLVM-exception
-  license_family: Apache
-  size: 25780908
-  timestamp: 1710946768066
-- kind: conda
-  name: libmamba
-  version: 1.5.8
-  build: h90c426b_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libmamba-1.5.8-h90c426b_0.conda
-  sha256: a6182bd735fe6a8bdd511096931a991b7d431cbfa2358f3aebb98132f063c89d
-  md5: e02e82b493ab683be580380193db1b64
-  depends:
-  - fmt >=10.2.1,<11.0a0
-  - libarchive >=3.7.2,<3.8.0a0
-  - libcurl >=8.6.0,<9.0a0
-  - libcxx >=16
-  - libsolv >=0.7.23
-  - openssl >=3.2.1,<4.0a0
-  - reproc >=14.2,<15.0a0
-  - reproc-cpp >=14.2,<15.0a0
-  - yaml-cpp >=0.8.0,<0.9.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 1201341
-  timestamp: 1711395432570
-- kind: conda
-  name: libmamba
-  version: 1.5.8
-  build: had39da4_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda
-  sha256: 79c275862cc084c9f0dc1a13bd42313d48202181d5d64615b3046bf2380ef57d
-  md5: def669885dc103d8acb7ac2ac35e0b2f
-  depends:
-  - fmt >=10.2.1,<11.0a0
-  - libarchive >=3.7.2,<3.8.0a0
-  - libcurl >=8.6.0,<9.0a0
-  - libgcc-ng >=12
-  - libsolv >=0.7.23
-  - libstdcxx-ng >=12
-  - openssl >=3.2.1,<4.0a0
-  - reproc >=14.2,<15.0a0
-  - reproc-cpp >=14.2,<15.0a0
-  - yaml-cpp >=0.8.0,<0.9.0a0
-  - zstd >=1.5.5,<1.6.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 1671126
-  timestamp: 1711394919576
-- kind: conda
-  name: libmambapy
-  version: 1.5.8
-  build: py312h344e357_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libmambapy-1.5.8-py312h344e357_0.conda
-  sha256: 7cb94cf454c20cf25cf0c394e812ca7f86ceae47bb45f5b11518dd204f752cf0
-  md5: 9167478ca4942d118d3b79f6149c758f
-  depends:
-  - fmt >=10.2.1,<11.0a0
-  - libcxx >=16
-  - libmamba 1.5.8 h90c426b_0
-  - openssl >=3.2.1,<4.0a0
-  - pybind11-abi 4
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  - yaml-cpp >=0.8.0,<0.9.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 255134
-  timestamp: 1711395612039
-- kind: conda
-  name: libmambapy
-  version: 1.5.8
-  build: py312hd9e9ff6_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py312hd9e9ff6_0.conda
-  sha256: 429c8fd6f7be1040a52cedaa8cd7aa02a42ccc8a27baa0a4394516401e9d7b28
-  md5: ab74748421323fd59d9fda55e45b979e
-  depends:
-  - fmt >=10.2.1,<11.0a0
-  - libgcc-ng >=12
-  - libmamba 1.5.8 had39da4_0
-  - libstdcxx-ng >=12
-  - openssl >=3.2.1,<4.0a0
-  - pybind11-abi 4
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  - yaml-cpp >=0.8.0,<0.9.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 306497
-  timestamp: 1711395345839
-- kind: conda
-  name: libnghttp2
-  version: 1.58.0
-  build: h47da74e_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda
-  sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb
-  md5: 700ac6ea6d53d5510591c4344d5c989a
-  depends:
-  - c-ares >=1.23.0,<2.0a0
-  - libev >=4.33,<4.34.0a0
-  - libev >=4.33,<5.0a0
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  - libzlib >=1.2.13,<1.3.0a0
-  - openssl >=3.2.0,<4.0a0
-  license: MIT
-  license_family: MIT
-  size: 631936
-  timestamp: 1702130036271
-- kind: conda
-  name: libnghttp2
-  version: 1.58.0
-  build: ha4dd798_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda
-  sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd
-  md5: 1813e066bfcef82de579a0be8a766df4
-  depends:
-  - __osx >=10.9
-  - c-ares >=1.23.0,<2.0a0
-  - libcxx >=16.0.6
-  - libev >=4.33,<4.34.0a0
-  - libev >=4.33,<5.0a0
-  - libzlib >=1.2.13,<1.3.0a0
-  - openssl >=3.2.0,<4.0a0
-  license: MIT
-  license_family: MIT
-  size: 565451
-  timestamp: 1702130473930
 - kind: conda
   name: libnsl
   version: 2.0.1
@@ -2320,110 +2286,46 @@ packages:
   license_family: GPL
   size: 33408
   timestamp: 1697359010159
-- kind: conda
-  name: libsolv
-  version: 0.7.28
-  build: h1059232_2
-  build_number: 2
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libsolv-0.7.28-h1059232_2.conda
-  sha256: fd83e17e0f71cba0eeecffd6dd7bb0b0b39ac5c5b456b425c1d92f860151ff68
-  md5: 00e4d252cbbeb894f15d01a1545aa876
-  depends:
-  - libcxx >=16
-  - libzlib >=1.2.13,<1.3.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 386817
-  timestamp: 1711553518981
-- kind: conda
-  name: libsolv
-  version: 0.7.28
-  build: hfc55251_2
-  build_number: 2
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_2.conda
-  sha256: f21f2653a0a73bfcdfeecbeb2198b5ebd3f0c9f541fe0044e995bf43df3096d2
-  md5: 535bafe1ed0a5bdd3f4c125ca05d378c
-  depends:
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  - libzlib >=1.2.13,<1.3.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 468273
-  timestamp: 1711553127824
 - kind: conda
   name: libsqlite
-  version: 3.45.2
+  version: 3.45.3
   build: h091b4b1_0
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.2-h091b4b1_0.conda
-  sha256: 7c234320a1a2132b9cc972aaa06bb215bb220a5b1addb0bed7a5a321c805920e
-  md5: 9d07427ee5bd9afd1e11ce14368a48d6
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.3-h091b4b1_0.conda
+  sha256: 4337f466eb55bbdc74e168b52ec8c38f598e3664244ec7a2536009036e2066cc
+  md5: c8c1186c7f3351f6ffddb97b1f54fc58
   depends:
   - libzlib >=1.2.13,<1.3.0a0
   license: Unlicense
-  size: 825300
-  timestamp: 1710255078823
-- kind: conda
-  name: libsqlite
-  version: 3.45.2
-  build: h2797004_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.2-h2797004_0.conda
-  sha256: 8cdbeb7902729e319510a82d7c642402981818702b58812af265ef55d1315473
-  md5: 866983a220e27a80cb75e85cb30466a1
-  depends:
-  - libgcc-ng >=12
-  - libzlib >=1.2.13,<1.3.0a0
-  license: Unlicense
-  size: 857489
-  timestamp: 1710254744982
+  size: 824794
+  timestamp: 1713367748819
 - kind: conda
-  name: libssh2
-  version: 1.11.0
-  build: h0841786_0
+  name: libsqlite
+  version: 3.45.3
+  build: h2797004_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda
-  sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d
-  md5: 1f5a58e686b13bcfde88b93f547d23fe
+  url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda
+  sha256: e2273d6860eadcf714a759ffb6dc24a69cfd01f2a0ea9d6c20f86049b9334e0c
+  md5: b3316cbe90249da4f8e84cd66e1cc55b
   depends:
   - libgcc-ng >=12
   - libzlib >=1.2.13,<1.3.0a0
-  - openssl >=3.1.1,<4.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 271133
-  timestamp: 1685837707056
-- kind: conda
-  name: libssh2
-  version: 1.11.0
-  build: h7a5bd25_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda
-  sha256: bb57d0c53289721fff1eeb3103a1c6a988178e88d8a8f4345b0b91a35f0e0015
-  md5: 029f7dc931a3b626b94823bc77830b01
-  depends:
-  - libzlib >=1.2.13,<1.3.0a0
-  - openssl >=3.1.1,<4.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 255610
-  timestamp: 1685837894256
+  license: Unlicense
+  size: 859858
+  timestamp: 1713367435849
 - kind: conda
   name: libstdcxx-ng
   version: 13.2.0
-  build: h7e041cc_5
-  build_number: 5
+  build: hc0a3c3a_7
+  build_number: 7
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda
-  sha256: a56c5b11f1e73a86e120e6141a42d9e935a99a2098491ac9e15347a1476ce777
-  md5: f6f6600d18a4047b54f803cf708b868a
+  url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-hc0a3c3a_7.conda
+  sha256: 35f1e08be0a84810c9075f5bd008495ac94e6c5fe306dfe4b34546f11fed850f
+  md5: 53ebd4c833fa01cb2c6353e99f905406
   license: GPL-3.0-only WITH GCC-exception-3.1
   license_family: GPL
-  size: 3834139
-  timestamp: 1706819252496
+  size: 3837704
+  timestamp: 1715016117360
 - kind: conda
   name: libuuid
   version: 2.38.1
@@ -2455,12 +2357,12 @@ packages:
 - kind: conda
   name: libxml2
   version: 2.12.6
-  build: h0d0cfa8_1
-  build_number: 1
+  build: h0d0cfa8_2
+  build_number: 2
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.6-h0d0cfa8_1.conda
-  sha256: f18775ca8494ead5451d4acfc53fa7ebf7a8b5ed04c43bcc50fab847c9780cb3
-  md5: c08526c957192192e1e7b4f622761144
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.6-h0d0cfa8_2.conda
+  sha256: a5c10af641d6accf3effb3c3a3c594d931bb374f9e3e796719f3ecf769cfb0fc
+  md5: 27577d561de7659487b062c363d8a527
   depends:
   - icu >=73.2,<74.0a0
   - libiconv >=1.17,<2.0a0
@@ -2468,17 +2370,17 @@ packages:
   - xz >=5.2.6,<6.0a0
   license: MIT
   license_family: MIT
-  size: 588539
-  timestamp: 1711318256840
+  size: 588638
+  timestamp: 1713314780561
 - kind: conda
   name: libxml2
   version: 2.12.6
-  build: h232c23b_1
-  build_number: 1
+  build: h232c23b_2
+  build_number: 2
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.6-h232c23b_1.conda
-  sha256: c0bd693bb1a7e5aba388a0c79be16ff92e2411e03aaa920f94b4b33bf099e254
-  md5: 6853448e9ca1cfd5f15382afd2a6d123
+  url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.6-h232c23b_2.conda
+  sha256: 0fd41df7211aae04f492c8550ce10238e8cfa8b1abebc2215a983c5e66d284ea
+  md5: 9a3a42df8a95f65334dfc7b80da1195d
   depends:
   - icu >=73.2,<74.0a0
   - libgcc-ng >=12
@@ -2487,8 +2389,8 @@ packages:
   - xz >=5.2.6,<6.0a0
   license: MIT
   license_family: MIT
-  size: 705994
-  timestamp: 1711318087106
+  size: 704938
+  timestamp: 1713314718258
 - kind: conda
   name: libxslt
   version: 1.1.39
@@ -2570,138 +2472,45 @@ packages:
   timestamp: 1690394219675
 - kind: conda
   name: lxml
-  version: 5.1.0
-  build: py312h37b5203_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/lxml-5.1.0-py312h37b5203_0.conda
-  sha256: 5fcfa6dc3c8cb0e4530d3f5aeaa5fb67d4f1e406d17e8075f1bdc1f122c08f73
-  md5: f39740e31558f179fb1d1941a241efc6
+  version: 5.2.2
+  build: py312h0e5ab22_0
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-5.2.2-py312h0e5ab22_0.conda
+  sha256: 6dda17b6be96e13adb7810e7aeaa676429b93ce472e636f73ba56f2b61918d24
+  md5: d049fc23bf40c0f7d97bc4a35d91b97c
   depends:
-  - libgcc-ng >=12
-  - libxml2 >=2.12.3,<3.0.0a0
+  - __osx >=11.0
+  - libxml2 >=2.12.6,<3.0a0
   - libxslt >=1.1.39,<2.0a0
   - libzlib >=1.2.13,<1.3.0a0
   - python >=3.12,<3.13.0a0
+  - python >=3.12,<3.13.0a0 *_cpython
   - python_abi 3.12.* *_cp312
   license: BSD-3-Clause and MIT-CMU
   purls:
   - pkg:pypi/lxml
-  size: 1490575
-  timestamp: 1704724512042
+  size: 1149120
+  timestamp: 1715599148831
 - kind: conda
   name: lxml
-  version: 5.1.0
-  build: py312h9bf3b9e_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-5.1.0-py312h9bf3b9e_0.conda
-  sha256: 89272ef9521c8a859ef6396585e313a1f085a9d85e1579d36660b5966f43e588
-  md5: ff623d12bba9a6a4e892fa17c2a35d0b
+  version: 5.2.2
+  build: py312hb90d8a5_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/lxml-5.2.2-py312hb90d8a5_0.conda
+  sha256: fab93c7618006b5595add86b0cb12501642dcb3a295de54eef17e0dd1aaf22ae
+  md5: da3e0a20f8eb75072ad036198c37be61
   depends:
-  - libxml2 >=2.12.3,<3.0.0a0
+  - libgcc-ng >=12
+  - libxml2 >=2.12.6,<3.0a0
   - libxslt >=1.1.39,<2.0a0
   - libzlib >=1.2.13,<1.3.0a0
   - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
   - python_abi 3.12.* *_cp312
   license: BSD-3-Clause and MIT-CMU
   purls:
   - pkg:pypi/lxml
-  size: 1223959
-  timestamp: 1704724844405
-- kind: conda
-  name: lz4-c
-  version: 1.9.4
-  build: hb7217d7_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda
-  sha256: fc343b8c82efe40819b986e29ba748366514e5ab94a1e1138df195af5f45fa24
-  md5: 45505bec548634f7d05e02fb25262cb9
-  depends:
-  - libcxx >=14.0.6
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 141188
-  timestamp: 1674727268278
-- kind: conda
-  name: lz4-c
-  version: 1.9.4
-  build: hcb278e6_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda
-  sha256: 1b4c105a887f9b2041219d57036f72c4739ab9e9fe5a1486f094e58c76b31f5f
-  md5: 318b08df404f9c9be5712aaa5a6f0bb0
-  depends:
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  license: BSD-2-Clause
-  license_family: BSD
-  size: 143402
-  timestamp: 1674727076728
-- kind: conda
-  name: lzo
-  version: '2.10'
-  build: h516909a_1000
-  build_number: 1000
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2
-  sha256: 25d16e6aaa3d0b450e61d0c4fadd7c9fd17f16e2fef09b34507209342d63c9f6
-  md5: bb14fcb13341b81d5eb386423b9d2bac
-  depends:
-  - libgcc-ng >=7.5.0
-  license: GPL v2+
-  license_family: GPL2
-  size: 321113
-  timestamp: 1597681972321
-- kind: conda
-  name: lzo
-  version: '2.10'
-  build: h642e427_1000
-  build_number: 1000
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h642e427_1000.tar.bz2
-  sha256: ae029e5c16893071d29a11ddbfdbdb01b2ebf10d1785f54370934439d8b71817
-  md5: ddab5f96f5573a9bd5e24f9994fd6ec9
-  license: GPL v2+
-  license_family: GPL2
-  size: 157236
-  timestamp: 1597683217947
-- kind: conda
-  name: mamba
-  version: 1.5.8
-  build: py312h14bc7db_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/mamba-1.5.8-py312h14bc7db_0.conda
-  sha256: e4c11d2d11c7f80a4e31173942e7241701d8d7c7eb45d21df0ff7d0e12bb6132
-  md5: 298031a00a13bb7921fa37772cb31799
-  depends:
-  - conda >=24,<25
-  - libmambapy 1.5.8 py312h344e357_0
-  - openssl >=3.2.1,<4.0a0
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 65192
-  timestamp: 1711396302606
-- kind: conda
-  name: mamba
-  version: 1.5.8
-  build: py312h9460a1c_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/mamba-1.5.8-py312h9460a1c_0.conda
-  sha256: 4fcfcf73b2b3cfe7e50fac5488a3dbd51a76a9da93af79b0c5856bc3bece7589
-  md5: b82e8ad83fdeab869ef209d3f419a99c
-  depends:
-  - conda >=24,<25
-  - libmambapy 1.5.8 py312hd9e9ff6_0
-  - openssl >=3.2.1,<4.0a0
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 64618
-  timestamp: 1711395503622
+  size: 1399383
+  timestamp: 1715598656220
 - kind: conda
   name: markdown-it-py
   version: 3.0.0
@@ -2777,35 +2586,6 @@ packages:
   - pkg:pypi/mdurl
   size: 14680
   timestamp: 1704317789138
-- kind: conda
-  name: menuinst
-  version: 2.0.2
-  build: py312h7900ff3_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py312h7900ff3_0.conda
-  sha256: 39f942fb43dcd553e54f27ec55e0a2155b6ceae9f9528be1e7c2f9a9758b05e0
-  md5: acb03947d606ff797a036d31723490fc
-  depends:
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause AND MIT
-  size: 158511
-  timestamp: 1705068403609
-- kind: conda
-  name: menuinst
-  version: 2.0.2
-  build: py312h81bd7bf_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/menuinst-2.0.2-py312h81bd7bf_0.conda
-  sha256: e9f2fec42e3a6c0c46e2576b20e107f2f6b6cf26d69d7b9e563822df70eb4b0a
-  md5: 802a33b3ca10e299f2fc9d6783140cc7
-  depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause AND MIT
-  size: 159866
-  timestamp: 1705068748439
 - kind: conda
   name: more-itertools
   version: 10.2.0
@@ -2825,28 +2605,66 @@ packages:
   timestamp: 1704738585811
 - kind: conda
   name: ncurses
-  version: 6.4.20240210
-  build: h078ce10_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4.20240210-h078ce10_0.conda
-  sha256: 06f0905791575e2cd3aa961493c56e490b3d82ad9eb49f1c332bd338b0216911
-  md5: 616ae8691e6608527d0071e6766dcb81
+  version: '6.5'
+  build: h59595ed_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda
+  sha256: 4fc3b384f4072b68853a0013ea83bdfd3d66b0126e2238e1d6e1560747aa7586
+  md5: fcea371545eda051b6deafb24889fc69
+  depends:
+  - libgcc-ng >=12
   license: X11 AND BSD-3-Clause
-  size: 820249
-  timestamp: 1710866874348
+  size: 887465
+  timestamp: 1715194722503
 - kind: conda
   name: ncurses
-  version: 6.4.20240210
-  build: h59595ed_0
+  version: '6.5'
+  build: hb89a1cb_0
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-hb89a1cb_0.conda
+  sha256: 87d7cf716d9d930dab682cb57b3b8d3a61940b47d6703f3529a155c938a6990a
+  md5: b13ad5724ac9ae98b6b4fd87e4500ba4
+  license: X11 AND BSD-3-Clause
+  size: 795131
+  timestamp: 1715194898402
+- kind: conda
+  name: nh3
+  version: 0.2.17
+  build: py312h4b3b743_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4.20240210-h59595ed_0.conda
-  sha256: aa0f005b6727aac6507317ed490f0904430584fa8ca722657e7f0fb94741de81
-  md5: 97da8860a0da5413c7c98a3b3838a645
+  url: https://conda.anaconda.org/conda-forge/linux-64/nh3-0.2.17-py312h4b3b743_0.conda
+  sha256: 60067873dda1f5433fee8e2b7c02a32785153d2be73c75cfffae47ca4566a9c2
+  md5: cfa305e03624c82d451a5ef250960bbd
   depends:
   - libgcc-ng >=12
-  license: X11 AND BSD-3-Clause
-  size: 895669
-  timestamp: 1710866638986
+  - python >=3.12,<3.13.0a0
+  - python_abi 3.12.* *_cp312
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/nh3
+  size: 607053
+  timestamp: 1711545731955
+- kind: conda
+  name: nh3
+  version: 0.2.17
+  build: py312h5280bc4_0
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/nh3-0.2.17-py312h5280bc4_0.conda
+  sha256: b5ff8a687db7ef51fe5f854fe37975f08b70a2ad0ff585d9444e4e3bd77b3d95
+  md5: 7a6d211257e3d264516ae4d67ce181a4
+  depends:
+  - python >=3.12,<3.13.0a0
+  - python >=3.12,<3.13.0a0 *_cpython
+  - python_abi 3.12.* *_cp312
+  constrains:
+  - __osx >=11.0
+  license: MIT
+  license_family: MIT
+  purls:
+  - pkg:pypi/nh3
+  size: 582437
+  timestamp: 1711545995406
 - kind: conda
   name: nodeenv
   version: 1.8.0
@@ -2861,34 +2679,34 @@ packages:
   - setuptools
   license: BSD-3-Clause
   license_family: BSD
+  purls:
+  - pkg:pypi/nodeenv
   size: 34358
   timestamp: 1683893151613
 - kind: conda
   name: openssl
-  version: 3.2.1
-  build: h0d3ecfb_1
-  build_number: 1
+  version: 3.3.0
+  build: h0d3ecfb_0
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_1.conda
-  sha256: 519dc941d7ab0ebf31a2878d85c2f444450e7c5f6f41c4d07252c6bb3417b78b
-  md5: eb580fb888d93d5d550c557323ac5cee
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-h0d3ecfb_0.conda
+  sha256: 51f9be8fe929c2bb3243cd0707b6dfcec27541f8284b4bd9b063c288fc46f482
+  md5: 25b0e522c3131886a637e347b2ca0c0f
   depends:
   - ca-certificates
   constrains:
   - pyopenssl >=22.1
   license: Apache-2.0
   license_family: Apache
-  size: 2855250
-  timestamp: 1710793435903
+  size: 2888226
+  timestamp: 1714466346030
 - kind: conda
   name: openssl
-  version: 3.2.1
-  build: hd590300_1
-  build_number: 1
+  version: 3.3.0
+  build: hd590300_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda
-  sha256: 2c689444ed19a603be457284cf2115ee728a3fafb7527326e96054dee7cdc1a7
-  md5: 9d731343cff6ee2e5a25c4a091bf8e2a
+  url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-hd590300_0.conda
+  sha256: fdbf05e4db88c592366c90bb82e446edbe33c6e49e5130d51c580b2629c0b5d5
+  md5: c0f3abb4a16477208bbd43a39bd56f18
   depends:
   - ca-certificates
   - libgcc-ng >=12
@@ -2896,8 +2714,8 @@ packages:
   - pyopenssl >=22.1
   license: Apache-2.0
   license_family: Apache
-  size: 2865379
-  timestamp: 1710793235846
+  size: 2895187
+  timestamp: 1714466138265
 - kind: conda
   name: packaging
   version: '24.0'
@@ -2916,48 +2734,38 @@ packages:
   size: 49832
   timestamp: 1710076089469
 - kind: conda
-  name: patch
-  version: 2.7.6
-  build: h27ca646_1002
-  build_number: 1002
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/patch-2.7.6-h27ca646_1002.tar.bz2
-  sha256: 45316f216976a35180e1973840de08013f075bc94a9a57ae9a9e4e52ea2224d4
-  md5: 129d8d6f5a313a5c3e9ed39710d71147
-  license: GPL-3.0-or-later
-  license_family: GPL
-  size: 130036
-  timestamp: 1612446664446
-- kind: conda
-  name: patch
-  version: 2.7.6
-  build: h7f98852_1002
-  build_number: 1002
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/patch-2.7.6-h7f98852_1002.tar.bz2
-  sha256: fc30d1b643c35d82abd294cde6b34f7b9e952856c0386f4f069c3a2b7feb28dd
-  md5: 4c1bbbec45149a186b915c67d086ed3b
+  name: pathspec
+  version: 0.12.1
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda
+  sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d
+  md5: 17064acba08d3686f1135b5ec1b32b12
   depends:
-  - libgcc-ng >=9.3.0
-  license: GPL-3.0-or-later
-  license_family: GPL
-  size: 123495
-  timestamp: 1612446599889
+  - python >=3.7
+  license: MPL-2.0
+  license_family: MOZILLA
+  purls:
+  - pkg:pypi/pathspec
+  size: 41173
+  timestamp: 1702250135032
 - kind: conda
-  name: patchelf
-  version: 0.17.2
-  build: h58526e2_0
+  name: pcre2
+  version: '10.43'
+  build: hcad00b1_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda
-  sha256: eb355ac225be2f698e19dba4dcab7cb0748225677a9799e9cc8e4cadc3cb738f
-  md5: ba76a6a448819560b5f8b08a9c74f415
+  url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.43-hcad00b1_0.conda
+  sha256: 766dd986a7ed6197676c14699000bba2625fd26c8a890fcb7a810e5cf56155bc
+  md5: 8292dea9e022d9610a11fce5e0896ed8
   depends:
-  - libgcc-ng >=7.5.0
-  - libstdcxx-ng >=7.5.0
-  license: GPL-3.0-or-later
-  license_family: GPL
-  size: 94048
-  timestamp: 1673473024463
+  - bzip2 >=1.0.8,<2.0a0
+  - libgcc-ng >=12
+  - libzlib >=1.2.13,<1.3.0a0
+  license: BSD-3-Clause
+  license_family: BSD
+  size: 950847
+  timestamp: 1708118050286
 - kind: conda
   name: pdbpp
   version: 0.10.3
@@ -2974,8 +2782,27 @@ packages:
   - wmctrl
   license: BSD-3-Clause
   license_family: BSD
+  purls:
+  - pkg:pypi/pdbpp
   size: 25010
   timestamp: 1626016866544
+- kind: conda
+  name: pexpect
+  version: 4.9.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
+  sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e
+  md5: 629f3203c99b32e0988910c93e77f3b6
+  depends:
+  - ptyprocess >=0.5
+  - python >=3.7
+  license: ISC
+  purls:
+  - pkg:pypi/pexpect
+  size: 53600
+  timestamp: 1706113273252
 - kind: conda
   name: pkginfo
   version: 1.10.0
@@ -2993,66 +2820,49 @@ packages:
   - pkg:pypi/pkginfo
   size: 28142
   timestamp: 1709561205511
-- kind: conda
-  name: pkgutil-resolve-name
-  version: 1.3.10
-  build: pyhd8ed1ab_1
-  build_number: 1
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
-  sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a
-  md5: 405678b942f2481cecdb3e010f4925d9
-  depends:
-  - python >=3.6
-  license: MIT AND PSF-2.0
-  purls:
-  - pkg:pypi/pkgutil-resolve-name
-  size: 10778
-  timestamp: 1694617398467
 - kind: conda
   name: platformdirs
-  version: 4.2.0
+  version: 4.2.1
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda
-  sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3
-  md5: a0bc3eec34b0fab84be6b2da94e98e20
+  url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.1-pyhd8ed1ab_0.conda
+  sha256: 5718fef2954f016834058ae1d359e407ff8e2e847b35ab43d5d91bcf22d5578d
+  md5: d478a8a3044cdff1aa6e62f9269cefe0
   depends:
   - python >=3.8
   license: MIT
   license_family: MIT
   purls:
   - pkg:pypi/platformdirs
-  size: 20210
-  timestamp: 1706713564353
+  size: 20248
+  timestamp: 1713912912262
 - kind: conda
   name: pluggy
-  version: 1.4.0
+  version: 1.5.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda
-  sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0
-  md5: 139e9feb65187e916162917bb2484976
+  url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+  sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26
+  md5: d3483c8fc2dc2cc3f5cf43e26d60cabf
   depends:
   - python >=3.8
   license: MIT
   license_family: MIT
   purls:
   - pkg:pypi/pluggy
-  size: 23384
-  timestamp: 1706116931972
+  size: 23815
+  timestamp: 1713667175451
 - kind: conda
   name: pre-commit
-  version: 3.7.0
+  version: 3.7.1
   build: pyha770c72_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.0-pyha770c72_0.conda
-  sha256: b7a1d56fb1374df77019521bbcbe109ff17337181c4d392918e5ec1a10a9df87
-  md5: 846ba0877cda9c4f11e13720cacd1968
+  url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.7.1-pyha770c72_0.conda
+  sha256: 689c169ce6ed5d516d8524cc1e6ef2687dff19747c1ed1ee9b347a71f47ff12d
+  md5: 724bc4489c1174fc8e3233b0624fa51f
   depends:
   - cfgv >=2.0.0
   - identify >=1.0.0
@@ -3062,161 +2872,26 @@ packages:
   - virtualenv >=20.10.0
   license: MIT
   license_family: MIT
-  size: 180574
-  timestamp: 1711480432386
+  purls:
+  - pkg:pypi/pre-commit
+  size: 179748
+  timestamp: 1715432871404
 - kind: conda
-  name: prompt-toolkit
-  version: 3.0.42
-  build: pyha770c72_0
+  name: ptyprocess
+  version: 0.7.0
+  build: pyhd3deb0d_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda
-  sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16
-  md5: 0bf64bf10eee21f46ac83c161917fa86
-  depends:
-  - python >=3.7
-  - wcwidth
-  constrains:
-  - prompt_toolkit 3.0.42
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 270398
-  timestamp: 1702399557137
-- kind: conda
-  name: prompt_toolkit
-  version: 3.0.42
-  build: hd8ed1ab_0
-  subdir: noarch
-  noarch: generic
-  url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda
-  sha256: fd2185d501bf34cb4c121f2f5ade9157ac75e1644a9da81355c4c8f9c1b82d4d
-  md5: 85a2189ecd2fcdd86e92b2d4ea8fe461
-  depends:
-  - prompt-toolkit >=3.0.42,<3.0.43.0a0
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 6846
-  timestamp: 1702399567048
-- kind: conda
-  name: psutil
-  version: 5.9.8
-  build: py312h98912ed_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py312h98912ed_0.conda
-  sha256: 27e7f8f5d30c74439f39d61e21ac14c0cd03b5d55f7bf9f946fb619016f73c61
-  md5: 3facaca6cc0f7988df3250efccd32da3
-  depends:
-  - libgcc-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause
-  license_family: BSD
-  purls:
-  - pkg:pypi/psutil
-  size: 486243
-  timestamp: 1705722547420
-- kind: conda
-  name: psutil
-  version: 5.9.8
-  build: py312he37b823_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.8-py312he37b823_0.conda
-  sha256: a996bd5f878da264d1d3ba7fde717b0a2c158a86645efb1e899d087cca74832d
-  md5: cd6e99b9c5a623735161973b5f693a86
+  url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
+  sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a
+  md5: 359eeb6536da0e687af562ed265ec263
   depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: BSD-3-Clause
-  license_family: BSD
+  - python
+  license: ISC
   purls:
-  - pkg:pypi/psutil
-  size: 499490
-  timestamp: 1705722767772
-- kind: conda
-  name: py-lief
-  version: 0.14.1
-  build: py312h2721eaf_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/py-lief-0.14.1-py312h2721eaf_1.conda
-  sha256: 09e288c5a14f7469e551ab810e6e9e24c8fbe15e3e02004750e9754ade2979f6
-  md5: b157344e38369e52964a83bf85ef93d4
-  depends:
-  - __osx >=11.0
-  - libcxx >=16
-  - liblief 0.14.1 h3f3aa29_1
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: Apache-2.0
-  license_family: Apache
-  size: 539467
-  timestamp: 1711566025401
-- kind: conda
-  name: py-lief
-  version: 0.14.1
-  build: py312h7070661_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/py-lief-0.14.1-py312h7070661_1.conda
-  sha256: 8410ab9d798a10299133a0e105c3c50cf3cde1cc21bbd79eae3df6f8fd56e289
-  md5: f69fc698e1625960fd3cc5cc796205f6
-  depends:
-  - libgcc-ng >=12
-  - liblief 0.14.1 hac33072_1
-  - libstdcxx-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: Apache-2.0
-  license_family: Apache
-  size: 758297
-  timestamp: 1711563364357
-- kind: conda
-  name: pybind11-abi
-  version: '4'
-  build: hd8ed1ab_3
-  build_number: 3
-  subdir: noarch
-  noarch: generic
-  url: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
-  sha256: d4fb485b79b11042a16dc6abfb0c44c4f557707c2653ac47c81e5d32b24a3bb0
-  md5: 878f923dd6acc8aeb47a75da6c4098be
-  license: BSD-3-Clause
-  license_family: BSD
-  size: 9906
-  timestamp: 1610372835205
-- kind: conda
-  name: pycosat
-  version: 0.6.6
-  build: py312h02f2b3b_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/pycosat-0.6.6-py312h02f2b3b_0.conda
-  sha256: 79622e905c3185fe96c57bf6c57b20c545e86b3a6e7da88f24dc50d03ddbe3a6
-  md5: 4d07092345b6e66e580ce3cd9141c6da
-  depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: MIT
-  license_family: MIT
-  size: 86424
-  timestamp: 1696356256622
-- kind: conda
-  name: pycosat
-  version: 0.6.6
-  build: py312h98912ed_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py312h98912ed_0.conda
-  sha256: b973d39eb9fd9625fe97e2fbb4b6f758ea47aa288f5f8c7769e3f36a3acbb5da
-  md5: 8f1c372e7b843167be885dc8229931c1
-  depends:
-  - libgcc-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: MIT
-  license_family: MIT
-  size: 88549
-  timestamp: 1696355931150
+  - pkg:pypi/ptyprocess
+  size: 16546
+  timestamp: 1609419417991
 - kind: conda
   name: pycparser
   version: '2.22'
@@ -3236,21 +2911,21 @@ packages:
   timestamp: 1711811634025
 - kind: conda
   name: pygments
-  version: 2.17.2
+  version: 2.18.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda
-  sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257
-  md5: 140a7f159396547e9799aa98f9f0742e
+  url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+  sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b
+  md5: b7f5c092b8f9800150d998a71b76d5a1
   depends:
-  - python >=3.7
+  - python >=3.8
   license: BSD-2-Clause
   license_family: BSD
   purls:
   - pkg:pypi/pygments
-  size: 860425
-  timestamp: 1700608076927
+  size: 879295
+  timestamp: 1714846885370
 - kind: conda
   name: pyrepl
   version: 0.9.0
@@ -3312,19 +2987,19 @@ packages:
   timestamp: 1661604969727
 - kind: conda
   name: pytest
-  version: 8.1.1
+  version: 8.2.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda
-  sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73
-  md5: 94ff09cdedcb7b17e9cd5097ee2cfcff
+  url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.2.0-pyhd8ed1ab_0.conda
+  sha256: 02227fea7b50132a75fb223c2d796306ffebd4dc6324897455f17cb54d16683d
+  md5: 088ff7e08f4f10a06190468048c2a353
   depends:
   - colorama
   - exceptiongroup >=1.0.0rc8
   - iniconfig
   - packaging
-  - pluggy <2.0,>=1.4
+  - pluggy <2.0,>=1.5
   - python >=3.8
   - tomli >=1
   constrains:
@@ -3333,8 +3008,8 @@ packages:
   license_family: MIT
   purls:
   - pkg:pypi/pytest
-  size: 255523
-  timestamp: 1709992719691
+  size: 257122
+  timestamp: 1714308481448
 - kind: conda
   name: pytest-cov
   version: 5.0.0
@@ -3351,53 +3026,112 @@ packages:
   - toml
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/pytest-cov
   size: 25507
   timestamp: 1711411153367
 - kind: conda
   name: python
-  version: 3.12.2
-  build: hab00c5b_0_cpython
+  version: 3.11.9
+  build: h932a869_0_cpython
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.9-h932a869_0_cpython.conda
+  sha256: a436ceabde1f056a0ac3e347dadc780ee2a135a421ddb6e9a469370769829e3c
+  md5: 293e0713ae804b5527a673e7605c04fc
+  depends:
+  - __osx >=11.0
+  - bzip2 >=1.0.8,<2.0a0
+  - libexpat >=2.6.2,<3.0a0
+  - libffi >=3.4,<4.0a0
+  - libsqlite >=3.45.3,<4.0a0
+  - libzlib >=1.2.13,<1.3.0a0
+  - ncurses >=6.4.20240210,<7.0a0
+  - openssl >=3.2.1,<4.0a0
+  - readline >=8.2,<9.0a0
+  - tk >=8.6.13,<8.7.0a0
+  - tzdata
+  - xz >=5.2.6,<6.0a0
+  constrains:
+  - python_abi 3.11.* *_cp311
+  license: Python-2.0
+  size: 14644189
+  timestamp: 1713552154779
+- kind: conda
+  name: python
+  version: 3.11.9
+  build: hb806964_0_cpython
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.2-hab00c5b_0_cpython.conda
-  sha256: ddb7a2d8d78046bda5d7631e6814f9468d2eb054e10f86f4648c9d1fdaa30c0f
-  md5: ad7b68400f3a6ebe72b00be093c7f301
+  url: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.9-hb806964_0_cpython.conda
+  sha256: 177f33a1fb8d3476b38f73c37b42f01c0b014fa0e039a701fd9f83d83aae6d40
+  md5: ac68acfa8b558ed406c75e98d3428d7b
   depends:
   - bzip2 >=1.0.8,<2.0a0
   - ld_impl_linux-64 >=2.36.1
-  - libexpat >=2.5.0,<3.0a0
+  - libexpat >=2.6.2,<3.0a0
   - libffi >=3.4,<4.0a0
   - libgcc-ng >=12
   - libnsl >=2.0.1,<2.1.0a0
-  - libsqlite >=3.45.1,<4.0a0
+  - libsqlite >=3.45.3,<4.0a0
   - libuuid >=2.38.1,<3.0a0
   - libxcrypt >=4.4.36
   - libzlib >=1.2.13,<1.3.0a0
-  - ncurses >=6.4,<7.0a0
+  - ncurses >=6.4.20240210,<7.0a0
   - openssl >=3.2.1,<4.0a0
   - readline >=8.2,<9.0a0
   - tk >=8.6.13,<8.7.0a0
   - tzdata
   - xz >=5.2.6,<6.0a0
   constrains:
-  - python_abi 3.12.* *_cp312
+  - python_abi 3.11.* *_cp311
   license: Python-2.0
-  size: 32312631
-  timestamp: 1708118077305
+  size: 30884494
+  timestamp: 1713553104915
 - kind: conda
   name: python
-  version: 3.12.2
-  build: hdf0ec26_0_cpython
+  version: 3.12.3
+  build: h4a7b5fc_0_cpython
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.2-hdf0ec26_0_cpython.conda
-  sha256: ccd6c55a286d51d907c878ed2bfa7d1becce0fee71374a9386c5eb90d803ac72
-  md5: 85e91138ae921a2771f57a50120272bd
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.3-h4a7b5fc_0_cpython.conda
+  sha256: c761fb3713ea66bce3889b33b6f400afb2dd192d1fc2686446e9d8166cfcec6b
+  md5: 8643ab37bece6ae8f112464068d9df9c
+  depends:
+  - __osx >=11.0
+  - bzip2 >=1.0.8,<2.0a0
+  - libexpat >=2.6.2,<3.0a0
+  - libffi >=3.4,<4.0a0
+  - libsqlite >=3.45.2,<4.0a0
+  - libzlib >=1.2.13,<1.3.0a0
+  - ncurses >=6.4.20240210,<7.0a0
+  - openssl >=3.2.1,<4.0a0
+  - readline >=8.2,<9.0a0
+  - tk >=8.6.13,<8.7.0a0
+  - tzdata
+  - xz >=5.2.6,<6.0a0
+  constrains:
+  - python_abi 3.12.* *_cp312
+  license: Python-2.0
+  size: 13207557
+  timestamp: 1713206576646
+- kind: conda
+  name: python
+  version: 3.12.3
+  build: hab00c5b_0_cpython
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda
+  sha256: f9865bcbff69f15fd89a33a2da12ad616e98d65ce7c83c644b92e66e5016b227
+  md5: 2540b74d304f71d3e89c81209db4db84
   depends:
   - bzip2 >=1.0.8,<2.0a0
-  - libexpat >=2.5.0,<3.0a0
+  - ld_impl_linux-64 >=2.36.1
+  - libexpat >=2.6.2,<3.0a0
   - libffi >=3.4,<4.0a0
-  - libsqlite >=3.45.1,<4.0a0
+  - libgcc-ng >=12
+  - libnsl >=2.0.1,<2.1.0a0
+  - libsqlite >=3.45.2,<4.0a0
+  - libuuid >=2.38.1,<3.0a0
+  - libxcrypt >=4.4.36
   - libzlib >=1.2.13,<1.3.0a0
-  - ncurses >=6.4,<7.0a0
+  - ncurses >=6.4.20240210,<7.0a0
   - openssl >=3.2.1,<4.0a0
   - readline >=8.2,<9.0a0
   - tk >=8.6.13,<8.7.0a0
@@ -3406,8 +3140,8 @@ packages:
   constrains:
   - python_abi 3.12.* *_cp312
   license: Python-2.0
-  size: 13085901
-  timestamp: 1708117361381
+  size: 31991381
+  timestamp: 1713208036041
 - kind: conda
   name: python-dateutil
   version: 2.9.0
@@ -3441,6 +3175,8 @@ packages:
   - six
   license: GPL-3.0-or-later
   license_family: GPL
+  purls:
+  - pkg:pypi/python-debian
   size: 66742
   timestamp: 1572978048259
 - kind: conda
@@ -3463,62 +3199,35 @@ packages:
   size: 86889
   timestamp: 1705315869275
 - kind: conda
-  name: python-libarchive-c
-  version: '5.1'
-  build: py312h7900ff3_0
+  name: python_abi
+  version: '3.11'
+  build: 4_cp311
+  build_number: 4
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/python-libarchive-c-5.1-py312h7900ff3_0.conda
-  sha256: 243538d18db27dbb2c27453146c81386acc7909f32f9b7845980ad843ca9ed66
-  md5: 5c766786ca3f47e406785553cfc05ce7
-  depends:
-  - libarchive
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: CC0-1.0
-  license_family: CC
-  purls:
-  - pkg:pypi/libarchive-c
-  size: 69718
-  timestamp: 1709828706620
+  url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda
+  sha256: 0be3ac1bf852d64f553220c7e6457e9c047dfb7412da9d22fbaa67e60858b3cf
+  md5: d786502c97404c94d7d58d258a445a65
+  constrains:
+  - python 3.11.* *_cpython
+  license: BSD-3-Clause
+  license_family: BSD
+  size: 6385
+  timestamp: 1695147338551
 - kind: conda
-  name: python-libarchive-c
-  version: '5.1'
-  build: py312h81bd7bf_0
+  name: python_abi
+  version: '3.11'
+  build: 4_cp311
+  build_number: 4
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/python-libarchive-c-5.1-py312h81bd7bf_0.conda
-  sha256: ce2f6ea609799d379d2cc1fca01266b4d0af2f29cc7b5987f14a5440ef5c5f93
-  md5: 9228b410f4d130823fc86407861c0527
-  depends:
-  - libarchive
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: CC0-1.0
-  license_family: CC
-  purls:
-  - pkg:pypi/libarchive-c
-  size: 70407
-  timestamp: 1709829093907
-- kind: conda
-  name: python-slugify
-  version: 8.0.4
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_0.conda
-  sha256: a1270bfd4f1d648766c8f95403f208e50d34af94761bc553a960102c6bff9fa0
-  md5: 4b11845622b3c3178c0e989235b53975
-  depends:
-  - python >=3.7
-  - text-unidecode >=1.3
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.11-4_cp311.conda
+  sha256: 4837089c477b9b84fa38a17f453e6634e68237267211b27a8a2f5ccd847f4e55
+  md5: 8d3751bc73d3bbb66f216fa2331d5649
   constrains:
-  - slugify <0
-  - awesome-slugify <0
-  - unidecode >=1.1.1
-  license: MIT
-  license_family: MIT
-  size: 15127
-  timestamp: 1707425775664
+  - python 3.11.* *_cpython
+  license: BSD-3-Clause
+  license_family: BSD
+  size: 6492
+  timestamp: 1695147509940
 - kind: conda
   name: python_abi
   version: '3.12'
@@ -3582,6 +3291,8 @@ packages:
   - yaml >=0.2.5,<0.3.0a0
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/pyyaml
   size: 182705
   timestamp: 1695373895409
 - kind: conda
@@ -3600,6 +3311,8 @@ packages:
   - yaml >=0.2.5,<0.3.0a0
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/pyyaml
   size: 196583
   timestamp: 1695373632212
 - kind: conda
@@ -3634,86 +3347,26 @@ packages:
   size: 250351
   timestamp: 1679532511311
 - kind: conda
-  name: referencing
-  version: 0.34.0
+  name: readme_renderer
+  version: '42.0'
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda
-  sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672
-  md5: e4492c22e314be5c75db3469e3bbf3d9
-  depends:
-  - attrs >=22.2.0
+  url: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-42.0-pyhd8ed1ab_0.conda
+  sha256: 61e03765ebdb168fc8747e8183db4067b55888c89d59e0f4f53b5b4046846cda
+  md5: fdc16f5dc3a911d8f43f64f814a45961
+  depends:
+  - cmarkgfm >=0.8.0
+  - docutils >=0.13.1
+  - nh3 >=0.2.14
+  - pygments >=2.5.1
   - python >=3.8
-  - rpds-py >=0.7.0
-  license: MIT
-  license_family: MIT
+  license: Apache-2.0
+  license_family: APACHE
   purls:
-  - pkg:pypi/referencing
-  size: 42071
-  timestamp: 1710763821612
-- kind: conda
-  name: reproc
-  version: 14.2.4.post0
-  build: h93a5062_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-14.2.4.post0-h93a5062_1.conda
-  sha256: e12534c909613b56c539eed6f4cd55da2eb03086435101fad79c383a9c3df527
-  md5: ef7ae6d7bb50c8c735551d825e1ea287
-  license: MIT
-  license_family: MIT
-  size: 32026
-  timestamp: 1698242638367
-- kind: conda
-  name: reproc
-  version: 14.2.4.post0
-  build: hd590300_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.4.post0-hd590300_1.conda
-  sha256: bb2e4e0ce93bc61bc7c03c4f66abcb8161b0a4f1c41b5156cf1e5e17892b05d8
-  md5: 82ca53502dfd5a64a80dee76dae14685
-  depends:
-  - libgcc-ng >=12
-  license: MIT
-  license_family: MIT
-  size: 33928
-  timestamp: 1698242272153
-- kind: conda
-  name: reproc-cpp
-  version: 14.2.4.post0
-  build: h59595ed_1
-  build_number: 1
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.4.post0-h59595ed_1.conda
-  sha256: 8f0c6852471c0f2b02ab21d7c2877e30fc7f4d7d8034ca90bd9fdc3a22277fe9
-  md5: 715e1d720ec1a03715bebd237972fca5
-  depends:
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  - reproc 14.2.4.post0 hd590300_1
-  license: MIT
-  license_family: MIT
-  size: 25379
-  timestamp: 1698242302911
-- kind: conda
-  name: reproc-cpp
-  version: 14.2.4.post0
-  build: h965bd2d_1
-  build_number: 1
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/reproc-cpp-14.2.4.post0-h965bd2d_1.conda
-  sha256: 83736a55ff9cf3a54591aa44c3ee1181cd570c0a452b8d8a2ab113f3e0b0974b
-  md5: f81d00496e13ee828f84b3ef17e41346
-  depends:
-  - __osx >=10.9
-  - libcxx >=16.0.6
-  - reproc 14.2.4.post0 h93a5062_1
-  license: MIT
-  license_family: MIT
-  size: 24527
-  timestamp: 1698242706531
+  - pkg:pypi/readme-renderer
+  size: 17373
+  timestamp: 1694242843889
 - kind: conda
   name: requests
   version: 2.31.0
@@ -3778,6 +3431,23 @@ packages:
   - pkg:pypi/reuse
   size: 146563
   timestamp: 1705680540750
+- kind: conda
+  name: rfc3986
+  version: 2.0.0
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_0.tar.bz2
+  sha256: dd6bfb7c4248ba7612f2e6e4a066d6804ba96dfcaeddf43475a2c846ccfcc396
+  md5: d337886e38f965bf97aaec382ff6db00
+  depends:
+  - python >=3.4
+  license: Apache-2.0
+  license_family: APACHE
+  purls:
+  - pkg:pypi/rfc3986
+  size: 34075
+  timestamp: 1641825125307
 - kind: conda
   name: rich
   version: 13.7.1
@@ -3794,153 +3464,20 @@ packages:
   - typing_extensions >=4.0.0,<5.0.0
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/rich
   size: 184347
   timestamp: 1709150578093
-- kind: conda
-  name: ripgrep
-  version: 14.1.0
-  build: h5ef7bb8_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ripgrep-14.1.0-h5ef7bb8_0.conda
-  sha256: 9a44c36b8d26fee6efee90bb4c2976ea3f9d29ed028f0188fb51b36525635f75
-  md5: e24b0b5c662ec0ba685c5ce7cb38ef42
-  constrains:
-  - __osx >=11.0
-  license: MIT
-  license_family: MIT
-  size: 1420792
-  timestamp: 1705521277663
-- kind: conda
-  name: ripgrep
-  version: 14.1.0
-  build: he8a937b_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/ripgrep-14.1.0-he8a937b_0.conda
-  sha256: 4fcf37724b87440765cb3c6cf573e99d12fc631001426a0309d132f495c3d62a
-  md5: 5a476f7033a8a1b9175626b5ebf86d1d
-  depends:
-  - libgcc-ng >=12
-  license: MIT
-  license_family: MIT
-  size: 1683808
-  timestamp: 1705520837423
-- kind: conda
-  name: rpds-py
-  version: 0.18.0
-  build: py312h4b3b743_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.18.0-py312h4b3b743_0.conda
-  sha256: 7d8ca38e56db7f803dbc42240bd1918d6084f01cfd56e252a7121c5cdf850191
-  md5: cc8165b34bdb002ade83b068f44e5774
-  depends:
-  - libgcc-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/rpds-py
-  size: 919366
-  timestamp: 1707922953470
-- kind: conda
-  name: rpds-py
-  version: 0.18.0
-  build: py312h77200ec_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.18.0-py312h77200ec_0.conda
-  sha256: 3848b40a75246402ce99793cca8f0974c835952be3e215cbe4e6d6b8bbd49c30
-  md5: d28b1b0c190d1c0166449b1641801842
-  depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  constrains:
-  - __osx >=11.0
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/rpds-py
-  size: 294636
-  timestamp: 1707923464809
-- kind: conda
-  name: ruamel.yaml
-  version: 0.18.6
-  build: py312h98912ed_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py312h98912ed_0.conda
-  sha256: 26856daba883254736b7f3767c08f445b5d010eebbf4fc7aa384ee80e24aa663
-  md5: a99a06a875138829ef65f44bbe2c30ca
-  depends:
-  - libgcc-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  - ruamel.yaml.clib >=0.1.2
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/ruamel-yaml
-  size: 268015
-  timestamp: 1707298336196
-- kind: conda
-  name: ruamel.yaml
-  version: 0.18.6
-  build: py312he37b823_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml-0.18.6-py312he37b823_0.conda
-  sha256: 4a27b50445842e97a31e3f412816d4a0d576b4f1ee327b9a892a183ba5c60f6f
-  md5: cb9f9b4797001b2c52383f4007fa1f4b
-  depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  - ruamel.yaml.clib >=0.1.2
-  license: MIT
-  license_family: MIT
-  purls:
-  - pkg:pypi/ruamel-yaml
-  size: 268637
-  timestamp: 1707298502612
-- kind: conda
-  name: ruamel.yaml.clib
-  version: 0.2.8
-  build: py312h98912ed_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py312h98912ed_0.conda
-  sha256: 5965302881d8b1049291e3ba3912286cdc72cb82303230cbbf0a048c6f6dd7c1
-  md5: 05f31c2a79ba61df8d6d903ce4a4ce7b
-  depends:
-  - libgcc-ng >=12
-  - python >=3.12,<3.13.0a0
-  - python_abi 3.12.* *_cp312
-  license: MIT
-  license_family: MIT
-  size: 135640
-  timestamp: 1707314642857
-- kind: conda
-  name: ruamel.yaml.clib
-  version: 0.2.8
-  build: py312he37b823_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.8-py312he37b823_0.conda
-  sha256: c3138824f484cca2804d22758c75965b578cd35b35243ff02e64da06bda03477
-  md5: 2fa02324046cfcb7a67fae30fd06a945
-  depends:
-  - python >=3.12,<3.13.0a0
-  - python >=3.12,<3.13.0a0 *_cpython
-  - python_abi 3.12.* *_cp312
-  license: MIT
-  license_family: MIT
-  size: 111221
-  timestamp: 1707315016121
 - kind: conda
   name: ruff
-  version: 0.3.5
-  build: py312h1ae9fbf_0
+  version: 0.4.4
+  build: py312h3402d49_0
   subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.3.5-py312h1ae9fbf_0.conda
-  sha256: 5296fa79876620d8265163b57a718ed17c271c05e95281fdae722591349e146b
-  md5: 0f3eea1aaceaeefe6007431c3ed547c5
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.4.4-py312h3402d49_0.conda
+  sha256: 09f47bd451076a28db84ceb9552d9c318402d8768b12a466cb503a39600da905
+  md5: ed152476a82a8ebae71ce4eb335cb725
   depends:
+  - __osx >=11.0
   - libcxx >=16
   - python >=3.12,<3.13.0a0
   - python >=3.12,<3.13.0a0 *_cpython
@@ -3951,16 +3488,16 @@ packages:
   license_family: MIT
   purls:
   - pkg:pypi/ruff
-  size: 5771748
-  timestamp: 1712000754650
+  size: 5808812
+  timestamp: 1715290154581
 - kind: conda
   name: ruff
-  version: 0.3.5
-  build: py312h9118e91_0
+  version: 0.4.4
+  build: py312h5715c7c_0
   subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.3.5-py312h9118e91_0.conda
-  sha256: fe8320ae9f369adb60990ab5e2d55246be58b1bb569f6753f8e566e958fc5475
-  md5: a02f3dd98086ac515702e68e7fb88f62
+  url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.4.4-py312h5715c7c_0.conda
+  sha256: 23795ee023595be9e5c52736b280de4a2adb2082993615ee05e71e563628b266
+  md5: b217a3a08f3cc3275822367a0a9abb54
   depends:
   - libgcc-ng >=12
   - libstdcxx-ng >=12
@@ -3970,39 +3507,63 @@ packages:
   license_family: MIT
   purls:
   - pkg:pypi/ruff
-  size: 6285718
-  timestamp: 1711999610306
+  size: 6280363
+  timestamp: 1715289943071
+- kind: conda
+  name: secretstorage
+  version: 3.3.3
+  build: py312h7900ff3_2
+  build_number: 2
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_2.conda
+  sha256: 0479e3f8c8e90049a6d92d4c7e67916c6d6cdafd11a1a31c54c785cce44aeb20
+  md5: 39067833cbb620066d492f8bd6f11dbf
+  depends:
+  - cryptography
+  - dbus
+  - jeepney >=0.6
+  - python >=3.12.0rc3,<3.13.0a0
+  - python_abi 3.12.* *_cp312
+  license: BSD-3-Clause
+  license_family: BSD
+  purls:
+  - pkg:pypi/secretstorage
+  size: 31766
+  timestamp: 1695551875966
 - kind: conda
   name: setuptools
-  version: 69.2.0
+  version: 69.5.1
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda
-  sha256: 78a75c75a5dacda6de5f4056c9c990141bdaf4f64245673a590594d00bc63713
-  md5: da214ecd521a720a9d521c68047682dc
+  url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda
+  sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7
+  md5: 7462280d81f639363e6e63c81276bd9e
   depends:
   - python >=3.8
   license: MIT
   license_family: MIT
   purls:
   - pkg:pypi/setuptools
-  size: 471183
-  timestamp: 1710344615844
+  size: 501790
+  timestamp: 1713094963112
 - kind: conda
-  name: sigtool
-  version: 0.1.3
-  build: h44b9a77_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h44b9a77_0.tar.bz2
-  sha256: 70791ae00a3756830cb50451db55f63e2a42a2fa2a8f1bab1ebd36bbb7d55bff
-  md5: 4a2cac04f86a4540b8c9b8d8f597848f
+  name: shellingham
+  version: 1.5.4
+  build: pyhd8ed1ab_0
+  subdir: noarch
+  noarch: python
+  url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
+  sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb
+  md5: d08db09a552699ee9e7eec56b4eb3899
   depends:
-  - openssl >=3.0.0,<4.0a0
+  - python >=3.7
   license: MIT
   license_family: MIT
-  size: 210264
-  timestamp: 1643442231687
+  purls:
+  - pkg:pypi/shellingham
+  size: 14568
+  timestamp: 1698144516278
 - kind: conda
   name: six
   version: 1.16.0
@@ -4091,18 +3652,18 @@ packages:
   timestamp: 1693929424267
 - kind: conda
   name: sphinx
-  version: 7.2.6
+  version: 7.3.7
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda
-  sha256: 665d1fe6d20c6cc672ff20e6ebb405860f878b487d3d8d86a5952733fb7bbc42
-  md5: bbfd1120d1824d2d073bc65935f0e4c0
+  url: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.3.7-pyhd8ed1ab_0.conda
+  sha256: 41101e2b0b8722087f06bd73251ba95ef89db515982b6a89aeebfa98ebcb65a1
+  md5: 7b1465205e28d75d2c0e1a868ee00a67
   depends:
-  - alabaster >=0.7,<0.8
+  - alabaster >=0.7.14,<0.8.dev0
   - babel >=2.9
   - colorama >=0.4.5
-  - docutils >=0.18.1,<0.21
+  - docutils >=0.18.1,<0.22
   - imagesize >=1.3
   - importlib-metadata >=4.8
   - jinja2 >=3.0
@@ -4117,30 +3678,31 @@ packages:
   - sphinxcontrib-jsmath
   - sphinxcontrib-qthelp
   - sphinxcontrib-serializinghtml >=1.1.9
+  - tomli >=2.0
   license: BSD-2-Clause
   license_family: BSD
   purls:
   - pkg:pypi/sphinx
-  size: 1281207
-  timestamp: 1694647544854
+  size: 1345378
+  timestamp: 1713555005540
 - kind: conda
   name: sphinx-autodoc-typehints
-  version: 2.0.0
+  version: 2.1.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-2.0.0-pyhd8ed1ab_0.conda
-  sha256: 68c1278b8f9d284ae50411c7ed9a2687d45121bb8c0c21e4cabbd68b15c016e2
-  md5: a62c457036381a498c95c18b8551e91c
+  url: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-2.1.0-pyhd8ed1ab_0.conda
+  sha256: f331eda04d540a0ebdceea03faaef6f1a57db93cc1ac74a71512e6a20cd4e125
+  md5: ab586f5de577d96a890f0ffc48de7956
   depends:
-  - python >=3.8
-  - sphinx >=7.1.2
+  - python >=3.9
+  - sphinx >=7.3.5
   license: MIT
   license_family: MIT
   purls:
   - pkg:pypi/sphinx-autodoc-typehints
-  size: 23309
-  timestamp: 1707388700709
+  size: 23394
+  timestamp: 1713418816794
 - kind: conda
   name: sphinx-basic-ng
   version: 1.0.0b2
@@ -4156,6 +3718,8 @@ packages:
   - sphinx >=4.0,<8.0
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/sphinx-basic-ng
   size: 20316
   timestamp: 1690475062890
 - kind: conda
@@ -4321,38 +3885,6 @@ packages:
   - pkg:pypi/sphinxcontrib-serializinghtml
   size: 28776
   timestamp: 1705118378942
-- kind: conda
-  name: tapi
-  version: 1100.0.11
-  build: he4954df_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1100.0.11-he4954df_0.tar.bz2
-  sha256: 1709265fbee693a9e8b4126b0a3e68a6c4718b05821c659279c1af051f2d40f3
-  md5: d83362e7d0513f35f454bc50b0ca591d
-  depends:
-  - libcxx >=11.0.0.a0
-  license: NCSA
-  license_family: MIT
-  size: 191416
-  timestamp: 1602687595316
-- kind: conda
-  name: text-unidecode
-  version: '1.3'
-  build: pyhd8ed1ab_1
-  build_number: 1
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_1.conda
-  sha256: db64669a918dec8c744f80a85b9c82216b79298256c7c8bd19bdba54a02f8914
-  md5: ba8aba332d8868897ce44ad74015a7fe
-  depends:
-  - python >=3.4
-  license: Artistic-1.0-Perl
-  license_family: OTHER
-  purls:
-  - pkg:pypi/text-unidecode
-  size: 65029
-  timestamp: 1694707244466
 - kind: conda
   name: tk
   version: 8.6.13
@@ -4419,87 +3951,99 @@ packages:
   size: 15940
   timestamp: 1644342331069
 - kind: conda
-  name: tomlkit
-  version: 0.12.4
-  build: pyha770c72_0
+  name: tomli-w
+  version: 1.0.0
+  build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda
-  sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18
-  md5: 37c47ea93ef00dd80d880fc4ba21256a
+  url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.0.0-pyhd8ed1ab_0.tar.bz2
+  sha256: efb5f78a224c4bb14aab04690c9912256ea12c3a8b8413e60167573ce1282b02
+  md5: 73506d1ab4202481841c68c169b7ef6c
   depends:
   - python >=3.7
   license: MIT
   license_family: MIT
   purls:
-  - pkg:pypi/tomlkit
-  size: 37173
-  timestamp: 1709043886347
+  - pkg:pypi/tomli-w
+  size: 10052
+  timestamp: 1638551820635
 - kind: conda
-  name: tqdm
-  version: 4.66.2
-  build: pyhd8ed1ab_0
+  name: tomlkit
+  version: 0.12.5
+  build: pyha770c72_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda
-  sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260
-  md5: 2b8dfb969f984497f3f98409a9545776
+  url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.5-pyha770c72_0.conda
+  sha256: 5117eff35992d896ca177dfffc08be8a9b3bf3d306ddc3d8bf4b699cdf1e1b79
+  md5: e5dde5caf905e9d95895e05f94967e14
   depends:
-  - colorama
   - python >=3.7
-  license: MPL-2.0 or MIT
+  license: MIT
+  license_family: MIT
   purls:
-  - pkg:pypi/tqdm
-  size: 89567
-  timestamp: 1707598746354
+  - pkg:pypi/tomlkit
+  size: 37297
+  timestamp: 1715185504185
 - kind: conda
-  name: truststore
-  version: 0.8.0
+  name: trove-classifiers
+  version: 2024.4.10
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda
-  sha256: ba49bed74ca170c5a3bf995c33a6179fd74b33abb2444f511862e7f9f57f9149
-  md5: 08316d001eca8854392cf2837828ea11
+  url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.4.10-pyhd8ed1ab_0.conda
+  sha256: cbc8e5c5f82b1eeff7aa21aaff77757336c1e6d64a4255b071c783acd60f4618
+  md5: 9622d541e2314c0207bebdc0359fa478
   depends:
-  - python >=3.10
-  license: MIT
-  license_family: MIT
+  - python >=3.7
+  license: Apache-2.0
+  license_family: Apache
   purls:
-  - pkg:pypi/truststore
-  size: 20667
-  timestamp: 1694154740564
+  - pkg:pypi/trove-classifiers
+  size: 18444
+  timestamp: 1712814840654
 - kind: conda
-  name: types-python-dateutil
-  version: 2.9.0.20240316
+  name: twine
+  version: 5.0.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240316-pyhd8ed1ab_0.conda
-  sha256: 6630bbc43dfb72339fadafc521db56c9d17af72bfce459af195eecb01163de20
-  md5: 7831efa91d57475373ee52fb92e8d137
+  url: https://conda.anaconda.org/conda-forge/noarch/twine-5.0.0-pyhd8ed1ab_0.conda
+  sha256: 8dd14197546abf76980994db8d4e0ac861b395750d2968d259a38e80ed3e8013
+  md5: e3482aff5aebc831cba9ac6b74395c6c
   depends:
-  - python >=3.6
-  license: Apache-2.0 AND MIT
-  size: 21769
-  timestamp: 1710590028155
+  - importlib_metadata >=3.6
+  - keyring >=15.1
+  - pkginfo >=1.8.1
+  - python >=3.8
+  - readme_renderer >=35.0
+  - requests >=2.20
+  - requests-toolbelt >=0.8.0,!=0.9.0
+  - rfc3986 >=1.4.0
+  - rich >=12.0.0
+  - urllib3 >=1.26.0
+  license: Apache-2.0
+  license_family: Apache
+  purls:
+  - pkg:pypi/twine
+  size: 32579
+  timestamp: 1707690947551
 - kind: conda
   name: typing_extensions
-  version: 4.10.0
+  version: 4.11.0
   build: pyha770c72_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda
-  sha256: 4be24d557897b2f6609f5d5f7c437833c62f4d4a96581e39530067e96a2d0451
-  md5: 16ae769069b380646c47142d719ef466
+  url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda
+  sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2
+  md5: 6ef2fc37559256cf682d8b3375e89b80
   depends:
   - python >=3.8
   license: PSF-2.0
   license_family: PSF
   purls:
   - pkg:pypi/typing-extensions
-  size: 37018
-  timestamp: 1708904796013
+  size: 37583
+  timestamp: 1712330089194
 - kind: conda
   name: tzdata
   version: 2024a
@@ -4529,6 +4073,8 @@ packages:
   - python_abi 3.12.* *_cp312
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/ukkonen
   size: 13948
   timestamp: 1695549890285
 - kind: conda
@@ -4548,6 +4094,8 @@ packages:
   - python_abi 3.12.* *_cp312
   license: MIT
   license_family: MIT
+  purls:
+  - pkg:pypi/ukkonen
   size: 14050
   timestamp: 1695549556745
 - kind: conda
@@ -4570,60 +4118,93 @@ packages:
   size: 94669
   timestamp: 1708239595549
 - kind: conda
-  name: virtualenv
-  version: 20.25.1
+  name: userpath
+  version: 1.7.0
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.1-pyhd8ed1ab_0.conda
-  sha256: 1ced4445cf72cd9dc344ad04bdaf703a08cc428c8c46e4bda928ad79786ee153
-  md5: 8797a4e26be36880a603aba29c785352
+  url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2
+  sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d
+  md5: 5bf074c9253a3bf914becfc50757406f
   depends:
-  - distlib <1,>=0.3.7
-  - filelock <4,>=3.12.2
-  - platformdirs <5,>=3.9.1
-  - python >=3.8
+  - click
+  - python >=3.6
   license: MIT
   license_family: MIT
   purls:
-  - pkg:pypi/virtualenv
-  size: 3148218
-  timestamp: 1708602229963
+  - pkg:pypi/userpath
+  size: 17423
+  timestamp: 1632758637093
+- kind: conda
+  name: uv
+  version: 0.1.42
+  build: h0ea3d13_0
+  subdir: linux-64
+  url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.1.42-h0ea3d13_0.conda
+  sha256: e0a914f438575c0b7498f94eea40880ffd2030fba6af55c1bdaa6438e31ec685
+  md5: 437bdf174ef88a618a3cde1e774af632
+  depends:
+  - libgcc-ng >=12
+  - libstdcxx-ng >=12
+  license: Apache-2.0 OR MIT
+  size: 12247166
+  timestamp: 1715258525266
+- kind: conda
+  name: uv
+  version: 0.1.42
+  build: hc069d6b_0
+  subdir: osx-arm64
+  url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.1.42-hc069d6b_0.conda
+  sha256: 52f197298bfb9c2419de18800f7227d61e557e0e5aec9bed9d66a9a7f1dae15a
+  md5: b1f10250e97c2d5180e3f31c58634776
+  depends:
+  - __osx >=11.0
+  - libcxx >=16
+  constrains:
+  - __osx >=11.0
+  license: Apache-2.0 OR MIT
+  size: 9090647
+  timestamp: 1715258739944
 - kind: conda
-  name: watchgod
-  version: 0.8.2
+  name: versioningit
+  version: 3.1.1
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/watchgod-0.8.2-pyhd8ed1ab_0.tar.bz2
-  sha256: 5139550cbd5d93cb6b3d4954267d21fdaccd81b816d421c7a8ee031f27432179
-  md5: 8bf811791ff4ea8b6368b8ff451c6421
+  url: https://conda.anaconda.org/conda-forge/noarch/versioningit-3.1.1-pyhd8ed1ab_0.conda
+  sha256: 9f90b1e10aae23761464407f2535de9b905df92a2d2c564a7f7fe3c64735dcbf
+  md5: d471782c9969774528f6d62ebc8a06d8
   depends:
-  - anyio >=3.0.0,<4
+  - importlib-metadata >=3.6
+  - packaging >=17.1
   - python >=3.7
+  - tomli >=1.2,<3.0
   license: MIT
   license_family: MIT
   purls:
-  - pkg:pypi/watchgod
-  size: 14983
-  timestamp: 1648824691525
+  - pkg:pypi/versioningit
+  size: 161217
+  timestamp: 1714400685966
 - kind: conda
-  name: wcwidth
-  version: 0.2.13
+  name: virtualenv
+  version: 20.26.1
   build: pyhd8ed1ab_0
   subdir: noarch
   noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
-  sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3
-  md5: 68f0738df502a14213624b288c60c9ad
+  url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.26.1-pyhd8ed1ab_0.conda
+  sha256: d603f8608f353a7aaa794c00bd3df71aafd5b56bf53af3e9c3dfe135203a4f33
+  md5: 4e1cd2faf006a6e62c148f95cef0cac2
   depends:
+  - distlib <1,>=0.3.7
+  - filelock <4,>=3.12.2
+  - platformdirs <5,>=3.9.1
   - python >=3.8
   license: MIT
   license_family: MIT
   purls:
-  - pkg:pypi/wcwidth
-  size: 32709
-  timestamp: 1704731373922
+  - pkg:pypi/virtualenv
+  size: 3459994
+  timestamp: 1714439521015
 - kind: conda
   name: wmctrl
   version: '0.5'
@@ -4642,22 +4223,6 @@ packages:
   - pkg:pypi/wmctrl
   size: 10415
   timestamp: 1695590958853
-- kind: conda
-  name: xdg
-  version: 6.0.0
-  build: pyhd8ed1ab_0
-  subdir: noarch
-  noarch: python
-  url: https://conda.anaconda.org/conda-forge/noarch/xdg-6.0.0-pyhd8ed1ab_0.conda
-  sha256: d42e6523ae7b552faf24f0b9a8d6ad95f41720fccdaa1be548abd2ece5c095e0
-  md5: b484cd48062264f3cc16b58572c21411
-  depends:
-  - python >=3.6
-  license: ISC
-  purls:
-  - pkg:pypi/xdg
-  size: 9808
-  timestamp: 1677532487640
 - kind: conda
   name: xz
   version: 5.2.6
@@ -4710,35 +4275,6 @@ packages:
   license_family: MIT
   size: 89141
   timestamp: 1641346969816
-- kind: conda
-  name: yaml-cpp
-  version: 0.8.0
-  build: h13dd4ca_0
-  subdir: osx-arm64
-  url: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h13dd4ca_0.conda
-  sha256: e65a52fb1c9821ba3a7a670d650314f8ff983865e77ba9f69f74e0906844943d
-  md5: e783a232972a5c7dca549111e63a78b2
-  depends:
-  - libcxx >=15.0.7
-  license: MIT
-  license_family: MIT
-  size: 130329
-  timestamp: 1695712959746
-- kind: conda
-  name: yaml-cpp
-  version: 0.8.0
-  build: h59595ed_0
-  subdir: linux-64
-  url: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda
-  sha256: a65bb5284369e548a15a44b14baf1f7ac34fa4718d7d987dd29032caba2ecf20
-  md5: 965eaacd7c18eb8361fd12bb9e7a57d7
-  depends:
-  - libgcc-ng >=12
-  - libstdcxx-ng >=12
-  license: MIT
-  license_family: MIT
-  size: 204867
-  timestamp: 1695710312002
 - kind: conda
   name: zipp
   version: 3.17.0
diff --git a/pyproject.toml b/pyproject.toml
index 44d7c0c7fd2b69e6a88915aabe0e98ba3fafc728..8ab0054a520231e6c8fdf7d15ae3523e31fc22dc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -24,16 +24,13 @@ classifiers = [
 ]
 dependencies = [
   "click>=8",
-  "cookiecutter",
   "gitpython",
   "packaging",
   "python-dateutil",
   "python-gitlab",
   "pytz",
-  "pyyaml",
   "tomli",
   "tomlkit",
-  "xdg",
 ]
 
 [project.urls]
@@ -64,24 +61,22 @@ platforms = ["linux-64", "osx-arm64"]
 
 [tool.pixi.dependencies]
 click = ">=8"
-cookiecutter = "*"
 gitpython = "*"
 packaging = "*"
 python-dateutil = "*"
 python-gitlab = "*"
 pytz = "*"
-pyyaml = "*"
 tomli = "*"
 tomlkit = "*"
-xdg = "*"
-# conda/mamba ecosystem dependencies
-conda = "*"
-conda-build = "*"
-mamba = "*"
-boa = "*"
 
-[tool.pixi.pypi-dependencies]
-idiap-devtools = { path = ".", editable = true, extras = ["qa", "doc", "test"] }
+[tool.pixi.feature.self.pypi-dependencies]
+idiap-devtools = { path = ".", editable = true }
+
+[tool.pixi.feature.py311.dependencies]
+python = "~=3.11.0"
+
+[tool.pixi.feature.py312.dependencies]
+python = "~=3.12.0"
 
 [tool.pixi.feature.qa.dependencies]
 pre-commit = "*"
@@ -91,6 +86,7 @@ reuse = "*"
 [tool.pixi.feature.qa.tasks]
 qa-install = "pre-commit install"
 qa = "pre-commit run --all-files"
+qa-ci = "pre-commit run --all-files --show-diff-on-failure --verbose"
 
 [tool.pixi.feature.doc.dependencies]
 sphinx = "*"
@@ -102,7 +98,9 @@ sphinx-inline-tabs = "*"
 sphinx-click = "*"
 
 [tool.pixi.feature.doc.tasks]
-doc = "rm -rf doc/api && rm -rf html && sphinx-build -aEW doc html"
+doc-clean = "rm -rf doc/api && rm -rf html"
+doc = "sphinx-build -aEW doc html"
+doctest = "sphinx-build -aEb doctest doc html/doctest"
 
 [tool.pixi.feature.test.dependencies]
 pytest = "*"
@@ -115,8 +113,25 @@ pdbpp = "*"
 test = "pytest -sv tests/"
 test-ci = "pytest -sv --cov-report 'html:html/coverage' --cov-report 'xml:coverage.xml' --junitxml 'junit-coverage.xml' --ignore '.profile' tests/"
 
+[tool.pixi.feature.build.dependencies]
+hatch = "*"
+versioningit = "*"
+twine = "*"
+
+[tool.pixi.feature.build.tasks]
+build = "hatch build"
+check = "twine check dist/*"
+upload = "twine upload dist/*"
+
+[tool.pixi.feature.dev.dependencies]
+pdbpp = "*"
+uv = "*"
+
 [tool.pixi.environments]
-default = { features = [ "qa", "doc", "test", "debug" ] }
+default = { features = ["qa", "build", "doc", "test", "dev", "py312", "self", "debug"] }
+qa-ci = { features = ["qa", "py312"] }
+build-ci = { features = ["build", "py312"] }
+test-ci-alternative = { features = ["test", "py311", "self"] }
 
 [tool.hatch.version]
 source = "versioningit"
diff --git a/src/idiap_devtools/click.py b/src/idiap_devtools/click.py
index 96d1d0e741eb45a0134b7d77b75833c73aef7e90..ab4c7c9c4ef65852538da217ab88a8e94812c06b 100644
--- a/src/idiap_devtools/click.py
+++ b/src/idiap_devtools/click.py
@@ -7,8 +7,6 @@ import typing
 
 import click
 
-from .profile import get_profile_path
-
 
 def verbosity_option(
     logger: logging.Logger,
@@ -168,37 +166,3 @@ class PreserveIndentCommand(click.Command):
             formatter.write_paragraph()
             for line in self.description.split("\n"):
                 formatter.write_text(line)
-
-
-def validate_profile(_: click.Context, __: str, value: str) -> str:
-    """Call back for click doing a profile name validation.
-
-    Arguments:
-
-        _: current command context
-
-        __: The option being validated
-
-        value: The value set for the option
-
-
-    Returns
-    -------
-        The validated option value
-    """
-    profile_path = get_profile_path(value)
-    if profile_path is None:
-        raise click.BadParameter(
-            "You have not provided a development profile path "
-            "(-P/--profile) option or set the `default' profile at "
-            "your configuration file.  I need one of these to "
-            "load my development constants"
-        )
-
-    if not (profile_path / "profile.toml").exists():
-        raise click.BadParameter(
-            f"Error while attempting to load the profile `{value}' from "
-            f"`{str(profile_path / 'profile.toml')}' - file does not exist!"
-        )
-
-    return value
diff --git a/src/idiap_devtools/conda.py b/src/idiap_devtools/conda.py
deleted file mode 100644
index 83c00e30f0ba6d6d9c5549320d01486e1ad6fa4c..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/conda.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import contextlib
-import copy
-import logging
-import pathlib
-import typing
-
-from .utils import uniq
-
-logger = logging.getLogger(__name__)
-
-
-@contextlib.contextmanager
-def root_logger_protection():
-    """Protect the root logger against spurious (conda) manipulation.
-
-    Still to verify: conda does some operations on loggers at import, so
-    we may need to put the import inside this context manager too.
-    """
-    root_logger = logging.getLogger()
-    level = root_logger.level
-    handlers = copy.copy(root_logger.handlers)
-
-    yield
-
-    root_logger.setLevel(level)
-    root_logger.handlers = handlers
-
-
-def make_conda_config(
-    options: dict[str, typing.Any],
-) -> typing.Any:
-    """Create a conda configuration for a build merging various sources.
-
-    This function will use the conda-build API to construct a configuration by
-    merging different sources of information.
-
-
-    Arguments:
-
-      options: A dictionary (typically read from a condarc YAML file) that
-        contains build and channel options
-
-    Returns
-    -------
-        A dictionary containing the merged configuration, as produced by
-        conda-build API's ``get_or_merge_config()`` function.
-    """
-
-    with root_logger_protection():
-        import conda_build.api
-
-        from conda.utils import url_path
-
-        retval = conda_build.api.get_or_merge_config(None, **options)
-
-    retval.channel_urls = []
-
-    for url in options["channels"]:
-        # allow people to specify relative or absolute paths to local channels
-        #    These channels still must follow conda rules - they must have the
-        #    appropriate platform-specific subdir (e.g. win-64)
-        url_ = pathlib.Path(url)
-        if url_.is_dir():
-            if not url_.is_absolute():
-                url = str(url_.resolve())
-            with root_logger_protection():
-                url = url_path(url)
-        retval.channel_urls.append(url)
-
-    return retval
-
-
-def use_mambabuild():
-    """Inject mamba solver to conda build API to speed up resolves."""
-    # only importing this module will do the job.
-
-    with root_logger_protection():
-        from boa.cli.mambabuild import prepare
-
-        prepare()
-
-
-def get_rendered_metadata(recipe_dir, config):
-    """Render the recipe and returns the interpreted YAML file."""
-    with root_logger_protection():
-        import conda_build.api
-
-        # use mambabuild instead
-        use_mambabuild()
-        return conda_build.api.render(recipe_dir, config=config)
-
-
-def get_parsed_recipe(metadata):
-    """Render the recipe and returns the interpreted YAML file."""
-    with root_logger_protection():
-        return metadata[0][0].get_rendered_recipe_text()
-
-
-def remove_pins(deps):
-    """Return dependencies without their pinned versions."""
-    return [ll.split()[0] for ll in deps]
-
-
-def parse_dependencies(recipe_dir, config) -> tuple[str, list[str]]:
-    """Parse dependencies in a meta.yaml file."""
-    metadata = get_rendered_metadata(recipe_dir, config)
-    recipe = get_parsed_recipe(metadata)
-    requirements = []
-    for section in ("build", "host"):
-        requirements += remove_pins(recipe.get("requirements", {}).get(section, []))
-    # we don't remove pins for the rest of the recipe
-    requirements += recipe.get("requirements", {}).get("run", [])
-    requirements += recipe.get("test", {}).get("requires", [])
-
-    return recipe["package"]["name"], uniq(requirements)
diff --git a/src/idiap_devtools/gitlab/release.py b/src/idiap_devtools/gitlab/release.py
index 7e777a7e75f795010055e17d11b548559956542e..2f87d5e390c6894de661b829ca33eb3039c852a7 100644
--- a/src/idiap_devtools/gitlab/release.py
+++ b/src/idiap_devtools/gitlab/release.py
@@ -14,10 +14,6 @@ import packaging.requirements
 import packaging.version
 import tomlkit
 
-from git import Repo
-
-from idiap_devtools.profile import Profile
-
 logger = logging.getLogger(__name__)
 
 
@@ -56,10 +52,14 @@ def _update_readme(
     }
 
     # matches the graphical badge in the readme's text with the given version
-    doc_image_re = re.compile(r"docs\-(" + "|".join(variants) + r")\-", re.VERBOSE)
+    doc_image_re = re.compile(
+        r"docs\-(" + "|".join(variants) + r")\-", re.VERBOSE | re.IGNORECASE
+    )
 
     # matches all other occurrences we need to handle
-    branch_re = re.compile(r"/(" + "|".join(variants) + r")", re.VERBOSE)
+    branch_re = re.compile(
+        r"/(" + "|".join(variants) + r")", re.VERBOSE | re.IGNORECASE
+    )
 
     new_contents = []
     for line in contents.splitlines():
@@ -85,179 +85,30 @@ def _update_readme(
     return "\n".join(new_contents) + "\n"
 
 
-def _pin_versions_of_packages_list(
-    packages_list: list[str],
-    dependencies_versions: list[packaging.requirements.Requirement],
-) -> list[str]:
-    """Add its version to each package according to a dictionary of versions.
-
-    Modifies ``packages_list`` in-place.
-
-    Iterates over ``packages_list`` and sets the version to be the corresponding
-    one in ``dependencies_versions``.
-
-    Edge cases:
-
-        **Package not in ``dependencies_versions``**: The package will not be
-            pinned.
-
-        **Package already has version specifier**: Raises a ``ValueError``.
-
-    Arguments:
-
-        packages_list: The packages to pin.
-
-        dependencies_versions: All the known packages with their desired version
-            pinning.
-
-    Raises
-    ------
-        ``ValueError`` if a version in ``dependencies_versions`` conflicts with
-        an already present pinning in ``packages_list``.
-    """
-
-    # Check that there is not the same dependency twice in the pins
-    seen = set()
-    for d in dependencies_versions:
-        if d.name in seen:
-            raise NotImplementedError(
-                "Pinning with more than one specification per dependency not"
-                "supported."
-            )
-        seen.add(d.name)
-
-    # Make it easier to retrieve the dependency pin for each package.
-    dependencies_dict = {d.name: d for d in dependencies_versions}
-
-    results = []
-
-    # package is the dependency we want to pin
-    for pkg_id, package in enumerate(packages_list):
-        results.append(package)
-
-        # Get the dependency package version specifier if already present.
-        pkg_req = packaging.requirements.Requirement(package)
-
-        if pkg_req.url is not None:
-            logger.warning(
-                "Ignoring dependency '%s' as it is specified with a url (%s).",
-                pkg_req.name,
-                pkg_req.url,
-            )
-
-        # Retrieve this dependency's constraint Requirement object
-        desired_pin = dependencies_dict.get(pkg_req.name)
-
-        if desired_pin is None:
-            logger.warning(
-                "Dependency '%s' is not available in constraints. Skipping "
-                "pinning. Consider adding this package to your dev-profile "
-                "constraints file.",
-                pkg_req.name,
-            )
-            continue
-
-        # A Requirement is composed of:
-        #   name[extras]@ url ; marker
-        # Or
-        #   name[extras]specifier; marker
-        # Where extras and marker are optional
-
-        # The following handles those different fields
-
-        if desired_pin.url is not None:
-            logger.info(
-                "Pinning of %s will be done with a URL (%s).",
-                pkg_req.name,
-                desired_pin.url,
-            )
-        else:
-            # Build the 'specs' field
-            if not desired_pin.specifier:
-                logger.warning(
-                    "Dependency '%s' has no version specifier in constraints "
-                    "'%s'. Skipping pinning.",
-                    pkg_req.name,
-                    desired_pin,
-                )
-                continue
-
-            # If version specifiers are already present in that dependency
-            if pkg_req.specifier:
-                raise ValueError(
-                    f"You cannot specify a version for the dependency {pkg_req}"
-                )
-            specs_str = str(desired_pin.specifier)
-
-        # Build the 'marker' field
-        if pkg_req.marker is not None:
-            raise ValueError(
-                f"You can not specify a marker for the dependency {pkg_req}! "
-                f"({pkg_req.marker})"
-            )
-        marker_str = ""
-        if desired_pin.marker is not None:
-            marker_str = f"; {desired_pin.marker}"
-
-        # Build the 'extras' field
-        if len(pkg_req.extras) > 0:
-            raise ValueError(
-                f"You can not specify extras for the dependency {pkg_req}! "
-                f"({pkg_req.extras})"
-            )
-
-        extras_str = ""
-        if len(desired_pin.extras) > 0:
-            extras_str = f"[{','.join(desired_pin.extras)}]"
-
-        # Assemble the dependency specification in one string
-        if desired_pin.url is not None:
-            final_str = "".join(
-                (
-                    pkg_req.name,
-                    extras_str,
-                    "@ ",
-                    desired_pin.url,
-                    " ",
-                    marker_str,
-                )
-            )
-        else:
-            final_str = "".join((pkg_req.name, extras_str, specs_str, marker_str))
-
-        # Replace the package specification with the pinned version
-        packages_list[pkg_id] = str(packaging.requirements.Requirement(final_str))
-        logger.debug("Package pinned: %s", packages_list[pkg_id])
-
-    return packages_list
-
-
 def _update_pyproject(
     contents: str,
     version: str,
     default_branch: str,
     update_urls: bool,
-    profile: Profile | None = None,
 ) -> str:
     """Update contents of pyproject.toml to make it release/latest ready.
 
-    - Sets the project.version field to the given version.
-    - Pins the dependencies version to the ones in the given dev-profile.
-    - Saves the dev-profile's url and commit in the pyproject.toml.
+    - Sets the project.version field to the given version, if the version is
+      not dynamic.
     - Updates the documentation URLs to point specifically to the given version.
 
-    Arguments:
-
-        contents: Text of the ``pyproject.toml`` file from a package
+    Parameters
+    ----------
+    contents
+        Text of the ``pyproject.toml`` file from a package
+    version
+        Format of the version string is '#.#.#'
+    default_branch
+        The name of the default project branch to use
+    update_urls
+        If set to ``True``, then also updates the relevant URL links
+        considering the version number provided at ``version``.
 
-        version: Format of the version string is '#.#.#'
-
-        default_branch: The name of the default project branch to use
-
-        update_urls: If set to ``True``, then also updates the relevant URL
-          links considering the version number provided at ``version``.
-
-        profile: Used to retrieve and note the current dev-profile commit.
 
     Returns
     -------
@@ -275,102 +126,46 @@ def _update_pyproject(
     }
 
     data = tomlkit.loads(contents)
+    project = data.setdefault("project", {})
 
-    if re.match(packaging.version.VERSION_PATTERN, version, re.VERBOSE) is not None:
+    if "version" in project.get("dynamic", []):
+        logger.info("Not setting project version on pyproject.toml as it is dynamic")
+
+    elif (
+        re.match(
+            packaging.version.VERSION_PATTERN,
+            version,
+            re.VERBOSE | re.IGNORECASE,
+        )
+        is not None
+    ):
         logger.info(
             "Updating pyproject.toml version from '%s' to '%s'",
             data.get("project", {}).get("version", "unknown version"),
             version,
         )
-        data["project"]["version"] = version
+        project["version"] = version
 
     else:
         logger.info(
-            "Not setting project version on pyproject.toml as it is "
+            f"Not setting project version on pyproject.toml as it is "
             f"not PEP-440 compliant (given value: `{version}')"
         )
 
-    # Pinning of the dependencies packages version
-    if profile is not None:
-        dependencies_pins = profile.python_constraints()
-
-        # Main dependencies
-        logger.info("Pinning versions of dependencies.")
-        pkg_deps = data.get("project", {}).get("dependencies", [])
-        (
-            _pin_versions_of_packages_list(
-                packages_list=pkg_deps,
-                dependencies_versions=dependencies_pins,
-            ),
+    if update_urls:
+        # matches all other occurrences we need to handle
+        branch_re = re.compile(
+            r"/(" + "|".join(variants) + r")", re.VERBOSE | re.IGNORECASE
         )
 
-        # Optional dependencies
-        opt_pkg_deps = data.get("project", {}).get("optional-dependencies", [])
-        for pkg_group in opt_pkg_deps:
-            logger.info(
-                "Pinning versions of optional dependencies group `%s`.",
-                pkg_group,
-            )
-            _pin_versions_of_packages_list(
-                packages_list=opt_pkg_deps[pkg_group],
-                dependencies_versions=dependencies_pins,
-            )
-
-        # Registering dev-profile version
-        logger.info("Annotating pyproject with current dev-profile commit.")
-        logger.debug("Using dev-profile at '%s'", profile._basedir)  # noqa: SLF001
-        profile_repo = Repo(profile._basedir)  # noqa: SLF001
-        if profile_repo.is_dirty():
-            raise RuntimeError(
-                "dev-profile was modified and is dirty! Unable to ensure a "
-                "commit corresponds to the current state of that repository. "
-                "Please commit and push your changes."
-            )
-        logger.debug("Fetching origin of dev-profile.")
-        profile_repo.remotes.origin.fetch()
-        logger.debug("Checking that the local commits are available on origin.")
-        commits_ahead = [c for c in profile_repo.iter_commits("origin/main..HEAD")]
-        if len(commits_ahead) != 0:
-            raise RuntimeError(
-                "Local commits of dev-profile were not pushed to origin!\n"
-                f"(dev-profile HEAD is {len(commits_ahead)} commits ahead of "
-                "origin).\n "
-                "Please 'git push' your modifications or revert them.\n"
-                "We enforce this so a dev-profile version can always be "
-                "retrieved."
-            )
-        logger.debug("Checking we are up to date with origin.")
-        commits_behind = [c for c in profile_repo.iter_commits("HEAD..origin/main")]
-        if len(commits_behind) != 0:
-            logger.warning(
-                "Your local dev-profile is not up to date with the origin "
-                "remote. It is fine as long as you know what you are doing, "
-                "but you should consider 'git pull' the latest changes.\n"
-                "(dev-profile HEAD is %d commits behind origin)",
-                len(commits_behind),
+        # sets the various URLs
+        urls = project.setdefault("urls", {})
+        docurl = urls.get("documentation")
+        if (docurl is not None) and (branch_re.search(docurl) is not None):
+            replacement = (
+                f"/v{version}" if version is not None else f"/{default_branch}"
             )
-        # Actually add the dev-profile commit hash to pyproject.toml
-        data["profile"] = tomlkit.table()
-        data["profile"].add(
-            "repository_url",
-            tomlkit.item(profile_repo.remotes.origin.url).indent(4),
-        )
-        data["profile"].add(
-            "commit_hash",
-            tomlkit.item(profile_repo.commit("HEAD").hexsha).indent(4),
-        )
-
-    if not update_urls:
-        return tomlkit.dumps(data)
-
-    # matches all other occurrences we need to handle
-    branch_re = re.compile(r"/(" + "|".join(variants) + r")", re.VERBOSE)
-
-    # sets the various URLs
-    url = data["project"].get("urls", {}).get("documentation")
-    if (url is not None) and (branch_re.search(url) is not None):
-        replacement = "/v%s" % version if version is not None else f"/{default_branch}"
-        data["project"]["urls"]["documentation"] = branch_re.sub(replacement, url)
+            urls["documentation"] = branch_re.sub(replacement, docurl)
 
     return tomlkit.dumps(data)
 
@@ -397,10 +192,11 @@ def get_latest_tag_name(
         return None
     # create list of tags' names but ignore the first 'v' character in each name
     # also filter out non version tags
+    version_pattern_re = re.compile(
+        packaging.version.VERSION_PATTERN, re.VERBOSE | re.IGNORECASE
+    )
     tag_names = [
-        tag.name[1:]
-        for tag in latest_tags
-        if re.match(packaging.version.VERSION_PATTERN, tag.name[1:])
+        tag.name[1:] for tag in latest_tags if version_pattern_re.match(tag.name)
     ]
     if not tag_names:  # no tags were found.
         return None
@@ -668,7 +464,6 @@ def release_package(
     tag_name: str,
     tag_comments: str,
     dry_run: bool = False,
-    profile: Profile | None = None,
 ) -> int | None:
     """Release a package.
 
@@ -676,20 +471,16 @@ def release_package(
     such as ``README.md`` and ``pyproject.toml`` will be updated according to
     the release procedures.
 
-
-    Arguments:
-
-        gitpkg: gitlab package object
-
-        tag_name: The name of the release tag
-
-        tag_comments_list: New annotations for this tag in a form of list
-
-        dry_run: If ``True``, nothing will be committed or pushed to GitLab
-
-        profile: An instance of :class:`idiap_devtools.profile.Profile` used to
-            retrieve the specifiers to pin the package's dependencies in
-            ``pyproject.toml``.
+    Parameters
+    ----------
+    gitpkg
+        gitlab package object
+    tag_name
+        The name of the release tag
+    tag_comments_list
+        New annotations for this tag in a form of list
+    dry_run
+        If ``True``, nothing will be committed or pushed to GitLab
 
     Returns
     -------
@@ -721,7 +512,6 @@ def release_package(
         version=version_number,
         default_branch=gitpkg.default_branch,
         update_urls=True,
-        profile=profile,
     )
     if dry_run:
         d = _get_differences(
@@ -733,7 +523,7 @@ def release_package(
     update_files_at_default_branch(
         gitpkg,
         {"README.md": readme_contents, "pyproject.toml": pyproject_contents},
-        "Increased stable version to %s" % version_number,
+        f"Increased stable version to {version_number}",
         dry_run,
     )
 
@@ -777,7 +567,7 @@ def release_package(
             "README.md": readme_contents_orig,
             "pyproject.toml": pyproject_contents_latest,
         },
-        "Increased latest version to %s [skip ci]" % next_version_number,
+        f"Increased latest version to {next_version_number} [skip ci]",
         dry_run,
     )
     if dry_run:
diff --git a/src/idiap_devtools/profile.py b/src/idiap_devtools/profile.py
deleted file mode 100644
index b226971f5c104214510b1a7301359dcda4520950..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/profile.py
+++ /dev/null
@@ -1,331 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import io
-import pathlib
-import typing
-
-import packaging.requirements
-import tomli
-import xdg
-import yaml
-
-from .logging import setup
-
-logger = setup(__name__)
-
-OLD_USER_CONFIGURATION = xdg.xdg_config_home() / "devtools.toml"
-"""The previous default location for the user configuration file."""
-
-USER_CONFIGURATION = xdg.xdg_config_home() / "idiap-devtools.toml"
-"""The default location for the user configuration file."""
-
-
-def load(directory: pathlib.Path) -> dict[str, typing.Any]:
-    """Load a profile TOML file, returns a dictionary with contents."""
-    with (directory / "profile.toml").open("rb") as f:
-        return tomli.load(f)
-
-
-def get_profile_path(name: str | pathlib.Path) -> pathlib.Path | None:
-    """Return the local directory of the named profile.
-
-    If the input name corresponds to an existing directory, then that is
-    returned.  Otherwise, we lookup the said name inside the user
-    configuration.  If one exists, then the path pointed by that variable is
-    returned.  Otherwise, an exception is raised.
-
-
-    Arguments:
-
-        name: The name of the local profile to return - can be either an
-            existing path, or any name from the user configuration file.
-
-
-    Returns
-    -------
-        Either ``None``, if the profile cannot be found, or a verified path, if
-        one is found.
-    """
-    path = pathlib.Path(name)
-
-    if path.exists() and path.is_dir():
-        logger.debug(f"Returning path to profile {str(path)}...")
-        return path
-
-    # makes the user move the configuration file quickly!
-    if OLD_USER_CONFIGURATION.exists():
-        raise RuntimeError(
-            f"Move your configuration from "
-            f"{str(OLD_USER_CONFIGURATION)} to {str(USER_CONFIGURATION)}, "
-            f"and then re-run this application."
-        )
-
-    # if you get to this point, then no local directory with that name exists
-    # check the user configuration for a specific key
-    if USER_CONFIGURATION.exists():
-        logger.debug(f"Loading user-configuration from {str(USER_CONFIGURATION)}...")
-        with USER_CONFIGURATION.open("rb") as f:
-            usercfg = tomli.load(f)
-    else:
-        usercfg = {}
-
-    if name == "default":
-        value = usercfg.get("profiles", {}).get("default", None)
-        if value is None:
-            return None
-        name = value
-
-    value = usercfg.get("profiles", {}).get(name, None)
-    if value is None:
-        logger.warning(
-            f"Requested profile `{name}' is not an existing directory "
-            f"or an existing profile key (may be you forgot to clone "
-            f"the relevant repository or setup your configuration file?)"
-        )
-        return None
-
-    return pathlib.Path(value).expanduser()
-
-
-class Profile:
-    """A class representing the development profile.
-
-    Arguments:
-
-        path: The name of the local profile to return - can be either an
-            existing path, or any name from the user configuration file.
-    """
-
-    data: dict[str, typing.Any]  #: A readout of the ``profile.toml`` file
-    _basedir: pathlib.Path
-
-    def __init__(self, name: str | pathlib.Path):
-        basedir = get_profile_path(name)
-        if basedir is None:
-            raise FileNotFoundError(
-                f"Cannot find `profile.toml' in the input "
-                f"profile path or key: `{name}' (resolved to `{basedir}')"
-            )
-        self._basedir = basedir
-        logger.info(
-            f"Loading development profile from `{name}' "
-            f"(resolved to `{basedir}')..."
-        )
-        with (self._basedir / "profile.toml").open("rb") as f:
-            self.data = tomli.load(f)
-
-    def conda_config(
-        self, python: str, public: bool, stable: bool
-    ) -> typing.Any:  # Using Any as type, as either flake8, mypy, or sphinx
-        # will complain about conda otherwise. Will anyway be fixed when
-        # resolving https://gitlab.idiap.ch/software/idiap-devtools/-/issues/3
-        """Build the conda-configuration to use based on the profile.
-
-        Arguments:
-
-            python: The python version in the format "X.Y" (e.g. "3.11" or
-               "3.12")
-
-            private: Set to ``True`` if we should use private channels/indexes
-               to lookup dependencies.  Should be ``False`` otherwise
-
-            stable: Set to ``True`` if we should only consider stable versions
-              of packages, as opposed to pre-release ones (beta packages).  Set
-              to ``False`` otherwise.
-
-        return_type:
-            conda_build.config.Config: A dictionary containing the merged
-              configuration, as produced by conda-build API's
-              get_or_merge_config() function.
-        """
-
-        baserc = self.data.get("conda", {}).get("baserc")
-        if baserc is None:
-            condarc_options: dict[str, typing.Any] = dict(show_channel_urls=True)
-        else:
-            f = io.BytesIO(self.data["conda"]["baserc"].encode())
-            condarc_options = yaml.load(f, Loader=yaml.FullLoader)
-
-        channel_data = self.data.get("conda", {}).get("channels")
-        privacy_key = "public" if public else "private"
-        stability_key = "stable" if stable else "beta"
-        if channel_data is not None:
-            channels = channel_data[privacy_key][stability_key]
-        else:
-            channels = ["conda-forge"]
-
-        condarc_options["channels"] = channels
-
-        # incorporate constraints, if there are any
-        constraints = self.data.get("conda", {}).get("constraints")
-        if constraints is not None:
-            constraints_path = self._basedir / pathlib.Path(constraints)
-            condarc_options["variant_config_files"] = str(constraints_path)
-
-        # detect append-file, if any
-        copy_files = self.data.get("conda", {}).get("build-copy")
-        if copy_files is not None:
-            append_file = [k for k in copy_files if k.endswith("recipe_append.yaml")]
-            if append_file:
-                condarc_options["append_sections_file"] = str(
-                    self._basedir / append_file[0]
-                )
-
-        condarc_options["python"] = python
-
-        conda_build_copy = self.data.get("conda", {}).get("build-copy", [])
-        append_file = [k for k in conda_build_copy if k != constraints]
-        append_file = append_file[0] if append_file else None
-
-        from .conda import make_conda_config
-
-        return make_conda_config(condarc_options)
-
-    def python_indexes(self, public: bool, stable: bool) -> list[str]:
-        """Return Python indexes to be used according to the current profile.
-
-        Arguments:
-
-            private: Set to ``True`` if we should use private channels/indexes
-               to lookup dependencies.  Should be ``False`` otherwise
-
-            stable: Set to ``True`` if we should only consider stable versions
-              of packages, as opposed to pre-release ones (beta packages).  Set
-              to ``False`` otherwise.
-        """
-        indexes = self.data.get("python", {}).get("indexes")
-        privacy_key = "public" if public else "private"
-        stability_key = "stable" if stable else "beta"
-        if indexes is not None:
-            return indexes[privacy_key][stability_key]
-
-        return [] if stable else ["--pre"]
-
-    def get(
-        self, key: str | typing.Iterable[str], default: typing.Any = None
-    ) -> typing.Any:
-        """Read the contents of a certain toml profile variable."""
-
-        if isinstance(key, str):
-            return self.data.get(key, default)
-
-        # key is a tuple of strings, iterate over the dictionary
-        d = self.data
-        for level in key:
-            d = d.get(level)
-            if d is None:
-                return default
-        return d
-
-    def get_path(
-        self,
-        key: str | typing.Iterable[str],
-        default: None | pathlib.Path = None,
-    ) -> pathlib.Path | None:
-        """Read the contents of path from the profile and resolves it.
-
-        This function will search for a given profile key, consider it points
-        to a path (relative or absolute) and will return that resolved path to
-        the caller.
-
-        Arguments:
-
-            key: The key, pointing to the variable inside ``profile.toml`` that
-                contains the datafile to be _load_conda_packages
-
-            default: The value to return to the caller by default, if the key
-              does not exist within the profile.
-
-
-        Returns
-        -------
-            The selected profile file path, or the contents of ``default``
-            otherwise.
-        """
-
-        path = self.get(key)
-
-        if path is None:
-            return default
-
-        if isinstance(path, dict):
-            raise KeyError(f"Key {key} does not correspond to a path")
-
-        ppath = pathlib.Path(path)
-
-        if not ppath.is_absolute():
-            ppath = self._basedir / ppath
-
-        return ppath
-
-    def get_file_contents(
-        self, key: str | typing.Iterable[str], default: None | str = None
-    ) -> str | None:
-        """Read the contents of a file from the profile.
-
-        This function will search for a given profile key, consider it points
-        to a filename (relative or absolute) and will read its contents,
-        returning them to the caller.
-
-        Arguments:
-
-            key: The key, pointing to the variable inside ``profile.toml`` that
-                contains the datafile to be _load_conda_packages
-
-            default: The value to return to the caller by default, if the key
-              does not exist within the profile.
-
-
-        Returns
-        -------
-            The contents of the selected profile file, or the contents of
-            ``default`` otherwise.
-        """
-
-        path = self.get_path(key)
-        return path.open().read() if path is not None else default
-
-    def conda_constraints(self, python: str) -> dict[str, str] | None:
-        """Return a list of conda constraints given the current profile.
-
-        Arguments:
-
-            python: The python version in the format "X.Y" (e.g. "3.9" or
-               "3.10")
-        """
-        content = self.get_file_contents(("conda", "constraints"))
-
-        if content is None:
-            return None
-
-        idx1 = content.find("# AUTOMATIC PARSING START")
-        idx2 = content.find("# AUTOMATIC PARSING END")
-        content = content[idx1:idx2]
-
-        # filter out using conda-build specific markers
-        from conda_build.metadata import ns_cfg, select_lines
-
-        config = self.conda_config(python, public=True, stable=True)
-        content = select_lines(content, ns_cfg(config), variants_in_place=False)
-
-        package_pins = yaml.safe_load(content)
-
-        package_names_map = package_pins.pop("package_names_map")
-
-        return {
-            f"{package_names_map.get(p, p)}": f"{str(v[0]).split(' ')[0]}"
-            for p, v in package_pins.items()
-        }
-
-    def python_constraints(
-        self,
-    ) -> list[packaging.requirements.Requirement] | None:
-        """Return a list of Python requirements given the current profile."""
-        content = self.get_file_contents(("python", "constraints"))
-
-        if content is None:
-            return None
-
-        return [packaging.requirements.Requirement(k) for k in content.split()]
diff --git a/src/idiap_devtools/scripts/gitlab/badges.py b/src/idiap_devtools/scripts/badges.py
similarity index 97%
rename from src/idiap_devtools/scripts/gitlab/badges.py
rename to src/idiap_devtools/scripts/badges.py
index bdd9ff1545b319c96e6e71c39d378f4211b25473..b4fdadfb74adcee74406ca3830104ae83a2a3549 100644
--- a/src/idiap_devtools/scripts/gitlab/badges.py
+++ b/src/idiap_devtools/scripts/badges.py
@@ -4,8 +4,8 @@
 
 import click
 
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -127,8 +127,8 @@ def badges(package, update_readme, dry_run, server, **_) -> None:
 
     import gitlab
 
-    from ...gitlab import get_gitlab_instance
-    from ...gitlab.release import update_files_at_default_branch
+    from ..gitlab import get_gitlab_instance
+    from ..gitlab.release import update_files_at_default_branch
 
     if dry_run:
         click.secho("!!!! DRY RUN MODE !!!!", fg="yellow", bold=True)
diff --git a/src/idiap_devtools/scripts/gitlab/changelog.py b/src/idiap_devtools/scripts/changelog.py
similarity index 97%
rename from src/idiap_devtools/scripts/gitlab/changelog.py
rename to src/idiap_devtools/scripts/changelog.py
index a464ad12c5ec2f7f622da15408a456f006aaac59..65bea518f3dae6abf4c0ec5064730f02efae765b 100644
--- a/src/idiap_devtools/scripts/gitlab/changelog.py
+++ b/src/idiap_devtools/scripts/changelog.py
@@ -6,8 +6,8 @@ import sys
 
 import click
 
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -105,8 +105,8 @@ def changelog(target, output, mode, since, **_) -> None:
     import datetime
     import pathlib
 
-    from ...gitlab import get_gitlab_instance
-    from ...gitlab.changelog import (
+    from ..gitlab import get_gitlab_instance
+    from ..gitlab.changelog import (
         get_last_tag_date,
         parse_date,
         write_tags_with_commits,
diff --git a/src/idiap_devtools/scripts/cli.py b/src/idiap_devtools/scripts/cli.py
index de8593b816adfd512c8ee69bce8aeed75092693c..7c33c7301d054e86b68dd2546517319a9c526600 100644
--- a/src/idiap_devtools/scripts/cli.py
+++ b/src/idiap_devtools/scripts/cli.py
@@ -5,11 +5,17 @@
 import click
 
 from ..click import AliasedGroup
-from .env import env
-from .fullenv import fullenv
-from .gitlab import gitlab
-from .pixi import pixi
-from .update_pins import update_pins
+from ..logging import setup
+from .badges import badges
+from .changelog import changelog
+from .getpath import getpath
+from .jobs import jobs
+from .lasttag import lasttag
+from .release import release
+from .runners import runners
+from .settings import settings
+
+logger = setup(__name__.split(".", 1)[0])
 
 
 @click.group(
@@ -17,13 +23,24 @@ from .update_pins import update_pins
     context_settings=dict(help_option_names=["-?", "-h", "--help"]),
 )
 @click.version_option()
-def cli():
-    """Idiap development tools - see available commands below."""
+def cli() -> None:
+    """Commands that interact directly with GitLab.
+
+    Commands defined here are supposed to interact with gitlab, and
+    add/modify/remove resources on it directly.
+
+    To avoid repetitive asking, create a configuration file as indicated
+    at :ref:`idiap-devtools.install.setup.gitlab` section of the user
+    guide.
+    """
     pass
 
 
-cli.add_command(env)
-cli.add_command(fullenv)
-cli.add_command(gitlab)
-cli.add_command(pixi)
-cli.add_command(update_pins)
+cli.add_command(changelog)
+cli.add_command(release)
+cli.add_command(badges)
+cli.add_command(runners)
+cli.add_command(jobs)
+cli.add_command(getpath)
+cli.add_command(lasttag)
+cli.add_command(settings)
diff --git a/src/idiap_devtools/scripts/env.py b/src/idiap_devtools/scripts/env.py
deleted file mode 100644
index 77ea04c994cb08a847a85931599a645ad131d98a..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/scripts/env.py
+++ /dev/null
@@ -1,440 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import pathlib
-import sys
-import typing
-
-import click
-
-from ..click import PreserveIndentCommand, validate_profile, verbosity_option
-from ..logging import setup
-from ..profile import Profile
-
-logger = setup(__name__.split(".", 1)[0])
-
-
-def _load_conda_packages(
-    meta: list[pathlib.Path], conda_config: typing.Any
-) -> tuple[list[pathlib.Path], list[str], list[str]]:
-    """Load dependence packages by scanning conda recipes.
-
-    Input entries in ``meta`` may correspond to various types of entries, out
-    of which, we will not ignore in this function:
-
-        * A full path to a ``meta.yaml`` file that will be scanned
-        * A project directory containing a conda recipe at ``conda/meta.yaml``
-        * The name of a conda package to install (condition: does not contain a
-          path separator nor exists as a file or directory in the filesystem)
-
-
-    Arguments:
-
-        meta: List of directories, conda recipes and conda package names to parse.
-
-        conda_config: Profile-dependent conda configuration to use for
-            determining packages to install and constraints.
-
-
-    Returns
-    -------
-        A list of non-consumed elements from the ``meta`` list, the list of
-        parsed package names, and finally the list of dependencies from the
-        parsed recipes.
-    """
-
-    import os
-
-    from .. import conda, utils
-
-    consumed = []
-    parsed_packages = []
-    conda_packages = []
-
-    for m in meta:
-        if m.name == "meta.yaml":
-            # user has passed the full path to the file
-            # we can consume this from the input list
-            recipe_dir = str(m.parent)
-            logger.info(f"Parsing conda recipe at {recipe_dir}...")
-            pkg_name, pkg_deps = conda.parse_dependencies(recipe_dir, conda_config)
-            logger.info(f"Added {len(pkg_deps)} packages from package '{pkg_name}'")
-            parsed_packages.append(pkg_name)
-            conda_packages += pkg_deps
-            consumed.append(m)
-
-        elif (m / "conda" / "meta.yaml").exists():
-            # it is the root of a project
-            # may need to parse it for python packages later on
-            recipe_dir = str(m / "conda")
-            logger.info(f"Parsing conda recipe at {recipe_dir}...")
-            pkg_name, pkg_deps = conda.parse_dependencies(recipe_dir, conda_config)
-            logger.info(f"Added {len(pkg_deps)} packages from package '{pkg_name}'")
-            parsed_packages.append(pkg_name)
-            conda_packages += pkg_deps
-
-        elif not m.exists() and os.sep not in str(m):
-            # it is a conda package name, add to list of packages to install
-            # we can consume this from the input list
-            logger.info(f"Adding conda package {m}...")
-            conda_packages.append(str(m))
-            consumed.append(m)
-
-    meta = [k for k in meta if k not in consumed]
-
-    # we should install all packages that have not been parsed yet
-    conda_packages = [k for k in conda_packages if k not in parsed_packages]
-
-    # now we sort and make it unique
-    conda_packages = utils.uniq(sorted(conda_packages))
-
-    logger.info(
-        f"Adding {len(conda_packages)} conda packages to installation plan",
-    )
-    return meta, parsed_packages, conda_packages
-
-
-def _load_python_packages(
-    the_profile: Profile,
-    python: str,
-    meta: list[pathlib.Path],
-    conda_pkgs: list[str],
-) -> tuple[list[pathlib.Path], list[str], list[str]]:
-    """Load dependence packages by scanning Python recipes.
-
-    Input entries in ``meta`` may correspond to various types of entries, out
-    of which, we will not ignore in this function:
-
-        * A full path to a ``pyproject.toml`` file that will be scanned
-        * A project directory containing a Python project declaration at
-          ``pyproject.toml``
-
-
-    Arguments:
-
-        the_profile: The current development profile, that will be looked up
-          for conda-to-Python package name translations.
-
-        python: The version of Python to load conda constraints for
-
-        meta: List of directories, and Python project definitions to scan
-
-        conda_pkgs: List of conda packages that either have been parsed, or
-            are dependencies of parsed recipes.  We must **not** install Python
-            equivalents for those.
-
-
-    Returns
-    -------
-        A list of non-consumed elements from the ``meta`` list, the list of
-        pure-Python dependencies from the parsed recipes, that are not at
-        ``conda_pkgs`` and have no conda equivalents, and finally, an extension
-        to the list of conda packages that can be installed that way.
-    """
-
-    from .. import python as pyutils
-    from .. import utils
-
-    parsed_packages = [k.split(" ", 1)[0] for k in conda_pkgs]
-    to_python = the_profile.get(("conda", "to_python"), {})
-    parsed_packages = [to_python.get(k, k) for k in parsed_packages]
-
-    consumed = []
-    python_packages = []
-
-    for m in meta:
-        if m.name == "pyproject.toml":
-            # user has passed the full path to the file
-            # we can consume this from the input list
-            logger.info(f"Parsing Python package at {str(m)}...")
-            pkg_name, pkg_deps = pyutils.dependencies_from_pyproject_toml(m)
-            logger.info(
-                f"Added {len(pkg_deps)} Python packages from package '{pkg_name}'",
-            )
-            parsed_packages.append(pkg_name)
-            python_packages += pkg_deps
-            consumed.append(m)
-
-        elif (m / "pyproject.toml").exists():
-            # it is the root of a project
-            proj = m / "pyproject.toml"
-            logger.info(f"Parsing Python package at {str(proj)}...")
-            pkg_name, pkg_deps = pyutils.dependencies_from_pyproject_toml(proj)
-            logger.info(
-                f"Added {len(pkg_deps)} Python packages from package '{pkg_name}'",
-            )
-            parsed_packages.append(pkg_name)
-            python_packages += pkg_deps
-            consumed.append(m)
-
-    meta = [k for k in meta if k not in consumed]
-
-    # if there are equivalent conda-pinned packages, we should prefer them
-    # instead of pure-Python versions without any constraints
-    conda_constraints = the_profile.conda_constraints(python)
-    if conda_constraints is None:
-        conda_constraints = {}
-
-    constrained = [k for k in python_packages if k.specifier]
-    unconstrained = [k for k in python_packages if not k.specifier]
-
-    has_conda = [
-        f"{k.name} {conda_constraints[k.name]}"
-        for k in unconstrained
-        if k.name in conda_constraints
-    ]
-    no_conda = [k for k in unconstrained if k.name not in conda_constraints]
-
-    # we should install all packages that have not been parsed yet, and have no
-    # conda equivalent via Python/pip
-    python_packages_str = [
-        str(k) for k in constrained + no_conda if k.name not in parsed_packages
-    ]
-
-    # now we sort and make it unique
-    python_packages_str = utils.uniq(sorted(python_packages_str))
-
-    has_conda = utils.uniq(sorted(has_conda))
-
-    logger.info(
-        f"Adding {len(python_packages_str)} Python and {len(has_conda)} conda "
-        f"packages to installation plan",
-    )
-    return meta, python_packages_str, has_conda
-
-
-def _simplify_conda_plan(deps: list[str]) -> list[str]:
-    """Simplifies the conda package plan by removing reduntant entries."""
-    from .. import utils
-
-    pins_striped = [k.split()[0] for k in deps if len(k.split()) > 1]
-    no_pins = [k for k in deps if len(k.split()) == 1]
-
-    keep_no_pins = [k for k in no_pins if k not in pins_striped]
-
-    full_pins = [k for k in deps if len(k.split()) > 1]
-    return utils.uniq(sorted(keep_no_pins + full_pins))
-
-
-def _add_missing_conda_pins(
-    the_profile: Profile, python: str, deps: list[str]
-) -> list[str]:
-    """Add pins to unpinned packages, to respect the profile."""
-
-    from .. import utils
-
-    pinned_packages = the_profile.conda_constraints(python)
-
-    if pinned_packages is None:
-        return deps
-
-    no_pins = [k for k in deps if len(k.split()) == 1 and k in pinned_packages]
-
-    no_change = [k for k in deps if k not in no_pins]
-
-    new_pins = [f"{k} {v}" for k, v in pinned_packages.items() if k in no_pins]
-
-    return utils.uniq(sorted(no_change + new_pins))
-
-
-@click.command(
-    cls=PreserveIndentCommand,
-    epilog="""
-Examples:
-
-  1. Creates a conda environment installation plan for developing the currently
-     checked-out package, and the development profile in ``../profile``:
-
-     .. code:: sh
-
-        $ git clone <package>
-        $ cd <package>
-        $ conda activate base
-        (base) devtool env -vv .
-        (base) $ mamba env create -n dev -f environment.yaml
-        (base) $ conda activate dev
-        (dev) $ pip install --no-build-isolation --no-dependencies --editable .
-
-     You may, of course, hand-edit the output file ``environment.yaml`` to
-     adjust for details, add conda or Python packages you'd like to complement
-     your work environment.  An example would be adding debuggers such as
-     ``ipdb`` to the installation plan before calling ``mamba env create``.
-
-  2. By default, we use the native Python version of your conda installation
-     as the Python version to use for the newly created environment. You may
-     select a different one with `--python=X.Y'.  You may also set the output
-     filename with ``--output=name.yaml``, if the default does not please you:
-
-     .. code:: sh
-
-        $ conda activate base
-        (base) devtool env -vv --python=3.12 --output=whatever-i-like.yaml .
-
-  3. To develop multiple packages you checked out, just add the meta package
-     files of all packages you wish to consider, then pip-install the packages
-     on teh top of the created environment, in reverse dependence order
-     (e.g. package A depends on B):
-
-     .. code:: sh
-
-        $ mkdir dev-dir
-        $ cd dev-dir
-        $ git clone <repo-of-B> src/B
-        $ git clone <repo-of-A> src/A
-        $ conda activate base
-        (base) $ devtool env -vv src/*
-        (base) $ mamba env create -n dev -f environment.yaml
-        (base) $ conda activate dev
-        (dev) $ pip install --no-build-isolation --no-dependencies --editable "src/B"
-        (dev) $ pip install --no-build-isolation --no-dependencies --editable "src/A"
-
-""",
-)
-@click.argument(
-    "meta",
-    nargs=-1,
-    required=True,
-    type=click.Path(path_type=pathlib.Path),
-)
-@click.option(
-    "-P",
-    "--profile",
-    default="default",
-    show_default=True,
-    callback=validate_profile,
-    help="Directory containing the development profile (and a file named "
-    "profile.toml), or the name of a configuration key pointing to the "
-    "development profile to use",
-)
-@click.option(
-    "-p",
-    "--python",
-    default=("%d.%d" % sys.version_info[:2]),
-    show_default=True,
-    help="Version of python to build the environment for",
-)
-@click.option(
-    "-u/-U",
-    "--public/--no-public",
-    default=True,
-    help="Set this to **include** private channels/indexes on your plan. "
-    "For conda packages in this case, you **must** execute this within the "
-    "Idiap intranet.",
-)
-@click.option(
-    "-s/-S",
-    "--stable/--no-stable",
-    default=False,
-    help="Set this to **exclude** beta channels from your build",
-)
-@click.option(
-    "-o",
-    "--output",
-    default="environment.yaml",
-    show_default=True,
-    help="The name of the environment plan file",
-    type=click.Path(path_type=pathlib.Path),
-)
-@verbosity_option(logger=logger)
-def env(
-    meta,
-    profile,
-    python,
-    public,
-    stable,
-    output,
-    **_,
-) -> None:
-    """Create a development environment for one or more projects.
-
-    The environment is created by scanning conda's ``meta.yaml`` and Python
-    ``pyproject.toml`` files for all input projects.  All input that is not an
-    existing file path, is considered a supplemental conda package to be
-    installed.  The environment is dumped to disk in the form of a
-    conda-installable YAML environment.  The user may edit this file to add
-    Python packages that may be of interest.
-
-    To interpret ``meta.yaml`` files found on the input directories, this
-    command uses the conda render API to discover all profile- constrained and
-    unconstrained packages to add to the new environment.
-    """
-
-    import shutil
-
-    import yaml
-
-    # 1. loads profile data
-    the_profile = Profile(profile)
-
-    # 2. loads all conda package data, reset "meta" to remove consumed entries
-    conda_config = the_profile.conda_config(python, public, stable)
-    leftover_meta, conda_parsed, conda_packages = _load_conda_packages(
-        meta, conda_config
-    )
-    # 3. loads all python package data, reset "meta" to remove consumed entries
-    (
-        leftover_meta,
-        python_packages,
-        extra_conda_packages,
-    ) = _load_python_packages(
-        the_profile, python, leftover_meta, conda_parsed + conda_packages
-    )
-
-    # At this point, there shouldn't be anything else to consume
-    if leftover_meta:
-        logger.error(
-            f"Ended parsing with unconsumed entries from the command-line: "
-            f"{' ,'.join(str(leftover_meta))}"
-        )
-
-    # Adds python on the required version
-    conda_packages.append(f"python {python}")
-    conda_packages += extra_conda_packages
-
-    # Always append pip, if that is not the case already
-    # we need it for the own package installation later on
-    conda_packages.append("pip")
-
-    # Performs "easy" simplification: if a package appears in two entries,
-    # however one of them is a pin, keep only the pin
-    conda_packages = _simplify_conda_plan(conda_packages)
-
-    # Adds missing pins
-    conda_packages = _add_missing_conda_pins(the_profile, python, conda_packages)
-
-    # Write package installation plan, in YAML format
-    data: dict[str, typing.Any] = dict(channels=conda_config.channels)
-
-    if python_packages:
-        conda_packages.append(
-            dict(  # type: ignore
-                pip=the_profile.python_indexes(public, stable) + python_packages
-            )
-        )
-
-    data["dependencies"] = conda_packages
-
-    # backup previous installation plan, if one exists
-    if output.exists():
-        backup = output.parent / (output.name + "~")
-        shutil.copy(output, backup)
-
-    with output.open("w") as f:
-        import math
-
-        yaml.dump(data, f, width=math.inf)
-
-    click.echo(
-        "Run the following commands to create and prepare your development environment:"
-    )
-    install_cmds = [
-        f"mamba env create --force -n dev -f {output}",
-        "conda activate dev",
-    ]
-    for k in meta:
-        install_cmds.append(
-            f"pip install --no-build-isolation --no-dependencies --editable {k}",
-        )
-    for k in install_cmds:
-        click.secho(k, fg="yellow", bold=True)
diff --git a/src/idiap_devtools/scripts/fullenv.py b/src/idiap_devtools/scripts/fullenv.py
deleted file mode 100644
index d60977255e7d9bad01eed519b0f923f44ad99956..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/scripts/fullenv.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import pathlib
-import sys
-
-import click
-
-from ..click import PreserveIndentCommand, validate_profile, verbosity_option
-from ..logging import setup
-
-logger = setup(__name__.split(".", 1)[0])
-
-
-@click.command(
-    cls=PreserveIndentCommand,
-    epilog="""
-Examples:
-
-  1. Creates a development environment with all constrained packages (assumes
-     the ``default`` profile is configured):
-
-    .. code:: sh
-
-       $ conda activate base
-       (base) $ devtool fullenv -vv
-       (base) $ mamba env create -n dev -f environment.yaml
-       (base) $ conda activate dev
-
-  2. Creates a development environment with a specific profile:
-
-    .. code:: sh
-
-       $ conda activate base
-       (base) $ devtool fullenv -vv -P ../profile
-       (base) $ mamba env create -n dev -f environment.yaml
-       (base) $ conda activate dev
-
-
-  .. tip::
-
-     You may hand-edit the output file ``environment.yaml`` to adjust for
-     details, add conda or Python packages you'd like to complement your work
-     environment.  An example would be adding debuggers such as ``ipdb`` to
-     the installation plan before calling ``mamba env create``.
-
-""",
-)
-@click.option(
-    "-P",
-    "--profile",
-    default="default",
-    show_default=True,
-    callback=validate_profile,
-    help="Directory containing the development profile (and a file named "
-    "profile.toml), or the name of a configuration key pointing to the "
-    "development profile to use",
-)
-@click.option(
-    "-p",
-    "--python",
-    default=("%d.%d" % sys.version_info[:2]),
-    show_default=True,
-    help="Version of python to build the environment for",
-)
-@click.option(
-    "-Y",
-    "--only-python/--no-only-python",
-    default=False,
-    show_default=True,
-    help="Only installs Python packages, and not conda packages "
-    "(except for Python itself, and pip)",
-)
-@click.option(
-    "-o",
-    "--output",
-    default="environment.yaml",
-    show_default=True,
-    help="The name of the environment plan file",
-    type=click.Path(path_type=pathlib.Path),
-)
-@verbosity_option(logger=logger)
-def fullenv(
-    profile,
-    python,
-    only_python,
-    output,
-    **_,
-) -> None:
-    """Create a development environment with all constrained packages."""
-
-    import shutil
-    import typing
-
-    import yaml
-
-    from ..profile import Profile
-
-    the_profile = Profile(profile)
-
-    base_environment = dict(python=python, pip=None)
-
-    if only_python:
-        conda_packages = None
-    else:
-        conda_packages = the_profile.conda_constraints(python)
-
-    if conda_packages is not None:
-        conda_packages.update(base_environment)
-    else:
-        conda_packages = base_environment
-
-    python_packages = the_profile.python_constraints()
-    if python_packages is None:
-        python_packages = []
-
-    # filter out all conda packages already in the list
-    conda_to_python = the_profile.get(("conda", "to_python"), {})
-    python_to_conda = {v: k for k, v in conda_to_python.items() if k != "__ignore__"}
-    python_packages = [
-        k
-        for k in python_packages
-        if python_to_conda.get(k.name, k.name) not in conda_packages
-    ]
-
-    data: dict[str, typing.Any] = dict(channels=["conda-forge"])
-
-    data["dependencies"] = sorted(
-        [f"{k} {v}" if v is not None else k for k, v in conda_packages.items()]
-    )
-
-    if python_packages:
-        data["dependencies"].append(dict(pip=sorted([str(k) for k in python_packages])))
-
-    # backup previous installation plan, if one exists
-    if output.exists():
-        backup = output.parent / (output.name + "~")
-        shutil.copy(output, backup)
-
-    with output.open("w") as f:
-        yaml.dump(data, f)
-
-    click.echo(
-        "Run the following commands to create and prepare your development environment:"
-    )
-    install_cmds = [
-        f"mamba env create --force -n dev -f {output}",
-        "conda activate dev",
-    ]
-    for k in install_cmds:
-        click.secho(k, fg="yellow", bold=True)
diff --git a/src/idiap_devtools/scripts/gitlab/getpath.py b/src/idiap_devtools/scripts/getpath.py
similarity index 74%
rename from src/idiap_devtools/scripts/gitlab/getpath.py
rename to src/idiap_devtools/scripts/getpath.py
index 93b2a1ce721cb08443c384a2480ab51a31809241..1cbac577d0aaff8567f721cc72db58e3f2581cbf 100644
--- a/src/idiap_devtools/scripts/gitlab/getpath.py
+++ b/src/idiap_devtools/scripts/getpath.py
@@ -4,8 +4,8 @@
 
 import click
 
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -15,19 +15,12 @@ logger = setup(__name__.split(".", 1)[0])
     epilog="""
 Examples:
 
-  1. Get the file ``profile.toml`` from software/dev-profile's default branch:
-
-     .. code:: sh
-
-        devtool gitlab getpath software/dev-profile profile.toml
-
-
-  2. Get the directory ``gitlab`` (and eventual sub-directories) from
+  1. Get the directory ``gitlab`` (and eventual sub-directories) from
      software/dev-profile:
 
      .. code:: sh
 
-        devtool gitlab getpath software/dev-profile gitlab
+        devtool getpath software/dev-profile gitlab
 
 """,
 )
@@ -48,7 +41,7 @@ def getpath(package, path, output, ref, **_) -> None:
     Files are downloaded and stored.  Directories are recursed and fully
     downloaded to the client.
     """
-    from ...gitlab import download_path, get_gitlab_instance
+    from ..gitlab import download_path, get_gitlab_instance
 
     if "/" not in package:
         raise RuntimeError('PACKAGE should be specified as "group/name"')
diff --git a/src/idiap_devtools/scripts/gitlab/__init__.py b/src/idiap_devtools/scripts/gitlab/__init__.py
deleted file mode 100644
index ad63e2b3d0ac9520ca43ca2ae359766630e3fa6a..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/scripts/gitlab/__init__.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import click
-
-from ...click import AliasedGroup
-from ...logging import setup
-from .badges import badges
-from .changelog import changelog
-from .getpath import getpath
-from .jobs import jobs
-from .lasttag import lasttag
-from .release import release
-from .runners import runners
-from .settings import settings
-
-logger = setup(__name__.split(".", 1)[0])
-
-
-@click.group(cls=AliasedGroup)
-def gitlab() -> None:
-    """Commands that interact directly with GitLab.
-
-    Commands defined here are supposed to interact with gitlab, and
-    add/modify/remove resources on it directly.
-
-    To avoid repetitive asking, create a configuration file as indicated
-    at :ref:`idiap-devtools.install.setup.gitlab` section of the user
-    guide.
-    """
-    pass
-
-
-gitlab.add_command(changelog)
-gitlab.add_command(release)
-gitlab.add_command(badges)
-gitlab.add_command(runners)
-gitlab.add_command(jobs)
-gitlab.add_command(getpath)
-gitlab.add_command(lasttag)
-gitlab.add_command(settings)
diff --git a/src/idiap_devtools/scripts/gitlab/jobs.py b/src/idiap_devtools/scripts/jobs.py
similarity index 93%
rename from src/idiap_devtools/scripts/gitlab/jobs.py
rename to src/idiap_devtools/scripts/jobs.py
index 94ed08f9b1146f31890300f727fe0cf56ec8e86d..7c71fa6a1aa51048e0f914554ce9e7311d8abbe4 100644
--- a/src/idiap_devtools/scripts/gitlab/jobs.py
+++ b/src/idiap_devtools/scripts/jobs.py
@@ -4,8 +4,8 @@
 
 import click
 
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -50,7 +50,7 @@ Examples:
 @verbosity_option(logger=logger)
 def jobs(status, tags, **_) -> None:
     """List jobs on a given runner identified by description."""
-    from ...gitlab import get_gitlab_instance
+    from ..gitlab import get_gitlab_instance
 
     gl = get_gitlab_instance()
 
diff --git a/src/idiap_devtools/scripts/gitlab/lasttag.py b/src/idiap_devtools/scripts/lasttag.py
similarity index 90%
rename from src/idiap_devtools/scripts/gitlab/lasttag.py
rename to src/idiap_devtools/scripts/lasttag.py
index e9dcfa206445bd5e41d391df1fda1709b1411d6d..b651b0f0299555a6f5d1bd1d98c39f657b206a0f 100644
--- a/src/idiap_devtools/scripts/gitlab/lasttag.py
+++ b/src/idiap_devtools/scripts/lasttag.py
@@ -4,8 +4,8 @@
 
 import click
 
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -36,8 +36,8 @@ def lasttag(package, **_) -> None:
     """Return the last tag information on a given PACKAGE."""
     import gitlab
 
-    from ...gitlab import get_gitlab_instance
-    from ...gitlab.changelog import parse_date
+    from ..gitlab import get_gitlab_instance
+    from ..gitlab.changelog import parse_date
 
     if "/" not in package:
         raise RuntimeError('PACKAGE should be specified as "group/name"')
diff --git a/src/idiap_devtools/scripts/pixi.py b/src/idiap_devtools/scripts/pixi.py
deleted file mode 100644
index 5038231f019199a5f4a256ce83e5d93a603ca5bd..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/scripts/pixi.py
+++ /dev/null
@@ -1,242 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import pathlib
-import sys
-
-import click
-
-from ..click import PreserveIndentCommand, validate_profile, verbosity_option
-from ..logging import setup
-
-logger = setup(__name__.split(".", 1)[0])
-
-
-@click.command(
-    cls=PreserveIndentCommand,
-    epilog="""
-Examples:
-
-  1. Creates a **draft** pixi configuration file for a project you just checked
-     out:
-
-    .. code:: sh
-
-       $ devtool pixi -vv .
-       $ pixi run python
-       ...
-       >>>
-
-  2. Creates a draft pixi configuration file for a project you checked out at
-     directory my-project:
-
-    .. code:: sh
-
-       $ devtool pixi -vv my-project
-       $ cd my-project
-       $ pixi run python
-       ...
-       >>>
-
-  .. tip::
-
-     You may hand-edit the output file ``pixi.toml`` to adjust for details,
-     add conda or Python packages you'd like to complement your work
-     environment. An example would be adding debuggers such as ``pdbpp`` to
-     the installation plan.
-
-""",
-)
-@click.argument(
-    "project-dir",
-    nargs=1,
-    required=True,
-    type=click.Path(path_type=pathlib.Path),
-)
-@click.option(
-    "-P",
-    "--profile",
-    default="default",
-    show_default=True,
-    callback=validate_profile,
-    help="Directory containing the development profile (and a file named "
-    "profile.toml), or the name of a configuration key pointing to the "
-    "development profile to use",
-)
-@click.option(
-    "-p",
-    "--python",
-    default=("%d.%d" % sys.version_info[:2]),
-    show_default=True,
-    help="Version of python to build the environment for",
-)
-@verbosity_option(logger=logger)
-def pixi(
-    project_dir,
-    profile,
-    python,
-    **_,
-) -> None:
-    """Create a pixi recipe for a project."""
-
-    import shutil
-
-    import packaging.requirements
-
-    from ..profile import Profile
-
-    the_profile = Profile(profile)
-
-    python_to_conda = {
-        v: k
-        for k, v in the_profile.data["conda"]["to_python"].items()
-        if not k.startswith("__")
-    }
-
-    version = the_profile.conda_constraints(python)
-    assert version is not None
-
-    def _make_requirement_dict(requirements: list[str]) -> dict[str, str]:
-        retval: dict[str, str] = {}
-        for k in requirements:
-            pr = packaging.requirements.Requirement(k)
-            name = (
-                pr.name if pr.name not in python_to_conda else python_to_conda[pr.name]
-            )
-            if pr.name in version:
-                retval[name] = version[name]
-            if pr.specifier:
-                if name in retval:
-                    retval[name] = ",".join((retval[name], str(pr.specifier)))
-                else:
-                    retval[name] = str(pr.specifier)
-            retval.setdefault(name, "*")
-        return retval
-
-    # loads the pyproject.toml file (easy)
-    pyproject = project_dir / "pyproject.toml"
-    if pyproject.exists():
-        import tomli
-
-        pyproject = tomli.load(pyproject.open("rb"))
-    else:
-        raise click.ClickException(
-            f"Cannot find `pyproject.toml` at directory `{str(project_dir)}`"
-        )
-
-    # build output TOML pixi file
-    config = {}
-    config["project"] = dict(
-        name=pyproject["project"]["name"],
-        authors=[
-            f"{k['name']} <{k['email']}>"
-            for k in pyproject["project"].get("authors", [])
-            + pyproject["project"].get("maintainers", [])
-        ],
-        description=pyproject["project"]["description"],
-        # license=pyproject["project"]["license"]["text"],
-        readme="README.md",
-        homepage=pyproject["project"]["urls"]["homepage"],
-        repository=pyproject["project"]["urls"]["repository"],
-        documentation=pyproject["project"]["urls"]["documentation"],
-    )
-
-    conda_config = the_profile.conda_config(python=python, public=True, stable=True)
-    config["project"]["channels"] = conda_config.channels
-    config["project"]["platforms"] = ["linux-64", "osx-arm64"]
-
-    config["dependencies"] = {"python": python + ".*"}
-    config["dependencies"].update(
-        _make_requirement_dict(pyproject.get("project", {}).get("dependencies", []))
-    )
-
-    cmds = []
-
-    # setup standardized build procedure
-    config.setdefault("feature", {}).setdefault("build", {})["dependencies"] = (
-        _make_requirement_dict(pyproject.get("build-system", {}).get("requires", []))
-    )
-    # add pip so that the build works
-    config["feature"]["build"]["dependencies"].update(_make_requirement_dict(["pip"]))
-    config["feature"]["build"]["tasks"] = dict(
-        build="pip install --no-build-isolation --no-dependencies --editable ."
-    )
-    config.setdefault("environments", {}).setdefault("default", []).insert(0, "build")
-    cmds.append("To install, run: `pixi run build`")
-
-    # adds optional features
-    for feature, deps in (
-        pyproject.get("project", {}).get("optional-dependencies", {}).items()
-    ):
-        config.setdefault("feature", {}).setdefault(feature, {})["dependencies"] = (
-            _make_requirement_dict(deps)
-        )
-
-        if "pre-commit" in config["feature"][feature]["dependencies"]:
-            config["feature"][feature]["tasks"] = {
-                "qa": "pre-commit run --all-files",
-                "qa-install": "pre-commit install",
-            }
-            # this feature can be separated from the rest
-            config.setdefault("environments", {}).setdefault("default", []).insert(
-                0, feature
-            )
-            cmds.append("To install pre-commit hook, run: `pixi run qa-install`")
-            cmds.append("To run quality-assurance, run: `pixi run qa`")
-
-            # if ruff is part of pre-commit configuration, then also add that
-            # dependence to the qa stack
-            precommit_config = project_dir / ".pre-commit-config.yaml"
-            if (
-                precommit_config.exists()
-                and "ruff" in precommit_config.open().read()
-                and "ruff" not in config["feature"][feature]["dependencies"]
-            ):
-                config["feature"][feature]["dependencies"]["ruff"] = "*"
-                config["feature"][feature]["tasks"]["ruff"] = "ruff check"
-                cmds.append("To run a simple ruff check, run: `pixi run ruff`")
-
-        if "sphinx" in config["feature"][feature]["dependencies"]:
-            config["feature"][feature]["tasks"] = {
-                "doc": {
-                    "cmd": "rm -rf doc/api && rm -rf html && sphinx-build -aEW doc html",
-                    "depends_on": "build",
-                }
-            }
-            # this feature needs to have the package installed
-            config.setdefault("environments", {}).setdefault("default", []).insert(
-                0, feature
-            )
-            cmds.append("To do build docs, run: `pixi run doc`")
-
-        if "pytest" in config["feature"][feature]["dependencies"]:
-            config["feature"][feature]["tasks"] = {
-                "test": {
-                    "cmd": "pytest -sv tests/",
-                    "depends_on": "build",
-                }
-            }
-            # this feature needs to have the package installed
-            config.setdefault("environments", {}).setdefault("default", []).insert(
-                0, feature
-            )
-            cmds.append("To do run test, run: `pixi run test`")
-
-    # backup previous installation plan, if one exists
-    output = project_dir / "pixi.toml"
-    if output.exists():
-        backup = output.parent / (output.name + "~")
-        shutil.copy(output, backup)
-
-    with output.open("w") as f:
-        import tomlkit
-
-        tomlkit.dump(config, f)
-        click.secho(
-            f"pixi configuration recorded at {str(output)}",
-            fg="yellow",
-            bold=True,
-        )
-        for k in cmds:
-            click.secho(k, fg="yellow", bold=True)
diff --git a/src/idiap_devtools/scripts/gitlab/release.py b/src/idiap_devtools/scripts/release.py
similarity index 75%
rename from src/idiap_devtools/scripts/gitlab/release.py
rename to src/idiap_devtools/scripts/release.py
index 0c95f6ec9e15a44e2527951c708f867879248682..c52e9467e5fd9c1d9414d6c72653dc489d3b6931 100644
--- a/src/idiap_devtools/scripts/gitlab/release.py
+++ b/src/idiap_devtools/scripts/release.py
@@ -6,11 +6,8 @@ import typing
 
 import click
 
-from idiap_devtools.click import validate_profile
-from idiap_devtools.profile import Profile, get_profile_path
-
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -38,41 +35,9 @@ Examples:
 
         devtool gitlab release -vv --dry-run changelog.md
 
-  3. You may also pin package dependencies upon the release, so that the
-     shipped package respects a particular development profile set of pins:
-
-     .. code:: sh
-
-        devtool gitlab release -vv --pin-dependencies changelog.md
-
-     The `default` profile is used, if set on your configuration file.
-     Otherwise, you may specify it explicitly like:
-
-     .. code:: sh
-
-        devtool gitlab release -vv --profile=specific --pin-dependencies changelog.md
-
 """,
 )
 @click.argument("changelog", type=click.File("rt", lazy=False))
-@click.option(
-    "-P",
-    "--profile",
-    default="default",
-    show_default=True,
-    callback=validate_profile,
-    help="Directory containing the development profile (and a file named "
-    "profile.toml), or the name of a configuration key pointing to the "
-    "development profile to use",
-)
-@click.option(
-    "-p",
-    "--pin-dependencies/--no-pin-dependencies",
-    default=False,
-    help="If set, then pin dependencies from the dev-profile on the package "
-    "to be released.  By default your default dev-profile is used.  You may "
-    "override this using the --profile option",
-)
 @click.option(
     "-d",
     "--dry-run/--no-dry-run",
@@ -84,8 +49,6 @@ Examples:
 @verbosity_option(logger=logger)
 def release(
     changelog: typing.TextIO,
-    profile: str,
-    pin_dependencies: bool,
     dry_run: bool,
     **_,
 ) -> None:
@@ -95,9 +58,7 @@ def release(
     ``changelog`` command), this script goes through all packages listed (and
     in order):
 
-        * Modifies ``pyproject.toml`` with the new release number and pins the
-          dependencies according to the specified profile's constraints (if one
-          was specified)
+        * Modifies ``pyproject.toml`` with the new release number
         * Sets-up the README links to point to the correct pipeline and
           documentation for the package
         * Commits, tags and pushes the git project adding the changelog
@@ -108,11 +69,6 @@ def release(
           pipeline versions
         * Re-commits and pushes the whole with the option ``[ci skip]``.
 
-    N.B.: When the option ``pin-dependencies`` is set, the versions of the
-    dependencies in ``pyproject.toml`` will be pinned to those of the Python
-    ``constraints.txt`` file available in the select development profile
-    (choose using option ``--profile``).
-
     The changelog is expected to have the following structure:
 
     .. code:: markdown
@@ -144,8 +100,8 @@ def release(
 
     import packaging.version
 
-    from ...gitlab import get_gitlab_instance
-    from ...gitlab.release import (
+    from ..gitlab import get_gitlab_instance
+    from ..gitlab.release import (
         get_next_version,
         release_package,
         wait_for_pipeline_to_finish,
@@ -170,18 +126,6 @@ def release(
             bold=True,
         )
 
-    # loads profile data
-    if pin_dependencies:
-        the_profile = Profile(profile)
-        logger.info(
-            f"Pinning dependencies from profile `{get_profile_path(profile)}'...",
-        )
-    else:
-        the_profile = None
-        logger.warning(
-            "Not pinning dependencies (use --pin-dependencies to change this).",
-        )
-
     for pkg_number, (header, line) in enumerate(pkgs):
         match = header_re.match(header)
 
@@ -243,7 +187,6 @@ def release(
             tag_name=vtag,
             tag_comments=description_text,
             dry_run=dry_run,
-            profile=the_profile,
         )
         if not dry_run:
             # now, wait for the pipeline to finish, before we can release the
diff --git a/src/idiap_devtools/scripts/gitlab/runners.py b/src/idiap_devtools/scripts/runners.py
similarity index 97%
rename from src/idiap_devtools/scripts/gitlab/runners.py
rename to src/idiap_devtools/scripts/runners.py
index c1786717176336471746edec40ee8338b9c8927e..712df4691a7eff9981f8d75ca8954740eb8e9633 100644
--- a/src/idiap_devtools/scripts/gitlab/runners.py
+++ b/src/idiap_devtools/scripts/runners.py
@@ -6,8 +6,8 @@ import pathlib
 
 import click
 
-from ...click import AliasedGroup, PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import AliasedGroup, PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -64,8 +64,8 @@ def enable(name, targets, group, dry_run, **_) -> None:
     at.
     """
 
-    from ...gitlab import get_gitlab_instance
-    from ...gitlab.runners import (
+    from ..gitlab import get_gitlab_instance
+    from ..gitlab.runners import (
         get_project,
         get_projects_from_file,
         get_projects_from_group,
diff --git a/src/idiap_devtools/scripts/gitlab/settings.py b/src/idiap_devtools/scripts/settings.py
similarity index 96%
rename from src/idiap_devtools/scripts/gitlab/settings.py
rename to src/idiap_devtools/scripts/settings.py
index 56fbd72f1befa3ae7b41e6123ea1f24b4751b302..7b97ee52c86a3d90eb790ab89af639e2261328fc 100644
--- a/src/idiap_devtools/scripts/gitlab/settings.py
+++ b/src/idiap_devtools/scripts/settings.py
@@ -7,8 +7,8 @@ import typing
 
 import click
 
-from ...click import PreserveIndentCommand, verbosity_option
-from ...logging import setup
+from ..click import PreserveIndentCommand, verbosity_option
+from ..logging import setup
 
 logger = setup(__name__.split(".", 1)[0])
 
@@ -101,8 +101,8 @@ Examples:
 def settings(projects, avatar, description, group, archive, dry_run, **_) -> None:
     """Update project settings."""
 
-    from ...gitlab import get_gitlab_instance
-    from ...gitlab.runners import (
+    from ..gitlab import get_gitlab_instance
+    from ..gitlab.runners import (
         get_project,
         get_projects_from_file,
         get_projects_from_group,
diff --git a/src/idiap_devtools/scripts/update_pins.py b/src/idiap_devtools/scripts/update_pins.py
deleted file mode 100644
index 962bc8ea4fac3fefa5935f0d621e7a2b8ca6273e..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/scripts/update_pins.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import sys
-
-import click
-
-from ..click import PreserveIndentCommand, validate_profile, verbosity_option
-from ..logging import setup
-
-logger = setup(__name__.split(".", 1)[0])
-
-
-@click.command(
-    cls=PreserveIndentCommand,
-    epilog="""
-Examples:
-
-    1. Updates the default constraints taking as base a Python 3.10 environment:
-
-       .. code:: sh
-
-          devtool update-pins --python=3.10
-
-    2. Updates the default constraints using the default Python version
-       (installed on the base environment), and respecting a few provided
-       constraints (manual pins):
-
-       .. code:: sh
-
-          devtool update-pins --python=3.10 opencv=4.5.1 pytorch=1.9
-
-    3. Updates the constraints on a checked-out profile directory:
-
-       .. code:: sh
-
-          devtool update-pins --python=3.10 --profile=../another-profile
-""",
-)
-@click.argument("manual_pins", nargs=-1)
-@click.option(
-    "-P",
-    "--profile",
-    default="default",
-    show_default=True,
-    callback=validate_profile,
-    help="Directory containing the development profile (and a file named "
-    "profile.toml), or the name of a configuration key pointing to the "
-    "development profile to use",
-)
-@click.option(
-    "-p",
-    "--python",
-    default=("%d.%d" % sys.version_info[:2]),
-    show_default=True,
-    help="Version of python to build the environment for",
-)
-@click.option(
-    "-p/-P",
-    "--only-pip/--no-only-pip",
-    default=False,
-    help="Set this to update **only** pip constraints. The pins will "
-    "then be copied from the conda-constraints to the pip one.",
-)
-@verbosity_option(logger=logger)
-def update_pins(manual_pins, profile, python, only_pip, **_) -> None:
-    """Update pip/mamba/conda package constraints (requires conda).
-
-    The update is done by checking-up conda-forge and trying to create
-    an environment with all packages listed on the current conda
-    constraints. Once an environment has been resolved, it is "copied"
-    to the Python (pip) constraints file, by excluding non-Python
-    packages.
-    """
-    import subprocess
-
-    from ..profile import Profile
-    from ..update_pins import (
-        filter_python_packages,
-        load_packages_from_conda_build_config,
-        update_pip_constraints_only,
-    )
-
-    # 1. loads profile data
-    the_profile = Profile(profile)
-
-    conda_config_path = the_profile.get_path(("conda", "constraints"))
-
-    if conda_config_path is None:
-        click.secho(
-            f"No conda-constraints at profile `{profile}' - aborting",
-            bold=True,
-            fg="red",
-        )
-        return None
-
-    # 2. loads the current conda pins
-    packages, package_names_map = load_packages_from_conda_build_config(
-        conda_config_path, {"channels": []}
-    )
-
-    pip_constraints_path = the_profile.get_path(("python", "constraints"))
-    conda_to_python = the_profile.get(("conda", "to_python"), {})
-
-    if only_pip:
-        if pip_constraints_path is None:
-            click.secho(
-                f"No pip-constraints at profile `{profile}' - aborting",
-                bold=True,
-                fg="red",
-            )
-            return None
-
-        click.secho(
-            f"Copying pins from {str(conda_config_path)} to "
-            f"{str(pip_constraints_path)}...",
-            bold=True,
-        )
-        return update_pip_constraints_only(
-            conda_config_path, pip_constraints_path, conda_to_python
-        )
-
-    reversed_package_names_map = {v: k for k, v in package_names_map.items()}
-
-    # ask mamba to create an environment with the packages
-    try:
-        cmd = (
-            [
-                "mamba",
-                "create",
-                "--dry-run",
-                "--override-channels",
-                "-c",
-                "conda-forge",
-                "-n",
-                "temp_env",
-                f"python={python}",
-            ]
-            + packages
-            + list(manual_pins)
-        )
-        click.secho(
-            f"Executing `{' '.join(cmd)}' to calculate a viable environment...",
-            bold=True,
-        )
-        output = subprocess.run(cmd, capture_output=True, check=True)
-
-    except subprocess.CalledProcessError as e:
-        click.secho(e.output.decode(), bold=True, fg="red")
-        raise e
-
-    env_text = output.stdout.decode("utf-8")
-    click.secho(env_text, fg="magenta")
-
-    resolved_packages = []
-    for line in env_text.split("\n"):
-        line = line.strip()
-        if line.startswith("+ "):
-            values = line.split()
-            name, version = values[1], values[2]
-            resolved_packages.append((name, version))
-
-    # we only monitor a subset of packages
-    resolved_packages = sorted(
-        [(p, v) for (p, v) in resolved_packages if p in packages],
-        key=lambda x: (x[0], len(x[0])),
-    )
-
-    # write the new pinning
-    click.secho(
-        f"Saving {len(resolved_packages)} updated entries to "
-        f"`{conda_config_path}'...",
-        bold=True,
-    )
-
-    with conda_config_path.open("rt") as f:
-        content = f.read()
-
-    start = """
-# AUTOMATIC PARSING START
-# DO NOT MODIFY THIS COMMENT
-
-# list all packages with dashes or dots in their names, here:"""
-    idx1 = content.find(start)
-    idx2 = content.find("# AUTOMATIC PARSING END")
-    pins = "\n".join(
-        f'{reversed_package_names_map.get(name, name)}:\n  - "{version}"'
-        for name, version in resolved_packages
-    )
-    package_names_map_str = "\n".join(
-        f"  {k}: {v}" for k, v in package_names_map.items()
-    )
-
-    new_content = f"""{start}
-package_names_map:
-{package_names_map_str}
-
-
-{pins}
-
-"""
-
-    content = content[:idx1] + new_content + content[idx2:]
-    with conda_config_path.open("w") as f:
-        f.write(content)
-
-    if pip_constraints_path is None:
-        click.secho(
-            f"No pip-constraints at profile `{profile}' - not updating...",
-            bold=True,
-        )
-        return None
-
-    with pip_constraints_path.open("w") as f:
-        python_packages = filter_python_packages(resolved_packages, conda_to_python)
-        python_packages = sorted(
-            [(p, v) for (p, v) in python_packages],
-            key=lambda x: (x[0], len(x[0])),
-        )
-        click.secho(
-            f"Saving {len(python_packages)} entries to `{pip_constraints_path}'...",
-            bold=True,
-        )
-        constraints = [f"{name}=={version}\n" for name, version in python_packages]
-        f.writelines(constraints)
-
-    return None
diff --git a/src/idiap_devtools/update_pins.py b/src/idiap_devtools/update_pins.py
deleted file mode 100644
index d545cdf73f4f7901f813c9fda7d37346089dbd31..0000000000000000000000000000000000000000
--- a/src/idiap_devtools/update_pins.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import pathlib
-import typing
-
-import click
-import requests
-
-
-def load_packages_from_conda_build_config(
-    conda_build_config: pathlib.Path,
-    condarc_options: dict[str, typing.Any],
-    with_pins: bool = False,
-) -> tuple[list[str], dict[str, str]]:
-    """Load packages listed in a conda recipe."""
-
-    from conda_build.metadata import ns_cfg, select_lines
-
-    from .conda import make_conda_config
-
-    with pathlib.Path(conda_build_config).open() as f:
-        content = f.read()
-
-    idx1 = content.find("# AUTOMATIC PARSING START")
-    idx2 = content.find("# AUTOMATIC PARSING END")
-    content = content[idx1:idx2]
-
-    # filter out using conda-build specific markers
-    condarc_options["variant_config_files"] = [str(conda_build_config)]
-    config = make_conda_config(condarc_options)
-    content = select_lines(content, ns_cfg(config), variants_in_place=False)
-
-    import yaml
-
-    package_pins = yaml.safe_load(content)
-
-    package_names_map = package_pins.pop("package_names_map")
-
-    if with_pins:
-        # NB : in pins, need to strip the occasional " cuda*" suffix
-        # tensorflow=x.x.x cuda* -> tensorflow=x.x.x
-        packages = [
-            f"{package_names_map.get(p, p)}={str(v[0]).split(' ')[0]}"
-            for p, v in package_pins.items()
-        ]
-    else:
-        packages = [package_names_map.get(p, p) for p in package_pins.keys()]
-
-    return packages, package_names_map
-
-
-def filter_python_packages(resolved_packages, conda_to_python: dict[str, str | None]):
-    """Filter the list of packages to return only Python packages available on
-    PyPI.
-
-    This function will also perform name translation and de-duplication of
-    package names when possible.
-
-
-    Args:
-
-        resolved_packages: list of tuples ``(package, version)``, returned by the
-            ``mamba create --dry-run`` subprocess, for the packages we care
-            about.
-
-
-    Returns
-    -------
-        List of of packages and versions available on PyPI
-    """
-
-    keep_list = []
-
-    click.echo(f"Filtering {len(resolved_packages)} packages for PyPI availability")
-
-    for p, v in resolved_packages:
-        if p in conda_to_python["__ignore__"]:
-            continue
-
-        p = conda_to_python.get(p, p)
-
-        try:
-            url = f"https://pypi.org/pypi/{p}/{v}/json"
-            r = requests.get(url)
-            if r.ok:
-                keep_list.append((p, v))
-            else:
-                click.echo(f"{p}@{v} NOT found - ignoring")
-        except requests.exceptions.RequestException:
-            continue
-
-    return keep_list
-
-
-def update_pip_constraints_only(
-    conda_config_path: pathlib.Path,
-    pip_constraints_path: pathlib.Path,
-    conda_to_python: dict[str, typing.Any],
-) -> None:
-    """Update pip constraints only."""
-
-    packages, _ = load_packages_from_conda_build_config(
-        conda_config_path,
-        {"channels": []},
-        with_pins=True,
-    )
-    package_pairs = [p.split("=", 1) for p in packages]
-
-    with pip_constraints_path.open("wt") as f:
-        python_packages = filter_python_packages(package_pairs, conda_to_python)
-        python_packages = sorted(
-            [(p, v) for (p, v) in python_packages],
-            key=lambda x: (x[0], len(x[0])),
-        )
-        click.echo(
-            f"Saving {len(python_packages)} entries to `{pip_constraints_path}'..."
-        )
-        constraints = [f"{name}=={version}\n" for name, version in python_packages]
-        f.writelines(constraints)
diff --git a/tests/test_release.py b/tests/test_release.py
deleted file mode 100644
index 1d1f493d3816dceaadb81f3435fdc2662686767f..0000000000000000000000000000000000000000
--- a/tests/test_release.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-import pytest
-
-from idiap_devtools.gitlab import release
-from packaging.requirements import Requirement
-
-
-def test_pinning_no_constraints():
-    """Pinning a simple packages list without pre-constraints."""
-    constraints = [
-        Requirement("pkg-a == 1.2.3"),  # Strict constraint
-        Requirement("pkg-b >= 2.5"),  # Greater or equal constraint
-        # pkg-c: package not in the constraints list
-        Requirement("pkg-d ~= 2.0"),  # Compatible constraint
-        Requirement("pkg-e@ https://www.idiap.ch/dummy/pkg-e"),  # URL constr.
-        Requirement("pkg-f[extra1] == 1.2.3"),  # With extras
-        Requirement("pkg-g[extra2]@ https://www.idiap.ch/dummy/pkg-g"),
-        Requirement("pkg-h == 1.2.3; sys_platform == 'darwin'"),  # With marker
-        Requirement(
-            "pkg-i@ https://www.idiap.ch/dummy/pkg-i ; sys_platform == 'darwin'"
-        ),
-        Requirement("pkg-z == 1.0.0"),  # Constraint not in the packages list
-    ]
-    pkgs = [
-        "pkg-a",
-        "pkg-b",
-        "pkg-c",
-        "pkg-d",
-        "pkg-e",
-        "pkg-f",
-        "pkg-g",
-        "pkg-h",
-        "pkg-i",
-    ]
-
-    # Actual call. Modifies pkgs in-place.
-    release._pin_versions_of_packages_list(  # noqa: SLF001
-        packages_list=pkgs,
-        dependencies_versions=constraints,
-    )
-
-    expected_pkgs = [
-        "pkg-a==1.2.3",
-        "pkg-b>=2.5",
-        "pkg-c",
-        "pkg-d~=2.0",
-        "pkg-e@ https://www.idiap.ch/dummy/pkg-e",
-        "pkg-f[extra1]==1.2.3",
-        "pkg-g[extra2]@ https://www.idiap.ch/dummy/pkg-g",
-        'pkg-h==1.2.3; sys_platform == "darwin"',
-        'pkg-i@ https://www.idiap.ch/dummy/pkg-i ; sys_platform == "darwin"',
-    ]
-
-    assert pkgs == expected_pkgs
-
-
-def test_pinning_multiple_times():
-    """Pinning with a constraint present multiple times is not supported."""
-    constraints = [
-        Requirement("pkg-a == 1.2.3; sys_platform == 'darwin'"),
-        Requirement("pkg-a == 3.2.1; sys_platform != 'darwin'"),
-    ]
-    pkgs = ["pkg-a"]
-
-    with pytest.raises(NotImplementedError):
-        release._pin_versions_of_packages_list(pkgs, constraints)  # noqa: SLF001
-
-
-def test_pinning_with_constraints():
-    """Pinning a packages list with any constraints already applied."""
-    constraints = [Requirement("pkg-a == 1.2.3")]
-    pkgs = ["pkg-a == 2.0"]  # Constraints can not be set in the packages list.
-
-    with pytest.raises(ValueError):
-        release._pin_versions_of_packages_list(pkgs, constraints)  # noqa: SLF001
-
-    constraints = [Requirement("pkg-a == 1.2.3")]
-    pkgs = ["pkg-a; sys_platform != 'darwin'"]  # Neither can the markers
-
-    with pytest.raises(ValueError):
-        release._pin_versions_of_packages_list(pkgs, constraints)  # noqa: SLF001
-
-    constraints = [Requirement("pkg-a == 1.2.3")]
-    pkgs = ["pkg-a(extra)"]  # Nor the extras
-
-    with pytest.raises(ValueError):
-        release._pin_versions_of_packages_list(pkgs, constraints)  # noqa: SLF001