diff --git a/.flake8 b/.flake8 index 9c24de21d..bf062834b 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,15 @@ [flake8] -ignore = E203, E266, E501, W503 +ignore = + E203, + E266, + E501, + W503, + # TODO: reduce complexity and restore this rule (Function is too complex) + C901, + + max-line-length = 80 max-complexity = 16 select = B,C,E,F,W,T4,B9 +per-file-ignores = + geoapps/clustering/driver.py: E402 diff --git a/.gitattributes b/.gitattributes index 905c30aa5..42f9d0d40 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,5 @@ +*.pt filter=lfs diff=lfs merge=lfs -text *.geoh5 filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.min.js filter=lfs diff=lfs merge=lfs -text *.ipynb filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/issue_to_jira.yml b/.github/workflows/issue_to_jira.yml index 3054aa233..8ab1f0961 100644 --- a/.github/workflows/issue_to_jira.yml +++ b/.github/workflows/issue_to_jira.yml @@ -28,7 +28,7 @@ jobs: # Additional fields in JSON format fields: '{"components": [{"name": "geoapps"}]}' - name: Post JIRA link - uses: peter-evans/create-or-update-comment@v3 + uses: peter-evans/create-or-update-comment@v4 with: # The number of the issue or pull request in which to create a comment. issue-number: ${{ github.event.issue.number }} diff --git a/.github/workflows/pr_add_jira_summary.yml b/.github/workflows/pr_add_jira_summary.yml index 11f4f9b7f..f0c8a8dda 100644 --- a/.github/workflows/pr_add_jira_summary.yml +++ b/.github/workflows/pr_add_jira_summary.yml @@ -19,7 +19,13 @@ jobs: PR_TITLE: ${{ github.event.pull_request.title }} run: > echo $HEAD_REF $PR_TITLE - | echo "issue_key=$(grep -os "\b\(GA\|GEOPY\)-[0-9]\+" | head -n1)" >> $GITHUB_OUTPUT + | echo "issue_key=$( + grep -osi "\b\(GA\|GEOPY\|DEVOPS\)[ #-]*[0-9]\+" + | head -n1 + | sed -E "s/([A-Z]+)[-# ]*([0-9]+)/\1-\2/i" + | tr [:lower:] [:upper:] + )" + >> $GITHUB_OUTPUT - name: Get JIRA summary id: get_jira_summary if: ${{ steps.find_jira_key.outputs.issue_key }} @@ -31,18 +37,26 @@ jobs: -H "Authorization: Basic $JIRA_BASIC_AUTH" -H "Content-Type: application/json" "$JIRA_BASE_URL/rest/api/2/issue/${{ steps.find_jira_key.outputs.issue_key }}" - | echo "summary=$(jq -r '.fields.summary')" >> $GITHUB_OUTPUT + | echo "summary=$(jq -r '.fields.summary // empty')" >> $GITHUB_OUTPUT + - name: Extract PR title + id: get_pr_title + env: + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + echo "text=$(echo $PR_TITLE | sed -E "s/^\s*[?[A-Z]+[-# ]*[0-9]+]?[-: ]*(.*)/\1/i")" >> $GITHUB_OUTPUT - name: Add comment if: ${{ steps.find_jira_key.outputs.issue_key }} env: ISSUE_SUMMARY: ${{ steps.get_jira_summary.outputs.summary }} + TITLE_TEXT: ${{ steps.get_pr_title.outputs.text }} PR_BODY: ${{ github.event.pull_request.body }} run: > jq --arg ISSUE_ID "${{ steps.find_jira_key.outputs.issue_key }}" --arg ISSUE_SUMMARY "$(cat <<< $ISSUE_SUMMARY)" + --arg TITLE_TEXT "$(cat <<< ${TITLE_TEXT:-$ISSUE_SUMMARY})" --arg PR_BODY "$(cat <<< $PR_BODY)" - -c '."body"="**" + $ISSUE_ID + " - " + $ISSUE_SUMMARY + "**\n" + $PR_BODY' <<< {} + -c '{"title": ($ISSUE_ID + ": " + $TITLE_TEXT), "body": ("**" + $ISSUE_ID + " - " + $ISSUE_SUMMARY + "**\n" + $PR_BODY)}' <<< {} | curl -sS -X POST -d @- -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -H "Content-Type: application/json" diff --git a/.github/workflows/pytest-unix-os.yaml b/.github/workflows/pytest-unix-os.yml similarity index 65% rename from .github/workflows/pytest-unix-os.yaml rename to .github/workflows/pytest-unix-os.yml index ad800e30a..2798e6ea1 100644 --- a/.github/workflows/pytest-unix-os.yaml +++ b/.github/workflows/pytest-unix-os.yml @@ -2,6 +2,7 @@ name: pytest on Unix OS on: pull_request: + types: [opened, synchronize, reopened, ready_for_review] branches: - develop - main @@ -20,16 +21,14 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true -env: - source_dir: geoapps - jobs: pytest: name: pytest (Unix) + if: github.event_name != 'pull_request' || github.event.pull_request.draft == false strategy: fail-fast: false matrix: - python_ver: ['3.9', '3.10'] + python_ver: ['3.10'] os: [ubuntu-latest] runs-on: ${{ matrix.os }} defaults: @@ -37,8 +36,9 @@ jobs: shell: bash -l {0} env: PYTHONUTF8: 1 - CONDA_LOCK_ENV_FILE: environments/conda-py-${{ matrix.python_ver }}-${{ startsWith(matrix.os, 'macos') && 'osx' || 'linux' }}-64-dev.lock.yml - PIP_EXTRA_INDEX_URL: https://test.pypi.org/simple/ + CONDA_CHANNEL_PRIORITY: strict + PIP_NO_DEPS: 1 # all dependencies are installed from conda + CONDA_LOCK_ENV_FILE: environments/py-${{ matrix.python_ver }}-${{ startsWith(matrix.os, 'macos') && 'osx' || 'linux' }}-64-dev.conda.lock.yml steps: - uses: actions/checkout@v4 with: @@ -50,5 +50,4 @@ jobs: environment-name: test_env cache-downloads: true - name: pytest - run: | - pytest --cov=${source_dir} --cov-report=xml --cov-branch + run: pytest --cov --cov-report=xml diff --git a/.github/workflows/pytest-windows.yaml b/.github/workflows/pytest-windows.yml similarity index 62% rename from .github/workflows/pytest-windows.yaml rename to .github/workflows/pytest-windows.yml index 9d8dff5b5..5fd797e65 100644 --- a/.github/workflows/pytest-windows.yaml +++ b/.github/workflows/pytest-windows.yml @@ -2,6 +2,7 @@ name: pytest on Windows on: pull_request: + types: [opened, synchronize, reopened, ready_for_review] branches: - develop - main @@ -20,24 +21,23 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true -env: - source_dir: geoapps - jobs: pytest: name: pytest (Windows) + if: github.event_name != 'pull_request' || github.event.pull_request.draft == false strategy: fail-fast: false matrix: - python_ver: ['3.9', '3.10'] + python_ver: ['3.10'] defaults: run: shell: powershell runs-on: windows-latest env: PYTHONUTF8: 1 - CONDA_LOCK_ENV_FILE: environments/conda-py-${{ matrix.python_ver }}-win-64-dev.lock.yml - PIP_EXTRA_INDEX_URL: https://test.pypi.org/simple/ + CONDA_CHANNEL_PRIORITY: strict + PIP_NO_DEPS: 1 # all dependencies are installed from conda + CONDA_LOCK_ENV_FILE: environments/py-${{ matrix.python_ver }}-win-64-dev.conda.lock.yml steps: - uses: actions/checkout@v4 with: @@ -50,10 +50,11 @@ jobs: init-shell: powershell cache-downloads: true - name: pytest - run: | - pytest --cov=${source_dir} --cov-report=xml --cov-branch + run: pytest --cov --cov-report=xml - name: Codecov - if: ${{ success() && matrix.python_ver == '3.9' }} - uses: codecov/codecov-action@v3 + if: ${{ success() && matrix.python_ver == '3.10' }} + uses: codecov/codecov-action@v4 with: name: GitHub + fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 99edd0f5d..cb867e21b 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -2,6 +2,7 @@ name: static analysis on: pull_request: + types: [opened, synchronize, reopened, ready_for_review] branches: - develop - main @@ -26,14 +27,16 @@ env: jobs: pylint: name: pylint + if: github.event_name != 'pull_request' || github.event.pull_request.draft == false runs-on: ubuntu-latest defaults: run: shell: bash -l {0} env: PYTHONUTF8: 1 - CONDA_LOCK_ENV_FILE: environments/conda-py-3.9-linux-64-dev.lock.yml - PIP_EXTRA_INDEX_URL: https://test.pypi.org/simple/ + CONDA_CHANNEL_PRIORITY: strict + PIP_NO_DEPS: 1 # all dependencies are installed from conda + CONDA_LOCK_ENV_FILE: environments/py-3.10-linux-64-dev.conda.lock.yml steps: - uses: actions/checkout@v4 - name: Setup conda env diff --git a/.idea/copyright/Mira_Geoscience___MIT.xml b/.idea/copyright/Mira_Geoscience___MIT.xml index c6a27dfa5..b6c532b99 100644 --- a/.idea/copyright/Mira_Geoscience___MIT.xml +++ b/.idea/copyright/Mira_Geoscience___MIT.xml @@ -1,6 +1,8 @@ - - + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml index 594245b6d..93dd62722 100644 --- a/.idea/copyright/profiles_settings.xml +++ b/.idea/copyright/profiles_settings.xml @@ -1,7 +1,21 @@ - + - + + + + + - + \ No newline at end of file diff --git a/.idea/scopes/mira_sources.xml b/.idea/scopes/mira_sources.xml deleted file mode 100644 index 4417a01d1..000000000 --- a/.idea/scopes/mira_sources.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/.idea/scopes/sources.xml b/.idea/scopes/sources.xml new file mode 100644 index 000000000..be5ea0678 --- /dev/null +++ b/.idea/scopes/sources.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 82e47588f..e247202da 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,8 +1,8 @@ default_language_version: python: python3 -exclude: (^docs/(conf.py|_ext/)|^geoapps/simpeg(PF|EM1D)/|^geoapps-assets/) -default_stages: [commit,push] +exclude: (^docs/(conf.py|_ext/)) +default_stages: [pre-commit,pre-push] fail_fast: false ci: @@ -11,42 +11,46 @@ ci: autoupdate_schedule: monthly repos: -- repo: https://github.com/psf/black - rev: 23.10.0 +- repo: https://github.com/hadialqattan/pycln + rev: v2.5.0 hooks: - - id: black -- repo: https://github.com/PyCQA/isort - rev: 5.12.0 + - id: pycln + args: [--config=pyproject.toml] +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.9.1 hooks: - - id: isort - additional_dependencies: [tomli] # to read config from pyproject.toml -- repo: https://github.com/humitos/mirrors-autoflake - rev: v1.1 - hooks: - - id: autoflake -#- repo: https://github.com/PyCQA/flake8 -# rev: 6.1.0 -# hooks: -# - id: flake8 -- repo: https://github.com/asottile/pyupgrade - rev: v3.15.0 - hooks: - - id: pyupgrade - args: [--py39-plus] -#- repo: https://github.com/pre-commit/mirrors-mypy -# rev: v1.6.1 + - id: ruff + args: + - --fix + - --exit-non-zero-on-fix +# - --unsafe-fixes + exclude_types: [jupyter] + - id: ruff-format + exclude_types: [jupyter] +#- repo: https://github.com/pre-commit/mirrors-mypy # TODO: fix mypy errors +# rev: v1.10.0 # hooks: # - id: mypy # additional_dependencies: [ +# numpy==1.26.*, # types-toml, # types-PyYAML, -# tomli # to read config from pyproject.toml +# tomli # to read config from pyproject.toml # ] +# exclude: ^(docs|geoapps-assets)/ - repo: https://github.com/codingjoe/relint - rev: 3.1.0 + rev: 3.3.1 hooks: - id: relint args: [-W] # to fail on warnings +- repo: https://github.com/MiraGeoscience/pre-commit-hooks + rev: v1.1.0 + hooks: + - id: check-copyright + files: (^package\.rst|^LICENSE|^README(|-dev)\.rst|\.py|\.pyi)$ + exclude: (^\.|^docs/) + - id: prepare-commit-msg + - id: check-commit-msg - repo: local hooks: - id: pylint @@ -56,47 +60,43 @@ repos: require_serial: true # pylint does its own parallelism types: [python] exclude: ^(devtools|docs)/ - - id: check-copyright - name: Check copyright - entry: python devtools/check-copyright.py - language: python - types: [text] - files: (^LICENSE|^README(|-dev).rst|\.py|\.pyi)$ - exclude: (^\.|^docs/) - - id: prepare-commit-msg - stages: [prepare-commit-msg] - name: Prepare commit message - entry: python devtools/git_message_hook.py --prepare - language: python - - id: check-commit-msg - stages: [commit-msg] - name: Check commit message - entry: python devtools/git_message_hook.py --check - language: python - repo: https://github.com/codespell-project/codespell - rev: v2.2.6 + rev: v2.3.0 hooks: - id: codespell exclude: (-lock\.ya?ml|\benvironments/.*\.ya?ml|\.ipynb|^THIRD_PARTY_SOFTWARE\.rst)$ entry: codespell -I .codespellignore - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v5.0.0 hooks: - id: trailing-whitespace exclude: \.mdj$ + - id: check-json + exclude_types: [jupyter] - id: check-toml - id: check-yaml -# - id: check-added-large-files # crashing on some configuration. To be investigated + - id: check-added-large-files +# args: [--enforce-all] - id: check-case-conflict - id: check-merge-conflict - id: debug-statements - id: detect-private-key - id: end-of-file-fixer - exclude: \.mdj$ + exclude: (^\.idea/.*\.xml|\.mdj)$ - id: mixed-line-ending + exclude: ^\.idea/.*\.xml$ - id: name-tests-test + - id: pretty-format-json + args: + - --autofix + - --indent=4 + - --no-sort-keys + - --top-keys + - version,title,icon,documentation,conda_environment,run_command,geoh5,monitoring_directory,workspace_geoh5 + exclude_types: [jupyter] + exclude: ^docs/.*/images/ - repo: https://github.com/rstcheck/rstcheck - rev: v6.2.0 + rev: v6.2.4 hooks: - id: rstcheck exclude: ^THIRD_PARTY_SOFTWARE.rst$ diff --git a/.rstcheck.cfg b/.rstcheck.cfg index 026a67468..d4d00107a 100644 --- a/.rstcheck.cfg +++ b/.rstcheck.cfg @@ -1,3 +1,4 @@ [rstcheck] ignore_directives=automodule,jupyter-execute,nbgallery report_level=WARNING +ignore_substitutions = copyright_notice diff --git a/LICENSE b/LICENSE index 814813801..186344f22 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Mira Geoscience +Copyright (c) 2020-2025 Mira Geoscience Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README-dev.rst b/README-dev.rst new file mode 100644 index 000000000..6c5ef3e8b --- /dev/null +++ b/README-dev.rst @@ -0,0 +1,365 @@ +Setup for development +===================== + +.. contents:: Table of Contents + :local: + :depth: 2 + +After you have cloned the Git repository, you will need to: + #. create the Conda environment lock files for the dependencies + #. create a virtual Conda environment for development, where to install the dependencies + of the project + #. execute the tests + #. setup Git LFS if needed + #. configure the pre-commit hooks for static code analysis and auto-formatting + #. configure the Python IDE (PyCharm) + + +Create the Conda environment lock files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +First, you need to create the Conda environment lock files (``*.conda.lock.yml``) for the dependencies defined +in `pyproject.toml`_. + +.. note:: + As a prerequisite, you need to install some packages in your base Conda environment. To do so, + simply execute ``devtools\setup-conda-base.bat``. + +Then, to create the Conda environment lock files, execute ``devtools\run_conda_lock.bat``, +or run from command line:: + + $ (base) python devtools/run_conda_lock.py + +It will create or update ``.conda.lock.yml`` files in the ``environments`` folder: +one for runtime dependencies, and one for development dependencies (with the ``-dev`` suffix), +for each combinations of Python versions and platforms. + +The platforms are specified in ``conda-lock`` section of the ``pyproject.toml`` file: + +.. code-block:: toml + + [tool.conda-lock] + platforms = ['win-64', 'linux-64'] + +The python versions are specified at the beginning of the ``devtools/run_conda_lock.py`` file: + +.. code-block:: python + + _PYTHON_VERSIONS = ["3.10", "3.11"] + +The ``Install_or_Update.bat`` and the ``setup-dev.bat`` will use them to install the environment. + + +Install the Conda environment +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For development, you need a **Conda** environments. you can install it running the ``setup-dev.bat`` or:: + + $ [path\to\geoapps]\devtools\setup-dev.bat + +This command install a local environment at the base of your repository: ``.conda-env``. +This environment should automatically be recognized by the Conda installation. + +To activate this environment, run the following command from the root of the project:: + + $ conda activate ./.conda-env + + +Updating dependencies +^^^^^^^^^^^^^^^^^^^^^ + +Dependencies are listed in `pyproject.toml`_ with version constraints. +Versions are then locked using ``conda-lock`` as previously described. + +Anytime dependencies are added to or removed from the ``pyproject.toml`` file, +regenerate the Conda environment lock files, using ``devtools\run_conda_lock.bat``, +or directly from command line:: + + (base) $ python devtools/run_conda_lock.py + +Regenerate the Conda environment lock files as well when you want to fetch newly +available versions of the dependencies (typically patches, still in accordance with +the specifications expressed in ``pyproject.toml``). + + +Adding a dependency +------------------- + +First install the dependency using ``conda``: + + (path/to/.conda-env) $ conda install my_new_dep + +Then update the list of dependencies in `pyproject.toml`_ with a suited version constraint +(if for development only, place it under section ``[tool.poetry.group.dev.dependencies]``). + +For example, if ``conda`` installed version 1.5.2 of ``my_new_dep``, +then add ``my_new_dep="^1.5.2"``. + +Do not forget to regenerate the Conda environment lock files. + + +How to use **Poetry** to update the dependency list (optional) +-------------------------------------------------------------- + +`Poetry `_ provides a command line interface to easily add or remove dependencies: + + (path/to/.conda-env) $ poetry add another_package --lock + +Note the ``--lock`` option, that simple creates or updates the lock file, without Poetry installing anything. +``poetry`` would install the package through ``pip`` while we want dependencies to be installed through ``conda`` +so that they match the version pinned by ``conda-lock``. + +One limitation though: Poetry will look for packages in PyPI only and not in the Conda channels. +The version selected by Poetry might thus not be aviaible for Conda. + +To install ``Poetry`` on your computer, refer to the `Poetry documentation`_. + +.. _Poetry documentation: https://pre-commit.com/ + + +Configure the pre-commit hooks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`pre-commit`_ is used to automatically run static code analysis upon commit. +The list of tools to execute upon commit is configured in the file `.pre-commit-config.yaml`_. + +pre-commit can be installed using a Python installation on the system, or one from a Conda environment. + +- To install pre-commit using Python (and pip) in your system path: + +.. code-block:: bash + + pip install --user pre-commit + +- Or to install from an activated Conda environment: + +.. code-block:: bash + + conda install -c conda-forge pre-commit + +Then, in either way, install the pre-commit hooks as follow (**current directory is the project folder**): + +.. code-block:: bash + + pre-commit install + +To prepare and check the commit messages, you can also use the following commands: + +.. code-block:: bash + + pre-commit install -t prepare-commit-msg -t commit-msg + +It configures ``pre-commit`` to prepares and checks the commit ensuring it has a JIRA issue ID: +if no ID was provided, it extracts it from the branch name; +if one was provided, it checks it is the same one as in the branch name. + +To run pre-commit manually, use the following command: + +.. code-block:: bash + + pre-commit run --all-files + +To run only on changes staged for commit: + +.. code-block:: bash + + pre-commit run + +If a tool fails running, it might be caused by an obsolete versions of the tools that pre-commit is +trying to execute. Try the following command to update them: + +.. code-block:: bash + + pre-commit autoupdate + +Upon every commit, all the pre-commit checks run automatically for you, and reformat files when required. Enjoy... + +If you prefer to run pre-commit upon push, and not upon every commit, use the following commands: + +.. code-block:: bash + + pre-commit uninstall -t pre-commit + pre-commit install -t pre-push + +.. _pre-commit: https://pre-commit.com/ + + +Running the tests +^^^^^^^^^^^^^^^^^ +Test files are placed under the ``tests`` folder. Inside this folder and sub-folders, +Python test files are to be named with ``_test.py`` as a suffix. +The test function within this files must have a ``test_`` prefix. + + +Install pytest +-------------- + +.. _pytest: https://docs.pytest.org/ + +If you installed your environment through ``setup-dev.bat``, pytest is already installed. +You can run it from the Conda command (**in your project folder**): + +.. code-block:: bash + + pytest tests + + +Code coverage with Pytest +------------------------- +.. _pytest-cov: https://pypi.org/project/pytest-cov/ + +If you installed your environment through ``setup-dev.bat``, `pytest-cov`_ is already installed. +It allows you to visualize the code coverage of your tests. +You can run the tests from the console with coverage: + +.. code-block:: bash + + pytest --cov --cov-report html + +The html report is generated in the folder ``htmlcov`` at the root of the project. +You can then explore the report by opening ``index.html`` in a browser. + +In ``pyproject.toml``, the section ``[tool.coverage.report]`` defines the common options +for the coverage reports. The minimum accepted percentage of code coverage is specified +by the option ``fail_under``. + +The section ``[tool.coverage.html]`` defines the options specific to the HTML report. + +Git LFS +^^^^^^^ +In the case your package requires large files, `git-lfs`_ can be used to store those files. +Copy it from the `git-lfs`_ website, and install it. + +Then, in the project folder, run the following command to install git-lfs: + +.. code-block:: bash + + git lfs install + + +It will update the file ``.gitattributes`` with the list of files to track. + +Then, add the files and the ``.gitattributes`` to the git repository, and commit. + +.. _git-lfs: https://git-lfs.com/ + +Then, add the files to track with git-lfs: + +.. code-block:: bash + + git lfs track "*.desire_extension" + + +IDE : PyCharm +^^^^^^^^^^^^^ +`PyCharm`_, by JetBrains, is a very good IDE for developing with Python. + + +Configure the Python interpreter in PyCharm +-------------------------------------------- + +First, excluded the ``.conda-env`` folder from PyCharm. +Do so, in PyCharm, right-click on the ``.conda-env`` folder, and ``Mark Directory as > Excluded``. + +Then, you can add the Conda environment as a Python interpreter in PyCharm. + + .. image:: devtools/images/pycharm-exclude_conda_env.png + :alt: PyCharm: Exclude Conda environment + :align: center + :width: 40% + + +In PyCharm settings, open ``File > Settings``, go to ``Python Interpreter``, +and add click add interpreter (at the top left): + + .. image:: devtools/images/pycharm-add_Python_interpreter.png + :alt: PyCharm: Python interpreter settings + :align: center + :width: 80% + +Select ``Conda Environment``, ``Use existing environment``, +and select the desired environment from the list (the one in the ``.conda-env`` folder): + + .. image:: devtools/images/pycharm-set_conda_env_as_interpreter.png + :alt: PyCharm: Set Conda environment as interpreter + :align: center + :width: 80% + +Then you can check the list of installed packages in the ``Packages`` table. You should see +**geoapps** and its dependencies. Make sure to turn off the ``Use Conda Package Manager`` +option to see also the packages installed through pip: + + .. image:: devtools/images/pycharm-list_all_conda_packages.png + :alt: PyCharm: Conda environment packages + :align: center + :width: 80% + + +Run the tests from PyCharm +-------------------------- +First, right click on the ``tests`` folder and select ``Mark Directory as > Test Sources Root``: + + .. image:: devtools/images/pycharm-mark_directory_as_tests.png + :alt: PyCharm: Add Python interpreter + :align: center + :width: 40% + +You can now start tests with a right click on the ``tests`` folder and +select ``Run 'pytest in tests'``, or select the folder and just hit ``Ctrl+Shift+F10``. + +PyCharm will nicely present the test results and logs: + + .. image:: devtools/images/pycharm-test_results.png + :alt: PyCharm: Run tests + :align: center + :width: 80% + + +Execute tests with coverage from PyCharm +---------------------------------------- + +You can run the tests with a nice report of the code coverage, thanks to the pytest-cov plugin +(already installed in the virtual environment as development dependency as per `pyproject.toml`_). + + +To set up this option in PyCharm, right click on the ``tests`` folder and ``Modify Run Configuration...``, +then add the following option in the ``Additional Arguments`` field: + + .. image:: devtools/images/pycharm-menu_modify_test_run_config.png + :alt: PyCharm tests contextual menu: modify run configuration + :width: 30% + + .. image:: devtools/images/pycharm-dialog_edit_test_run_config.png + :alt: PyCharm dialog: edit tests run configuration + :width: 60% + +Select ``pytest in tests``, and add the following option in the ``Additional Arguments`` field:: + + --cov --cov-report html + +Then, run the tests as usual, and you will get a nice report of the code coverage. + +.. note:: + Running tests with coverage disables the debugger, so breakpoints will be ignored. + +Some useful plugins for PyCharm +-------------------------------- +Here is a suggestion for some plugins you can install in PyCharm. + +- `Toml`_, to edit and validate ``pyproject.toml`` file. +- `IdeaVim`_, for Vim lovers. +- `GitHub Copilot`_, for AI assisted coding. + +.. _PyCharm: https://www.jetbrains.com/pycharm/ + +.. _Toml: https://plugins.jetbrains.com/plugin/8195-toml/ +.. _IdeaVim: https://plugins.jetbrains.com/plugin/164-ideavim/ +.. _GitHub Copilot: https://plugins.jetbrains.com/plugin/17718-github-copilot + +.. _pyproject.toml: pyproject.toml +.. _.pre-commit-config.yaml: .pre-commit-config.yaml + + +Copyright +^^^^^^^^^ +Copyright (c) 2020-2025 Mira Geoscience Ltd. diff --git a/README.rst b/README.rst index 714c8cd7d..ee0f57514 100644 --- a/README.rst +++ b/README.rst @@ -26,15 +26,13 @@ :alt: pre-commit.ci status -Welcome to **geoapps** - Open-source applications in geosciences -================================================================ +**Geoapps** - Open-source applications in geosciences +===================================================== .. image:: https://github.com/MiraGeoscience/geoapps/raw/v0.10.0-rc.2/docs/images/index_page.png :align: right :width: 50% -In short -^^^^^^^^ The **geoapps** project has been created by `Mira Geoscience`_ for the development and sharing of open-source applications in geoscience. Users will be able to directly leverage the powerful visualization capabilities of @@ -44,12 +42,10 @@ applications in geoscience. Users will be able to directly leverage the powerful .. _Geoscience ANALYST: https://mirageoscience.com/mining-industry-software/geoscience-analyst/ -Links -^^^^^ +Documentation +^^^^^^^^^^^^^ -- `Download the latest `_ -- `Getting started `_ -- `Documentation `_ +- `Online documentation `_ Current sponsors @@ -65,22 +61,119 @@ Current sponsors - `Teck `_ - `Vale `_ -Third Party Software -^^^^^^^^^^^^^^^^^^^^ -The geoapps Software may provide links to third party libraries or code (collectively “Third Party Software”) -to implement various functions. Third Party Software does not comprise part of the Software. -The use of Third Party Software is governed by the terms of such software license(s). -Third Party Software notices and/or additional terms and conditions are located in the -`THIRD_PARTY_SOFTWARE.rst`_ file. -.. _THIRD_PARTY_SOFTWARE.rst: THIRD_PARTY_SOFTWARE.rst +Installation +^^^^^^^^^^^^ +**geoapps** is currently written for Python 3.10. + +Install Conda +------------- + +To install **geoapps**, you need to install **Conda** first. + +We recommend to install **Conda** using `miniforge`_. + +.. _miniforge: https://github.com/conda-forge/miniforge + +Quick installation +------------------- + +To install (or re-install) a conda environment to run **geoapps**, simply execute the **install.bat** file. + +To install in editable mode, so that changes in the source code are immediately reflected in the +running application, execute with the ``-e`` option: ``install.bat -e``. + +.. warning:: + + In editable mode, the source folder must not be moved or deleted after installation. + + +Manual installation +------------------- + +You should not install the package directly with ``pip``, as the app requires conda packages to run. + +First create a Conda environment with all the required dependencies, +then activate it and install the package in this environment using +``pip install --no-deps ...`` + +See instructions below for more details and options. + +Prepare a Conda environment with dependencies +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You can create a Conda environment with all the required dependencies ``conda`` and the ``.lock`` +files from a conda prompt:: + + $ conda env create --solver libmamba -n geoapps -f environments/[the_desired_env].lock.yml + +.. note:: + + The package itself is not install yet in the Conda environment. See following instructions. + +.. warning:: + + All the following ``pip`` commands are meant to be executed in the Conda environment you just created. + Activate it with:: + + $ conda activate geoapps + +From PyPI +~~~~~~~~~ + +To install the **geoapps** package published on PyPI:: + + $ pip install --no-deps -U geoapps + +From a Git tag or branch +~~~~~~~~~~~~~~~~~~~~~~~~ +If the revision of the package is not on PyPI yet, you can install it from a Git tag:: + + $ pip install --no-deps -U --force-reinstall https://github.com/MiraGeoscience/geoapps/archive/refs/tags/TAG.zip + +Or to install the latest changes available on a given Git branch:: + + $ pip install --no-deps -U --force-reinstall https://github.com/MiraGeoscience/geoapps/archive/refs/heads/BRANCH.zip + +.. note:: + + The ``--force-reinstall`` option is used to make sure the updated version + of the sources is installed, and not the cached version, even if the version number + did not change. + + The ``-U`` or ``--upgrade`` option is used to make sure to get the latest version, + on not merely reinstall the same version. + + The option ``--no-deps`` is used to avoid installing the dependencies with pip, + as they have dependencies are already installed within the **Conda environment**. + +From a local copy of the sources +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you have a git clone of the package sources locally, you can install **geoapps** from the +local copy of the sources. At the root of the sources, you will find a ``pyproject.toml`` file. + +Change directory to the root of the sources:: + + $ cd path/to/project_folder_with_pyproject_toml + +Then run:: + + $ pip install --no-deps -U --force-reinstall . + +Or in **editable mode**, so that you can edit the sources and see the effect immediately at runtime:: + + $ pip install --no-deps -U --force-reinstall -e . + +Setup for development +^^^^^^^^^^^^^^^^^^^^^ +To configure the development environment and tools, please see `README-dev.rst`_. + +.. _README-dev.rst: README-dev.rst + License ^^^^^^^ MIT License -Copyright (c) 2024 Mira Geoscience - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights @@ -98,3 +191,17 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Third Party Software +^^^^^^^^^^^^^^^^^^^^ +The geoapps Software may provide links to third party libraries or code (collectively “Third Party Software”) +to implement various functions. Third Party Software does not comprise part of the Software. +The use of Third Party Software is governed by the terms of such software license(s). +Third Party Software notices and/or additional terms and conditions are located in the +`THIRD_PARTY_SOFTWARE.rst`_ file. + +.. _THIRD_PARTY_SOFTWARE.rst: docs/THIRD_PARTY_SOFTWARE.rst + +Copyright +^^^^^^^^^ +Copyright (c) 2020-2025 Mira Geoscience Ltd. diff --git a/THIRD_PARTY_SOFTWARE.rst b/THIRD_PARTY_SOFTWARE.rst deleted file mode 100644 index 971a05d4c..000000000 --- a/THIRD_PARTY_SOFTWARE.rst +++ /dev/null @@ -1,56 +0,0 @@ -The geoapps repository and source distributions bundle several libraries that are -compatibly licensed. We list these here. - -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| Name | License | URL | Description | -+==================================+=============================+====================================================================+==================================================================================================================+ -| Dask | BSD-3-Clause | https://github.com/dask/dask/ | Parallel PyData with Task Scheduling | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| dash-daq | MIT | https://github.com/plotly/dash-daq | DAQ components for Dash | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| discretize | MIT | https://simpeg.xyz/ | Discretization tools for finite volume and inverse problems | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| Distributed | BSD-3-Clause | https://distributed.dask.org/ | Distributed scheduler for Dask | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| Fiona | BSD 3-Clause | https://github.com/Toblerity/Fiona | Fiona reads and writes spatial data files | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| fsspec | BSD-3-Clause | https://github.com/fsspec/filesystem_spec | File-system specification | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| GDAL | MIT | https://github.com/OSGeo/gdal | GDAL: Geospatial Data Abstraction Library | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| geoh5py | LGPL-3.0-or-later | https://github.com/MiraGeoscience/geoh5py | Python API for geoh5, an open file format for geoscientific data | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| ipyfilechooser | MIT | https://github.com/crahan/ipyfilechooser | Python file chooser widget for use in Jupyter/IPython in conjunction with ipywidgets | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| ipywidgets | BSD 3-Clause | https://github.com/jupyter-widgets/ipywidgets | Jupyter interactive widgets | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| jupyter-dash | MIT | https://github.com/plotly/jupyter-dash | Dash support for the Jupyter notebook interface | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| libhwloc | BSD-3-Clause | https://github.com/conda-forge/libhwloc-feedstock | Portable Hardware Locality (hwloc) | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| matplotlib | LicenseRef-PSF-based | https://github.com/matplotlib/matplotlib | Python plotting package | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| numpy | BSD-3-Clause | https://github.com/numpy/numpy | Fundamental package for array computing in Python | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| omf | MIT | https://github.com/gmggroup/omf | API Library for Open Mining Format | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| pandas | BSD-3-Clause | https://github.com/pandas-dev/pandas | Powerful data structures for data analysis, time series, and statistics | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| param-sweeps | MIT | https://github.com/MiraGeoscience/param-sweeps | Parameter sweeper for ui.json powered applications | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| plotly | MIT | https://github.com/plotly/plotly.py | An open-source, interactive data visualization library for Python | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| pydiso | MIT | https://github.com/simpeg/pydiso | Wrapper for intel's pardiso implementation in the MKL | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| pymatsolver | MIT | https://github.com/simpeg/pymatsolver | Matrix Solvers for Python | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| scikit-image | BSD-3-Clause | https://github.com/scikit-image/scikit-image | Image processing in Python | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| scikit-learn | BSD-3-Clause | https://github.com/scikit-learn/scikit-learn | A set of python modules for machine learning and data mining | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| scipy | BSD-3-Clause | https://github.com/scipy/scipy | Fundamental algorithms for scientific computing in Python | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| simpeg | MIT | http://simpeg.xyz/ | SimPEG: Simulation and Parameter Estimation in Geophysics | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ -| tqdm | MPL-2.0 or MIT | https://github.com/tqdm | A Fast, Extensible Progress Bar for Python and CLI | -+----------------------------------+-----------------------------+--------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ diff --git a/conda-py-3.10-lock.yml b/conda-py-3.10-lock.yml deleted file mode 100644 index e07abb666..000000000 --- a/conda-py-3.10-lock.yml +++ /dev/null @@ -1,15130 +0,0 @@ -# This lock file was generated by conda-lock (https://github.com/conda/conda-lock). DO NOT EDIT! -# -# A "lock file" contains a concrete list of package versions (with checksums) to be installed. Unlike -# e.g. `conda env create`, the resulting environment will not change as new package versions become -# available, unless you explicitly update the lock file. -# -# Install this environment as "YOURENV" with: -# conda-lock install -n YOURENV conda-py-3.10-lock.yml -# This lock contains optional development dependencies. Include them in the installed environment with: -# conda-lock install --dev-dependencies -n YOURENV conda-py-3.10-lock.yml -# This lock contains optional dependency categories apps, core. Include them in the installed environment with: -# conda-lock install -e apps -e core -n YOURENV conda-py-3.10-lock.yml -# To update a single package to the latest version compatible with the version constraints in the source: -# conda-lock lock --lockfile conda-py-3.10-lock.yml --update PACKAGE -# To re-solve the entire environment, e.g. after changing a version constraint in the source file: -# conda-lock -f pyproject.toml -f environments/env-python-3.10.yml --lockfile conda-py-3.10-lock.yml -version: 1 -metadata: - content_hash: - win-64: a579f89f074a4c96107b02a5e16413ccb81c10bc485d696a362bdcc8d8e1bcdf - osx-64: 217bd8c689986a9e77c79fe61667c9ce18b78ac9ea399dd93bb0d8015a373c52 - linux-64: 7a13e325aa5a82edea42f7aeb47f3baa857c81da25a776f52a8dbb627885c47f - channels: - - url: conda-forge - used_env_vars: [] - platforms: - - win-64 - - osx-64 - - linux-64 - sources: - - pyproject.toml - - environments/env-python-3.10.yml -package: -- name: _libgcc_mutex - version: '0.1' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - hash: - md5: d7c89558ba9fa0495403155b64376d81 - sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 - category: main - optional: false -- name: _openmp_mutex - version: '4.5' - manager: conda - platform: linux-64 - dependencies: - _libgcc_mutex: '0.1' - llvm-openmp: '>=9.0.1' - url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - hash: - md5: 562b26ba2e19059551a811e72ab7f793 - sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc - category: main - optional: false -- name: alsa-lib - version: 1.2.11 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda - hash: - md5: 0bb492cca54017ea314b809b1ee3a176 - sha256: 0e2b75b9834a6e520b13db516f7cf5c9cea8f0bbc9157c978444173dacb98fec - category: apps - optional: true -- name: anyio - version: 3.7.1 - manager: conda - platform: linux-64 - dependencies: - exceptiongroup: '' - idna: '>=2.8' - python: '>=3.7' - sniffio: '>=1.1' - typing_extensions: '' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - hash: - md5: 7b517e7a6f0790337906c055aa97ca49 - sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4 - category: apps - optional: true -- name: anyio - version: 3.7.1 - manager: conda - platform: osx-64 - dependencies: - typing_extensions: '' - exceptiongroup: '' - python: '>=3.7' - sniffio: '>=1.1' - idna: '>=2.8' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - hash: - md5: 7b517e7a6f0790337906c055aa97ca49 - sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4 - category: apps - optional: true -- name: anyio - version: 3.7.1 - manager: conda - platform: win-64 - dependencies: - typing_extensions: '' - exceptiongroup: '' - python: '>=3.7' - sniffio: '>=1.1' - idna: '>=2.8' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - hash: - md5: 7b517e7a6f0790337906c055aa97ca49 - sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4 - category: apps - optional: true -- name: appnope - version: 0.1.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda - hash: - md5: cc4834a9ee7cc49ce8d25177c47b10d8 - sha256: 45ae2d41f4a4dcf8707633d3d7ae376fc62f0c09b1d063c3049c3f6f8c911670 - category: apps - optional: true -- name: argon2-cffi - version: 23.1.0 - manager: conda - platform: linux-64 - dependencies: - argon2-cffi-bindings: '' - python: '>=3.7' - typing-extensions: '' - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3afef1f55a1366b4d3b6a0d92e2235e4 - sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 - category: apps - optional: true -- name: argon2-cffi - version: 23.1.0 - manager: conda - platform: osx-64 - dependencies: - typing-extensions: '' - argon2-cffi-bindings: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3afef1f55a1366b4d3b6a0d92e2235e4 - sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 - category: apps - optional: true -- name: argon2-cffi - version: 23.1.0 - manager: conda - platform: win-64 - dependencies: - typing-extensions: '' - argon2-cffi-bindings: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3afef1f55a1366b4d3b6a0d92e2235e4 - sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 - category: apps - optional: true -- name: argon2-cffi-bindings - version: 21.2.0 - manager: conda - platform: linux-64 - dependencies: - cffi: '>=1.0.1' - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda - hash: - md5: 68ee85860502d53c8cbfa0e4cef0f6cb - sha256: af94cc9b4dcaa164e1cc7e7fa0b9eb56b87ea3dc6e093c8ef6c31cfa02d9ffdf - category: apps - optional: true -- name: argon2-cffi-bindings - version: 21.2.0 - manager: conda - platform: osx-64 - dependencies: - cffi: '>=1.0.1' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/argon2-cffi-bindings-21.2.0-py310h6729b98_4.conda - hash: - md5: fea2a01f85aee10b268e0474a03eb148 - sha256: c413de1658b9f34978e1a5c8dc1e93b75fdef8e453f0983a4d2fa4b6a669e2b2 - category: apps - optional: true -- name: argon2-cffi-bindings - version: 21.2.0 - manager: conda - platform: win-64 - dependencies: - cffi: '>=1.0.1' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py310h8d17308_4.conda - hash: - md5: ece29c9dd68f962fd416a3ddcce24080 - sha256: ae143aec777823b2291caabc3fd89078a3ff12f41945e0f9abd168997ad35d39 - category: apps - optional: true -- name: asciitree - version: 0.3.3 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - hash: - md5: c0481c9de49f040272556e2cedf42816 - sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 - category: core - optional: true -- name: asciitree - version: 0.3.3 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - hash: - md5: c0481c9de49f040272556e2cedf42816 - sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 - category: core - optional: true -- name: asciitree - version: 0.3.3 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - hash: - md5: c0481c9de49f040272556e2cedf42816 - sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 - category: core - optional: true -- name: astroid - version: 3.1.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - typing-extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.1.0-py310hff52083_0.conda - hash: - md5: 62ffeeb0851aefef7baf0b6a3a085db9 - sha256: a6b091e138e84944a51327b7c062660ebee234bc79fa84a1313e49bab0afe354 - category: dev - optional: true -- name: astroid - version: 3.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - typing-extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/astroid-3.1.0-py310h2ec42d9_0.conda - hash: - md5: 01c25fef2558dfadd7f8457bd50c73ed - sha256: d0d310768fac07ff5dd73d41b66d822600eb240f7dcc025399760a0aebc7350c - category: dev - optional: true -- name: astroid - version: 3.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - typing-extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/win-64/astroid-3.1.0-py310h5588dad_0.conda - hash: - md5: 01f5ae318fcaf312a748238253ad903d - sha256: ea5d728e007478ae46160a545744387ac59ad99a5632d5e883837749fed2188d - category: dev - optional: true -- name: asttokens - version: 2.4.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - six: '>=1.12.0' - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - hash: - md5: 5f25798dcefd8252ce5f9dc494d5f571 - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - category: apps - optional: true -- name: asttokens - version: 2.4.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - six: '>=1.12.0' - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - hash: - md5: 5f25798dcefd8252ce5f9dc494d5f571 - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - category: apps - optional: true -- name: asttokens - version: 2.4.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - six: '>=1.12.0' - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - hash: - md5: 5f25798dcefd8252ce5f9dc494d5f571 - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - category: apps - optional: true -- name: attr - version: 2.5.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2 - hash: - md5: d9c69a24ad678ffce24c6543a0176b00 - sha256: 82c13b1772c21fc4a17441734de471d3aabf82b61db9b11f4a1bd04a9c4ac324 - category: apps - optional: true -- name: attrs - version: 23.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - hash: - md5: 5e4c0743c70186509d1412e03c2d8dfa - sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea - category: core - optional: true -- name: attrs - version: 23.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - hash: - md5: 5e4c0743c70186509d1412e03c2d8dfa - sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea - category: core - optional: true -- name: attrs - version: 23.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - hash: - md5: 5e4c0743c70186509d1412e03c2d8dfa - sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea - category: core - optional: true -- name: beautifulsoup4 - version: 4.12.3 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - hash: - md5: 332493000404d8411859539a5a630865 - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - category: apps - optional: true -- name: beautifulsoup4 - version: 4.12.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - hash: - md5: 332493000404d8411859539a5a630865 - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - category: apps - optional: true -- name: beautifulsoup4 - version: 4.12.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - hash: - md5: 332493000404d8411859539a5a630865 - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - category: apps - optional: true -- name: bleach - version: 6.1.0 - manager: conda - platform: linux-64 - dependencies: - packaging: '' - python: '>=3.6' - setuptools: '' - six: '>=1.9.0' - webencodings: '' - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - hash: - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - category: apps - optional: true -- name: bleach - version: 6.1.0 - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - packaging: '' - webencodings: '' - python: '>=3.6' - six: '>=1.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - hash: - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - category: apps - optional: true -- name: bleach - version: 6.1.0 - manager: conda - platform: win-64 - dependencies: - setuptools: '' - packaging: '' - webencodings: '' - python: '>=3.6' - six: '>=1.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - hash: - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - category: apps - optional: true -- name: blinker - version: 1.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 550da20b2c2e38be9cc44bb819fda5d5 - sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 - category: apps - optional: true -- name: blinker - version: 1.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 550da20b2c2e38be9cc44bb819fda5d5 - sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 - category: apps - optional: true -- name: blinker - version: 1.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 550da20b2c2e38be9cc44bb819fda5d5 - sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 - category: apps - optional: true -- name: blosc - version: 1.21.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - snappy: '>=1.2.0,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-hc2324a3_1.conda - hash: - md5: 11d76bee958b1989bd1ac6ee7372ea6d - sha256: fde5e8ad75d2a5f154e29da7763a5dd9ee5b5b5c3fc22a1f5170296c8f6f3f62 - category: core - optional: true -- name: blosc - version: 1.21.5 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - snappy: '>=1.2.0,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.5-hafa3907_1.conda - hash: - md5: 937b9f86de960cd40c8ef5c7421b7028 - sha256: a2e867d61ce398187d59f59e034e8651c825cb33224d2c6f315876b6df5e2161 - category: core - optional: true -- name: blosc - version: 1.21.5 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - snappy: '>=1.2.0,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.3,<15' - vc14_runtime: '>=14.38.33130' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hbd69f2e_1.conda - hash: - md5: 06c7d9a1cdecef43921be8b577a61ee7 - sha256: a74c8a91bee3947f9865abd057ce33a1ebb728f04041bfd47bc478fdc133ca22 - category: core - optional: true -- name: brotli - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - brotli-bin: 1.1.0 - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda - hash: - md5: f27a24d46e3ea7b70a1f98e50c62508f - sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b - category: core - optional: true -- name: brotli - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - brotli-bin: 1.1.0 - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.1.0-h0dc2134_1.conda - hash: - md5: 9272dd3b19c4e8212f8542cefd5c3d67 - sha256: 4bf66d450be5d3f9ebe029b50f818d088b1ef9666b1f19e90c85479c77bbdcde - category: core - optional: true -- name: brotli - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - brotli-bin: 1.1.0 - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-hcfcfb64_1.conda - hash: - md5: f47f6db2528e38321fb00ae31674c133 - sha256: b927c95121c5f3d82fe084730281739fb04621afebf2d9f05711a0f42d27e326 - category: core - optional: true -- name: brotli-bin - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda - hash: - md5: 39f910d205726805a958da408ca194ba - sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677 - category: core - optional: true -- name: brotli-bin - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.1.0-h0dc2134_1.conda - hash: - md5: ece565c215adcc47fc1db4e651ee094b - sha256: 7ca3cfb4c5df314ed481301335387ab2b2ee651e2c74fbb15bacc795c664a5f1 - category: core - optional: true -- name: brotli-bin - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.1.0-hcfcfb64_1.conda - hash: - md5: 0105229d7c5fabaa840043a86c10ec64 - sha256: 4fbcb8f94acc97b2b04adbc64e304acd7c06fa0cf01953527bddae46091cc942 - category: core - optional: true -- name: brotli-python - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_1.conda - hash: - md5: 1f95722c94f00b69af69a066c7433714 - sha256: e22268d81905338570786921b3def88e55f9ed6d0ccdd17d9fbae31a02fbef69 - category: main - optional: false -- name: brotli-python - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py310h9e9d8ca_1.conda - hash: - md5: 2362e323293e7699cf1e621d502f86d6 - sha256: 57d66ca3e072b889c94cfaf56eb7e1794d3b1b3179bd475a4edef50a03359354 - category: main - optional: false -- name: brotli-python - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h00ffb61_1.conda - hash: - md5: 42bfbc1d41cbe2696a3c9d8b0342324f - sha256: 8de77cf62a653dd6ffe19927b92c421f5fa73c078d7799181f5211a1bac2883b - category: main - optional: false -- name: bzip2 - version: 1.0.8 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda - hash: - md5: 69b8b6202a07720f448be700e300ccf4 - sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8 - category: main - optional: false -- name: bzip2 - version: 1.0.8 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda - hash: - md5: 6097a6ca9ada32699b5fc4312dd6ef18 - sha256: 61fb2b488928a54d9472113e1280b468a309561caa54f33825a3593da390b242 - category: main - optional: false -- name: bzip2 - version: 1.0.8 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda - hash: - md5: 26eb8ca6ea332b675e11704cce84a3be - sha256: ae5f47a5c86fd6db822931255dcf017eb12f60c77f07dc782ccb477f7808aab2 - category: main - optional: false -- name: c-ares - version: 1.28.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.28.1-hd590300_0.conda - hash: - md5: dcde58ff9a1f30b0037a2315d1846d1f - sha256: cb25063f3342149c7924b21544109696197a9d774f1407567477d4f3026bf38a - category: main - optional: false -- name: c-ares - version: 1.28.1 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.28.1-h10d778d_0.conda - hash: - md5: d5eb7992227254c0e9a0ce71151f0079 - sha256: fccd7ad7e3dfa6b19352705b33eb738c4c55f79f398e106e6cf03bab9415595a - category: main - optional: false -- name: c-ares - version: 1.28.1 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.28.1-hcfcfb64_0.conda - hash: - md5: 3b2a518680f790a79a7e77bad1861c3a - sha256: 44ded34fdac46d4a37942c1cae3fc871dc6ecb13e0408442c6f8797671b332e6 - category: core - optional: true -- name: c-blosc2 - version: 2.13.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - lz4-c: '>=1.9.3,<1.10.0a0' - zlib-ng: '>=2.0.7,<2.1.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_1.conda - hash: - md5: 5cfd15d41b7dc840897999da46c39811 - sha256: c25f8d08ad3ec8955a92eb9a452e92859dd8bb872fa87fffa6ef0f6cc5158ccb - category: main - optional: false -- name: c-blosc2 - version: 2.13.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - lz4-c: '>=1.9.3,<1.10.0a0' - zlib-ng: '>=2.0.7,<2.1.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-2.13.2-h0ae8482_1.conda - hash: - md5: 7f301a6f620dbbb63c03da14a6cc454c - sha256: c394c6666b5200e5cae59ac7ce36b91c0cf4f1e670b984c345dbf408b00b0e70 - category: main - optional: false -- name: c-blosc2 - version: 2.13.2 - manager: conda - platform: win-64 - dependencies: - lz4-c: '>=1.9.3,<1.10.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib-ng: '>=2.0.7,<2.1.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.13.2-h183a6f4_1.conda - hash: - md5: 56c2e93380f3355204d5695434068b74 - sha256: f4f8c5396dd20c0dcf6090305e696eb9dd3434253db2ec2e8b35e9e23ba5635c - category: main - optional: false -- name: ca-certificates - version: 2024.2.2 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda - hash: - md5: 2f4327a1cbe7f022401b236e915a5fef - sha256: 91d81bfecdbb142c15066df70cc952590ae8991670198f92c66b62019b251aeb - category: main - optional: false -- name: ca-certificates - version: 2024.2.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.2.2-h8857fd0_0.conda - hash: - md5: f2eacee8c33c43692f1ccfd33d0f50b1 - sha256: 54a794aedbb4796afeabdf54287b06b1d27f7b13b3814520925f4c2c80f58ca9 - category: main - optional: false -- name: ca-certificates - version: 2024.2.2 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.2.2-h56e8100_0.conda - hash: - md5: 63da060240ab8087b60d1357051ea7d6 - sha256: 4d587088ecccd393fec3420b64f1af4ee1a0e6897a45cfd5ef38055322cea5d0 - category: main - optional: false -- name: cached-property - version: 1.5.2 - manager: conda - platform: linux-64 - dependencies: - cached_property: '>=1.5.2,<1.5.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - hash: - md5: 9b347a7ec10940d3f7941ff6c460b551 - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - category: main - optional: false -- name: cached-property - version: 1.5.2 - manager: conda - platform: osx-64 - dependencies: - cached_property: '>=1.5.2,<1.5.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - hash: - md5: 9b347a7ec10940d3f7941ff6c460b551 - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - category: main - optional: false -- name: cached-property - version: 1.5.2 - manager: conda - platform: win-64 - dependencies: - cached_property: '>=1.5.2,<1.5.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - hash: - md5: 9b347a7ec10940d3f7941ff6c460b551 - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - category: main - optional: false -- name: cached_property - version: 1.5.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - hash: - md5: 576d629e47797577ab0f1b351297ef4a - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - category: main - optional: false -- name: cached_property - version: 1.5.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - hash: - md5: 576d629e47797577ab0f1b351297ef4a - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - category: main - optional: false -- name: cached_property - version: 1.5.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - hash: - md5: 576d629e47797577ab0f1b351297ef4a - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - category: main - optional: false -- name: cairo - version: 1.18.0 - manager: conda - platform: linux-64 - dependencies: - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - icu: '>=73.2,<74.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libstdcxx-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pixman: '>=0.42.2,<1.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - xorg-libsm: '>=1.2.4,<2.0a0' - xorg-libx11: '>=1.8.6,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-libxrender: '>=0.9.11,<0.10.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda - hash: - md5: f907bb958910dc404647326ca80c263e - sha256: 142e2639a5bc0e99c44d76f4cc8dce9c6a2d87330c4beeabb128832cd871a86e - category: core - optional: true -- name: cairo - version: 1.18.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - icu: '>=73.2,<74.0a0' - libcxx: '>=16.0.6' - libglib: '>=2.78.0,<3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pixman: '>=0.42.2,<1.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-64/cairo-1.18.0-h99e66fa_0.conda - hash: - md5: 13f830b1bf46018f7062d1b798d53eca - sha256: f8d1142cf244eadcbc44e8ca2266aa61a05b6cda5571f9b745ba32c7ebbfdfba - category: core - optional: true -- name: cairo - version: 1.18.0 - manager: conda - platform: win-64 - dependencies: - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - icu: '>=73.2,<74.0a0' - libglib: '>=2.78.0,<3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pixman: '>=0.42.2,<1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - url: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.0-h1fef639_0.conda - hash: - md5: b3fe2c6381ec74afe8128e16a11eee02 - sha256: 451e714f065b5dd0c11169058be56b10973dfd7d9a0fccf9c6a05d1e09995730 - category: core - optional: true -- name: certifi - version: 2024.2.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda - hash: - md5: 0876280e409658fc6f9e75d035960333 - sha256: f1faca020f988696e6b6ee47c82524c7806380b37cfdd1def32f92c326caca54 - category: main - optional: false -- name: certifi - version: 2024.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda - hash: - md5: 0876280e409658fc6f9e75d035960333 - sha256: f1faca020f988696e6b6ee47c82524c7806380b37cfdd1def32f92c326caca54 - category: main - optional: false -- name: certifi - version: 2024.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda - hash: - md5: 0876280e409658fc6f9e75d035960333 - sha256: f1faca020f988696e6b6ee47c82524c7806380b37cfdd1def32f92c326caca54 - category: main - optional: false -- name: cffi - version: 1.16.0 - manager: conda - platform: linux-64 - dependencies: - libffi: '>=3.4,<4.0a0' - libgcc-ng: '>=12' - pycparser: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda - hash: - md5: 45846a970e71ac98fd327da5d40a0a2c - sha256: 007e7f69ab45553b7bf11f2c1b8d3f3a13fd42997266a0d57795f41c7d38df36 - category: apps - optional: true -- name: cffi - version: 1.16.0 - manager: conda - platform: osx-64 - dependencies: - libffi: '>=3.4,<4.0a0' - pycparser: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.16.0-py310hdca579f_0.conda - hash: - md5: b9e6213f0eb91f40c009ce69139c1869 - sha256: 37802485964f1a3137ed6ab21ebc08fe9d35e7dc4da39f2b72a814644dd1ac15 - category: apps - optional: true -- name: cffi - version: 1.16.0 - manager: conda - platform: win-64 - dependencies: - pycparser: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.16.0-py310h8d17308_0.conda - hash: - md5: b4bcce1a7ea1164e6dcea6c4f00d962b - sha256: 1aeebb88518ab48c927d7360648a2799def172d8fcb0d7e20cb7208a3570ef9e - category: apps - optional: true -- name: cfitsio - version: 4.2.0 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libcurl: '>=7.86.0,<9.0a0' - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=10.4.0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.2.0-hd9d235c_0.conda - hash: - md5: 8c57a9adbafd87f5eff842abde599cb4 - sha256: 6409d15f09ae1a1673c971c8f45fc87272d1af569d027efbe16b689a1a8afd0d - category: core - optional: true -- name: cfitsio - version: 4.2.0 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libcurl: '>=7.86.0,<9.0a0' - libgfortran: 5.* - libgfortran5: '>=11.3.0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.2.0-hd56cc12_0.conda - hash: - md5: 28e03cefd79aa28ec0e313e5a9c71f5b - sha256: 9e4746e64dd54030777ee77f6cb729374e877da2322236c10563dff27b877660 - category: core - optional: true -- name: cfitsio - version: 4.2.0 - manager: conda - platform: win-64 - dependencies: - libcurl: '>=7.86.0,<9.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/cfitsio-4.2.0-h9ebe7e4_0.conda - hash: - md5: cccd314cbeea4f2f70f73c763d9660e8 - sha256: 18e893342e7ac8254741ea1dbae1b1f8e7771f2fdbb12e591e55f3a0519343ef - category: core - optional: true -- name: charset-normalizer - version: 3.3.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - hash: - md5: 7f4a9e3fcff3f6356ae99244a014da6a - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - category: main - optional: false -- name: charset-normalizer - version: 3.3.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - hash: - md5: 7f4a9e3fcff3f6356ae99244a014da6a - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - category: main - optional: false -- name: charset-normalizer - version: 3.3.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - hash: - md5: 7f4a9e3fcff3f6356ae99244a014da6a - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - category: main - optional: false -- name: click - version: 8.1.7 - manager: conda - platform: linux-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - hash: - md5: f3ad426304898027fc619827ff428eca - sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: core - optional: true -- name: click - version: 8.1.7 - manager: conda - platform: osx-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - hash: - md5: f3ad426304898027fc619827ff428eca - sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: core - optional: true -- name: click - version: 8.1.7 - manager: conda - platform: win-64 - dependencies: - colorama: '' - __win: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - hash: - md5: 3549ecbceb6cd77b91a105511b7d0786 - sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 - category: core - optional: true -- name: click-plugins - version: 1.1.1 - manager: conda - platform: linux-64 - dependencies: - click: '>=3.0' - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 - hash: - md5: 4fd2c6b53934bd7d96d1f3fdaf99b79f - sha256: ddef6e559dde6673ee504b0e29dd814d36e22b6b9b1f519fa856ee268905bf92 - category: core - optional: true -- name: click-plugins - version: 1.1.1 - manager: conda - platform: osx-64 - dependencies: - python: '' - click: '>=3.0' - url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 - hash: - md5: 4fd2c6b53934bd7d96d1f3fdaf99b79f - sha256: ddef6e559dde6673ee504b0e29dd814d36e22b6b9b1f519fa856ee268905bf92 - category: core - optional: true -- name: click-plugins - version: 1.1.1 - manager: conda - platform: win-64 - dependencies: - python: '' - click: '>=3.0' - url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 - hash: - md5: 4fd2c6b53934bd7d96d1f3fdaf99b79f - sha256: ddef6e559dde6673ee504b0e29dd814d36e22b6b9b1f519fa856ee268905bf92 - category: core - optional: true -- name: cligj - version: 0.7.2 - manager: conda - platform: linux-64 - dependencies: - click: '>=4.0' - python: <4.0 - url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 - hash: - md5: a29b7c141d6b2de4bb67788a5f107734 - sha256: 97bd58f0cfcff56a0bcda101e26f7d936625599325beba3e3a1fa512dd7fc174 - category: core - optional: true -- name: cligj - version: 0.7.2 - manager: conda - platform: osx-64 - dependencies: - python: <4.0 - click: '>=4.0' - url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 - hash: - md5: a29b7c141d6b2de4bb67788a5f107734 - sha256: 97bd58f0cfcff56a0bcda101e26f7d936625599325beba3e3a1fa512dd7fc174 - category: core - optional: true -- name: cligj - version: 0.7.2 - manager: conda - platform: win-64 - dependencies: - python: <4.0 - click: '>=4.0' - url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 - hash: - md5: a29b7c141d6b2de4bb67788a5f107734 - sha256: 97bd58f0cfcff56a0bcda101e26f7d936625599325beba3e3a1fa512dd7fc174 - category: core - optional: true -- name: cloudpickle - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 753d29fe41bb881e4b9c004f0abf973f - sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 - category: core - optional: true -- name: cloudpickle - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 753d29fe41bb881e4b9c004f0abf973f - sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 - category: core - optional: true -- name: cloudpickle - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 753d29fe41bb881e4b9c004f0abf973f - sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 - category: core - optional: true -- name: colorama - version: 0.4.6 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3faab06a954c2a04039983f2c4a50d99 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - category: dev - optional: true -- name: colorama - version: 0.4.6 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3faab06a954c2a04039983f2c4a50d99 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - category: dev - optional: true -- name: colorama - version: 0.4.6 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3faab06a954c2a04039983f2c4a50d99 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - category: dev - optional: true -- name: comm - version: 0.2.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - hash: - md5: 948d84721b578d426294e17a02e24cbb - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - category: apps - optional: true -- name: comm - version: 0.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - hash: - md5: 948d84721b578d426294e17a02e24cbb - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - category: apps - optional: true -- name: comm - version: 0.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - hash: - md5: 948d84721b578d426294e17a02e24cbb - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - category: apps - optional: true -- name: contourpy - version: 1.2.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.20' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py310hd41b1e2_0.conda - hash: - md5: 60ee50b1968f802f2a487ba36d4cce0d - sha256: b9283a52ec79bf71325cde80b8845e86bdf9ac80d8b38f95ad47cbaab32447fe - category: core - optional: true -- name: contourpy - version: 1.2.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - numpy: '>=1.20' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.2.1-py310hb3b189b_0.conda - hash: - md5: 6601d125e2f6c32c8e853da2651e04fd - sha256: 193fbd7c7b95e4692d12140e8c82d1be0c0bfd450edae9a95fd43f607fbb0c80 - category: core - optional: true -- name: contourpy - version: 1.2.1 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.20' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.2.1-py310h232114e_0.conda - hash: - md5: 69968a52474279f0c44c08c87752096f - sha256: 9a53e5c28fc4348743beee9e2700a64e2378cdc8a383653da0501f05df677600 - category: core - optional: true -- name: coverage - version: 7.4.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.4.4-py310h2372a71_0.conda - hash: - md5: 2d948842110ae68e4f2e7738f92bf7e1 - sha256: e95f08ca0f555a5e16e7ef800317e04a237ef6622073d1c9dfb8792a06d28336 - category: dev - optional: true -- name: coverage - version: 7.4.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.4.4-py310hb372a2b_0.conda - hash: - md5: 9036869b7b769be5d2c9efcb89155bf7 - sha256: a95c1faac282519626990b399803d9c47025e17a03f088fc1004359ec26a954d - category: dev - optional: true -- name: coverage - version: 7.4.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tomli: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.4.4-py310h8d17308_0.conda - hash: - md5: f52d17cf10b0451ec05c24d14f72870b - sha256: 1d12680e79b05ef32d04142539307b2744de2e6798870340ac27982e2adb052d - category: dev - optional: true -- name: cycler - version: 0.12.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 5cd86562580f274031ede6aa6aa24441 - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - category: core - optional: true -- name: cycler - version: 0.12.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 5cd86562580f274031ede6aa6aa24441 - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - category: core - optional: true -- name: cycler - version: 0.12.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 5cd86562580f274031ede6aa6aa24441 - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - category: core - optional: true -- name: cytoolz - version: 0.12.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - toolz: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda - hash: - md5: 21362970a6fea90ca507c253c20465f2 - sha256: a75c195a71b8a1676f057a785515d1f78515d4f59389d5ac6d3cd9a08880566a - category: core - optional: true -- name: cytoolz - version: 0.12.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - toolz: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/osx-64/cytoolz-0.12.3-py310hb372a2b_0.conda - hash: - md5: f257633897bf6f962e49f07820656421 - sha256: 332b79f09e56754b95accb02fca694bc18e14bb3d44eafc89dab7c132bdd6007 - category: core - optional: true -- name: cytoolz - version: 0.12.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - toolz: '>=0.10.0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/cytoolz-0.12.3-py310h8d17308_0.conda - hash: - md5: 6051dfb72d955bc0355c2a38a5d85493 - sha256: 0e994dcb9da1c419fe9a974234e60b507a375e06bc39b03895e8eac46c0128ee - category: core - optional: true -- name: dash - version: 2.16.1 - manager: conda - platform: linux-64 - dependencies: - flask: '>=1.0.4' - importlib-metadata: '' - nest-asyncio: '' - plotly: '>=5.0.0' - python: '>=3.6' - requests: '' - retrying: '' - setuptools: '' - typing-extensions: '>=4.1.1' - werkzeug: '' - url: https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda - hash: - md5: 016bd4f61878a57f19c8cd744708a1f1 - sha256: 9eeb4e9cd023e072883f121085e67a2c67ab9a58b1fdf07d356fc05fb9791645 - category: apps - optional: true -- name: dash - version: 2.16.1 - manager: conda - platform: osx-64 - dependencies: - requests: '' - setuptools: '' - importlib-metadata: '' - nest-asyncio: '' - werkzeug: '' - retrying: '' - python: '>=3.6' - plotly: '>=5.0.0' - typing-extensions: '>=4.1.1' - flask: '>=1.0.4' - url: https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda - hash: - md5: 016bd4f61878a57f19c8cd744708a1f1 - sha256: 9eeb4e9cd023e072883f121085e67a2c67ab9a58b1fdf07d356fc05fb9791645 - category: apps - optional: true -- name: dash - version: 2.16.1 - manager: conda - platform: win-64 - dependencies: - requests: '' - setuptools: '' - importlib-metadata: '' - nest-asyncio: '' - werkzeug: '' - retrying: '' - python: '>=3.6' - plotly: '>=5.0.0' - typing-extensions: '>=4.1.1' - flask: '>=1.0.4' - url: https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda - hash: - md5: 016bd4f61878a57f19c8cd744708a1f1 - sha256: 9eeb4e9cd023e072883f121085e67a2c67ab9a58b1fdf07d356fc05fb9791645 - category: apps - optional: true -- name: dash-daq - version: 0.5.0 - manager: conda - platform: linux-64 - dependencies: - dash: '>=1.6.1' - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyh9f0ad1d_1.tar.bz2 - hash: - md5: ebd54a61606fa8a191932cb72e448418 - sha256: 5e99ab8b5cac15e5d6986a90566a335c21b2849838a6e877bec79efa2e7e346f - category: apps - optional: true -- name: dash-daq - version: 0.5.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - dash: '>=1.6.1' - url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyh9f0ad1d_1.tar.bz2 - hash: - md5: ebd54a61606fa8a191932cb72e448418 - sha256: 5e99ab8b5cac15e5d6986a90566a335c21b2849838a6e877bec79efa2e7e346f - category: apps - optional: true -- name: dash-daq - version: 0.5.0 - manager: conda - platform: win-64 - dependencies: - python: '' - dash: '>=1.6.1' - url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyh9f0ad1d_1.tar.bz2 - hash: - md5: ebd54a61606fa8a191932cb72e448418 - sha256: 5e99ab8b5cac15e5d6986a90566a335c21b2849838a6e877bec79efa2e7e346f - category: apps - optional: true -- name: dask-core - version: 2022.10.2 - manager: conda - platform: linux-64 - dependencies: - click: '>=7.0' - cloudpickle: '>=1.1.1' - fsspec: '>=0.6.0' - packaging: '>=20.0' - partd: '>=0.3.10' - python: '>=3.8' - pyyaml: '>=5.3.1' - toolz: '>=0.8.2' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6f837aa0cbc910b39207fe5d97dfdf1e - sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf - category: core - optional: true -- name: dask-core - version: 2022.10.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - click: '>=7.0' - packaging: '>=20.0' - pyyaml: '>=5.3.1' - toolz: '>=0.8.2' - partd: '>=0.3.10' - fsspec: '>=0.6.0' - cloudpickle: '>=1.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6f837aa0cbc910b39207fe5d97dfdf1e - sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf - category: core - optional: true -- name: dask-core - version: 2022.10.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - click: '>=7.0' - packaging: '>=20.0' - pyyaml: '>=5.3.1' - toolz: '>=0.8.2' - partd: '>=0.3.10' - fsspec: '>=0.6.0' - cloudpickle: '>=1.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6f837aa0cbc910b39207fe5d97dfdf1e - sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf - category: core - optional: true -- name: dbus - version: 1.13.6 - manager: conda - platform: linux-64 - dependencies: - expat: '>=2.4.2,<3.0a0' - libgcc-ng: '>=9.4.0' - libglib: '>=2.70.2,<3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 - hash: - md5: ecfff944ba3960ecb334b9a2663d708d - sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 - category: apps - optional: true -- name: debugpy - version: 1.8.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.1-py310hc6cd4ac_0.conda - hash: - md5: 1ea80564b80390fa25da16e4211eb801 - sha256: 69d3970a9bb62d4e1e187f82248cc1cc924589c06100a6f1a065e063f4155978 - category: apps - optional: true -- name: debugpy - version: 1.8.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.1-py310h5daac23_0.conda - hash: - md5: 3364c88f90fc0a8354a165f44dd9dd5c - sha256: 4d8e2f3019ed8f6141745d027d8a4f778dd71008848ee4bfaa81842da2e0b42f - category: apps - optional: true -- name: debugpy - version: 1.8.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.1-py310h00ffb61_0.conda - hash: - md5: 0496f1dc805c8a53a7be7fc2f5ca61cc - sha256: 070a4d308dace7903e749ed09177315265e6b2dab5d6bb6a0e853fa1fd2e3502 - category: apps - optional: true -- name: decorator - version: 5.1.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 43afe5ab04e35e17ba28649471dd7364 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - category: apps - optional: true -- name: decorator - version: 5.1.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 43afe5ab04e35e17ba28649471dd7364 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - category: apps - optional: true -- name: decorator - version: 5.1.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 43afe5ab04e35e17ba28649471dd7364 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - category: apps - optional: true -- name: defusedxml - version: 0.7.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 961b3a227b437d82ad7054484cfa71b2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - category: apps - optional: true -- name: defusedxml - version: 0.7.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 961b3a227b437d82ad7054484cfa71b2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - category: apps - optional: true -- name: defusedxml - version: 0.7.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 961b3a227b437d82ad7054484cfa71b2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - category: apps - optional: true -- name: dill - version: 0.3.8 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda - hash: - md5: 78745f157d56877a2c6e7b386f66f3e2 - sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4 - category: dev - optional: true -- name: dill - version: 0.3.8 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda - hash: - md5: 78745f157d56877a2c6e7b386f66f3e2 - sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4 - category: dev - optional: true -- name: dill - version: 0.3.8 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda - hash: - md5: 78745f157d56877a2c6e7b386f66f3e2 - sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4 - category: dev - optional: true -- name: discretize - version: 0.10.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=1.8' - url: https://conda.anaconda.org/conda-forge/linux-64/discretize-0.10.0-py310hcb52e73_1.conda - hash: - md5: 1f0f0e9eb694f1d36ea44e167622fd97 - sha256: 3cfbc4e072448f7e1bbcfdff0c01b18ae67d6d83d12b7585567a4dd057b8c02e - category: core - optional: true -- name: discretize - version: 0.10.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=1.8' - url: https://conda.anaconda.org/conda-forge/osx-64/discretize-0.10.0-py310h65d09f4_1.conda - hash: - md5: 690e65e69d4b89ea722582420d83f200 - sha256: 3b52c8c57237a6f91011825cb96ad527756e37a4738b09707d5a300eb2766ed6 - category: core - optional: true -- name: discretize - version: 0.10.0 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=1.8' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/discretize-0.10.0-py310h4856b71_1.conda - hash: - md5: 7af88a12920a5b2b5ae459a5dd032019 - sha256: 6170c71a13541cd570afde2d6acfb24f19ced2f3a082c94157ed31d34c92c563 - category: core - optional: true -- name: distributed - version: 2022.10.2 - manager: conda - platform: linux-64 - dependencies: - click: '>=6.6' - cloudpickle: '>=1.5.0' - cytoolz: '>=0.8.2' - dask-core: '>=2022.10.2,<2022.10.3.0a0' - jinja2: '' - locket: '>=1.0.0' - msgpack-python: '>=0.6.0' - packaging: '>=20.0' - psutil: '>=5.0' - python: '>=3.8' - pyyaml: '' - sortedcontainers: '!=2.0.0,!=2.0.1' - tblib: '>=1.6.0' - toolz: '>=0.8.2' - tornado: '>=6.0.3,<6.2' - urllib3: '' - zict: '>=0.1.3' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7ffdc4f6105bde64a844bbb57653293e - sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8 - category: core - optional: true -- name: distributed - version: 2022.10.2 - manager: conda - platform: osx-64 - dependencies: - pyyaml: '' - jinja2: '' - urllib3: '' - python: '>=3.8' - packaging: '>=20.0' - cloudpickle: '>=1.5.0' - toolz: '>=0.8.2' - cytoolz: '>=0.8.2' - psutil: '>=5.0' - tblib: '>=1.6.0' - locket: '>=1.0.0' - zict: '>=0.1.3' - sortedcontainers: '!=2.0.0,!=2.0.1' - click: '>=6.6' - msgpack-python: '>=0.6.0' - tornado: '>=6.0.3,<6.2' - dask-core: '>=2022.10.2,<2022.10.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7ffdc4f6105bde64a844bbb57653293e - sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8 - category: core - optional: true -- name: distributed - version: 2022.10.2 - manager: conda - platform: win-64 - dependencies: - pyyaml: '' - jinja2: '' - urllib3: '' - python: '>=3.8' - packaging: '>=20.0' - cloudpickle: '>=1.5.0' - toolz: '>=0.8.2' - cytoolz: '>=0.8.2' - psutil: '>=5.0' - tblib: '>=1.6.0' - locket: '>=1.0.0' - zict: '>=0.1.3' - sortedcontainers: '!=2.0.0,!=2.0.1' - click: '>=6.6' - msgpack-python: '>=0.6.0' - tornado: '>=6.0.3,<6.2' - dask-core: '>=2022.10.2,<2022.10.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7ffdc4f6105bde64a844bbb57653293e - sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8 - category: core - optional: true -- name: empymod - version: 2.2.2 - manager: conda - platform: linux-64 - dependencies: - numba: '>=0.47' - python: '>=3.7' - scipy: '>=1.4.0' - url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda - hash: - md5: bebcf8f5112a7d755e2781fe9f87ae7b - sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 - category: core - optional: true -- name: empymod - version: 2.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - scipy: '>=1.4.0' - numba: '>=0.47' - url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda - hash: - md5: bebcf8f5112a7d755e2781fe9f87ae7b - sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 - category: core - optional: true -- name: empymod - version: 2.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - scipy: '>=1.4.0' - numba: '>=0.47' - url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda - hash: - md5: bebcf8f5112a7d755e2781fe9f87ae7b - sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 - category: core - optional: true -- name: entrypoints - version: '0.4' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3cf04868fee0a029769bd41f4b2fbf2d - sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af - category: apps - optional: true -- name: entrypoints - version: '0.4' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3cf04868fee0a029769bd41f4b2fbf2d - sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af - category: apps - optional: true -- name: entrypoints - version: '0.4' - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3cf04868fee0a029769bd41f4b2fbf2d - sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af - category: apps - optional: true -- name: exceptiongroup - version: 1.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - hash: - md5: 8d652ea2ee8eaee02ed8dc820bc794aa - sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d - category: dev - optional: true -- name: exceptiongroup - version: 1.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - hash: - md5: 8d652ea2ee8eaee02ed8dc820bc794aa - sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d - category: dev - optional: true -- name: exceptiongroup - version: 1.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - hash: - md5: 8d652ea2ee8eaee02ed8dc820bc794aa - sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d - category: dev - optional: true -- name: executing - version: 2.0.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - hash: - md5: e16be50e378d8a4533b989035b196ab8 - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - category: apps - optional: true -- name: executing - version: 2.0.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - hash: - md5: e16be50e378d8a4533b989035b196ab8 - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - category: apps - optional: true -- name: executing - version: 2.0.1 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - hash: - md5: e16be50e378d8a4533b989035b196ab8 - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - category: apps - optional: true -- name: expat - version: 2.6.2 - manager: conda - platform: linux-64 - dependencies: - libexpat: 2.6.2 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda - hash: - md5: 53fb86322bdb89496d7579fe3f02fd61 - sha256: 89916c536ae5b85bb8bf0cfa27d751e274ea0911f04e4a928744735c14ef5155 - category: core - optional: true -- name: expat - version: 2.6.2 - manager: conda - platform: osx-64 - dependencies: - libexpat: 2.6.2 - url: https://conda.anaconda.org/conda-forge/osx-64/expat-2.6.2-h73e2aa4_0.conda - hash: - md5: dc0882915da2ec74696ad87aa2350f27 - sha256: 0fd1befb18d9d937358a90d5b8f97ac2402761e9d4295779cbad9d7adfb47976 - category: core - optional: true -- name: expat - version: 2.6.2 - manager: conda - platform: win-64 - dependencies: - libexpat: 2.6.2 - url: https://conda.anaconda.org/conda-forge/win-64/expat-2.6.2-h63175ca_0.conda - hash: - md5: 52f9dec6758ceb8ce0ea8af9fa13eb1a - sha256: f5a13d4bc591a4dc210954f492dd59a0ecf9b9d2ab28bf2ece755ca8f69ec1b4 - category: core - optional: true -- name: fasteners - version: 0.17.3 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 348e27e78a5e39090031448c72f66d5e - sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda - category: core - optional: true -- name: fasteners - version: 0.17.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 348e27e78a5e39090031448c72f66d5e - sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda - category: core - optional: true -- name: fasteners - version: 0.17.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 348e27e78a5e39090031448c72f66d5e - sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda - category: core - optional: true -- name: fiona - version: 1.9.3 - manager: conda - platform: linux-64 - dependencies: - attrs: '>=17' - click: '>=4.0' - click-plugins: '>=1.0' - cligj: '>=0.5' - gdal: '' - importlib-metadata: '' - libgcc-ng: '>=12' - libgdal: '>=3.6.3,<3.7.0a0' - libstdcxx-ng: '>=12' - munch: '' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - setuptools: '' - shapely: '' - six: '>=1.7' - url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.3-py310ha325b7b_0.conda - hash: - md5: 612c0935aa627804826a1bd38694c0d3 - sha256: b5fb73ab2cba0329de9030abb109fc1a4bd12dd9c819674e39a8243a490c02ab - category: core - optional: true -- name: fiona - version: 1.9.3 - manager: conda - platform: osx-64 - dependencies: - attrs: '>=17' - click: '>=4.0' - click-plugins: '>=1.0' - cligj: '>=0.5' - gdal: '' - importlib-metadata: '' - libcxx: '>=14.0.6' - libgdal: '>=3.6.3,<3.7.0a0' - munch: '' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - setuptools: '' - shapely: '' - six: '>=1.7' - url: https://conda.anaconda.org/conda-forge/osx-64/fiona-1.9.3-py310h3963e5c_0.conda - hash: - md5: fc19900289ae050b06fd91d5b5faf8db - sha256: 998b176e3cc7098f4e1c44cef21a41afa633f6d9c6b53336981141a93ef3bcaf - category: core - optional: true -- name: fiona - version: 1.9.3 - manager: conda - platform: win-64 - dependencies: - attrs: '>=17' - click: '>=4.0' - click-plugins: '>=1.0' - cligj: '>=0.5' - gdal: '' - importlib-metadata: '' - libgdal: '>=3.6.3,<3.7.0a0' - munch: '' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - setuptools: '' - shapely: '' - six: '>=1.7' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/fiona-1.9.3-py310h4a685fe_0.conda - hash: - md5: f5313037ddbb4119f685ca5ddfc6430f - sha256: 41cd6c9d20f5b4391c83e1e9a40a0d811dde39e8724084c3a79a61b30261e7db - category: core - optional: true -- name: flask - version: 3.0.3 - manager: conda - platform: linux-64 - dependencies: - blinker: '>=1.6.2' - click: '>=8.1.3' - importlib-metadata: '>=3.6.0' - itsdangerous: '>=2.1.2' - jinja2: '>=3.1.2' - python: '>=3.8' - werkzeug: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda - hash: - md5: dcdb937144fa20d7757bf512db1ea769 - sha256: 2fc508f656fe52cb2f9a69c9c62077934d6a81510256dbe85f95beb7d9620238 - category: apps - optional: true -- name: flask - version: 3.0.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - click: '>=8.1.3' - jinja2: '>=3.1.2' - importlib-metadata: '>=3.6.0' - itsdangerous: '>=2.1.2' - blinker: '>=1.6.2' - werkzeug: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda - hash: - md5: dcdb937144fa20d7757bf512db1ea769 - sha256: 2fc508f656fe52cb2f9a69c9c62077934d6a81510256dbe85f95beb7d9620238 - category: apps - optional: true -- name: flask - version: 3.0.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - click: '>=8.1.3' - jinja2: '>=3.1.2' - importlib-metadata: '>=3.6.0' - itsdangerous: '>=2.1.2' - blinker: '>=1.6.2' - werkzeug: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda - hash: - md5: dcdb937144fa20d7757bf512db1ea769 - sha256: 2fc508f656fe52cb2f9a69c9c62077934d6a81510256dbe85f95beb7d9620238 - category: apps - optional: true -- name: font-ttf-dejavu-sans-mono - version: '2.37' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - hash: - md5: 0c96522c6bdaed4b1566d11387caaf45 - sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b - category: core - optional: true -- name: font-ttf-dejavu-sans-mono - version: '2.37' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - hash: - md5: 0c96522c6bdaed4b1566d11387caaf45 - sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b - category: core - optional: true -- name: font-ttf-dejavu-sans-mono - version: '2.37' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - hash: - md5: 0c96522c6bdaed4b1566d11387caaf45 - sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b - category: core - optional: true -- name: font-ttf-inconsolata - version: '3.000' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - hash: - md5: 34893075a5c9e55cdafac56607368fc6 - sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c - category: core - optional: true -- name: font-ttf-inconsolata - version: '3.000' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - hash: - md5: 34893075a5c9e55cdafac56607368fc6 - sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c - category: core - optional: true -- name: font-ttf-inconsolata - version: '3.000' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - hash: - md5: 34893075a5c9e55cdafac56607368fc6 - sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c - category: core - optional: true -- name: font-ttf-source-code-pro - version: '2.038' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - hash: - md5: 4d59c254e01d9cde7957100457e2d5fb - sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 - category: core - optional: true -- name: font-ttf-source-code-pro - version: '2.038' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - hash: - md5: 4d59c254e01d9cde7957100457e2d5fb - sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 - category: core - optional: true -- name: font-ttf-source-code-pro - version: '2.038' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - hash: - md5: 4d59c254e01d9cde7957100457e2d5fb - sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 - category: core - optional: true -- name: font-ttf-ubuntu - version: '0.83' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda - hash: - md5: 6185f640c43843e5ad6fd1c5372c3f80 - sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 - category: core - optional: true -- name: font-ttf-ubuntu - version: '0.83' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda - hash: - md5: 6185f640c43843e5ad6fd1c5372c3f80 - sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 - category: core - optional: true -- name: font-ttf-ubuntu - version: '0.83' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda - hash: - md5: 6185f640c43843e5ad6fd1c5372c3f80 - sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 - category: core - optional: true -- name: fontconfig - version: 2.14.2 - manager: conda - platform: linux-64 - dependencies: - expat: '>=2.5.0,<3.0a0' - freetype: '>=2.12.1,<3.0a0' - libgcc-ng: '>=12' - libuuid: '>=2.32.1,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda - hash: - md5: 0f69b688f52ff6da70bccb7ff7001d1d - sha256: 155d534c9037347ea7439a2c6da7c24ffec8e5dd278889b4c57274a1d91e0a83 - category: core - optional: true -- name: fontconfig - version: 2.14.2 - manager: conda - platform: osx-64 - dependencies: - expat: '>=2.5.0,<3.0a0' - freetype: '>=2.12.1,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.14.2-h5bb23bf_0.conda - hash: - md5: 86cc5867dfbee4178118392bae4a3c89 - sha256: f63e6d1d6aef8ba6de4fc54d3d7898a153479888d40ffdf2e4cfad6f92679d34 - category: core - optional: true -- name: fontconfig - version: 2.14.2 - manager: conda - platform: win-64 - dependencies: - expat: '>=2.5.0,<3.0a0' - freetype: '>=2.12.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.14.2-hbde0cde_0.conda - hash: - md5: 08767992f1a4f1336a257af1241034bd - sha256: 643f2b95be68abeb130c53d543dcd0c1244bebabd58c774a21b31e4b51ac3c96 - category: core - optional: true -- name: fonts-conda-ecosystem - version: '1' - manager: conda - platform: linux-64 - dependencies: - fonts-conda-forge: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - hash: - md5: fee5683a3f04bd15cbd8318b096a27ab - sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 - category: core - optional: true -- name: fonts-conda-ecosystem - version: '1' - manager: conda - platform: osx-64 - dependencies: - fonts-conda-forge: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - hash: - md5: fee5683a3f04bd15cbd8318b096a27ab - sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 - category: core - optional: true -- name: fonts-conda-ecosystem - version: '1' - manager: conda - platform: win-64 - dependencies: - fonts-conda-forge: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - hash: - md5: fee5683a3f04bd15cbd8318b096a27ab - sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 - category: core - optional: true -- name: fonts-conda-forge - version: '1' - manager: conda - platform: linux-64 - dependencies: - font-ttf-dejavu-sans-mono: '' - font-ttf-inconsolata: '' - font-ttf-source-code-pro: '' - font-ttf-ubuntu: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - hash: - md5: f766549260d6815b0c52253f1fb1bb29 - sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 - category: core - optional: true -- name: fonts-conda-forge - version: '1' - manager: conda - platform: osx-64 - dependencies: - font-ttf-inconsolata: '' - font-ttf-source-code-pro: '' - font-ttf-ubuntu: '' - font-ttf-dejavu-sans-mono: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - hash: - md5: f766549260d6815b0c52253f1fb1bb29 - sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 - category: core - optional: true -- name: fonts-conda-forge - version: '1' - manager: conda - platform: win-64 - dependencies: - font-ttf-inconsolata: '' - font-ttf-source-code-pro: '' - font-ttf-ubuntu: '' - font-ttf-dejavu-sans-mono: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - hash: - md5: f766549260d6815b0c52253f1fb1bb29 - sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 - category: core - optional: true -- name: fonttools - version: 4.51.0 - manager: conda - platform: linux-64 - dependencies: - brotli: '' - libgcc-ng: '>=12' - munkres: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - unicodedata2: '>=14.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.51.0-py310h2372a71_0.conda - hash: - md5: 1a4773624145c15b92820fe6c87c5fcd - sha256: 75158022bf0d6f1a57c784aa91a3c560211f37063f4f4639b5296ada50a262e8 - category: core - optional: true -- name: fonttools - version: 4.51.0 - manager: conda - platform: osx-64 - dependencies: - brotli: '' - munkres: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - unicodedata2: '>=14.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.51.0-py310hb372a2b_0.conda - hash: - md5: cc4ea60c91e8b87edec4ff92385d2004 - sha256: ad7bd99d1c23c0755a40566d99f6f533d1eeac635739643a90f8a6ce4a7532e9 - category: core - optional: true -- name: fonttools - version: 4.51.0 - manager: conda - platform: win-64 - dependencies: - brotli: '' - munkres: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - unicodedata2: '>=14.0.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.51.0-py310h8d17308_0.conda - hash: - md5: bffd6b44942b144fc8d52ecc50d39fb8 - sha256: 1b51ec54f8be7baaa14d28ea68937f63e8bd73ce4f405109252a850ea32dbcd7 - category: core - optional: true -- name: freetype - version: 2.12.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - hash: - md5: 9ae35c3d96db2c94ce0cef86efdfa2cb - sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 - category: main - optional: false -- name: freetype - version: 2.12.1 - manager: conda - platform: osx-64 - dependencies: - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - hash: - md5: 25152fce119320c980e5470e64834b50 - sha256: b292cf5a25f094eeb4b66e37d99a97894aafd04a5683980852a8cbddccdc8e4e - category: main - optional: false -- name: freetype - version: 2.12.1 - manager: conda - platform: win-64 - dependencies: - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - hash: - md5: 3761b23693f768dc75a8fd0a73ca053f - sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 - category: main - optional: false -- name: freexl - version: 2.0.0 - manager: conda - platform: linux-64 - dependencies: - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - minizip: '>=4.0.1,<5.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h743c826_0.conda - hash: - md5: 12e6988845706b2cfbc3bc35c9a61a95 - sha256: 9213f60ba710ecfd3632ce47e036775c9f15ce80a6682ff63cbf12d9dddd5382 - category: core - optional: true -- name: freexl - version: 2.0.0 - manager: conda - platform: osx-64 - dependencies: - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - minizip: '>=4.0.1,<5.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/freexl-2.0.0-h3ec172f_0.conda - hash: - md5: 640c34a8084e2a812bcee5b804597fc9 - sha256: 9d59f1894c3b526e6806e376e979b81d0df23a836415122b86458aef72cda24a - category: core - optional: true -- name: freexl - version: 2.0.0 - manager: conda - platform: win-64 - dependencies: - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - minizip: '>=4.0.1,<5.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/freexl-2.0.0-h8276f4a_0.conda - hash: - md5: 8e02e06229c677cbc9f5dc69ba49052c - sha256: 9ef2fcf3b35703bf61a8359038c4b707382f3d5f0c4020f3f8ffb2f665daabae - category: core - optional: true -- name: fsspec - version: 2022.11.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: eb919f2119a6db5d0192f9e9c3711572 - sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb - category: core - optional: true -- name: fsspec - version: 2022.11.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: eb919f2119a6db5d0192f9e9c3711572 - sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb - category: core - optional: true -- name: fsspec - version: 2022.11.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: eb919f2119a6db5d0192f9e9c3711572 - sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb - category: core - optional: true -- name: gdal - version: 3.6.4 - manager: conda - platform: linux-64 - dependencies: - hdf5: '>=1.14.2,<1.14.4.0a0' - libgcc-ng: '>=12' - libgdal: 3.6.4 - libstdcxx-ng: '>=12' - libxml2: '>=2.11.5,<3.0.0a0' - numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.3,<4.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.6.4-py310h5c4b078_22.conda - hash: - md5: 6e58319ba956f30cdc8468e944af3166 - sha256: 6d6b3ec5336e794d5117a44c61901f94accd901e286e05b1e440be56256654a7 - category: core - optional: true -- name: gdal - version: 3.6.4 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - hdf5: '>=1.14.2,<1.14.4.0a0' - libcxx: '>=16.0.6' - libgdal: 3.6.4 - libxml2: '>=2.11.5,<3.0.0a0' - numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.3,<4.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.6.4-py310ha2e6a91_22.conda - hash: - md5: c9a21949852ad38f818a2a2dd3e6bc91 - sha256: 2c871cc7b56435f2899413e9a5a7df836d9301d8f6f935fcda0797ad7b00fe6f - category: core - optional: true -- name: gdal - version: 3.6.4 - manager: conda - platform: win-64 - dependencies: - hdf5: '>=1.14.2,<1.14.4.0a0' - libgdal: 3.6.4 - libxml2: '>=2.11.5,<3.0.0a0' - numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.3,<4.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gdal-3.6.4-py310haa9213b_22.conda - hash: - md5: 1efc7ef341d96398a1fcd0a800f052e0 - sha256: e44c1d14e5f290b41ca6d749e09f9edd58b4d66ba47524538e8b5600340b488b - category: core - optional: true -- name: geoana - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - empymod: '' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - matplotlib-base: '' - numpy: '>=1.23.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=0.13' - utm: '' - url: https://conda.anaconda.org/conda-forge/linux-64/geoana-0.4.0-py310hbf28c38_1.tar.bz2 - hash: - md5: 1bd40020a2aa8efd348d0a7c051d3f22 - sha256: 08a3bdd30b685bcacc097611495175d0b6994f56484a174dc85a0b61945b939c - category: core - optional: true -- name: geoana - version: 0.4.0 - manager: conda - platform: osx-64 - dependencies: - empymod: '' - libcxx: '>=14.0.4' - matplotlib-base: '' - numpy: '>=1.23.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=0.13' - utm: '' - url: https://conda.anaconda.org/conda-forge/osx-64/geoana-0.4.0-py310ha23aa8a_1.tar.bz2 - hash: - md5: a2045d7a327807c593b4eb66878726cb - sha256: 7a469a45948969c16a01f2fa6dc7b67898ba53ebff64fd7530193249db525bed - category: core - optional: true -- name: geoana - version: 0.4.0 - manager: conda - platform: win-64 - dependencies: - empymod: '' - matplotlib-base: '' - numpy: '>=1.23.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=0.13' - ucrt: '>=10.0.20348.0' - utm: '' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/geoana-0.4.0-py310h232114e_1.tar.bz2 - hash: - md5: dc83eae4fe4c634d111e066e13bada84 - sha256: e67adde2539020fa905a169ad4e06a5d39b6fa94ba87de279e7547c1f7742971 - category: core - optional: true -- name: geos - version: 3.12.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda - hash: - md5: 3fdf79ef322c8379ae83be491d805369 - sha256: c80ff0ed71db0d56567ee87df28bc442b596330ac241ab86f488e3139f0e2cae - category: core - optional: true -- name: geos - version: 3.12.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-64/geos-3.12.0-he965462_0.conda - hash: - md5: 264a53af0fb378e81b44e45e5ab5aff1 - sha256: e84ff98270717ae49aeba6788476d3569ad33993a46d33d727ee528fb3386a58 - category: core - optional: true -- name: geos - version: 3.12.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/geos-3.12.0-h1537add_0.conda - hash: - md5: 78119c25e59de33135b673375c6fa126 - sha256: 096c45cb03240ae67ff9e09166110a3bd19a5ab20bf7deea8be55557792b9924 - category: core - optional: true -- name: geotiff - version: 1.7.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda - hash: - md5: 1d53ee057d8481bd2b4c2c34c8e92aac - sha256: b00958767cb5607bdb3bbcec0b2056b3e48c0f9e34c31ed8ac01c9bd36704dab - category: core - optional: true -- name: geotiff - version: 1.7.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.7.1-h889ec99_14.conda - hash: - md5: c994aeaa43a92403ecc723dba66b3f1f - sha256: 2d6d54763b4cc41a90d7ca810681c44eaff077027a7b6f5df676736fa0299746 - category: core - optional: true -- name: geotiff - version: 1.7.1 - manager: conda - platform: win-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - url: https://conda.anaconda.org/conda-forge/win-64/geotiff-1.7.1-hcf4a93f_14.conda - hash: - md5: ba4fadef391cfecb95ad9dc8617fe481 - sha256: 12f8e01f8cb4dccfbd16af9f88f81aa6ccda8607d98a9eb1f7f305c3f455439f - category: core - optional: true -- name: gettext - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - gettext-tools: 0.22.5 - libasprintf: 0.22.5 - libasprintf-devel: 0.22.5 - libgcc-ng: '>=12' - libgettextpo: 0.22.5 - libgettextpo-devel: 0.22.5 - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/gettext-0.22.5-h59595ed_2.conda - hash: - md5: 219ba82e95d7614cf7140d2a4afc0926 - sha256: 386181254ddd2aed1fccdfc217da5b6545f6df4e9979ad8e08f5e91e22eaf7dc - category: core - optional: true -- name: gettext - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - gettext-tools: 0.22.5 - libasprintf: 0.22.5 - libasprintf-devel: 0.22.5 - libcxx: '>=16' - libgettextpo: 0.22.5 - libgettextpo-devel: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - libintl-devel: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/gettext-0.22.5-h5ff76d1_2.conda - hash: - md5: c09b3dcf2adc5a2a32d11ab90289b8fa - sha256: ba9a4680b018a4ca517ec20beb25b09c97e293ecd16b931075e689db10291712 - category: core - optional: true -- name: gettext - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - gettext-tools: 0.22.5 - libasprintf: 0.22.5 - libasprintf-devel: 0.22.5 - libgettextpo: 0.22.5 - libgettextpo-devel: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - libintl-devel: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/gettext-0.22.5-h5728263_2.conda - hash: - md5: da84216f88a8c89eb943c683ceb34d7d - sha256: cd4ef93fd052a4fe89a4db963c9d69e60c8a434d41968fc9dc8726db67191582 - category: core - optional: true -- name: gettext-tools - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/gettext-tools-0.22.5-h59595ed_2.conda - hash: - md5: 985f2f453fb72408d6b6f1be0f324033 - sha256: 67d7b1d6fe4f1c516df2000640ec7dcfebf3ff6ea0785f0276870e730c403d33 - category: core - optional: true -- name: gettext-tools - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/gettext-tools-0.22.5-h5ff76d1_2.conda - hash: - md5: 37e1cb0efeff4d4623a6357e37e0105d - sha256: 4db71a66340d068c57e16c574c356db6df54ac0147b5b26d3313093f7854ee6d - category: core - optional: true -- name: gettext-tools - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gettext-tools-0.22.5-h7d00a51_2.conda - hash: - md5: ef1c3bb48c013099c4872640a5f2096c - sha256: e3621dc3d48399c89bf0dd512a6a398d354429b3b84219473d674aa56e0feef2 - category: core - optional: true -- name: giflib - version: 5.2.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - hash: - md5: 3bf7b9fd5a7136126e0234db4b87c8b6 - sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff - category: core - optional: true -- name: giflib - version: 5.2.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - hash: - md5: 03e8c9b4d3da5f3d6eabdd020c2d63ac - sha256: 2c825df829097536314a195ae5cacaa8695209da6b4400135a65d8e23c008ff8 - category: core - optional: true -- name: glib - version: 2.78.1 - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - glib-tools: 2.78.1 - libgcc-ng: '>=12' - libglib: 2.78.1 - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - python: '*' - url: https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_0.conda - hash: - md5: 43c633c015a361610ee4db2e95f8a517 - sha256: fc052d470898ce222d1087815f3c16a8d32a3ef1afec06c39b892bea2d4b164a - category: apps - optional: true -- name: glib - version: 2.78.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - glib-tools: 2.78.1 - libcxx: '>=16.0.6' - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - python: '*' - url: https://conda.anaconda.org/conda-forge/osx-64/glib-2.78.1-hf4d7fad_0.conda - hash: - md5: 9ec0d72a2fa4e3fdd6d62629fbad7b2b - sha256: 00e5e6808c62fd4377bf7d46777d43a48145418eef26ddbf766258cf35e822e4 - category: apps - optional: true -- name: glib - version: 2.78.1 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - glib-tools: 2.78.1 - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - python: '*' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/glib-2.78.1-h12be248_0.conda - hash: - md5: 55a9176ace9721d0b89cbf99f78e6b04 - sha256: 841ec811330ff4e1f8c30a993ec536778a7332423c9785af69a2b77568b32056 - category: apps - optional: true -- name: glib-tools - version: 2.78.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libglib: 2.78.1 - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_0.conda - hash: - md5: 5b4fe75a68cbb95350f47bb9a707b53b - sha256: b1514f0372ff4d7bd2d87001c881c7ee7fc9e28e4e8444ff17dbbea60dd8c9a6 - category: apps - optional: true -- name: glib-tools - version: 2.78.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.78.1-hf4d7fad_0.conda - hash: - md5: be4782cc6efc35b7ccbe38fedf33d6d9 - sha256: e76466f767a23ca054b3dcfdab56f0ea4aa1a9e5f8d0c1b6a62826b2144e564e - category: apps - optional: true -- name: glib-tools - version: 2.78.1 - manager: conda - platform: win-64 - dependencies: - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.78.1-h12be248_0.conda - hash: - md5: 7d9280579328b01cddbb1c4e91ca2df1 - sha256: c0b909c886088dac3f2224c8bd555ad0ceddd6835a3724f50dd4977ff4cdd93a - category: apps - optional: true -- name: graphite2 - version: 1.3.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - hash: - md5: f87c7b7c2cb45f323ffbce941c78ab7c - sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add - category: apps - optional: true -- name: gst-plugins-base - version: 1.22.7 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - alsa-lib: '>=1.2.10,<1.3.0.0a0' - gettext: '>=0.21.1,<1.0a0' - gstreamer: 1.22.7 - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.1,<3.0a0' - libogg: '>=1.3.4,<1.4.0a0' - libopus: '>=1.3.1,<2.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libstdcxx-ng: '>=12' - libvorbis: '>=1.3.7,<1.4.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xorg-libx11: '>=1.8.7,<2.0a0' - xorg-libxau: '>=1.0.11,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-libxrender: '>=0.9.11,<0.10.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda - hash: - md5: 065e2c1d49afa3fdc1a01f1dacd6ab09 - sha256: 190151790cedc719199c783123a9f3ee4e86acd09fee3a6ec33a21cbac20494e - category: apps - optional: true -- name: gst-plugins-base - version: 1.22.7 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - gstreamer: 1.22.7 - libcxx: '>=16.0.6' - libglib: '>=2.78.1,<3.0a0' - libogg: '>=1.3.4,<1.4.0a0' - libopus: '>=1.3.1,<2.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libvorbis: '>=1.3.7,<1.4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/gst-plugins-base-1.22.7-hd283e88_0.conda - hash: - md5: 6f0f588e82330893016aa084d3ae74a1 - sha256: b5040c42a813020ef957528b68152593cbcfcbaecceb9ddc39a5eae036bf3634 - category: apps - optional: true -- name: gst-plugins-base - version: 1.22.7 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - gstreamer: 1.22.7 - libglib: '>=2.78.1,<3.0a0' - libogg: '>=1.3.4,<1.4.0a0' - libvorbis: '>=1.3.7,<1.4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gst-plugins-base-1.22.7-h001b923_0.conda - hash: - md5: e4b56ad6c21e861456f32bfc79b43c4b - sha256: aa9315d943f1f0c224fbebb72ff802701161d3365415c1ebf3758fac1b5ae214 - category: apps - optional: true -- name: gstreamer - version: 1.22.7 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - gettext: '>=0.21.1,<1.0a0' - glib: '>=2.78.1,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda - hash: - md5: 6c919bafe5e03428a8e2ef319d7ef990 - sha256: d77b2a740acd59c4dd6c9d8fe6e008ee96407b6dcc5cc0b5e27e8c1eec5d22ef - category: apps - optional: true -- name: gstreamer - version: 1.22.7 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - glib: '>=2.78.1,<3.0a0' - libcxx: '>=16.0.6' - libglib: '>=2.78.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/gstreamer-1.22.7-h8954545_0.conda - hash: - md5: 78550579c8a164c2af8c6dd690ad7109 - sha256: 2b0acac438bb96ddc7a34d5fa4f52346837708cee06c858bd78c35d993768a36 - category: apps - optional: true -- name: gstreamer - version: 1.22.7 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - glib: '>=2.78.1,<3.0a0' - libglib: '>=2.78.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gstreamer-1.22.7-hb4038d2_0.conda - hash: - md5: 9b2f6622276ed34d20eb36e6a4ce2f50 - sha256: 5cb018ed96727ca7a7f8e782f0e2603135541dc011c926e1837f4cf536fc2341 - category: apps - optional: true -- name: h5py - version: 3.11.0 - manager: conda - platform: linux-64 - dependencies: - cached-property: '' - hdf5: '>=1.14.3,<1.14.4.0a0' - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.11.0-nompi_py310h65828d5_100.conda - hash: - md5: 63bca17f19c5764c3ef9d9a543c137de - sha256: 637b1dd30a919e9440cd5bc87e44011fe48281fb20c5b23a751371ba28eaa70e - category: main - optional: false -- name: h5py - version: 3.11.0 - manager: conda - platform: osx-64 - dependencies: - cached-property: '' - hdf5: '>=1.14.3,<1.14.4.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.11.0-nompi_py310h9b28fce_100.conda - hash: - md5: 887e5a585e2e28dccb3579943d382fca - sha256: d2d4fbc47b1c7e3f13e88861e3dba57d48dcefaea276b16f995107aa327d6e34 - category: main - optional: false -- name: h5py - version: 3.11.0 - manager: conda - platform: win-64 - dependencies: - cached-property: '' - hdf5: '>=1.14.3,<1.14.4.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/h5py-3.11.0-nompi_py310hde4a0ea_100.conda - hash: - md5: dbe8d8f8810b26f8b5e6a5964aea3f90 - sha256: f768c3b618ffc5f5609f25eeae914b8b2ec451b1e1ee2aa2f8cb3c526bf4c264 - category: main - optional: false -- name: harfbuzz - version: 8.3.0 - manager: conda - platform: linux-64 - dependencies: - cairo: '>=1.18.0,<2.0a0' - freetype: '>=2.12.1,<3.0a0' - graphite2: '' - icu: '>=73.2,<74.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.1,<3.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda - hash: - md5: 5a6f6c00ef982a9bc83558d9ac8f64a0 - sha256: 4b55aea03b18a4084b750eee531ad978d4a3690f63019132c26c6ad26bbe3aed - category: apps - optional: true -- name: hdf4 - version: 4.2.15 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda - hash: - md5: bd77f8da987968ec3927990495dc22e4 - sha256: 0d09b6dc1ce5c4005ae1c6a19dc10767932ef9a5e9c755cfdbb5189ac8fb0684 - category: core - optional: true -- name: hdf4 - version: 4.2.15 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/hdf4-4.2.15-h8138101_7.conda - hash: - md5: 7ce543bf38dbfae0de9af112ee178af2 - sha256: 8c767cc71226e9eb62649c903c68ba73c5f5e7e3696ec0319d1f90586cebec7d - category: core - optional: true -- name: hdf4 - version: 4.2.15 - manager: conda - platform: win-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/hdf4-4.2.15-h5557f11_7.conda - hash: - md5: 84344a916a73727c1326841007b52ca8 - sha256: 52fa5dde69758c19c69ab68a3d7ebfb2c9042e3a55d405c29a59d3b0584fd790 - category: core - optional: true -- name: hdf5 - version: 1.14.3 - manager: conda - platform: linux-64 - dependencies: - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.4.0,<9.0a0' - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=12.3.0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda - hash: - md5: d471a5c3abc984b662d9bae3bb7fd8a5 - sha256: b814f8f9598cc6e50127533ec256725183ba69db5fd8cf5443223627f19e3e59 - category: main - optional: false -- name: hdf5 - version: 1.14.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libgfortran: 5.* - libgfortran5: '>=13.2.0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h691f4bf_100.conda - hash: - md5: 8e2ac4ae815a8c9743fe37d70f48f075 - sha256: 158dd2ab901659b47e8f7ee0ec1d9e45a1fedc4871391a44a1c8b9e8ba4c9c6b - category: main - optional: false -- name: hdf5 - version: 1.14.3 - manager: conda - platform: win-64 - dependencies: - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.4.0,<9.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.3-nompi_h73e8ff5_100.conda - hash: - md5: 1e91ce0f3a914b0dab762539c0df4ff1 - sha256: 89bbb2c878e1b6c6073ef5f1f25eac97ed48393541a4a44a7d182da5ede3dc98 - category: main - optional: false -- name: icu - version: '73.2' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda - hash: - md5: cc47e1facc155f91abd89b11e48e72ff - sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8 - category: main - optional: false -- name: icu - version: '73.2' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda - hash: - md5: 5cc301d759ec03f28328428e28f65591 - sha256: f66362dc36178ac9b7c7a9b012948a9d2d050b3debec24bbd94aadbc44854185 - category: main - optional: false -- name: icu - version: '73.2' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/icu-73.2-h63175ca_0.conda - hash: - md5: 0f47d9e3192d9e09ae300da0d28e0f56 - sha256: 423aaa2b69d713520712f55c7c71994b7e6f967824bb39b59ad968e7b209ce8c - category: core - optional: true -- name: idna - version: '3.7' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - hash: - md5: c0cc1420498b17414d8617d0b9f506ca - sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b - category: main - optional: false -- name: idna - version: '3.7' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - hash: - md5: c0cc1420498b17414d8617d0b9f506ca - sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b - category: main - optional: false -- name: idna - version: '3.7' - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - hash: - md5: c0cc1420498b17414d8617d0b9f506ca - sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b - category: main - optional: false -- name: imagecodecs-lite - version: 2019.12.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-lite-2019.12.3-py310h1f7b6fc_7.conda - hash: - md5: 1d1a04937fb63c8aa4f2612209cb8568 - sha256: 3234fd2785367bcddadf3a4215c1e8dfc0f44897cd930e1436f11c06b2834b4b - category: core - optional: true -- name: imagecodecs-lite - version: 2019.12.3 - manager: conda - platform: osx-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-lite-2019.12.3-py310hf0b6da5_7.conda - hash: - md5: 163e2e718bca84e28ca3bc7beb34a3a2 - sha256: e251b606ae4a79f8c5776836fb8ba0701498b1151f1b07e64d66c70fb0e7d3f9 - category: core - optional: true -- name: imagecodecs-lite - version: 2019.12.3 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-lite-2019.12.3-py310h3e78b6c_7.conda - hash: - md5: bf7c1b06d823925164bedef1a621bf2f - sha256: 784f7c7fcf5555a208d058ac41462076b56191f29d88d2606c8ac460fd2e7f17 - category: core - optional: true -- name: imageio - version: 2.34.0 - manager: conda - platform: linux-64 - dependencies: - numpy: '' - pillow: '>=8.3.2' - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda - hash: - md5: b8853659d596f967c661f544dd89ede7 - sha256: be0eecc8b3ee49ffe3c38dedc4d3c121e18627624926f7d1d998e8027bce4266 - category: core - optional: true -- name: imageio - version: 2.34.0 - manager: conda - platform: osx-64 - dependencies: - numpy: '' - python: '>=3' - pillow: '>=8.3.2' - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda - hash: - md5: b8853659d596f967c661f544dd89ede7 - sha256: be0eecc8b3ee49ffe3c38dedc4d3c121e18627624926f7d1d998e8027bce4266 - category: core - optional: true -- name: imageio - version: 2.34.0 - manager: conda - platform: win-64 - dependencies: - numpy: '' - python: '>=3' - pillow: '>=8.3.2' - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda - hash: - md5: b8853659d596f967c661f544dd89ede7 - sha256: be0eecc8b3ee49ffe3c38dedc4d3c121e18627624926f7d1d998e8027bce4266 - category: core - optional: true -- name: importlib-metadata - version: 7.1.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - zipp: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda - hash: - md5: 0896606848b2dc5cebdf111b6543aa04 - sha256: cc2e7d1f7f01cede30feafc1118b7aefa244d0a12224513734e24165ae12ba49 - category: core - optional: true -- name: importlib-metadata - version: 7.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - zipp: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda - hash: - md5: 0896606848b2dc5cebdf111b6543aa04 - sha256: cc2e7d1f7f01cede30feafc1118b7aefa244d0a12224513734e24165ae12ba49 - category: core - optional: true -- name: importlib-metadata - version: 7.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - zipp: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda - hash: - md5: 0896606848b2dc5cebdf111b6543aa04 - sha256: cc2e7d1f7f01cede30feafc1118b7aefa244d0a12224513734e24165ae12ba49 - category: core - optional: true -- name: importlib_resources - version: 6.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - zipp: '>=3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: c5d3907ad8bd7bf557521a1833cf7e6d - sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de - category: apps - optional: true -- name: importlib_resources - version: 6.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - zipp: '>=3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: c5d3907ad8bd7bf557521a1833cf7e6d - sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de - category: apps - optional: true -- name: importlib_resources - version: 6.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - zipp: '>=3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: c5d3907ad8bd7bf557521a1833cf7e6d - sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de - category: apps - optional: true -- name: iniconfig - version: 2.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - hash: - md5: f800d2da156d08e289b14e87e43c1ae5 - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - category: dev - optional: true -- name: iniconfig - version: 2.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - hash: - md5: f800d2da156d08e289b14e87e43c1ae5 - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - category: dev - optional: true -- name: iniconfig - version: 2.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - hash: - md5: f800d2da156d08e289b14e87e43c1ae5 - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - category: dev - optional: true -- name: intel-openmp - version: 2024.1.0 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.1.0-h57928b3_965.conda - hash: - md5: c66eb2fd33b999ccc258aef85689758e - sha256: 7b029e476ad6d401d645636ee3e4b40130bfcc9534f7415209dd5b666c6dd292 - category: main - optional: false -- name: ipyfilechooser - version: 0.6.0 - manager: conda - platform: linux-64 - dependencies: - ipywidgets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 77f3e551b6bc450deca63b2f171e0b73 - sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 - category: apps - optional: true -- name: ipyfilechooser - version: 0.6.0 - manager: conda - platform: osx-64 - dependencies: - ipywidgets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 77f3e551b6bc450deca63b2f171e0b73 - sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 - category: apps - optional: true -- name: ipyfilechooser - version: 0.6.0 - manager: conda - platform: win-64 - dependencies: - ipywidgets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 77f3e551b6bc450deca63b2f171e0b73 - sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 - category: apps - optional: true -- name: ipykernel - version: 6.29.3 - manager: conda - platform: linux-64 - dependencies: - __linux: '' - comm: '>=0.1.1' - debugpy: '>=1.6.5' - ipython: '>=7.23.1' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - matplotlib-inline: '>=0.1' - nest-asyncio: '' - packaging: '' - psutil: '' - python: '>=3.8' - pyzmq: '>=24' - tornado: '>=6.1' - traitlets: '>=5.4.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.3-pyhd33586a_0.conda - hash: - md5: e0deff12c601ce5cb7476f93718f3168 - sha256: 0314f15e666fd9a4fb653aae37d2cf4dc6bc3a18c0d9c2671a6a0783146adcfa - category: apps - optional: true -- name: ipykernel - version: 6.29.3 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - psutil: '' - nest-asyncio: '' - __osx: '' - appnope: '' - python: '>=3.8' - tornado: '>=6.1' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - ipython: '>=7.23.1' - matplotlib-inline: '>=0.1' - debugpy: '>=1.6.5' - comm: '>=0.1.1' - traitlets: '>=5.4.0' - pyzmq: '>=24' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.3-pyh3cd1d5f_0.conda - hash: - md5: 28e74fca8d8abf09c1ed0d190a17e307 - sha256: ef2f9c1d83afd693db3793c368c5c6afcd37a416958ece490a2e1fbcd85012eb - category: apps - optional: true -- name: ipykernel - version: 6.29.3 - manager: conda - platform: win-64 - dependencies: - packaging: '' - psutil: '' - nest-asyncio: '' - __win: '' - python: '>=3.8' - tornado: '>=6.1' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - ipython: '>=7.23.1' - matplotlib-inline: '>=0.1' - debugpy: '>=1.6.5' - comm: '>=0.1.1' - traitlets: '>=5.4.0' - pyzmq: '>=24' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.3-pyha63f2e9_0.conda - hash: - md5: d86f243bdd45a8019050e7326ed7bb2e - sha256: 93ff46322a2512e9fb4ba456b1f0120d2f628a4b851f3102561a351e528d24d0 - category: apps - optional: true -- name: ipython - version: 8.22.2 - manager: conda - platform: linux-64 - dependencies: - __unix: '' - decorator: '' - exceptiongroup: '' - jedi: '>=0.16' - matplotlib-inline: '' - pexpect: '>4.3' - pickleshare: '' - prompt-toolkit: '>=3.0.41,<3.1.0' - pygments: '>=2.4.0' - python: '>=3.10' - stack_data: '' - traitlets: '>=5.13.0' - typing_extensions: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.22.2-pyh707e725_0.conda - hash: - md5: f0abe827c8a7c6d91bccdf90cb1fbee3 - sha256: 7740505317669f094c881537a643ed26977e209510965164d84942799c997d42 - category: apps - optional: true -- name: ipython - version: 8.22.2 - manager: conda - platform: osx-64 - dependencies: - typing_extensions: '' - __unix: '' - decorator: '' - exceptiongroup: '' - matplotlib-inline: '' - stack_data: '' - pickleshare: '' - python: '>=3.10' - pygments: '>=2.4.0' - jedi: '>=0.16' - pexpect: '>4.3' - prompt-toolkit: '>=3.0.41,<3.1.0' - traitlets: '>=5.13.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.22.2-pyh707e725_0.conda - hash: - md5: f0abe827c8a7c6d91bccdf90cb1fbee3 - sha256: 7740505317669f094c881537a643ed26977e209510965164d84942799c997d42 - category: apps - optional: true -- name: ipython - version: 8.22.2 - manager: conda - platform: win-64 - dependencies: - typing_extensions: '' - colorama: '' - __win: '' - decorator: '' - exceptiongroup: '' - matplotlib-inline: '' - stack_data: '' - pickleshare: '' - python: '>=3.10' - pygments: '>=2.4.0' - jedi: '>=0.16' - prompt-toolkit: '>=3.0.41,<3.1.0' - traitlets: '>=5.13.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.22.2-pyh7428d3b_0.conda - hash: - md5: f803d121b60dff8f4d8f9264b7c6e8bf - sha256: f7196ab6d5251505fd5b9c6ff63694eff09be7959a0a3421b8c2336638de9aaf - category: apps - optional: true -- name: ipython_genutils - version: 0.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2 - hash: - md5: 5071c982548b3a20caf70462f04f5287 - sha256: 0fafbc60209f1d8c0b89a2f79f3ff0f7bc45589a23da1d2e5cc55bcca906707b - category: apps - optional: true -- name: ipython_genutils - version: 0.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2 - hash: - md5: 5071c982548b3a20caf70462f04f5287 - sha256: 0fafbc60209f1d8c0b89a2f79f3ff0f7bc45589a23da1d2e5cc55bcca906707b - category: apps - optional: true -- name: ipython_genutils - version: 0.2.0 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2 - hash: - md5: 5071c982548b3a20caf70462f04f5287 - sha256: 0fafbc60209f1d8c0b89a2f79f3ff0f7bc45589a23da1d2e5cc55bcca906707b - category: apps - optional: true -- name: ipywidgets - version: 7.8.0 - manager: conda - platform: linux-64 - dependencies: - comm: '>=0.1.3' - ipython: '>=4.0.0' - ipython_genutils: '>=0.2.0,<0.3.0' - jupyterlab_widgets: '>=1.0.0,<3' - python: '>=3.3' - traitlets: '>=4.3.1' - widgetsnbextension: '>=3.6.4,<3.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.0-pyhd8ed1ab_0.conda - hash: - md5: 518b05adab6cfe6ea249319932d9d4a3 - sha256: c27d71635869f53c2a802fbbd58a73d6b7946508323dd1805996136b038fb8cf - category: apps - optional: true -- name: ipywidgets - version: 7.8.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.3' - ipython: '>=4.0.0' - traitlets: '>=4.3.1' - ipython_genutils: '>=0.2.0,<0.3.0' - jupyterlab_widgets: '>=1.0.0,<3' - comm: '>=0.1.3' - widgetsnbextension: '>=3.6.4,<3.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.0-pyhd8ed1ab_0.conda - hash: - md5: 518b05adab6cfe6ea249319932d9d4a3 - sha256: c27d71635869f53c2a802fbbd58a73d6b7946508323dd1805996136b038fb8cf - category: apps - optional: true -- name: ipywidgets - version: 7.8.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.3' - ipython: '>=4.0.0' - traitlets: '>=4.3.1' - ipython_genutils: '>=0.2.0,<0.3.0' - jupyterlab_widgets: '>=1.0.0,<3' - comm: '>=0.1.3' - widgetsnbextension: '>=3.6.4,<3.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.0-pyhd8ed1ab_0.conda - hash: - md5: 518b05adab6cfe6ea249319932d9d4a3 - sha256: c27d71635869f53c2a802fbbd58a73d6b7946508323dd1805996136b038fb8cf - category: apps - optional: true -- name: isort - version: 5.13.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8,<4.0' - setuptools: '' - url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda - hash: - md5: 1d25ed2b95b92b026aaa795eabec8d91 - sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2 - category: dev - optional: true -- name: isort - version: 5.13.2 - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - python: '>=3.8,<4.0' - url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda - hash: - md5: 1d25ed2b95b92b026aaa795eabec8d91 - sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2 - category: dev - optional: true -- name: isort - version: 5.13.2 - manager: conda - platform: win-64 - dependencies: - setuptools: '' - python: '>=3.8,<4.0' - url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda - hash: - md5: 1d25ed2b95b92b026aaa795eabec8d91 - sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2 - category: dev - optional: true -- name: itsdangerous - version: 2.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda - hash: - md5: ff7ca04134ee8dde1d7cf491a78ef7c7 - sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 - category: apps - optional: true -- name: itsdangerous - version: 2.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda - hash: - md5: ff7ca04134ee8dde1d7cf491a78ef7c7 - sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 - category: apps - optional: true -- name: itsdangerous - version: 2.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda - hash: - md5: ff7ca04134ee8dde1d7cf491a78ef7c7 - sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 - category: apps - optional: true -- name: jedi - version: 0.19.1 - manager: conda - platform: linux-64 - dependencies: - parso: '>=0.8.3,<0.9.0' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - hash: - md5: 81a3be0b2023e1ea8555781f0ad904a2 - sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a - category: apps - optional: true -- name: jedi - version: 0.19.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - parso: '>=0.8.3,<0.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - hash: - md5: 81a3be0b2023e1ea8555781f0ad904a2 - sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a - category: apps - optional: true -- name: jedi - version: 0.19.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - parso: '>=0.8.3,<0.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - hash: - md5: 81a3be0b2023e1ea8555781f0ad904a2 - sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a - category: apps - optional: true -- name: jinja2 - version: 3.1.3 - manager: conda - platform: linux-64 - dependencies: - markupsafe: '>=2.0' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - hash: - md5: e7d8df6509ba635247ff9aea31134262 - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - category: core - optional: true -- name: jinja2 - version: 3.1.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - markupsafe: '>=2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - hash: - md5: e7d8df6509ba635247ff9aea31134262 - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - category: core - optional: true -- name: jinja2 - version: 3.1.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - markupsafe: '>=2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - hash: - md5: e7d8df6509ba635247ff9aea31134262 - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - category: core - optional: true -- name: joblib - version: 1.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - setuptools: '' - url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: e0ed1bf13ce3a440e022157bf4764465 - sha256: 56eea2c4af35a9c8f9cdca530f6aea0dc8e2551bfcc8b8da37da78221366af10 - category: core - optional: true -- name: joblib - version: 1.4.0 - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: e0ed1bf13ce3a440e022157bf4764465 - sha256: 56eea2c4af35a9c8f9cdca530f6aea0dc8e2551bfcc8b8da37da78221366af10 - category: core - optional: true -- name: joblib - version: 1.4.0 - manager: conda - platform: win-64 - dependencies: - setuptools: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: e0ed1bf13ce3a440e022157bf4764465 - sha256: 56eea2c4af35a9c8f9cdca530f6aea0dc8e2551bfcc8b8da37da78221366af10 - category: core - optional: true -- name: json-c - version: '0.17' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.17-h7ab15ed_0.conda - hash: - md5: 9961b1f100c3b6852bd97c9233d06979 - sha256: 5646496ca07dfa1486d27ed07282967007811dfc63d6394652e87f94166ecae3 - category: core - optional: true -- name: json-c - version: '0.17' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/json-c-0.17-h8e11ae5_0.conda - hash: - md5: 266d2e4ebbf37091c8322937392bb540 - sha256: 2a493095fe1292108ff1799a1b47ababe82d844bfa3abcf2252676c1017a1e04 - category: core - optional: true -- name: jsonschema - version: 4.21.1 - manager: conda - platform: linux-64 - dependencies: - attrs: '>=22.2.0' - importlib_resources: '>=1.4.0' - jsonschema-specifications: '>=2023.03.6' - pkgutil-resolve-name: '>=1.3.10' - python: '>=3.8' - referencing: '>=0.28.4' - rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda - hash: - md5: 8a3a3d01629da20befa340919e3dd2c4 - sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129 - category: apps - optional: true -- name: jsonschema - version: 4.21.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - jsonschema-specifications: '>=2023.03.6' - referencing: '>=0.28.4' - rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda - hash: - md5: 8a3a3d01629da20befa340919e3dd2c4 - sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129 - category: apps - optional: true -- name: jsonschema - version: 4.21.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - jsonschema-specifications: '>=2023.03.6' - referencing: '>=0.28.4' - rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda - hash: - md5: 8a3a3d01629da20befa340919e3dd2c4 - sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129 - category: apps - optional: true -- name: jsonschema-specifications - version: 2023.12.1 - manager: conda - platform: linux-64 - dependencies: - importlib_resources: '>=1.4.0' - python: '>=3.8' - referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda - hash: - md5: a0e4efb5f35786a05af4809a2fb1f855 - sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 - category: apps - optional: true -- name: jsonschema-specifications - version: 2023.12.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - importlib_resources: '>=1.4.0' - referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda - hash: - md5: a0e4efb5f35786a05af4809a2fb1f855 - sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 - category: apps - optional: true -- name: jsonschema-specifications - version: 2023.12.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - importlib_resources: '>=1.4.0' - referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda - hash: - md5: a0e4efb5f35786a05af4809a2fb1f855 - sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 - category: apps - optional: true -- name: jupyter_client - version: 7.3.4 - manager: conda - platform: linux-64 - dependencies: - entrypoints: '' - jupyter_core: '>=4.9.2' - nest-asyncio: '>=1.5.4' - python: '>=3.7' - python-dateutil: '>=2.8.2' - pyzmq: '>=23.0' - tornado: '>=6.0' - traitlets: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.3.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: dad80938cdccc5c274e954dda56b6eb5 - sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b - category: apps - optional: true -- name: jupyter_client - version: 7.3.4 - manager: conda - platform: osx-64 - dependencies: - traitlets: '' - entrypoints: '' - python: '>=3.7' - python-dateutil: '>=2.8.2' - tornado: '>=6.0' - jupyter_core: '>=4.9.2' - pyzmq: '>=23.0' - nest-asyncio: '>=1.5.4' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.3.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: dad80938cdccc5c274e954dda56b6eb5 - sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b - category: apps - optional: true -- name: jupyter_client - version: 7.3.4 - manager: conda - platform: win-64 - dependencies: - traitlets: '' - entrypoints: '' - python: '>=3.7' - python-dateutil: '>=2.8.2' - tornado: '>=6.0' - jupyter_core: '>=4.9.2' - pyzmq: '>=23.0' - nest-asyncio: '>=1.5.4' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.3.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: dad80938cdccc5c274e954dda56b6eb5 - sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b - category: apps - optional: true -- name: jupyter_core - version: 5.7.2 - manager: conda - platform: linux-64 - dependencies: - platformdirs: '>=2.5' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda - hash: - md5: cb92c27600d5716fd526a206aa43342c - sha256: 837039256d39a249b5bec850f87948e1967c47c9e747056df8155d80c4d3b094 - category: apps - optional: true -- name: jupyter_core - version: 5.7.2 - manager: conda - platform: osx-64 - dependencies: - platformdirs: '>=2.5' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/osx-64/jupyter_core-5.7.2-py310h2ec42d9_0.conda - hash: - md5: cc37456f73db17d159de1b07a26e91cc - sha256: ab2f20f7532322b2393220846cad453ee47848491971ec306755e7c1010b4e0a - category: apps - optional: true -- name: jupyter_core - version: 5.7.2 - manager: conda - platform: win-64 - dependencies: - platformdirs: '>=2.5' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - pywin32: '>=300' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/win-64/jupyter_core-5.7.2-py310h5588dad_0.conda - hash: - md5: 6646c59c6c096e0b99c53dc9d3deaada - sha256: 220a6fe571d3e9a5b5f4467d7f2fb22080b96f7143c9b2703528032528338d50 - category: apps - optional: true -- name: jupyter_server - version: 1.24.0 - manager: conda - platform: linux-64 - dependencies: - anyio: '>=3.1.0,<4' - argon2-cffi: '' - jinja2: '' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbconvert-core: '>=6.4.4' - nbformat: '>=5.2.0' - packaging: '' - prometheus_client: '' - python: '>=3.7' - pyzmq: '>=17' - send2trash: '' - terminado: '>=0.8.3' - tornado: '>=6.1.0' - traitlets: '>=5.1.0' - websocket-client: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda - hash: - md5: 7f0d2ec2d4954188ff23503f39823409 - sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da - category: apps - optional: true -- name: jupyter_server - version: 1.24.0 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - jinja2: '' - prometheus_client: '' - websocket-client: '' - argon2-cffi: '' - send2trash: '' - python: '>=3.7' - pyzmq: '>=17' - jupyter_client: '>=6.1.12' - tornado: '>=6.1.0' - terminado: '>=0.8.3' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1.0' - nbconvert-core: '>=6.4.4' - anyio: '>=3.1.0,<4' - nbformat: '>=5.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda - hash: - md5: 7f0d2ec2d4954188ff23503f39823409 - sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da - category: apps - optional: true -- name: jupyter_server - version: 1.24.0 - manager: conda - platform: win-64 - dependencies: - packaging: '' - jinja2: '' - prometheus_client: '' - websocket-client: '' - argon2-cffi: '' - send2trash: '' - python: '>=3.7' - pyzmq: '>=17' - jupyter_client: '>=6.1.12' - tornado: '>=6.1.0' - terminado: '>=0.8.3' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1.0' - nbconvert-core: '>=6.4.4' - anyio: '>=3.1.0,<4' - nbformat: '>=5.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda - hash: - md5: 7f0d2ec2d4954188ff23503f39823409 - sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da - category: apps - optional: true -- name: jupyterlab_pygments - version: 0.3.0 - manager: conda - platform: linux-64 - dependencies: - pygments: '>=2.4.1,<3' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda - hash: - md5: afcd1b53bcac8844540358e33f33d28f - sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 - category: apps - optional: true -- name: jupyterlab_pygments - version: 0.3.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - pygments: '>=2.4.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda - hash: - md5: afcd1b53bcac8844540358e33f33d28f - sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 - category: apps - optional: true -- name: jupyterlab_pygments - version: 0.3.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - pygments: '>=2.4.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda - hash: - md5: afcd1b53bcac8844540358e33f33d28f - sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 - category: apps - optional: true -- name: jupyterlab_widgets - version: 1.1.7 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.7-pyhd8ed1ab_0.conda - hash: - md5: 608e312cd17cb7119033fae7d7420572 - sha256: 5da1c9033838f15981b9000bf32ad5877b105e4ae6476982cad836fec42e14db - category: apps - optional: true -- name: jupyterlab_widgets - version: 1.1.7 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.7-pyhd8ed1ab_0.conda - hash: - md5: 608e312cd17cb7119033fae7d7420572 - sha256: 5da1c9033838f15981b9000bf32ad5877b105e4ae6476982cad836fec42e14db - category: apps - optional: true -- name: jupyterlab_widgets - version: 1.1.7 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.7-pyhd8ed1ab_0.conda - hash: - md5: 608e312cd17cb7119033fae7d7420572 - sha256: 5da1c9033838f15981b9000bf32ad5877b105e4ae6476982cad836fec42e14db - category: apps - optional: true -- name: kealib - version: 1.5.3 - manager: conda - platform: linux-64 - dependencies: - hdf5: '>=1.14.3,<1.14.4.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-h2f55d51_0.conda - hash: - md5: f7e7077802927590efc8bf7328208f12 - sha256: ee0934ff426d3cab015055808bed33eb9d20f635ec14bc421c596f4b70927102 - category: core - optional: true -- name: kealib - version: 1.5.3 - manager: conda - platform: osx-64 - dependencies: - hdf5: '>=1.14.3,<1.14.4.0a0' - libcxx: '>=15' - url: https://conda.anaconda.org/conda-forge/osx-64/kealib-1.5.3-h5f07ac3_0.conda - hash: - md5: 7a0924f6214e4c17b6062b21d1240253 - sha256: 54a847faf2d2aea83c149d98634646edb8e7f346faefc6af1aa52106200b43aa - category: core - optional: true -- name: kealib - version: 1.5.3 - manager: conda - platform: win-64 - dependencies: - hdf5: '>=1.14.3,<1.14.4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/kealib-1.5.3-hd248416_0.conda - hash: - md5: b65b0092dade29117f6e87c8d11a2394 - sha256: 833a9f8acc1982a174267f8cd12d161cbafc42fdaeb7beb075975977b5ee56f5 - category: core - optional: true -- name: keyutils - version: 1.6.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=10.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - hash: - md5: 30186d27e2c9fa62b45fb1476b7200e3 - sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb - category: main - optional: false -- name: kiwisolver - version: 1.4.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_1.conda - hash: - md5: b8d67603d43b23ce7e988a5d81a7ab79 - sha256: bb51906639bced3de1d4d7740ac284cdaa89e2f22e0b1ec796378b090b0648ba - category: core - optional: true -- name: kiwisolver - version: 1.4.5 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.5-py310h88cfcbd_1.conda - hash: - md5: cb1db728c5e65918e30b65f9652a3458 - sha256: ccd88bcb67f0cc8b68ed320039d58701da125de0579680d7d2ffe7857b872613 - category: core - optional: true -- name: kiwisolver - version: 1.4.5 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.5-py310h232114e_1.conda - hash: - md5: a340ed8a9c513e2782cb7feb3cfe665d - sha256: 8969469887a0b72f732ec9250fd25982499270bda473a5db4c04ee252db96d89 - category: core - optional: true -- name: krb5 - version: 1.21.2 - manager: conda - platform: linux-64 - dependencies: - keyutils: '>=1.6.1,<2.0a0' - libedit: '>=3.1.20191231,<4.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda - hash: - md5: cd95826dbd331ed1be26bdf401432844 - sha256: 259bfaae731989b252b7d2228c1330ef91b641c9d68ff87dae02cbae682cb3e4 - category: main - optional: false -- name: krb5 - version: 1.21.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - libedit: '>=3.1.20191231,<4.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.2-hb884880_0.conda - hash: - md5: 80505a68783f01dc8d7308c075261b2f - sha256: 081ae2008a21edf57c048f331a17c65d1ccb52d6ca2f87ee031a73eff4dc0fc6 - category: main - optional: false -- name: krb5 - version: 1.21.2 - manager: conda - platform: win-64 - dependencies: - openssl: '>=3.1.2,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.2-heb0366b_0.conda - hash: - md5: 6e8b0f22b4eef3b3cb3849bb4c3d47f9 - sha256: 6002adff9e3dcfc9732b861730cb9e33d45fd76b2035b2cdb4e6daacb8262c0b - category: main - optional: false -- name: lame - version: '3.100' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - hash: - md5: a8832b479f93521a9e7b5b743803be51 - sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab - category: apps - optional: true -- name: lcms2 - version: '2.16' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - hash: - md5: 51bb7010fc86f70eee639b4bb7a894f5 - sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 - category: main - optional: false -- name: lcms2 - version: '2.16' - manager: conda - platform: osx-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda - hash: - md5: 1442db8f03517834843666c422238c9b - sha256: 222ebc0a55544b9922f61e75015d02861e65b48f12113af41d48ba0814e14e4e - category: main - optional: false -- name: lcms2 - version: '2.16' - manager: conda - platform: win-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - hash: - md5: d3592435917b62a8becff3a60db674f6 - sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 - category: main - optional: false -- name: ld_impl_linux-64 - version: '2.40' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda - hash: - md5: 7aca3059a1729aa76c597603f10b0dd3 - sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd - category: main - optional: false -- name: lerc - version: 4.0.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - hash: - md5: 76bbff344f0134279f225174e9064c8f - sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 - category: main - optional: false -- name: lerc - version: 4.0.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=13.0.1' - url: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - hash: - md5: f9d6a4c82889d5ecedec1d90eb673c55 - sha256: e41790fc0f4089726369b3c7f813117bbc14b533e0ed8b94cf75aba252e82497 - category: main - optional: false -- name: lerc - version: 4.0.0 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30037' - url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - hash: - md5: 1900cb3cab5055833cfddb0ba233b074 - sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 - category: main - optional: false -- name: libabseil - version: '20230802.1' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230802.1-cxx17_h59595ed_0.conda - hash: - md5: 2785ddf4cb0e7e743477991d64353947 - sha256: 8729021a93e67bb93b4e73ef0a132499db516accfea11561b667635bcd0507e7 - category: core - optional: true -- name: libabseil - version: '20230802.1' - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230802.1-cxx17_h048a20a_0.conda - hash: - md5: 6554f5fb47c025273268bcdb7bf3cd48 - sha256: 05431a6adb376a865e10d4ae673399d7890083c06f61cf18edb7c6629e75f39e - category: core - optional: true -- name: libabseil - version: '20230802.1' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230802.1-cxx17_h63175ca_0.conda - hash: - md5: 02674c18394394ee4f76cdbd1012f526 - sha256: 8a016d49fad3d4216ce5ae4a60869b5384d31b2009e1ed9f445b6551ce7ef9e8 - category: core - optional: true -- name: libaec - version: 1.1.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - hash: - md5: 5e97e271911b8b2001a8b71860c32faa - sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 - category: main - optional: false -- name: libaec - version: 1.1.3 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda - hash: - md5: 66d3c1f6dd4636216b4fca7a748d50eb - sha256: dae5921339c5d89f4bf58a95fd4e9c76270dbf7f6a94f3c5081b574905fcccf8 - category: main - optional: false -- name: libaec - version: 1.1.3 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - hash: - md5: 8723000f6ffdbdaef16025f0a01b64c5 - sha256: f5c293d3cfc00f71dfdb64bd65ab53625565f8778fc2d5790575bef238976ebf - category: main - optional: false -- name: libasprintf - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.22.5-h661eb56_2.conda - hash: - md5: dd197c968bf9760bba0031888d431ede - sha256: 31d58af7eb54e2938123200239277f14893c5fa4b5d0280c8cf55ae10000638b - category: core - optional: true -- name: libasprintf - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libasprintf-0.22.5-h5ff76d1_2.conda - hash: - md5: ad803793d7168331f1395685cbdae212 - sha256: 4babb29b8d39ae8b341c094c134a1917c595846e5f974c9d0cb64d3f734b46b1 - category: core - optional: true -- name: libasprintf - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/libasprintf-0.22.5-h5728263_2.conda - hash: - md5: 75a6982b9ff0a8db0f53303527b07af8 - sha256: 5722a4a260355c9233680a3424a977433f25826ca0a1c05af403d62b805681bc - category: core - optional: true -- name: libasprintf-devel - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libasprintf: 0.22.5 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.22.5-h661eb56_2.conda - hash: - md5: 02e41ab5834dcdcc8590cf29d9526f50 - sha256: 99d26d272a8203d30b3efbe734a99c823499884d7759b4291674438137c4b5ca - category: core - optional: true -- name: libasprintf-devel - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libasprintf: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libasprintf-devel-0.22.5-h5ff76d1_2.conda - hash: - md5: c7182eda3bc727384e2f98f4d680fa7d - sha256: 39fa757378b49993142013c1f69dd56248cc3703c2f04c5bcf4cc4acdc644ae3 - category: core - optional: true -- name: libasprintf-devel - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libasprintf: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libasprintf-devel-0.22.5-h5728263_2.conda - hash: - md5: 8377da2cc31200d7181d2e48d60e4c7b - sha256: d5c711d9da4e35d29f4f2191664075c64cbf8cd481a35bf7ef3a527018eb0184 - category: core - optional: true -- name: libblas - version: 3.9.0 - manager: conda - platform: linux-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_mkl.tar.bz2 - hash: - md5: 85f61af03fd291dae33150ffe89dc09a - sha256: 24e656f13b402b6fceb88df386768445ab9beb657d451a8e5a88d4b3380cf7a4 - category: main - optional: false -- name: libblas - version: 3.9.0 - manager: conda - platform: osx-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-18_osx64_mkl.conda - hash: - md5: c064a3e6fc5f3659d483292a84447f49 - sha256: 74c0b38806dbfa65d3982d9d1cda6152be690203d323306319d3d8dc39d0918e - category: main - optional: false -- name: libblas - version: 3.9.0 - manager: conda - platform: win-64 - dependencies: - mkl: 2022.1.0 - url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-18_win64_mkl.conda - hash: - md5: b241da5b7a888f72bb3c3e82747334f4 - sha256: 5aef8d69197108f3c320a5d4ad4d19ab9c809cdbbf731c7ab988c227de42d6b5 - category: main - optional: false -- name: libboost-headers - version: 1.84.0 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.84.0-ha770c72_2.conda - hash: - md5: 85d30a3fcc0f1cfc252776208af546a1 - sha256: 5a7843db33422d043256af27f288836f51530b058653bdb074704eb72282f601 - category: core - optional: true -- name: libboost-headers - version: 1.84.0 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libboost-headers-1.84.0-h694c41f_2.conda - hash: - md5: 37678c6938655e8862e121b48101365a - sha256: e51f3b877ab4a7a68bf1e1f95e9b007d716e85547078bfd5f6f7f114545dc26e - category: core - optional: true -- name: libboost-headers - version: 1.84.0 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/libboost-headers-1.84.0-h57928b3_2.conda - hash: - md5: 01d545c5fbafd05719fa31148cbd1989 - sha256: 9acabbc9bf68f89ff60aa06e622b1bdf20edc7b3f53bfc782135f0ea9882291f - category: core - optional: true -- name: libbrotlicommon - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda - hash: - md5: aec6c91c7371c26392a06708a73c70e5 - sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78 - category: core - optional: true -- name: libbrotlicommon - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h0dc2134_1.conda - hash: - md5: 9e6c31441c9aa24e41ace40d6151aab6 - sha256: f57c57c442ef371982619f82af8735f93a4f50293022cfd1ffaf2ff89c2e0b2a - category: core - optional: true -- name: libbrotlicommon - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda - hash: - md5: f77f319fb82980166569e1280d5b2864 - sha256: f75fed29b0cc503d1b149a4945eaa32df56e19da5e2933de29e8f03947203709 - category: core - optional: true -- name: libbrotlidec - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libbrotlicommon: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda - hash: - md5: f07002e225d7a60a694d42a7bf5ff53f - sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926 - category: core - optional: true -- name: libbrotlidec - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libbrotlicommon: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h0dc2134_1.conda - hash: - md5: 9ee0bab91b2ca579e10353738be36063 - sha256: b11939c4c93c29448660ab5f63273216969d1f2f315dd9be60f3c43c4e61a50c - category: core - optional: true -- name: libbrotlidec - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - libbrotlicommon: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda - hash: - md5: 19ce3e1dacc7912b3d6ff40690ba9ae0 - sha256: 1b352ee05931ea24c11cd4a994d673890fd1cc690c21e023e736bdaac2632e93 - category: core - optional: true -- name: libbrotlienc - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libbrotlicommon: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda - hash: - md5: 5fc11c6020d421960607d821310fcd4d - sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071 - category: core - optional: true -- name: libbrotlienc - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libbrotlicommon: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h0dc2134_1.conda - hash: - md5: 8a421fe09c6187f0eb5e2338a8a8be6d - sha256: bc964c23e1a60ca1afe7bac38a9c1f2af3db4a8072c9f2eac4e4de537a844ac7 - category: core - optional: true -- name: libbrotlienc - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - libbrotlicommon: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda - hash: - md5: 71e890a0b361fd58743a13f77e1506b7 - sha256: eae6b76154e594c6d211160c6d1aeed848672618152a562e0eabdfa641d34aca - category: core - optional: true -- name: libcap - version: '2.69' - manager: conda - platform: linux-64 - dependencies: - attr: '>=2.5.1,<2.6.0a0' - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda - hash: - md5: 25cb5999faa414e5ccb2c1388f62d3d5 - sha256: 942f9564b4228609f017b6617425d29a74c43b8a030e12239fa4458e5cb6323c - category: apps - optional: true -- name: libcblas - version: 3.9.0 - manager: conda - platform: linux-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-16_linux64_mkl.tar.bz2 - hash: - md5: 361bf757b95488de76c4f123805742d3 - sha256: 892ba10508f22310ccfe748df1fd3b6c7f20e7b6f6b79e69ed337863551c1bd8 - category: main - optional: false -- name: libcblas - version: 3.9.0 - manager: conda - platform: osx-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-18_osx64_mkl.conda - hash: - md5: 047e2889832db702a0ec03eef2d45821 - sha256: 05c5b6d220309054d5ebc8bcf3e27ed0577dae27b1eaccd075c09bcf0fdced8d - category: main - optional: false -- name: libcblas - version: 3.9.0 - manager: conda - platform: win-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-18_win64_mkl.conda - hash: - md5: fb0b514194c14342a97dfe31a41d60fc - sha256: d5f60ed6508b3889a77caf5ff2b66203714e45ec4eea6e5cdb12fe6e8ef2bbdb - category: main - optional: false -- name: libclang - version: 15.0.7 - manager: conda - platform: linux-64 - dependencies: - libclang13: 15.0.7 - libgcc-ng: '>=12' - libllvm15: '>=15.0.7,<15.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h127d8a8_5.conda - hash: - md5: 09b94dd3a7e304df5b83176239347920 - sha256: 606b79c8a4a926334191d79f4a1447aac1d82c43344e3a603cbba31ace859b8f - category: apps - optional: true -- name: libclang - version: 15.0.7 - manager: conda - platform: osx-64 - dependencies: - libclang13: 15.0.7 - libcxx: '>=16.0.6' - libllvm15: '>=15.0.7,<15.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libclang-15.0.7-default_h7151d67_5.conda - hash: - md5: 2e7eb31c1431630f111be17f7f0cb948 - sha256: ea3c840b7e931228007f1dc21c1cfe8e3e833990da9e92fff9c23c98d035b89a - category: apps - optional: true -- name: libclang - version: 15.0.7 - manager: conda - platform: win-64 - dependencies: - libclang13: 15.0.7 - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libclang-15.0.7-default_h3a3e6c3_5.conda - hash: - md5: 26e1a5a4ff7f8e3f5fb89be829818a75 - sha256: 562dea76c17c30ed6d78734a9e40008f45cdab15611439d7d4e8250e0040f3ef - category: apps - optional: true -- name: libclang13 - version: 15.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libllvm15: '>=15.0.7,<15.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h5d6823c_5.conda - hash: - md5: 2d694a9ffdcc30e89dea34a8dcdab6ae - sha256: 91ecfcf545a5d4588e9fad5db2b5b04eeef18cae1c03b790829ef8b978f06ccd - category: apps - optional: true -- name: libclang13 - version: 15.0.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16.0.6' - libllvm15: '>=15.0.7,<15.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libclang13-15.0.7-default_h0edc4dd_5.conda - hash: - md5: 3bfcf640ab0956a9db86335e917100e3 - sha256: fec1ff1ae4a49f96eefeae9dd14ea8d9e591fc29995861ad49e92104ae6bb8e6 - category: apps - optional: true -- name: libclang13 - version: 15.0.7 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libclang13-15.0.7-default_hf64faad_5.conda - hash: - md5: 2f96c58f89abccb04bbc8cd57961111f - sha256: b952b85a6124442be3fe8af23d56f123548f7b28067f60615f7233197469a02d - category: apps - optional: true -- name: libcrc32c - version: 1.1.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - libstdcxx-ng: '>=9.4.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - hash: - md5: c965a5aa0d5c1c37ffc62dff36e28400 - sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 - category: core - optional: true -- name: libcrc32c - version: 1.1.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=11.1.0' - url: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 - hash: - md5: 23d6d5a69918a438355d7cbc4c3d54c9 - sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff - category: core - optional: true -- name: libcrc32c - version: 1.1.2 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - hash: - md5: cd4cc2d0c610c8cb5419ccc979f2d6ce - sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e - category: core - optional: true -- name: libcups - version: 2.3.3 - manager: conda - platform: linux-64 - dependencies: - krb5: '>=1.21.1,<1.22.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda - hash: - md5: d4529f4dff3057982a7617c7ac58fde3 - sha256: bc67b9b21078c99c6bd8595fe7e1ed6da1f721007726e717f0449de7032798c4 - category: apps - optional: true -- name: libcurl - version: 8.7.1 - manager: conda - platform: linux-64 - dependencies: - 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' - url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.7.1-hca28451_0.conda - hash: - md5: 755c7f876815003337d2c61ff5d047e5 - sha256: 82a75e9a5d9ee5b2f487d850ec5d4edc18a56eb9527608a95a916c40baae3843 - category: main - optional: false -- name: libcurl - version: 8.7.1 - manager: conda - platform: osx-64 - dependencies: - 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' - url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.7.1-h726d00d_0.conda - hash: - md5: fa58e5eaa12006bc3289a71357bef167 - sha256: 06cb1bd3bbaf905213777d6ade190ac4c7fb7a20dfe0cf901c977dbbc6cec265 - category: main - optional: false -- name: libcurl - version: 8.7.1 - manager: conda - platform: win-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libssh2: '>=1.11.0,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.7.1-hd5e4a3a_0.conda - hash: - md5: 3396aff340d0903e8814c2852d631e4e - sha256: 8dd272362e2aeb1d4f49333ff57e07eb4da2bbabce20110a2416df9152ba03e0 - category: main - optional: false -- name: libcxx - version: 16.0.6 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-16.0.6-hd57cbcb_0.conda - hash: - md5: 7d6972792161077908b62971802f289a - sha256: 9063271847cf05f3a6cc6cae3e7f0ced032ab5f3a3c9d3f943f876f39c5c2549 - category: main - optional: false -- name: libdeflate - version: '1.19' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda - hash: - md5: 1635570038840ee3f9c71d22aa5b8b6d - sha256: 985ad27aa0ba7aad82afa88a8ede6a1aacb0aaca950d710f15d85360451e72fd - category: main - optional: false -- name: libdeflate - version: '1.19' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.19-ha4e1b8e_0.conda - hash: - md5: 6a45f543c2beb40023df5ee7e3cedfbd - sha256: d0f789120fedd0881b129aba9993ec5dcf0ecca67a71ea20c74394e41adcb503 - category: main - optional: false -- name: libdeflate - version: '1.19' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.19-hcfcfb64_0.conda - hash: - md5: 002b1b723b44dbd286b9e3708762433c - sha256: e2886a84eaa0fbeca1d1d810270f234431d190402b4a79acf756ca2d16000354 - category: main - optional: false -- name: libedit - version: 3.1.20191231 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=7.5.0' - ncurses: '>=6.2,<7.0.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 - hash: - md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 - sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf - category: main - optional: false -- name: libedit - version: 3.1.20191231 - manager: conda - platform: osx-64 - dependencies: - ncurses: '>=6.2,<7.0.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 - hash: - md5: 6016a8a1d0e63cac3de2c352cd40208b - sha256: dbd3c3f2eca1d21c52e4c03b21930bbce414c4592f8ce805801575b9e9256095 - category: main - optional: false -- name: libev - version: '4.33' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - hash: - md5: 172bf1cd1ff8629f2b1179945ed45055 - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - category: main - optional: false -- name: libev - version: '4.33' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - hash: - md5: 899db79329439820b7e8f8de41bca902 - sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 - category: main - optional: false -- name: libevent - version: 2.1.12 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - hash: - md5: a1cfcc585f0c42bf8d5546bb1dfb668d - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - category: apps - optional: true -- name: libexpat - version: 2.6.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda - hash: - md5: e7ba12deb7020dd080c6c70e7b6f6a3d - sha256: 331bb7c7c05025343ebd79f86ae612b9e1e74d2687b8f3179faec234f986ce19 - category: core - optional: true -- name: libexpat - version: 2.6.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.2-h73e2aa4_0.conda - hash: - md5: 3d1d51c8f716d97c864d12f7af329526 - sha256: a188a77b275d61159a32ab547f7d17892226e7dac4518d2c6ac3ac8fc8dfde92 - category: core - optional: true -- name: libexpat - version: 2.6.2 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda - hash: - md5: bc592d03f62779511d392c175dcece64 - sha256: 79f612f75108f3e16bbdc127d4885bb74729cf66a8702fca0373dad89d40c4b7 - category: core - optional: true -- name: libffi - version: 3.4.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - hash: - md5: d645c6d2ac96843a2bfaccd2d62b3ac3 - sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e - category: main - optional: false -- name: libffi - version: 3.4.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - hash: - md5: ccb34fb14960ad8b125962d3d79b31a9 - sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f - category: main - optional: false -- name: libffi - version: 3.4.2 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - hash: - md5: 2c96d1b6915b408893f9472569dee135 - sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 - category: main - optional: false -- name: libflac - version: 1.4.3 - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libgcc-ng: '>=12' - libogg: '>=1.3.4,<1.4.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda - hash: - md5: ee48bf17cc83a00f59ca1494d5646869 - sha256: 65908b75fa7003167b8a8f0001e11e58ed5b1ef5e98b96ab2ba66d7c1b822c7d - category: apps - optional: true -- name: libgcc-ng - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: - _libgcc_mutex: '0.1' - _openmp_mutex: '>=4.5' - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda - hash: - md5: d4ff227c46917d3b4565302a2bbb276b - sha256: d32f78bfaac282cfe5205f46d558704ad737b8dbf71f9227788a5ca80facaba4 - category: main - optional: false -- name: libgcrypt - version: 1.10.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libgpg-error: '>=1.47,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda - hash: - md5: 32d16ad533c59bb0a3c5ffaf16110829 - sha256: d1bd47faa29fec7288c7b212198432b07f890d3d6f646078da93b059c2e9daff - category: apps - optional: true -- name: libgdal - version: 3.6.4 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - blosc: '>=1.21.5,<2.0a0' - cfitsio: '>=4.2.0,<4.2.1.0a0' - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - geotiff: '>=1.7.1,<1.8.0a0' - giflib: '>=5.2.1,<5.3.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.2,<1.14.4.0a0' - json-c: '>=0.17,<0.18.0a0' - kealib: '>=1.5.2,<1.6.0a0' - lerc: '>=4.0.0,<5.0a0' - libcurl: '>=8.4.0,<9.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libkml: '>=1.3.0,<1.4.0a0' - libnetcdf: '>=4.9.2,<4.9.3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libspatialite: '>=5.0.1,<5.1.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libuuid: '>=2.38.1,<3.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openjpeg: '>=2.5.0,<3.0a0' - openssl: '>=3.1.3,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' - poppler: '>=23.10.0,<23.11.0a0' - postgresql: '' - proj: '>=9.3.0,<9.3.1.0a0' - tiledb: '>=2.16,<2.17.0a0' - xerces-c: '>=3.2.4,<3.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.6.4-hb454697_22.conda - hash: - md5: 6ef386473c9e0d731ea00d08c9787299 - sha256: fb708c2d66ebcd7d0dd4a0dccf92d21c1c1c4cb7f1bfeca58195f2699ec5c73b - category: core - optional: true -- name: libgdal - version: 3.6.4 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - blosc: '>=1.21.5,<2.0a0' - cfitsio: '>=4.2.0,<4.2.1.0a0' - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - geotiff: '>=1.7.1,<1.8.0a0' - giflib: '>=5.2.1,<5.3.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.2,<1.14.4.0a0' - json-c: '>=0.17,<0.18.0a0' - kealib: '>=1.5.2,<1.6.0a0' - lerc: '>=4.0.0,<5.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libdeflate: '>=1.19,<1.20.0a0' - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libkml: '>=1.3.0,<1.4.0a0' - libnetcdf: '>=4.9.2,<4.9.3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libspatialite: '>=5.0.1,<5.1.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openjpeg: '>=2.5.0,<3.0a0' - openssl: '>=3.1.3,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' - poppler: '>=23.10.0,<23.11.0a0' - postgresql: '' - proj: '>=9.3.0,<9.3.1.0a0' - tiledb: '>=2.16,<2.17.0a0' - xerces-c: '>=3.2.4,<3.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libgdal-3.6.4-hbff29b3_22.conda - hash: - md5: ce28d41550df4d9e902a2262ea9e47c7 - sha256: f9f3b91237614dd83135a3e7bb2950c4b8907c1c13ca314a0e5c25b9c2507c96 - category: core - optional: true -- name: libgdal - version: 3.6.4 - manager: conda - platform: win-64 - dependencies: - blosc: '>=1.21.5,<2.0a0' - cfitsio: '>=4.2.0,<4.2.1.0a0' - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - geotiff: '>=1.7.1,<1.8.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.2,<1.14.4.0a0' - kealib: '>=1.5.2,<1.6.0a0' - lerc: '>=4.0.0,<5.0a0' - libcurl: '>=8.4.0,<9.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libkml: '>=1.3.0,<1.4.0a0' - libnetcdf: '>=4.9.2,<4.9.3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libspatialite: '>=5.0.1,<5.1.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openjpeg: '>=2.5.0,<3.0a0' - openssl: '>=3.1.3,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' - poppler: '>=23.10.0,<23.11.0a0' - postgresql: '' - proj: '>=9.3.0,<9.3.1.0a0' - tiledb: '>=2.16,<2.17.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - xerces-c: '>=3.2.4,<3.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libgdal-3.6.4-h8c6448d_22.conda - hash: - md5: 5cc58509bd5013f56f046fee4e0d4ee6 - sha256: bbd3a2f6b7037cb69f80b96f2e3eb06ebbe15d452ebb7cc28fb5a41fcbcd2ab2 - category: core - optional: true -- name: libgettextpo - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.22.5-h59595ed_2.conda - hash: - md5: 172bcc51059416e7ce99e7b528cede83 - sha256: e2f784564a2bdc6f753f00f63cc77c97601eb03bc89dccc4413336ec6d95490b - category: core - optional: true -- name: libgettextpo - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libgettextpo-0.22.5-h5ff76d1_2.conda - hash: - md5: 54cc9d12c29c2f0516f2ef4987de53ae - sha256: 139d1861e21c41b950ebf9e395db2492839337a3b481ad2901a4a6800c555e37 - category: core - optional: true -- name: libgettextpo - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libgettextpo-0.22.5-h5728263_2.conda - hash: - md5: f4c826b19bf1ccee2a63a2c685039728 - sha256: 445ecfc4bf5b474c2ac79f716dcb8459a08a532ab13a785744665f086ef94c95 - category: core - optional: true -- name: libgettextpo-devel - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libgettextpo: 0.22.5 - url: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-devel-0.22.5-h59595ed_2.conda - hash: - md5: b63d9b6da3653179a278077f0de20014 - sha256: 695eb2439ad4a89e4205dd675cc52fba5cef6b5d41b83f07cdbf4770a336cc15 - category: core - optional: true -- name: libgettextpo-devel - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libgettextpo: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libgettextpo-devel-0.22.5-h5ff76d1_2.conda - hash: - md5: 1e0384c52cd8b54812912e7234e66056 - sha256: 57940f6a872ffcf5a3406e96bdbd9d25854943e4dd84acee56178ffb728a9671 - category: core - optional: true -- name: libgettextpo-devel - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libgettextpo: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libgettextpo-devel-0.22.5-h5728263_2.conda - hash: - md5: 6f42ec61abc6d52a4079800a640319c5 - sha256: bcee730b2be23ba9aa5de3471b78c4644d3b17d5a71e7fdc59bb40e252edb2f7 - category: core - optional: true -- name: libgfortran - version: 5.0.0 - manager: conda - platform: osx-64 - dependencies: - libgfortran5: 13.2.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda - hash: - md5: 0b6e23a012ee7a9a5f6b244f5a92c1d5 - sha256: 4874422e567b68334705c135c17e5acdca1404de8255673ce30ad3510e00be0d - category: main - optional: false -- name: libgfortran-ng - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: - libgfortran5: 13.2.0 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda - hash: - md5: e73e9cfd1191783392131e6238bdb3e9 - sha256: 238c16c84124d58307376715839aa152bd4a1bf5a043052938ad6c3137d30245 - category: main - optional: false -- name: libgfortran5 - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=13.2.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda - hash: - md5: 7a6bd7a12a4bd359e2afe6c0fa1acace - sha256: ba8d94e8493222ce155bb264d9de4200e41498a458e866fedf444de809bde8b6 - category: main - optional: false -- name: libgfortran5 - version: 13.2.0 - manager: conda - platform: osx-64 - dependencies: - llvm-openmp: '>=8.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda - hash: - md5: e4fb4d23ec2870ff3c40d10afe305aec - sha256: da3db4b947e30aec7596a3ef92200d17e774cccbbf7efc47802529a4ca5ca31b - category: main - optional: false -- name: libglib - version: 2.78.1 - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libffi: '>=3.4,<4.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-hebfc3b9_0.conda - hash: - md5: ddd09e8904fde46b85f41896621803e6 - sha256: 44c5f58593b074886436db7d13fdfcba2fe3731867ea52237f049b8400341a2b - category: core - optional: true -- name: libglib - version: 2.78.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - libcxx: '>=16.0.6' - libffi: '>=3.4,<4.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.78.1-h6d9ecee_0.conda - hash: - md5: 0282868f1debc145b732276b2fe40397 - sha256: b16bc30db9688d17b5d1cd9e93d0640d02a862145b072a63af6e45e91da6795c - category: core - optional: true -- name: libglib - version: 2.78.1 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libffi: '>=3.4,<4.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libglib-2.78.1-he8f3873_0.conda - hash: - md5: 7022abdf53daa6566caebbe1c2d328ae - sha256: 5919e8f57640b142872899943ec122341ba1e19492e46ad9b47866e013224c10 - category: core - optional: true -- name: libgoogle-cloud - version: 2.12.0 - manager: conda - platform: linux-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgcc-ng: '>=12' - libgrpc: '>=1.60.0,<1.61.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libstdcxx-ng: '>=12' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hef10d8f_5.conda - hash: - md5: 055e2266d27f0e2290cf0a6ad668a225 - sha256: 3c80f8da632c01b5beb50bdc4c7c488501793cd7c138427f61e93f98719e8342 - category: core - optional: true -- name: libgoogle-cloud - version: 2.12.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - libabseil: '>=20230802.1,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=15' - libgrpc: '>=1.60.0,<1.61.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-he77a663_5.conda - hash: - md5: dac48d8fadf9e28c7010f49b56804862 - sha256: 4cae7eefaeba18daf87f046c1e26026f741d1c3f0f0740bf082e3dbd8454ac67 - category: core - optional: true -- name: libgoogle-cloud - version: 2.12.0 - manager: conda - platform: win-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgrpc: '>=1.60.0,<1.61.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - openssl: '>=3.2.0,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hc7cbac0_5.conda - hash: - md5: 1f219361b6f83f8e7ab4d2c67ff06ce4 - sha256: 03f360345841ecb6cdc6a3a3a75a04e29d2f53e5fc180822d9ebef5d131a9007 - category: core - optional: true -- name: libgpg-error - version: '1.48' - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda - hash: - md5: 4d18d86916705d352d5f4adfb7f0edd3 - sha256: c448c6d86d27e10b9e844172000540e9cbfe9c28f968db87f949ba05add9bd50 - category: apps - optional: true -- name: libgrpc - version: 1.60.1 - manager: conda - platform: linux-64 - dependencies: - c-ares: '>=1.26.0,<2.0a0' - libabseil: '>=20230802.1,<20230803.0a0' - libgcc-ng: '>=12' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libre2-11: '>=2023.6.2,<2024.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - re2: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.60.1-h74775cd_0.conda - hash: - md5: 5b7702c8961d99c949fb4f300a19c747 - sha256: 66d776eda66e1d786160e03b4572c8dc9c8377a7f0abfca9a90643b64f1d150e - category: core - optional: true -- name: libgrpc - version: 1.60.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - c-ares: '>=1.26.0,<2.0a0' - libabseil: '>=20230802.1,<20230803.0a0' - libcxx: '>=16' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libre2-11: '>=2023.6.2,<2024.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - re2: '' - url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.60.1-h038e8f1_0.conda - hash: - md5: 8eb56fb9779657380adcf4b68181bcf0 - sha256: 4594e993e1ab0fafbee81cfe4ff6b3aea5684035a3244a9edac8e73a1f5da508 - category: core - optional: true -- name: libgrpc - version: 1.60.1 - manager: conda - platform: win-64 - dependencies: - c-ares: '>=1.26.0,<2.0a0' - libabseil: '>=20230802.1,<20230803.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libre2-11: '>=2023.6.2,<2024.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - re2: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.60.1-h0bf0bfa_0.conda - hash: - md5: 18b66a3a1d8b0d10767e15b0e24fdaf6 - sha256: 7b3dbadddc653ce72da4726a3d75fcd250e8a1e973879883ceae7ebee7d06f01 - category: core - optional: true -- name: libhwloc - version: 2.10.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.6,<3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.10.0-default_h2fb2949_1000.conda - hash: - md5: 7e3726e647a619c6ce5939014dfde86d - sha256: dab61dff22f40367e57b1fe024e789f451b7511e65c32b97ada97ca549dd8dbc - category: main - optional: false -- name: libhwloc - version: 2.10.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libxml2: '>=2.12.6,<3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libhwloc-2.10.0-default_h1321489_1000.conda - hash: - md5: 6f5fe4374d1003e116e2573022178da6 - sha256: 86f0867081792d52f5c4e51e673478ba0a31e38fc7be59e1ba1890decc46e8da - category: main - optional: false -- name: libhwloc - version: 2.10.0 - manager: conda - platform: win-64 - dependencies: - libxml2: '>=2.12.6,<3.0a0' - pthreads-win32: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.10.0-default_h2fffb23_1000.conda - hash: - md5: ee944f0d41d9e2048f9d7492c1623ca3 - sha256: e0d75da50e67a81e3cb37e2ee3b0d6ddc6543ec0f7b3828f884558552a1c4d93 - category: main - optional: false -- name: libiconv - version: '1.17' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - hash: - md5: d66573916ffcf376178462f1b61c941e - sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 - category: main - optional: false -- name: libiconv - version: '1.17' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda - hash: - md5: 6c3628d047e151efba7cf08c5e54d1ca - sha256: 23d4923baeca359423a7347c2ed7aaf48c68603df0cf8b87cc94a10b0d4e9a23 - category: main - optional: false -- name: libiconv - version: '1.17' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - hash: - md5: e1eb10b1cca179f2baa3601e4efc8712 - sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b - category: main - optional: false -- name: libintl - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libintl-0.22.5-h5ff76d1_2.conda - hash: - md5: 3fb6774cb8cdbb93a6013b67bcf9716d - sha256: 280aaef0ed84637ee869012ad9ad9ed208e068dd9b8cf010dafeea717dad7203 - category: core - optional: true -- name: libintl - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_2.conda - hash: - md5: aa622c938af057adc119f8b8eecada01 - sha256: 1b95335af0a3e278b31e16667fa4e51d1c3f5e22d394d982539dfd5d34c5ae19 - category: core - optional: true -- name: libintl-devel - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libintl-devel-0.22.5-h5ff76d1_2.conda - hash: - md5: ea0a07e556d6b238db685cae6e3585d0 - sha256: e3f15a85c6e63633a5ff503d56366bab31cd2e07ea21559889bc7eb19564106d - category: core - optional: true -- name: libintl-devel - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_2.conda - hash: - md5: a2ad82fae23975e4ccbfab2847d31d48 - sha256: 6164fd51abfc7294477c58da77ee1ff9ebc63b9a33404b646407f7fbc3cc7d0d - category: core - optional: true -- name: libjpeg-turbo - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - hash: - md5: ea25936bb4080d843790b586850f82b8 - sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f - category: main - optional: false -- name: libjpeg-turbo - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - hash: - md5: 72507f8e3961bc968af17435060b6dd6 - sha256: d9572fd1024adc374aae7c247d0f29fdf4b122f1e3586fe62acc18067f40d02f - category: main - optional: false -- name: libjpeg-turbo - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - hash: - md5: 3f1b948619c45b1ca714d60c7389092c - sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff - category: main - optional: false -- name: libkml - version: 1.3.0 - manager: conda - platform: linux-64 - dependencies: - libboost-headers: '' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - uriparser: '>=0.9.7,<1.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h01aab08_1018.conda - hash: - md5: 3eb5f16bcc8a02892199aa63555c731f - sha256: f67fc0be886c7eac14dbce858bfcffbc90a55b598e897e513f0979dd2caad750 - category: core - optional: true -- name: libkml - version: 1.3.0 - manager: conda - platform: osx-64 - dependencies: - libboost-headers: '' - libcxx: '>=15.0.7' - libexpat: '>=2.5.0,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - uriparser: '>=0.9.7,<1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libkml-1.3.0-hab3ca0e_1018.conda - hash: - md5: 535b1bb4896b113c14dfa64141370a12 - sha256: f546750a59b85a4b721f69e34e797ceddb93c438ee384db285e3344490d6a9b5 - category: core - optional: true -- name: libkml - version: 1.3.0 - manager: conda - platform: win-64 - dependencies: - libboost-headers: '' - libexpat: '>=2.5.0,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - uriparser: '>=0.9.7,<1.0a0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libkml-1.3.0-haf3e7a6_1018.conda - hash: - md5: 950e8765b20b79ecbd296543f848b4ec - sha256: 74117fe100d9aa3aaab25eb705c44165f8ff6feec2e7c058212a3f5434f85d5f - category: core - optional: true -- name: liblapack - version: 3.9.0 - manager: conda - platform: linux-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-16_linux64_mkl.tar.bz2 - hash: - md5: a2f166748917d6d6e4707841ca1f519e - sha256: d6201f860b2d76ed59027e69c2bbad6d1cb211a215ec9705cc487cde488fa1fa - category: main - optional: false -- name: liblapack - version: 3.9.0 - manager: conda - platform: osx-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-18_osx64_mkl.conda - hash: - md5: 59474f345b7f4dedfef8f4c8e9c3106f - sha256: 0896906380f890751d4e6592dd243a8d1b17b40d6082a5ebb76d80f223d38544 - category: main - optional: false -- name: liblapack - version: 3.9.0 - manager: conda - platform: win-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-18_win64_mkl.conda - hash: - md5: 82117ef735a916ace2df6f2de4df4824 - sha256: f90d96695938659fad4dd47d92dbeebff4a3824979bfb1aac33c8287a83e9d23 - category: main - optional: false -- name: libllvm14 - version: 14.0.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - hash: - md5: 73301c133ded2bf71906aa2104edae8b - sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a - category: core - optional: true -- name: libllvm14 - version: 14.0.6 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libllvm14-14.0.6-hc8e404f_4.conda - hash: - md5: ed06753e2ba7c66ed0ca7f19578fcb68 - sha256: 0df3902a300cfe092425f86144d5e00ef67be3cd1cc89fd63084d45262a772ad - category: core - optional: true -- name: libllvm15 - version: 15.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.1,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda - hash: - md5: 8a35df3cbc0c8b12cc8af9473ae75eef - sha256: e71584c0f910140630580fdd0a013029a52fd31e435192aea2aa8d29005262d1 - category: apps - optional: true -- name: libllvm15 - version: 15.0.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libxml2: '>=2.12.1,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libllvm15-15.0.7-hbedff68_4.conda - hash: - md5: bdc80cf2aa69d6eb8dd101dfd804db07 - sha256: a0598cc166e92c6c63e58a7eaa184fa0b8b467693b965dbe19f1c9ff37e134c3 - category: apps - optional: true -- name: libnetcdf - version: 4.9.2 - manager: conda - platform: linux-64 - dependencies: - blosc: '>=1.21.5,<2.0a0' - bzip2: '>=1.0.8,<2.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.3,<1.14.4.0a0' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.2,<3.0.0a0' - libzip: '>=1.10.1,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - zlib: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h9612171_113.conda - hash: - md5: b2414908e43c442ddc68e6148774a304 - sha256: 0b4d984c7be21531e9254ce742e04101f7f7e77c0bbb7074855c0806c28323b0 - category: core - optional: true -- name: libnetcdf - version: 4.9.2 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - blosc: '>=1.21.5,<2.0a0' - bzip2: '>=1.0.8,<2.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.3,<1.14.4.0a0' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=16.0.6' - libxml2: '>=2.12.2,<3.0.0a0' - libzip: '>=1.10.1,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - zlib: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libnetcdf-4.9.2-nompi_h7760872_113.conda - hash: - md5: bce76ace6497221c2a2a02840aaceac5 - sha256: 3d6a950d82a8dfb9fa51c263e543cfa9c113703add20646ec85401e7b557da49 - category: core - optional: true -- name: libnetcdf - version: 4.9.2 - manager: conda - platform: win-64 - dependencies: - blosc: '>=1.21.5,<2.0a0' - bzip2: '>=1.0.8,<2.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.3,<1.14.4.0a0' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libxml2: '>=2.12.2,<3.0.0a0' - libzip: '>=1.10.1,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libnetcdf-4.9.2-nompi_h07c049d_113.conda - hash: - md5: 2aa431a5a05e3679eea4faad0f47b119 - sha256: 4b06a7aa1fcfb3406e3eab9368089d612ea014402edd5deefb2f02b73cf3673d - category: core - optional: true -- name: libnghttp2 - version: 1.58.0 - manager: conda - platform: linux-64 - dependencies: - c-ares: '>=1.23.0,<2.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' - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda - hash: - md5: 700ac6ea6d53d5510591c4344d5c989a - sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb - category: main - optional: false -- name: libnghttp2 - version: 1.58.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - c-ares: '>=1.23.0,<2.0a0' - libcxx: '>=16.0.6' - libev: '>=4.33,<5.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda - hash: - md5: faecc55c2a8155d9ff1c0ff9a0fef64f - sha256: 412fd768e787e586602f8e9ea52bf089f3460fc630f6987f0cbd89b70e9a4380 - category: main - optional: false -- name: libnsl - version: 2.0.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - hash: - md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 - sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 - category: main - optional: false -- name: libogg - version: 1.3.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2 - hash: - md5: 6e8cc2173440d77708196c5b93771680 - sha256: b88afeb30620b11bed54dac4295aa57252321446ba4e6babd7dce4b9ffde9b25 - category: apps - optional: true -- name: libogg - version: 1.3.4 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libogg-1.3.4-h35c211d_1.tar.bz2 - hash: - md5: a7ab4b53ef18c598ffaa597230bc3ba1 - sha256: e3cec0c66d352d822b7a90db8edbc62f237fca079b6044e5b27f6ca529f7d9d9 - category: apps - optional: true -- name: libogg - version: 1.3.4 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.4-h8ffe710_1.tar.bz2 - hash: - md5: 04286d905a0dcb7f7d4a12bdfe02516d - sha256: ef20f04ad2121a07e074b34bfc211587df18180e680963f5c02c54d1951b9ee6 - category: apps - optional: true -- name: libopus - version: 1.3.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2 - hash: - md5: 15345e56d527b330e1cacbdf58676e8f - sha256: 0e1c2740ebd1c93226dc5387461bbcf8142c518f2092f3ea7551f77755decc8f - category: apps - optional: true -- name: libopus - version: 1.3.1 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libopus-1.3.1-hc929b4f_1.tar.bz2 - hash: - md5: 380b9ea5f6a7a277e6c1ac27d034369b - sha256: c126fc225bece591a8f010e95ca7d010ea2d02df9251830bec24a19bf823fc31 - category: apps - optional: true -- name: libpng - version: 1.6.43 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda - hash: - md5: 009981dd9cfcaa4dbfa25ffaed86bcae - sha256: 502f6ff148ac2777cc55ae4ade01a8fc3543b4ffab25c4e0eaa15f94e90dd997 - category: main - optional: false -- name: libpng - version: 1.6.43 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.43-h92b6c6a_0.conda - hash: - md5: 65dcddb15965c9de2c0365cb14910532 - sha256: 13e646d24b5179e6b0a5ece4451a587d759f55d9a360b7015f8f96eff4524b8f - category: main - optional: false -- name: libpng - version: 1.6.43 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.43-h19919ed_0.conda - hash: - md5: 77e398acc32617a0384553aea29e866b - sha256: 6ad31bf262a114de5bbe0c6ba73b29ed25239d0f46f9d59700310d2ea0b3c142 - category: main - optional: false -- name: libpq - version: '16.2' - manager: conda - platform: linux-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libgcc-ng: '>=12' - openssl: '>=3.2.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.2-h33b98f1_1.conda - hash: - md5: 9e49ec2a61d02623b379dc332eb6889d - sha256: e03a8439b79e013840c44c957d37dbce10316888b2b5dc7dcfcfc0cfe3a3b128 - category: core - optional: true -- name: libpq - version: '16.2' - manager: conda - platform: osx-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - openssl: '>=3.2.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libpq-16.2-ha925e61_1.conda - hash: - md5: a10ef466bbc68a8e74112a8e26028d66 - sha256: bfb252cb14b88a75ba4af930c16dccae265dce0afdf5abde7de1718181aa2cea - category: core - optional: true -- name: libpq - version: '16.2' - manager: conda - platform: win-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - openssl: '>=3.2.1,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libpq-16.2-hdb24f17_1.conda - hash: - md5: a347334764562545270c6acc4b852ccf - sha256: b217f10336ca02bcffd2adf474fecf4bc917d8fbd26ab027b96e0d05257e5537 - category: core - optional: true -- name: libprotobuf - version: 4.25.1 - manager: conda - platform: linux-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.1-hf27288f_2.conda - hash: - md5: 47773f41e24c4d53ba8d0b76f2b69a8a - sha256: 108056c2e95345591cf422dab0e91772e3c63b0193e7d7f419ccf7c49411ba48 - category: core - optional: true -- name: libprotobuf - version: 4.25.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - libabseil: '>=20230802.1,<20230803.0a0' - libcxx: '>=16' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.25.1-hc4f2305_2.conda - hash: - md5: 0114ade0d2b756e0b4aed191dbf8b8fa - sha256: 7bce30effeb6ef10c18bf2cc37a308bcd0fe67f4b7646aa9d04c1494fbb0e860 - category: core - optional: true -- name: libprotobuf - version: 4.25.1 - manager: conda - platform: win-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.1-hb8276f3_2.conda - hash: - md5: 5cfd27b450e65afcc823c83934122455 - sha256: d3d99982c694ddefaaaf67ba76e55ef913ea3ce13b138dffc6f5c486660cbf13 - category: core - optional: true -- name: libre2-11 - version: 2023.09.01 - manager: conda - platform: linux-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.09.01-h7a70373_1.conda - hash: - md5: e61d774293f3ccfb82561a627e846de4 - sha256: 63ebe0a3244b5f1c61337b5b387a2bacd1ca88cd894229a8cd538ef9a4b51d1a - category: core - optional: true -- name: libre2-11 - version: 2023.09.01 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - libabseil: '>=20230802.1,<20230803.0a0' - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2023.09.01-h4694dbf_1.conda - hash: - md5: c33c8c1b04c200c2c2aac01571d3a2cf - sha256: cacd50ad7a7dd052dc38e79f6910aee82c032d4a8b5e85aeee9ee64f6bbac2da - category: core - optional: true -- name: libre2-11 - version: 2023.09.01 - manager: conda - platform: win-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2023.09.01-h8c5ae5e_1.conda - hash: - md5: 32f3e1f111ec25def4603b25cb34495c - sha256: a61abf0b2e3fca56bc6ff7a64aa48f7626445c8e53d32212a2b5dbb77b245e38 - category: core - optional: true -- name: librttopo - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda - hash: - md5: 264f9a3a4ea52c8f4d3e8ae1213a3335 - sha256: a87307e9c8fb446eb7a1698d9ab40e590ba7e55de669b59f5751c48c2b320827 - category: core - optional: true -- name: librttopo - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-64/librttopo-1.1.0-h23f359d_14.conda - hash: - md5: 4cec4e76f3d1cd6ec739ca40e7e12847 - sha256: df61f3c42651fd02d2e5fbb3cd6a225df29dc91ec6c5a57d0d717dc14ee8e2dc - category: core - optional: true -- name: librttopo - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-h92c5fdb_14.conda - hash: - md5: 9d3f0c286ea2df09b2c0aefbd63769c0 - sha256: e693468c519bea531c4fa3edccb906c1de5ac35f5630a1745230b5f17ab88104 - category: core - optional: true -- name: libsndfile - version: 1.2.2 - manager: conda - platform: linux-64 - dependencies: - lame: '>=3.100,<3.101.0a0' - libflac: '>=1.4.3,<1.5.0a0' - libgcc-ng: '>=12' - libogg: '>=1.3.4,<1.4.0a0' - libopus: '>=1.3.1,<2.0a0' - libstdcxx-ng: '>=12' - libvorbis: '>=1.3.7,<1.4.0a0' - mpg123: '>=1.32.1,<1.33.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda - hash: - md5: ef1910918dd895516a769ed36b5b3a4e - sha256: f709cbede3d4f3aee4e2f8d60bd9e256057f410bd60b8964cb8cf82ec1457573 - category: apps - optional: true -- name: libsodium - version: 1.0.18 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=7.5.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 - hash: - md5: c3788462a6fbddafdb413a9f9053e58d - sha256: 53da0c8b79659df7b53eebdb80783503ce72fb4b10ed6e9e05cc0e9e4207a130 - category: apps - optional: true -- name: libsodium - version: 1.0.18 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.18-hbcb3906_1.tar.bz2 - hash: - md5: 24632c09ed931af617fe6d5292919cab - sha256: 2da45f14e3d383b4b9e3a8bacc95cd2832aac2dbf9fbc70d255d384a310c5660 - category: apps - optional: true -- name: libsodium - version: 1.0.18 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.18-h8d14728_1.tar.bz2 - hash: - md5: 5c1fb45b5e2912c19098750ae8a32604 - sha256: ecc463f0ab6eaf6bc5bd6ff9c17f65595de6c7a38db812222ab8ffde0d3f4bc2 - category: apps - optional: true -- name: libspatialite - version: 5.0.1 - manager: conda - platform: linux-64 - dependencies: - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - libgcc-ng: '>=12' - librttopo: '>=1.1.0,<1.2.0a0' - libsqlite: '>=3.43.0,<4.0a0' - libstdcxx-ng: '>=12' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - sqlite: '' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-h090f1da_29.conda - hash: - md5: b615d7ec63e5c8a0215caeeaed8b0135 - sha256: c3378a58043fd2cf95d521bbd70bb44a6abc88c29efef60a37ad66d24202f210 - category: core - optional: true -- name: libspatialite - version: 5.0.1 - manager: conda - platform: osx-64 - dependencies: - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - libcxx: '>=15.0.7' - libiconv: '>=1.17,<2.0a0' - librttopo: '>=1.1.0,<1.2.0a0' - libsqlite: '>=3.43.0,<4.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - sqlite: '' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.0.1-h231fb02_29.conda - hash: - md5: b9dca295c3fb0b6c3d407b75138c4b2b - sha256: d0cd6691a527b2264467ab42d91261126360c92f74c15d3f9eb3d05135a61bcb - category: core - optional: true -- name: libspatialite - version: 5.0.1 - manager: conda - platform: win-64 - dependencies: - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - librttopo: '>=1.1.0,<1.2.0a0' - libsqlite: '>=3.43.0,<4.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - sqlite: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - url: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.0.1-hbf340bc_29.conda - hash: - md5: 90d9b293e6b1032356cd9c199abbc384 - sha256: 4b083a5289ad3c1009ad24c64ba70698003315e4a828a60a4b91550dcbaf3686 - category: core - optional: true -- name: libsqlite - version: 3.45.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda - hash: - md5: b3316cbe90249da4f8e84cd66e1cc55b - sha256: e2273d6860eadcf714a759ffb6dc24a69cfd01f2a0ea9d6c20f86049b9334e0c - category: main - optional: false -- name: libsqlite - version: 3.45.3 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.3-h92b6c6a_0.conda - hash: - md5: 68e462226209f35182ef66eda0f794ff - sha256: 4d44b68fb29dcbc2216a8cae0b274b02ef9b4ae05d1d0f785362ed30b91c9b52 - category: main - optional: false -- name: libsqlite - version: 3.45.3 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.3-hcfcfb64_0.conda - hash: - md5: 73f5dc8e2d55d9a1e14b11f49c3b4a28 - sha256: 06ec75faa51d7ec6d5db98889e869b579a9df19d7d3d9baff8359627da4a3b7e - category: main - optional: false -- name: libssh2 - version: 1.11.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - hash: - md5: 1f5a58e686b13bcfde88b93f547d23fe - sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d - category: main - optional: false -- name: libssh2 - version: 1.11.0 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda - hash: - md5: ca3a72efba692c59a90d4b9fc0dfe774 - sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515 - category: main - optional: false -- name: libssh2 - version: 1.11.0 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda - hash: - md5: dc262d03aae04fe26825062879141a41 - sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec - category: main - optional: false -- name: libstdcxx-ng - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda - hash: - md5: f6f6600d18a4047b54f803cf708b868a - sha256: a56c5b11f1e73a86e120e6141a42d9e935a99a2098491ac9e15347a1476ce777 - category: main - optional: false -- name: libsystemd0 - version: '255' - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libcap: '>=2.69,<2.70.0a0' - libgcc-ng: '>=12' - libgcrypt: '>=1.10.3,<2.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda - hash: - md5: 3366af27f0b593544a6cd453c7932ac5 - sha256: af27b0d225435d03f378a119f8eab6b280c53557a3c84cdb3bb8fd3167615aed - category: apps - optional: true -- name: libtiff - version: 4.6.0 - manager: conda - platform: linux-64 - dependencies: - lerc: '>=4.0.0,<5.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libstdcxx-ng: '>=12' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda - hash: - md5: 55ed21669b2015f77c180feb1dd41930 - sha256: 45158f5fbee7ee3e257e6b9f51b9f1c919ed5518a94a9973fe7fa4764330473e - category: main - optional: false -- name: libtiff - version: 4.6.0 - manager: conda - platform: osx-64 - dependencies: - lerc: '>=4.0.0,<5.0a0' - libcxx: '>=15.0.7' - libdeflate: '>=1.19,<1.20.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h684deea_2.conda - hash: - md5: 2ca10a325063e000ad6d2a5900061e0d - sha256: 1ef5bd7295f4316b111f70ad21356fb9f0de50b85a341cac9e3a61ac6487fdf1 - category: main - optional: false -- name: libtiff - version: 4.6.0 - manager: conda - platform: win-64 - dependencies: - lerc: '>=4.0.0,<5.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-h6e2ebb7_2.conda - hash: - md5: 08d653b74ee2dec0131ad4259ffbb126 - sha256: f7b50b71840a5d8edd74a8bccf0c173ca2599bd136e366c35722272b4afa0500 - category: main - optional: false -- name: libuuid - version: 2.38.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - hash: - md5: 40b61aab5c7ba9ff276c41cfffe6b80b - sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 - category: main - optional: false -- name: libvorbis - version: 1.3.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - libogg: '>=1.3.4,<1.4.0a0' - libstdcxx-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2 - hash: - md5: 309dec04b70a3cc0f1e84a4013683bc0 - sha256: 53080d72388a57b3c31ad5805c93a7328e46ff22fab7c44ad2a86d712740af33 - category: apps - optional: true -- name: libvorbis - version: 1.3.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=11.0.0' - libogg: '>=1.3.4,<1.4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libvorbis-1.3.7-h046ec9c_0.tar.bz2 - hash: - md5: fbbda1fede0aadaa252f6919148c4ce1 - sha256: fbcce1005efcd616e452dea07fe34893d8dd13c65628e74920eeb68ac549faf7 - category: apps - optional: true -- name: libvorbis - version: 1.3.7 - manager: conda - platform: win-64 - dependencies: - libogg: '>=1.3.4,<1.4.0a0' - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h0e60522_0.tar.bz2 - hash: - md5: e1a22282de0169c93e4ffe6ce6acc212 - sha256: 6cdc018a024908270205d8512d92f92cf0adaaa5401c2b403757189b138bf56a - category: apps - optional: true -- name: libwebp - version: 1.3.2 - manager: conda - platform: linux-64 - dependencies: - giflib: '>=5.2.1,<5.3.0a0' - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda - hash: - md5: 0ebb65e8d86843865796c7c95a941f34 - sha256: cc5e55531d8067ea379b145861aea8c749a545912bc016372f5e3c69cc925efd - category: apps - optional: true -- name: libwebp - version: 1.3.2 - manager: conda - platform: osx-64 - dependencies: - giflib: '>=5.2.1,<5.3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-1.3.2-h44782d1_1.conda - hash: - md5: 46d48ff2cd600a82db18d7b83471aa86 - sha256: 4d7e1efb76e398f578c5a3d0905c5eca1e4a93298aed6e2f7a10854f6671dfe8 - category: apps - optional: true -- name: libwebp - version: 1.3.2 - manager: conda - platform: win-64 - dependencies: - libwebp-base: '>=1.3.2,<2.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libwebp-1.3.2-hcfcfb64_1.conda - hash: - md5: 6202a1ba6be2713084cf0452d4e8c10c - sha256: 7b4f95d1e9756fe81186309113188195fbac164687b96ad443a243a0ca59ec8f - category: apps - optional: true -- name: libwebp-base - version: 1.3.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_1.conda - hash: - md5: 049b7df8bae5e184d1de42cdf64855f8 - sha256: c230e238646d0481851a44086767581cf7e112f27e97bb1c0b89175a079d961d - category: main - optional: false -- name: libwebp-base - version: 1.3.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.3.2-h10d778d_1.conda - hash: - md5: 1ff09ca6e85ee516442a6a94cdfc7065 - sha256: cd2d651e90b93b03e4e38617aa15ddf8e5537b2bd22dd2628784e4c80bc107eb - category: main - optional: false -- name: libwebp-base - version: 1.3.2 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.3.2-hcfcfb64_1.conda - hash: - md5: fdf80cb33c32d4d002bb89c37cfff5b7 - sha256: bf8d80cb9ed5092742aefc963dc200454b8ecbecf3656a813df295ba2d97336c - category: main - optional: false -- name: libxcb - version: '1.15' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - pthread-stubs: '' - xorg-libxau: '' - xorg-libxdmcp: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda - hash: - md5: 33277193f5b92bad9fdd230eb700929c - sha256: a670902f0a3173a466c058d2ac22ca1dd0df0453d3a80e0212815c20a16b0485 - category: main - optional: false -- name: libxcb - version: '1.15' - manager: conda - platform: osx-64 - dependencies: - pthread-stubs: '' - xorg-libxau: '' - xorg-libxdmcp: '' - url: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.15-hb7f2c08_0.conda - hash: - md5: 5513f57e0238c87c12dffedbcc9c1a4a - sha256: f41904f466acc8b3197f37f2dd3a08da75720c7f7464d9267635debc4ac1902b - category: main - optional: false -- name: libxcb - version: '1.15' - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - m2w64-gcc-libs-core: '' - pthread-stubs: '' - xorg-libxau: '' - xorg-libxdmcp: '' - url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.15-hcd874cb_0.conda - hash: - md5: 090d91b69396f14afef450c285f9758c - sha256: d01322c693580f53f8d07a7420cd6879289f5ddad5531b372c3efd1c37cac3bf - category: main - optional: false -- name: libxcrypt - version: 4.4.36 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - hash: - md5: 5aa797f8787fe7a17d1b0821485b5adc - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - category: main - optional: false -- name: libxkbcommon - version: 1.7.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - libxml2: '>=2.12.6,<3.0a0' - xkeyboard-config: '' - xorg-libxau: '>=1.0.11,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.7.0-h662e7e4_0.conda - hash: - md5: b32c0da42b1f24a98577bb3d7fc0b995 - sha256: 3d97d7f964237f42452295d461afdbc51e93f72e2c80be516f56de80e3bb6621 - category: apps - optional: true -- name: libxml2 - version: 2.12.6 - manager: conda - platform: linux-64 - dependencies: - icu: '>=73.2,<74.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.6-h232c23b_2.conda - hash: - md5: 9a3a42df8a95f65334dfc7b80da1195d - sha256: 0fd41df7211aae04f492c8550ce10238e8cfa8b1abebc2215a983c5e66d284ea - category: main - optional: false -- name: libxml2 - version: 2.12.6 - manager: conda - platform: osx-64 - dependencies: - icu: '>=73.2,<74.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.6-hc0ae0f7_2.conda - hash: - md5: 50b997370584f2c83ca0c38e9028eab9 - sha256: 2598a525b1769338f96c3d4badad7d8b95c9ddcea86db3f9479a274803190e5c - category: main - optional: false -- name: libxml2 - version: 2.12.6 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.6-hc3477c8_2.conda - hash: - md5: ac7af7a949db01dae61ddc48f4a93d79 - sha256: 9a717cad6da52c84cfc490f7d52203c4cbc9e0e0389941fc6523273be5ccd17a - category: main - optional: false -- name: libxslt - version: 1.1.39 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxml2: '>=2.12.1,<3.0.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda - hash: - md5: e71f31f8cfb0a91439f2086fc8aa0461 - sha256: 684e9b67ef7b9ca0ca993762eeb39705ec58e2e7f958555c758da7ef416db9f3 - category: apps - optional: true -- name: libxslt - version: 1.1.39 - manager: conda - platform: osx-64 - dependencies: - libxml2: '>=2.12.1,<3.0.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libxslt-1.1.39-h03b04e6_0.conda - hash: - md5: a6e0cec6b3517ffc6b5d36a920fc9312 - sha256: decfc5614a10231a17543b7366616fb2d88c14be6dd9dd5ecde63aa9a5acfb9e - category: apps - optional: true -- name: libxslt - version: 1.1.39 - manager: conda - platform: win-64 - dependencies: - libxml2: '>=2.12.1,<3.0.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.39-h3df6e99_0.conda - hash: - md5: 279ee338c9b34871d578cb3c7aa68f70 - sha256: 6e3d99466d2076c35e7ac8dcdfe604da3d593f55b74a5b8e96c2b2ff63c247aa - category: apps - optional: true -- name: libzip - version: 1.10.1 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda - hash: - md5: ac79812548e7e8cf61f7b0abdef01d3b - sha256: 84e93f189072dcfcbe77744f19c7e4171523fbecfaba7352e5a23bbe014574c7 - category: core - optional: true -- name: libzip - version: 1.10.1 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libzip-1.10.1-hc158999_3.conda - hash: - md5: 6112b3173f3aa2f12a8f40d07a77cc35 - sha256: 0689e4a6e67e80027e43eefb8a365273405a01f5ab2ece97319155b8be5d64f6 - category: core - optional: true -- name: libzip - version: 1.10.1 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libzip-1.10.1-h1d365fa_3.conda - hash: - md5: 5c629cd12d89e2856c17b1dc5fcf44a4 - sha256: 221698b52dd7a3dcfc67ff9460e9c8649fc6c86506a2a2ab6f57b97e7489bb9f - category: core - optional: true -- name: libzlib - version: 1.2.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda - hash: - md5: f36c115f1ee199da648e0597ec2047ad - sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4 - category: main - optional: false -- name: libzlib - version: 1.2.13 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda - hash: - md5: 4a3ad23f6e16f99c04e166767193d700 - sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 - category: main - optional: false -- name: libzlib - version: 1.2.13 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda - hash: - md5: 5fdb9c6a113b6b6cb5e517fd972d5f41 - sha256: c161822ee8130b71e08b6d282b9919c1de2c5274b29921a867bca0f7d30cad26 - category: main - optional: false -- name: llvm-openmp - version: 18.1.3 - manager: conda - platform: linux-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.3-h4dfa4b3_0.conda - hash: - md5: d39965123dffcad4d750989be65bcb7c - sha256: 68f77d42fd748a51549b8ce47a5a6e51a3773284ebd5c2769f6e0c0643b1e971 - category: main - optional: false -- name: llvm-openmp - version: 18.1.3 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-18.1.3-hb6ac08f_0.conda - hash: - md5: 506f270f4f00980d27cc1fc127e0ed37 - sha256: 997e4169ea474a7bc137fed3b5f4d94b1175162b3318e8cb3943003e460fe458 - category: main - optional: false -- name: llvmlite - version: 0.42.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libllvm14: '>=14.0.6,<14.1.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.42.0-py310h1b8f574_1.conda - hash: - md5: e2a5e9f92629c8e4c8611883a35745b4 - sha256: 2b25157b0724cbfc84b58e83a466d84afb8a5f09889a224c821d86adb4541ba1 - category: core - optional: true -- name: llvmlite - version: 0.42.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libllvm14: '>=14.0.6,<14.1.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.42.0-py310h7d48a1f_1.conda - hash: - md5: 0c57dbd48571b4ea3847b7298082a0d0 - sha256: 1df7c833b97ad3094cecd3f7e247e1ae61c8368dff011ec52b67b3796a83b32f - category: core - optional: true -- name: llvmlite - version: 0.42.0 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - vs2015_runtime: '' - url: https://conda.anaconda.org/conda-forge/win-64/llvmlite-0.42.0-py310hb84602e_1.conda - hash: - md5: 95715a60c993dd0a9e732be74c5e46f2 - sha256: 9bf1ff1cb94911c473cc9a307032a303b5ccbf27937e238e4dcb3fc32b880c2a - category: core - optional: true -- name: locket - version: 1.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 91e27ef3d05cc772ce627e51cff111c4 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - category: core - optional: true -- name: locket - version: 1.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 91e27ef3d05cc772ce627e51cff111c4 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - category: core - optional: true -- name: locket - version: 1.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 91e27ef3d05cc772ce627e51cff111c4 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - category: core - optional: true -- name: lz4-c - version: 1.9.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda - hash: - md5: 318b08df404f9c9be5712aaa5a6f0bb0 - sha256: 1b4c105a887f9b2041219d57036f72c4739ab9e9fe5a1486f094e58c76b31f5f - category: main - optional: false -- name: lz4-c - version: 1.9.4 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.6' - url: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda - hash: - md5: aa04f7143228308662696ac24023f991 - sha256: 39aa0c01696e4e202bf5e337413de09dfeec061d89acd5f28e9968b4e93c3f48 - category: main - optional: false -- name: lz4-c - version: 1.9.4 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda - hash: - md5: e34720eb20a33fc3bfb8451dd837ab7a - sha256: a0954b4b1590735ea5f3d0f4579c3883f8ac837387afd5b398b241fda85124ab - category: main - optional: false -- name: m2w64-gcc-libgfortran - version: 5.3.0 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs-core: '' - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 - hash: - md5: 066552ac6b907ec6d72c0ddab29050dc - sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 - category: main - optional: false -- name: m2w64-gcc-libs - version: 5.3.0 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libgfortran: '' - m2w64-gcc-libs-core: '' - m2w64-gmp: '' - m2w64-libwinpthread-git: '' - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 - hash: - md5: fe759119b8b3bfa720b8762c6fdc35de - sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa - category: main - optional: false -- name: m2w64-gcc-libs-core - version: 5.3.0 - manager: conda - platform: win-64 - dependencies: - m2w64-gmp: '' - m2w64-libwinpthread-git: '' - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 - hash: - md5: 4289d80fb4d272f1f3b56cfe87ac90bd - sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 - category: main - optional: false -- name: m2w64-gmp - version: 6.1.0 - manager: conda - platform: win-64 - dependencies: - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 - hash: - md5: 53a1c73e1e3d185516d7e3af177596d9 - sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 - category: main - optional: false -- name: m2w64-libwinpthread-git - version: 5.0.0.4634.697f757 - manager: conda - platform: win-64 - dependencies: - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - hash: - md5: 774130a326dee16f1ceb05cc687ee4f0 - sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 - category: main - optional: false -- name: markupsafe - version: 2.1.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda - hash: - md5: f6703fa0214a00bf49d1bef6dc7672d0 - sha256: 3c18347adf1d091ee9248612308a6bef79038f80b626ef67f58cd0e8d25c65b8 - category: core - optional: true -- name: markupsafe - version: 2.1.5 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-2.1.5-py310hb372a2b_0.conda - hash: - md5: fc49c4222ce625c835a5e3ce1fbfc503 - sha256: b4a3bdb4053bb990296cda261de6d1b095a2e006bf91c8b601019462dc43d7d8 - category: core - optional: true -- name: markupsafe - version: 2.1.5 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py310h8d17308_0.conda - hash: - md5: eceba0306d8619bd34a650e673d3e6c3 - sha256: 2fe1bc52085b4b4f63e073803f8cce3da95b6eaaa182abee11c0a34b484f99dc - category: core - optional: true -- name: matplotlib-base - version: 3.7.3 - manager: conda - platform: linux-64 - dependencies: - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - kiwisolver: '>=1.0.1' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.7' - python_abi: 3.10.* - tk: '>=8.6.12,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.3-py310h62c0568_0.conda - hash: - md5: 15a0409bc579d80e67715f1ce5d864a2 - sha256: 5e60c8ab40fa69f9bb665d8dee53650fc5554edb1193cb5313589c788b7f1af2 - category: core - optional: true -- name: matplotlib-base - version: 3.7.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.12' - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - kiwisolver: '>=1.0.1' - libcxx: '>=15.0.7' - numpy: '>=1.22.4,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.7' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.7.3-py310hf92ae1b_0.conda - hash: - md5: fbd800a62a65b3c7a7f63c6cc65abc45 - sha256: 22ef3cf3eaf138b0f5773d87a674cde723e131435da8e3d8ae0922280abb9f7c - category: core - optional: true -- name: matplotlib-base - version: 3.7.3 - manager: conda - platform: win-64 - dependencies: - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - kiwisolver: '>=1.0.1' - numpy: '>=1.22.4,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.7' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.7.3-py310hc9baf74_0.conda - hash: - md5: b8452c3adde5873f2d430381d515529b - sha256: b33df121d3c06700ab6046108aedbeda5e6b97f402903979df684f714c866db1 - category: core - optional: true -- name: matplotlib-inline - version: 0.1.7 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - traitlets: '' - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - hash: - md5: 779345c95648be40d22aaa89de7d4254 - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - category: apps - optional: true -- name: matplotlib-inline - version: 0.1.7 - manager: conda - platform: osx-64 - dependencies: - traitlets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - hash: - md5: 779345c95648be40d22aaa89de7d4254 - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - category: apps - optional: true -- name: matplotlib-inline - version: 0.1.7 - manager: conda - platform: win-64 - dependencies: - traitlets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - hash: - md5: 779345c95648be40d22aaa89de7d4254 - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - category: apps - optional: true -- name: mccabe - version: 0.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 34fc335fc50eef0b5ea708f2b5f54e0c - sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b - category: dev - optional: true -- name: mccabe - version: 0.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 34fc335fc50eef0b5ea708f2b5f54e0c - sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b - category: dev - optional: true -- name: mccabe - version: 0.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 34fc335fc50eef0b5ea708f2b5f54e0c - sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b - category: dev - optional: true -- name: minizip - version: 4.0.5 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.5-h0ab5242_0.conda - hash: - md5: 557396140c71eba588e96d597e0c61aa - sha256: 1a56549751f4c4a7998e0a8bcff367c3992cb832c0b211d775cfd644e1ef5e6b - category: core - optional: true -- name: minizip - version: 4.0.5 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libcxx: '>=16' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.0.5-h37d7099_0.conda - hash: - md5: 2203b2e83c20305b3d669556c345c8e9 - sha256: 426f4db1d56cdefa478a5ece35ed7624860548ace87d6ad927c4c9c6a7a20fec - category: core - optional: true -- name: minizip - version: 4.0.5 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/minizip-4.0.5-h5bed578_0.conda - hash: - md5: acd216ec6d40c7e05991dccc4f9165f2 - sha256: 3b77d2f3e71df522e88e1ec4e30742257523ff3e42a4ae0d6c9c7605b4aa6e54 - category: core - optional: true -- name: mistune - version: 3.0.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5cbee699846772cc939bef23a0d524ed - sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c - category: apps - optional: true -- name: mistune - version: 3.0.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5cbee699846772cc939bef23a0d524ed - sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c - category: apps - optional: true -- name: mistune - version: 3.0.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5cbee699846772cc939bef23a0d524ed - sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c - category: apps - optional: true -- name: mkl - version: 2022.2.1 - manager: conda - platform: linux-64 - dependencies: - _openmp_mutex: '>=4.5' - llvm-openmp: '>=15.0.6' - tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda - hash: - md5: a7ce56d5757f5b57e7daabe703ade5bb - sha256: 5322750d5e96ff5d96b1457db5fb6b10300f2bc4030545e940e17b57c4e96d00 - category: core - optional: true -- name: mkl - version: 2022.2.1 - manager: conda - platform: osx-64 - dependencies: - llvm-openmp: '>=14.0.6' - tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/osx-64/mkl-2022.2.1-h44ed08c_16952.conda - hash: - md5: a51e7035c0075d4341942a5894ef20b9 - sha256: 70896885df3cf031ac547c42f27384f769f190bc2bfb9e2520a7ef2c34db4806 - category: core - optional: true -- name: mkl - version: 2022.1.0 - manager: conda - platform: win-64 - dependencies: - intel-openmp: '' - tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/win-64/mkl-2022.1.0-h6a75c08_874.tar.bz2 - hash: - md5: 2ff89a7337a9636029b4db9466e9f8e3 - sha256: b130d13dba6a798cbcce8f19c52e9765b75b8668d2f8f95ba8210c63b6fa84eb - category: core - optional: true -- name: mpg123 - version: 1.32.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.6-h59595ed_0.conda - hash: - md5: 9160cdeb523a1b20cf8d2a0bf821f45d - sha256: 8895a5ce5122a3b8f59afcba4b032f198e8a690a0efc95ef61f2135357ef0d72 - category: apps - optional: true -- name: msgpack-python - version: 1.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda - hash: - md5: dc5263dcaa1347e5a456ead3537be27d - sha256: a5c7612029e3871b0af0bd69e8ee1545d3deb93b5bec29cf1bf72522375fda31 - category: core - optional: true -- name: msgpack-python - version: 1.0.7 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.0.7-py310ha697434_0.conda - hash: - md5: 93f2eca61d018d52726d84eee4311e63 - sha256: ba185e23a2d2d65f14b8a2da6d770f36b16a2d57f54d8711f7973df77bdebc95 - category: core - optional: true -- name: msgpack-python - version: 1.0.7 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.0.7-py310h232114e_0.conda - hash: - md5: 63f0d1ad79102c02edbcfbb81881edde - sha256: 6d5331d2e95f8bc01d83ed9c90e2f426eef622d98f6ecef62273d968d3bdb25d - category: core - optional: true -- name: msys2-conda-epoch - version: '20160418' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - hash: - md5: b0309b72560df66f71a9d5e34a5efdfa - sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 - category: main - optional: false -- name: munch - version: 4.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: core - optional: true -- name: munch - version: 4.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: core - optional: true -- name: munch - version: 4.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: core - optional: true -- name: munkres - version: 1.1.4 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - hash: - md5: 2ba8498c1018c1e9c61eb99b973dfe19 - sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 - category: core - optional: true -- name: munkres - version: 1.1.4 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - hash: - md5: 2ba8498c1018c1e9c61eb99b973dfe19 - sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 - category: core - optional: true -- name: munkres - version: 1.1.4 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - hash: - md5: 2ba8498c1018c1e9c61eb99b973dfe19 - sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 - category: core - optional: true -- name: mysql-common - version: 8.0.33 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - openssl: '>=3.1.4,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda - hash: - md5: 80bf3b277c120dd294b51d404b931a75 - sha256: c8b2c5c9d0d013a4f6ef96cb4b339bfdc53a74232d8c61ed08178e5b1ec4eb63 - category: apps - optional: true -- name: mysql-common - version: 8.0.33 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - openssl: '>=3.1.4,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/mysql-common-8.0.33-h1d20c9b_6.conda - hash: - md5: ad07fbd8dc7992e5e004f7bdfdee246d - sha256: b6b18aeed435d4075b4aac3559a070a6caa5a174a339e8de87785fca2f8f57a6 - category: apps - optional: true -- name: mysql-libs - version: 8.0.33 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-common: 8.0.33 - openssl: '>=3.1.4,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda - hash: - md5: e87530d1b12dd7f4e0f856dc07358d60 - sha256: 78c905637dac79b197395065c169d452b8ca2a39773b58e45e23114f1cb6dcdb - category: apps - optional: true -- name: mysql-libs - version: 8.0.33 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-common: 8.0.33 - openssl: '>=3.1.4,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/mysql-libs-8.0.33-hed35180_6.conda - hash: - md5: c27fddc4d3c2d471d1d706b243570f37 - sha256: 87d754167fddf342b894e377fdcaac096c93c941773267ad9c89bb7b64924a33 - category: apps - optional: true -- name: nbclassic - version: 1.0.0 - manager: conda - platform: linux-64 - dependencies: - argon2-cffi: '' - ipykernel: '' - ipython_genutils: '' - jinja2: '' - jupyter_client: '>=6.1.1' - jupyter_core: '>=4.6.1' - jupyter_server: '>=1.8' - nbconvert: '>=5' - nbformat: '' - nest-asyncio: '>=1.5' - notebook-shim: '>=0.2.3' - prometheus_client: '' - python: '>=3.7' - pyzmq: '>=17' - send2trash: '>=1.8.0' - terminado: '>=0.8.3' - tornado: '>=6.1' - traitlets: '>=4.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda - hash: - md5: a0be31e9bd84d6eae87cdbf74c56b90b - sha256: fc2b2e606ccbd0aaa2cdecdd33fc39e2c4bd7b5b96a64b89b3e6ad9ce20eec2f - category: apps - optional: true -- name: nbclassic - version: 1.0.0 - manager: conda - platform: osx-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - pyzmq: '>=17' - terminado: '>=0.8.3' - jupyter_client: '>=6.1.1' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert: '>=5' - jupyter_server: '>=1.8' - notebook-shim: '>=0.2.3' - url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda - hash: - md5: a0be31e9bd84d6eae87cdbf74c56b90b - sha256: fc2b2e606ccbd0aaa2cdecdd33fc39e2c4bd7b5b96a64b89b3e6ad9ce20eec2f - category: apps - optional: true -- name: nbclassic - version: 1.0.0 - manager: conda - platform: win-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - pyzmq: '>=17' - terminado: '>=0.8.3' - jupyter_client: '>=6.1.1' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert: '>=5' - jupyter_server: '>=1.8' - notebook-shim: '>=0.2.3' - url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda - hash: - md5: a0be31e9bd84d6eae87cdbf74c56b90b - sha256: fc2b2e606ccbd0aaa2cdecdd33fc39e2c4bd7b5b96a64b89b3e6ad9ce20eec2f - category: apps - optional: true -- name: nbclient - version: 0.10.0 - manager: conda - platform: linux-64 - dependencies: - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbformat: '>=5.1' - python: '>=3.8' - traitlets: '>=5.4' - url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda - hash: - md5: 15b51397e0fe8ea7d7da60d83eb76ebc - sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf - category: apps - optional: true -- name: nbclient - version: 0.10.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbformat: '>=5.1' - traitlets: '>=5.4' - url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda - hash: - md5: 15b51397e0fe8ea7d7da60d83eb76ebc - sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf - category: apps - optional: true -- name: nbclient - version: 0.10.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbformat: '>=5.1' - traitlets: '>=5.4' - url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda - hash: - md5: 15b51397e0fe8ea7d7da60d83eb76ebc - sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf - category: apps - optional: true -- name: nbconvert - version: 7.16.3 - manager: conda - platform: linux-64 - dependencies: - nbconvert-core: 7.16.3 - nbconvert-pandoc: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_1.conda - hash: - md5: c80cd9bcb93679ceb9ea0938cf5f7db0 - sha256: 03f1b45a9860217a58c077a38e65abc27360868cb498e30d19cdbd1011c79874 - category: apps - optional: true -- name: nbconvert - version: 7.16.3 - manager: conda - platform: osx-64 - dependencies: - nbconvert-core: 7.16.3 - nbconvert-pandoc: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_1.conda - hash: - md5: c80cd9bcb93679ceb9ea0938cf5f7db0 - sha256: 03f1b45a9860217a58c077a38e65abc27360868cb498e30d19cdbd1011c79874 - category: apps - optional: true -- name: nbconvert - version: 7.16.3 - manager: conda - platform: win-64 - dependencies: - nbconvert-core: 7.16.3 - nbconvert-pandoc: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_1.conda - hash: - md5: c80cd9bcb93679ceb9ea0938cf5f7db0 - sha256: 03f1b45a9860217a58c077a38e65abc27360868cb498e30d19cdbd1011c79874 - category: apps - optional: true -- name: nbconvert-core - version: 7.16.3 - manager: conda - platform: linux-64 - dependencies: - beautifulsoup4: '' - bleach: '' - defusedxml: '' - entrypoints: '>=0.2.2' - jinja2: '>=3.0' - jupyter_core: '>=4.7' - jupyterlab_pygments: '' - markupsafe: '>=2.0' - mistune: '>=2.0.3,<4' - nbclient: '>=0.5.0' - nbformat: '>=5.1' - packaging: '' - pandocfilters: '>=1.4.1' - pygments: '>=2.4.1' - python: '>=3.8' - tinycss2: '' - traitlets: '>=5.0' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_1.conda - hash: - md5: 2f34a65aee1d1f354e701d166413783a - sha256: b86ab6e91bb0b25a1bc12f3ff2e332f481ff8ad9c835724c86f1adf98b913733 - category: apps - optional: true -- name: nbconvert-core - version: 7.16.3 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - beautifulsoup4: '' - defusedxml: '' - bleach: '' - tinycss2: '' - jupyterlab_pygments: '' - python: '>=3.8' - jinja2: '>=3.0' - entrypoints: '>=0.2.2' - markupsafe: '>=2.0' - jupyter_core: '>=4.7' - traitlets: '>=5.0' - pandocfilters: '>=1.4.1' - nbformat: '>=5.1' - pygments: '>=2.4.1' - nbclient: '>=0.5.0' - mistune: '>=2.0.3,<4' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_1.conda - hash: - md5: 2f34a65aee1d1f354e701d166413783a - sha256: b86ab6e91bb0b25a1bc12f3ff2e332f481ff8ad9c835724c86f1adf98b913733 - category: apps - optional: true -- name: nbconvert-core - version: 7.16.3 - manager: conda - platform: win-64 - dependencies: - packaging: '' - beautifulsoup4: '' - defusedxml: '' - bleach: '' - tinycss2: '' - jupyterlab_pygments: '' - python: '>=3.8' - jinja2: '>=3.0' - entrypoints: '>=0.2.2' - markupsafe: '>=2.0' - jupyter_core: '>=4.7' - traitlets: '>=5.0' - pandocfilters: '>=1.4.1' - nbformat: '>=5.1' - pygments: '>=2.4.1' - nbclient: '>=0.5.0' - mistune: '>=2.0.3,<4' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_1.conda - hash: - md5: 2f34a65aee1d1f354e701d166413783a - sha256: b86ab6e91bb0b25a1bc12f3ff2e332f481ff8ad9c835724c86f1adf98b913733 - category: apps - optional: true -- name: nbconvert-pandoc - version: 7.16.3 - manager: conda - platform: linux-64 - dependencies: - nbconvert-core: 7.16.3 - pandoc: '' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_1.conda - hash: - md5: 105151637d2223d6274c5c79d839cc64 - sha256: ec4ce4efc6e4db87ff1d1deca0a0c71a3aea048a52931344db8944d0bc8a05eb - category: apps - optional: true -- name: nbconvert-pandoc - version: 7.16.3 - manager: conda - platform: osx-64 - dependencies: - pandoc: '' - nbconvert-core: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_1.conda - hash: - md5: 105151637d2223d6274c5c79d839cc64 - sha256: ec4ce4efc6e4db87ff1d1deca0a0c71a3aea048a52931344db8944d0bc8a05eb - category: apps - optional: true -- name: nbconvert-pandoc - version: 7.16.3 - manager: conda - platform: win-64 - dependencies: - pandoc: '' - nbconvert-core: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_1.conda - hash: - md5: 105151637d2223d6274c5c79d839cc64 - sha256: ec4ce4efc6e4db87ff1d1deca0a0c71a3aea048a52931344db8944d0bc8a05eb - category: apps - optional: true -- name: nbformat - version: 5.10.4 - manager: conda - platform: linux-64 - dependencies: - jsonschema: '>=2.6' - jupyter_core: '>=4.12,!=5.0.*' - python: '>=3.8' - python-fastjsonschema: '>=2.15' - traitlets: '>=5.1' - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - hash: - md5: 0b57b5368ab7fc7cdc9e3511fa867214 - sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c - category: apps - optional: true -- name: nbformat - version: 5.10.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1' - jsonschema: '>=2.6' - python-fastjsonschema: '>=2.15' - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - hash: - md5: 0b57b5368ab7fc7cdc9e3511fa867214 - sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c - category: apps - optional: true -- name: nbformat - version: 5.10.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1' - jsonschema: '>=2.6' - python-fastjsonschema: '>=2.15' - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - hash: - md5: 0b57b5368ab7fc7cdc9e3511fa867214 - sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c - category: apps - optional: true -- name: ncurses - version: 6.4.20240210 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4.20240210-h59595ed_0.conda - hash: - md5: 97da8860a0da5413c7c98a3b3838a645 - sha256: aa0f005b6727aac6507317ed490f0904430584fa8ca722657e7f0fb94741de81 - category: main - optional: false -- name: ncurses - version: 6.4.20240210 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4.20240210-h73e2aa4_0.conda - hash: - md5: 50f28c512e9ad78589e3eab34833f762 - sha256: 50b72acf08acbc4e5332807653e2ca6b26d4326e8af16fad1fd3f2ce9ea55503 - category: main - optional: false -- name: nest-asyncio - version: 1.6.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - hash: - md5: 6598c056f64dc8800d40add25e4e2c34 - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - category: apps - optional: true -- name: nest-asyncio - version: 1.6.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - hash: - md5: 6598c056f64dc8800d40add25e4e2c34 - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - category: apps - optional: true -- name: nest-asyncio - version: 1.6.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - hash: - md5: 6598c056f64dc8800d40add25e4e2c34 - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - category: apps - optional: true -- name: networkx - version: '3.3' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.10' - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.3-pyhd8ed1ab_1.conda - hash: - md5: d335fd5704b46f4efb89a6774e81aef0 - sha256: cbd8a6de87ad842e7665df38dcec719873fe74698bc761de5431047b8fada41a - category: core - optional: true -- name: networkx - version: '3.3' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10' - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.3-pyhd8ed1ab_1.conda - hash: - md5: d335fd5704b46f4efb89a6774e81aef0 - sha256: cbd8a6de87ad842e7665df38dcec719873fe74698bc761de5431047b8fada41a - category: core - optional: true -- name: networkx - version: '3.3' - manager: conda - platform: win-64 - dependencies: - python: '>=3.10' - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.3-pyhd8ed1ab_1.conda - hash: - md5: d335fd5704b46f4efb89a6774e81aef0 - sha256: cbd8a6de87ad842e7665df38dcec719873fe74698bc761de5431047b8fada41a - category: core - optional: true -- name: notebook - version: 6.5.6 - manager: conda - platform: linux-64 - dependencies: - argon2-cffi: '' - ipykernel: '' - ipython_genutils: '' - jinja2: '' - jupyter_client: '>=5.3.4,<8' - jupyter_core: '>=4.6.1' - nbclassic: '>=0.4.7' - nbconvert-core: '>=5' - nbformat: '' - nest-asyncio: '>=1.5' - prometheus_client: '' - python: '>=3.7' - pyzmq: '>=17,<25' - send2trash: '>=1.8.0' - terminado: '>=0.8.3' - tornado: '>=6.1' - traitlets: '>=4.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda - hash: - md5: 2e2422cf19f555ef3ddbbeaf2eac7545 - sha256: fe8a12a311f2a9e20209d5aa8336ed638a4004b5b2da3cc2011b1c986356a590 - category: apps - optional: true -- name: notebook - version: 6.5.6 - manager: conda - platform: osx-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - terminado: '>=0.8.3' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert-core: '>=5' - nbclassic: '>=0.4.7' - jupyter_client: '>=5.3.4,<8' - pyzmq: '>=17,<25' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda - hash: - md5: 2e2422cf19f555ef3ddbbeaf2eac7545 - sha256: fe8a12a311f2a9e20209d5aa8336ed638a4004b5b2da3cc2011b1c986356a590 - category: apps - optional: true -- name: notebook - version: 6.5.6 - manager: conda - platform: win-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - terminado: '>=0.8.3' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert-core: '>=5' - nbclassic: '>=0.4.7' - jupyter_client: '>=5.3.4,<8' - pyzmq: '>=17,<25' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda - hash: - md5: 2e2422cf19f555ef3ddbbeaf2eac7545 - sha256: fe8a12a311f2a9e20209d5aa8336ed638a4004b5b2da3cc2011b1c986356a590 - category: apps - optional: true -- name: notebook-shim - version: 0.2.4 - manager: conda - platform: linux-64 - dependencies: - jupyter_server: '>=1.8,<3' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - hash: - md5: 3d85618e2c97ab896b5b5e298d32b5b3 - sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 - category: apps - optional: true -- name: notebook-shim - version: 0.2.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - jupyter_server: '>=1.8,<3' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - hash: - md5: 3d85618e2c97ab896b5b5e298d32b5b3 - sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 - category: apps - optional: true -- name: notebook-shim - version: 0.2.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - jupyter_server: '>=1.8,<3' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - hash: - md5: 3d85618e2c97ab896b5b5e298d32b5b3 - sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 - category: apps - optional: true -- name: nspr - version: '4.35' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda - hash: - md5: da0ec11a6454ae19bff5b02ed881a2b1 - sha256: 8fadeebb2b7369a4f3b2c039a980d419f65c7b18267ba0c62588f9f894396d0c - category: core - optional: true -- name: nspr - version: '4.35' - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.6' - url: https://conda.anaconda.org/conda-forge/osx-64/nspr-4.35-hea0b92c_0.conda - hash: - md5: a9e56c98d13d8b7ce72bf4357317c29b - sha256: da6e19bd0ff31e219760e647cfe1cc499a8cdfaff305f06c56d495ca062b86de - category: core - optional: true -- name: nss - version: '3.98' - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libgcc-ng: '>=12' - libsqlite: '>=3.45.1,<4.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/nss-3.98-h1d7d5a4_0.conda - hash: - md5: 54b56c2fdf973656b748e0378900ec13 - sha256: a9bc94d03df48014011cf6caaf447f2ef86a5edf7c70d70002ec4b59f5a4e198 - category: core - optional: true -- name: nss - version: '3.98' - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libsqlite: '>=3.45.1,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/nss-3.98-ha05da47_0.conda - hash: - md5: 79d062716d8e1f77cf806c6fe0f4405c - sha256: 3d99dd976aeb8678e4ac5fcbd574e1de50cdc57b742e22855f294c8047d5c68e - category: core - optional: true -- name: numba - version: 0.59.1 - manager: conda - platform: linux-64 - dependencies: - _openmp_mutex: '>=4.5' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - llvmlite: '>=0.42.0,<0.43.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.1-py310h7dc5dd1_0.conda - hash: - md5: b757b5ecfa1cad38328fa73e236b6563 - sha256: d2c631345a40f0ffbe18d312ef665e1ae1a4942ecff46334df2de49b8277bf81 - category: core - optional: true -- name: numba - version: 0.59.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - llvm-openmp: '>=18.1.2' - llvmlite: '>=0.42.0,<0.43.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/numba-0.59.1-py310h1d5af72_0.conda - hash: - md5: 48c2d28c10aa78b8db76f0eee9c08626 - sha256: a209aa01362bc96eda9cfd013400518fbf348845cd8a76235e4919f63336ec88 - category: core - optional: true -- name: numba - version: 0.59.1 - manager: conda - platform: win-64 - dependencies: - llvmlite: '>=0.42.0,<0.43.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/numba-0.59.1-py310h9ccaf4f_0.conda - hash: - md5: 62a19ec9b0e89bf270c6bf163cf21bb4 - sha256: fa83e95a18ab1011fb628f536609c86304cc6578035592de7078f78491e7b334 - category: core - optional: true -- name: numcodecs - version: 0.12.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - msgpack-python: '' - numpy: '>=1.7' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.12.1-py310hc6cd4ac_0.conda - hash: - md5: ec9394896c7ae67726c4716578fc2032 - sha256: 2adddad7a1bbaffe551e0f124943adfc757078c4faec58c56f3d00569b55b974 - category: core - optional: true -- name: numcodecs - version: 0.12.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - msgpack-python: '' - numpy: '>=1.7' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.12.1-py310had63691_0.conda - hash: - md5: b373000cc7d6900e640b9e3daf74b5e2 - sha256: 259d1af44e867e10195c29abd8b40e6ead06f931706c99c81034d442a4a47570 - category: core - optional: true -- name: numcodecs - version: 0.12.1 - manager: conda - platform: win-64 - dependencies: - msgpack-python: '' - numpy: '>=1.7' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/numcodecs-0.12.1-py310h00ffb61_0.conda - hash: - md5: 574f310b153410338baeb61b83c20aa2 - sha256: a9c626943fca0655b2b9fe25b534dfef7304a17b5a8598fa1a2c6a8aca0314df - category: core - optional: true -- name: numpy - version: 1.23.5 - manager: conda - platform: linux-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libgcc-ng: '>=12' - liblapack: '>=3.9.0,<4.0a0' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.23.5-py310h53a5b5f_0.conda - hash: - md5: 3b114b1559def8bad228fec544ac1812 - sha256: c3b2dc03dbae88ae1337e37e672aa44008898395d3508839bf35323b54e71665 - category: main - optional: false -- name: numpy - version: 1.23.5 - manager: conda - platform: osx-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libcxx: '>=14.0.6' - liblapack: '>=3.9.0,<4.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.23.5-py310h1b7c290_0.conda - hash: - md5: cc6930f1a95f169e2caedb1b808bf7f7 - sha256: 4318194b73e93e018af16da9dd7f9060e481c6beb3a4894bcfecdce894e95200 - category: main - optional: false -- name: numpy - version: 1.23.5 - manager: conda - platform: win-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - liblapack: '>=3.9.0,<4.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/numpy-1.23.5-py310h4a8f9c9_0.conda - hash: - md5: f734ade6fd852582e5c1a09152dd3a60 - sha256: 92900cc7e9561ea177878f838a6a8a105b750d5971affedc648090ef22b4db23 - category: main - optional: false -- name: openjpeg - version: 2.5.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libpng: '>=1.6.43,<1.7.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - hash: - md5: 7f2e286780f072ed750df46dc2631138 - sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 - category: main - optional: false -- name: openjpeg - version: 2.5.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libpng: '>=1.6.43,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - hash: - md5: 05a14cc9d725dd74995927968d6547e3 - sha256: dc9c405119b9b54f8ca5984da27ba498bd848ab4f0f580da6f293009ca5adc13 - category: main - optional: false -- name: openjpeg - version: 2.5.2 - manager: conda - platform: win-64 - dependencies: - libpng: '>=1.6.43,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - hash: - md5: 7e7099ad94ac3b599808950cec30ad4e - sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 - category: main - optional: false -- name: openssl - version: 3.2.1 - manager: conda - platform: linux-64 - dependencies: - ca-certificates: '' - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda - hash: - md5: 9d731343cff6ee2e5a25c4a091bf8e2a - sha256: 2c689444ed19a603be457284cf2115ee728a3fafb7527326e96054dee7cdc1a7 - category: main - optional: false -- name: openssl - version: 3.2.1 - manager: conda - platform: osx-64 - dependencies: - ca-certificates: '' - url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.1-hd75f5a5_1.conda - hash: - md5: 570a6f04802df580be529f3a72d2bbf7 - sha256: 7ae0ac6a1673584a8a380c2ff3d46eca48ed53bc7174c0d4eaa0dd2f247a0984 - category: main - optional: false -- name: openssl - version: 3.2.1 - manager: conda - platform: win-64 - dependencies: - ca-certificates: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.2.1-hcfcfb64_1.conda - hash: - md5: 958e0418e93e50c575bff70fbcaa12d8 - sha256: 61ce4e11c3c26ed4e4d9b7e7e2483121a1741ad0f9c8db0a91a28b6e05182ce6 - category: main - optional: false -- name: packaging - version: '24.0' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - hash: - md5: 248f521b64ce055e7feae3105e7abeb8 - sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a - category: main - optional: false -- name: packaging - version: '24.0' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - hash: - md5: 248f521b64ce055e7feae3105e7abeb8 - sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a - category: main - optional: false -- name: packaging - version: '24.0' - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - hash: - md5: 248f521b64ce055e7feae3105e7abeb8 - sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a - category: main - optional: false -- name: pandas - version: 1.5.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.8.1' - python_abi: 3.10.* - pytz: '>=2020.1' - url: https://conda.anaconda.org/conda-forge/linux-64/pandas-1.5.3-py310h9b08913_1.conda - hash: - md5: 331c9dd2560aeb308e26f821280f19d0 - sha256: 8766d9ef466d6604f561e844578d3c2bcd4ac8d22d2823bae9fd18ecc26af615 - category: core - optional: true -- name: pandas - version: 1.5.3 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.6' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.8.1' - python_abi: 3.10.* - pytz: '>=2020.1' - url: https://conda.anaconda.org/conda-forge/osx-64/pandas-1.5.3-py310hecf8f37_1.conda - hash: - md5: 116e61ed90d0332d30310b2210eb1db4 - sha256: 59a0c38678b4280220b9a1b1457910fea9e9dd7e95cba3d0ca2bc3299cf56ea1 - category: core - optional: true -- name: pandas - version: 1.5.3 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.8.1' - python_abi: 3.10.* - pytz: '>=2020.1' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pandas-1.5.3-py310h1c4a608_1.conda - hash: - md5: 3e3b61b47b88cf649025e67223bee77f - sha256: a86d8b582eaf45884255dd24c556045943cdae1b41b1d85438d87218c6197428 - category: core - optional: true -- name: pandoc - version: 3.1.13 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.13-ha770c72_0.conda - hash: - md5: 9105ee57dc4869bc5d1876b531202676 - sha256: b3c237a3ccfde48b28a9f9e3d27e6a75718be6f1fba41bd20649f91fdf6b356f - category: apps - optional: true -- name: pandoc - version: 3.1.13 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/pandoc-3.1.13-h694c41f_0.conda - hash: - md5: 569f0ad9ff2d8654e5630d5a3232e6f1 - sha256: 8bc1b6557519c10bab1c90a6394fb4ad5f00ae1bffa7eafc982c481be348a46e - category: apps - optional: true -- name: pandoc - version: 3.1.13 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.1.13-h57928b3_0.conda - hash: - md5: 4caaf4c37a0efc8a06492dba2d871bbb - sha256: 4f586ae8f8d8ad2d51d7e67c1b3d228a6a6af8189dd6ac959438c1e852cdbbaf - category: apps - optional: true -- name: pandocfilters - version: 1.5.0 - manager: conda - platform: linux-64 - dependencies: - python: '!=3.0,!=3.1,!=3.2,!=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 457c2c8c08e54905d6954e79cb5b5db9 - sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f - category: apps - optional: true -- name: pandocfilters - version: 1.5.0 - manager: conda - platform: osx-64 - dependencies: - python: '!=3.0,!=3.1,!=3.2,!=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 457c2c8c08e54905d6954e79cb5b5db9 - sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f - category: apps - optional: true -- name: pandocfilters - version: 1.5.0 - manager: conda - platform: win-64 - dependencies: - python: '!=3.0,!=3.1,!=3.2,!=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 457c2c8c08e54905d6954e79cb5b5db9 - sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f - category: apps - optional: true -- name: parso - version: 0.8.4 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - hash: - md5: 81534b420deb77da8833f2289b8d47ac - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - category: apps - optional: true -- name: parso - version: 0.8.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - hash: - md5: 81534b420deb77da8833f2289b8d47ac - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - category: apps - optional: true -- name: parso - version: 0.8.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - hash: - md5: 81534b420deb77da8833f2289b8d47ac - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - category: apps - optional: true -- name: partd - version: 1.4.1 - manager: conda - platform: linux-64 - dependencies: - locket: '' - python: '>=3.7' - toolz: '' - url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda - hash: - md5: acf4b7c0bcd5fa3b0e05801c4d2accd6 - sha256: b248238da2bb9dfe98e680af911dc7013af86095e3ec8baf08905555632d34c7 - category: core - optional: true -- name: partd - version: 1.4.1 - manager: conda - platform: osx-64 - dependencies: - toolz: '' - locket: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda - hash: - md5: acf4b7c0bcd5fa3b0e05801c4d2accd6 - sha256: b248238da2bb9dfe98e680af911dc7013af86095e3ec8baf08905555632d34c7 - category: core - optional: true -- name: partd - version: 1.4.1 - manager: conda - platform: win-64 - dependencies: - toolz: '' - locket: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda - hash: - md5: acf4b7c0bcd5fa3b0e05801c4d2accd6 - sha256: b248238da2bb9dfe98e680af911dc7013af86095e3ec8baf08905555632d34c7 - category: core - optional: true -- name: pcre2 - version: '10.40' - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libgcc-ng: '>=12' - libzlib: '>=1.2.12,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 - hash: - md5: 69e2c796349cd9b273890bee0febfe1b - sha256: 7a29ec847556eed4faa1646010baae371ced69059a4ade43851367a076d6108a - category: core - optional: true -- name: pcre2 - version: '10.40' - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.12,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.40-h1c4e4bc_0.tar.bz2 - hash: - md5: e0f80c8f3a0352a54eddfe59cd2b25b1 - sha256: 60265b48c96decbea89a19a7bc34be88d9b95d4725fd4dbdae158529c601875a - category: core - optional: true -- name: pcre2 - version: '10.40' - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.12,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.40-h17e33f8_0.tar.bz2 - hash: - md5: 2519de0d9620dc2bc7e19caf6867136d - sha256: 5833c63548e4fae91da6d77739eab7dc9bf6542e43f105826b23c01bfdd9cb57 - category: core - optional: true -- name: pexpect - version: 4.9.0 - manager: conda - platform: linux-64 - dependencies: - ptyprocess: '>=0.5' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - hash: - md5: 629f3203c99b32e0988910c93e77f3b6 - sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e - category: apps - optional: true -- name: pexpect - version: 4.9.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - ptyprocess: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - hash: - md5: 629f3203c99b32e0988910c93e77f3b6 - sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e - category: apps - optional: true -- name: pickleshare - version: 0.7.5 - manager: conda - platform: linux-64 - dependencies: - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - hash: - md5: 415f0ebb6198cc2801c73438a9fb5761 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - category: apps - optional: true -- name: pickleshare - version: 0.7.5 - manager: conda - platform: osx-64 - dependencies: - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - hash: - md5: 415f0ebb6198cc2801c73438a9fb5761 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - category: apps - optional: true -- name: pickleshare - version: 0.7.5 - manager: conda - platform: win-64 - dependencies: - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - hash: - md5: 415f0ebb6198cc2801c73438a9fb5761 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - category: apps - optional: true -- name: pillow - version: 10.3.0 - manager: conda - platform: linux-64 - dependencies: - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.16,<3.0a0' - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.2,<3.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tk: '>=8.6.13,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py310hf73ecf8_0.conda - hash: - md5: 1de56cf017dfd02aa84093206a0141a8 - sha256: 89caf2bb9b6d6d0c874590128b36676615750b5ef121fab514bc737dc48534da - category: main - optional: false -- name: pillow - version: 10.3.0 - manager: conda - platform: osx-64 - dependencies: - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.16,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.2,<3.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tk: '>=8.6.13,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.3.0-py310h99295b8_0.conda - hash: - md5: 7c5e25679e87f90b3068ec4e539bd4c3 - sha256: d642d985b3c84d753520994491e34aae31d05a6100683a51b7c9ae79915fe50d - category: main - optional: false -- name: pillow - version: 10.3.0 - manager: conda - platform: win-64 - dependencies: - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.16,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.2,<3.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tk: '>=8.6.13,<8.7.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.3.0-py310hf5d6e66_0.conda - hash: - md5: 510e3e5f72df4cb88e99cdd5ba730330 - sha256: d64813920c313c0e44040cd257c6e238a72ada45e8c2ce47c007deb7f049cba5 - category: main - optional: false -- name: pip - version: '24.0' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - setuptools: '' - wheel: '' - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - hash: - md5: f586ac1e56c8638b64f9c8122a7b8a67 - sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: main - optional: false -- name: pip - version: '24.0' - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - wheel: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - hash: - md5: f586ac1e56c8638b64f9c8122a7b8a67 - sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: main - optional: false -- name: pip - version: '24.0' - manager: conda - platform: win-64 - dependencies: - setuptools: '' - wheel: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - hash: - md5: f586ac1e56c8638b64f9c8122a7b8a67 - sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: main - optional: false -- name: pixman - version: 0.43.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda - hash: - md5: 71004cbf7924e19c02746ccde9fd7123 - sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e - category: core - optional: true -- name: pixman - version: 0.43.4 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/pixman-0.43.4-h73e2aa4_0.conda - hash: - md5: cb134c1e03fd32f4e6bea3f6de2614fd - sha256: 3ab44e12e566c67a6e9fd831f557ab195456aa996b8dd9af19787ca80caa5cd1 - category: core - optional: true -- name: pixman - version: 0.43.4 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pixman-0.43.4-h63175ca_0.conda - hash: - md5: b98135614135d5f458b75ab9ebb9558c - sha256: 51de4d7fb41597b06d60f1b82e269dafcb55e994e08fdcca8e4d6f7d42bedd07 - category: core - optional: true -- name: pkgutil-resolve-name - version: 1.3.10 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - hash: - md5: 405678b942f2481cecdb3e010f4925d9 - sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a - category: apps - optional: true -- name: pkgutil-resolve-name - version: 1.3.10 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - hash: - md5: 405678b942f2481cecdb3e010f4925d9 - sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a - category: apps - optional: true -- name: pkgutil-resolve-name - version: 1.3.10 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - hash: - md5: 405678b942f2481cecdb3e010f4925d9 - sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a - category: apps - optional: true -- name: platformdirs - version: 4.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - hash: - md5: a0bc3eec34b0fab84be6b2da94e98e20 - sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3 - category: main - optional: false -- name: platformdirs - version: 4.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - hash: - md5: a0bc3eec34b0fab84be6b2da94e98e20 - sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3 - category: main - optional: false -- name: platformdirs - version: 4.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - hash: - md5: a0bc3eec34b0fab84be6b2da94e98e20 - sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3 - category: main - optional: false -- name: plotly - version: 5.13.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - tenacity: '>=6.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.13.1-pyhd8ed1ab_0.conda - hash: - md5: 761501a3de96c5855d840f4287a65e77 - sha256: 3965443356a6654f1852d6b948bdb72d9703360d0c3e23595772833081ba6dee - category: apps - optional: true -- name: plotly - version: 5.13.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - tenacity: '>=6.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.13.1-pyhd8ed1ab_0.conda - hash: - md5: 761501a3de96c5855d840f4287a65e77 - sha256: 3965443356a6654f1852d6b948bdb72d9703360d0c3e23595772833081ba6dee - category: apps - optional: true -- name: plotly - version: 5.13.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - tenacity: '>=6.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.13.1-pyhd8ed1ab_0.conda - hash: - md5: 761501a3de96c5855d840f4287a65e77 - sha256: 3965443356a6654f1852d6b948bdb72d9703360d0c3e23595772833081ba6dee - category: apps - optional: true -- name: pluggy - version: 1.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: 139e9feb65187e916162917bb2484976 - sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0 - category: dev - optional: true -- name: pluggy - version: 1.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: 139e9feb65187e916162917bb2484976 - sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0 - category: dev - optional: true -- name: pluggy - version: 1.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: 139e9feb65187e916162917bb2484976 - sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0 - category: dev - optional: true -- name: ply - version: '3.11' - manager: conda - platform: linux-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda - hash: - md5: 18c6deb6f9602e32446398203c8f0e91 - sha256: d8faaf4dcc13caed560fa32956523b35928a70499a2d08c51320947d637e3a41 - category: apps - optional: true -- name: ply - version: '3.11' - manager: conda - platform: osx-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda - hash: - md5: 18c6deb6f9602e32446398203c8f0e91 - sha256: d8faaf4dcc13caed560fa32956523b35928a70499a2d08c51320947d637e3a41 - category: apps - optional: true -- name: ply - version: '3.11' - manager: conda - platform: win-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda - hash: - md5: 18c6deb6f9602e32446398203c8f0e91 - sha256: d8faaf4dcc13caed560fa32956523b35928a70499a2d08c51320947d637e3a41 - category: apps - optional: true -- name: pooch - version: 1.8.1 - manager: conda - platform: linux-64 - dependencies: - packaging: '>=20.0' - platformdirs: '>=2.5.0' - python: '>=3.7' - requests: '>=2.19.0' - url: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.1-pyhd8ed1ab_0.conda - hash: - md5: d15917f33140f8d2ac9ca44db7ec8a25 - sha256: 63f95e626754f5e05e74f39c0f4866aa8bd40b933eef336077978d365d66ca7b - category: main - optional: false -- name: pooch - version: 1.8.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - packaging: '>=20.0' - requests: '>=2.19.0' - platformdirs: '>=2.5.0' - url: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.1-pyhd8ed1ab_0.conda - hash: - md5: d15917f33140f8d2ac9ca44db7ec8a25 - sha256: 63f95e626754f5e05e74f39c0f4866aa8bd40b933eef336077978d365d66ca7b - category: main - optional: false -- name: pooch - version: 1.8.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - packaging: '>=20.0' - requests: '>=2.19.0' - platformdirs: '>=2.5.0' - url: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.1-pyhd8ed1ab_0.conda - hash: - md5: d15917f33140f8d2ac9ca44db7ec8a25 - sha256: 63f95e626754f5e05e74f39c0f4866aa8bd40b933eef336077978d365d66ca7b - category: main - optional: false -- name: poppler - version: 23.10.0 - manager: conda - platform: linux-64 - dependencies: - cairo: '>=1.18.0,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.15,<3.0a0' - libcurl: '>=8.4.0,<9.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - openjpeg: '>=2.5.0,<3.0a0' - poppler-data: '' - url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.10.0-h590f24d_0.conda - hash: - md5: 06b4a80e2cc3974e55f83e2115e2e90a - sha256: e1d9245454e0b63077f12b6c331f1d2dc7bd3409369e7fd1f38a29e47b76b64a - category: core - optional: true -- name: poppler - version: 23.10.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - cairo: '>=1.18.0,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - gettext: '>=0.21.1,<1.0a0' - lcms2: '>=2.15,<3.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - openjpeg: '>=2.5.0,<3.0a0' - poppler-data: '' - url: https://conda.anaconda.org/conda-forge/osx-64/poppler-23.10.0-hdd5a5e8_0.conda - hash: - md5: 3ba0ca934cf0ce30de692abdc7807419 - sha256: 604803db4148415d2096f9a2cbc29efae2755b9a65715875aeb620d6f2bb03b5 - category: core - optional: true -- name: poppler - version: 23.10.0 - manager: conda - platform: win-64 - dependencies: - cairo: '>=1.18.0,<2.0a0' - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.15,<3.0a0' - libcurl: '>=8.4.0,<9.0a0' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.0,<3.0a0' - poppler-data: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/poppler-23.10.0-hc2f3c52_0.conda - hash: - md5: 3164446cb6dd3fa81b09307cde29778b - sha256: e8ea2bc81cfc913fc2ed641353d7262b0344fa0bff1e1b5a6cca5144c1573ae5 - category: core - optional: true -- name: poppler-data - version: 0.4.12 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda - hash: - md5: d8d7293c5b37f39b2ac32940621c6592 - sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf - category: core - optional: true -- name: poppler-data - version: 0.4.12 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda - hash: - md5: d8d7293c5b37f39b2ac32940621c6592 - sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf - category: core - optional: true -- name: poppler-data - version: 0.4.12 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda - hash: - md5: d8d7293c5b37f39b2ac32940621c6592 - sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf - category: core - optional: true -- name: postgresql - version: '16.2' - manager: conda - platform: linux-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libgcc-ng: '>=12' - libpq: '16.2' - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - readline: '>=8.2,<9.0a0' - tzcode: '' - tzdata: '' - url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.2-h82ecc9d_1.conda - hash: - md5: 7a5806219d0f77ce8393375d040df065 - sha256: 7fc52e69478973f173f055ade6c4087564362be9172c294b493a79671fef9a7e - category: core - optional: true -- name: postgresql - version: '16.2' - manager: conda - platform: osx-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libpq: '16.2' - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - readline: '>=8.2,<9.0a0' - tzcode: '' - tzdata: '' - url: https://conda.anaconda.org/conda-forge/osx-64/postgresql-16.2-h06f2bd8_1.conda - hash: - md5: fe36c4a9254176dde4ca696016c50aa8 - sha256: 2a96af8385c51e97950ed00d802186069bf4933b3be111956508ab6be158d463 - category: core - optional: true -- name: postgresql - version: '16.2' - manager: conda - platform: win-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libpq: '16.2' - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/postgresql-16.2-h94c9ec1_1.conda - hash: - md5: c76ba206e82b0d0dbfc9d6d48b80053b - sha256: 35d632652bc965e5f7b6b4f9f8a36c6c399d1defc2e4f68841f42d5b9a51ee70 - category: core - optional: true -- name: proj - version: 9.3.0 - manager: conda - platform: linux-64 - dependencies: - libcurl: '>=8.4.0,<9.0a0' - libgcc-ng: '>=12' - libsqlite: '>=3.43.2,<4.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - sqlite: '' - url: https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda - hash: - md5: b5e57a0c643da391bef850922963eece - sha256: 252f6c31101719e3d524679e69ae81e6323b93b143e1360169bf50e89386bf24 - category: core - optional: true -- name: proj - version: 9.3.0 - manager: conda - platform: osx-64 - dependencies: - libcurl: '>=8.4.0,<9.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - sqlite: '' - url: https://conda.anaconda.org/conda-forge/osx-64/proj-9.3.0-h23b96cc_2.conda - hash: - md5: 63e960e8c8020936c0b73f23bfed16dd - sha256: e1b0f351103555e0d8ab641aeba4076173c3b7a2f8ed738b43ec66709d51be15 - category: core - optional: true -- name: proj - version: 9.3.0 - manager: conda - platform: win-64 - dependencies: - libcurl: '>=8.4.0,<9.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - sqlite: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/proj-9.3.0-he13c7e8_2.conda - hash: - md5: 4e6d2a06874a1a6cd66e842d29bcd373 - sha256: 67a5d032a0343dc8182ef50221d9ee47edb50d34cd94813e65111901cbbbc6d3 - category: core - optional: true -- name: prometheus_client - version: 0.20.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda - hash: - md5: 9a19b94034dd3abb2b348c8b93388035 - sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 - category: apps - optional: true -- name: prometheus_client - version: 0.20.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda - hash: - md5: 9a19b94034dd3abb2b348c8b93388035 - sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 - category: apps - optional: true -- name: prometheus_client - version: 0.20.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda - hash: - md5: 9a19b94034dd3abb2b348c8b93388035 - sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 - category: apps - optional: true -- name: prompt-toolkit - version: 3.0.42 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - wcwidth: '' - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda - hash: - md5: 0bf64bf10eee21f46ac83c161917fa86 - sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 - category: apps - optional: true -- name: prompt-toolkit - version: 3.0.42 - manager: conda - platform: osx-64 - dependencies: - wcwidth: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda - hash: - md5: 0bf64bf10eee21f46ac83c161917fa86 - sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 - category: apps - optional: true -- name: prompt-toolkit - version: 3.0.42 - manager: conda - platform: win-64 - dependencies: - wcwidth: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda - hash: - md5: 0bf64bf10eee21f46ac83c161917fa86 - sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 - category: apps - optional: true -- name: properties - version: 0.6.1 - manager: conda - platform: linux-64 - dependencies: - numpy: '>=1.7' - python: '' - six: '' - vectormath: '>=0.1.4' - url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 - hash: - md5: 62052fa8409d12536ff149e25b0e9905 - sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 - category: main - optional: false -- name: properties - version: 0.6.1 - manager: conda - platform: osx-64 - dependencies: - python: '' - six: '' - numpy: '>=1.7' - vectormath: '>=0.1.4' - url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 - hash: - md5: 62052fa8409d12536ff149e25b0e9905 - sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 - category: main - optional: false -- name: properties - version: 0.6.1 - manager: conda - platform: win-64 - dependencies: - python: '' - six: '' - numpy: '>=1.7' - vectormath: '>=0.1.4' - url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 - hash: - md5: 62052fa8409d12536ff149e25b0e9905 - sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 - category: main - optional: false -- name: psutil - version: 5.9.8 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda - hash: - md5: bd19b3096442ea342c4a5208379660b1 - sha256: f1866425aa67f3fe1e3f6e07562a4bc986fd487e01146a91eb1bdbe5ec16a836 - category: core - optional: true -- name: psutil - version: 5.9.8 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.8-py310hb372a2b_0.conda - hash: - md5: ec3a8263961880a89f9587670aad5c81 - sha256: 6c52cb3ea7e9e42a9fe2e2ddf9d91093fb13f067982878edc96035601ff477c0 - category: core - optional: true -- name: psutil - version: 5.9.8 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.8-py310h8d17308_0.conda - hash: - md5: f85b83fad1e1c12c212f27039f823138 - sha256: f1ec2d213b2a45831ede5d794eb5c4d5adf072f24d12eb6f07df207bcc9de0fb - category: core - optional: true -- name: pthread-stubs - version: '0.4' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=7.5.0' - url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 - hash: - md5: 22dad4df6e8630e8dff2428f6f6a7036 - sha256: 67c84822f87b641d89df09758da498b2d4558d47b920fd1d3fe6d3a871e000ff - category: main - optional: false -- name: pthread-stubs - version: '0.4' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-hc929b4f_1001.tar.bz2 - hash: - md5: addd19059de62181cd11ae8f4ef26084 - sha256: 6e3900bb241bcdec513d4e7180fe9a19186c1a38f0b4080ed619d26014222c53 - category: main - optional: false -- name: pthread-stubs - version: '0.4' - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - hash: - md5: a1f820480193ea83582b13249a7e7bd9 - sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a - category: main - optional: false -- name: pthreads-win32 - version: 2.9.1 - manager: conda - platform: win-64 - dependencies: - vc: 14.* - url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - hash: - md5: e2da8758d7d51ff6aa78a14dfb9dbed4 - sha256: 576a228630a72f25d255a5e345e5f10878e153221a96560f2498040cd6f54005 - category: main - optional: false -- name: ptyprocess - version: 0.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - hash: - md5: 359eeb6536da0e687af562ed265ec263 - sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a - category: apps - optional: true -- name: ptyprocess - version: 0.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - hash: - md5: 359eeb6536da0e687af562ed265ec263 - sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a - category: apps - optional: true -- name: pulseaudio-client - version: '16.1' - manager: conda - platform: linux-64 - dependencies: - dbus: '>=1.13.6,<2.0a0' - libgcc-ng: '>=12' - libglib: '>=2.76.4,<3.0a0' - libsndfile: '>=1.2.2,<1.3.0a0' - libsystemd0: '>=254' - url: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda - hash: - md5: ac902ff3c1c6d750dd0dfc93a974ab74 - sha256: 9981c70893d95c8cac02e7edd1a9af87f2c8745b772d529f08b7f9dafbe98606 - category: apps - optional: true -- name: pure_eval - version: 0.2.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6784285c7e55cb7212efabc79e4c2883 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - category: apps - optional: true -- name: pure_eval - version: 0.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6784285c7e55cb7212efabc79e4c2883 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - category: apps - optional: true -- name: pure_eval - version: 0.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6784285c7e55cb7212efabc79e4c2883 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - category: apps - optional: true -- name: pycparser - version: '2.22' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - hash: - md5: 844d9eb3b43095b031874477f7d70088 - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - category: apps - optional: true -- name: pycparser - version: '2.22' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - hash: - md5: 844d9eb3b43095b031874477f7d70088 - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - category: apps - optional: true -- name: pycparser - version: '2.22' - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - hash: - md5: 844d9eb3b43095b031874477f7d70088 - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - category: apps - optional: true -- name: pydiso - version: 0.0.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - mkl: '>=2022.1.0,<2023.0a0' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=0.13' - url: https://conda.anaconda.org/conda-forge/linux-64/pydiso-0.0.3-py310h1dd1467_4.tar.bz2 - hash: - md5: 35402d207b798650a58e15f2a12335ef - sha256: 1a81cfce8a9bd81e6b6ed099ef1939ee53fd119dfe11c4169ad2422e245967aa - category: core - optional: true -- name: pydiso - version: 0.0.3 - manager: conda - platform: osx-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=0.13' - url: https://conda.anaconda.org/conda-forge/osx-64/pydiso-0.0.3-py310he105d0e_4.tar.bz2 - hash: - md5: 7ff046827d3ae51bf1d48f1bd6d08c72 - sha256: 7677dc4b61d58309842030b23d4dd9cad8f0cb34c882047d5ef05c7a2467de59 - category: core - optional: true -- name: pydiso - version: 0.0.3 - manager: conda - platform: win-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '>=0.13' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pydiso-0.0.3-py310h847dae0_4.tar.bz2 - hash: - md5: be5580cf9f16fe52820c00c8edc39e15 - sha256: a2d0ef0294fff49ee8e927ecb56562c0ae71f2217cdf8bbe4d574dded0f989d7 - category: core - optional: true -- name: pygments - version: 2.17.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - hash: - md5: 140a7f159396547e9799aa98f9f0742e - sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 - category: apps - optional: true -- name: pygments - version: 2.17.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - hash: - md5: 140a7f159396547e9799aa98f9f0742e - sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 - category: apps - optional: true -- name: pygments - version: 2.17.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - hash: - md5: 140a7f159396547e9799aa98f9f0742e - sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 - category: apps - optional: true -- name: pylint - version: 3.1.0 - manager: conda - platform: linux-64 - dependencies: - astroid: '>=3.1.0,<3.2.0-dev0' - colorama: '>=0.4.5' - dill: '>=0.3.7' - isort: '>=4.2.5,<6,!=5.13.0' - mccabe: '>=0.6,<0.8' - platformdirs: '>=2.2.0' - python: '>=3.8.0' - tomli: '>=1.1.0' - tomlkit: '>=0.10.1' - typing_extensions: '>=3.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3dbc17a1706ec9076c9617136f43762a - sha256: 8b1fd3595f7a29c2aa3a4deb72f6fd5b920904465defc52bf2b73853d8156940 - category: dev - optional: true -- name: pylint - version: 3.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8.0' - tomli: '>=1.1.0' - typing_extensions: '>=3.10.0' - tomlkit: '>=0.10.1' - platformdirs: '>=2.2.0' - colorama: '>=0.4.5' - mccabe: '>=0.6,<0.8' - dill: '>=0.3.7' - isort: '>=4.2.5,<6,!=5.13.0' - astroid: '>=3.1.0,<3.2.0-dev0' - url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3dbc17a1706ec9076c9617136f43762a - sha256: 8b1fd3595f7a29c2aa3a4deb72f6fd5b920904465defc52bf2b73853d8156940 - category: dev - optional: true -- name: pylint - version: 3.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8.0' - tomli: '>=1.1.0' - typing_extensions: '>=3.10.0' - tomlkit: '>=0.10.1' - platformdirs: '>=2.2.0' - colorama: '>=0.4.5' - mccabe: '>=0.6,<0.8' - dill: '>=0.3.7' - isort: '>=4.2.5,<6,!=5.13.0' - astroid: '>=3.1.0,<3.2.0-dev0' - url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3dbc17a1706ec9076c9617136f43762a - sha256: 8b1fd3595f7a29c2aa3a4deb72f6fd5b920904465defc52bf2b73853d8156940 - category: dev - optional: true -- name: pymatsolver - version: 0.2.0 - manager: conda - platform: linux-64 - dependencies: - pydiso: '' - pymatsolver-base: 0.2.0 - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-0.2.0-ha770c72_3.conda - hash: - md5: 71c5698e2f1f19b16164bae528b143ca - sha256: 8d16b3c276ffd5f35890bba6539f3f526cc93061b0320eee2c8d488e7d5089de - category: core - optional: true -- name: pymatsolver - version: 0.2.0 - manager: conda - platform: osx-64 - dependencies: - pydiso: '' - pymatsolver-base: 0.2.0 - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-0.2.0-ha770c72_3.conda - hash: - md5: 71c5698e2f1f19b16164bae528b143ca - sha256: 8d16b3c276ffd5f35890bba6539f3f526cc93061b0320eee2c8d488e7d5089de - category: core - optional: true -- name: pymatsolver - version: 0.2.0 - manager: conda - platform: win-64 - dependencies: - pydiso: '' - pymatsolver-base: 0.2.0 - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-0.2.0-ha770c72_3.conda - hash: - md5: 71c5698e2f1f19b16164bae528b143ca - sha256: 8d16b3c276ffd5f35890bba6539f3f526cc93061b0320eee2c8d488e7d5089de - category: core - optional: true -- name: pymatsolver-base - version: 0.2.0 - manager: conda - platform: linux-64 - dependencies: - numpy: '' - python: '' - scipy: '' - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda - hash: - md5: d3843c2374465a0d1a0eb15cc87669c4 - sha256: d03fd3f24f87d7c07675b15129b6e481485500304e03aae35eb93224e2f757b1 - category: core - optional: true -- name: pymatsolver-base - version: 0.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - numpy: '' - scipy: '' - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda - hash: - md5: d3843c2374465a0d1a0eb15cc87669c4 - sha256: d03fd3f24f87d7c07675b15129b6e481485500304e03aae35eb93224e2f757b1 - category: core - optional: true -- name: pymatsolver-base - version: 0.2.0 - manager: conda - platform: win-64 - dependencies: - python: '' - numpy: '' - scipy: '' - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda - hash: - md5: d3843c2374465a0d1a0eb15cc87669c4 - sha256: d03fd3f24f87d7c07675b15129b6e481485500304e03aae35eb93224e2f757b1 - category: core - optional: true -- name: pyobjc-core - version: '10.2' - manager: conda - platform: osx-64 - dependencies: - libffi: '>=3.4,<4.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - setuptools: '' - url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.2-py310h3674b6a_0.conda - hash: - md5: 273e63c9fb19d911bcc7edd37b11b9a7 - sha256: 7f7702c401ef5dc17de6514c18c2b5ae419225878513e8d4cf924aecca3157d2 - category: apps - optional: true -- name: pyobjc-framework-cocoa - version: '10.2' - manager: conda - platform: osx-64 - dependencies: - libffi: '>=3.4,<4.0a0' - pyobjc-core: 10.2.* - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-10.2-py310h3674b6a_0.conda - hash: - md5: e264c955900b7b2ef577ab572c83339a - sha256: 70e23bb5fb4123fb9652d0cfe951bc914e36299454e2faadf3274ad14070ef7e - category: apps - optional: true -- name: pyparsing - version: 3.1.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - hash: - md5: b9a4dacf97241704529131a0dfc0494f - sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b - category: core - optional: true -- name: pyparsing - version: 3.1.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - hash: - md5: b9a4dacf97241704529131a0dfc0494f - sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b - category: core - optional: true -- name: pyparsing - version: 3.1.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - hash: - md5: b9a4dacf97241704529131a0dfc0494f - sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b - category: core - optional: true -- name: pypng - version: 0.20220715.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pypng-0.20220715.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: cf96bf87b69d217758af7be717c40236 - sha256: 9bd7710a2b361b4956a3c1d94971bce3239b1078dec1e94555bf66179a1d7f11 - category: main - optional: false -- name: pypng - version: 0.20220715.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pypng-0.20220715.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: cf96bf87b69d217758af7be717c40236 - sha256: 9bd7710a2b361b4956a3c1d94971bce3239b1078dec1e94555bf66179a1d7f11 - category: main - optional: false -- name: pypng - version: 0.20220715.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pypng-0.20220715.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: cf96bf87b69d217758af7be717c40236 - sha256: 9bd7710a2b361b4956a3c1d94971bce3239b1078dec1e94555bf66179a1d7f11 - category: main - optional: false -- name: pyqt - version: 5.15.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - pyqt5-sip: 12.12.2 - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda - hash: - md5: f4fe7a6e3d7c78c9de048ea9dda21690 - sha256: 92fe1c9eda6be7879ba798066016c1065047cc13d730105f5109835cbfeae8f1 - category: apps - optional: true -- name: pyqt - version: 5.15.9 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - pyqt5-sip: 12.12.2 - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyqt-5.15.9-py310hecc045f_5.conda - hash: - md5: 65be0f53ea1e58510d4efc62acb1278e - sha256: 5fd2f88f54361cda6e7c3560fd65181f47b7a2ed1235aec1afc469897dd536d7 - category: apps - optional: true -- name: pyqt - version: 5.15.9 - manager: conda - platform: win-64 - dependencies: - pyqt5-sip: 12.12.2 - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyqt-5.15.9-py310h1fd54f2_5.conda - hash: - md5: 5df867d89a0482ea3591fe61f1558781 - sha256: 3aa9660d4b0c2db725bbad77840ac17180c5093617c34aa9467276dbac2d19e4 - category: apps - optional: true -- name: pyqt5-sip - version: 12.12.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - packaging: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - sip: '' - toml: '' - url: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda - hash: - md5: ef5333594a958b25912002886b82b253 - sha256: a6aec078683ed3cf1650b7c47e3f0fe185015d54ea37fe76b9f31f05e1fd087d - category: apps - optional: true -- name: pyqt5-sip - version: 12.12.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - packaging: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - sip: '' - toml: '' - url: https://conda.anaconda.org/conda-forge/osx-64/pyqt5-sip-12.12.2-py310h018f80b_5.conda - hash: - md5: 3a27b0c4dbce2fc393322ecec538b78d - sha256: 2c49ca6fc2700826e8ca7d7f530512daa777ff321298f4ae1b33b05b4c60dd02 - category: apps - optional: true -- name: pyqt5-sip - version: 12.12.2 - manager: conda - platform: win-64 - dependencies: - packaging: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - sip: '' - toml: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyqt5-sip-12.12.2-py310h00ffb61_5.conda - hash: - md5: bf433b3dde7783aed71126051d1a5878 - sha256: 59cc61adf7563005c8d5d305539f3fbddf6fed0298d747cc0a93fba667191411 - category: apps - optional: true -- name: pyqtwebengine - version: 5.15.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - pyqt: '>=5.15.9,<5.16.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - qt-webengine: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyqtwebengine-5.15.9-py310h704022c_5.conda - hash: - md5: 2287e7e91731eab616237397a4fb9079 - sha256: d9f91ad43eb7ec427ad8f6e1137c6fdbc375aa1849986d420594598590219d06 - category: apps - optional: true -- name: pyqtwebengine - version: 5.15.9 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - pyqt: '>=5.15.9,<5.16.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - qt-webengine: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyqtwebengine-5.15.9-py310hc93c43d_5.conda - hash: - md5: ea93fbc6c66b78fed6f0fe7d2411afb5 - sha256: 4241262748beac477026ed666e19d2f841516232d980cb2e42d82d92c0c34055 - category: apps - optional: true -- name: pyqtwebengine - version: 5.15.9 - manager: conda - platform: win-64 - dependencies: - pyqt: '>=5.15.9,<5.16.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - qt-webengine: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyqtwebengine-5.15.9-py310he49db7d_5.conda - hash: - md5: 7a77a2e247d8b386c56976b9bb205823 - sha256: a1a8f9727c48bc65b0984ff312d4b74293ed1051c7b1db4ef88060fd1d2f14a2 - category: apps - optional: true -- name: pyside2 - version: 5.15.8 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libclang13: '>=15.0.7' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.3,<3.0.0a0' - libxslt: '>=1.1.39,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - xcb-util: '>=0.4.0,<0.5.0a0' - xcb-util-image: '>=0.4.0,<0.5.0a0' - xcb-util-keysyms: '>=0.4.0,<0.5.0a0' - xcb-util-renderutil: '>=0.3.9,<0.4.0a0' - xcb-util-wm: '>=0.4.1,<0.5.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - xorg-libsm: '>=1.2.4,<2.0a0' - xorg-libx11: '>=1.8.7,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyside2-5.15.8-py310hffc9498_4.conda - hash: - md5: 538e1179f1c7208d06753a68c3626e99 - sha256: dd8da54d008438d4c4221776023717cc1a5dcff2536fdd1a9982080fcfb17c7b - category: apps - optional: true -- name: pyside2 - version: 5.15.8 - manager: conda - platform: osx-64 - dependencies: - libclang13: '>=15.0.7' - libcxx: '>=14' - libxml2: '>=2.12.3,<3.0.0a0' - libxslt: '>=1.1.39,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyside2-5.15.8-py310h8050119_4.conda - hash: - md5: ba94f3245d92a558019efbc82c0a764e - sha256: 4bcd4b11994a0ac42c25d7838ea17b041157e0e9ef19bc7102fca93648927bbc - category: apps - optional: true -- name: pyside2 - version: 5.15.8 - manager: conda - platform: win-64 - dependencies: - libclang13: '>=15.0.7' - libxml2: '>=2.12.3,<3.0.0a0' - libxslt: '>=1.1.39,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - qt-main: '>=5.15.8,<5.16.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyside2-5.15.8-py310h1e56762_4.conda - hash: - md5: d69462f5c54f28b94d74bcec969cedc0 - sha256: 526374fbd004621400a9509eaf3243a056e77232c0915e10dbfa39bdc2588691 - category: apps - optional: true -- name: pysocks - version: 1.7.1 - manager: conda - platform: linux-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - hash: - md5: 2a7de29fb590ca14b5243c4c812c8025 - sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b - category: main - optional: false -- name: pysocks - version: 1.7.1 - manager: conda - platform: osx-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - hash: - md5: 2a7de29fb590ca14b5243c4c812c8025 - sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b - category: main - optional: false -- name: pysocks - version: 1.7.1 - manager: conda - platform: win-64 - dependencies: - __win: '' - win_inet_pton: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 - hash: - md5: 56cd9fe388baac0e90c7149cfac95b60 - sha256: b3a612bc887f3dd0fb7c4199ad8e342bd148cf69a9b74fd9468a18cf2bef07b7 - category: main - optional: false -- name: pytest - version: 8.1.1 - manager: conda - platform: linux-64 - dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2.0,>=1.4 - python: '>=3.8' - tomli: '>=1' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - hash: - md5: 94ff09cdedcb7b17e9cd5097ee2cfcff - sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 - category: dev - optional: true -- name: pytest - version: 8.1.1 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - colorama: '' - iniconfig: '' - python: '>=3.8' - exceptiongroup: '>=1.0.0rc8' - tomli: '>=1' - pluggy: <2.0,>=1.4 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - hash: - md5: 94ff09cdedcb7b17e9cd5097ee2cfcff - sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 - category: dev - optional: true -- name: pytest - version: 8.1.1 - manager: conda - platform: win-64 - dependencies: - packaging: '' - colorama: '' - iniconfig: '' - python: '>=3.8' - exceptiongroup: '>=1.0.0rc8' - tomli: '>=1' - pluggy: <2.0,>=1.4 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - hash: - md5: 94ff09cdedcb7b17e9cd5097ee2cfcff - sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 - category: dev - optional: true -- name: pytest-cov - version: 5.0.0 - manager: conda - platform: linux-64 - dependencies: - coverage: '>=5.2.1' - pytest: '>=4.6' - python: '>=3.8' - toml: '' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - hash: - md5: c54c0107057d67ddf077751339ec2c63 - sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c - category: dev - optional: true -- name: pytest-cov - version: 5.0.0 - manager: conda - platform: osx-64 - dependencies: - toml: '' - python: '>=3.8' - pytest: '>=4.6' - coverage: '>=5.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - hash: - md5: c54c0107057d67ddf077751339ec2c63 - sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c - category: dev - optional: true -- name: pytest-cov - version: 5.0.0 - manager: conda - platform: win-64 - dependencies: - toml: '' - python: '>=3.8' - pytest: '>=4.6' - coverage: '>=5.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - hash: - md5: c54c0107057d67ddf077751339ec2c63 - sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c - category: dev - optional: true -- name: python - version: 3.10.14 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - ld_impl_linux-64: '>=2.36.1' - libffi: '>=3.4,<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.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' - pip: '' - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.14-hd12c33a_0_cpython.conda - hash: - md5: 2b4ba962994e8bd4be9ff5b64b75aff2 - sha256: 76a5d12e73542678b70a94570f7b0f7763f9a938f77f0e75d9ea615ef22aa84c - category: main - optional: false -- name: python - version: 3.10.14 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.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' - pip: '' - url: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.14-h00d2728_0_cpython.conda - hash: - md5: 0a1cddc4382c5c171e791c70740546dd - sha256: 00c1de2d46ede26609ef4e84a44b83be7876ba6a0215b7c83bff41a0656bf694 - category: main - optional: false -- name: python - version: 3.10.14 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libffi: '>=3.4,<4.0a0' - libsqlite: '>=3.45.2,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - tk: '>=8.6.13,<8.7.0a0' - tzdata: '' - vc: '>=14.1,<15' - vc14_runtime: '>=14.16.27033' - xz: '>=5.2.6,<6.0a0' - pip: '' - url: https://conda.anaconda.org/conda-forge/win-64/python-3.10.14-h4de0772_0_cpython.conda - hash: - md5: 4a00e84f29d1eb418d84970598c444e1 - sha256: 332f97d9927b65857d6d2d4d50d66dce9b37da81edb67833ae6b88ad52acbd0c - category: main - optional: false -- name: python-dateutil - version: 2.9.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - six: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - hash: - md5: 2cf4264fffb9e6eff6031c5b6884d61c - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - category: core - optional: true -- name: python-dateutil - version: 2.9.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - six: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - hash: - md5: 2cf4264fffb9e6eff6031c5b6884d61c - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - category: core - optional: true -- name: python-dateutil - version: 2.9.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - six: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - hash: - md5: 2cf4264fffb9e6eff6031c5b6884d61c - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - category: core - optional: true -- name: python-fastjsonschema - version: 2.19.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda - hash: - md5: 4d3ceee3af4b0f9a1f48f57176bf8625 - sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f - category: apps - optional: true -- name: python-fastjsonschema - version: 2.19.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda - hash: - md5: 4d3ceee3af4b0f9a1f48f57176bf8625 - sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f - category: apps - optional: true -- name: python-fastjsonschema - version: 2.19.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda - hash: - md5: 4d3ceee3af4b0f9a1f48f57176bf8625 - sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f - category: apps - optional: true -- name: python_abi - version: '3.10' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda - hash: - md5: 26322ec5d7712c3ded99dd656142b8ce - sha256: 456bec815bfc2b364763084d08b412fdc4c17eb9ccc66a36cb775fa7ac3cbaec - category: main - optional: false -- name: python_abi - version: '3.10' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.10-4_cp310.conda - hash: - md5: b15c816c5a86abcc4d1458dd63aa4c65 - sha256: abc26b3b5a62f9c8112a2303d24b0c590d5f7fc9470521f5a520472d59c2223e - category: main - optional: false -- name: python_abi - version: '3.10' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-4_cp310.conda - hash: - md5: b41195997c14fb7473d26637ea4c3946 - sha256: 19066c462fd0e32c64503c688f77cb603beb4019b812caf855d03f2a5447960b - category: main - optional: false -- name: pytz - version: '2024.1' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - hash: - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - category: core - optional: true -- name: pytz - version: '2024.1' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - hash: - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - category: core - optional: true -- name: pytz - version: '2024.1' - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - hash: - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - category: core - optional: true -- name: pywavelets - version: 1.4.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda - hash: - md5: be6f0382440ccbf9fb01bb19ab1f1fc0 - sha256: 2aa5da771dd7e4ec8316de51edd7aefcb6f688f7e4d2a2905faac76462826cf7 - category: core - optional: true -- name: pywavelets - version: 1.4.1 - manager: conda - platform: osx-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/pywavelets-1.4.1-py310hf0b6da5_1.conda - hash: - md5: 6606a7e6b981c0dc578c436d3920e8e7 - sha256: e75ecf5d9c68bf2e9fc51982f170bb5a9542c4cb777ac40889dcd29521d61907 - category: core - optional: true -- name: pywavelets - version: 1.4.1 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pywavelets-1.4.1-py310h3e78b6c_1.conda - hash: - md5: 9dfe95c9d95172e888f612aeffcb13a8 - sha256: b31e156a15a8bf86313e0fd0a26ed7beaab823da9604894448e96bd7df53dcd7 - category: core - optional: true -- name: pywin32 - version: '306' - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pywin32-306-py310h00ffb61_2.conda - hash: - md5: a65056c5f52aa83455577958872e4776 - sha256: 24fd15c118974da18c38870380195e633d2452a7fb7dbc0ecb96b44416989b33 - category: apps - optional: true -- name: pywinpty - version: 2.0.13 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - winpty: '' - url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.13-py310h00ffb61_0.conda - hash: - md5: 8f81af709ee7a920f101037dd97bdea9 - sha256: be943bcecf57be5e6856390ef0b160988bca6c4f16742804f3ab9f9423a5e80f - category: apps - optional: true -- name: pyyaml - version: 6.0.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - yaml: '>=0.2.5,<0.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_1.conda - hash: - md5: bb010e368de4940771368bc3dc4c63e7 - sha256: aa78ccddb0a75fa722f0f0eb3537c73ee1219c9dd46cea99d6b9eebfdd780f3d - category: core - optional: true -- name: pyyaml - version: 6.0.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - yaml: '>=0.2.5,<0.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.1-py310h6729b98_1.conda - hash: - md5: d964cec3e7972e44bc4a328134b9eaf1 - sha256: 00567f2cb2d1c8fede8fe7727f7bbd1c38cbca886814d612e162d5c936d8db1b - category: core - optional: true -- name: pyyaml - version: 6.0.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - yaml: '>=0.2.5,<0.3.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.1-py310h8d17308_1.conda - hash: - md5: ce279186f68d0f12812dc9955ea909a4 - sha256: ea51291e477b44c5bb9d91cc095db0dfe07b9576831e9682100d68c820c43ae3 - category: core - optional: true -- name: pyzmq - version: 24.0.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libsodium: '>=1.0.18,<1.0.19.0a0' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - zeromq: '>=4.3.4,<4.4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py310h330234f_1.tar.bz2 - hash: - md5: 527a1e6cb07b5c19563131af9fca3835 - sha256: db9849f6cbf4f4377dd79da1354b0adf795aea6536cdaff9e034d8b25e721def - category: apps - optional: true -- name: pyzmq - version: 24.0.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.4' - libsodium: '>=1.0.18,<1.0.19.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - zeromq: '>=4.3.4,<4.4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyzmq-24.0.1-py310hf615a82_1.tar.bz2 - hash: - md5: 37780d9e5fb65a36eb94ef47a0f8b862 - sha256: c233600245fcd3b5c7f762a562ee9d4a90f4177336036c11a5533c0d722e10b4 - category: apps - optional: true -- name: pyzmq - version: 24.0.1 - manager: conda - platform: win-64 - dependencies: - libsodium: '>=1.0.18,<1.0.19.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - zeromq: '>=4.3.4,<4.3.5.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/pyzmq-24.0.1-py310hcd737a0_1.tar.bz2 - hash: - md5: f475f6fb2ebae89e1126aba220f37fff - sha256: a71af303a6f52ccfe06a97073a4a3cc9e82858f127a25b17262ec38b196de218 - category: apps - optional: true -- name: qt-main - version: 5.15.8 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - alsa-lib: '>=1.2.10,<1.3.0.0a0' - dbus: '>=1.13.6,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - harfbuzz: '>=8.2.1,<9.0a0' - icu: '>=73.2,<74.0a0' - krb5: '>=1.21.2,<1.22.0a0' - libclang: '>=15.0.7,<16.0a0' - libclang13: '>=15.0.7' - libcups: '>=2.3.3,<2.4.0a0' - libevent: '>=2.1.12,<2.1.13.0a0' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libstdcxx-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - libxkbcommon: '>=1.6.0,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-libs: '>=8.0.33,<8.1.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - openssl: '>=3.1.3,<4.0a0' - pulseaudio-client: '>=16.1,<16.2.0a0' - xcb-util: '>=0.4.0,<0.5.0a0' - xcb-util-image: '>=0.4.0,<0.5.0a0' - xcb-util-keysyms: '>=0.4.0,<0.5.0a0' - xcb-util-renderutil: '>=0.3.9,<0.4.0a0' - xcb-util-wm: '>=0.4.1,<0.5.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - xorg-libsm: '>=1.2.4,<2.0a0' - xorg-libx11: '>=1.8.6,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-xf86vidmodeproto: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda - hash: - md5: 4f01e33dbb406085a16a2813ab067e95 - sha256: 4c3d2b37b00a0a84b9674e88b636e10817ae2c23f5af27bbe77cf4f46f3a4225 - category: apps - optional: true -- name: qt-main - version: 5.15.8 - manager: conda - platform: osx-64 - dependencies: - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - icu: '>=73.2,<74.0a0' - krb5: '>=1.21.2,<1.22.0a0' - libclang: '>=15.0.7,<16.0a0' - libclang13: '>=15.0.7' - libcxx: '>=15.0.7' - libglib: '>=2.78.0,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-libs: '>=8.0.33,<8.1.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/qt-main-5.15.8-h4385fff_17.conda - hash: - md5: b8e8ef73d0e4e7edfe622eebefb989c5 - sha256: f13d99e88c9f1debf421607d4aac4ddd3c994019a2a86f3e6b08c50896f4136f - category: apps - optional: true -- name: qt-main - version: 5.15.8 - manager: conda - platform: win-64 - dependencies: - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - icu: '>=73.2,<74.0a0' - krb5: '>=1.21.2,<1.22.0a0' - libclang: '>=15.0.7,<16.0a0' - libclang13: '>=15.0.7' - libglib: '>=2.78.0,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.3,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/qt-main-5.15.8-h9e85ed6_17.conda - hash: - md5: 568b134e26f3e2a44ff24028c27b8c0e - sha256: ca624ec9c0d07d2c61b7007661b10111c2f3bb38bcc6175a459f4a5180a5748d - category: apps - optional: true -- name: qt-webengine - version: 5.15.8 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - alsa-lib: '>=1.2.10,<1.3.0.0a0' - dbus: '>=1.13.6,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - harfbuzz: '>=8.2.1,<9.0a0' - libcups: '>=2.3.3,<2.4.0a0' - libevent: '>=2.1.12,<2.1.13.0a0' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libopus: '>=1.3.1,<2.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.44.0,<4.0a0' - libstdcxx-ng: '>=12' - libwebp: '' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libxkbcommon: '>=1.6.0,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - pulseaudio-client: '>=16.1,<16.2.0a0' - qt-main: '>=5.15.8,<5.16.0a0' - xorg-libx11: '>=1.8.7,<2.0a0' - xorg-libxcomposite: '' - xorg-libxdamage: '' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-libxfixes: '' - xorg-libxrandr: '' - xorg-libxrender: '>=0.9.11,<0.10.0a0' - xorg-libxtst: '' - url: https://conda.anaconda.org/conda-forge/linux-64/qt-webengine-5.15.8-h75ea521_4.conda - hash: - md5: b4dceacc13fa80ceeb1e721a4e8b5445 - sha256: 9d702f311bf3b8e81e1e8c46263ee4900afdf25ad61c08e8f0cc58d5099d0acb - category: apps - optional: true -- name: qt-webengine - version: 5.15.8 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - libcxx: '>=15.0.7' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.44.0,<4.0a0' - libwebp: '' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - qt-main: '>=5.15.8,<5.16.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/qt-webengine-5.15.8-h5f65913_4.conda - hash: - md5: ea76340e48eef9328057f4d337669593 - sha256: 19d5c32af07a49d2bbb15eff2e2e5c6285c292f1e8cd444f4e6d114e49abf672 - category: apps - optional: true -- name: qt-webengine - version: 5.15.8 - manager: conda - platform: win-64 - dependencies: - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.44.0,<4.0a0' - libwebp: '' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - qt-main: '>=5.15.8,<5.16.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/qt-webengine-5.15.8-h4bf5c4e_4.tar.bz2 - hash: - md5: e080e2c05baf3821dc1272537d3df48a - sha256: f8eba85995ba7557227a0f87cd3dbfc72ab763cb48c4a6b0e79715804b89fb93 - category: apps - optional: true -- name: re2 - version: 2023.09.01 - manager: conda - platform: linux-64 - dependencies: - libre2-11: 2023.09.01 - url: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_1.conda - hash: - md5: 30c0f66cbc5927a12662acf94067e780 - sha256: b8f9e366f02c559587327f0cd7fa45c5c399b4025f2c9e1aa292bb7cbe1482c0 - category: core - optional: true -- name: re2 - version: 2023.09.01 - manager: conda - platform: osx-64 - dependencies: - libre2-11: 2023.09.01 - url: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.09.01-hb168e87_1.conda - hash: - md5: 81ce9e6ddc1c123aecc59234aa12d3b1 - sha256: e8c9d1fc5c254573bd46e46e4cc4dea6d6101d353ea54081f682438f815e224a - category: core - optional: true -- name: re2 - version: 2023.09.01 - manager: conda - platform: win-64 - dependencies: - libre2-11: 2023.09.01 - url: https://conda.anaconda.org/conda-forge/win-64/re2-2023.09.01-hd3b24a8_1.conda - hash: - md5: 4719b3240cb299de27527f5a1cc0af23 - sha256: 5e7b1aa9ede7778c6b1a52c907b294a1908ac1adfb3ea3c8bb07f5d23f6ebf55 - category: core - optional: true -- name: readline - version: '8.2' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - ncurses: '>=6.3,<7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - hash: - md5: 47d31b792659ce70f470b5c82fdfb7a4 - sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 - category: main - optional: false -- name: readline - version: '8.2' - manager: conda - platform: osx-64 - dependencies: - ncurses: '>=6.3,<7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - hash: - md5: f17f77f2acf4d344734bda76829ce14e - sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568 - category: main - optional: false -- name: referencing - version: 0.34.0 - manager: conda - platform: linux-64 - dependencies: - attrs: '>=22.2.0' - python: '>=3.8' - rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda - hash: - md5: e4492c22e314be5c75db3469e3bbf3d9 - sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672 - category: apps - optional: true -- name: referencing - version: 0.34.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda - hash: - md5: e4492c22e314be5c75db3469e3bbf3d9 - sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672 - category: apps - optional: true -- name: referencing - version: 0.34.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda - hash: - md5: e4492c22e314be5c75db3469e3bbf3d9 - sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672 - category: apps - optional: true -- name: requests - version: 2.31.0 - manager: conda - platform: linux-64 - dependencies: - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - idna: '>=2.5,<4' - python: '>=3.7' - urllib3: '>=1.21.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - category: main - optional: false -- name: requests - version: 2.31.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - idna: '>=2.5,<4' - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - urllib3: '>=1.21.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - category: main - optional: false -- name: requests - version: 2.31.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - idna: '>=2.5,<4' - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - urllib3: '>=1.21.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - category: main - optional: false -- name: retrying - version: 1.3.3 - manager: conda - platform: linux-64 - dependencies: - python: '' - six: '>=1.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2 - hash: - md5: a11f356d6f93b74b4a84e9501afd48b4 - sha256: ef407b88c45171f41eadcbbcfd41243cb137fe7438fc18f4cd08181c522664cf - category: apps - optional: true -- name: retrying - version: 1.3.3 - manager: conda - platform: osx-64 - dependencies: - python: '' - six: '>=1.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2 - hash: - md5: a11f356d6f93b74b4a84e9501afd48b4 - sha256: ef407b88c45171f41eadcbbcfd41243cb137fe7438fc18f4cd08181c522664cf - category: apps - optional: true -- name: retrying - version: 1.3.3 - manager: conda - platform: win-64 - dependencies: - python: '' - six: '>=1.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2 - hash: - md5: a11f356d6f93b74b4a84e9501afd48b4 - sha256: ef407b88c45171f41eadcbbcfd41243cb137fe7438fc18f4cd08181c522664cf - category: apps - optional: true -- name: rpds-py - version: 0.18.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.18.0-py310hcb5633a_0.conda - hash: - md5: eca3962963d1de0a4d13572ba943b61d - sha256: 180f734f14402a3605cc0d0a70dd52539c87ba76337da6eb73ebf603c8405c6b - category: apps - optional: true -- name: rpds-py - version: 0.18.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.18.0-py310h54baaa9_0.conda - hash: - md5: f8dfcbe1b680ecd6789f5b811df2559c - sha256: 06a0f78a6e01c2b1e317fc8e9090c342b592bb377c6ee0ebe048aafe0e186755 - category: apps - optional: true -- name: rpds-py - version: 0.18.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.18.0-py310h87d50f1_0.conda - hash: - md5: 271cf897747ab1b8ec17ee9659c073ea - sha256: 0227043dc8a9d5f737c36f7653f9b4476e47e0c60c7e67012dd72fe5a7842fb4 - category: apps - optional: true -- name: scikit-image - version: 0.19.3 - manager: conda - platform: linux-64 - dependencies: - cloudpickle: '>=0.2.1' - cytoolz: '>=0.7.3' - dask-core: '>=1.0.0,!=2.17.0' - imageio: '>=2.3.0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - networkx: '>=2.2' - numpy: '>=1.21.6,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.1.0,!=7.1.0,!=7.1.1,!=8.3.0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - pywavelets: '>=1.1.1' - scipy: '>=1.4.1' - tifffile: '>=2019.7.26' - toolz: '>=0.7.3' - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2 - hash: - md5: c0391107b0cd0010708d6969ed759e8b - sha256: 42943f4eb3fc0ae3207bcebfded7cd2e673746795f945918e0d6c33a2c79f5e4 - category: core - optional: true -- name: scikit-image - version: 0.19.3 - manager: conda - platform: osx-64 - dependencies: - cloudpickle: '>=0.2.1' - cytoolz: '>=0.7.3' - dask-core: '>=1.0.0,!=2.17.0' - imageio: '>=2.3.0' - libcxx: '>=14.0.4' - networkx: '>=2.2' - numpy: '>=1.21.6,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.1.0,!=7.1.0,!=7.1.1,!=8.3.0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - pywavelets: '>=1.1.1' - scipy: '>=1.4.1' - tifffile: '>=2019.7.26' - toolz: '>=0.7.3' - url: https://conda.anaconda.org/conda-forge/osx-64/scikit-image-0.19.3-py310hecf8f37_2.tar.bz2 - hash: - md5: 6eb6f809f702cf10ce98c33050b86835 - sha256: 8e8974eb97d106bdcfd9d832a87e9072b2695f539265cf873037142eccdbb66e - category: core - optional: true -- name: scikit-image - version: 0.19.3 - manager: conda - platform: win-64 - dependencies: - cloudpickle: '>=0.2.1' - cytoolz: '>=0.7.3' - dask-core: '>=1.0.0,!=2.17.0' - imageio: '>=2.3.0' - networkx: '>=2.2' - numpy: '>=1.21.6,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.1.0,!=7.1.0,!=7.1.1,!=8.3.0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - pywavelets: '>=1.1.1' - scipy: '>=1.4.1' - tifffile: '>=2019.7.26' - toolz: '>=0.7.3' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/scikit-image-0.19.3-py310h1c4a608_2.tar.bz2 - hash: - md5: 99759a602e6fdb8d5666b5d459801706 - sha256: ef267bf8909d2198c6fb192079721abfea3042eca025cf9acda606f4e3d90e95 - category: core - optional: true -- name: scikit-learn - version: 1.2.2 - manager: conda - platform: linux-64 - dependencies: - _openmp_mutex: '>=4.5' - joblib: '>=1.1.1' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '' - threadpoolctl: '>=2.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.2.2-py310hf7d194e_2.conda - hash: - md5: 3cf893d2023a57c33cb915db6916f5a2 - sha256: 8a941f64cb9c6b2c92b7b733559fddb785cf3301678957c5ddbe7375a703f7f0 - category: core - optional: true -- name: scikit-learn - version: 1.2.2 - manager: conda - platform: osx-64 - dependencies: - joblib: '>=1.1.1' - libcxx: '>=15.0.7' - llvm-openmp: '>=15.0.7' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '' - threadpoolctl: '>=2.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.2.2-py310hd2c063c_2.conda - hash: - md5: 615cba8f1e62efcbc4dff7c4d9bcc839 - sha256: 80aad23e0aef857bfc3103277339d23f4e1cf349f7f8b808b814e61a4dab09a3 - category: core - optional: true -- name: scikit-learn - version: 1.2.2 - manager: conda - platform: win-64 - dependencies: - joblib: '>=1.1.1' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - scipy: '' - threadpoolctl: '>=2.0.0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.2.2-py310hd266714_2.conda - hash: - md5: 870d7a73bf457815e6c3857d67727d8b - sha256: db83db7cafdd281cadea1b80f42d232b3ebf233938cf169fbd0f49bf9ff1f93c - category: core - optional: true -- name: scipy - version: 1.10.1 - manager: conda - platform: linux-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=12.2.0' - liblapack: '>=3.9.0,<4.0a0' - libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' - pooch: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py310ha4c1d20_3.conda - hash: - md5: 0414d57832172f3cdcf56b5f053e177d - sha256: c7beb091db82a1be2fa9dafb878695b1e8bd6d7efe7764afa457cabfea2a93d3 - category: main - optional: false -- name: scipy - version: 1.10.1 - manager: conda - platform: osx-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libcxx: '>=15.0.7' - libgfortran: 5.* - libgfortran5: '>=12.2.0' - liblapack: '>=3.9.0,<4.0a0' - numpy: '>=1.21.6,<2.0a0' - pooch: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.10.1-py310h3900cf1_3.conda - hash: - md5: 02fb6b5a4f5a89fecae4a11d6bc4a0b1 - sha256: acd91344a5d775679463189d5e290fb65dbb4eed6d3b99916873e2e7f8683e51 - category: main - optional: false -- name: scipy - version: 1.10.1 - manager: conda - platform: win-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - liblapack: '>=3.9.0,<4.0a0' - m2w64-gcc-libs: '' - m2w64-gcc-libs-core: '' - numpy: '>=1.21.6,<2.0a0' - pooch: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.10.1-py310h578b7cb_3.conda - hash: - md5: d44c1bad75bb3e4d40066b3d3dd718ed - sha256: 4a02b93fae869bc4e188aa808b1bed276dd7c06450b85bbb964d102ffc940184 - category: main - optional: false -- name: semver - version: 3.0.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5efb3fccda53974aed800b6d575f72ed - sha256: 1cd164b2e80ea011b9272a66cc356773086885c447d6f62fed5f30f99bda3cb3 - category: main - optional: false -- name: semver - version: 3.0.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5efb3fccda53974aed800b6d575f72ed - sha256: 1cd164b2e80ea011b9272a66cc356773086885c447d6f62fed5f30f99bda3cb3 - category: main - optional: false -- name: semver - version: 3.0.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5efb3fccda53974aed800b6d575f72ed - sha256: 1cd164b2e80ea011b9272a66cc356773086885c447d6f62fed5f30f99bda3cb3 - category: main - optional: false -- name: send2trash - version: 1.8.3 - manager: conda - platform: linux-64 - dependencies: - __linux: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda - hash: - md5: 778594b20097b5a948c59e50ae42482a - sha256: c4401b071e86ddfa0ea4f34b85308db2516b6aeca50053535996864cfdee7b3f - category: apps - optional: true -- name: send2trash - version: 1.8.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '' - pyobjc-framework-cocoa: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda - hash: - md5: c3cb67fc72fb38020fe7923dbbcf69b0 - sha256: f911307db932c92510da6c3c15b461aef935720776643a1fbf3683f61001068b - category: apps - optional: true -- name: send2trash - version: 1.8.3 - manager: conda - platform: win-64 - dependencies: - __win: '' - pywin32: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda - hash: - md5: 5a86a21050ca3831ec7f77fb302f1132 - sha256: d8aa230501a33250af2deee03006a2579f0335e7240a9c7286834788dcdcfaa8 - category: apps - optional: true -- name: setuptools - version: 69.5.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda - hash: - md5: 7462280d81f639363e6e63c81276bd9e - sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7 - category: main - optional: false -- name: setuptools - version: 69.5.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda - hash: - md5: 7462280d81f639363e6e63c81276bd9e - sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7 - category: main - optional: false -- name: setuptools - version: 69.5.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda - hash: - md5: 7462280d81f639363e6e63c81276bd9e - sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7 - category: main - optional: false -- name: shapely - version: 2.0.2 - manager: conda - platform: linux-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py310h7dcad9a_0.conda - hash: - md5: 0d7c35fe5cc1f436e368ddd500deb979 - sha256: dc45ce90e8ebbd7074c05e4003614422ea14de83527582bb2728292a69173615 - category: core - optional: true -- name: shapely - version: 2.0.2 - manager: conda - platform: osx-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.0.2-py310hcbf9397_0.conda - hash: - md5: 4db225079fdfe3fe81cc017fb184fd90 - sha256: 6da8b59be0821b741bcbb4abc606843e5df660c49aff21aa9b8a95550f476a01 - category: core - optional: true -- name: shapely - version: 2.0.2 - manager: conda - platform: win-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/shapely-2.0.2-py310h839b4a8_0.conda - hash: - md5: fccafb1aec64a793deb7de374ab3f760 - sha256: 9eeedc0fc8f45c1ff4b196c8e9efdd408578346d246905ba371e1710176167d4 - category: core - optional: true -- name: sip - version: 6.7.12 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - packaging: '' - ply: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda - hash: - md5: 68d5bfccaba2d89a7812098dd3966d9b - sha256: 4c350a7ed9f5fd98196a50bc74ce1dc3bb05b0c90d17ea120439755fe2075796 - category: apps - optional: true -- name: sip - version: 6.7.12 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - packaging: '' - ply: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/osx-64/sip-6.7.12-py310had63691_0.conda - hash: - md5: eaeef8f131a49dc1dba755c7a71b3878 - sha256: a8d0f356f553f5f8582a039c089dd4bbe66cefc959b91c15bae475e9c9ea4dd2 - category: apps - optional: true -- name: sip - version: 6.7.12 - manager: conda - platform: win-64 - dependencies: - packaging: '' - ply: '' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - tomli: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/sip-6.7.12-py310h00ffb61_0.conda - hash: - md5: 882ddccbb0d5c47da05eb35ec4813c16 - sha256: 159f95e125ff48fa84cfbff8ef7ccfe14b6960df108b6c1d3472d0248bb07781 - category: apps - optional: true -- name: six - version: 1.16.0 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - hash: - md5: e5f25f8dbc060e9a8d912e432202afc2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - category: main - optional: false -- name: six - version: 1.16.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - hash: - md5: e5f25f8dbc060e9a8d912e432202afc2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - category: main - optional: false -- name: six - version: 1.16.0 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - hash: - md5: e5f25f8dbc060e9a8d912e432202afc2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - category: main - optional: false -- name: snappy - version: 1.2.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.0-hdb0a2a9_1.conda - hash: - md5: 843bbb8ace1d64ac50d64639ff38b014 - sha256: bb87116b8c6198f6979b3d212e9af12e08e12f2bf09970d0f9b4582607648b22 - category: core - optional: true -- name: snappy - version: 1.2.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.0-h6dc393e_1.conda - hash: - md5: 9c322ec36340610fcf213b72999b049e - sha256: dc2abe5f45859263c36d287d0d6212e83a3552ef19faf98194d32e70d755d648 - category: core - optional: true -- name: snappy - version: 1.2.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.0-hfb803bf_1.conda - hash: - md5: a419bf04a7c76a46639e315ac1b8bf72 - sha256: de02a222071d6a832ad3b790c8c977725161ad430ec694fd7b35769b6e1104b4 - category: core - optional: true -- name: sniffio - version: 1.3.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - hash: - md5: 490730480d76cf9c8f8f2849719c6e2b - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - category: apps - optional: true -- name: sniffio - version: 1.3.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - hash: - md5: 490730480d76cf9c8f8f2849719c6e2b - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - category: apps - optional: true -- name: sniffio - version: 1.3.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - hash: - md5: 490730480d76cf9c8f8f2849719c6e2b - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - category: apps - optional: true -- name: sortedcontainers - version: 2.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6d6552722448103793743dabfbda532d - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - category: core - optional: true -- name: sortedcontainers - version: 2.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6d6552722448103793743dabfbda532d - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - category: core - optional: true -- name: sortedcontainers - version: 2.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6d6552722448103793743dabfbda532d - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - category: core - optional: true -- name: soupsieve - version: '2.5' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - hash: - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - category: apps - optional: true -- name: soupsieve - version: '2.5' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - hash: - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - category: apps - optional: true -- name: soupsieve - version: '2.5' - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - hash: - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - category: apps - optional: true -- name: sqlite - version: 3.45.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libsqlite: 3.45.3 - libzlib: '>=1.2.13,<1.3.0a0' - ncurses: '>=6.4.20240210,<7.0a0' - readline: '>=8.2,<9.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.45.3-h2c6b66d_0.conda - hash: - md5: be7d70f2db41b674733667bdd69bd000 - sha256: 945ac702e2bd8cc59cc780dfc37c18255d5e538c8433dc290c0edbad2bcbaeb4 - category: core - optional: true -- name: sqlite - version: 3.45.3 - manager: conda - platform: osx-64 - dependencies: - libsqlite: 3.45.3 - libzlib: '>=1.2.13,<1.3.0a0' - ncurses: '>=6.4.20240210,<7.0a0' - readline: '>=8.2,<9.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.45.3-h7461747_0.conda - hash: - md5: 4d9a56087e6150e84b94087a8c0fdf98 - sha256: 73ab284ff41dd6aeb69f7a8a014018fbf8b019fd261ff4190fd5813b62d07b16 - category: core - optional: true -- name: sqlite - version: 3.45.3 - manager: conda - platform: win-64 - dependencies: - libsqlite: 3.45.3 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.45.3-hcfcfb64_0.conda - hash: - md5: ef090bf29a90a1371888385e405a3a6f - sha256: 9815ad33780f8679d21507ffd6e12184da47eab7b945b2e5df35e8af686aafe6 - category: core - optional: true -- name: stack_data - version: 0.6.2 - manager: conda - platform: linux-64 - dependencies: - asttokens: '' - executing: '' - pure_eval: '' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - hash: - md5: e7df0fdd404616638df5ece6e69ba7af - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - category: apps - optional: true -- name: stack_data - version: 0.6.2 - manager: conda - platform: osx-64 - dependencies: - asttokens: '' - executing: '' - pure_eval: '' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - hash: - md5: e7df0fdd404616638df5ece6e69ba7af - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - category: apps - optional: true -- name: stack_data - version: 0.6.2 - manager: conda - platform: win-64 - dependencies: - asttokens: '' - executing: '' - pure_eval: '' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - hash: - md5: e7df0fdd404616638df5ece6e69ba7af - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - category: apps - optional: true -- name: tbb - version: 2021.12.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libhwloc: '>=2.10.0,<2.10.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h00ab1b0_0.conda - hash: - md5: f1b776cff1b426e7e7461a8502a3b731 - sha256: 0b48f402e18f293e3c7a4c4e391ed2523f173bdec86aa42658db787196eb27ca - category: main - optional: false -- name: tbb - version: 2021.12.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libhwloc: '>=2.10.0,<2.10.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/tbb-2021.12.0-h7728843_0.conda - hash: - md5: e4fb6f4700d8890c36cbf317c2c6d0cb - sha256: 6068f814461eeb4ba68ded3d97bbe444d2909b469c51598c40734004b2c3b765 - category: main - optional: false -- name: tbb - version: 2021.12.0 - manager: conda - platform: win-64 - dependencies: - libhwloc: '>=2.10.0,<2.10.1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.12.0-h91493d7_0.conda - hash: - md5: 21745fdd12f01b41178596143cbecffd - sha256: 621926aae93513408bdca3dd21c97e2aa8ba7dcd2c400dab804fb0ce7da1387b - category: main - optional: false -- name: tblib - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 04eedddeb68ad39871c8127dd1c21f4f - sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a - category: core - optional: true -- name: tblib - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 04eedddeb68ad39871c8127dd1c21f4f - sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a - category: core - optional: true -- name: tblib - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 04eedddeb68ad39871c8127dd1c21f4f - sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a - category: core - optional: true -- name: tenacity - version: 8.2.3 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - hash: - md5: 1482e77f87c6a702a7e05ef22c9b197b - sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 - category: apps - optional: true -- name: tenacity - version: 8.2.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - hash: - md5: 1482e77f87c6a702a7e05ef22c9b197b - sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 - category: apps - optional: true -- name: tenacity - version: 8.2.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - hash: - md5: 1482e77f87c6a702a7e05ef22c9b197b - sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 - category: apps - optional: true -- name: terminado - version: 0.18.1 - manager: conda - platform: linux-64 - dependencies: - __linux: '' - ptyprocess: '' - python: '>=3.8' - tornado: '>=6.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda - hash: - md5: efba281bbdae5f6b0a1d53c6d4a97c93 - sha256: b300557c0382478cf661ddb520263508e4b3b5871b471410450ef2846e8c352c - category: apps - optional: true -- name: terminado - version: 0.18.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '' - ptyprocess: '' - python: '>=3.8' - tornado: '>=6.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda - hash: - md5: 00b54981b923f5aefcd5e8547de056d5 - sha256: 4daae56fc8da17784578fbdd064f17e3b3076b394730a14119e571707568dc8a - category: apps - optional: true -- name: terminado - version: 0.18.1 - manager: conda - platform: win-64 - dependencies: - __win: '' - python: '>=3.8' - tornado: '>=6.1.0' - pywinpty: '>=1.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda - hash: - md5: 4abd500577430a942a995fd0d09b76a2 - sha256: 8cb078291fd7882904e3de594d299c8de16dd3af7405787fce6919a385cfc238 - category: apps - optional: true -- name: threadpoolctl - version: 3.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda - hash: - md5: b296278eef667c673bf51de6535bad88 - sha256: 4f4ad4f2a4ee8875cf2cb9c80abf4c7383e5e53cfec41104da7058569d9063b7 - category: core - optional: true -- name: threadpoolctl - version: 3.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda - hash: - md5: b296278eef667c673bf51de6535bad88 - sha256: 4f4ad4f2a4ee8875cf2cb9c80abf4c7383e5e53cfec41104da7058569d9063b7 - category: core - optional: true -- name: threadpoolctl - version: 3.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda - hash: - md5: b296278eef667c673bf51de6535bad88 - sha256: 4f4ad4f2a4ee8875cf2cb9c80abf4c7383e5e53cfec41104da7058569d9063b7 - category: core - optional: true -- name: tifffile - version: 2020.6.3 - manager: conda - platform: linux-64 - dependencies: - imagecodecs-lite: '>=2019.4.20' - numpy: '>=1.15.1' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2 - hash: - md5: 1fb771bb25b2eecbc73abf5143fa35bd - sha256: 333d6882dd0913196b6e486650416cf4e26dc3d6f28260e56be5ba656770ee83 - category: core - optional: true -- name: tifffile - version: 2020.6.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - numpy: '>=1.15.1' - imagecodecs-lite: '>=2019.4.20' - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2 - hash: - md5: 1fb771bb25b2eecbc73abf5143fa35bd - sha256: 333d6882dd0913196b6e486650416cf4e26dc3d6f28260e56be5ba656770ee83 - category: core - optional: true -- name: tifffile - version: 2020.6.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - numpy: '>=1.15.1' - imagecodecs-lite: '>=2019.4.20' - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2 - hash: - md5: 1fb771bb25b2eecbc73abf5143fa35bd - sha256: 333d6882dd0913196b6e486650416cf4e26dc3d6f28260e56be5ba656770ee83 - category: core - optional: true -- name: tiledb - version: 2.16.3 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libabseil: '>=20230802.0,<20230803.0a0' - libgcc-ng: '>=12' - libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libstdcxx-ng: '>=12' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda - hash: - md5: 7de728789b0aba16018f726dc5ddbec2 - sha256: f021df4b9cfd1a54aac87a6c0bac604edc8ffb36d5b2c4aa20bf2d759ae04a11 - category: core - optional: true -- name: tiledb - version: 2.16.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - bzip2: '>=1.0.8,<2.0a0' - libabseil: '>=20230802.0,<20230803.0a0' - libcxx: '>=15.0.7' - libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/tiledb-2.16.3-hd3a41d5_3.conda - hash: - md5: 53c2d2746f21a60d0c498c36fb32ec56 - sha256: 9144ad40adb982107dd4f5084d1e488b216025eed91a3feeb3506ee4d5bc98dd - category: core - optional: true -- name: tiledb - version: 2.16.3 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libabseil: '>=20230802.0,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.2.1,<9.0a0' - libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/tiledb-2.16.3-hbf04793_3.conda - hash: - md5: 3afaf8882d4568eb9c91870102af1b37 - sha256: 4de5494be2ee102d15077bebc63d17422c40dc8d634097136a9a202a3930e502 - category: core - optional: true -- name: tinycss2 - version: 1.2.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - webencodings: '>=0.4' - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7234c9eefff659501cd2fe0d2ede4d48 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - category: apps - optional: true -- name: tinycss2 - version: 1.2.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - webencodings: '>=0.4' - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7234c9eefff659501cd2fe0d2ede4d48 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - category: apps - optional: true -- name: tinycss2 - version: 1.2.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - webencodings: '>=0.4' - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7234c9eefff659501cd2fe0d2ede4d48 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - category: apps - optional: true -- name: tk - version: 8.6.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - hash: - md5: d453b98d9c83e71da0741bb0ff4d76bc - sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e - category: main - optional: false -- name: tk - version: 8.6.13 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - hash: - md5: bf830ba5afc507c6232d4ef0fb1a882d - sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 - category: main - optional: false -- name: tk - version: 8.6.13 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - hash: - md5: fc048363eb8f03cd1737600a5d08aafe - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 - category: main - optional: false -- name: toml - version: 0.10.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: f832c45a477c78bebd107098db465095 - sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 - category: dev - optional: true -- name: toml - version: 0.10.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: f832c45a477c78bebd107098db465095 - sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 - category: dev - optional: true -- name: toml - version: 0.10.2 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: f832c45a477c78bebd107098db465095 - sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 - category: dev - optional: true -- name: tomli - version: 2.0.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 5844808ffab9ebdb694585b50ba02a96 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - category: dev - optional: true -- name: tomli - version: 2.0.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 5844808ffab9ebdb694585b50ba02a96 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - category: dev - optional: true -- name: tomli - version: 2.0.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 5844808ffab9ebdb694585b50ba02a96 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - category: dev - optional: true -- name: tomlkit - version: 0.12.4 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda - hash: - md5: 37c47ea93ef00dd80d880fc4ba21256a - sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18 - category: dev - optional: true -- name: tomlkit - version: 0.12.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda - hash: - md5: 37c47ea93ef00dd80d880fc4ba21256a - sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18 - category: dev - optional: true -- name: tomlkit - version: 0.12.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda - hash: - md5: 37c47ea93ef00dd80d880fc4ba21256a - sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18 - category: dev - optional: true -- name: toolz - version: 0.12.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 2fcb582444635e2c402e8569bb94e039 - sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6 - category: core - optional: true -- name: toolz - version: 0.12.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 2fcb582444635e2c402e8569bb94e039 - sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6 - category: core - optional: true -- name: toolz - version: 0.12.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 2fcb582444635e2c402e8569bb94e039 - sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6 - category: core - optional: true -- name: tornado - version: '6.1' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=10.3.0' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.1-py310h5764c6d_3.tar.bz2 - hash: - md5: 8a5770e6392d29d99c9bc9c3635bba60 - sha256: 67347d4755ffbb969e581f9c0d7210490142aa7cfec15ff421b499c6dcf162aa - category: core - optional: true -- name: tornado - version: '6.1' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.1-py310h1961e1f_3.tar.bz2 - hash: - md5: 84d43324014a93910f008ada676ca542 - sha256: e1e7ad2c24147d9023fff99c708c892161a9c4be3ff324ef731ba2f884302b46 - category: core - optional: true -- name: tornado - version: '6.1' - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - vc: '>=14.1,<15' - vs2015_runtime: '>=14.16.27033' - url: https://conda.anaconda.org/conda-forge/win-64/tornado-6.1-py310he2412df_3.tar.bz2 - hash: - md5: f5e310d96e266e6acda33c31c722e2cb - sha256: 0af2d677ec17d9c00311b5cba56a1ed5e62328d8c160523b66c8e243fe99dcb0 - category: core - optional: true -- name: tqdm - version: 4.66.2 - manager: conda - platform: linux-64 - dependencies: - colorama: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda - hash: - md5: 2b8dfb969f984497f3f98409a9545776 - sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 - category: main - optional: false -- name: tqdm - version: 4.66.2 - manager: conda - platform: osx-64 - dependencies: - colorama: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda - hash: - md5: 2b8dfb969f984497f3f98409a9545776 - sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 - category: main - optional: false -- name: tqdm - version: 4.66.2 - manager: conda - platform: win-64 - dependencies: - colorama: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda - hash: - md5: 2b8dfb969f984497f3f98409a9545776 - sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 - category: main - optional: false -- name: traitlets - version: 5.14.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.2-pyhd8ed1ab_0.conda - hash: - md5: af5fa2d2186003472e766a23c46cae04 - sha256: 9ea6073091c130470a51b51703c8d2d959434992e29c4aa4abeba07cd56533a3 - category: apps - optional: true -- name: traitlets - version: 5.14.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.2-pyhd8ed1ab_0.conda - hash: - md5: af5fa2d2186003472e766a23c46cae04 - sha256: 9ea6073091c130470a51b51703c8d2d959434992e29c4aa4abeba07cd56533a3 - category: apps - optional: true -- name: traitlets - version: 5.14.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.2-pyhd8ed1ab_0.conda - hash: - md5: af5fa2d2186003472e766a23c46cae04 - sha256: 9ea6073091c130470a51b51703c8d2d959434992e29c4aa4abeba07cd56533a3 - category: apps - optional: true -- name: typing-extensions - version: 4.11.0 - manager: conda - platform: linux-64 - dependencies: - typing_extensions: 4.11.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.11.0-hd8ed1ab_0.conda - hash: - md5: 471e3988f8ca5e9eb3ce6be7eac3bcee - sha256: aecbd9c601ba5a6c128da8975276fd817b968a9edc969b7ae97aee76e80a14a6 - category: dev - optional: true -- name: typing-extensions - version: 4.11.0 - manager: conda - platform: osx-64 - dependencies: - typing_extensions: 4.11.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.11.0-hd8ed1ab_0.conda - hash: - md5: 471e3988f8ca5e9eb3ce6be7eac3bcee - sha256: aecbd9c601ba5a6c128da8975276fd817b968a9edc969b7ae97aee76e80a14a6 - category: dev - optional: true -- name: typing-extensions - version: 4.11.0 - manager: conda - platform: win-64 - dependencies: - typing_extensions: 4.11.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.11.0-hd8ed1ab_0.conda - hash: - md5: 471e3988f8ca5e9eb3ce6be7eac3bcee - sha256: aecbd9c601ba5a6c128da8975276fd817b968a9edc969b7ae97aee76e80a14a6 - category: dev - optional: true -- name: typing_extensions - version: 4.11.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda - hash: - md5: 6ef2fc37559256cf682d8b3375e89b80 - sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2 - category: dev - optional: true -- name: typing_extensions - version: 4.11.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda - hash: - md5: 6ef2fc37559256cf682d8b3375e89b80 - sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2 - category: dev - optional: true -- name: typing_extensions - version: 4.11.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda - hash: - md5: 6ef2fc37559256cf682d8b3375e89b80 - sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2 - category: dev - optional: true -- name: tzcode - version: 2024a - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/tzcode-2024a-h3f72095_0.conda - hash: - md5: 32146e34aaec3745a08b6f49af3f41b0 - sha256: d3ea2927cabd6c9f27ee0cb498f893ac0133687d6a9e65e0bce4861c732a18df - category: core - optional: true -- name: tzcode - version: 2024a - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/tzcode-2024a-h10d778d_0.conda - hash: - md5: 8d50ba6668dbd193cd42ccd9099fa2ae - sha256: e3ee34b2711500f3b1d38309d47cfd7e4d05c0144f0b2b2bdfbc271a28cfdd76 - category: core - optional: true -- name: tzdata - version: 2024a - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - hash: - md5: 161081fc7cec0bfda0d86d7cb595f8d8 - sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 - category: main - optional: false -- name: tzdata - version: 2024a - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - hash: - md5: 161081fc7cec0bfda0d86d7cb595f8d8 - sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 - category: main - optional: false -- name: tzdata - version: 2024a - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - hash: - md5: 161081fc7cec0bfda0d86d7cb595f8d8 - sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 - category: main - optional: false -- name: ucrt - version: 10.0.22621.0 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - hash: - md5: 72608f6cd3e5898229c3ea16deb1ac43 - sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 - category: main - optional: false -- name: unicodedata2 - version: 15.1.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda - hash: - md5: 72637c58d36d9475fda24700c9796f19 - sha256: 5ab2f2d4542ba0cc27d222c08ae61706babe7173b0c6dfa748aa37ff2fa9d824 - category: core - optional: true -- name: unicodedata2 - version: 15.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-15.1.0-py310h6729b98_0.conda - hash: - md5: 5c82d8c1c3ba3b16df93ac6e7cac60bd - sha256: 72fcdbd9e7b5e853ee7d25f88a54b83b69b6d6ac541f6faae393cc6475aa88be - category: core - optional: true -- name: unicodedata2 - version: 15.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-15.1.0-py310h8d17308_0.conda - hash: - md5: f9f25aeb0eed2dd8c770f137c45da3c2 - sha256: 7beadca7de88d62b65124a98e0c442cef787dac2ac41768deb7200fd33d07603 - category: core - optional: true -- name: uriparser - version: 0.9.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.7-h59595ed_1.conda - hash: - md5: c5edf07141147789784f89d5b4e4a9ad - sha256: ec997599b6dcfef34242c67b695c4704d9ba6cb0b9de8f390defa475a95cdb3f - category: core - optional: true -- name: uriparser - version: 0.9.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14' - url: https://conda.anaconda.org/conda-forge/osx-64/uriparser-0.9.7-he965462_1.conda - hash: - md5: a342f2d5573ebdb1cba60ef2947c1b7f - sha256: 1f3563325ce2f9b28b6dfbc703f3cac4d36095d2103c40648338533f4cb80b63 - category: core - optional: true -- name: uriparser - version: 0.9.7 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/uriparser-0.9.7-h1537add_1.conda - hash: - md5: 5f3b2772564e761bc2287b89b9e6b14b - sha256: 9b185e00da9829592300359e23e2954188d21749fda675a08abbef728f19f25b - category: core - optional: true -- name: urllib3 - version: 2.2.1 - manager: conda - platform: linux-64 - dependencies: - brotli-python: '>=1.0.9' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda - hash: - md5: 08807a87fa7af10754d46f63b368e016 - sha256: d4009dcc9327684d6409706ce17656afbeae690d8522d3c9bc4df57649a352cd - category: main - optional: false -- name: urllib3 - version: 2.2.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - brotli-python: '>=1.0.9' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda - hash: - md5: 08807a87fa7af10754d46f63b368e016 - sha256: d4009dcc9327684d6409706ce17656afbeae690d8522d3c9bc4df57649a352cd - category: main - optional: false -- name: urllib3 - version: 2.2.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - brotli-python: '>=1.0.9' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda - hash: - md5: 08807a87fa7af10754d46f63b368e016 - sha256: d4009dcc9327684d6409706ce17656afbeae690d8522d3c9bc4df57649a352cd - category: main - optional: false -- name: utm - version: 0.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/utm-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 4864e2f5c746f45e02ec46221caccb7e - sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627 - category: core - optional: true -- name: utm - version: 0.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/utm-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 4864e2f5c746f45e02ec46221caccb7e - sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627 - category: core - optional: true -- name: utm - version: 0.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/utm-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 4864e2f5c746f45e02ec46221caccb7e - sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627 - category: core - optional: true -- name: vc - version: '14.3' - manager: conda - platform: win-64 - dependencies: - vc14_runtime: '>=14.38.33130' - url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-hcf57466_18.conda - hash: - md5: 20e1e652a4c740fa719002a8449994a2 - sha256: 447a8d8292a7b2107dcc18afb67f046824711a652725fc0f522c368e7a7b8318 - category: main - optional: false -- name: vc14_runtime - version: 14.38.33130 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33130-h82b7239_18.conda - hash: - md5: 8be79fdd2725ddf7bbf8a27a4c1f79ba - sha256: bf94c9af4b2e9cba88207001197e695934eadc96a5c5e4cd7597e950aae3d8ff - category: main - optional: false -- name: vectormath - version: 0.2.2 - manager: conda - platform: linux-64 - dependencies: - numpy: '>=1.7' - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 - hash: - md5: 7a6395b244b183e9e55e606e3d68e83b - sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 - category: main - optional: false -- name: vectormath - version: 0.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '' - numpy: '>=1.7' - url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 - hash: - md5: 7a6395b244b183e9e55e606e3d68e83b - sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 - category: main - optional: false -- name: vectormath - version: 0.2.2 - manager: conda - platform: win-64 - dependencies: - python: '' - numpy: '>=1.7' - url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 - hash: - md5: 7a6395b244b183e9e55e606e3d68e83b - sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 - category: main - optional: false -- name: vs2015_runtime - version: 14.38.33130 - manager: conda - platform: win-64 - dependencies: - vc14_runtime: '>=14.38.33130' - url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33130-hcb4865c_18.conda - hash: - md5: 10d42885e3ed84e575b454db30f1aa93 - sha256: a2fec221f361d6263c117f4ea6d772b21c90a2f8edc6f3eb0eadec6bfe8843db - category: main - optional: false -- name: wcwidth - version: 0.2.13 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - hash: - md5: 68f0738df502a14213624b288c60c9ad - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - category: apps - optional: true -- name: wcwidth - version: 0.2.13 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - hash: - md5: 68f0738df502a14213624b288c60c9ad - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - category: apps - optional: true -- name: wcwidth - version: 0.2.13 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - hash: - md5: 68f0738df502a14213624b288c60c9ad - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - category: apps - optional: true -- name: webencodings - version: 0.5.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - hash: - md5: daf5160ff9cde3a468556965329085b9 - sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 - category: apps - optional: true -- name: webencodings - version: 0.5.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - hash: - md5: daf5160ff9cde3a468556965329085b9 - sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 - category: apps - optional: true -- name: webencodings - version: 0.5.1 - manager: conda - platform: win-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - hash: - md5: daf5160ff9cde3a468556965329085b9 - sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 - category: apps - optional: true -- name: websocket-client - version: 1.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 50ad31e07d706aae88b14a4ac9c73f23 - sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f - category: apps - optional: true -- name: websocket-client - version: 1.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 50ad31e07d706aae88b14a4ac9c73f23 - sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f - category: apps - optional: true -- name: websocket-client - version: 1.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 50ad31e07d706aae88b14a4ac9c73f23 - sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f - category: apps - optional: true -- name: werkzeug - version: 3.0.2 - manager: conda - platform: linux-64 - dependencies: - markupsafe: '>=2.1.1' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 96b2d2e2550ccba0f4008b4d0b4199dd - sha256: ae5744d6e3826d71826ca939436437016d14f38e3535517e160f74d392788d5d - category: apps - optional: true -- name: werkzeug - version: 3.0.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - markupsafe: '>=2.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 96b2d2e2550ccba0f4008b4d0b4199dd - sha256: ae5744d6e3826d71826ca939436437016d14f38e3535517e160f74d392788d5d - category: apps - optional: true -- name: werkzeug - version: 3.0.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - markupsafe: '>=2.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 96b2d2e2550ccba0f4008b4d0b4199dd - sha256: ae5744d6e3826d71826ca939436437016d14f38e3535517e160f74d392788d5d - category: apps - optional: true -- name: wheel - version: 0.43.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda - hash: - md5: 0b5293a157c2b5cd513dd1b03d8d3aae - sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc - category: main - optional: false -- name: wheel - version: 0.43.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda - hash: - md5: 0b5293a157c2b5cd513dd1b03d8d3aae - sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc - category: main - optional: false -- name: wheel - version: 0.43.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda - hash: - md5: 0b5293a157c2b5cd513dd1b03d8d3aae - sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc - category: main - optional: false -- name: widgetsnbextension - version: 3.6.6 - manager: conda - platform: linux-64 - dependencies: - notebook: '>=4.4.1' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.6-pyhd8ed1ab_0.conda - hash: - md5: fe79dfe7d51794d665ec3c2fdd4e47c3 - sha256: 5fb8ac32fb9d5b2860d271ae1959aa6953044f06cbe5e54d912125cca27dda3b - category: apps - optional: true -- name: widgetsnbextension - version: 3.6.6 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - notebook: '>=4.4.1' - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.6-pyhd8ed1ab_0.conda - hash: - md5: fe79dfe7d51794d665ec3c2fdd4e47c3 - sha256: 5fb8ac32fb9d5b2860d271ae1959aa6953044f06cbe5e54d912125cca27dda3b - category: apps - optional: true -- name: widgetsnbextension - version: 3.6.6 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - notebook: '>=4.4.1' - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.6-pyhd8ed1ab_0.conda - hash: - md5: fe79dfe7d51794d665ec3c2fdd4e47c3 - sha256: 5fb8ac32fb9d5b2860d271ae1959aa6953044f06cbe5e54d912125cca27dda3b - category: apps - optional: true -- name: win_inet_pton - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - __win: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyhd8ed1ab_6.tar.bz2 - hash: - md5: 30878ecc4bd36e8deeea1e3c151b2e0b - sha256: a11ae693a0645bf6c7b8a47bac030be9c0967d0b1924537b9ff7458e832c0511 - category: main - optional: false -- name: winpty - version: 0.4.3 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - hash: - md5: 1cee351bf20b830d991dbe0bc8cd7dfe - sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 - category: apps - optional: true -- name: xcb-util - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda - hash: - md5: 9bfac7ccd94d54fd21a0501296d60424 - sha256: 0c91d87f0efdaadd4e56a5f024f8aab20ec30f90aa2ce9e4ebea05fbc20f71ad - category: apps - optional: true -- name: xcb-util-image - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - xcb-util: '>=0.4.0,<0.5.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda - hash: - md5: 9d7bcddf49cbf727730af10e71022c73 - sha256: 92ffd68d2801dbc27afe223e04ae7e78ef605fc8575f107113c93c7bafbd15b0 - category: apps - optional: true -- name: xcb-util-keysyms - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda - hash: - md5: 632413adcd8bc16b515cab87a2932913 - sha256: 8451d92f25d6054a941b962179180728c48c62aab5bf20ac10fef713d5da6a9a - category: apps - optional: true -- name: xcb-util-renderutil - version: 0.3.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda - hash: - md5: e995b155d938b6779da6ace6c6b13816 - sha256: 6987588e6fff5892056021c2ea52f7a0deefb2c7348e70d24750e2d60dabf009 - category: apps - optional: true -- name: xcb-util-wm - version: 0.4.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda - hash: - md5: 90108a432fb5c6150ccfee3f03388656 - sha256: 08ba7147c7579249b6efd33397dc1a8c2404278053165aaecd39280fee705724 - category: apps - optional: true -- name: xerces-c - version: 3.2.5 - manager: conda - platform: linux-64 - dependencies: - icu: '>=73.2,<74.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgcc-ng: '>=12' - libnsl: '>=2.0.1,<2.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda - hash: - md5: 63b80ca78d29380fe69e69412dcbe4ac - sha256: 75d06ca406f03f653d7a3183f2a1ccfdb3a3c6c830493933ec4c3c98e06a32bb - category: core - optional: true -- name: xerces-c - version: 3.2.5 - manager: conda - platform: osx-64 - dependencies: - icu: '>=73.2,<74.0a0' - libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=15' - url: https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.2.5-hbbe9ea5_0.conda - hash: - md5: ade166000a13c81d9a75f65281e302b0 - sha256: 10487c0b28ee2303570c6d0867000587a8c36836fffd4d634d8778c494d16965 - category: core - optional: true -- name: xerces-c - version: 3.2.5 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.2.5-h63175ca_0.conda - hash: - md5: b1e07902b6bb7833db8cc4ec32f32dc7 - sha256: 21328b0442f2f86ad5bf14481ed60f56a8ebb765a68d158a57ec6f32eb55762b - category: core - optional: true -- name: xkeyboard-config - version: '2.41' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-libx11: '>=1.8.7,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda - hash: - md5: 81f740407b45e3f9047b3174fa94eb9e - sha256: 56955610c0747ea7cb026bb8aa9ef165ff41d616e89894538173b8b7dd2ee49a - category: apps - optional: true -- name: xorg-compositeproto - version: 0.4.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-compositeproto-0.4.2-h7f98852_1001.tar.bz2 - hash: - md5: 8bf27eeb636d3acce5c6cb570ba63487 - sha256: 8127541fb7ee4ba81cabd3ac464953ec928489bf01d647e5819cd7cd9428730c - category: apps - optional: true -- name: xorg-damageproto - version: 1.2.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-damageproto-1.2.1-h7f98852_1002.tar.bz2 - hash: - md5: 58c9bb067637c5a13a045a7124eeb027 - sha256: b0a62b8eedc3e1b47fbbe3bbe6011542d36867b90f9b4bf251b78109ee1f0d9b - category: apps - optional: true -- name: xorg-fixesproto - version: '5.0' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-xextproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-h7f98852_1002.tar.bz2 - hash: - md5: 65ad6e1eb4aed2b0611855aff05e04f6 - sha256: 5d2af1b40f82128221bace9466565eca87c97726bb80bbfcd03871813f3e1876 - category: apps - optional: true -- name: xorg-inputproto - version: 2.3.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2 - hash: - md5: bcd1b3396ec6960cbc1d2855a9e60b2b - sha256: 6c8c2803de0f643f8bad16ece3f9a7259e4a49247543239c182d66d5e3a129a7 - category: apps - optional: true -- name: xorg-kbproto - version: 1.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 - hash: - md5: 4b230e8381279d76131116660f5a241a - sha256: e90b0a6a5d41776f11add74aa030f789faf4efd3875c31964d6f9cfa63a10dd1 - category: core - optional: true -- name: xorg-libice - version: 1.1.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda - hash: - md5: b462a33c0be1421532f28bfe8f4a7514 - sha256: 5aa9b3682285bb2bf1a8adc064cb63aff76ef9178769740d855abb42b0d24236 - category: core - optional: true -- name: xorg-libsm - version: 1.2.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libuuid: '>=2.38.1,<3.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda - hash: - md5: 93ee23f12bc2e684548181256edd2cf6 - sha256: 089ad5f0453c604e18985480218a84b27009e9e6de9a0fa5f4a20b8778ede1f1 - category: core - optional: true -- name: xorg-libx11 - version: 1.8.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - xorg-kbproto: '' - xorg-xextproto: '>=7.3.0,<8.0a0' - xorg-xproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-h8ee46fc_0.conda - hash: - md5: 077b6e8ad6a3ddb741fce2496dd01bec - sha256: 3e53ba247f1ad68353f18aceba5bf8ce87e3dea930de85d36946844a7658c9fb - category: core - optional: true -- name: xorg-libxau - version: 1.0.11 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda - hash: - md5: 2c80dc38fface310c9bd81b17037fee5 - sha256: 309751371d525ce50af7c87811b435c176915239fc9e132b99a25d5e1703f2d4 - category: main - optional: false -- name: xorg-libxau - version: 1.0.11 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h0dc2134_0.conda - hash: - md5: 9566b4c29274125b0266d0177b5eb97b - sha256: 8a2e398c4f06f10c64e69f56bcf3ddfa30b432201446a0893505e735b346619a - category: main - optional: false -- name: xorg-libxau - version: 1.0.11 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - m2w64-gcc-libs-core: '' - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda - hash: - md5: c46ba8712093cb0114404ae8a7582e1a - sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 - category: main - optional: false -- name: xorg-libxcomposite - version: 0.4.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-compositeproto: '' - xorg-libx11: '>=1.7.2,<2.0a0' - xorg-libxfixes: '' - xorg-xproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-h0b41bf4_1.conda - hash: - md5: ada6777364a0ea2407a1894e54779cc4 - sha256: 7c5806a8de1ce0d4e0c7aae8d29565f11fba6c6da4a787c3e09f1fcc428725a4 - category: apps - optional: true -- name: xorg-libxdamage - version: 1.1.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - xorg-damageproto: '' - xorg-libx11: '>=1.7.2,<2.0a0' - xorg-libxext: 1.3.* - xorg-libxfixes: '' - xorg-util-macros: '' - xorg-xproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.5-h7f98852_1.tar.bz2 - hash: - md5: bebd3814ec2355fab6a474b07ed73093 - sha256: 4cab878855e48669b64dd7522a518433ac83bb56fa79743d12db316326e2e39e - category: apps - optional: true -- name: xorg-libxdmcp - version: 1.1.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 - hash: - md5: be93aabceefa2fac576e971aef407908 - sha256: 4df7c5ee11b8686d3453e7f3f4aa20ceef441262b49860733066c52cfd0e4a77 - category: main - optional: false -- name: xorg-libxdmcp - version: 1.1.3 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.3-h35c211d_0.tar.bz2 - hash: - md5: 86ac76d6bf1cbb9621943eb3bd9ae36e - sha256: 485421c16f03a01b8ed09984e0b2ababdbb3527e1abf354ff7646f8329be905f - category: main - optional: false -- name: xorg-libxdmcp - version: 1.1.3 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 - hash: - md5: 46878ebb6b9cbd8afcf8088d7ef00ece - sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 - category: main - optional: false -- name: xorg-libxext - version: 1.3.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-libx11: '>=1.7.2,<2.0a0' - xorg-xextproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda - hash: - md5: 82b6df12252e6f32402b96dacc656fec - sha256: 73e5cfbdff41ef8a844441f884412aa5a585a0f0632ec901da035a03e1fe1249 - category: core - optional: true -- name: xorg-libxfixes - version: 5.0.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-fixesproto: '' - xorg-libx11: '>=1.7.0,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h7f98852_1004.tar.bz2 - hash: - md5: e9a21aa4d5e3e5f1aed71e8cefd46b6a - sha256: 1e426a1abb774ef1dcf741945ed5c42ad12ea2dc7aeed7682d293879c3e1e4c3 - category: apps - optional: true -- name: xorg-libxi - version: 1.7.10 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-inputproto: '' - xorg-libx11: '>=1.7.0,<2.0a0' - xorg-libxext: 1.3.* - xorg-libxfixes: 5.0.* - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2 - hash: - md5: e77615e5141cad5a2acaa043d1cf0ca5 - sha256: 745c1284a96b4282fe6fe122b2643e1e8c26a7ff40b733a8f4b61357238c4e68 - category: apps - optional: true -- name: xorg-libxrandr - version: 1.5.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-libx11: '>=1.7.1,<2.0a0' - xorg-libxext: '' - xorg-libxrender: '' - xorg-randrproto: '' - xorg-renderproto: '' - xorg-xextproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.2-h7f98852_1.tar.bz2 - hash: - md5: 5b0f7da25a4556c9619c3e4b4a98ab07 - sha256: ffd075a463896ed86d9519e26dc36f754b695b9c1e1b6115d34fe138b36d8200 - category: apps - optional: true -- name: xorg-libxrender - version: 0.9.11 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-libx11: '>=1.8.6,<2.0a0' - xorg-renderproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda - hash: - md5: ed67c36f215b310412b2af935bf3e530 - sha256: 26da4d1911473c965c32ce2b4ff7572349719eaacb88a066db8d968a4132c3f7 - category: core - optional: true -- name: xorg-libxtst - version: 1.2.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-inputproto: '' - xorg-libx11: '>=1.7.1,<2.0a0' - xorg-libxext: 1.3.* - xorg-libxi: 1.7.* - xorg-recordproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.3-h7f98852_1002.tar.bz2 - hash: - md5: a220b1a513e19d5cb56c1311d44f12e6 - sha256: 9a51ae2869b9a47735539dada9d85534418a765d1461c9f91fe7564f3ee75e87 - category: apps - optional: true -- name: xorg-randrproto - version: 1.5.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-randrproto-1.5.0-h7f98852_1001.tar.bz2 - hash: - md5: 68cce654461713977dac6f9ac1bce89a - sha256: f5c7c2de3655a95153e900118959df6a50b6c104a3d7afaee3eadbf86b85fa2e - category: apps - optional: true -- name: xorg-recordproto - version: 1.14.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h7f98852_1002.tar.bz2 - hash: - md5: 2f835e6c386e73c6faaddfe9eda67e98 - sha256: 4b91d48fed368c83eafd03891ebfd5bae0a03adc087ebea8a680ae22da99a85f - category: apps - optional: true -- name: xorg-renderproto - version: 0.11.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 - hash: - md5: 06feff3d2634e3097ce2fe681474b534 - sha256: 38942930f233d1898594dd9edf4b0c0786f3dbc12065a0c308634c37fd936034 - category: core - optional: true -- name: xorg-util-macros - version: 1.19.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-util-macros-1.19.3-h7f98852_0.tar.bz2 - hash: - md5: b1780cc89cf3949f670d6ca2aa6a7e42 - sha256: 128591045b700d375de98be76f215a0b67c9d6939523b743edc0dca389cdb4be - category: apps - optional: true -- name: xorg-xextproto - version: 7.3.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda - hash: - md5: bce9f945da8ad2ae9b1d7165a64d0f87 - sha256: b8dda3b560e8a7830fe23be1c58cc41f407b2e20ae2f3b6901eb5842ba62b743 - category: core - optional: true -- name: xorg-xf86vidmodeproto - version: 2.3.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2 - hash: - md5: 3ceea9668625c18f19530de98b15d5b0 - sha256: 43398aeacad5b8753b7a1c12cb6bca36124e0c842330372635879c350c430791 - category: apps - optional: true -- name: xorg-xproto - version: 7.0.31 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 - hash: - md5: b4a4381d54784606820704f7b5f05a15 - sha256: f197bb742a17c78234c24605ad1fe2d88b1d25f332b75d73e5ba8cf8fbc2a10d - category: core - optional: true -- name: xz - version: 5.2.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - hash: - md5: 2161070d867d1b1204ea749c8eec4ef0 - sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 - category: main - optional: false -- name: xz - version: 5.2.6 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - hash: - md5: a72f9d4ea13d55d745ff1ed594747f10 - sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 - category: main - optional: false -- name: xz - version: 5.2.6 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15' - vs2015_runtime: '>=14.16.27033' - url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - hash: - md5: 515d77642eaa3639413c6b1bc3f94219 - sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 - category: main - optional: false -- name: yaml - version: 0.2.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - hash: - md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae - sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 - category: core - optional: true -- name: yaml - version: 0.2.5 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 - hash: - md5: d7e08fcf8259d742156188e8762b4d20 - sha256: 5301417e2c8dea45b401ffee8df3957d2447d4ce80c83c5ff151fc6bfe1c4148 - category: core - optional: true -- name: yaml - version: 0.2.5 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - hash: - md5: adbfb9f45d1004a26763652246a33764 - sha256: 4e2246383003acbad9682c7c63178e2e715ad0eb84f03a8df1fbfba455dfedc5 - category: core - optional: true -- name: zarr - version: 2.14.2 - manager: conda - platform: linux-64 - dependencies: - asciitree: '' - fasteners: '' - numcodecs: '>=0.10.0' - numpy: '>=1.7' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda - hash: - md5: 0c5776fe65a12a421d7ddf90411a6c3f - sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f - category: core - optional: true -- name: zarr - version: 2.14.2 - manager: conda - platform: osx-64 - dependencies: - fasteners: '' - asciitree: '' - python: '>=3.5' - numpy: '>=1.7' - numcodecs: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda - hash: - md5: 0c5776fe65a12a421d7ddf90411a6c3f - sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f - category: core - optional: true -- name: zarr - version: 2.14.2 - manager: conda - platform: win-64 - dependencies: - fasteners: '' - asciitree: '' - python: '>=3.5' - numpy: '>=1.7' - numcodecs: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda - hash: - md5: 0c5776fe65a12a421d7ddf90411a6c3f - sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f - category: core - optional: true -- name: zeromq - version: 4.3.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libsodium: '>=1.0.18,<1.0.19.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_1.conda - hash: - md5: 7fc9d3288d2420bb3637647621018000 - sha256: 3bec658f5c23abf5e200d98418add7a20ff7b45c928ad4560525bef899496256 - category: apps - optional: true -- name: zeromq - version: 4.3.5 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - libsodium: '>=1.0.18,<1.0.19.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/zeromq-4.3.5-h93d8f39_0.conda - hash: - md5: 4c055e46b394be36681fe476c1e2ee6e - sha256: 19be553b3cc8352b6e842134b8de66ae39fcae80bc575c203076370faab6009c - category: apps - optional: true -- name: zeromq - version: 4.3.4 - manager: conda - platform: win-64 - dependencies: - libsodium: '>=1.0.18,<1.0.19.0a0' - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.4-h0e60522_1.tar.bz2 - hash: - md5: e1aff0583dda5fb917eb3d2c1025aa80 - sha256: 0489cc6c3bff50620879890431d7142fd6e66b7770ddc6f2d7852094471c0d6c - category: apps - optional: true -- name: zict - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: cf30c2c15b82aacb07f9c09e28ff2275 - sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5 - category: core - optional: true -- name: zict - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: cf30c2c15b82aacb07f9c09e28ff2275 - sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5 - category: core - optional: true -- name: zict - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: cf30c2c15b82aacb07f9c09e28ff2275 - sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5 - category: core - optional: true -- name: zipp - version: 3.17.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - hash: - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - category: core - optional: true -- name: zipp - version: 3.17.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - hash: - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - category: core - optional: true -- name: zipp - version: 3.17.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - hash: - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - category: core - optional: true -- name: zlib - version: 1.2.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: 1.2.13 - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda - hash: - md5: 68c34ec6149623be41a1933ab996a209 - sha256: 9887a04d7e7cb14bd2b52fa01858f05a6d7f002c890f618d9fcd864adbfecb1b - category: core - optional: true -- name: zlib - version: 1.2.13 - manager: conda - platform: osx-64 - dependencies: - libzlib: 1.2.13 - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda - hash: - md5: 75a8a98b1c4671c5d2897975731da42d - sha256: d1f4c82fd7bd240a78ce8905e931e68dca5f523c7da237b6b63c87d5625c5b35 - category: core - optional: true -- name: zlib - version: 1.2.13 - manager: conda - platform: win-64 - dependencies: - libzlib: 1.2.13 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/zlib-1.2.13-hcfcfb64_5.conda - hash: - md5: a318e8622e11663f645cc7fa3260f462 - sha256: 0f91b719c7558046bcd37fdc7ae4b9eb2b7a8e335beb8b59ae7ccb285a46aa46 - category: core - optional: true -- name: zlib-ng - version: 2.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda - hash: - md5: 49e8329110001f04923fe7e864990b0c - sha256: 6b3a22b7cc219e8d83f16c1ceba67aa51e0b7e3bcc4a647b97a0a510559b0477 - category: main - optional: false -- name: zlib-ng - version: 2.0.7 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - hash: - md5: 813b5ad3ba92b75b84f40602b6d34ffb - sha256: 701bf17f3e22c7ba24ca547ccf4b2b5b4b58eda579ddaf68c0571427b10aa366 - category: main - optional: false -- name: zlib-ng - version: 2.0.7 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda - hash: - md5: c72bb979d406650d3a78743ff888c451 - sha256: 61a4e4c209f04d3f426213a187686262ebc2dccac9a97a0743c2ebbf6e3e3dd8 - category: main - optional: false -- name: zstd - version: 1.5.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda - hash: - md5: 04b88013080254850d6c01ed54810589 - sha256: 607cbeb1a533be98ba96cf5cdf0ddbb101c78019f1fda063261871dad6248609 - category: main - optional: false -- name: zstd - version: 1.5.5 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda - hash: - md5: 80abc41d0c48b82fe0f04e7f42f5cb7e - sha256: d54e31d3d8de5e254c0804abd984807b8ae5cd3708d758a8bf1adff1f5df166c - category: main - optional: false -- name: zstd - version: 1.5.5 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda - hash: - md5: 792bb5da68bf0a6cac6a6072ecb8dbeb - sha256: d540dd56c5ec772b60e4ce7d45f67f01c6614942225885911964ea1e70bb99e3 - category: main - optional: false -- name: geoh5py - version: 0.8.0 - manager: pip - platform: linux-64 - dependencies: - pillow: '>=10.0.1,<11.0.0' - h5py: '>=3.2.1,<4.0.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/9e/2b/61e9fdff9c433be7f0d3239b37d1cd2c2c1427eb1915f84d97b9996c35c3/geoh5py-0.8.0-py3-none-any.whl - hash: - sha256: 40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - category: main - optional: false -- name: geoh5py - version: 0.8.0 - manager: pip - platform: osx-64 - dependencies: - pillow: '>=10.0.1,<11.0.0' - h5py: '>=3.2.1,<4.0.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/9e/2b/61e9fdff9c433be7f0d3239b37d1cd2c2c1427eb1915f84d97b9996c35c3/geoh5py-0.8.0-py3-none-any.whl - hash: - sha256: 40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - category: main - optional: false -- name: geoh5py - version: 0.8.0 - manager: pip - platform: win-64 - dependencies: - pillow: '>=10.0.1,<11.0.0' - h5py: '>=3.2.1,<4.0.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/9e/2b/61e9fdff9c433be7f0d3239b37d1cd2c2c1427eb1915f84d97b9996c35c3/geoh5py-0.8.0-py3-none-any.whl - hash: - sha256: 40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - category: main - optional: false -- name: las-geoh5 - version: 0.1.0 - manager: pip - platform: linux-64 - dependencies: - geoh5py: '>=0.8.0rc3,<0.9.0' - lasio: '>=0.31,<0.32' - tqdm: '>=4.64.0,<5.0.0' - url: https://files.pythonhosted.org/packages/e5/ec/f6c74d4c718e7afa23c4291789cf7b8d1d60b5c378120caf0cfbc094861c/las_geoh5-0.1.0-py3-none-any.whl - hash: - sha256: 547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - category: main - optional: false -- name: las-geoh5 - version: 0.1.0 - manager: pip - platform: osx-64 - dependencies: - geoh5py: '>=0.8.0rc3,<0.9.0' - lasio: '>=0.31,<0.32' - tqdm: '>=4.64.0,<5.0.0' - url: https://files.pythonhosted.org/packages/e5/ec/f6c74d4c718e7afa23c4291789cf7b8d1d60b5c378120caf0cfbc094861c/las_geoh5-0.1.0-py3-none-any.whl - hash: - sha256: 547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - category: main - optional: false -- name: las-geoh5 - version: 0.1.0 - manager: pip - platform: win-64 - dependencies: - geoh5py: '>=0.8.0rc3,<0.9.0' - lasio: '>=0.31,<0.32' - tqdm: '>=4.64.0,<5.0.0' - url: https://files.pythonhosted.org/packages/e5/ec/f6c74d4c718e7afa23c4291789cf7b8d1d60b5c378120caf0cfbc094861c/las_geoh5-0.1.0-py3-none-any.whl - hash: - sha256: 547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - category: main - optional: false -- name: lasio - version: '0.31' - manager: pip - platform: linux-64 - dependencies: - numpy: '*' - url: https://files.pythonhosted.org/packages/62/70/a73c7cefe343162b4085645dacf2c236c0870d348854d2a226ba84f90cab/lasio-0.31-py2.py3-none-any.whl - hash: - sha256: 30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - category: main - optional: false -- name: lasio - version: '0.31' - manager: pip - platform: osx-64 - dependencies: - numpy: '*' - url: https://files.pythonhosted.org/packages/62/70/a73c7cefe343162b4085645dacf2c236c0870d348854d2a226ba84f90cab/lasio-0.31-py2.py3-none-any.whl - hash: - sha256: 30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - category: main - optional: false -- name: lasio - version: '0.31' - manager: pip - platform: win-64 - dependencies: - numpy: '*' - url: https://files.pythonhosted.org/packages/62/70/a73c7cefe343162b4085645dacf2c236c0870d348854d2a226ba84f90cab/lasio-0.31-py2.py3-none-any.whl - hash: - sha256: 30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - category: main - optional: false -- name: mira-omf - version: 3.1.0 - manager: pip - platform: linux-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - properties: '>=0.6.0,<0.7.0' - pypng: '>=0.20220715,<0.20220716' - six: '>=1.16,<2.0' - vectormath: '>=0.2.0,<0.3.0' - url: https://files.pythonhosted.org/packages/d0/fa/30e20459a49eaf91a6a23b2f72a50bef450ab11e4f1e575caa936742e6fd/mira_omf-3.1.0-py3-none-any.whl - hash: - sha256: 626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - category: main - optional: false -- name: mira-omf - version: 3.1.0 - manager: pip - platform: osx-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - properties: '>=0.6.0,<0.7.0' - pypng: '>=0.20220715,<0.20220716' - six: '>=1.16,<2.0' - vectormath: '>=0.2.0,<0.3.0' - url: https://files.pythonhosted.org/packages/d0/fa/30e20459a49eaf91a6a23b2f72a50bef450ab11e4f1e575caa936742e6fd/mira_omf-3.1.0-py3-none-any.whl - hash: - sha256: 626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - category: main - optional: false -- name: mira-omf - version: 3.1.0 - manager: pip - platform: win-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - properties: '>=0.6.0,<0.7.0' - pypng: '>=0.20220715,<0.20220716' - six: '>=1.16,<2.0' - vectormath: '>=0.2.0,<0.3.0' - url: https://files.pythonhosted.org/packages/d0/fa/30e20459a49eaf91a6a23b2f72a50bef450ab11e4f1e575caa936742e6fd/mira_omf-3.1.0-py3-none-any.whl - hash: - sha256: 626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - category: main - optional: false -- name: mira-simpeg - version: 0.19.0.dev7 - manager: pip - platform: linux-64 - dependencies: - discretize: '>=0.8.0' - empymod: '>=2.0.0' - geoh5py: '*' - numpy: '>=1.20' - pandas: '*' - pymatsolver: '>=0.2' - scikit-learn: '>=1.2' - scipy: '>=1.8.0' - url: https://files.pythonhosted.org/packages/a6/a1/fed04083345fde74d6f7012dd21c7e8f91bd98fedc17b1e5e182623844fc/mira_simpeg-0.19.0.dev7-py2.py3-none-any.whl - hash: - sha256: d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - category: core - optional: true -- name: mira-simpeg - version: 0.19.0.dev7 - manager: pip - platform: osx-64 - dependencies: - discretize: '>=0.8.0' - empymod: '>=2.0.0' - geoh5py: '*' - numpy: '>=1.20' - pandas: '*' - pymatsolver: '>=0.2' - scikit-learn: '>=1.2' - scipy: '>=1.8.0' - url: https://files.pythonhosted.org/packages/a6/a1/fed04083345fde74d6f7012dd21c7e8f91bd98fedc17b1e5e182623844fc/mira_simpeg-0.19.0.dev7-py2.py3-none-any.whl - hash: - sha256: d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - category: core - optional: true -- name: mira-simpeg - version: 0.19.0.dev7 - manager: pip - platform: win-64 - dependencies: - discretize: '>=0.8.0' - empymod: '>=2.0.0' - geoh5py: '*' - numpy: '>=1.20' - pandas: '*' - pymatsolver: '>=0.2' - scikit-learn: '>=1.2' - scipy: '>=1.8.0' - url: https://files.pythonhosted.org/packages/a6/a1/fed04083345fde74d6f7012dd21c7e8f91bd98fedc17b1e5e182623844fc/mira_simpeg-0.19.0.dev7-py2.py3-none-any.whl - hash: - sha256: d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - category: core - optional: true -- name: param-sweeps - version: 0.1.6 - manager: pip - platform: linux-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/08/5d/1b1b866e01ed83e1a973da701f6ce0c9614ebdf27172a79f43e22b639717/param_sweeps-0.1.6-py3-none-any.whl - hash: - sha256: d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - category: main - optional: false -- name: param-sweeps - version: 0.1.6 - manager: pip - platform: osx-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/08/5d/1b1b866e01ed83e1a973da701f6ce0c9614ebdf27172a79f43e22b639717/param_sweeps-0.1.6-py3-none-any.whl - hash: - sha256: d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - category: main - optional: false -- name: param-sweeps - version: 0.1.6 - manager: pip - platform: win-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/08/5d/1b1b866e01ed83e1a973da701f6ce0c9614ebdf27172a79f43e22b639717/param_sweeps-0.1.6-py3-none-any.whl - hash: - sha256: d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - category: main - optional: false -- name: simpeg-archive - version: 0.11.0.dev6 - manager: pip - platform: linux-64 - dependencies: - discretize: '*' - numpy: '>=1.7' - properties: '>=0.3.1b2' - pymatsolver: '>=0.1.1' - scipy: '>=0.13' - url: https://files.pythonhosted.org/packages/ce/bf/835bfe4f5b90a9484b5ab434d6b0295bc9c8cc44d4c30c8a70cad61855a3/simpeg_archive-0.11.0.dev6-py2.py3-none-any.whl - hash: - sha256: ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - category: core - optional: true -- name: simpeg-archive - version: 0.11.0.dev6 - manager: pip - platform: osx-64 - dependencies: - discretize: '*' - numpy: '>=1.7' - properties: '>=0.3.1b2' - pymatsolver: '>=0.1.1' - scipy: '>=0.13' - url: https://files.pythonhosted.org/packages/ce/bf/835bfe4f5b90a9484b5ab434d6b0295bc9c8cc44d4c30c8a70cad61855a3/simpeg_archive-0.11.0.dev6-py2.py3-none-any.whl - hash: - sha256: ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - category: core - optional: true -- name: simpeg-archive - version: 0.11.0.dev6 - manager: pip - platform: win-64 - dependencies: - discretize: '*' - numpy: '>=1.7' - properties: '>=0.3.1b2' - pymatsolver: '>=0.1.1' - scipy: '>=0.13' - url: https://files.pythonhosted.org/packages/ce/bf/835bfe4f5b90a9484b5ab434d6b0295bc9c8cc44d4c30c8a70cad61855a3/simpeg_archive-0.11.0.dev6-py2.py3-none-any.whl - hash: - sha256: ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - category: core - optional: true diff --git a/conda-py-3.9-lock.yml b/conda-py-3.9-lock.yml deleted file mode 100644 index 02470706e..000000000 --- a/conda-py-3.9-lock.yml +++ /dev/null @@ -1,15172 +0,0 @@ -# This lock file was generated by conda-lock (https://github.com/conda/conda-lock). DO NOT EDIT! -# -# A "lock file" contains a concrete list of package versions (with checksums) to be installed. Unlike -# e.g. `conda env create`, the resulting environment will not change as new package versions become -# available, unless you explicitly update the lock file. -# -# Install this environment as "YOURENV" with: -# conda-lock install -n YOURENV conda-py-3.9-lock.yml -# This lock contains optional development dependencies. Include them in the installed environment with: -# conda-lock install --dev-dependencies -n YOURENV conda-py-3.9-lock.yml -# This lock contains optional dependency categories apps, core. Include them in the installed environment with: -# conda-lock install -e apps -e core -n YOURENV conda-py-3.9-lock.yml -# To update a single package to the latest version compatible with the version constraints in the source: -# conda-lock lock --lockfile conda-py-3.9-lock.yml --update PACKAGE -# To re-solve the entire environment, e.g. after changing a version constraint in the source file: -# conda-lock -f pyproject.toml -f environments/env-python-3.9.yml --lockfile conda-py-3.9-lock.yml -version: 1 -metadata: - content_hash: - win-64: 7998655d789668d70c9ad4f4d23175fb04cc18631c710cf86c3a747b45646c83 - osx-64: 47b1fb4228ea370c49682cfb5c08704f90085fd1f217af35e49f85cfc940addd - linux-64: d7514d18c40d6cddbb40654ada932f51065775b102c52bffecd36b67b3839c05 - channels: - - url: conda-forge - used_env_vars: [] - platforms: - - win-64 - - osx-64 - - linux-64 - sources: - - pyproject.toml - - environments/env-python-3.9.yml -package: -- name: _libgcc_mutex - version: '0.1' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - hash: - md5: d7c89558ba9fa0495403155b64376d81 - sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 - category: main - optional: false -- name: _openmp_mutex - version: '4.5' - manager: conda - platform: linux-64 - dependencies: - _libgcc_mutex: '0.1' - llvm-openmp: '>=9.0.1' - url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - hash: - md5: 562b26ba2e19059551a811e72ab7f793 - sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc - category: main - optional: false -- name: alsa-lib - version: 1.2.11 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda - hash: - md5: 0bb492cca54017ea314b809b1ee3a176 - sha256: 0e2b75b9834a6e520b13db516f7cf5c9cea8f0bbc9157c978444173dacb98fec - category: apps - optional: true -- name: anyio - version: 3.7.1 - manager: conda - platform: linux-64 - dependencies: - exceptiongroup: '' - idna: '>=2.8' - python: '>=3.7' - sniffio: '>=1.1' - typing_extensions: '' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - hash: - md5: 7b517e7a6f0790337906c055aa97ca49 - sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4 - category: apps - optional: true -- name: anyio - version: 3.7.1 - manager: conda - platform: osx-64 - dependencies: - typing_extensions: '' - exceptiongroup: '' - python: '>=3.7' - sniffio: '>=1.1' - idna: '>=2.8' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - hash: - md5: 7b517e7a6f0790337906c055aa97ca49 - sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4 - category: apps - optional: true -- name: anyio - version: 3.7.1 - manager: conda - platform: win-64 - dependencies: - typing_extensions: '' - exceptiongroup: '' - python: '>=3.7' - sniffio: '>=1.1' - idna: '>=2.8' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - hash: - md5: 7b517e7a6f0790337906c055aa97ca49 - sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4 - category: apps - optional: true -- name: appnope - version: 0.1.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda - hash: - md5: cc4834a9ee7cc49ce8d25177c47b10d8 - sha256: 45ae2d41f4a4dcf8707633d3d7ae376fc62f0c09b1d063c3049c3f6f8c911670 - category: apps - optional: true -- name: argon2-cffi - version: 23.1.0 - manager: conda - platform: linux-64 - dependencies: - argon2-cffi-bindings: '' - python: '>=3.7' - typing-extensions: '' - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3afef1f55a1366b4d3b6a0d92e2235e4 - sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 - category: apps - optional: true -- name: argon2-cffi - version: 23.1.0 - manager: conda - platform: osx-64 - dependencies: - typing-extensions: '' - argon2-cffi-bindings: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3afef1f55a1366b4d3b6a0d92e2235e4 - sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 - category: apps - optional: true -- name: argon2-cffi - version: 23.1.0 - manager: conda - platform: win-64 - dependencies: - typing-extensions: '' - argon2-cffi-bindings: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3afef1f55a1366b4d3b6a0d92e2235e4 - sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 - category: apps - optional: true -- name: argon2-cffi-bindings - version: 21.2.0 - manager: conda - platform: linux-64 - dependencies: - cffi: '>=1.0.1' - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py39hd1e30aa_4.conda - hash: - md5: 6a04738e75f877b68552fc19cb045233 - sha256: 63c6f462a18e655e6c5fe4e433ac94100bca1a076e5bb5382c2479ac7a42fd54 - category: apps - optional: true -- name: argon2-cffi-bindings - version: 21.2.0 - manager: conda - platform: osx-64 - dependencies: - cffi: '>=1.0.1' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/argon2-cffi-bindings-21.2.0-py39hdc70f33_4.conda - hash: - md5: 3a0f682e6fdf53ff630c22cdd90ac0c1 - sha256: 47eb7e5826557364e7f71f3cb57d98486572c6af9bc4b1a9cb6c164504c09d92 - category: apps - optional: true -- name: argon2-cffi-bindings - version: 21.2.0 - manager: conda - platform: win-64 - dependencies: - cffi: '>=1.0.1' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py39ha55989b_4.conda - hash: - md5: 40f25bc759e1ea863a6e468380cd2363 - sha256: 3e1462d8b5e14f8901260da4fb12034e01831e398b0777cbcea662cb80b1275b - category: apps - optional: true -- name: asciitree - version: 0.3.3 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - hash: - md5: c0481c9de49f040272556e2cedf42816 - sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 - category: core - optional: true -- name: asciitree - version: 0.3.3 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - hash: - md5: c0481c9de49f040272556e2cedf42816 - sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 - category: core - optional: true -- name: asciitree - version: 0.3.3 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - hash: - md5: c0481c9de49f040272556e2cedf42816 - sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 - category: core - optional: true -- name: astroid - version: 3.1.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - typing-extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.1.0-py39hf3d152e_0.conda - hash: - md5: 8206a0bfae8514702fba15aff6669f9b - sha256: b73df723ff5fc3446b8d416e10e99a48cff3be668113b94a36a3154e9b495c7d - category: dev - optional: true -- name: astroid - version: 3.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - typing-extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/astroid-3.1.0-py39h6e9494a_0.conda - hash: - md5: a6ecd75c6b8076b53152f11bb41ce9ca - sha256: b2bc5c7d074578beb2234a1a993ab1ba2983b41289c82e2a347fc66969646491 - category: dev - optional: true -- name: astroid - version: 3.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - typing-extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/win-64/astroid-3.1.0-py39hcbf5309_0.conda - hash: - md5: 9f481ca85d729abdba1f4d1e651d90b5 - sha256: 0e633e3c4dcb6bcc5cf3ec3b4b71944fb190af1d984e7270e28bff2133caca7a - category: dev - optional: true -- name: asttokens - version: 2.4.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - six: '>=1.12.0' - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - hash: - md5: 5f25798dcefd8252ce5f9dc494d5f571 - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - category: apps - optional: true -- name: asttokens - version: 2.4.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - six: '>=1.12.0' - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - hash: - md5: 5f25798dcefd8252ce5f9dc494d5f571 - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - category: apps - optional: true -- name: asttokens - version: 2.4.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - six: '>=1.12.0' - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - hash: - md5: 5f25798dcefd8252ce5f9dc494d5f571 - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - category: apps - optional: true -- name: attr - version: 2.5.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2 - hash: - md5: d9c69a24ad678ffce24c6543a0176b00 - sha256: 82c13b1772c21fc4a17441734de471d3aabf82b61db9b11f4a1bd04a9c4ac324 - category: apps - optional: true -- name: attrs - version: 23.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - hash: - md5: 5e4c0743c70186509d1412e03c2d8dfa - sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea - category: core - optional: true -- name: attrs - version: 23.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - hash: - md5: 5e4c0743c70186509d1412e03c2d8dfa - sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea - category: core - optional: true -- name: attrs - version: 23.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - hash: - md5: 5e4c0743c70186509d1412e03c2d8dfa - sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea - category: core - optional: true -- name: beautifulsoup4 - version: 4.12.3 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - hash: - md5: 332493000404d8411859539a5a630865 - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - category: apps - optional: true -- name: beautifulsoup4 - version: 4.12.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - hash: - md5: 332493000404d8411859539a5a630865 - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - category: apps - optional: true -- name: beautifulsoup4 - version: 4.12.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - hash: - md5: 332493000404d8411859539a5a630865 - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - category: apps - optional: true -- name: bleach - version: 6.1.0 - manager: conda - platform: linux-64 - dependencies: - packaging: '' - python: '>=3.6' - setuptools: '' - six: '>=1.9.0' - webencodings: '' - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - hash: - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - category: apps - optional: true -- name: bleach - version: 6.1.0 - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - packaging: '' - webencodings: '' - python: '>=3.6' - six: '>=1.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - hash: - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - category: apps - optional: true -- name: bleach - version: 6.1.0 - manager: conda - platform: win-64 - dependencies: - setuptools: '' - packaging: '' - webencodings: '' - python: '>=3.6' - six: '>=1.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - hash: - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - category: apps - optional: true -- name: blinker - version: 1.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 550da20b2c2e38be9cc44bb819fda5d5 - sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 - category: apps - optional: true -- name: blinker - version: 1.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 550da20b2c2e38be9cc44bb819fda5d5 - sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 - category: apps - optional: true -- name: blinker - version: 1.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 550da20b2c2e38be9cc44bb819fda5d5 - sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 - category: apps - optional: true -- name: blosc - version: 1.21.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - snappy: '>=1.2.0,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-hc2324a3_1.conda - hash: - md5: 11d76bee958b1989bd1ac6ee7372ea6d - sha256: fde5e8ad75d2a5f154e29da7763a5dd9ee5b5b5c3fc22a1f5170296c8f6f3f62 - category: core - optional: true -- name: blosc - version: 1.21.5 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - snappy: '>=1.2.0,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.5-hafa3907_1.conda - hash: - md5: 937b9f86de960cd40c8ef5c7421b7028 - sha256: a2e867d61ce398187d59f59e034e8651c825cb33224d2c6f315876b6df5e2161 - category: core - optional: true -- name: blosc - version: 1.21.5 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - snappy: '>=1.2.0,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.3,<15' - vc14_runtime: '>=14.38.33130' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hbd69f2e_1.conda - hash: - md5: 06c7d9a1cdecef43921be8b577a61ee7 - sha256: a74c8a91bee3947f9865abd057ce33a1ebb728f04041bfd47bc478fdc133ca22 - category: core - optional: true -- name: brotli - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - brotli-bin: 1.1.0 - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda - hash: - md5: f27a24d46e3ea7b70a1f98e50c62508f - sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b - category: core - optional: true -- name: brotli - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - brotli-bin: 1.1.0 - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.1.0-h0dc2134_1.conda - hash: - md5: 9272dd3b19c4e8212f8542cefd5c3d67 - sha256: 4bf66d450be5d3f9ebe029b50f818d088b1ef9666b1f19e90c85479c77bbdcde - category: core - optional: true -- name: brotli - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - brotli-bin: 1.1.0 - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-hcfcfb64_1.conda - hash: - md5: f47f6db2528e38321fb00ae31674c133 - sha256: b927c95121c5f3d82fe084730281739fb04621afebf2d9f05711a0f42d27e326 - category: core - optional: true -- name: brotli-bin - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda - hash: - md5: 39f910d205726805a958da408ca194ba - sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677 - category: core - optional: true -- name: brotli-bin - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.1.0-h0dc2134_1.conda - hash: - md5: ece565c215adcc47fc1db4e651ee094b - sha256: 7ca3cfb4c5df314ed481301335387ab2b2ee651e2c74fbb15bacc795c664a5f1 - category: core - optional: true -- name: brotli-bin - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - libbrotlidec: 1.1.0 - libbrotlienc: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.1.0-hcfcfb64_1.conda - hash: - md5: 0105229d7c5fabaa840043a86c10ec64 - sha256: 4fbcb8f94acc97b2b04adbc64e304acd7c06fa0cf01953527bddae46091cc942 - category: core - optional: true -- name: brotli-python - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda - hash: - md5: c48418c8b35f1d59ae9ae1174812b40a - sha256: e22afb19527a93da24c1108c3e91532811f9c3df64a9473989faf332c98af082 - category: main - optional: false -- name: brotli-python - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py39h840bb9f_1.conda - hash: - md5: bf1edb07835e15685718843f7e71bab1 - sha256: e19de8f5d9e1fe650b49eff6b0111eebd3b98368b5ae82733b90ec0abea5062a - category: main - optional: false -- name: brotli-python - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py39h99910a6_1.conda - hash: - md5: f24ba3942ece1e5d3dcde934f0532998 - sha256: 076f6ac7dc00cfca25e11fd42bfd3cc3395307d9a3aa3958a13d14bc8ea610ec - category: main - optional: false -- name: bzip2 - version: 1.0.8 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda - hash: - md5: 69b8b6202a07720f448be700e300ccf4 - sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8 - category: main - optional: false -- name: bzip2 - version: 1.0.8 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda - hash: - md5: 6097a6ca9ada32699b5fc4312dd6ef18 - sha256: 61fb2b488928a54d9472113e1280b468a309561caa54f33825a3593da390b242 - category: main - optional: false -- name: bzip2 - version: 1.0.8 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda - hash: - md5: 26eb8ca6ea332b675e11704cce84a3be - sha256: ae5f47a5c86fd6db822931255dcf017eb12f60c77f07dc782ccb477f7808aab2 - category: main - optional: false -- name: c-ares - version: 1.28.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.28.1-hd590300_0.conda - hash: - md5: dcde58ff9a1f30b0037a2315d1846d1f - sha256: cb25063f3342149c7924b21544109696197a9d774f1407567477d4f3026bf38a - category: main - optional: false -- name: c-ares - version: 1.28.1 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.28.1-h10d778d_0.conda - hash: - md5: d5eb7992227254c0e9a0ce71151f0079 - sha256: fccd7ad7e3dfa6b19352705b33eb738c4c55f79f398e106e6cf03bab9415595a - category: main - optional: false -- name: c-ares - version: 1.28.1 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.28.1-hcfcfb64_0.conda - hash: - md5: 3b2a518680f790a79a7e77bad1861c3a - sha256: 44ded34fdac46d4a37942c1cae3fc871dc6ecb13e0408442c6f8797671b332e6 - category: core - optional: true -- name: c-blosc2 - version: 2.13.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - lz4-c: '>=1.9.3,<1.10.0a0' - zlib-ng: '>=2.0.7,<2.1.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_1.conda - hash: - md5: 5cfd15d41b7dc840897999da46c39811 - sha256: c25f8d08ad3ec8955a92eb9a452e92859dd8bb872fa87fffa6ef0f6cc5158ccb - category: main - optional: false -- name: c-blosc2 - version: 2.13.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - lz4-c: '>=1.9.3,<1.10.0a0' - zlib-ng: '>=2.0.7,<2.1.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-2.13.2-h0ae8482_1.conda - hash: - md5: 7f301a6f620dbbb63c03da14a6cc454c - sha256: c394c6666b5200e5cae59ac7ce36b91c0cf4f1e670b984c345dbf408b00b0e70 - category: main - optional: false -- name: c-blosc2 - version: 2.13.2 - manager: conda - platform: win-64 - dependencies: - lz4-c: '>=1.9.3,<1.10.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib-ng: '>=2.0.7,<2.1.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.13.2-h183a6f4_1.conda - hash: - md5: 56c2e93380f3355204d5695434068b74 - sha256: f4f8c5396dd20c0dcf6090305e696eb9dd3434253db2ec2e8b35e9e23ba5635c - category: main - optional: false -- name: ca-certificates - version: 2024.2.2 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda - hash: - md5: 2f4327a1cbe7f022401b236e915a5fef - sha256: 91d81bfecdbb142c15066df70cc952590ae8991670198f92c66b62019b251aeb - category: main - optional: false -- name: ca-certificates - version: 2024.2.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.2.2-h8857fd0_0.conda - hash: - md5: f2eacee8c33c43692f1ccfd33d0f50b1 - sha256: 54a794aedbb4796afeabdf54287b06b1d27f7b13b3814520925f4c2c80f58ca9 - category: main - optional: false -- name: ca-certificates - version: 2024.2.2 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.2.2-h56e8100_0.conda - hash: - md5: 63da060240ab8087b60d1357051ea7d6 - sha256: 4d587088ecccd393fec3420b64f1af4ee1a0e6897a45cfd5ef38055322cea5d0 - category: main - optional: false -- name: cached-property - version: 1.5.2 - manager: conda - platform: linux-64 - dependencies: - cached_property: '>=1.5.2,<1.5.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - hash: - md5: 9b347a7ec10940d3f7941ff6c460b551 - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - category: main - optional: false -- name: cached-property - version: 1.5.2 - manager: conda - platform: osx-64 - dependencies: - cached_property: '>=1.5.2,<1.5.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - hash: - md5: 9b347a7ec10940d3f7941ff6c460b551 - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - category: main - optional: false -- name: cached-property - version: 1.5.2 - manager: conda - platform: win-64 - dependencies: - cached_property: '>=1.5.2,<1.5.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - hash: - md5: 9b347a7ec10940d3f7941ff6c460b551 - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - category: main - optional: false -- name: cached_property - version: 1.5.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - hash: - md5: 576d629e47797577ab0f1b351297ef4a - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - category: main - optional: false -- name: cached_property - version: 1.5.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - hash: - md5: 576d629e47797577ab0f1b351297ef4a - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - category: main - optional: false -- name: cached_property - version: 1.5.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - hash: - md5: 576d629e47797577ab0f1b351297ef4a - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - category: main - optional: false -- name: cairo - version: 1.18.0 - manager: conda - platform: linux-64 - dependencies: - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - icu: '>=73.2,<74.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libstdcxx-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pixman: '>=0.42.2,<1.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - xorg-libsm: '>=1.2.4,<2.0a0' - xorg-libx11: '>=1.8.6,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-libxrender: '>=0.9.11,<0.10.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda - hash: - md5: f907bb958910dc404647326ca80c263e - sha256: 142e2639a5bc0e99c44d76f4cc8dce9c6a2d87330c4beeabb128832cd871a86e - category: core - optional: true -- name: cairo - version: 1.18.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - icu: '>=73.2,<74.0a0' - libcxx: '>=16.0.6' - libglib: '>=2.78.0,<3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pixman: '>=0.42.2,<1.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-64/cairo-1.18.0-h99e66fa_0.conda - hash: - md5: 13f830b1bf46018f7062d1b798d53eca - sha256: f8d1142cf244eadcbc44e8ca2266aa61a05b6cda5571f9b745ba32c7ebbfdfba - category: core - optional: true -- name: cairo - version: 1.18.0 - manager: conda - platform: win-64 - dependencies: - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - icu: '>=73.2,<74.0a0' - libglib: '>=2.78.0,<3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pixman: '>=0.42.2,<1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - url: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.0-h1fef639_0.conda - hash: - md5: b3fe2c6381ec74afe8128e16a11eee02 - sha256: 451e714f065b5dd0c11169058be56b10973dfd7d9a0fccf9c6a05d1e09995730 - category: core - optional: true -- name: certifi - version: 2024.2.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda - hash: - md5: 0876280e409658fc6f9e75d035960333 - sha256: f1faca020f988696e6b6ee47c82524c7806380b37cfdd1def32f92c326caca54 - category: main - optional: false -- name: certifi - version: 2024.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda - hash: - md5: 0876280e409658fc6f9e75d035960333 - sha256: f1faca020f988696e6b6ee47c82524c7806380b37cfdd1def32f92c326caca54 - category: main - optional: false -- name: certifi - version: 2024.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda - hash: - md5: 0876280e409658fc6f9e75d035960333 - sha256: f1faca020f988696e6b6ee47c82524c7806380b37cfdd1def32f92c326caca54 - category: main - optional: false -- name: cffi - version: 1.16.0 - manager: conda - platform: linux-64 - dependencies: - libffi: '>=3.4,<4.0a0' - libgcc-ng: '>=12' - pycparser: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py39h7a31438_0.conda - hash: - md5: ac992767d7f8ed2cb27e71e78f0fb2d7 - sha256: 1536a2ca65caaf568bbdfe75aff8e12cb0e0507587b25af3b532a8bd22cb3ddb - category: apps - optional: true -- name: cffi - version: 1.16.0 - manager: conda - platform: osx-64 - dependencies: - libffi: '>=3.4,<4.0a0' - pycparser: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.16.0-py39h18ef598_0.conda - hash: - md5: c31ac48f93f773fd27e99f113cfffb98 - sha256: 26f365b87864cac155aa966a979d8cb17195032c05b61041d3d0dabd43ba0c0b - category: apps - optional: true -- name: cffi - version: 1.16.0 - manager: conda - platform: win-64 - dependencies: - pycparser: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.16.0-py39ha55989b_0.conda - hash: - md5: 3641cc4492220301e0b0c65cf2985a80 - sha256: 1a1f399b29a5702110208fb85e215937b7d10347bd13bfc3601cabd964d83b25 - category: apps - optional: true -- name: cfitsio - version: 4.2.0 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libcurl: '>=7.86.0,<9.0a0' - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=10.4.0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.2.0-hd9d235c_0.conda - hash: - md5: 8c57a9adbafd87f5eff842abde599cb4 - sha256: 6409d15f09ae1a1673c971c8f45fc87272d1af569d027efbe16b689a1a8afd0d - category: core - optional: true -- name: cfitsio - version: 4.2.0 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libcurl: '>=7.86.0,<9.0a0' - libgfortran: 5.* - libgfortran5: '>=11.3.0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.2.0-hd56cc12_0.conda - hash: - md5: 28e03cefd79aa28ec0e313e5a9c71f5b - sha256: 9e4746e64dd54030777ee77f6cb729374e877da2322236c10563dff27b877660 - category: core - optional: true -- name: cfitsio - version: 4.2.0 - manager: conda - platform: win-64 - dependencies: - libcurl: '>=7.86.0,<9.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/cfitsio-4.2.0-h9ebe7e4_0.conda - hash: - md5: cccd314cbeea4f2f70f73c763d9660e8 - sha256: 18e893342e7ac8254741ea1dbae1b1f8e7771f2fdbb12e591e55f3a0519343ef - category: core - optional: true -- name: charset-normalizer - version: 3.3.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - hash: - md5: 7f4a9e3fcff3f6356ae99244a014da6a - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - category: main - optional: false -- name: charset-normalizer - version: 3.3.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - hash: - md5: 7f4a9e3fcff3f6356ae99244a014da6a - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - category: main - optional: false -- name: charset-normalizer - version: 3.3.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - hash: - md5: 7f4a9e3fcff3f6356ae99244a014da6a - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - category: main - optional: false -- name: click - version: 8.1.7 - manager: conda - platform: linux-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - hash: - md5: f3ad426304898027fc619827ff428eca - sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: core - optional: true -- name: click - version: 8.1.7 - manager: conda - platform: osx-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - hash: - md5: f3ad426304898027fc619827ff428eca - sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: core - optional: true -- name: click - version: 8.1.7 - manager: conda - platform: win-64 - dependencies: - colorama: '' - __win: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - hash: - md5: 3549ecbceb6cd77b91a105511b7d0786 - sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 - category: core - optional: true -- name: click-plugins - version: 1.1.1 - manager: conda - platform: linux-64 - dependencies: - click: '>=3.0' - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 - hash: - md5: 4fd2c6b53934bd7d96d1f3fdaf99b79f - sha256: ddef6e559dde6673ee504b0e29dd814d36e22b6b9b1f519fa856ee268905bf92 - category: core - optional: true -- name: click-plugins - version: 1.1.1 - manager: conda - platform: osx-64 - dependencies: - python: '' - click: '>=3.0' - url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 - hash: - md5: 4fd2c6b53934bd7d96d1f3fdaf99b79f - sha256: ddef6e559dde6673ee504b0e29dd814d36e22b6b9b1f519fa856ee268905bf92 - category: core - optional: true -- name: click-plugins - version: 1.1.1 - manager: conda - platform: win-64 - dependencies: - python: '' - click: '>=3.0' - url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 - hash: - md5: 4fd2c6b53934bd7d96d1f3fdaf99b79f - sha256: ddef6e559dde6673ee504b0e29dd814d36e22b6b9b1f519fa856ee268905bf92 - category: core - optional: true -- name: cligj - version: 0.7.2 - manager: conda - platform: linux-64 - dependencies: - click: '>=4.0' - python: <4.0 - url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 - hash: - md5: a29b7c141d6b2de4bb67788a5f107734 - sha256: 97bd58f0cfcff56a0bcda101e26f7d936625599325beba3e3a1fa512dd7fc174 - category: core - optional: true -- name: cligj - version: 0.7.2 - manager: conda - platform: osx-64 - dependencies: - python: <4.0 - click: '>=4.0' - url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 - hash: - md5: a29b7c141d6b2de4bb67788a5f107734 - sha256: 97bd58f0cfcff56a0bcda101e26f7d936625599325beba3e3a1fa512dd7fc174 - category: core - optional: true -- name: cligj - version: 0.7.2 - manager: conda - platform: win-64 - dependencies: - python: <4.0 - click: '>=4.0' - url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 - hash: - md5: a29b7c141d6b2de4bb67788a5f107734 - sha256: 97bd58f0cfcff56a0bcda101e26f7d936625599325beba3e3a1fa512dd7fc174 - category: core - optional: true -- name: cloudpickle - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 753d29fe41bb881e4b9c004f0abf973f - sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 - category: core - optional: true -- name: cloudpickle - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 753d29fe41bb881e4b9c004f0abf973f - sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 - category: core - optional: true -- name: cloudpickle - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 753d29fe41bb881e4b9c004f0abf973f - sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 - category: core - optional: true -- name: colorama - version: 0.4.6 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3faab06a954c2a04039983f2c4a50d99 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - category: dev - optional: true -- name: colorama - version: 0.4.6 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3faab06a954c2a04039983f2c4a50d99 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - category: dev - optional: true -- name: colorama - version: 0.4.6 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3faab06a954c2a04039983f2c4a50d99 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - category: dev - optional: true -- name: comm - version: 0.2.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - hash: - md5: 948d84721b578d426294e17a02e24cbb - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - category: apps - optional: true -- name: comm - version: 0.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - hash: - md5: 948d84721b578d426294e17a02e24cbb - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - category: apps - optional: true -- name: comm - version: 0.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - hash: - md5: 948d84721b578d426294e17a02e24cbb - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - category: apps - optional: true -- name: contourpy - version: 1.2.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.20' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py39h7633fee_0.conda - hash: - md5: bdc188e59857d6efab332714e0d01d93 - sha256: 7799c6cd8425ac69b2495b2acf938d85e6776c0c9129de86d18ec55e53bcfefc - category: core - optional: true -- name: contourpy - version: 1.2.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - numpy: '>=1.20' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.2.1-py39h0ca7971_0.conda - hash: - md5: a4c478d3b64c81d1742dc8073e4996b6 - sha256: 2ed1f40e016afaeb705297d6ce5b474c3570890bf972d3425c37bf45e196d088 - category: core - optional: true -- name: contourpy - version: 1.2.1 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.20' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.2.1-py39h1f6ef14_0.conda - hash: - md5: 03e25c6bae87f4f9595337255b44b0fb - sha256: 32820a069906394d10bd908a0cfdbb60b940fb81e71aef3303ab9ab93c4625e6 - category: core - optional: true -- name: coverage - version: 7.4.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.4.4-py39hd1e30aa_0.conda - hash: - md5: 6f8b9c064e8393bc6b25ef1085192ba6 - sha256: b3f11ed2649a7710f63fe14d89954cb982c8b119d56ddf395bc339397b043af4 - category: dev - optional: true -- name: coverage - version: 7.4.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.4.4-py39ha09f3b3_0.conda - hash: - md5: c7e430f2b3a3f9ef725aeb1a777ce5b8 - sha256: b6d6fab76588edeaba7b3b25c44c616c0a3b9faaa70fa391447bc22cc7e39c68 - category: dev - optional: true -- name: coverage - version: 7.4.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tomli: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.4.4-py39ha55989b_0.conda - hash: - md5: ca4fca57e0e713af82c73a9e6c5b9716 - sha256: 0d5b111859ae7192c9df6b677f0d562a1e88f726bfe1adeb4775568ff9df5003 - category: dev - optional: true -- name: cycler - version: 0.12.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 5cd86562580f274031ede6aa6aa24441 - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - category: core - optional: true -- name: cycler - version: 0.12.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 5cd86562580f274031ede6aa6aa24441 - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - category: core - optional: true -- name: cycler - version: 0.12.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 5cd86562580f274031ede6aa6aa24441 - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - category: core - optional: true -- name: cytoolz - version: 0.12.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - toolz: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py39hd1e30aa_0.conda - hash: - md5: dc0fb8e157c7caba4c98f1e1f9d2e5f4 - sha256: bbc7069221cb5ff29dd8f10f2ae32a6caa72394459a7c67ec2e19d9b9f42cd78 - category: core - optional: true -- name: cytoolz - version: 0.12.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - toolz: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/osx-64/cytoolz-0.12.3-py39ha09f3b3_0.conda - hash: - md5: 069c271e8e59773b433717998f1ffd4e - sha256: 7871cef868636cc21c710a931c359bd1af79fe198d2b3aaaa6256cbbc0300570 - category: core - optional: true -- name: cytoolz - version: 0.12.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - toolz: '>=0.10.0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/cytoolz-0.12.3-py39ha55989b_0.conda - hash: - md5: 3574fdd02b7249a4d898e914f679744e - sha256: 4b77b63cf2e77a1981ab5cb25331c8b9eba6be6f85bb58874bc156796b2009ad - category: core - optional: true -- name: dash - version: 2.16.1 - manager: conda - platform: linux-64 - dependencies: - flask: '>=1.0.4' - importlib-metadata: '' - nest-asyncio: '' - plotly: '>=5.0.0' - python: '>=3.6' - requests: '' - retrying: '' - setuptools: '' - typing-extensions: '>=4.1.1' - werkzeug: '' - url: https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda - hash: - md5: 016bd4f61878a57f19c8cd744708a1f1 - sha256: 9eeb4e9cd023e072883f121085e67a2c67ab9a58b1fdf07d356fc05fb9791645 - category: apps - optional: true -- name: dash - version: 2.16.1 - manager: conda - platform: osx-64 - dependencies: - requests: '' - setuptools: '' - importlib-metadata: '' - nest-asyncio: '' - werkzeug: '' - retrying: '' - python: '>=3.6' - plotly: '>=5.0.0' - typing-extensions: '>=4.1.1' - flask: '>=1.0.4' - url: https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda - hash: - md5: 016bd4f61878a57f19c8cd744708a1f1 - sha256: 9eeb4e9cd023e072883f121085e67a2c67ab9a58b1fdf07d356fc05fb9791645 - category: apps - optional: true -- name: dash - version: 2.16.1 - manager: conda - platform: win-64 - dependencies: - requests: '' - setuptools: '' - importlib-metadata: '' - nest-asyncio: '' - werkzeug: '' - retrying: '' - python: '>=3.6' - plotly: '>=5.0.0' - typing-extensions: '>=4.1.1' - flask: '>=1.0.4' - url: https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda - hash: - md5: 016bd4f61878a57f19c8cd744708a1f1 - sha256: 9eeb4e9cd023e072883f121085e67a2c67ab9a58b1fdf07d356fc05fb9791645 - category: apps - optional: true -- name: dash-daq - version: 0.5.0 - manager: conda - platform: linux-64 - dependencies: - dash: '>=1.6.1' - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyh9f0ad1d_1.tar.bz2 - hash: - md5: ebd54a61606fa8a191932cb72e448418 - sha256: 5e99ab8b5cac15e5d6986a90566a335c21b2849838a6e877bec79efa2e7e346f - category: apps - optional: true -- name: dash-daq - version: 0.5.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - dash: '>=1.6.1' - url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyh9f0ad1d_1.tar.bz2 - hash: - md5: ebd54a61606fa8a191932cb72e448418 - sha256: 5e99ab8b5cac15e5d6986a90566a335c21b2849838a6e877bec79efa2e7e346f - category: apps - optional: true -- name: dash-daq - version: 0.5.0 - manager: conda - platform: win-64 - dependencies: - python: '' - dash: '>=1.6.1' - url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyh9f0ad1d_1.tar.bz2 - hash: - md5: ebd54a61606fa8a191932cb72e448418 - sha256: 5e99ab8b5cac15e5d6986a90566a335c21b2849838a6e877bec79efa2e7e346f - category: apps - optional: true -- name: dask-core - version: 2022.10.2 - manager: conda - platform: linux-64 - dependencies: - click: '>=7.0' - cloudpickle: '>=1.1.1' - fsspec: '>=0.6.0' - packaging: '>=20.0' - partd: '>=0.3.10' - python: '>=3.8' - pyyaml: '>=5.3.1' - toolz: '>=0.8.2' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6f837aa0cbc910b39207fe5d97dfdf1e - sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf - category: core - optional: true -- name: dask-core - version: 2022.10.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - click: '>=7.0' - packaging: '>=20.0' - pyyaml: '>=5.3.1' - toolz: '>=0.8.2' - partd: '>=0.3.10' - fsspec: '>=0.6.0' - cloudpickle: '>=1.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6f837aa0cbc910b39207fe5d97dfdf1e - sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf - category: core - optional: true -- name: dask-core - version: 2022.10.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - click: '>=7.0' - packaging: '>=20.0' - pyyaml: '>=5.3.1' - toolz: '>=0.8.2' - partd: '>=0.3.10' - fsspec: '>=0.6.0' - cloudpickle: '>=1.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6f837aa0cbc910b39207fe5d97dfdf1e - sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf - category: core - optional: true -- name: dbus - version: 1.13.6 - manager: conda - platform: linux-64 - dependencies: - expat: '>=2.4.2,<3.0a0' - libgcc-ng: '>=9.4.0' - libglib: '>=2.70.2,<3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 - hash: - md5: ecfff944ba3960ecb334b9a2663d708d - sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 - category: apps - optional: true -- name: debugpy - version: 1.8.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.1-py39h3d6467e_0.conda - hash: - md5: d48142fba253b2a1074f8ddee84749cb - sha256: 17b1f8a3b4c4df1cf78ec1cdd46d53743ad9fe8bb34fa162dfaaee698f9a6864 - category: apps - optional: true -- name: debugpy - version: 1.8.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.1-py39hd253f6c_0.conda - hash: - md5: 328dc0de8a70c8f8de65d37a6b289220 - sha256: 9c45fffa6c2c4494b267e371d6c55cd0f8c7703e89b167263f4906a7339339b7 - category: apps - optional: true -- name: debugpy - version: 1.8.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.1-py39h99910a6_0.conda - hash: - md5: 412a0fe4d63fab41a73776839a5856db - sha256: 0a677541fe21bbf258fd008ebb5fe9d6e1ede39fb1c8e43cc4019c96dabcb0b0 - category: apps - optional: true -- name: decorator - version: 5.1.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 43afe5ab04e35e17ba28649471dd7364 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - category: apps - optional: true -- name: decorator - version: 5.1.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 43afe5ab04e35e17ba28649471dd7364 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - category: apps - optional: true -- name: decorator - version: 5.1.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 43afe5ab04e35e17ba28649471dd7364 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - category: apps - optional: true -- name: defusedxml - version: 0.7.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 961b3a227b437d82ad7054484cfa71b2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - category: apps - optional: true -- name: defusedxml - version: 0.7.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 961b3a227b437d82ad7054484cfa71b2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - category: apps - optional: true -- name: defusedxml - version: 0.7.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 961b3a227b437d82ad7054484cfa71b2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - category: apps - optional: true -- name: dill - version: 0.3.8 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda - hash: - md5: 78745f157d56877a2c6e7b386f66f3e2 - sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4 - category: dev - optional: true -- name: dill - version: 0.3.8 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda - hash: - md5: 78745f157d56877a2c6e7b386f66f3e2 - sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4 - category: dev - optional: true -- name: dill - version: 0.3.8 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda - hash: - md5: 78745f157d56877a2c6e7b386f66f3e2 - sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4 - category: dev - optional: true -- name: discretize - version: 0.10.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=1.8' - url: https://conda.anaconda.org/conda-forge/linux-64/discretize-0.10.0-py39hda80f44_1.conda - hash: - md5: 4d4d54727ce8cb9528abe44fce869360 - sha256: e2abaa1513ec0de1d2f67dae91d6943290fa7e06aaac107d21eaad58e60d0e36 - category: core - optional: true -- name: discretize - version: 0.10.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=1.8' - url: https://conda.anaconda.org/conda-forge/osx-64/discretize-0.10.0-py39hd83d8d7_1.conda - hash: - md5: 10299af8a5139d89ba70cfb08e913c09 - sha256: e116809e1c1fc7bc3335809b590d32f2fec5f052902df4ad6e748a94be1c923c - category: core - optional: true -- name: discretize - version: 0.10.0 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=1.8' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/discretize-0.10.0-py39h5c3ab46_1.conda - hash: - md5: 869466b2876cfebb4434024ea56d2a7b - sha256: 86a12fab5bd9ef69525265530952efa3e190e7a99c224567399300d432850c25 - category: core - optional: true -- name: distributed - version: 2022.10.2 - manager: conda - platform: linux-64 - dependencies: - click: '>=6.6' - cloudpickle: '>=1.5.0' - cytoolz: '>=0.8.2' - dask-core: '>=2022.10.2,<2022.10.3.0a0' - jinja2: '' - locket: '>=1.0.0' - msgpack-python: '>=0.6.0' - packaging: '>=20.0' - psutil: '>=5.0' - python: '>=3.8' - pyyaml: '' - sortedcontainers: '!=2.0.0,!=2.0.1' - tblib: '>=1.6.0' - toolz: '>=0.8.2' - tornado: '>=6.0.3,<6.2' - urllib3: '' - zict: '>=0.1.3' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7ffdc4f6105bde64a844bbb57653293e - sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8 - category: core - optional: true -- name: distributed - version: 2022.10.2 - manager: conda - platform: osx-64 - dependencies: - pyyaml: '' - jinja2: '' - urllib3: '' - python: '>=3.8' - packaging: '>=20.0' - cloudpickle: '>=1.5.0' - toolz: '>=0.8.2' - cytoolz: '>=0.8.2' - psutil: '>=5.0' - tblib: '>=1.6.0' - locket: '>=1.0.0' - zict: '>=0.1.3' - sortedcontainers: '!=2.0.0,!=2.0.1' - click: '>=6.6' - msgpack-python: '>=0.6.0' - tornado: '>=6.0.3,<6.2' - dask-core: '>=2022.10.2,<2022.10.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7ffdc4f6105bde64a844bbb57653293e - sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8 - category: core - optional: true -- name: distributed - version: 2022.10.2 - manager: conda - platform: win-64 - dependencies: - pyyaml: '' - jinja2: '' - urllib3: '' - python: '>=3.8' - packaging: '>=20.0' - cloudpickle: '>=1.5.0' - toolz: '>=0.8.2' - cytoolz: '>=0.8.2' - psutil: '>=5.0' - tblib: '>=1.6.0' - locket: '>=1.0.0' - zict: '>=0.1.3' - sortedcontainers: '!=2.0.0,!=2.0.1' - click: '>=6.6' - msgpack-python: '>=0.6.0' - tornado: '>=6.0.3,<6.2' - dask-core: '>=2022.10.2,<2022.10.3.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2022.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7ffdc4f6105bde64a844bbb57653293e - sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8 - category: core - optional: true -- name: empymod - version: 2.2.2 - manager: conda - platform: linux-64 - dependencies: - numba: '>=0.47' - python: '>=3.7' - scipy: '>=1.4.0' - url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda - hash: - md5: bebcf8f5112a7d755e2781fe9f87ae7b - sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 - category: core - optional: true -- name: empymod - version: 2.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - scipy: '>=1.4.0' - numba: '>=0.47' - url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda - hash: - md5: bebcf8f5112a7d755e2781fe9f87ae7b - sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 - category: core - optional: true -- name: empymod - version: 2.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - scipy: '>=1.4.0' - numba: '>=0.47' - url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda - hash: - md5: bebcf8f5112a7d755e2781fe9f87ae7b - sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 - category: core - optional: true -- name: entrypoints - version: '0.4' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3cf04868fee0a029769bd41f4b2fbf2d - sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af - category: apps - optional: true -- name: entrypoints - version: '0.4' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3cf04868fee0a029769bd41f4b2fbf2d - sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af - category: apps - optional: true -- name: entrypoints - version: '0.4' - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 3cf04868fee0a029769bd41f4b2fbf2d - sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af - category: apps - optional: true -- name: exceptiongroup - version: 1.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - hash: - md5: 8d652ea2ee8eaee02ed8dc820bc794aa - sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d - category: dev - optional: true -- name: exceptiongroup - version: 1.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - hash: - md5: 8d652ea2ee8eaee02ed8dc820bc794aa - sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d - category: dev - optional: true -- name: exceptiongroup - version: 1.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - hash: - md5: 8d652ea2ee8eaee02ed8dc820bc794aa - sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d - category: dev - optional: true -- name: executing - version: 2.0.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - hash: - md5: e16be50e378d8a4533b989035b196ab8 - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - category: apps - optional: true -- name: executing - version: 2.0.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - hash: - md5: e16be50e378d8a4533b989035b196ab8 - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - category: apps - optional: true -- name: executing - version: 2.0.1 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - hash: - md5: e16be50e378d8a4533b989035b196ab8 - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - category: apps - optional: true -- name: expat - version: 2.6.2 - manager: conda - platform: linux-64 - dependencies: - libexpat: 2.6.2 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda - hash: - md5: 53fb86322bdb89496d7579fe3f02fd61 - sha256: 89916c536ae5b85bb8bf0cfa27d751e274ea0911f04e4a928744735c14ef5155 - category: core - optional: true -- name: expat - version: 2.6.2 - manager: conda - platform: osx-64 - dependencies: - libexpat: 2.6.2 - url: https://conda.anaconda.org/conda-forge/osx-64/expat-2.6.2-h73e2aa4_0.conda - hash: - md5: dc0882915da2ec74696ad87aa2350f27 - sha256: 0fd1befb18d9d937358a90d5b8f97ac2402761e9d4295779cbad9d7adfb47976 - category: core - optional: true -- name: expat - version: 2.6.2 - manager: conda - platform: win-64 - dependencies: - libexpat: 2.6.2 - url: https://conda.anaconda.org/conda-forge/win-64/expat-2.6.2-h63175ca_0.conda - hash: - md5: 52f9dec6758ceb8ce0ea8af9fa13eb1a - sha256: f5a13d4bc591a4dc210954f492dd59a0ecf9b9d2ab28bf2ece755ca8f69ec1b4 - category: core - optional: true -- name: fasteners - version: 0.17.3 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 348e27e78a5e39090031448c72f66d5e - sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda - category: core - optional: true -- name: fasteners - version: 0.17.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 348e27e78a5e39090031448c72f66d5e - sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda - category: core - optional: true -- name: fasteners - version: 0.17.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 348e27e78a5e39090031448c72f66d5e - sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda - category: core - optional: true -- name: fiona - version: 1.9.3 - manager: conda - platform: linux-64 - dependencies: - attrs: '>=17' - click: '>=4.0' - click-plugins: '>=1.0' - cligj: '>=0.5' - gdal: '' - importlib-metadata: '' - libgcc-ng: '>=12' - libgdal: '>=3.6.3,<3.7.0a0' - libstdcxx-ng: '>=12' - munch: '' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - setuptools: '' - shapely: '' - six: '>=1.7' - url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.3-py39h0801953_0.conda - hash: - md5: 6f88aa287459509624c91dd35cd49de2 - sha256: ca150b010417147eedb9447557b20bca70690e427b6ecc777b2f8018e6118f4e - category: core - optional: true -- name: fiona - version: 1.9.3 - manager: conda - platform: osx-64 - dependencies: - attrs: '>=17' - click: '>=4.0' - click-plugins: '>=1.0' - cligj: '>=0.5' - gdal: '' - importlib-metadata: '' - libcxx: '>=14.0.6' - libgdal: '>=3.6.3,<3.7.0a0' - munch: '' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - setuptools: '' - shapely: '' - six: '>=1.7' - url: https://conda.anaconda.org/conda-forge/osx-64/fiona-1.9.3-py39hcea2a47_0.conda - hash: - md5: f09359686f0b0e43a92c4b57860b0c97 - sha256: cb38c734b59f8b4b9cb3abcc4476c7c047ea6d73813a50b7aa2f3da9a19a214d - category: core - optional: true -- name: fiona - version: 1.9.3 - manager: conda - platform: win-64 - dependencies: - attrs: '>=17' - click: '>=4.0' - click-plugins: '>=1.0' - cligj: '>=0.5' - gdal: '' - importlib-metadata: '' - libgdal: '>=3.6.3,<3.7.0a0' - munch: '' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - setuptools: '' - shapely: '' - six: '>=1.7' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/fiona-1.9.3-py39h7b53f02_0.conda - hash: - md5: 6a92a51e48733c3083a5aa4a82bff66d - sha256: bddd865bea30ac82aa2a22b7ab4d5fcbf2cfa9f54baff2d65d3619a48fc88b61 - category: core - optional: true -- name: flask - version: 3.0.3 - manager: conda - platform: linux-64 - dependencies: - blinker: '>=1.6.2' - click: '>=8.1.3' - importlib-metadata: '>=3.6.0' - itsdangerous: '>=2.1.2' - jinja2: '>=3.1.2' - python: '>=3.8' - werkzeug: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda - hash: - md5: dcdb937144fa20d7757bf512db1ea769 - sha256: 2fc508f656fe52cb2f9a69c9c62077934d6a81510256dbe85f95beb7d9620238 - category: apps - optional: true -- name: flask - version: 3.0.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - click: '>=8.1.3' - jinja2: '>=3.1.2' - importlib-metadata: '>=3.6.0' - itsdangerous: '>=2.1.2' - blinker: '>=1.6.2' - werkzeug: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda - hash: - md5: dcdb937144fa20d7757bf512db1ea769 - sha256: 2fc508f656fe52cb2f9a69c9c62077934d6a81510256dbe85f95beb7d9620238 - category: apps - optional: true -- name: flask - version: 3.0.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - click: '>=8.1.3' - jinja2: '>=3.1.2' - importlib-metadata: '>=3.6.0' - itsdangerous: '>=2.1.2' - blinker: '>=1.6.2' - werkzeug: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda - hash: - md5: dcdb937144fa20d7757bf512db1ea769 - sha256: 2fc508f656fe52cb2f9a69c9c62077934d6a81510256dbe85f95beb7d9620238 - category: apps - optional: true -- name: font-ttf-dejavu-sans-mono - version: '2.37' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - hash: - md5: 0c96522c6bdaed4b1566d11387caaf45 - sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b - category: core - optional: true -- name: font-ttf-dejavu-sans-mono - version: '2.37' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - hash: - md5: 0c96522c6bdaed4b1566d11387caaf45 - sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b - category: core - optional: true -- name: font-ttf-dejavu-sans-mono - version: '2.37' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - hash: - md5: 0c96522c6bdaed4b1566d11387caaf45 - sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b - category: core - optional: true -- name: font-ttf-inconsolata - version: '3.000' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - hash: - md5: 34893075a5c9e55cdafac56607368fc6 - sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c - category: core - optional: true -- name: font-ttf-inconsolata - version: '3.000' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - hash: - md5: 34893075a5c9e55cdafac56607368fc6 - sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c - category: core - optional: true -- name: font-ttf-inconsolata - version: '3.000' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - hash: - md5: 34893075a5c9e55cdafac56607368fc6 - sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c - category: core - optional: true -- name: font-ttf-source-code-pro - version: '2.038' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - hash: - md5: 4d59c254e01d9cde7957100457e2d5fb - sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 - category: core - optional: true -- name: font-ttf-source-code-pro - version: '2.038' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - hash: - md5: 4d59c254e01d9cde7957100457e2d5fb - sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 - category: core - optional: true -- name: font-ttf-source-code-pro - version: '2.038' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - hash: - md5: 4d59c254e01d9cde7957100457e2d5fb - sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 - category: core - optional: true -- name: font-ttf-ubuntu - version: '0.83' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda - hash: - md5: 6185f640c43843e5ad6fd1c5372c3f80 - sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 - category: core - optional: true -- name: font-ttf-ubuntu - version: '0.83' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda - hash: - md5: 6185f640c43843e5ad6fd1c5372c3f80 - sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 - category: core - optional: true -- name: font-ttf-ubuntu - version: '0.83' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda - hash: - md5: 6185f640c43843e5ad6fd1c5372c3f80 - sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 - category: core - optional: true -- name: fontconfig - version: 2.14.2 - manager: conda - platform: linux-64 - dependencies: - expat: '>=2.5.0,<3.0a0' - freetype: '>=2.12.1,<3.0a0' - libgcc-ng: '>=12' - libuuid: '>=2.32.1,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda - hash: - md5: 0f69b688f52ff6da70bccb7ff7001d1d - sha256: 155d534c9037347ea7439a2c6da7c24ffec8e5dd278889b4c57274a1d91e0a83 - category: core - optional: true -- name: fontconfig - version: 2.14.2 - manager: conda - platform: osx-64 - dependencies: - expat: '>=2.5.0,<3.0a0' - freetype: '>=2.12.1,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.14.2-h5bb23bf_0.conda - hash: - md5: 86cc5867dfbee4178118392bae4a3c89 - sha256: f63e6d1d6aef8ba6de4fc54d3d7898a153479888d40ffdf2e4cfad6f92679d34 - category: core - optional: true -- name: fontconfig - version: 2.14.2 - manager: conda - platform: win-64 - dependencies: - expat: '>=2.5.0,<3.0a0' - freetype: '>=2.12.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.14.2-hbde0cde_0.conda - hash: - md5: 08767992f1a4f1336a257af1241034bd - sha256: 643f2b95be68abeb130c53d543dcd0c1244bebabd58c774a21b31e4b51ac3c96 - category: core - optional: true -- name: fonts-conda-ecosystem - version: '1' - manager: conda - platform: linux-64 - dependencies: - fonts-conda-forge: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - hash: - md5: fee5683a3f04bd15cbd8318b096a27ab - sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 - category: core - optional: true -- name: fonts-conda-ecosystem - version: '1' - manager: conda - platform: osx-64 - dependencies: - fonts-conda-forge: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - hash: - md5: fee5683a3f04bd15cbd8318b096a27ab - sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 - category: core - optional: true -- name: fonts-conda-ecosystem - version: '1' - manager: conda - platform: win-64 - dependencies: - fonts-conda-forge: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - hash: - md5: fee5683a3f04bd15cbd8318b096a27ab - sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 - category: core - optional: true -- name: fonts-conda-forge - version: '1' - manager: conda - platform: linux-64 - dependencies: - font-ttf-dejavu-sans-mono: '' - font-ttf-inconsolata: '' - font-ttf-source-code-pro: '' - font-ttf-ubuntu: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - hash: - md5: f766549260d6815b0c52253f1fb1bb29 - sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 - category: core - optional: true -- name: fonts-conda-forge - version: '1' - manager: conda - platform: osx-64 - dependencies: - font-ttf-inconsolata: '' - font-ttf-source-code-pro: '' - font-ttf-ubuntu: '' - font-ttf-dejavu-sans-mono: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - hash: - md5: f766549260d6815b0c52253f1fb1bb29 - sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 - category: core - optional: true -- name: fonts-conda-forge - version: '1' - manager: conda - platform: win-64 - dependencies: - font-ttf-inconsolata: '' - font-ttf-source-code-pro: '' - font-ttf-ubuntu: '' - font-ttf-dejavu-sans-mono: '' - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - hash: - md5: f766549260d6815b0c52253f1fb1bb29 - sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 - category: core - optional: true -- name: fonttools - version: 4.51.0 - manager: conda - platform: linux-64 - dependencies: - brotli: '' - libgcc-ng: '>=12' - munkres: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - unicodedata2: '>=14.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.51.0-py39hd1e30aa_0.conda - hash: - md5: 79f5dd8778873faa54e8f7b2729fe8a6 - sha256: 28f93d872710b57ac952e82cd0da53ffda8ee54507cce60f3237f9df1dd0725a - category: core - optional: true -- name: fonttools - version: 4.51.0 - manager: conda - platform: osx-64 - dependencies: - brotli: '' - munkres: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - unicodedata2: '>=14.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.51.0-py39ha09f3b3_0.conda - hash: - md5: 713f4aa3625e861796da39bbeb112675 - sha256: 52a283f3c1dee76694dd65cea473a594b84f1616f9062630c09b472eedd76fa0 - category: core - optional: true -- name: fonttools - version: 4.51.0 - manager: conda - platform: win-64 - dependencies: - brotli: '' - munkres: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - unicodedata2: '>=14.0.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.51.0-py39ha55989b_0.conda - hash: - md5: 5d19302bab29e347116b743e793aa7d6 - sha256: 83a225b623e06cf77ee193726b01903db61fef917fcd9e7e7b98c336a509d2cc - category: core - optional: true -- name: freetype - version: 2.12.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - hash: - md5: 9ae35c3d96db2c94ce0cef86efdfa2cb - sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 - category: main - optional: false -- name: freetype - version: 2.12.1 - manager: conda - platform: osx-64 - dependencies: - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - hash: - md5: 25152fce119320c980e5470e64834b50 - sha256: b292cf5a25f094eeb4b66e37d99a97894aafd04a5683980852a8cbddccdc8e4e - category: main - optional: false -- name: freetype - version: 2.12.1 - manager: conda - platform: win-64 - dependencies: - libpng: '>=1.6.39,<1.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - hash: - md5: 3761b23693f768dc75a8fd0a73ca053f - sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 - category: main - optional: false -- name: freexl - version: 2.0.0 - manager: conda - platform: linux-64 - dependencies: - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - minizip: '>=4.0.1,<5.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h743c826_0.conda - hash: - md5: 12e6988845706b2cfbc3bc35c9a61a95 - sha256: 9213f60ba710ecfd3632ce47e036775c9f15ce80a6682ff63cbf12d9dddd5382 - category: core - optional: true -- name: freexl - version: 2.0.0 - manager: conda - platform: osx-64 - dependencies: - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - minizip: '>=4.0.1,<5.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/freexl-2.0.0-h3ec172f_0.conda - hash: - md5: 640c34a8084e2a812bcee5b804597fc9 - sha256: 9d59f1894c3b526e6806e376e979b81d0df23a836415122b86458aef72cda24a - category: core - optional: true -- name: freexl - version: 2.0.0 - manager: conda - platform: win-64 - dependencies: - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - minizip: '>=4.0.1,<5.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/freexl-2.0.0-h8276f4a_0.conda - hash: - md5: 8e02e06229c677cbc9f5dc69ba49052c - sha256: 9ef2fcf3b35703bf61a8359038c4b707382f3d5f0c4020f3f8ffb2f665daabae - category: core - optional: true -- name: fsspec - version: 2022.11.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: eb919f2119a6db5d0192f9e9c3711572 - sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb - category: core - optional: true -- name: fsspec - version: 2022.11.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: eb919f2119a6db5d0192f9e9c3711572 - sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb - category: core - optional: true -- name: fsspec - version: 2022.11.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: eb919f2119a6db5d0192f9e9c3711572 - sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb - category: core - optional: true -- name: gdal - version: 3.6.4 - manager: conda - platform: linux-64 - dependencies: - hdf5: '>=1.14.2,<1.14.4.0a0' - libgcc-ng: '>=12' - libgdal: 3.6.4 - libstdcxx-ng: '>=12' - libxml2: '>=2.11.5,<3.0.0a0' - numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.3,<4.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.6.4-py39h41b90d8_22.conda - hash: - md5: cec2c4f550ca85ab5261b503b6194c0e - sha256: c9241711edd651a70aed51e945347b0e59a2a7ce5cd1b869bfb01dcf935ca0bc - category: core - optional: true -- name: gdal - version: 3.6.4 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - hdf5: '>=1.14.2,<1.14.4.0a0' - libcxx: '>=16.0.6' - libgdal: 3.6.4 - libxml2: '>=2.11.5,<3.0.0a0' - numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.3,<4.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.6.4-py39h4ab6eaa_22.conda - hash: - md5: 98fe40096d20f220f110ea341131fae6 - sha256: aadd7dde6ace34b4a77e136dee95bb41d014b5cae900e957afa752acafac9a82 - category: core - optional: true -- name: gdal - version: 3.6.4 - manager: conda - platform: win-64 - dependencies: - hdf5: '>=1.14.2,<1.14.4.0a0' - libgdal: 3.6.4 - libxml2: '>=2.11.5,<3.0.0a0' - numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.3,<4.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gdal-3.6.4-py39hbe60bc6_22.conda - hash: - md5: 05d409778759a176e9929dc6b5e43480 - sha256: cd40fb5ad45c4c807446fc00f4b77fce011b0371faa966db506a0b9d520befc9 - category: core - optional: true -- name: geoana - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - empymod: '' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - matplotlib-base: '' - numpy: '>=1.23.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=0.13' - utm: '' - url: https://conda.anaconda.org/conda-forge/linux-64/geoana-0.4.0-py39hf939315_1.tar.bz2 - hash: - md5: 30c050880e874cb0ca7500be2ac62d12 - sha256: 0a15618436b5116cd550d2926d1c56724ef4d6af373f7cd9e38bfa1647e8175f - category: core - optional: true -- name: geoana - version: 0.4.0 - manager: conda - platform: osx-64 - dependencies: - empymod: '' - libcxx: '>=14.0.4' - matplotlib-base: '' - numpy: '>=1.23.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=0.13' - utm: '' - url: https://conda.anaconda.org/conda-forge/osx-64/geoana-0.4.0-py39h92daf61_1.tar.bz2 - hash: - md5: bb3dc7d1b06f82e9a7f2430ab4a4f85d - sha256: 008af6b5f5fb945be0a8b6899c0db449165dea4983ce59337b6c3a3b22ba7f45 - category: core - optional: true -- name: geoana - version: 0.4.0 - manager: conda - platform: win-64 - dependencies: - empymod: '' - matplotlib-base: '' - numpy: '>=1.23.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=0.13' - ucrt: '>=10.0.20348.0' - utm: '' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/geoana-0.4.0-py39h1f6ef14_1.tar.bz2 - hash: - md5: 82f94c4c151213759b4ea27d1b9b67b7 - sha256: 96285fa5b470e64332761d7aebc11e0e79d9fa3e6a36e3a278e7b457103ce57e - category: core - optional: true -- name: geos - version: 3.12.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda - hash: - md5: 3fdf79ef322c8379ae83be491d805369 - sha256: c80ff0ed71db0d56567ee87df28bc442b596330ac241ab86f488e3139f0e2cae - category: core - optional: true -- name: geos - version: 3.12.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-64/geos-3.12.0-he965462_0.conda - hash: - md5: 264a53af0fb378e81b44e45e5ab5aff1 - sha256: e84ff98270717ae49aeba6788476d3569ad33993a46d33d727ee528fb3386a58 - category: core - optional: true -- name: geos - version: 3.12.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/geos-3.12.0-h1537add_0.conda - hash: - md5: 78119c25e59de33135b673375c6fa126 - sha256: 096c45cb03240ae67ff9e09166110a3bd19a5ab20bf7deea8be55557792b9924 - category: core - optional: true -- name: geotiff - version: 1.7.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda - hash: - md5: 1d53ee057d8481bd2b4c2c34c8e92aac - sha256: b00958767cb5607bdb3bbcec0b2056b3e48c0f9e34c31ed8ac01c9bd36704dab - category: core - optional: true -- name: geotiff - version: 1.7.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.7.1-h889ec99_14.conda - hash: - md5: c994aeaa43a92403ecc723dba66b3f1f - sha256: 2d6d54763b4cc41a90d7ca810681c44eaff077027a7b6f5df676736fa0299746 - category: core - optional: true -- name: geotiff - version: 1.7.1 - manager: conda - platform: win-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - url: https://conda.anaconda.org/conda-forge/win-64/geotiff-1.7.1-hcf4a93f_14.conda - hash: - md5: ba4fadef391cfecb95ad9dc8617fe481 - sha256: 12f8e01f8cb4dccfbd16af9f88f81aa6ccda8607d98a9eb1f7f305c3f455439f - category: core - optional: true -- name: gettext - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - gettext-tools: 0.22.5 - libasprintf: 0.22.5 - libasprintf-devel: 0.22.5 - libgcc-ng: '>=12' - libgettextpo: 0.22.5 - libgettextpo-devel: 0.22.5 - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/gettext-0.22.5-h59595ed_2.conda - hash: - md5: 219ba82e95d7614cf7140d2a4afc0926 - sha256: 386181254ddd2aed1fccdfc217da5b6545f6df4e9979ad8e08f5e91e22eaf7dc - category: core - optional: true -- name: gettext - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - gettext-tools: 0.22.5 - libasprintf: 0.22.5 - libasprintf-devel: 0.22.5 - libcxx: '>=16' - libgettextpo: 0.22.5 - libgettextpo-devel: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - libintl-devel: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/gettext-0.22.5-h5ff76d1_2.conda - hash: - md5: c09b3dcf2adc5a2a32d11ab90289b8fa - sha256: ba9a4680b018a4ca517ec20beb25b09c97e293ecd16b931075e689db10291712 - category: core - optional: true -- name: gettext - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - gettext-tools: 0.22.5 - libasprintf: 0.22.5 - libasprintf-devel: 0.22.5 - libgettextpo: 0.22.5 - libgettextpo-devel: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - libintl-devel: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/gettext-0.22.5-h5728263_2.conda - hash: - md5: da84216f88a8c89eb943c683ceb34d7d - sha256: cd4ef93fd052a4fe89a4db963c9d69e60c8a434d41968fc9dc8726db67191582 - category: core - optional: true -- name: gettext-tools - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/gettext-tools-0.22.5-h59595ed_2.conda - hash: - md5: 985f2f453fb72408d6b6f1be0f324033 - sha256: 67d7b1d6fe4f1c516df2000640ec7dcfebf3ff6ea0785f0276870e730c403d33 - category: core - optional: true -- name: gettext-tools - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/gettext-tools-0.22.5-h5ff76d1_2.conda - hash: - md5: 37e1cb0efeff4d4623a6357e37e0105d - sha256: 4db71a66340d068c57e16c574c356db6df54ac0147b5b26d3313093f7854ee6d - category: core - optional: true -- name: gettext-tools - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gettext-tools-0.22.5-h7d00a51_2.conda - hash: - md5: ef1c3bb48c013099c4872640a5f2096c - sha256: e3621dc3d48399c89bf0dd512a6a398d354429b3b84219473d674aa56e0feef2 - category: core - optional: true -- name: giflib - version: 5.2.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - hash: - md5: 3bf7b9fd5a7136126e0234db4b87c8b6 - sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff - category: core - optional: true -- name: giflib - version: 5.2.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - hash: - md5: 03e8c9b4d3da5f3d6eabdd020c2d63ac - sha256: 2c825df829097536314a195ae5cacaa8695209da6b4400135a65d8e23c008ff8 - category: core - optional: true -- name: glib - version: 2.78.1 - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - glib-tools: 2.78.1 - libgcc-ng: '>=12' - libglib: 2.78.1 - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - python: '*' - url: https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_0.conda - hash: - md5: 43c633c015a361610ee4db2e95f8a517 - sha256: fc052d470898ce222d1087815f3c16a8d32a3ef1afec06c39b892bea2d4b164a - category: apps - optional: true -- name: glib - version: 2.78.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - glib-tools: 2.78.1 - libcxx: '>=16.0.6' - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - python: '*' - url: https://conda.anaconda.org/conda-forge/osx-64/glib-2.78.1-hf4d7fad_0.conda - hash: - md5: 9ec0d72a2fa4e3fdd6d62629fbad7b2b - sha256: 00e5e6808c62fd4377bf7d46777d43a48145418eef26ddbf766258cf35e822e4 - category: apps - optional: true -- name: glib - version: 2.78.1 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - glib-tools: 2.78.1 - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - python: '*' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/glib-2.78.1-h12be248_0.conda - hash: - md5: 55a9176ace9721d0b89cbf99f78e6b04 - sha256: 841ec811330ff4e1f8c30a993ec536778a7332423c9785af69a2b77568b32056 - category: apps - optional: true -- name: glib-tools - version: 2.78.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libglib: 2.78.1 - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_0.conda - hash: - md5: 5b4fe75a68cbb95350f47bb9a707b53b - sha256: b1514f0372ff4d7bd2d87001c881c7ee7fc9e28e4e8444ff17dbbea60dd8c9a6 - category: apps - optional: true -- name: glib-tools - version: 2.78.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.78.1-hf4d7fad_0.conda - hash: - md5: be4782cc6efc35b7ccbe38fedf33d6d9 - sha256: e76466f767a23ca054b3dcfdab56f0ea4aa1a9e5f8d0c1b6a62826b2144e564e - category: apps - optional: true -- name: glib-tools - version: 2.78.1 - manager: conda - platform: win-64 - dependencies: - libglib: 2.78.1 - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.78.1-h12be248_0.conda - hash: - md5: 7d9280579328b01cddbb1c4e91ca2df1 - sha256: c0b909c886088dac3f2224c8bd555ad0ceddd6835a3724f50dd4977ff4cdd93a - category: apps - optional: true -- name: graphite2 - version: 1.3.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - hash: - md5: f87c7b7c2cb45f323ffbce941c78ab7c - sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add - category: apps - optional: true -- name: gst-plugins-base - version: 1.22.7 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - alsa-lib: '>=1.2.10,<1.3.0.0a0' - gettext: '>=0.21.1,<1.0a0' - gstreamer: 1.22.7 - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.1,<3.0a0' - libogg: '>=1.3.4,<1.4.0a0' - libopus: '>=1.3.1,<2.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libstdcxx-ng: '>=12' - libvorbis: '>=1.3.7,<1.4.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xorg-libx11: '>=1.8.7,<2.0a0' - xorg-libxau: '>=1.0.11,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-libxrender: '>=0.9.11,<0.10.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda - hash: - md5: 065e2c1d49afa3fdc1a01f1dacd6ab09 - sha256: 190151790cedc719199c783123a9f3ee4e86acd09fee3a6ec33a21cbac20494e - category: apps - optional: true -- name: gst-plugins-base - version: 1.22.7 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - gstreamer: 1.22.7 - libcxx: '>=16.0.6' - libglib: '>=2.78.1,<3.0a0' - libogg: '>=1.3.4,<1.4.0a0' - libopus: '>=1.3.1,<2.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libvorbis: '>=1.3.7,<1.4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/gst-plugins-base-1.22.7-hd283e88_0.conda - hash: - md5: 6f0f588e82330893016aa084d3ae74a1 - sha256: b5040c42a813020ef957528b68152593cbcfcbaecceb9ddc39a5eae036bf3634 - category: apps - optional: true -- name: gst-plugins-base - version: 1.22.7 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - gstreamer: 1.22.7 - libglib: '>=2.78.1,<3.0a0' - libogg: '>=1.3.4,<1.4.0a0' - libvorbis: '>=1.3.7,<1.4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gst-plugins-base-1.22.7-h001b923_0.conda - hash: - md5: e4b56ad6c21e861456f32bfc79b43c4b - sha256: aa9315d943f1f0c224fbebb72ff802701161d3365415c1ebf3758fac1b5ae214 - category: apps - optional: true -- name: gstreamer - version: 1.22.7 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - gettext: '>=0.21.1,<1.0a0' - glib: '>=2.78.1,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda - hash: - md5: 6c919bafe5e03428a8e2ef319d7ef990 - sha256: d77b2a740acd59c4dd6c9d8fe6e008ee96407b6dcc5cc0b5e27e8c1eec5d22ef - category: apps - optional: true -- name: gstreamer - version: 1.22.7 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - glib: '>=2.78.1,<3.0a0' - libcxx: '>=16.0.6' - libglib: '>=2.78.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/gstreamer-1.22.7-h8954545_0.conda - hash: - md5: 78550579c8a164c2af8c6dd690ad7109 - sha256: 2b0acac438bb96ddc7a34d5fa4f52346837708cee06c858bd78c35d993768a36 - category: apps - optional: true -- name: gstreamer - version: 1.22.7 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - glib: '>=2.78.1,<3.0a0' - libglib: '>=2.78.1,<3.0a0' - libiconv: '>=1.17,<2.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/gstreamer-1.22.7-hb4038d2_0.conda - hash: - md5: 9b2f6622276ed34d20eb36e6a4ce2f50 - sha256: 5cb018ed96727ca7a7f8e782f0e2603135541dc011c926e1837f4cf536fc2341 - category: apps - optional: true -- name: h5py - version: 3.11.0 - manager: conda - platform: linux-64 - dependencies: - cached-property: '' - hdf5: '>=1.14.3,<1.14.4.0a0' - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.11.0-nompi_py39h2c511df_100.conda - hash: - md5: f62a80dd25076dbb95f7af9b3de91eb8 - sha256: dcddb2a0d5df92e5173fba2bd4f0fd7bf5a218b062d57d91df252674699d0a18 - category: main - optional: false -- name: h5py - version: 3.11.0 - manager: conda - platform: osx-64 - dependencies: - cached-property: '' - hdf5: '>=1.14.3,<1.14.4.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/h5py-3.11.0-nompi_py39h9420513_100.conda - hash: - md5: f5dae058722729a180540de4fed91a27 - sha256: 12f076d066fe3c20100f58086bc98973696eb34f7f918cc7b6cd8960c675543e - category: main - optional: false -- name: h5py - version: 3.11.0 - manager: conda - platform: win-64 - dependencies: - cached-property: '' - hdf5: '>=1.14.3,<1.14.4.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/h5py-3.11.0-nompi_py39he8a0d39_100.conda - hash: - md5: 9ec9b0f5f4bbe4df1944a8f2419616a4 - sha256: ddd81473b4d61cd58043eb4a90714294c7810e25feaf6fe494ea1e394a5c41bd - category: main - optional: false -- name: harfbuzz - version: 8.3.0 - manager: conda - platform: linux-64 - dependencies: - cairo: '>=1.18.0,<2.0a0' - freetype: '>=2.12.1,<3.0a0' - graphite2: '' - icu: '>=73.2,<74.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.1,<3.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda - hash: - md5: 5a6f6c00ef982a9bc83558d9ac8f64a0 - sha256: 4b55aea03b18a4084b750eee531ad978d4a3690f63019132c26c6ad26bbe3aed - category: apps - optional: true -- name: hdf4 - version: 4.2.15 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda - hash: - md5: bd77f8da987968ec3927990495dc22e4 - sha256: 0d09b6dc1ce5c4005ae1c6a19dc10767932ef9a5e9c755cfdbb5189ac8fb0684 - category: core - optional: true -- name: hdf4 - version: 4.2.15 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/hdf4-4.2.15-h8138101_7.conda - hash: - md5: 7ce543bf38dbfae0de9af112ee178af2 - sha256: 8c767cc71226e9eb62649c903c68ba73c5f5e7e3696ec0319d1f90586cebec7d - category: core - optional: true -- name: hdf4 - version: 4.2.15 - manager: conda - platform: win-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/hdf4-4.2.15-h5557f11_7.conda - hash: - md5: 84344a916a73727c1326841007b52ca8 - sha256: 52fa5dde69758c19c69ab68a3d7ebfb2c9042e3a55d405c29a59d3b0584fd790 - category: core - optional: true -- name: hdf5 - version: 1.14.3 - manager: conda - platform: linux-64 - dependencies: - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.4.0,<9.0a0' - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=12.3.0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda - hash: - md5: d471a5c3abc984b662d9bae3bb7fd8a5 - sha256: b814f8f9598cc6e50127533ec256725183ba69db5fd8cf5443223627f19e3e59 - category: main - optional: false -- name: hdf5 - version: 1.14.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libgfortran: 5.* - libgfortran5: '>=13.2.0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h691f4bf_100.conda - hash: - md5: 8e2ac4ae815a8c9743fe37d70f48f075 - sha256: 158dd2ab901659b47e8f7ee0ec1d9e45a1fedc4871391a44a1c8b9e8ba4c9c6b - category: main - optional: false -- name: hdf5 - version: 1.14.3 - manager: conda - platform: win-64 - dependencies: - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.4.0,<9.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.3-nompi_h73e8ff5_100.conda - hash: - md5: 1e91ce0f3a914b0dab762539c0df4ff1 - sha256: 89bbb2c878e1b6c6073ef5f1f25eac97ed48393541a4a44a7d182da5ede3dc98 - category: main - optional: false -- name: icu - version: '73.2' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda - hash: - md5: cc47e1facc155f91abd89b11e48e72ff - sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8 - category: main - optional: false -- name: icu - version: '73.2' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda - hash: - md5: 5cc301d759ec03f28328428e28f65591 - sha256: f66362dc36178ac9b7c7a9b012948a9d2d050b3debec24bbd94aadbc44854185 - category: main - optional: false -- name: icu - version: '73.2' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/icu-73.2-h63175ca_0.conda - hash: - md5: 0f47d9e3192d9e09ae300da0d28e0f56 - sha256: 423aaa2b69d713520712f55c7c71994b7e6f967824bb39b59ad968e7b209ce8c - category: core - optional: true -- name: idna - version: '3.7' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - hash: - md5: c0cc1420498b17414d8617d0b9f506ca - sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b - category: main - optional: false -- name: idna - version: '3.7' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - hash: - md5: c0cc1420498b17414d8617d0b9f506ca - sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b - category: main - optional: false -- name: idna - version: '3.7' - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - hash: - md5: c0cc1420498b17414d8617d0b9f506ca - sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b - category: main - optional: false -- name: imagecodecs-lite - version: 2019.12.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-lite-2019.12.3-py39h44dd56e_7.conda - hash: - md5: 2353c3858af7656cb986c81d0b123ebe - sha256: 2d5dc21490d5d61b76666925054154f6f0267937f75b1f9b487a71fc2f793c66 - category: core - optional: true -- name: imagecodecs-lite - version: 2019.12.3 - manager: conda - platform: osx-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-lite-2019.12.3-py39hd01001f_7.conda - hash: - md5: e08a5fa87df781c08640fe86d07b15b5 - sha256: 4afaee3f7102325af0e8f24e4dfaf866fcf9e1fedabae1305e2c1626044131a9 - category: core - optional: true -- name: imagecodecs-lite - version: 2019.12.3 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-lite-2019.12.3-py39hd88c2e4_7.conda - hash: - md5: ac24d667e2c8f1ba06f33cb4218db686 - sha256: 4f6e21ca2114c186c1007dff3dc47ca08d03f037f70baf576b618d39977339e3 - category: core - optional: true -- name: imageio - version: 2.34.0 - manager: conda - platform: linux-64 - dependencies: - numpy: '' - pillow: '>=8.3.2' - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda - hash: - md5: b8853659d596f967c661f544dd89ede7 - sha256: be0eecc8b3ee49ffe3c38dedc4d3c121e18627624926f7d1d998e8027bce4266 - category: core - optional: true -- name: imageio - version: 2.34.0 - manager: conda - platform: osx-64 - dependencies: - numpy: '' - python: '>=3' - pillow: '>=8.3.2' - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda - hash: - md5: b8853659d596f967c661f544dd89ede7 - sha256: be0eecc8b3ee49ffe3c38dedc4d3c121e18627624926f7d1d998e8027bce4266 - category: core - optional: true -- name: imageio - version: 2.34.0 - manager: conda - platform: win-64 - dependencies: - numpy: '' - python: '>=3' - pillow: '>=8.3.2' - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda - hash: - md5: b8853659d596f967c661f544dd89ede7 - sha256: be0eecc8b3ee49ffe3c38dedc4d3c121e18627624926f7d1d998e8027bce4266 - category: core - optional: true -- name: importlib-metadata - version: 7.1.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - zipp: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda - hash: - md5: 0896606848b2dc5cebdf111b6543aa04 - sha256: cc2e7d1f7f01cede30feafc1118b7aefa244d0a12224513734e24165ae12ba49 - category: core - optional: true -- name: importlib-metadata - version: 7.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - zipp: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda - hash: - md5: 0896606848b2dc5cebdf111b6543aa04 - sha256: cc2e7d1f7f01cede30feafc1118b7aefa244d0a12224513734e24165ae12ba49 - category: core - optional: true -- name: importlib-metadata - version: 7.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - zipp: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.1.0-pyha770c72_0.conda - hash: - md5: 0896606848b2dc5cebdf111b6543aa04 - sha256: cc2e7d1f7f01cede30feafc1118b7aefa244d0a12224513734e24165ae12ba49 - category: core - optional: true -- name: importlib-resources - version: 6.4.0 - manager: conda - platform: linux-64 - dependencies: - importlib_resources: '>=6.4.0,<6.4.1.0a0' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: dcbadab7a68738a028e195ab68ab2d2e - sha256: 38db827f445ae437a15d50a94816ae67a48285d0700f736af3eb90800a71f079 - category: core - optional: true -- name: importlib-resources - version: 6.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - importlib_resources: '>=6.4.0,<6.4.1.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: dcbadab7a68738a028e195ab68ab2d2e - sha256: 38db827f445ae437a15d50a94816ae67a48285d0700f736af3eb90800a71f079 - category: core - optional: true -- name: importlib-resources - version: 6.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - importlib_resources: '>=6.4.0,<6.4.1.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: dcbadab7a68738a028e195ab68ab2d2e - sha256: 38db827f445ae437a15d50a94816ae67a48285d0700f736af3eb90800a71f079 - category: core - optional: true -- name: importlib_resources - version: 6.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - zipp: '>=3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: c5d3907ad8bd7bf557521a1833cf7e6d - sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de - category: core - optional: true -- name: importlib_resources - version: 6.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - zipp: '>=3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: c5d3907ad8bd7bf557521a1833cf7e6d - sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de - category: core - optional: true -- name: importlib_resources - version: 6.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - zipp: '>=3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda - hash: - md5: c5d3907ad8bd7bf557521a1833cf7e6d - sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de - category: core - optional: true -- name: iniconfig - version: 2.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - hash: - md5: f800d2da156d08e289b14e87e43c1ae5 - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - category: dev - optional: true -- name: iniconfig - version: 2.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - hash: - md5: f800d2da156d08e289b14e87e43c1ae5 - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - category: dev - optional: true -- name: iniconfig - version: 2.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - hash: - md5: f800d2da156d08e289b14e87e43c1ae5 - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - category: dev - optional: true -- name: intel-openmp - version: 2024.1.0 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.1.0-h57928b3_965.conda - hash: - md5: c66eb2fd33b999ccc258aef85689758e - sha256: 7b029e476ad6d401d645636ee3e4b40130bfcc9534f7415209dd5b666c6dd292 - category: main - optional: false -- name: ipyfilechooser - version: 0.6.0 - manager: conda - platform: linux-64 - dependencies: - ipywidgets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 77f3e551b6bc450deca63b2f171e0b73 - sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 - category: apps - optional: true -- name: ipyfilechooser - version: 0.6.0 - manager: conda - platform: osx-64 - dependencies: - ipywidgets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 77f3e551b6bc450deca63b2f171e0b73 - sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 - category: apps - optional: true -- name: ipyfilechooser - version: 0.6.0 - manager: conda - platform: win-64 - dependencies: - ipywidgets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 77f3e551b6bc450deca63b2f171e0b73 - sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 - category: apps - optional: true -- name: ipykernel - version: 6.29.3 - manager: conda - platform: linux-64 - dependencies: - __linux: '' - comm: '>=0.1.1' - debugpy: '>=1.6.5' - ipython: '>=7.23.1' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - matplotlib-inline: '>=0.1' - nest-asyncio: '' - packaging: '' - psutil: '' - python: '>=3.8' - pyzmq: '>=24' - tornado: '>=6.1' - traitlets: '>=5.4.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.3-pyhd33586a_0.conda - hash: - md5: e0deff12c601ce5cb7476f93718f3168 - sha256: 0314f15e666fd9a4fb653aae37d2cf4dc6bc3a18c0d9c2671a6a0783146adcfa - category: apps - optional: true -- name: ipykernel - version: 6.29.3 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - psutil: '' - nest-asyncio: '' - __osx: '' - appnope: '' - python: '>=3.8' - tornado: '>=6.1' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - ipython: '>=7.23.1' - matplotlib-inline: '>=0.1' - debugpy: '>=1.6.5' - comm: '>=0.1.1' - traitlets: '>=5.4.0' - pyzmq: '>=24' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.3-pyh3cd1d5f_0.conda - hash: - md5: 28e74fca8d8abf09c1ed0d190a17e307 - sha256: ef2f9c1d83afd693db3793c368c5c6afcd37a416958ece490a2e1fbcd85012eb - category: apps - optional: true -- name: ipykernel - version: 6.29.3 - manager: conda - platform: win-64 - dependencies: - packaging: '' - psutil: '' - nest-asyncio: '' - __win: '' - python: '>=3.8' - tornado: '>=6.1' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - ipython: '>=7.23.1' - matplotlib-inline: '>=0.1' - debugpy: '>=1.6.5' - comm: '>=0.1.1' - traitlets: '>=5.4.0' - pyzmq: '>=24' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.3-pyha63f2e9_0.conda - hash: - md5: d86f243bdd45a8019050e7326ed7bb2e - sha256: 93ff46322a2512e9fb4ba456b1f0120d2f628a4b851f3102561a351e528d24d0 - category: apps - optional: true -- name: ipython - version: 8.18.1 - manager: conda - platform: linux-64 - dependencies: - __unix: '' - decorator: '' - exceptiongroup: '' - jedi: '>=0.16' - matplotlib-inline: '' - pexpect: '>4.3' - pickleshare: '' - prompt-toolkit: '>=3.0.41,<3.1.0' - pygments: '>=2.4.0' - python: '>=3.9' - stack_data: '' - traitlets: '>=5' - typing_extensions: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda - hash: - md5: 15c6f45a45f7ac27f6d60b0b084f6761 - sha256: d98d615ac8ad71de698afbc50e8269570d4b89706821c4ff3058a4ceec69bd9b - category: apps - optional: true -- name: ipython - version: 8.18.1 - manager: conda - platform: osx-64 - dependencies: - typing_extensions: '' - __unix: '' - decorator: '' - exceptiongroup: '' - matplotlib-inline: '' - stack_data: '' - pickleshare: '' - python: '>=3.9' - pygments: '>=2.4.0' - traitlets: '>=5' - jedi: '>=0.16' - pexpect: '>4.3' - prompt-toolkit: '>=3.0.41,<3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda - hash: - md5: 15c6f45a45f7ac27f6d60b0b084f6761 - sha256: d98d615ac8ad71de698afbc50e8269570d4b89706821c4ff3058a4ceec69bd9b - category: apps - optional: true -- name: ipython - version: 8.18.1 - manager: conda - platform: win-64 - dependencies: - typing_extensions: '' - colorama: '' - __win: '' - decorator: '' - exceptiongroup: '' - matplotlib-inline: '' - stack_data: '' - pickleshare: '' - python: '>=3.9' - pygments: '>=2.4.0' - traitlets: '>=5' - jedi: '>=0.16' - prompt-toolkit: '>=3.0.41,<3.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh7428d3b_3.conda - hash: - md5: 656a798e52fbe1ca72f7d97b3c36aeff - sha256: 835ddb247d5b9a883b033b7bba2c2ef3604bcd6e877adab6c9309b6f90a29051 - category: apps - optional: true -- name: ipython_genutils - version: 0.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2 - hash: - md5: 5071c982548b3a20caf70462f04f5287 - sha256: 0fafbc60209f1d8c0b89a2f79f3ff0f7bc45589a23da1d2e5cc55bcca906707b - category: apps - optional: true -- name: ipython_genutils - version: 0.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2 - hash: - md5: 5071c982548b3a20caf70462f04f5287 - sha256: 0fafbc60209f1d8c0b89a2f79f3ff0f7bc45589a23da1d2e5cc55bcca906707b - category: apps - optional: true -- name: ipython_genutils - version: 0.2.0 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2 - hash: - md5: 5071c982548b3a20caf70462f04f5287 - sha256: 0fafbc60209f1d8c0b89a2f79f3ff0f7bc45589a23da1d2e5cc55bcca906707b - category: apps - optional: true -- name: ipywidgets - version: 7.8.0 - manager: conda - platform: linux-64 - dependencies: - comm: '>=0.1.3' - ipython: '>=4.0.0' - ipython_genutils: '>=0.2.0,<0.3.0' - jupyterlab_widgets: '>=1.0.0,<3' - python: '>=3.3' - traitlets: '>=4.3.1' - widgetsnbextension: '>=3.6.4,<3.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.0-pyhd8ed1ab_0.conda - hash: - md5: 518b05adab6cfe6ea249319932d9d4a3 - sha256: c27d71635869f53c2a802fbbd58a73d6b7946508323dd1805996136b038fb8cf - category: apps - optional: true -- name: ipywidgets - version: 7.8.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.3' - ipython: '>=4.0.0' - traitlets: '>=4.3.1' - ipython_genutils: '>=0.2.0,<0.3.0' - jupyterlab_widgets: '>=1.0.0,<3' - comm: '>=0.1.3' - widgetsnbextension: '>=3.6.4,<3.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.0-pyhd8ed1ab_0.conda - hash: - md5: 518b05adab6cfe6ea249319932d9d4a3 - sha256: c27d71635869f53c2a802fbbd58a73d6b7946508323dd1805996136b038fb8cf - category: apps - optional: true -- name: ipywidgets - version: 7.8.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.3' - ipython: '>=4.0.0' - traitlets: '>=4.3.1' - ipython_genutils: '>=0.2.0,<0.3.0' - jupyterlab_widgets: '>=1.0.0,<3' - comm: '>=0.1.3' - widgetsnbextension: '>=3.6.4,<3.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.0-pyhd8ed1ab_0.conda - hash: - md5: 518b05adab6cfe6ea249319932d9d4a3 - sha256: c27d71635869f53c2a802fbbd58a73d6b7946508323dd1805996136b038fb8cf - category: apps - optional: true -- name: isort - version: 5.13.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8,<4.0' - setuptools: '' - url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda - hash: - md5: 1d25ed2b95b92b026aaa795eabec8d91 - sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2 - category: dev - optional: true -- name: isort - version: 5.13.2 - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - python: '>=3.8,<4.0' - url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda - hash: - md5: 1d25ed2b95b92b026aaa795eabec8d91 - sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2 - category: dev - optional: true -- name: isort - version: 5.13.2 - manager: conda - platform: win-64 - dependencies: - setuptools: '' - python: '>=3.8,<4.0' - url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda - hash: - md5: 1d25ed2b95b92b026aaa795eabec8d91 - sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2 - category: dev - optional: true -- name: itsdangerous - version: 2.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda - hash: - md5: ff7ca04134ee8dde1d7cf491a78ef7c7 - sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 - category: apps - optional: true -- name: itsdangerous - version: 2.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda - hash: - md5: ff7ca04134ee8dde1d7cf491a78ef7c7 - sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 - category: apps - optional: true -- name: itsdangerous - version: 2.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda - hash: - md5: ff7ca04134ee8dde1d7cf491a78ef7c7 - sha256: 4e933e36e9b0401b62ea8fd63393827ebeb4250de77a56687afb387d504523c5 - category: apps - optional: true -- name: jedi - version: 0.19.1 - manager: conda - platform: linux-64 - dependencies: - parso: '>=0.8.3,<0.9.0' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - hash: - md5: 81a3be0b2023e1ea8555781f0ad904a2 - sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a - category: apps - optional: true -- name: jedi - version: 0.19.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - parso: '>=0.8.3,<0.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - hash: - md5: 81a3be0b2023e1ea8555781f0ad904a2 - sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a - category: apps - optional: true -- name: jedi - version: 0.19.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - parso: '>=0.8.3,<0.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - hash: - md5: 81a3be0b2023e1ea8555781f0ad904a2 - sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a - category: apps - optional: true -- name: jinja2 - version: 3.1.3 - manager: conda - platform: linux-64 - dependencies: - markupsafe: '>=2.0' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - hash: - md5: e7d8df6509ba635247ff9aea31134262 - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - category: core - optional: true -- name: jinja2 - version: 3.1.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - markupsafe: '>=2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - hash: - md5: e7d8df6509ba635247ff9aea31134262 - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - category: core - optional: true -- name: jinja2 - version: 3.1.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - markupsafe: '>=2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - hash: - md5: e7d8df6509ba635247ff9aea31134262 - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - category: core - optional: true -- name: joblib - version: 1.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - setuptools: '' - url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: e0ed1bf13ce3a440e022157bf4764465 - sha256: 56eea2c4af35a9c8f9cdca530f6aea0dc8e2551bfcc8b8da37da78221366af10 - category: core - optional: true -- name: joblib - version: 1.4.0 - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: e0ed1bf13ce3a440e022157bf4764465 - sha256: 56eea2c4af35a9c8f9cdca530f6aea0dc8e2551bfcc8b8da37da78221366af10 - category: core - optional: true -- name: joblib - version: 1.4.0 - manager: conda - platform: win-64 - dependencies: - setuptools: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: e0ed1bf13ce3a440e022157bf4764465 - sha256: 56eea2c4af35a9c8f9cdca530f6aea0dc8e2551bfcc8b8da37da78221366af10 - category: core - optional: true -- name: json-c - version: '0.17' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.17-h7ab15ed_0.conda - hash: - md5: 9961b1f100c3b6852bd97c9233d06979 - sha256: 5646496ca07dfa1486d27ed07282967007811dfc63d6394652e87f94166ecae3 - category: core - optional: true -- name: json-c - version: '0.17' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/json-c-0.17-h8e11ae5_0.conda - hash: - md5: 266d2e4ebbf37091c8322937392bb540 - sha256: 2a493095fe1292108ff1799a1b47ababe82d844bfa3abcf2252676c1017a1e04 - category: core - optional: true -- name: jsonschema - version: 4.21.1 - manager: conda - platform: linux-64 - dependencies: - attrs: '>=22.2.0' - importlib_resources: '>=1.4.0' - jsonschema-specifications: '>=2023.03.6' - pkgutil-resolve-name: '>=1.3.10' - python: '>=3.8' - referencing: '>=0.28.4' - rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda - hash: - md5: 8a3a3d01629da20befa340919e3dd2c4 - sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129 - category: apps - optional: true -- name: jsonschema - version: 4.21.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - jsonschema-specifications: '>=2023.03.6' - referencing: '>=0.28.4' - rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda - hash: - md5: 8a3a3d01629da20befa340919e3dd2c4 - sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129 - category: apps - optional: true -- name: jsonschema - version: 4.21.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - jsonschema-specifications: '>=2023.03.6' - referencing: '>=0.28.4' - rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda - hash: - md5: 8a3a3d01629da20befa340919e3dd2c4 - sha256: c5c1b4e08e91fdd697289015be1a176409b4e63942899a43b276f1f250be8129 - category: apps - optional: true -- name: jsonschema-specifications - version: 2023.12.1 - manager: conda - platform: linux-64 - dependencies: - importlib_resources: '>=1.4.0' - python: '>=3.8' - referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda - hash: - md5: a0e4efb5f35786a05af4809a2fb1f855 - sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 - category: apps - optional: true -- name: jsonschema-specifications - version: 2023.12.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - importlib_resources: '>=1.4.0' - referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda - hash: - md5: a0e4efb5f35786a05af4809a2fb1f855 - sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 - category: apps - optional: true -- name: jsonschema-specifications - version: 2023.12.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - importlib_resources: '>=1.4.0' - referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda - hash: - md5: a0e4efb5f35786a05af4809a2fb1f855 - sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 - category: apps - optional: true -- name: jupyter_client - version: 7.3.4 - manager: conda - platform: linux-64 - dependencies: - entrypoints: '' - jupyter_core: '>=4.9.2' - nest-asyncio: '>=1.5.4' - python: '>=3.7' - python-dateutil: '>=2.8.2' - pyzmq: '>=23.0' - tornado: '>=6.0' - traitlets: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.3.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: dad80938cdccc5c274e954dda56b6eb5 - sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b - category: apps - optional: true -- name: jupyter_client - version: 7.3.4 - manager: conda - platform: osx-64 - dependencies: - traitlets: '' - entrypoints: '' - python: '>=3.7' - python-dateutil: '>=2.8.2' - tornado: '>=6.0' - jupyter_core: '>=4.9.2' - pyzmq: '>=23.0' - nest-asyncio: '>=1.5.4' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.3.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: dad80938cdccc5c274e954dda56b6eb5 - sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b - category: apps - optional: true -- name: jupyter_client - version: 7.3.4 - manager: conda - platform: win-64 - dependencies: - traitlets: '' - entrypoints: '' - python: '>=3.7' - python-dateutil: '>=2.8.2' - tornado: '>=6.0' - jupyter_core: '>=4.9.2' - pyzmq: '>=23.0' - nest-asyncio: '>=1.5.4' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.3.4-pyhd8ed1ab_0.tar.bz2 - hash: - md5: dad80938cdccc5c274e954dda56b6eb5 - sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b - category: apps - optional: true -- name: jupyter_core - version: 5.7.2 - manager: conda - platform: linux-64 - dependencies: - platformdirs: '>=2.5' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py39hf3d152e_0.conda - hash: - md5: 612f7a003a8a407955572c0d53952ceb - sha256: fbe43f4db84cd4eb0b3eed971a197237c9a0d53fa90b695a7fa82e4ccd193cbf - category: apps - optional: true -- name: jupyter_core - version: 5.7.1 - manager: conda - platform: osx-64 - dependencies: - platformdirs: '>=2.5' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/osx-64/jupyter_core-5.7.1-py39h6e9494a_0.conda - hash: - md5: 9611b1806866adc1693cfb5a323f16e4 - sha256: f30dc74ac083f9c97d5287b335ea193e0ddc27f02195f677436df84d6ccdf59e - category: apps - optional: true -- name: jupyter_core - version: 5.7.2 - manager: conda - platform: win-64 - dependencies: - platformdirs: '>=2.5' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - pywin32: '>=300' - traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/win-64/jupyter_core-5.7.2-py39hcbf5309_0.conda - hash: - md5: 78ec20214b67efe5caebb4f08bdee094 - sha256: 1e02685a2bc5f2805da3236897db1eeb56d5b5f4501a9e1b6b0fe1da44745ec3 - category: apps - optional: true -- name: jupyter_server - version: 1.24.0 - manager: conda - platform: linux-64 - dependencies: - anyio: '>=3.1.0,<4' - argon2-cffi: '' - jinja2: '' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbconvert-core: '>=6.4.4' - nbformat: '>=5.2.0' - packaging: '' - prometheus_client: '' - python: '>=3.7' - pyzmq: '>=17' - send2trash: '' - terminado: '>=0.8.3' - tornado: '>=6.1.0' - traitlets: '>=5.1.0' - websocket-client: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda - hash: - md5: 7f0d2ec2d4954188ff23503f39823409 - sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da - category: apps - optional: true -- name: jupyter_server - version: 1.24.0 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - jinja2: '' - prometheus_client: '' - websocket-client: '' - argon2-cffi: '' - send2trash: '' - python: '>=3.7' - pyzmq: '>=17' - jupyter_client: '>=6.1.12' - tornado: '>=6.1.0' - terminado: '>=0.8.3' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1.0' - nbconvert-core: '>=6.4.4' - anyio: '>=3.1.0,<4' - nbformat: '>=5.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda - hash: - md5: 7f0d2ec2d4954188ff23503f39823409 - sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da - category: apps - optional: true -- name: jupyter_server - version: 1.24.0 - manager: conda - platform: win-64 - dependencies: - packaging: '' - jinja2: '' - prometheus_client: '' - websocket-client: '' - argon2-cffi: '' - send2trash: '' - python: '>=3.7' - pyzmq: '>=17' - jupyter_client: '>=6.1.12' - tornado: '>=6.1.0' - terminado: '>=0.8.3' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1.0' - nbconvert-core: '>=6.4.4' - anyio: '>=3.1.0,<4' - nbformat: '>=5.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda - hash: - md5: 7f0d2ec2d4954188ff23503f39823409 - sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da - category: apps - optional: true -- name: jupyterlab_pygments - version: 0.3.0 - manager: conda - platform: linux-64 - dependencies: - pygments: '>=2.4.1,<3' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda - hash: - md5: afcd1b53bcac8844540358e33f33d28f - sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 - category: apps - optional: true -- name: jupyterlab_pygments - version: 0.3.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - pygments: '>=2.4.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda - hash: - md5: afcd1b53bcac8844540358e33f33d28f - sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 - category: apps - optional: true -- name: jupyterlab_pygments - version: 0.3.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - pygments: '>=2.4.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda - hash: - md5: afcd1b53bcac8844540358e33f33d28f - sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 - category: apps - optional: true -- name: jupyterlab_widgets - version: 1.1.7 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.7-pyhd8ed1ab_0.conda - hash: - md5: 608e312cd17cb7119033fae7d7420572 - sha256: 5da1c9033838f15981b9000bf32ad5877b105e4ae6476982cad836fec42e14db - category: apps - optional: true -- name: jupyterlab_widgets - version: 1.1.7 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.7-pyhd8ed1ab_0.conda - hash: - md5: 608e312cd17cb7119033fae7d7420572 - sha256: 5da1c9033838f15981b9000bf32ad5877b105e4ae6476982cad836fec42e14db - category: apps - optional: true -- name: jupyterlab_widgets - version: 1.1.7 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.7-pyhd8ed1ab_0.conda - hash: - md5: 608e312cd17cb7119033fae7d7420572 - sha256: 5da1c9033838f15981b9000bf32ad5877b105e4ae6476982cad836fec42e14db - category: apps - optional: true -- name: kealib - version: 1.5.3 - manager: conda - platform: linux-64 - dependencies: - hdf5: '>=1.14.3,<1.14.4.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-h2f55d51_0.conda - hash: - md5: f7e7077802927590efc8bf7328208f12 - sha256: ee0934ff426d3cab015055808bed33eb9d20f635ec14bc421c596f4b70927102 - category: core - optional: true -- name: kealib - version: 1.5.3 - manager: conda - platform: osx-64 - dependencies: - hdf5: '>=1.14.3,<1.14.4.0a0' - libcxx: '>=15' - url: https://conda.anaconda.org/conda-forge/osx-64/kealib-1.5.3-h5f07ac3_0.conda - hash: - md5: 7a0924f6214e4c17b6062b21d1240253 - sha256: 54a847faf2d2aea83c149d98634646edb8e7f346faefc6af1aa52106200b43aa - category: core - optional: true -- name: kealib - version: 1.5.3 - manager: conda - platform: win-64 - dependencies: - hdf5: '>=1.14.3,<1.14.4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/kealib-1.5.3-hd248416_0.conda - hash: - md5: b65b0092dade29117f6e87c8d11a2394 - sha256: 833a9f8acc1982a174267f8cd12d161cbafc42fdaeb7beb075975977b5ee56f5 - category: core - optional: true -- name: keyutils - version: 1.6.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=10.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - hash: - md5: 30186d27e2c9fa62b45fb1476b7200e3 - sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb - category: main - optional: false -- name: kiwisolver - version: 1.4.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda - hash: - md5: c9f74d717e5a2847a9f8b779c54130f2 - sha256: 620d2aa2c3f016aa569b4a679688cb34f27c05e08555e4860099cf001bd740e4 - category: core - optional: true -- name: kiwisolver - version: 1.4.5 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.5-py39h8ee36c8_1.conda - hash: - md5: 6072db04642b21329b0502a177ec18bf - sha256: 1ef89b03dd04951e0d78dd36e678b276f18b94326a85b271251e41465aded09b - category: core - optional: true -- name: kiwisolver - version: 1.4.5 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.5-py39h1f6ef14_1.conda - hash: - md5: 4fc5bd0a7b535252028c647cc27d6c87 - sha256: 2d6167d4c67b26d2363266b2fa6805e12da920fe5682847d8a5d9250e76dd833 - category: core - optional: true -- name: krb5 - version: 1.21.2 - manager: conda - platform: linux-64 - dependencies: - keyutils: '>=1.6.1,<2.0a0' - libedit: '>=3.1.20191231,<4.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda - hash: - md5: cd95826dbd331ed1be26bdf401432844 - sha256: 259bfaae731989b252b7d2228c1330ef91b641c9d68ff87dae02cbae682cb3e4 - category: main - optional: false -- name: krb5 - version: 1.21.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - libedit: '>=3.1.20191231,<4.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.2-hb884880_0.conda - hash: - md5: 80505a68783f01dc8d7308c075261b2f - sha256: 081ae2008a21edf57c048f331a17c65d1ccb52d6ca2f87ee031a73eff4dc0fc6 - category: main - optional: false -- name: krb5 - version: 1.21.2 - manager: conda - platform: win-64 - dependencies: - openssl: '>=3.1.2,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.2-heb0366b_0.conda - hash: - md5: 6e8b0f22b4eef3b3cb3849bb4c3d47f9 - sha256: 6002adff9e3dcfc9732b861730cb9e33d45fd76b2035b2cdb4e6daacb8262c0b - category: main - optional: false -- name: lame - version: '3.100' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - hash: - md5: a8832b479f93521a9e7b5b743803be51 - sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab - category: apps - optional: true -- name: lcms2 - version: '2.16' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - hash: - md5: 51bb7010fc86f70eee639b4bb7a894f5 - sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 - category: main - optional: false -- name: lcms2 - version: '2.16' - manager: conda - platform: osx-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda - hash: - md5: 1442db8f03517834843666c422238c9b - sha256: 222ebc0a55544b9922f61e75015d02861e65b48f12113af41d48ba0814e14e4e - category: main - optional: false -- name: lcms2 - version: '2.16' - manager: conda - platform: win-64 - dependencies: - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - hash: - md5: d3592435917b62a8becff3a60db674f6 - sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 - category: main - optional: false -- name: ld_impl_linux-64 - version: '2.40' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda - hash: - md5: 7aca3059a1729aa76c597603f10b0dd3 - sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd - category: main - optional: false -- name: lerc - version: 4.0.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - hash: - md5: 76bbff344f0134279f225174e9064c8f - sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 - category: main - optional: false -- name: lerc - version: 4.0.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=13.0.1' - url: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - hash: - md5: f9d6a4c82889d5ecedec1d90eb673c55 - sha256: e41790fc0f4089726369b3c7f813117bbc14b533e0ed8b94cf75aba252e82497 - category: main - optional: false -- name: lerc - version: 4.0.0 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30037' - url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - hash: - md5: 1900cb3cab5055833cfddb0ba233b074 - sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 - category: main - optional: false -- name: libabseil - version: '20230802.1' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230802.1-cxx17_h59595ed_0.conda - hash: - md5: 2785ddf4cb0e7e743477991d64353947 - sha256: 8729021a93e67bb93b4e73ef0a132499db516accfea11561b667635bcd0507e7 - category: core - optional: true -- name: libabseil - version: '20230802.1' - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230802.1-cxx17_h048a20a_0.conda - hash: - md5: 6554f5fb47c025273268bcdb7bf3cd48 - sha256: 05431a6adb376a865e10d4ae673399d7890083c06f61cf18edb7c6629e75f39e - category: core - optional: true -- name: libabseil - version: '20230802.1' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230802.1-cxx17_h63175ca_0.conda - hash: - md5: 02674c18394394ee4f76cdbd1012f526 - sha256: 8a016d49fad3d4216ce5ae4a60869b5384d31b2009e1ed9f445b6551ce7ef9e8 - category: core - optional: true -- name: libaec - version: 1.1.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - hash: - md5: 5e97e271911b8b2001a8b71860c32faa - sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 - category: main - optional: false -- name: libaec - version: 1.1.3 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda - hash: - md5: 66d3c1f6dd4636216b4fca7a748d50eb - sha256: dae5921339c5d89f4bf58a95fd4e9c76270dbf7f6a94f3c5081b574905fcccf8 - category: main - optional: false -- name: libaec - version: 1.1.3 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - hash: - md5: 8723000f6ffdbdaef16025f0a01b64c5 - sha256: f5c293d3cfc00f71dfdb64bd65ab53625565f8778fc2d5790575bef238976ebf - category: main - optional: false -- name: libasprintf - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.22.5-h661eb56_2.conda - hash: - md5: dd197c968bf9760bba0031888d431ede - sha256: 31d58af7eb54e2938123200239277f14893c5fa4b5d0280c8cf55ae10000638b - category: core - optional: true -- name: libasprintf - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libasprintf-0.22.5-h5ff76d1_2.conda - hash: - md5: ad803793d7168331f1395685cbdae212 - sha256: 4babb29b8d39ae8b341c094c134a1917c595846e5f974c9d0cb64d3f734b46b1 - category: core - optional: true -- name: libasprintf - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/libasprintf-0.22.5-h5728263_2.conda - hash: - md5: 75a6982b9ff0a8db0f53303527b07af8 - sha256: 5722a4a260355c9233680a3424a977433f25826ca0a1c05af403d62b805681bc - category: core - optional: true -- name: libasprintf-devel - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libasprintf: 0.22.5 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.22.5-h661eb56_2.conda - hash: - md5: 02e41ab5834dcdcc8590cf29d9526f50 - sha256: 99d26d272a8203d30b3efbe734a99c823499884d7759b4291674438137c4b5ca - category: core - optional: true -- name: libasprintf-devel - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libasprintf: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libasprintf-devel-0.22.5-h5ff76d1_2.conda - hash: - md5: c7182eda3bc727384e2f98f4d680fa7d - sha256: 39fa757378b49993142013c1f69dd56248cc3703c2f04c5bcf4cc4acdc644ae3 - category: core - optional: true -- name: libasprintf-devel - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libasprintf: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libasprintf-devel-0.22.5-h5728263_2.conda - hash: - md5: 8377da2cc31200d7181d2e48d60e4c7b - sha256: d5c711d9da4e35d29f4f2191664075c64cbf8cd481a35bf7ef3a527018eb0184 - category: core - optional: true -- name: libblas - version: 3.9.0 - manager: conda - platform: linux-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_mkl.tar.bz2 - hash: - md5: 85f61af03fd291dae33150ffe89dc09a - sha256: 24e656f13b402b6fceb88df386768445ab9beb657d451a8e5a88d4b3380cf7a4 - category: main - optional: false -- name: libblas - version: 3.9.0 - manager: conda - platform: osx-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-18_osx64_mkl.conda - hash: - md5: c064a3e6fc5f3659d483292a84447f49 - sha256: 74c0b38806dbfa65d3982d9d1cda6152be690203d323306319d3d8dc39d0918e - category: main - optional: false -- name: libblas - version: 3.9.0 - manager: conda - platform: win-64 - dependencies: - mkl: 2022.1.0 - url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-18_win64_mkl.conda - hash: - md5: b241da5b7a888f72bb3c3e82747334f4 - sha256: 5aef8d69197108f3c320a5d4ad4d19ab9c809cdbbf731c7ab988c227de42d6b5 - category: main - optional: false -- name: libboost-headers - version: 1.84.0 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.84.0-ha770c72_2.conda - hash: - md5: 85d30a3fcc0f1cfc252776208af546a1 - sha256: 5a7843db33422d043256af27f288836f51530b058653bdb074704eb72282f601 - category: core - optional: true -- name: libboost-headers - version: 1.84.0 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libboost-headers-1.84.0-h694c41f_2.conda - hash: - md5: 37678c6938655e8862e121b48101365a - sha256: e51f3b877ab4a7a68bf1e1f95e9b007d716e85547078bfd5f6f7f114545dc26e - category: core - optional: true -- name: libboost-headers - version: 1.84.0 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/libboost-headers-1.84.0-h57928b3_2.conda - hash: - md5: 01d545c5fbafd05719fa31148cbd1989 - sha256: 9acabbc9bf68f89ff60aa06e622b1bdf20edc7b3f53bfc782135f0ea9882291f - category: core - optional: true -- name: libbrotlicommon - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda - hash: - md5: aec6c91c7371c26392a06708a73c70e5 - sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78 - category: core - optional: true -- name: libbrotlicommon - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h0dc2134_1.conda - hash: - md5: 9e6c31441c9aa24e41ace40d6151aab6 - sha256: f57c57c442ef371982619f82af8735f93a4f50293022cfd1ffaf2ff89c2e0b2a - category: core - optional: true -- name: libbrotlicommon - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda - hash: - md5: f77f319fb82980166569e1280d5b2864 - sha256: f75fed29b0cc503d1b149a4945eaa32df56e19da5e2933de29e8f03947203709 - category: core - optional: true -- name: libbrotlidec - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libbrotlicommon: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda - hash: - md5: f07002e225d7a60a694d42a7bf5ff53f - sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926 - category: core - optional: true -- name: libbrotlidec - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libbrotlicommon: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h0dc2134_1.conda - hash: - md5: 9ee0bab91b2ca579e10353738be36063 - sha256: b11939c4c93c29448660ab5f63273216969d1f2f315dd9be60f3c43c4e61a50c - category: core - optional: true -- name: libbrotlidec - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - libbrotlicommon: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda - hash: - md5: 19ce3e1dacc7912b3d6ff40690ba9ae0 - sha256: 1b352ee05931ea24c11cd4a994d673890fd1cc690c21e023e736bdaac2632e93 - category: core - optional: true -- name: libbrotlienc - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - libbrotlicommon: 1.1.0 - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda - hash: - md5: 5fc11c6020d421960607d821310fcd4d - sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071 - category: core - optional: true -- name: libbrotlienc - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - libbrotlicommon: 1.1.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h0dc2134_1.conda - hash: - md5: 8a421fe09c6187f0eb5e2338a8a8be6d - sha256: bc964c23e1a60ca1afe7bac38a9c1f2af3db4a8072c9f2eac4e4de537a844ac7 - category: core - optional: true -- name: libbrotlienc - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - libbrotlicommon: 1.1.0 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda - hash: - md5: 71e890a0b361fd58743a13f77e1506b7 - sha256: eae6b76154e594c6d211160c6d1aeed848672618152a562e0eabdfa641d34aca - category: core - optional: true -- name: libcap - version: '2.69' - manager: conda - platform: linux-64 - dependencies: - attr: '>=2.5.1,<2.6.0a0' - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda - hash: - md5: 25cb5999faa414e5ccb2c1388f62d3d5 - sha256: 942f9564b4228609f017b6617425d29a74c43b8a030e12239fa4458e5cb6323c - category: apps - optional: true -- name: libcblas - version: 3.9.0 - manager: conda - platform: linux-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-16_linux64_mkl.tar.bz2 - hash: - md5: 361bf757b95488de76c4f123805742d3 - sha256: 892ba10508f22310ccfe748df1fd3b6c7f20e7b6f6b79e69ed337863551c1bd8 - category: main - optional: false -- name: libcblas - version: 3.9.0 - manager: conda - platform: osx-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-18_osx64_mkl.conda - hash: - md5: 047e2889832db702a0ec03eef2d45821 - sha256: 05c5b6d220309054d5ebc8bcf3e27ed0577dae27b1eaccd075c09bcf0fdced8d - category: main - optional: false -- name: libcblas - version: 3.9.0 - manager: conda - platform: win-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-18_win64_mkl.conda - hash: - md5: fb0b514194c14342a97dfe31a41d60fc - sha256: d5f60ed6508b3889a77caf5ff2b66203714e45ec4eea6e5cdb12fe6e8ef2bbdb - category: main - optional: false -- name: libclang - version: 15.0.7 - manager: conda - platform: linux-64 - dependencies: - libclang13: 15.0.7 - libgcc-ng: '>=12' - libllvm15: '>=15.0.7,<15.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h127d8a8_5.conda - hash: - md5: 09b94dd3a7e304df5b83176239347920 - sha256: 606b79c8a4a926334191d79f4a1447aac1d82c43344e3a603cbba31ace859b8f - category: apps - optional: true -- name: libclang - version: 15.0.7 - manager: conda - platform: osx-64 - dependencies: - libclang13: 15.0.7 - libcxx: '>=16.0.6' - libllvm15: '>=15.0.7,<15.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libclang-15.0.7-default_h7151d67_5.conda - hash: - md5: 2e7eb31c1431630f111be17f7f0cb948 - sha256: ea3c840b7e931228007f1dc21c1cfe8e3e833990da9e92fff9c23c98d035b89a - category: apps - optional: true -- name: libclang - version: 15.0.7 - manager: conda - platform: win-64 - dependencies: - libclang13: 15.0.7 - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libclang-15.0.7-default_h3a3e6c3_5.conda - hash: - md5: 26e1a5a4ff7f8e3f5fb89be829818a75 - sha256: 562dea76c17c30ed6d78734a9e40008f45cdab15611439d7d4e8250e0040f3ef - category: apps - optional: true -- name: libclang13 - version: 15.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libllvm15: '>=15.0.7,<15.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h5d6823c_5.conda - hash: - md5: 2d694a9ffdcc30e89dea34a8dcdab6ae - sha256: 91ecfcf545a5d4588e9fad5db2b5b04eeef18cae1c03b790829ef8b978f06ccd - category: apps - optional: true -- name: libclang13 - version: 15.0.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16.0.6' - libllvm15: '>=15.0.7,<15.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libclang13-15.0.7-default_h0edc4dd_5.conda - hash: - md5: 3bfcf640ab0956a9db86335e917100e3 - sha256: fec1ff1ae4a49f96eefeae9dd14ea8d9e591fc29995861ad49e92104ae6bb8e6 - category: apps - optional: true -- name: libclang13 - version: 15.0.7 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libclang13-15.0.7-default_hf64faad_5.conda - hash: - md5: 2f96c58f89abccb04bbc8cd57961111f - sha256: b952b85a6124442be3fe8af23d56f123548f7b28067f60615f7233197469a02d - category: apps - optional: true -- name: libcrc32c - version: 1.1.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - libstdcxx-ng: '>=9.4.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - hash: - md5: c965a5aa0d5c1c37ffc62dff36e28400 - sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 - category: core - optional: true -- name: libcrc32c - version: 1.1.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=11.1.0' - url: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 - hash: - md5: 23d6d5a69918a438355d7cbc4c3d54c9 - sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff - category: core - optional: true -- name: libcrc32c - version: 1.1.2 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - hash: - md5: cd4cc2d0c610c8cb5419ccc979f2d6ce - sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e - category: core - optional: true -- name: libcups - version: 2.3.3 - manager: conda - platform: linux-64 - dependencies: - krb5: '>=1.21.1,<1.22.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda - hash: - md5: d4529f4dff3057982a7617c7ac58fde3 - sha256: bc67b9b21078c99c6bd8595fe7e1ed6da1f721007726e717f0449de7032798c4 - category: apps - optional: true -- name: libcurl - version: 8.7.1 - manager: conda - platform: linux-64 - dependencies: - 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' - url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.7.1-hca28451_0.conda - hash: - md5: 755c7f876815003337d2c61ff5d047e5 - sha256: 82a75e9a5d9ee5b2f487d850ec5d4edc18a56eb9527608a95a916c40baae3843 - category: main - optional: false -- name: libcurl - version: 8.7.1 - manager: conda - platform: osx-64 - dependencies: - 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' - url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.7.1-h726d00d_0.conda - hash: - md5: fa58e5eaa12006bc3289a71357bef167 - sha256: 06cb1bd3bbaf905213777d6ade190ac4c7fb7a20dfe0cf901c977dbbc6cec265 - category: main - optional: false -- name: libcurl - version: 8.7.1 - manager: conda - platform: win-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libssh2: '>=1.11.0,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.7.1-hd5e4a3a_0.conda - hash: - md5: 3396aff340d0903e8814c2852d631e4e - sha256: 8dd272362e2aeb1d4f49333ff57e07eb4da2bbabce20110a2416df9152ba03e0 - category: main - optional: false -- name: libcxx - version: 16.0.6 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-16.0.6-hd57cbcb_0.conda - hash: - md5: 7d6972792161077908b62971802f289a - sha256: 9063271847cf05f3a6cc6cae3e7f0ced032ab5f3a3c9d3f943f876f39c5c2549 - category: main - optional: false -- name: libdeflate - version: '1.19' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda - hash: - md5: 1635570038840ee3f9c71d22aa5b8b6d - sha256: 985ad27aa0ba7aad82afa88a8ede6a1aacb0aaca950d710f15d85360451e72fd - category: main - optional: false -- name: libdeflate - version: '1.19' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.19-ha4e1b8e_0.conda - hash: - md5: 6a45f543c2beb40023df5ee7e3cedfbd - sha256: d0f789120fedd0881b129aba9993ec5dcf0ecca67a71ea20c74394e41adcb503 - category: main - optional: false -- name: libdeflate - version: '1.19' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.19-hcfcfb64_0.conda - hash: - md5: 002b1b723b44dbd286b9e3708762433c - sha256: e2886a84eaa0fbeca1d1d810270f234431d190402b4a79acf756ca2d16000354 - category: main - optional: false -- name: libedit - version: 3.1.20191231 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=7.5.0' - ncurses: '>=6.2,<7.0.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 - hash: - md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 - sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf - category: main - optional: false -- name: libedit - version: 3.1.20191231 - manager: conda - platform: osx-64 - dependencies: - ncurses: '>=6.2,<7.0.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 - hash: - md5: 6016a8a1d0e63cac3de2c352cd40208b - sha256: dbd3c3f2eca1d21c52e4c03b21930bbce414c4592f8ce805801575b9e9256095 - category: main - optional: false -- name: libev - version: '4.33' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - hash: - md5: 172bf1cd1ff8629f2b1179945ed45055 - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - category: main - optional: false -- name: libev - version: '4.33' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - hash: - md5: 899db79329439820b7e8f8de41bca902 - sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 - category: main - optional: false -- name: libevent - version: 2.1.12 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - hash: - md5: a1cfcc585f0c42bf8d5546bb1dfb668d - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - category: apps - optional: true -- name: libexpat - version: 2.6.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda - hash: - md5: e7ba12deb7020dd080c6c70e7b6f6a3d - sha256: 331bb7c7c05025343ebd79f86ae612b9e1e74d2687b8f3179faec234f986ce19 - category: core - optional: true -- name: libexpat - version: 2.6.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.2-h73e2aa4_0.conda - hash: - md5: 3d1d51c8f716d97c864d12f7af329526 - sha256: a188a77b275d61159a32ab547f7d17892226e7dac4518d2c6ac3ac8fc8dfde92 - category: core - optional: true -- name: libexpat - version: 2.6.2 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda - hash: - md5: bc592d03f62779511d392c175dcece64 - sha256: 79f612f75108f3e16bbdc127d4885bb74729cf66a8702fca0373dad89d40c4b7 - category: core - optional: true -- name: libffi - version: 3.4.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - hash: - md5: d645c6d2ac96843a2bfaccd2d62b3ac3 - sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e - category: main - optional: false -- name: libffi - version: 3.4.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - hash: - md5: ccb34fb14960ad8b125962d3d79b31a9 - sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f - category: main - optional: false -- name: libffi - version: 3.4.2 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - hash: - md5: 2c96d1b6915b408893f9472569dee135 - sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 - category: main - optional: false -- name: libflac - version: 1.4.3 - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libgcc-ng: '>=12' - libogg: '>=1.3.4,<1.4.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda - hash: - md5: ee48bf17cc83a00f59ca1494d5646869 - sha256: 65908b75fa7003167b8a8f0001e11e58ed5b1ef5e98b96ab2ba66d7c1b822c7d - category: apps - optional: true -- name: libgcc-ng - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: - _libgcc_mutex: '0.1' - _openmp_mutex: '>=4.5' - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda - hash: - md5: d4ff227c46917d3b4565302a2bbb276b - sha256: d32f78bfaac282cfe5205f46d558704ad737b8dbf71f9227788a5ca80facaba4 - category: main - optional: false -- name: libgcrypt - version: 1.10.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libgpg-error: '>=1.47,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda - hash: - md5: 32d16ad533c59bb0a3c5ffaf16110829 - sha256: d1bd47faa29fec7288c7b212198432b07f890d3d6f646078da93b059c2e9daff - category: apps - optional: true -- name: libgdal - version: 3.6.4 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - blosc: '>=1.21.5,<2.0a0' - cfitsio: '>=4.2.0,<4.2.1.0a0' - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - geotiff: '>=1.7.1,<1.8.0a0' - giflib: '>=5.2.1,<5.3.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.2,<1.14.4.0a0' - json-c: '>=0.17,<0.18.0a0' - kealib: '>=1.5.2,<1.6.0a0' - lerc: '>=4.0.0,<5.0a0' - libcurl: '>=8.4.0,<9.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libkml: '>=1.3.0,<1.4.0a0' - libnetcdf: '>=4.9.2,<4.9.3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libspatialite: '>=5.0.1,<5.1.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libuuid: '>=2.38.1,<3.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openjpeg: '>=2.5.0,<3.0a0' - openssl: '>=3.1.3,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' - poppler: '>=23.10.0,<23.11.0a0' - postgresql: '' - proj: '>=9.3.0,<9.3.1.0a0' - tiledb: '>=2.16,<2.17.0a0' - xerces-c: '>=3.2.4,<3.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.6.4-hb454697_22.conda - hash: - md5: 6ef386473c9e0d731ea00d08c9787299 - sha256: fb708c2d66ebcd7d0dd4a0dccf92d21c1c1c4cb7f1bfeca58195f2699ec5c73b - category: core - optional: true -- name: libgdal - version: 3.6.4 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - blosc: '>=1.21.5,<2.0a0' - cfitsio: '>=4.2.0,<4.2.1.0a0' - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - geotiff: '>=1.7.1,<1.8.0a0' - giflib: '>=5.2.1,<5.3.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.2,<1.14.4.0a0' - json-c: '>=0.17,<0.18.0a0' - kealib: '>=1.5.2,<1.6.0a0' - lerc: '>=4.0.0,<5.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libdeflate: '>=1.19,<1.20.0a0' - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libkml: '>=1.3.0,<1.4.0a0' - libnetcdf: '>=4.9.2,<4.9.3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libspatialite: '>=5.0.1,<5.1.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openjpeg: '>=2.5.0,<3.0a0' - openssl: '>=3.1.3,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' - poppler: '>=23.10.0,<23.11.0a0' - postgresql: '' - proj: '>=9.3.0,<9.3.1.0a0' - tiledb: '>=2.16,<2.17.0a0' - xerces-c: '>=3.2.4,<3.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libgdal-3.6.4-hbff29b3_22.conda - hash: - md5: ce28d41550df4d9e902a2262ea9e47c7 - sha256: f9f3b91237614dd83135a3e7bb2950c4b8907c1c13ca314a0e5c25b9c2507c96 - category: core - optional: true -- name: libgdal - version: 3.6.4 - manager: conda - platform: win-64 - dependencies: - blosc: '>=1.21.5,<2.0a0' - cfitsio: '>=4.2.0,<4.2.1.0a0' - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - geotiff: '>=1.7.1,<1.8.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.2,<1.14.4.0a0' - kealib: '>=1.5.2,<1.6.0a0' - lerc: '>=4.0.0,<5.0a0' - libcurl: '>=8.4.0,<9.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libexpat: '>=2.5.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libkml: '>=1.3.0,<1.4.0a0' - libnetcdf: '>=4.9.2,<4.9.3.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libspatialite: '>=5.0.1,<5.1.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openjpeg: '>=2.5.0,<3.0a0' - openssl: '>=3.1.3,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' - poppler: '>=23.10.0,<23.11.0a0' - postgresql: '' - proj: '>=9.3.0,<9.3.1.0a0' - tiledb: '>=2.16,<2.17.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - xerces-c: '>=3.2.4,<3.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libgdal-3.6.4-h8c6448d_22.conda - hash: - md5: 5cc58509bd5013f56f046fee4e0d4ee6 - sha256: bbd3a2f6b7037cb69f80b96f2e3eb06ebbe15d452ebb7cc28fb5a41fcbcd2ab2 - category: core - optional: true -- name: libgettextpo - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.22.5-h59595ed_2.conda - hash: - md5: 172bcc51059416e7ce99e7b528cede83 - sha256: e2f784564a2bdc6f753f00f63cc77c97601eb03bc89dccc4413336ec6d95490b - category: core - optional: true -- name: libgettextpo - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libgettextpo-0.22.5-h5ff76d1_2.conda - hash: - md5: 54cc9d12c29c2f0516f2ef4987de53ae - sha256: 139d1861e21c41b950ebf9e395db2492839337a3b481ad2901a4a6800c555e37 - category: core - optional: true -- name: libgettextpo - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libgettextpo-0.22.5-h5728263_2.conda - hash: - md5: f4c826b19bf1ccee2a63a2c685039728 - sha256: 445ecfc4bf5b474c2ac79f716dcb8459a08a532ab13a785744665f086ef94c95 - category: core - optional: true -- name: libgettextpo-devel - version: 0.22.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libgettextpo: 0.22.5 - url: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-devel-0.22.5-h59595ed_2.conda - hash: - md5: b63d9b6da3653179a278077f0de20014 - sha256: 695eb2439ad4a89e4205dd675cc52fba5cef6b5d41b83f07cdbf4770a336cc15 - category: core - optional: true -- name: libgettextpo-devel - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libgettextpo: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libgettextpo-devel-0.22.5-h5ff76d1_2.conda - hash: - md5: 1e0384c52cd8b54812912e7234e66056 - sha256: 57940f6a872ffcf5a3406e96bdbd9d25854943e4dd84acee56178ffb728a9671 - category: core - optional: true -- name: libgettextpo-devel - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libgettextpo: 0.22.5 - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libgettextpo-devel-0.22.5-h5728263_2.conda - hash: - md5: 6f42ec61abc6d52a4079800a640319c5 - sha256: bcee730b2be23ba9aa5de3471b78c4644d3b17d5a71e7fdc59bb40e252edb2f7 - category: core - optional: true -- name: libgfortran - version: 5.0.0 - manager: conda - platform: osx-64 - dependencies: - libgfortran5: 13.2.0 - url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda - hash: - md5: 0b6e23a012ee7a9a5f6b244f5a92c1d5 - sha256: 4874422e567b68334705c135c17e5acdca1404de8255673ce30ad3510e00be0d - category: main - optional: false -- name: libgfortran-ng - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: - libgfortran5: 13.2.0 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda - hash: - md5: e73e9cfd1191783392131e6238bdb3e9 - sha256: 238c16c84124d58307376715839aa152bd4a1bf5a043052938ad6c3137d30245 - category: main - optional: false -- name: libgfortran5 - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=13.2.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda - hash: - md5: 7a6bd7a12a4bd359e2afe6c0fa1acace - sha256: ba8d94e8493222ce155bb264d9de4200e41498a458e866fedf444de809bde8b6 - category: main - optional: false -- name: libgfortran5 - version: 13.2.0 - manager: conda - platform: osx-64 - dependencies: - llvm-openmp: '>=8.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda - hash: - md5: e4fb4d23ec2870ff3c40d10afe305aec - sha256: da3db4b947e30aec7596a3ef92200d17e774cccbbf7efc47802529a4ca5ca31b - category: main - optional: false -- name: libglib - version: 2.78.1 - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libffi: '>=3.4,<4.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-hebfc3b9_0.conda - hash: - md5: ddd09e8904fde46b85f41896621803e6 - sha256: 44c5f58593b074886436db7d13fdfcba2fe3731867ea52237f049b8400341a2b - category: core - optional: true -- name: libglib - version: 2.78.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gettext: '>=0.21.1,<1.0a0' - libcxx: '>=16.0.6' - libffi: '>=3.4,<4.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.78.1-h6d9ecee_0.conda - hash: - md5: 0282868f1debc145b732276b2fe40397 - sha256: b16bc30db9688d17b5d1cd9e93d0640d02a862145b072a63af6e45e91da6795c - category: core - optional: true -- name: libglib - version: 2.78.1 - manager: conda - platform: win-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libffi: '>=3.4,<4.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libglib-2.78.1-he8f3873_0.conda - hash: - md5: 7022abdf53daa6566caebbe1c2d328ae - sha256: 5919e8f57640b142872899943ec122341ba1e19492e46ad9b47866e013224c10 - category: core - optional: true -- name: libgoogle-cloud - version: 2.12.0 - manager: conda - platform: linux-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgcc-ng: '>=12' - libgrpc: '>=1.60.0,<1.61.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libstdcxx-ng: '>=12' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hef10d8f_5.conda - hash: - md5: 055e2266d27f0e2290cf0a6ad668a225 - sha256: 3c80f8da632c01b5beb50bdc4c7c488501793cd7c138427f61e93f98719e8342 - category: core - optional: true -- name: libgoogle-cloud - version: 2.12.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - libabseil: '>=20230802.1,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=15' - libgrpc: '>=1.60.0,<1.61.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-he77a663_5.conda - hash: - md5: dac48d8fadf9e28c7010f49b56804862 - sha256: 4cae7eefaeba18daf87f046c1e26026f741d1c3f0f0740bf082e3dbd8454ac67 - category: core - optional: true -- name: libgoogle-cloud - version: 2.12.0 - manager: conda - platform: win-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgrpc: '>=1.60.0,<1.61.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - openssl: '>=3.2.0,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hc7cbac0_5.conda - hash: - md5: 1f219361b6f83f8e7ab4d2c67ff06ce4 - sha256: 03f360345841ecb6cdc6a3a3a75a04e29d2f53e5fc180822d9ebef5d131a9007 - category: core - optional: true -- name: libgpg-error - version: '1.48' - manager: conda - platform: linux-64 - dependencies: - gettext: '>=0.21.1,<1.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda - hash: - md5: 4d18d86916705d352d5f4adfb7f0edd3 - sha256: c448c6d86d27e10b9e844172000540e9cbfe9c28f968db87f949ba05add9bd50 - category: apps - optional: true -- name: libgrpc - version: 1.60.1 - manager: conda - platform: linux-64 - dependencies: - c-ares: '>=1.26.0,<2.0a0' - libabseil: '>=20230802.1,<20230803.0a0' - libgcc-ng: '>=12' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libre2-11: '>=2023.6.2,<2024.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - re2: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.60.1-h74775cd_0.conda - hash: - md5: 5b7702c8961d99c949fb4f300a19c747 - sha256: 66d776eda66e1d786160e03b4572c8dc9c8377a7f0abfca9a90643b64f1d150e - category: core - optional: true -- name: libgrpc - version: 1.60.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - c-ares: '>=1.26.0,<2.0a0' - libabseil: '>=20230802.1,<20230803.0a0' - libcxx: '>=16' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libre2-11: '>=2023.6.2,<2024.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - re2: '' - url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.60.1-h038e8f1_0.conda - hash: - md5: 8eb56fb9779657380adcf4b68181bcf0 - sha256: 4594e993e1ab0fafbee81cfe4ff6b3aea5684035a3244a9edac8e73a1f5da508 - category: core - optional: true -- name: libgrpc - version: 1.60.1 - manager: conda - platform: win-64 - dependencies: - c-ares: '>=1.26.0,<2.0a0' - libabseil: '>=20230802.1,<20230803.0a0' - libprotobuf: '>=4.25.1,<4.25.2.0a0' - libre2-11: '>=2023.6.2,<2024.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - re2: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.60.1-h0bf0bfa_0.conda - hash: - md5: 18b66a3a1d8b0d10767e15b0e24fdaf6 - sha256: 7b3dbadddc653ce72da4726a3d75fcd250e8a1e973879883ceae7ebee7d06f01 - category: core - optional: true -- name: libhwloc - version: 2.10.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.6,<3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.10.0-default_h2fb2949_1000.conda - hash: - md5: 7e3726e647a619c6ce5939014dfde86d - sha256: dab61dff22f40367e57b1fe024e789f451b7511e65c32b97ada97ca549dd8dbc - category: main - optional: false -- name: libhwloc - version: 2.10.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libxml2: '>=2.12.6,<3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libhwloc-2.10.0-default_h1321489_1000.conda - hash: - md5: 6f5fe4374d1003e116e2573022178da6 - sha256: 86f0867081792d52f5c4e51e673478ba0a31e38fc7be59e1ba1890decc46e8da - category: main - optional: false -- name: libhwloc - version: 2.10.0 - manager: conda - platform: win-64 - dependencies: - libxml2: '>=2.12.6,<3.0a0' - pthreads-win32: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.10.0-default_h2fffb23_1000.conda - hash: - md5: ee944f0d41d9e2048f9d7492c1623ca3 - sha256: e0d75da50e67a81e3cb37e2ee3b0d6ddc6543ec0f7b3828f884558552a1c4d93 - category: main - optional: false -- name: libiconv - version: '1.17' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - hash: - md5: d66573916ffcf376178462f1b61c941e - sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 - category: main - optional: false -- name: libiconv - version: '1.17' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda - hash: - md5: 6c3628d047e151efba7cf08c5e54d1ca - sha256: 23d4923baeca359423a7347c2ed7aaf48c68603df0cf8b87cc94a10b0d4e9a23 - category: main - optional: false -- name: libiconv - version: '1.17' - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - hash: - md5: e1eb10b1cca179f2baa3601e4efc8712 - sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b - category: main - optional: false -- name: libintl - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libintl-0.22.5-h5ff76d1_2.conda - hash: - md5: 3fb6774cb8cdbb93a6013b67bcf9716d - sha256: 280aaef0ed84637ee869012ad9ad9ed208e068dd9b8cf010dafeea717dad7203 - category: core - optional: true -- name: libintl - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_2.conda - hash: - md5: aa622c938af057adc119f8b8eecada01 - sha256: 1b95335af0a3e278b31e16667fa4e51d1c3f5e22d394d982539dfd5d34c5ae19 - category: core - optional: true -- name: libintl-devel - version: 0.22.5 - manager: conda - platform: osx-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/osx-64/libintl-devel-0.22.5-h5ff76d1_2.conda - hash: - md5: ea0a07e556d6b238db685cae6e3585d0 - sha256: e3f15a85c6e63633a5ff503d56366bab31cd2e07ea21559889bc7eb19564106d - category: core - optional: true -- name: libintl-devel - version: 0.22.5 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libintl: 0.22.5 - url: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_2.conda - hash: - md5: a2ad82fae23975e4ccbfab2847d31d48 - sha256: 6164fd51abfc7294477c58da77ee1ff9ebc63b9a33404b646407f7fbc3cc7d0d - category: core - optional: true -- name: libjpeg-turbo - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - hash: - md5: ea25936bb4080d843790b586850f82b8 - sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f - category: main - optional: false -- name: libjpeg-turbo - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - hash: - md5: 72507f8e3961bc968af17435060b6dd6 - sha256: d9572fd1024adc374aae7c247d0f29fdf4b122f1e3586fe62acc18067f40d02f - category: main - optional: false -- name: libjpeg-turbo - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - hash: - md5: 3f1b948619c45b1ca714d60c7389092c - sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff - category: main - optional: false -- name: libkml - version: 1.3.0 - manager: conda - platform: linux-64 - dependencies: - libboost-headers: '' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - uriparser: '>=0.9.7,<1.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h01aab08_1018.conda - hash: - md5: 3eb5f16bcc8a02892199aa63555c731f - sha256: f67fc0be886c7eac14dbce858bfcffbc90a55b598e897e513f0979dd2caad750 - category: core - optional: true -- name: libkml - version: 1.3.0 - manager: conda - platform: osx-64 - dependencies: - libboost-headers: '' - libcxx: '>=15.0.7' - libexpat: '>=2.5.0,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - uriparser: '>=0.9.7,<1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libkml-1.3.0-hab3ca0e_1018.conda - hash: - md5: 535b1bb4896b113c14dfa64141370a12 - sha256: f546750a59b85a4b721f69e34e797ceddb93c438ee384db285e3344490d6a9b5 - category: core - optional: true -- name: libkml - version: 1.3.0 - manager: conda - platform: win-64 - dependencies: - libboost-headers: '' - libexpat: '>=2.5.0,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - uriparser: '>=0.9.7,<1.0a0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libkml-1.3.0-haf3e7a6_1018.conda - hash: - md5: 950e8765b20b79ecbd296543f848b4ec - sha256: 74117fe100d9aa3aaab25eb705c44165f8ff6feec2e7c058212a3f5434f85d5f - category: core - optional: true -- name: liblapack - version: 3.9.0 - manager: conda - platform: linux-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-16_linux64_mkl.tar.bz2 - hash: - md5: a2f166748917d6d6e4707841ca1f519e - sha256: d6201f860b2d76ed59027e69c2bbad6d1cb211a215ec9705cc487cde488fa1fa - category: main - optional: false -- name: liblapack - version: 3.9.0 - manager: conda - platform: osx-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-18_osx64_mkl.conda - hash: - md5: 59474f345b7f4dedfef8f4c8e9c3106f - sha256: 0896906380f890751d4e6592dd243a8d1b17b40d6082a5ebb76d80f223d38544 - category: main - optional: false -- name: liblapack - version: 3.9.0 - manager: conda - platform: win-64 - dependencies: - libblas: 3.9.0 - url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-18_win64_mkl.conda - hash: - md5: 82117ef735a916ace2df6f2de4df4824 - sha256: f90d96695938659fad4dd47d92dbeebff4a3824979bfb1aac33c8287a83e9d23 - category: main - optional: false -- name: libllvm14 - version: 14.0.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - hash: - md5: 73301c133ded2bf71906aa2104edae8b - sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a - category: core - optional: true -- name: libllvm14 - version: 14.0.6 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libllvm14-14.0.6-hc8e404f_4.conda - hash: - md5: ed06753e2ba7c66ed0ca7f19578fcb68 - sha256: 0df3902a300cfe092425f86144d5e00ef67be3cd1cc89fd63084d45262a772ad - category: core - optional: true -- name: libllvm15 - version: 15.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.1,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda - hash: - md5: 8a35df3cbc0c8b12cc8af9473ae75eef - sha256: e71584c0f910140630580fdd0a013029a52fd31e435192aea2aa8d29005262d1 - category: apps - optional: true -- name: libllvm15 - version: 15.0.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libxml2: '>=2.12.1,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libllvm15-15.0.7-hbedff68_4.conda - hash: - md5: bdc80cf2aa69d6eb8dd101dfd804db07 - sha256: a0598cc166e92c6c63e58a7eaa184fa0b8b467693b965dbe19f1c9ff37e134c3 - category: apps - optional: true -- name: libnetcdf - version: 4.9.2 - manager: conda - platform: linux-64 - dependencies: - blosc: '>=1.21.5,<2.0a0' - bzip2: '>=1.0.8,<2.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.3,<1.14.4.0a0' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.2,<3.0.0a0' - libzip: '>=1.10.1,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - zlib: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h9612171_113.conda - hash: - md5: b2414908e43c442ddc68e6148774a304 - sha256: 0b4d984c7be21531e9254ce742e04101f7f7e77c0bbb7074855c0806c28323b0 - category: core - optional: true -- name: libnetcdf - version: 4.9.2 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - blosc: '>=1.21.5,<2.0a0' - bzip2: '>=1.0.8,<2.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.3,<1.14.4.0a0' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=16.0.6' - libxml2: '>=2.12.2,<3.0.0a0' - libzip: '>=1.10.1,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - zlib: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libnetcdf-4.9.2-nompi_h7760872_113.conda - hash: - md5: bce76ace6497221c2a2a02840aaceac5 - sha256: 3d6a950d82a8dfb9fa51c263e543cfa9c113703add20646ec85401e7b557da49 - category: core - optional: true -- name: libnetcdf - version: 4.9.2 - manager: conda - platform: win-64 - dependencies: - blosc: '>=1.21.5,<2.0a0' - bzip2: '>=1.0.8,<2.0a0' - hdf4: '>=4.2.15,<4.2.16.0a0' - hdf5: '>=1.14.3,<1.14.4.0a0' - libaec: '>=1.1.2,<2.0a0' - libcurl: '>=8.5.0,<9.0a0' - libxml2: '>=2.12.2,<3.0.0a0' - libzip: '>=1.10.1,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libnetcdf-4.9.2-nompi_h07c049d_113.conda - hash: - md5: 2aa431a5a05e3679eea4faad0f47b119 - sha256: 4b06a7aa1fcfb3406e3eab9368089d612ea014402edd5deefb2f02b73cf3673d - category: core - optional: true -- name: libnghttp2 - version: 1.58.0 - manager: conda - platform: linux-64 - dependencies: - c-ares: '>=1.23.0,<2.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' - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda - hash: - md5: 700ac6ea6d53d5510591c4344d5c989a - sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb - category: main - optional: false -- name: libnghttp2 - version: 1.58.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - c-ares: '>=1.23.0,<2.0a0' - libcxx: '>=16.0.6' - libev: '>=4.33,<5.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.0,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda - hash: - md5: faecc55c2a8155d9ff1c0ff9a0fef64f - sha256: 412fd768e787e586602f8e9ea52bf089f3460fc630f6987f0cbd89b70e9a4380 - category: main - optional: false -- name: libnsl - version: 2.0.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - hash: - md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 - sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 - category: main - optional: false -- name: libogg - version: 1.3.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2 - hash: - md5: 6e8cc2173440d77708196c5b93771680 - sha256: b88afeb30620b11bed54dac4295aa57252321446ba4e6babd7dce4b9ffde9b25 - category: apps - optional: true -- name: libogg - version: 1.3.4 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libogg-1.3.4-h35c211d_1.tar.bz2 - hash: - md5: a7ab4b53ef18c598ffaa597230bc3ba1 - sha256: e3cec0c66d352d822b7a90db8edbc62f237fca079b6044e5b27f6ca529f7d9d9 - category: apps - optional: true -- name: libogg - version: 1.3.4 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.4-h8ffe710_1.tar.bz2 - hash: - md5: 04286d905a0dcb7f7d4a12bdfe02516d - sha256: ef20f04ad2121a07e074b34bfc211587df18180e680963f5c02c54d1951b9ee6 - category: apps - optional: true -- name: libopus - version: 1.3.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2 - hash: - md5: 15345e56d527b330e1cacbdf58676e8f - sha256: 0e1c2740ebd1c93226dc5387461bbcf8142c518f2092f3ea7551f77755decc8f - category: apps - optional: true -- name: libopus - version: 1.3.1 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libopus-1.3.1-hc929b4f_1.tar.bz2 - hash: - md5: 380b9ea5f6a7a277e6c1ac27d034369b - sha256: c126fc225bece591a8f010e95ca7d010ea2d02df9251830bec24a19bf823fc31 - category: apps - optional: true -- name: libpng - version: 1.6.43 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda - hash: - md5: 009981dd9cfcaa4dbfa25ffaed86bcae - sha256: 502f6ff148ac2777cc55ae4ade01a8fc3543b4ffab25c4e0eaa15f94e90dd997 - category: main - optional: false -- name: libpng - version: 1.6.43 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.43-h92b6c6a_0.conda - hash: - md5: 65dcddb15965c9de2c0365cb14910532 - sha256: 13e646d24b5179e6b0a5ece4451a587d759f55d9a360b7015f8f96eff4524b8f - category: main - optional: false -- name: libpng - version: 1.6.43 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.43-h19919ed_0.conda - hash: - md5: 77e398acc32617a0384553aea29e866b - sha256: 6ad31bf262a114de5bbe0c6ba73b29ed25239d0f46f9d59700310d2ea0b3c142 - category: main - optional: false -- name: libpq - version: '16.2' - manager: conda - platform: linux-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libgcc-ng: '>=12' - openssl: '>=3.2.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.2-h33b98f1_1.conda - hash: - md5: 9e49ec2a61d02623b379dc332eb6889d - sha256: e03a8439b79e013840c44c957d37dbce10316888b2b5dc7dcfcfc0cfe3a3b128 - category: core - optional: true -- name: libpq - version: '16.2' - manager: conda - platform: osx-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - openssl: '>=3.2.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libpq-16.2-ha925e61_1.conda - hash: - md5: a10ef466bbc68a8e74112a8e26028d66 - sha256: bfb252cb14b88a75ba4af930c16dccae265dce0afdf5abde7de1718181aa2cea - category: core - optional: true -- name: libpq - version: '16.2' - manager: conda - platform: win-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - openssl: '>=3.2.1,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libpq-16.2-hdb24f17_1.conda - hash: - md5: a347334764562545270c6acc4b852ccf - sha256: b217f10336ca02bcffd2adf474fecf4bc917d8fbd26ab027b96e0d05257e5537 - category: core - optional: true -- name: libprotobuf - version: 4.25.1 - manager: conda - platform: linux-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.1-hf27288f_2.conda - hash: - md5: 47773f41e24c4d53ba8d0b76f2b69a8a - sha256: 108056c2e95345591cf422dab0e91772e3c63b0193e7d7f419ccf7c49411ba48 - category: core - optional: true -- name: libprotobuf - version: 4.25.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - libabseil: '>=20230802.1,<20230803.0a0' - libcxx: '>=16' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.25.1-hc4f2305_2.conda - hash: - md5: 0114ade0d2b756e0b4aed191dbf8b8fa - sha256: 7bce30effeb6ef10c18bf2cc37a308bcd0fe67f4b7646aa9d04c1494fbb0e860 - category: core - optional: true -- name: libprotobuf - version: 4.25.1 - manager: conda - platform: win-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.1-hb8276f3_2.conda - hash: - md5: 5cfd27b450e65afcc823c83934122455 - sha256: d3d99982c694ddefaaaf67ba76e55ef913ea3ce13b138dffc6f5c486660cbf13 - category: core - optional: true -- name: libre2-11 - version: 2023.09.01 - manager: conda - platform: linux-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.09.01-h7a70373_1.conda - hash: - md5: e61d774293f3ccfb82561a627e846de4 - sha256: 63ebe0a3244b5f1c61337b5b387a2bacd1ca88cd894229a8cd538ef9a4b51d1a - category: core - optional: true -- name: libre2-11 - version: 2023.09.01 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - libabseil: '>=20230802.1,<20230803.0a0' - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2023.09.01-h4694dbf_1.conda - hash: - md5: c33c8c1b04c200c2c2aac01571d3a2cf - sha256: cacd50ad7a7dd052dc38e79f6910aee82c032d4a8b5e85aeee9ee64f6bbac2da - category: core - optional: true -- name: libre2-11 - version: 2023.09.01 - manager: conda - platform: win-64 - dependencies: - libabseil: '>=20230802.1,<20230803.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2023.09.01-h8c5ae5e_1.conda - hash: - md5: 32f3e1f111ec25def4603b25cb34495c - sha256: a61abf0b2e3fca56bc6ff7a64aa48f7626445c8e53d32212a2b5dbb77b245e38 - category: core - optional: true -- name: librttopo - version: 1.1.0 - manager: conda - platform: linux-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda - hash: - md5: 264f9a3a4ea52c8f4d3e8ae1213a3335 - sha256: a87307e9c8fb446eb7a1698d9ab40e590ba7e55de669b59f5751c48c2b320827 - category: core - optional: true -- name: librttopo - version: 1.1.0 - manager: conda - platform: osx-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-64/librttopo-1.1.0-h23f359d_14.conda - hash: - md5: 4cec4e76f3d1cd6ec739ca40e7e12847 - sha256: df61f3c42651fd02d2e5fbb3cd6a225df29dc91ec6c5a57d0d717dc14ee8e2dc - category: core - optional: true -- name: librttopo - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-h92c5fdb_14.conda - hash: - md5: 9d3f0c286ea2df09b2c0aefbd63769c0 - sha256: e693468c519bea531c4fa3edccb906c1de5ac35f5630a1745230b5f17ab88104 - category: core - optional: true -- name: libsndfile - version: 1.2.2 - manager: conda - platform: linux-64 - dependencies: - lame: '>=3.100,<3.101.0a0' - libflac: '>=1.4.3,<1.5.0a0' - libgcc-ng: '>=12' - libogg: '>=1.3.4,<1.4.0a0' - libopus: '>=1.3.1,<2.0a0' - libstdcxx-ng: '>=12' - libvorbis: '>=1.3.7,<1.4.0a0' - mpg123: '>=1.32.1,<1.33.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda - hash: - md5: ef1910918dd895516a769ed36b5b3a4e - sha256: f709cbede3d4f3aee4e2f8d60bd9e256057f410bd60b8964cb8cf82ec1457573 - category: apps - optional: true -- name: libsodium - version: 1.0.18 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=7.5.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 - hash: - md5: c3788462a6fbddafdb413a9f9053e58d - sha256: 53da0c8b79659df7b53eebdb80783503ce72fb4b10ed6e9e05cc0e9e4207a130 - category: apps - optional: true -- name: libsodium - version: 1.0.18 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.18-hbcb3906_1.tar.bz2 - hash: - md5: 24632c09ed931af617fe6d5292919cab - sha256: 2da45f14e3d383b4b9e3a8bacc95cd2832aac2dbf9fbc70d255d384a310c5660 - category: apps - optional: true -- name: libsodium - version: 1.0.18 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.18-h8d14728_1.tar.bz2 - hash: - md5: 5c1fb45b5e2912c19098750ae8a32604 - sha256: ecc463f0ab6eaf6bc5bd6ff9c17f65595de6c7a38db812222ab8ffde0d3f4bc2 - category: apps - optional: true -- name: libspatialite - version: 5.0.1 - manager: conda - platform: linux-64 - dependencies: - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - libgcc-ng: '>=12' - librttopo: '>=1.1.0,<1.2.0a0' - libsqlite: '>=3.43.0,<4.0a0' - libstdcxx-ng: '>=12' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - sqlite: '' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-h090f1da_29.conda - hash: - md5: b615d7ec63e5c8a0215caeeaed8b0135 - sha256: c3378a58043fd2cf95d521bbd70bb44a6abc88c29efef60a37ad66d24202f210 - category: core - optional: true -- name: libspatialite - version: 5.0.1 - manager: conda - platform: osx-64 - dependencies: - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - libcxx: '>=15.0.7' - libiconv: '>=1.17,<2.0a0' - librttopo: '>=1.1.0,<1.2.0a0' - libsqlite: '>=3.43.0,<4.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - sqlite: '' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.0.1-h231fb02_29.conda - hash: - md5: b9dca295c3fb0b6c3d407b75138c4b2b - sha256: d0cd6691a527b2264467ab42d91261126360c92f74c15d3f9eb3d05135a61bcb - category: core - optional: true -- name: libspatialite - version: 5.0.1 - manager: conda - platform: win-64 - dependencies: - freexl: '>=2.0.0,<3.0a0' - geos: '>=3.12.0,<3.12.1.0a0' - librttopo: '>=1.1.0,<1.2.0a0' - libsqlite: '>=3.43.0,<4.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - proj: '>=9.3.0,<9.3.1.0a0' - sqlite: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zlib: '' - url: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.0.1-hbf340bc_29.conda - hash: - md5: 90d9b293e6b1032356cd9c199abbc384 - sha256: 4b083a5289ad3c1009ad24c64ba70698003315e4a828a60a4b91550dcbaf3686 - category: core - optional: true -- name: libsqlite - version: 3.45.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda - hash: - md5: b3316cbe90249da4f8e84cd66e1cc55b - sha256: e2273d6860eadcf714a759ffb6dc24a69cfd01f2a0ea9d6c20f86049b9334e0c - category: main - optional: false -- name: libsqlite - version: 3.45.3 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.3-h92b6c6a_0.conda - hash: - md5: 68e462226209f35182ef66eda0f794ff - sha256: 4d44b68fb29dcbc2216a8cae0b274b02ef9b4ae05d1d0f785362ed30b91c9b52 - category: main - optional: false -- name: libsqlite - version: 3.45.3 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.3-hcfcfb64_0.conda - hash: - md5: 73f5dc8e2d55d9a1e14b11f49c3b4a28 - sha256: 06ec75faa51d7ec6d5db98889e869b579a9df19d7d3d9baff8359627da4a3b7e - category: main - optional: false -- name: libssh2 - version: 1.11.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - hash: - md5: 1f5a58e686b13bcfde88b93f547d23fe - sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d - category: main - optional: false -- name: libssh2 - version: 1.11.0 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda - hash: - md5: ca3a72efba692c59a90d4b9fc0dfe774 - sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515 - category: main - optional: false -- name: libssh2 - version: 1.11.0 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda - hash: - md5: dc262d03aae04fe26825062879141a41 - sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec - category: main - optional: false -- name: libstdcxx-ng - version: 13.2.0 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda - hash: - md5: f6f6600d18a4047b54f803cf708b868a - sha256: a56c5b11f1e73a86e120e6141a42d9e935a99a2098491ac9e15347a1476ce777 - category: main - optional: false -- name: libsystemd0 - version: '255' - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libcap: '>=2.69,<2.70.0a0' - libgcc-ng: '>=12' - libgcrypt: '>=1.10.3,<2.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda - hash: - md5: 3366af27f0b593544a6cd453c7932ac5 - sha256: af27b0d225435d03f378a119f8eab6b280c53557a3c84cdb3bb8fd3167615aed - category: apps - optional: true -- name: libtiff - version: 4.6.0 - manager: conda - platform: linux-64 - dependencies: - lerc: '>=4.0.0,<5.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libstdcxx-ng: '>=12' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda - hash: - md5: 55ed21669b2015f77c180feb1dd41930 - sha256: 45158f5fbee7ee3e257e6b9f51b9f1c919ed5518a94a9973fe7fa4764330473e - category: main - optional: false -- name: libtiff - version: 4.6.0 - manager: conda - platform: osx-64 - dependencies: - lerc: '>=4.0.0,<5.0a0' - libcxx: '>=15.0.7' - libdeflate: '>=1.19,<1.20.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h684deea_2.conda - hash: - md5: 2ca10a325063e000ad6d2a5900061e0d - sha256: 1ef5bd7295f4316b111f70ad21356fb9f0de50b85a341cac9e3a61ac6487fdf1 - category: main - optional: false -- name: libtiff - version: 4.6.0 - manager: conda - platform: win-64 - dependencies: - lerc: '>=4.0.0,<5.0a0' - libdeflate: '>=1.19,<1.20.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-h6e2ebb7_2.conda - hash: - md5: 08d653b74ee2dec0131ad4259ffbb126 - sha256: f7b50b71840a5d8edd74a8bccf0c173ca2599bd136e366c35722272b4afa0500 - category: main - optional: false -- name: libuuid - version: 2.38.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - hash: - md5: 40b61aab5c7ba9ff276c41cfffe6b80b - sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 - category: main - optional: false -- name: libvorbis - version: 1.3.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - libogg: '>=1.3.4,<1.4.0a0' - libstdcxx-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2 - hash: - md5: 309dec04b70a3cc0f1e84a4013683bc0 - sha256: 53080d72388a57b3c31ad5805c93a7328e46ff22fab7c44ad2a86d712740af33 - category: apps - optional: true -- name: libvorbis - version: 1.3.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=11.0.0' - libogg: '>=1.3.4,<1.4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libvorbis-1.3.7-h046ec9c_0.tar.bz2 - hash: - md5: fbbda1fede0aadaa252f6919148c4ce1 - sha256: fbcce1005efcd616e452dea07fe34893d8dd13c65628e74920eeb68ac549faf7 - category: apps - optional: true -- name: libvorbis - version: 1.3.7 - manager: conda - platform: win-64 - dependencies: - libogg: '>=1.3.4,<1.4.0a0' - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h0e60522_0.tar.bz2 - hash: - md5: e1a22282de0169c93e4ffe6ce6acc212 - sha256: 6cdc018a024908270205d8512d92f92cf0adaaa5401c2b403757189b138bf56a - category: apps - optional: true -- name: libwebp - version: 1.3.2 - manager: conda - platform: linux-64 - dependencies: - giflib: '>=5.2.1,<5.3.0a0' - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda - hash: - md5: 0ebb65e8d86843865796c7c95a941f34 - sha256: cc5e55531d8067ea379b145861aea8c749a545912bc016372f5e3c69cc925efd - category: apps - optional: true -- name: libwebp - version: 1.3.2 - manager: conda - platform: osx-64 - dependencies: - giflib: '>=5.2.1,<5.3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-1.3.2-h44782d1_1.conda - hash: - md5: 46d48ff2cd600a82db18d7b83471aa86 - sha256: 4d7e1efb76e398f578c5a3d0905c5eca1e4a93298aed6e2f7a10854f6671dfe8 - category: apps - optional: true -- name: libwebp - version: 1.3.2 - manager: conda - platform: win-64 - dependencies: - libwebp-base: '>=1.3.2,<2.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libwebp-1.3.2-hcfcfb64_1.conda - hash: - md5: 6202a1ba6be2713084cf0452d4e8c10c - sha256: 7b4f95d1e9756fe81186309113188195fbac164687b96ad443a243a0ca59ec8f - category: apps - optional: true -- name: libwebp-base - version: 1.3.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_1.conda - hash: - md5: 049b7df8bae5e184d1de42cdf64855f8 - sha256: c230e238646d0481851a44086767581cf7e112f27e97bb1c0b89175a079d961d - category: main - optional: false -- name: libwebp-base - version: 1.3.2 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.3.2-h10d778d_1.conda - hash: - md5: 1ff09ca6e85ee516442a6a94cdfc7065 - sha256: cd2d651e90b93b03e4e38617aa15ddf8e5537b2bd22dd2628784e4c80bc107eb - category: main - optional: false -- name: libwebp-base - version: 1.3.2 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.3.2-hcfcfb64_1.conda - hash: - md5: fdf80cb33c32d4d002bb89c37cfff5b7 - sha256: bf8d80cb9ed5092742aefc963dc200454b8ecbecf3656a813df295ba2d97336c - category: main - optional: false -- name: libxcb - version: '1.15' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - pthread-stubs: '' - xorg-libxau: '' - xorg-libxdmcp: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda - hash: - md5: 33277193f5b92bad9fdd230eb700929c - sha256: a670902f0a3173a466c058d2ac22ca1dd0df0453d3a80e0212815c20a16b0485 - category: main - optional: false -- name: libxcb - version: '1.15' - manager: conda - platform: osx-64 - dependencies: - pthread-stubs: '' - xorg-libxau: '' - xorg-libxdmcp: '' - url: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.15-hb7f2c08_0.conda - hash: - md5: 5513f57e0238c87c12dffedbcc9c1a4a - sha256: f41904f466acc8b3197f37f2dd3a08da75720c7f7464d9267635debc4ac1902b - category: main - optional: false -- name: libxcb - version: '1.15' - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - m2w64-gcc-libs-core: '' - pthread-stubs: '' - xorg-libxau: '' - xorg-libxdmcp: '' - url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.15-hcd874cb_0.conda - hash: - md5: 090d91b69396f14afef450c285f9758c - sha256: d01322c693580f53f8d07a7420cd6879289f5ddad5531b372c3efd1c37cac3bf - category: main - optional: false -- name: libxcrypt - version: 4.4.36 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - hash: - md5: 5aa797f8787fe7a17d1b0821485b5adc - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - category: main - optional: false -- name: libxkbcommon - version: 1.7.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - libxml2: '>=2.12.6,<3.0a0' - xkeyboard-config: '' - xorg-libxau: '>=1.0.11,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.7.0-h662e7e4_0.conda - hash: - md5: b32c0da42b1f24a98577bb3d7fc0b995 - sha256: 3d97d7f964237f42452295d461afdbc51e93f72e2c80be516f56de80e3bb6621 - category: apps - optional: true -- name: libxml2 - version: 2.12.6 - manager: conda - platform: linux-64 - dependencies: - icu: '>=73.2,<74.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.6-h232c23b_2.conda - hash: - md5: 9a3a42df8a95f65334dfc7b80da1195d - sha256: 0fd41df7211aae04f492c8550ce10238e8cfa8b1abebc2215a983c5e66d284ea - category: main - optional: false -- name: libxml2 - version: 2.12.6 - manager: conda - platform: osx-64 - dependencies: - icu: '>=73.2,<74.0a0' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.6-hc0ae0f7_2.conda - hash: - md5: 50b997370584f2c83ca0c38e9028eab9 - sha256: 2598a525b1769338f96c3d4badad7d8b95c9ddcea86db3f9479a274803190e5c - category: main - optional: false -- name: libxml2 - version: 2.12.6 - manager: conda - platform: win-64 - dependencies: - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.6-hc3477c8_2.conda - hash: - md5: ac7af7a949db01dae61ddc48f4a93d79 - sha256: 9a717cad6da52c84cfc490f7d52203c4cbc9e0e0389941fc6523273be5ccd17a - category: main - optional: false -- name: libxslt - version: 1.1.39 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxml2: '>=2.12.1,<3.0.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda - hash: - md5: e71f31f8cfb0a91439f2086fc8aa0461 - sha256: 684e9b67ef7b9ca0ca993762eeb39705ec58e2e7f958555c758da7ef416db9f3 - category: apps - optional: true -- name: libxslt - version: 1.1.39 - manager: conda - platform: osx-64 - dependencies: - libxml2: '>=2.12.1,<3.0.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libxslt-1.1.39-h03b04e6_0.conda - hash: - md5: a6e0cec6b3517ffc6b5d36a920fc9312 - sha256: decfc5614a10231a17543b7366616fb2d88c14be6dd9dd5ecde63aa9a5acfb9e - category: apps - optional: true -- name: libxslt - version: 1.1.39 - manager: conda - platform: win-64 - dependencies: - libxml2: '>=2.12.1,<3.0.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.39-h3df6e99_0.conda - hash: - md5: 279ee338c9b34871d578cb3c7aa68f70 - sha256: 6e3d99466d2076c35e7ac8dcdfe604da3d593f55b74a5b8e96c2b2ff63c247aa - category: apps - optional: true -- name: libzip - version: 1.10.1 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda - hash: - md5: ac79812548e7e8cf61f7b0abdef01d3b - sha256: 84e93f189072dcfcbe77744f19c7e4171523fbecfaba7352e5a23bbe014574c7 - category: core - optional: true -- name: libzip - version: 1.10.1 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libzip-1.10.1-hc158999_3.conda - hash: - md5: 6112b3173f3aa2f12a8f40d07a77cc35 - sha256: 0689e4a6e67e80027e43eefb8a365273405a01f5ab2ece97319155b8be5d64f6 - category: core - optional: true -- name: libzip - version: 1.10.1 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libzip-1.10.1-h1d365fa_3.conda - hash: - md5: 5c629cd12d89e2856c17b1dc5fcf44a4 - sha256: 221698b52dd7a3dcfc67ff9460e9c8649fc6c86506a2a2ab6f57b97e7489bb9f - category: core - optional: true -- name: libzlib - version: 1.2.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda - hash: - md5: f36c115f1ee199da648e0597ec2047ad - sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4 - category: main - optional: false -- name: libzlib - version: 1.2.13 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda - hash: - md5: 4a3ad23f6e16f99c04e166767193d700 - sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 - category: main - optional: false -- name: libzlib - version: 1.2.13 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda - hash: - md5: 5fdb9c6a113b6b6cb5e517fd972d5f41 - sha256: c161822ee8130b71e08b6d282b9919c1de2c5274b29921a867bca0f7d30cad26 - category: main - optional: false -- name: llvm-openmp - version: 18.1.3 - manager: conda - platform: linux-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.3-h4dfa4b3_0.conda - hash: - md5: d39965123dffcad4d750989be65bcb7c - sha256: 68f77d42fd748a51549b8ce47a5a6e51a3773284ebd5c2769f6e0c0643b1e971 - category: main - optional: false -- name: llvm-openmp - version: 18.1.3 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-18.1.3-hb6ac08f_0.conda - hash: - md5: 506f270f4f00980d27cc1fc127e0ed37 - sha256: 997e4169ea474a7bc137fed3b5f4d94b1175162b3318e8cb3943003e460fe458 - category: main - optional: false -- name: llvmlite - version: 0.42.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libllvm14: '>=14.0.6,<14.1.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.42.0-py39h174d805_1.conda - hash: - md5: 50c046e743c64016105ca502c79eefb2 - sha256: e05ec83d4bc2725209acda2d8f14450577bc960c251f167bf5356b951142a234 - category: core - optional: true -- name: llvmlite - version: 0.42.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libllvm14: '>=14.0.6,<14.1.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/llvmlite-0.42.0-py39he5a6977_1.conda - hash: - md5: 7b68d8bdfeca7e97a547919b0f0ef8aa - sha256: 61047e6b1df8293244fb8a6ee58b5c40cd3c6f794e914ba9808675f8de11f83d - category: core - optional: true -- name: llvmlite - version: 0.42.0 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - vs2015_runtime: '' - url: https://conda.anaconda.org/conda-forge/win-64/llvmlite-0.42.0-py39hd28a505_1.conda - hash: - md5: 4b080ce4f8374b27e43be4421f518c93 - sha256: de87ace4868f63b6a8609f4074cdc786f8725f62977996303ac3ac05c5d4cf88 - category: core - optional: true -- name: locket - version: 1.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 91e27ef3d05cc772ce627e51cff111c4 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - category: core - optional: true -- name: locket - version: 1.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 91e27ef3d05cc772ce627e51cff111c4 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - category: core - optional: true -- name: locket - version: 1.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 91e27ef3d05cc772ce627e51cff111c4 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - category: core - optional: true -- name: lz4-c - version: 1.9.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda - hash: - md5: 318b08df404f9c9be5712aaa5a6f0bb0 - sha256: 1b4c105a887f9b2041219d57036f72c4739ab9e9fe5a1486f094e58c76b31f5f - category: main - optional: false -- name: lz4-c - version: 1.9.4 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.6' - url: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda - hash: - md5: aa04f7143228308662696ac24023f991 - sha256: 39aa0c01696e4e202bf5e337413de09dfeec061d89acd5f28e9968b4e93c3f48 - category: main - optional: false -- name: lz4-c - version: 1.9.4 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda - hash: - md5: e34720eb20a33fc3bfb8451dd837ab7a - sha256: a0954b4b1590735ea5f3d0f4579c3883f8ac837387afd5b398b241fda85124ab - category: main - optional: false -- name: m2w64-gcc-libgfortran - version: 5.3.0 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs-core: '' - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 - hash: - md5: 066552ac6b907ec6d72c0ddab29050dc - sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 - category: main - optional: false -- name: m2w64-gcc-libs - version: 5.3.0 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libgfortran: '' - m2w64-gcc-libs-core: '' - m2w64-gmp: '' - m2w64-libwinpthread-git: '' - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 - hash: - md5: fe759119b8b3bfa720b8762c6fdc35de - sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa - category: main - optional: false -- name: m2w64-gcc-libs-core - version: 5.3.0 - manager: conda - platform: win-64 - dependencies: - m2w64-gmp: '' - m2w64-libwinpthread-git: '' - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 - hash: - md5: 4289d80fb4d272f1f3b56cfe87ac90bd - sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 - category: main - optional: false -- name: m2w64-gmp - version: 6.1.0 - manager: conda - platform: win-64 - dependencies: - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 - hash: - md5: 53a1c73e1e3d185516d7e3af177596d9 - sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 - category: main - optional: false -- name: m2w64-libwinpthread-git - version: 5.0.0.4634.697f757 - manager: conda - platform: win-64 - dependencies: - msys2-conda-epoch: '20160418' - url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - hash: - md5: 774130a326dee16f1ceb05cc687ee4f0 - sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 - category: main - optional: false -- name: markupsafe - version: 2.1.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py39hd1e30aa_0.conda - hash: - md5: 9a9a22eb1f83c44953319ee3b027769f - sha256: 855d305ceda4751cdd495923104dd34da5a6be45e4fd50a4e80361d9f95bcb38 - category: core - optional: true -- name: markupsafe - version: 2.1.5 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-2.1.5-py39ha09f3b3_0.conda - hash: - md5: db347b50af50d030b73be1d1e457cac2 - sha256: 2fbc1105e680dd34e44f59c67ad30b5e5fbbed65ce4dfb09dac0df811bc24f73 - category: core - optional: true -- name: markupsafe - version: 2.1.5 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py39ha55989b_0.conda - hash: - md5: f8b7e33c8bf98901925817b7f4436c7e - sha256: 6318073ed42b6186ef4ac0feba54b9da7aa1c7e59d848bb81ac2ac372730f095 - category: core - optional: true -- name: matplotlib-base - version: 3.7.3 - manager: conda - platform: linux-64 - dependencies: - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - importlib-resources: '>=3.2.0' - kiwisolver: '>=1.0.1' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.7' - python_abi: 3.9.* - tk: '>=8.6.12,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.3-py39he9076e7_0.conda - hash: - md5: 658c6763ca44fe6513d9971c4d344ba5 - sha256: d99e89c0f4faa884f13f95bb322a3098b103daccc8feb5377bbfeaf609b38195 - category: core - optional: true -- name: matplotlib-base - version: 3.7.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.12' - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - importlib-resources: '>=3.2.0' - kiwisolver: '>=1.0.1' - libcxx: '>=15.0.7' - numpy: '>=1.22.4,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.7' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.7.3-py39he57df45_0.conda - hash: - md5: dd3e8c42cb9b631ff0eecdeaa0b3dc3d - sha256: 40f7da32630c6abacce6890b3caafb8f040814df64bdb84161a41514779976e2 - category: core - optional: true -- name: matplotlib-base - version: 3.7.3 - manager: conda - platform: win-64 - dependencies: - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - importlib-resources: '>=3.2.0' - kiwisolver: '>=1.0.1' - numpy: '>=1.22.4,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.7' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.7.3-py39hf19769e_0.conda - hash: - md5: ee0528098cb74cd3a0ad9203c213c148 - sha256: 00864932bf075bdabfebd447bcdb3d5d931aa6a3e99feee3e917f96a654410c7 - category: core - optional: true -- name: matplotlib-inline - version: 0.1.7 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - traitlets: '' - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - hash: - md5: 779345c95648be40d22aaa89de7d4254 - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - category: apps - optional: true -- name: matplotlib-inline - version: 0.1.7 - manager: conda - platform: osx-64 - dependencies: - traitlets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - hash: - md5: 779345c95648be40d22aaa89de7d4254 - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - category: apps - optional: true -- name: matplotlib-inline - version: 0.1.7 - manager: conda - platform: win-64 - dependencies: - traitlets: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - hash: - md5: 779345c95648be40d22aaa89de7d4254 - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - category: apps - optional: true -- name: mccabe - version: 0.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 34fc335fc50eef0b5ea708f2b5f54e0c - sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b - category: dev - optional: true -- name: mccabe - version: 0.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 34fc335fc50eef0b5ea708f2b5f54e0c - sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b - category: dev - optional: true -- name: mccabe - version: 0.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 34fc335fc50eef0b5ea708f2b5f54e0c - sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b - category: dev - optional: true -- name: minizip - version: 4.0.5 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libgcc-ng: '>=12' - libiconv: '>=1.17,<2.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.5-h0ab5242_0.conda - hash: - md5: 557396140c71eba588e96d597e0c61aa - sha256: 1a56549751f4c4a7998e0a8bcff367c3992cb832c0b211d775cfd644e1ef5e6b - category: core - optional: true -- name: minizip - version: 4.0.5 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libcxx: '>=16' - libiconv: '>=1.17,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.0.5-h37d7099_0.conda - hash: - md5: 2203b2e83c20305b3d669556c345c8e9 - sha256: 426f4db1d56cdefa478a5ece35ed7624860548ace87d6ad927c4c9c6a7a20fec - category: core - optional: true -- name: minizip - version: 4.0.5 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - xz: '>=5.2.6,<6.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/minizip-4.0.5-h5bed578_0.conda - hash: - md5: acd216ec6d40c7e05991dccc4f9165f2 - sha256: 3b77d2f3e71df522e88e1ec4e30742257523ff3e42a4ae0d6c9c7605b4aa6e54 - category: core - optional: true -- name: mistune - version: 3.0.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5cbee699846772cc939bef23a0d524ed - sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c - category: apps - optional: true -- name: mistune - version: 3.0.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5cbee699846772cc939bef23a0d524ed - sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c - category: apps - optional: true -- name: mistune - version: 3.0.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5cbee699846772cc939bef23a0d524ed - sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c - category: apps - optional: true -- name: mkl - version: 2022.2.1 - manager: conda - platform: linux-64 - dependencies: - _openmp_mutex: '>=4.5' - llvm-openmp: '>=15.0.6' - tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda - hash: - md5: a7ce56d5757f5b57e7daabe703ade5bb - sha256: 5322750d5e96ff5d96b1457db5fb6b10300f2bc4030545e940e17b57c4e96d00 - category: core - optional: true -- name: mkl - version: 2022.2.1 - manager: conda - platform: osx-64 - dependencies: - llvm-openmp: '>=14.0.6' - tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/osx-64/mkl-2022.2.1-h44ed08c_16952.conda - hash: - md5: a51e7035c0075d4341942a5894ef20b9 - sha256: 70896885df3cf031ac547c42f27384f769f190bc2bfb9e2520a7ef2c34db4806 - category: core - optional: true -- name: mkl - version: 2022.1.0 - manager: conda - platform: win-64 - dependencies: - intel-openmp: '' - tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/win-64/mkl-2022.1.0-h6a75c08_874.tar.bz2 - hash: - md5: 2ff89a7337a9636029b4db9466e9f8e3 - sha256: b130d13dba6a798cbcce8f19c52e9765b75b8668d2f8f95ba8210c63b6fa84eb - category: core - optional: true -- name: mpg123 - version: 1.32.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.6-h59595ed_0.conda - hash: - md5: 9160cdeb523a1b20cf8d2a0bf821f45d - sha256: 8895a5ce5122a3b8f59afcba4b032f198e8a690a0efc95ef61f2135357ef0d72 - category: apps - optional: true -- name: msgpack-python - version: 1.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py39h7633fee_0.conda - hash: - md5: f668e146a2ed03a4e62ffbb98b3115fb - sha256: a47f46861f206043602b5f8b176e3957dd4a59876b819a2e089d63d52e312412 - category: core - optional: true -- name: msgpack-python - version: 1.0.7 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.0.7-py39h6be1789_0.conda - hash: - md5: 41e836f12229ef10ceb7b54383702aeb - sha256: f00d36cf25d0059be8473255b1bfa0ddae5b52fc5cb78c2b94bcf38b2bb5d971 - category: core - optional: true -- name: msgpack-python - version: 1.0.7 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.0.7-py39h1f6ef14_0.conda - hash: - md5: 74e894b9e9ef693559594bdb472da770 - sha256: fbee93bcf9efed06400bd1dc2b7c6216a9e4527677d9b451d65599e525aaacf9 - category: core - optional: true -- name: msys2-conda-epoch - version: '20160418' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - hash: - md5: b0309b72560df66f71a9d5e34a5efdfa - sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 - category: main - optional: false -- name: munch - version: 4.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: core - optional: true -- name: munch - version: 4.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: core - optional: true -- name: munch - version: 4.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: core - optional: true -- name: munkres - version: 1.1.4 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - hash: - md5: 2ba8498c1018c1e9c61eb99b973dfe19 - sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 - category: core - optional: true -- name: munkres - version: 1.1.4 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - hash: - md5: 2ba8498c1018c1e9c61eb99b973dfe19 - sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 - category: core - optional: true -- name: munkres - version: 1.1.4 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - hash: - md5: 2ba8498c1018c1e9c61eb99b973dfe19 - sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 - category: core - optional: true -- name: mysql-common - version: 8.0.33 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - openssl: '>=3.1.4,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda - hash: - md5: 80bf3b277c120dd294b51d404b931a75 - sha256: c8b2c5c9d0d013a4f6ef96cb4b339bfdc53a74232d8c61ed08178e5b1ec4eb63 - category: apps - optional: true -- name: mysql-common - version: 8.0.33 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - openssl: '>=3.1.4,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/mysql-common-8.0.33-h1d20c9b_6.conda - hash: - md5: ad07fbd8dc7992e5e004f7bdfdee246d - sha256: b6b18aeed435d4075b4aac3559a070a6caa5a174a339e8de87785fca2f8f57a6 - category: apps - optional: true -- name: mysql-libs - version: 8.0.33 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-common: 8.0.33 - openssl: '>=3.1.4,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda - hash: - md5: e87530d1b12dd7f4e0f856dc07358d60 - sha256: 78c905637dac79b197395065c169d452b8ca2a39773b58e45e23114f1cb6dcdb - category: apps - optional: true -- name: mysql-libs - version: 8.0.33 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-common: 8.0.33 - openssl: '>=3.1.4,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/mysql-libs-8.0.33-hed35180_6.conda - hash: - md5: c27fddc4d3c2d471d1d706b243570f37 - sha256: 87d754167fddf342b894e377fdcaac096c93c941773267ad9c89bb7b64924a33 - category: apps - optional: true -- name: nbclassic - version: 1.0.0 - manager: conda - platform: linux-64 - dependencies: - argon2-cffi: '' - ipykernel: '' - ipython_genutils: '' - jinja2: '' - jupyter_client: '>=6.1.1' - jupyter_core: '>=4.6.1' - jupyter_server: '>=1.8' - nbconvert: '>=5' - nbformat: '' - nest-asyncio: '>=1.5' - notebook-shim: '>=0.2.3' - prometheus_client: '' - python: '>=3.7' - pyzmq: '>=17' - send2trash: '>=1.8.0' - terminado: '>=0.8.3' - tornado: '>=6.1' - traitlets: '>=4.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda - hash: - md5: a0be31e9bd84d6eae87cdbf74c56b90b - sha256: fc2b2e606ccbd0aaa2cdecdd33fc39e2c4bd7b5b96a64b89b3e6ad9ce20eec2f - category: apps - optional: true -- name: nbclassic - version: 1.0.0 - manager: conda - platform: osx-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - pyzmq: '>=17' - terminado: '>=0.8.3' - jupyter_client: '>=6.1.1' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert: '>=5' - jupyter_server: '>=1.8' - notebook-shim: '>=0.2.3' - url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda - hash: - md5: a0be31e9bd84d6eae87cdbf74c56b90b - sha256: fc2b2e606ccbd0aaa2cdecdd33fc39e2c4bd7b5b96a64b89b3e6ad9ce20eec2f - category: apps - optional: true -- name: nbclassic - version: 1.0.0 - manager: conda - platform: win-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - pyzmq: '>=17' - terminado: '>=0.8.3' - jupyter_client: '>=6.1.1' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert: '>=5' - jupyter_server: '>=1.8' - notebook-shim: '>=0.2.3' - url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda - hash: - md5: a0be31e9bd84d6eae87cdbf74c56b90b - sha256: fc2b2e606ccbd0aaa2cdecdd33fc39e2c4bd7b5b96a64b89b3e6ad9ce20eec2f - category: apps - optional: true -- name: nbclient - version: 0.10.0 - manager: conda - platform: linux-64 - dependencies: - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbformat: '>=5.1' - python: '>=3.8' - traitlets: '>=5.4' - url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda - hash: - md5: 15b51397e0fe8ea7d7da60d83eb76ebc - sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf - category: apps - optional: true -- name: nbclient - version: 0.10.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbformat: '>=5.1' - traitlets: '>=5.4' - url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda - hash: - md5: 15b51397e0fe8ea7d7da60d83eb76ebc - sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf - category: apps - optional: true -- name: nbclient - version: 0.10.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - jupyter_client: '>=6.1.12' - jupyter_core: '>=4.12,!=5.0.*' - nbformat: '>=5.1' - traitlets: '>=5.4' - url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda - hash: - md5: 15b51397e0fe8ea7d7da60d83eb76ebc - sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf - category: apps - optional: true -- name: nbconvert - version: 7.16.3 - manager: conda - platform: linux-64 - dependencies: - nbconvert-core: 7.16.3 - nbconvert-pandoc: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_1.conda - hash: - md5: c80cd9bcb93679ceb9ea0938cf5f7db0 - sha256: 03f1b45a9860217a58c077a38e65abc27360868cb498e30d19cdbd1011c79874 - category: apps - optional: true -- name: nbconvert - version: 7.16.3 - manager: conda - platform: osx-64 - dependencies: - nbconvert-core: 7.16.3 - nbconvert-pandoc: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_1.conda - hash: - md5: c80cd9bcb93679ceb9ea0938cf5f7db0 - sha256: 03f1b45a9860217a58c077a38e65abc27360868cb498e30d19cdbd1011c79874 - category: apps - optional: true -- name: nbconvert - version: 7.16.3 - manager: conda - platform: win-64 - dependencies: - nbconvert-core: 7.16.3 - nbconvert-pandoc: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_1.conda - hash: - md5: c80cd9bcb93679ceb9ea0938cf5f7db0 - sha256: 03f1b45a9860217a58c077a38e65abc27360868cb498e30d19cdbd1011c79874 - category: apps - optional: true -- name: nbconvert-core - version: 7.16.3 - manager: conda - platform: linux-64 - dependencies: - beautifulsoup4: '' - bleach: '' - defusedxml: '' - entrypoints: '>=0.2.2' - jinja2: '>=3.0' - jupyter_core: '>=4.7' - jupyterlab_pygments: '' - markupsafe: '>=2.0' - mistune: '>=2.0.3,<4' - nbclient: '>=0.5.0' - nbformat: '>=5.1' - packaging: '' - pandocfilters: '>=1.4.1' - pygments: '>=2.4.1' - python: '>=3.8' - tinycss2: '' - traitlets: '>=5.0' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_1.conda - hash: - md5: 2f34a65aee1d1f354e701d166413783a - sha256: b86ab6e91bb0b25a1bc12f3ff2e332f481ff8ad9c835724c86f1adf98b913733 - category: apps - optional: true -- name: nbconvert-core - version: 7.16.3 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - beautifulsoup4: '' - defusedxml: '' - bleach: '' - tinycss2: '' - jupyterlab_pygments: '' - python: '>=3.8' - jinja2: '>=3.0' - entrypoints: '>=0.2.2' - markupsafe: '>=2.0' - jupyter_core: '>=4.7' - traitlets: '>=5.0' - pandocfilters: '>=1.4.1' - nbformat: '>=5.1' - pygments: '>=2.4.1' - nbclient: '>=0.5.0' - mistune: '>=2.0.3,<4' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_1.conda - hash: - md5: 2f34a65aee1d1f354e701d166413783a - sha256: b86ab6e91bb0b25a1bc12f3ff2e332f481ff8ad9c835724c86f1adf98b913733 - category: apps - optional: true -- name: nbconvert-core - version: 7.16.3 - manager: conda - platform: win-64 - dependencies: - packaging: '' - beautifulsoup4: '' - defusedxml: '' - bleach: '' - tinycss2: '' - jupyterlab_pygments: '' - python: '>=3.8' - jinja2: '>=3.0' - entrypoints: '>=0.2.2' - markupsafe: '>=2.0' - jupyter_core: '>=4.7' - traitlets: '>=5.0' - pandocfilters: '>=1.4.1' - nbformat: '>=5.1' - pygments: '>=2.4.1' - nbclient: '>=0.5.0' - mistune: '>=2.0.3,<4' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_1.conda - hash: - md5: 2f34a65aee1d1f354e701d166413783a - sha256: b86ab6e91bb0b25a1bc12f3ff2e332f481ff8ad9c835724c86f1adf98b913733 - category: apps - optional: true -- name: nbconvert-pandoc - version: 7.16.3 - manager: conda - platform: linux-64 - dependencies: - nbconvert-core: 7.16.3 - pandoc: '' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_1.conda - hash: - md5: 105151637d2223d6274c5c79d839cc64 - sha256: ec4ce4efc6e4db87ff1d1deca0a0c71a3aea048a52931344db8944d0bc8a05eb - category: apps - optional: true -- name: nbconvert-pandoc - version: 7.16.3 - manager: conda - platform: osx-64 - dependencies: - pandoc: '' - nbconvert-core: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_1.conda - hash: - md5: 105151637d2223d6274c5c79d839cc64 - sha256: ec4ce4efc6e4db87ff1d1deca0a0c71a3aea048a52931344db8944d0bc8a05eb - category: apps - optional: true -- name: nbconvert-pandoc - version: 7.16.3 - manager: conda - platform: win-64 - dependencies: - pandoc: '' - nbconvert-core: 7.16.3 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_1.conda - hash: - md5: 105151637d2223d6274c5c79d839cc64 - sha256: ec4ce4efc6e4db87ff1d1deca0a0c71a3aea048a52931344db8944d0bc8a05eb - category: apps - optional: true -- name: nbformat - version: 5.10.4 - manager: conda - platform: linux-64 - dependencies: - jsonschema: '>=2.6' - jupyter_core: '>=4.12,!=5.0.*' - python: '>=3.8' - python-fastjsonschema: '>=2.15' - traitlets: '>=5.1' - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - hash: - md5: 0b57b5368ab7fc7cdc9e3511fa867214 - sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c - category: apps - optional: true -- name: nbformat - version: 5.10.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1' - jsonschema: '>=2.6' - python-fastjsonschema: '>=2.15' - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - hash: - md5: 0b57b5368ab7fc7cdc9e3511fa867214 - sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c - category: apps - optional: true -- name: nbformat - version: 5.10.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - jupyter_core: '>=4.12,!=5.0.*' - traitlets: '>=5.1' - jsonschema: '>=2.6' - python-fastjsonschema: '>=2.15' - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - hash: - md5: 0b57b5368ab7fc7cdc9e3511fa867214 - sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c - category: apps - optional: true -- name: ncurses - version: 6.4.20240210 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4.20240210-h59595ed_0.conda - hash: - md5: 97da8860a0da5413c7c98a3b3838a645 - sha256: aa0f005b6727aac6507317ed490f0904430584fa8ca722657e7f0fb94741de81 - category: main - optional: false -- name: ncurses - version: 6.4.20240210 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4.20240210-h73e2aa4_0.conda - hash: - md5: 50f28c512e9ad78589e3eab34833f762 - sha256: 50b72acf08acbc4e5332807653e2ca6b26d4326e8af16fad1fd3f2ce9ea55503 - category: main - optional: false -- name: nest-asyncio - version: 1.6.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - hash: - md5: 6598c056f64dc8800d40add25e4e2c34 - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - category: apps - optional: true -- name: nest-asyncio - version: 1.6.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - hash: - md5: 6598c056f64dc8800d40add25e4e2c34 - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - category: apps - optional: true -- name: nest-asyncio - version: 1.6.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - hash: - md5: 6598c056f64dc8800d40add25e4e2c34 - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - category: apps - optional: true -- name: networkx - version: 3.2.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda - hash: - md5: 425fce3b531bed6ec3c74fab3e5f0a1c - sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d - category: core - optional: true -- name: networkx - version: 3.2.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda - hash: - md5: 425fce3b531bed6ec3c74fab3e5f0a1c - sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d - category: core - optional: true -- name: networkx - version: 3.2.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda - hash: - md5: 425fce3b531bed6ec3c74fab3e5f0a1c - sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d - category: core - optional: true -- name: notebook - version: 6.5.6 - manager: conda - platform: linux-64 - dependencies: - argon2-cffi: '' - ipykernel: '' - ipython_genutils: '' - jinja2: '' - jupyter_client: '>=5.3.4,<8' - jupyter_core: '>=4.6.1' - nbclassic: '>=0.4.7' - nbconvert-core: '>=5' - nbformat: '' - nest-asyncio: '>=1.5' - prometheus_client: '' - python: '>=3.7' - pyzmq: '>=17,<25' - send2trash: '>=1.8.0' - terminado: '>=0.8.3' - tornado: '>=6.1' - traitlets: '>=4.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda - hash: - md5: 2e2422cf19f555ef3ddbbeaf2eac7545 - sha256: fe8a12a311f2a9e20209d5aa8336ed638a4004b5b2da3cc2011b1c986356a590 - category: apps - optional: true -- name: notebook - version: 6.5.6 - manager: conda - platform: osx-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - terminado: '>=0.8.3' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert-core: '>=5' - nbclassic: '>=0.4.7' - jupyter_client: '>=5.3.4,<8' - pyzmq: '>=17,<25' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda - hash: - md5: 2e2422cf19f555ef3ddbbeaf2eac7545 - sha256: fe8a12a311f2a9e20209d5aa8336ed638a4004b5b2da3cc2011b1c986356a590 - category: apps - optional: true -- name: notebook - version: 6.5.6 - manager: conda - platform: win-64 - dependencies: - jinja2: '' - nbformat: '' - prometheus_client: '' - ipykernel: '' - ipython_genutils: '' - argon2-cffi: '' - python: '>=3.7' - tornado: '>=6.1' - terminado: '>=0.8.3' - jupyter_core: '>=4.6.1' - traitlets: '>=4.2.1' - nest-asyncio: '>=1.5' - send2trash: '>=1.8.0' - nbconvert-core: '>=5' - nbclassic: '>=0.4.7' - jupyter_client: '>=5.3.4,<8' - pyzmq: '>=17,<25' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda - hash: - md5: 2e2422cf19f555ef3ddbbeaf2eac7545 - sha256: fe8a12a311f2a9e20209d5aa8336ed638a4004b5b2da3cc2011b1c986356a590 - category: apps - optional: true -- name: notebook-shim - version: 0.2.4 - manager: conda - platform: linux-64 - dependencies: - jupyter_server: '>=1.8,<3' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - hash: - md5: 3d85618e2c97ab896b5b5e298d32b5b3 - sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 - category: apps - optional: true -- name: notebook-shim - version: 0.2.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - jupyter_server: '>=1.8,<3' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - hash: - md5: 3d85618e2c97ab896b5b5e298d32b5b3 - sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 - category: apps - optional: true -- name: notebook-shim - version: 0.2.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - jupyter_server: '>=1.8,<3' - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - hash: - md5: 3d85618e2c97ab896b5b5e298d32b5b3 - sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 - category: apps - optional: true -- name: nspr - version: '4.35' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda - hash: - md5: da0ec11a6454ae19bff5b02ed881a2b1 - sha256: 8fadeebb2b7369a4f3b2c039a980d419f65c7b18267ba0c62588f9f894396d0c - category: core - optional: true -- name: nspr - version: '4.35' - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.6' - url: https://conda.anaconda.org/conda-forge/osx-64/nspr-4.35-hea0b92c_0.conda - hash: - md5: a9e56c98d13d8b7ce72bf4357317c29b - sha256: da6e19bd0ff31e219760e647cfe1cc499a8cdfaff305f06c56d495ca062b86de - category: core - optional: true -- name: nss - version: '3.98' - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libgcc-ng: '>=12' - libsqlite: '>=3.45.1,<4.0a0' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/nss-3.98-h1d7d5a4_0.conda - hash: - md5: 54b56c2fdf973656b748e0378900ec13 - sha256: a9bc94d03df48014011cf6caaf447f2ef86a5edf7c70d70002ec4b59f5a4e198 - category: core - optional: true -- name: nss - version: '3.98' - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libsqlite: '>=3.45.1,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/nss-3.98-ha05da47_0.conda - hash: - md5: 79d062716d8e1f77cf806c6fe0f4405c - sha256: 3d99dd976aeb8678e4ac5fcbd574e1de50cdc57b742e22855f294c8047d5c68e - category: core - optional: true -- name: numba - version: 0.59.1 - manager: conda - platform: linux-64 - dependencies: - _openmp_mutex: '>=4.5' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - llvmlite: '>=0.42.0,<0.43.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.1-py39h615d6bd_0.conda - hash: - md5: fee472057c6ac6b635958ddc8e361830 - sha256: 834c51c1cdec76ec1f6e4fad47f4fe3b4811a5ec331c7473105a031a4d279fed - category: core - optional: true -- name: numba - version: 0.59.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - llvm-openmp: '>=18.1.2' - llvmlite: '>=0.42.0,<0.43.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/numba-0.59.1-py39hb7f44fa_0.conda - hash: - md5: c57bb9d15b4f6ab3fb1eb51af975a849 - sha256: c9b2311491db755fcae77fc158c3c606a6fae281c59164728351c99fe9544c6c - category: core - optional: true -- name: numba - version: 0.59.1 - manager: conda - platform: win-64 - dependencies: - llvmlite: '>=0.42.0,<0.43.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/numba-0.59.1-py39h6836801_0.conda - hash: - md5: 3b3fb0424683570f176d94634e4f4f23 - sha256: 230a4d83f669f0cc820106a42bbedd2365aa4cf2a4e494366c5e59476473b674 - category: core - optional: true -- name: numcodecs - version: 0.12.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - msgpack-python: '' - numpy: '>=1.7' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.12.1-py39h3d6467e_0.conda - hash: - md5: b6157a388b7b627e4faef06d8d5535ea - sha256: a2d54a079968f8a56dc893997737414fc2934d55d40184a1a5f70334b795ae55 - category: core - optional: true -- name: numcodecs - version: 0.12.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - msgpack-python: '' - numpy: '>=1.7' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.12.1-py39h110ca85_0.conda - hash: - md5: 9cfa189bab2c27538af76b9d5e47656b - sha256: 67fddd61981a75ca42ea8904063e6005ac5ea26f47a083e2cf99823f53cfd340 - category: core - optional: true -- name: numcodecs - version: 0.12.1 - manager: conda - platform: win-64 - dependencies: - msgpack-python: '' - numpy: '>=1.7' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/numcodecs-0.12.1-py39h99910a6_0.conda - hash: - md5: 1126c053f84f2c120e1d02da59ce09ce - sha256: 721c7386947600219b95fd896a02bfae522807f8f89745a1c6f8df0146dcfd06 - category: core - optional: true -- name: numpy - version: 1.23.5 - manager: conda - platform: linux-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libgcc-ng: '>=12' - liblapack: '>=3.9.0,<4.0a0' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.23.5-py39h3d75532_0.conda - hash: - md5: ea5d332e361eb72c2593cf79559bc0ec - sha256: ab8c088aa07adfed0ec39ca53541b09cdf13538d7f96086f60b784cdb7ee1ff0 - category: main - optional: false -- name: numpy - version: 1.23.5 - manager: conda - platform: osx-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libcxx: '>=14.0.6' - liblapack: '>=3.9.0,<4.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.23.5-py39hdfa1d0c_0.conda - hash: - md5: 162e42439dbb526b1acb08f35546eaa4 - sha256: 069c2c0a37457a6625269a932c19d83f64857149415b9fe37012ddc17e20b09a - category: main - optional: false -- name: numpy - version: 1.23.5 - manager: conda - platform: win-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - liblapack: '>=3.9.0,<4.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/numpy-1.23.5-py39hbccbffa_0.conda - hash: - md5: 2de785b8afd83444f5ebc60161689c0d - sha256: 57ab332114438bf567a46b6befdf3a99dde1c3606121fb99b99fe53750380cca - category: main - optional: false -- name: openjpeg - version: 2.5.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libpng: '>=1.6.43,<1.7.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - hash: - md5: 7f2e286780f072ed750df46dc2631138 - sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 - category: main - optional: false -- name: openjpeg - version: 2.5.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libpng: '>=1.6.43,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - hash: - md5: 05a14cc9d725dd74995927968d6547e3 - sha256: dc9c405119b9b54f8ca5984da27ba498bd848ab4f0f580da6f293009ca5adc13 - category: main - optional: false -- name: openjpeg - version: 2.5.2 - manager: conda - platform: win-64 - dependencies: - libpng: '>=1.6.43,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - hash: - md5: 7e7099ad94ac3b599808950cec30ad4e - sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 - category: main - optional: false -- name: openssl - version: 3.2.1 - manager: conda - platform: linux-64 - dependencies: - ca-certificates: '' - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda - hash: - md5: 9d731343cff6ee2e5a25c4a091bf8e2a - sha256: 2c689444ed19a603be457284cf2115ee728a3fafb7527326e96054dee7cdc1a7 - category: main - optional: false -- name: openssl - version: 3.2.1 - manager: conda - platform: osx-64 - dependencies: - ca-certificates: '' - url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.1-hd75f5a5_1.conda - hash: - md5: 570a6f04802df580be529f3a72d2bbf7 - sha256: 7ae0ac6a1673584a8a380c2ff3d46eca48ed53bc7174c0d4eaa0dd2f247a0984 - category: main - optional: false -- name: openssl - version: 3.2.1 - manager: conda - platform: win-64 - dependencies: - ca-certificates: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.2.1-hcfcfb64_1.conda - hash: - md5: 958e0418e93e50c575bff70fbcaa12d8 - sha256: 61ce4e11c3c26ed4e4d9b7e7e2483121a1741ad0f9c8db0a91a28b6e05182ce6 - category: main - optional: false -- name: packaging - version: '24.0' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - hash: - md5: 248f521b64ce055e7feae3105e7abeb8 - sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a - category: main - optional: false -- name: packaging - version: '24.0' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - hash: - md5: 248f521b64ce055e7feae3105e7abeb8 - sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a - category: main - optional: false -- name: packaging - version: '24.0' - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - hash: - md5: 248f521b64ce055e7feae3105e7abeb8 - sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a - category: main - optional: false -- name: pandas - version: 1.5.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.20.3,<2.0a0' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.8.1' - python_abi: 3.9.* - pytz: '>=2020.1' - url: https://conda.anaconda.org/conda-forge/linux-64/pandas-1.5.3-py39h2ad29b5_1.conda - hash: - md5: 0d89bced73199385857310d3a648757d - sha256: ab03a569f9910c27de04ab10b8f9e5cd3481df5920ca88617aea4a761a5cf1e9 - category: core - optional: true -- name: pandas - version: 1.5.3 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.6' - numpy: '>=1.20.3,<2.0a0' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.8.1' - python_abi: 3.9.* - pytz: '>=2020.1' - url: https://conda.anaconda.org/conda-forge/osx-64/pandas-1.5.3-py39hecff1ad_1.conda - hash: - md5: 507b83376e499ed0cb061fd7a2ddfb0f - sha256: c9da6bf76b17dd265826e5e0b13523f0a84947fef0729130e22add240de77b4e - category: core - optional: true -- name: pandas - version: 1.5.3 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.20.3,<2.0a0' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.8.1' - python_abi: 3.9.* - pytz: '>=2020.1' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pandas-1.5.3-py39h2ba5b7c_1.conda - hash: - md5: 7ff6c4af5b93e394df637ac30d37cd49 - sha256: 308de77c0d1464e719b5e2e82e367d7e1fa137b523e881aa3bca03dfdc6fde8a - category: core - optional: true -- name: pandoc - version: 3.1.13 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.13-ha770c72_0.conda - hash: - md5: 9105ee57dc4869bc5d1876b531202676 - sha256: b3c237a3ccfde48b28a9f9e3d27e6a75718be6f1fba41bd20649f91fdf6b356f - category: apps - optional: true -- name: pandoc - version: 3.1.13 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/pandoc-3.1.13-h694c41f_0.conda - hash: - md5: 569f0ad9ff2d8654e5630d5a3232e6f1 - sha256: 8bc1b6557519c10bab1c90a6394fb4ad5f00ae1bffa7eafc982c481be348a46e - category: apps - optional: true -- name: pandoc - version: 3.1.13 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.1.13-h57928b3_0.conda - hash: - md5: 4caaf4c37a0efc8a06492dba2d871bbb - sha256: 4f586ae8f8d8ad2d51d7e67c1b3d228a6a6af8189dd6ac959438c1e852cdbbaf - category: apps - optional: true -- name: pandocfilters - version: 1.5.0 - manager: conda - platform: linux-64 - dependencies: - python: '!=3.0,!=3.1,!=3.2,!=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 457c2c8c08e54905d6954e79cb5b5db9 - sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f - category: apps - optional: true -- name: pandocfilters - version: 1.5.0 - manager: conda - platform: osx-64 - dependencies: - python: '!=3.0,!=3.1,!=3.2,!=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 457c2c8c08e54905d6954e79cb5b5db9 - sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f - category: apps - optional: true -- name: pandocfilters - version: 1.5.0 - manager: conda - platform: win-64 - dependencies: - python: '!=3.0,!=3.1,!=3.2,!=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 457c2c8c08e54905d6954e79cb5b5db9 - sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f - category: apps - optional: true -- name: parso - version: 0.8.4 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - hash: - md5: 81534b420deb77da8833f2289b8d47ac - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - category: apps - optional: true -- name: parso - version: 0.8.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - hash: - md5: 81534b420deb77da8833f2289b8d47ac - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - category: apps - optional: true -- name: parso - version: 0.8.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - hash: - md5: 81534b420deb77da8833f2289b8d47ac - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - category: apps - optional: true -- name: partd - version: 1.4.1 - manager: conda - platform: linux-64 - dependencies: - locket: '' - python: '>=3.7' - toolz: '' - url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda - hash: - md5: acf4b7c0bcd5fa3b0e05801c4d2accd6 - sha256: b248238da2bb9dfe98e680af911dc7013af86095e3ec8baf08905555632d34c7 - category: core - optional: true -- name: partd - version: 1.4.1 - manager: conda - platform: osx-64 - dependencies: - toolz: '' - locket: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda - hash: - md5: acf4b7c0bcd5fa3b0e05801c4d2accd6 - sha256: b248238da2bb9dfe98e680af911dc7013af86095e3ec8baf08905555632d34c7 - category: core - optional: true -- name: partd - version: 1.4.1 - manager: conda - platform: win-64 - dependencies: - toolz: '' - locket: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda - hash: - md5: acf4b7c0bcd5fa3b0e05801c4d2accd6 - sha256: b248238da2bb9dfe98e680af911dc7013af86095e3ec8baf08905555632d34c7 - category: core - optional: true -- name: pcre2 - version: '10.40' - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libgcc-ng: '>=12' - libzlib: '>=1.2.12,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 - hash: - md5: 69e2c796349cd9b273890bee0febfe1b - sha256: 7a29ec847556eed4faa1646010baae371ced69059a4ade43851367a076d6108a - category: core - optional: true -- name: pcre2 - version: '10.40' - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.12,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.40-h1c4e4bc_0.tar.bz2 - hash: - md5: e0f80c8f3a0352a54eddfe59cd2b25b1 - sha256: 60265b48c96decbea89a19a7bc34be88d9b95d4725fd4dbdae158529c601875a - category: core - optional: true -- name: pcre2 - version: '10.40' - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libzlib: '>=1.2.12,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.40-h17e33f8_0.tar.bz2 - hash: - md5: 2519de0d9620dc2bc7e19caf6867136d - sha256: 5833c63548e4fae91da6d77739eab7dc9bf6542e43f105826b23c01bfdd9cb57 - category: core - optional: true -- name: pexpect - version: 4.9.0 - manager: conda - platform: linux-64 - dependencies: - ptyprocess: '>=0.5' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - hash: - md5: 629f3203c99b32e0988910c93e77f3b6 - sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e - category: apps - optional: true -- name: pexpect - version: 4.9.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - ptyprocess: '>=0.5' - url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - hash: - md5: 629f3203c99b32e0988910c93e77f3b6 - sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e - category: apps - optional: true -- name: pickleshare - version: 0.7.5 - manager: conda - platform: linux-64 - dependencies: - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - hash: - md5: 415f0ebb6198cc2801c73438a9fb5761 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - category: apps - optional: true -- name: pickleshare - version: 0.7.5 - manager: conda - platform: osx-64 - dependencies: - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - hash: - md5: 415f0ebb6198cc2801c73438a9fb5761 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - category: apps - optional: true -- name: pickleshare - version: 0.7.5 - manager: conda - platform: win-64 - dependencies: - python: '>=3' - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - hash: - md5: 415f0ebb6198cc2801c73438a9fb5761 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - category: apps - optional: true -- name: pillow - version: 10.3.0 - manager: conda - platform: linux-64 - dependencies: - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.16,<3.0a0' - libgcc-ng: '>=12' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.2,<3.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tk: '>=8.6.13,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py39h90c7501_0.conda - hash: - md5: 1e3b6af9592be71ce19f0a6aae05d97b - sha256: 1fa684d3f431f98a3e10f972025fc63fc81882e775059b358f5ff58cc46a951d - category: main - optional: false -- name: pillow - version: 10.3.0 - manager: conda - platform: osx-64 - dependencies: - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.16,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.2,<3.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tk: '>=8.6.13,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.3.0-py39h9dabb2a_0.conda - hash: - md5: e385068c9511542eff20422f7e799064 - sha256: b2478cf4fc318a1be5b3287bf426b34d0b2cc2b0cb7a435e6ad7f9637c8e5f53 - category: main - optional: false -- name: pillow - version: 10.3.0 - manager: conda - platform: win-64 - dependencies: - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.16,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.2,<3.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tk: '>=8.6.13,<8.7.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.3.0-py39h9ee4981_0.conda - hash: - md5: 6d69d57c41867acc162ef0205a8efaef - sha256: 06e75a5a56d104dee181ef9e0dd78fd0998ee7f9cf6a1ee56308ecf035236404 - category: main - optional: false -- name: pip - version: '24.0' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - setuptools: '' - wheel: '' - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - hash: - md5: f586ac1e56c8638b64f9c8122a7b8a67 - sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: main - optional: false -- name: pip - version: '24.0' - manager: conda - platform: osx-64 - dependencies: - setuptools: '' - wheel: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - hash: - md5: f586ac1e56c8638b64f9c8122a7b8a67 - sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: main - optional: false -- name: pip - version: '24.0' - manager: conda - platform: win-64 - dependencies: - setuptools: '' - wheel: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - hash: - md5: f586ac1e56c8638b64f9c8122a7b8a67 - sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: main - optional: false -- name: pixman - version: 0.43.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda - hash: - md5: 71004cbf7924e19c02746ccde9fd7123 - sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e - category: core - optional: true -- name: pixman - version: 0.43.4 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/pixman-0.43.4-h73e2aa4_0.conda - hash: - md5: cb134c1e03fd32f4e6bea3f6de2614fd - sha256: 3ab44e12e566c67a6e9fd831f557ab195456aa996b8dd9af19787ca80caa5cd1 - category: core - optional: true -- name: pixman - version: 0.43.4 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pixman-0.43.4-h63175ca_0.conda - hash: - md5: b98135614135d5f458b75ab9ebb9558c - sha256: 51de4d7fb41597b06d60f1b82e269dafcb55e994e08fdcca8e4d6f7d42bedd07 - category: core - optional: true -- name: pkgutil-resolve-name - version: 1.3.10 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - hash: - md5: 405678b942f2481cecdb3e010f4925d9 - sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a - category: apps - optional: true -- name: pkgutil-resolve-name - version: 1.3.10 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - hash: - md5: 405678b942f2481cecdb3e010f4925d9 - sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a - category: apps - optional: true -- name: pkgutil-resolve-name - version: 1.3.10 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - hash: - md5: 405678b942f2481cecdb3e010f4925d9 - sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a - category: apps - optional: true -- name: platformdirs - version: 4.2.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - hash: - md5: a0bc3eec34b0fab84be6b2da94e98e20 - sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3 - category: main - optional: false -- name: platformdirs - version: 4.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - hash: - md5: a0bc3eec34b0fab84be6b2da94e98e20 - sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3 - category: main - optional: false -- name: platformdirs - version: 4.2.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - hash: - md5: a0bc3eec34b0fab84be6b2da94e98e20 - sha256: 2ebfb971236ab825dd79dd6086ea742a9901008ffb9c6222c1f2b5172a8039d3 - category: main - optional: false -- name: plotly - version: 5.13.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - tenacity: '>=6.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.13.1-pyhd8ed1ab_0.conda - hash: - md5: 761501a3de96c5855d840f4287a65e77 - sha256: 3965443356a6654f1852d6b948bdb72d9703360d0c3e23595772833081ba6dee - category: apps - optional: true -- name: plotly - version: 5.13.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - tenacity: '>=6.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.13.1-pyhd8ed1ab_0.conda - hash: - md5: 761501a3de96c5855d840f4287a65e77 - sha256: 3965443356a6654f1852d6b948bdb72d9703360d0c3e23595772833081ba6dee - category: apps - optional: true -- name: plotly - version: 5.13.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - tenacity: '>=6.2.0' - url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.13.1-pyhd8ed1ab_0.conda - hash: - md5: 761501a3de96c5855d840f4287a65e77 - sha256: 3965443356a6654f1852d6b948bdb72d9703360d0c3e23595772833081ba6dee - category: apps - optional: true -- name: pluggy - version: 1.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: 139e9feb65187e916162917bb2484976 - sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0 - category: dev - optional: true -- name: pluggy - version: 1.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: 139e9feb65187e916162917bb2484976 - sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0 - category: dev - optional: true -- name: pluggy - version: 1.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - hash: - md5: 139e9feb65187e916162917bb2484976 - sha256: 6edfd2c41938ea772096c674809bfcf2ebb9bef7e82de6c7ea0b966b86bfb4d0 - category: dev - optional: true -- name: ply - version: '3.11' - manager: conda - platform: linux-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda - hash: - md5: 18c6deb6f9602e32446398203c8f0e91 - sha256: d8faaf4dcc13caed560fa32956523b35928a70499a2d08c51320947d637e3a41 - category: apps - optional: true -- name: ply - version: '3.11' - manager: conda - platform: osx-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda - hash: - md5: 18c6deb6f9602e32446398203c8f0e91 - sha256: d8faaf4dcc13caed560fa32956523b35928a70499a2d08c51320947d637e3a41 - category: apps - optional: true -- name: ply - version: '3.11' - manager: conda - platform: win-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda - hash: - md5: 18c6deb6f9602e32446398203c8f0e91 - sha256: d8faaf4dcc13caed560fa32956523b35928a70499a2d08c51320947d637e3a41 - category: apps - optional: true -- name: pooch - version: 1.8.1 - manager: conda - platform: linux-64 - dependencies: - packaging: '>=20.0' - platformdirs: '>=2.5.0' - python: '>=3.7' - requests: '>=2.19.0' - url: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.1-pyhd8ed1ab_0.conda - hash: - md5: d15917f33140f8d2ac9ca44db7ec8a25 - sha256: 63f95e626754f5e05e74f39c0f4866aa8bd40b933eef336077978d365d66ca7b - category: main - optional: false -- name: pooch - version: 1.8.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - packaging: '>=20.0' - requests: '>=2.19.0' - platformdirs: '>=2.5.0' - url: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.1-pyhd8ed1ab_0.conda - hash: - md5: d15917f33140f8d2ac9ca44db7ec8a25 - sha256: 63f95e626754f5e05e74f39c0f4866aa8bd40b933eef336077978d365d66ca7b - category: main - optional: false -- name: pooch - version: 1.8.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - packaging: '>=20.0' - requests: '>=2.19.0' - platformdirs: '>=2.5.0' - url: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.1-pyhd8ed1ab_0.conda - hash: - md5: d15917f33140f8d2ac9ca44db7ec8a25 - sha256: 63f95e626754f5e05e74f39c0f4866aa8bd40b933eef336077978d365d66ca7b - category: main - optional: false -- name: poppler - version: 23.10.0 - manager: conda - platform: linux-64 - dependencies: - cairo: '>=1.18.0,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.15,<3.0a0' - libcurl: '>=8.4.0,<9.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - openjpeg: '>=2.5.0,<3.0a0' - poppler-data: '' - url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.10.0-h590f24d_0.conda - hash: - md5: 06b4a80e2cc3974e55f83e2115e2e90a - sha256: e1d9245454e0b63077f12b6c331f1d2dc7bd3409369e7fd1f38a29e47b76b64a - category: core - optional: true -- name: poppler - version: 23.10.0 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - cairo: '>=1.18.0,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - gettext: '>=0.21.1,<1.0a0' - lcms2: '>=2.15,<3.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - openjpeg: '>=2.5.0,<3.0a0' - poppler-data: '' - url: https://conda.anaconda.org/conda-forge/osx-64/poppler-23.10.0-hdd5a5e8_0.conda - hash: - md5: 3ba0ca934cf0ce30de692abdc7807419 - sha256: 604803db4148415d2096f9a2cbc29efae2755b9a65715875aeb620d6f2bb03b5 - category: core - optional: true -- name: poppler - version: 23.10.0 - manager: conda - platform: win-64 - dependencies: - cairo: '>=1.18.0,<2.0a0' - freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.15,<3.0a0' - libcurl: '>=8.4.0,<9.0a0' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openjpeg: '>=2.5.0,<3.0a0' - poppler-data: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/poppler-23.10.0-hc2f3c52_0.conda - hash: - md5: 3164446cb6dd3fa81b09307cde29778b - sha256: e8ea2bc81cfc913fc2ed641353d7262b0344fa0bff1e1b5a6cca5144c1573ae5 - category: core - optional: true -- name: poppler-data - version: 0.4.12 - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda - hash: - md5: d8d7293c5b37f39b2ac32940621c6592 - sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf - category: core - optional: true -- name: poppler-data - version: 0.4.12 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda - hash: - md5: d8d7293c5b37f39b2ac32940621c6592 - sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf - category: core - optional: true -- name: poppler-data - version: 0.4.12 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda - hash: - md5: d8d7293c5b37f39b2ac32940621c6592 - sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf - category: core - optional: true -- name: postgresql - version: '16.2' - manager: conda - platform: linux-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libgcc-ng: '>=12' - libpq: '16.2' - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - readline: '>=8.2,<9.0a0' - tzcode: '' - tzdata: '' - url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.2-h82ecc9d_1.conda - hash: - md5: 7a5806219d0f77ce8393375d040df065 - sha256: 7fc52e69478973f173f055ade6c4087564362be9172c294b493a79671fef9a7e - category: core - optional: true -- name: postgresql - version: '16.2' - manager: conda - platform: osx-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libpq: '16.2' - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - readline: '>=8.2,<9.0a0' - tzcode: '' - tzdata: '' - url: https://conda.anaconda.org/conda-forge/osx-64/postgresql-16.2-h06f2bd8_1.conda - hash: - md5: fe36c4a9254176dde4ca696016c50aa8 - sha256: 2a96af8385c51e97950ed00d802186069bf4933b3be111956508ab6be158d463 - category: core - optional: true -- name: postgresql - version: '16.2' - manager: conda - platform: win-64 - dependencies: - krb5: '>=1.21.2,<1.22.0a0' - libpq: '16.2' - libxml2: '>=2.12.6,<3.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/postgresql-16.2-h94c9ec1_1.conda - hash: - md5: c76ba206e82b0d0dbfc9d6d48b80053b - sha256: 35d632652bc965e5f7b6b4f9f8a36c6c399d1defc2e4f68841f42d5b9a51ee70 - category: core - optional: true -- name: proj - version: 9.3.0 - manager: conda - platform: linux-64 - dependencies: - libcurl: '>=8.4.0,<9.0a0' - libgcc-ng: '>=12' - libsqlite: '>=3.43.2,<4.0a0' - libstdcxx-ng: '>=12' - libtiff: '>=4.6.0,<4.7.0a0' - sqlite: '' - url: https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda - hash: - md5: b5e57a0c643da391bef850922963eece - sha256: 252f6c31101719e3d524679e69ae81e6323b93b143e1360169bf50e89386bf24 - category: core - optional: true -- name: proj - version: 9.3.0 - manager: conda - platform: osx-64 - dependencies: - libcurl: '>=8.4.0,<9.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - sqlite: '' - url: https://conda.anaconda.org/conda-forge/osx-64/proj-9.3.0-h23b96cc_2.conda - hash: - md5: 63e960e8c8020936c0b73f23bfed16dd - sha256: e1b0f351103555e0d8ab641aeba4076173c3b7a2f8ed738b43ec66709d51be15 - category: core - optional: true -- name: proj - version: 9.3.0 - manager: conda - platform: win-64 - dependencies: - libcurl: '>=8.4.0,<9.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libtiff: '>=4.6.0,<4.7.0a0' - sqlite: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/proj-9.3.0-he13c7e8_2.conda - hash: - md5: 4e6d2a06874a1a6cd66e842d29bcd373 - sha256: 67a5d032a0343dc8182ef50221d9ee47edb50d34cd94813e65111901cbbbc6d3 - category: core - optional: true -- name: prometheus_client - version: 0.20.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda - hash: - md5: 9a19b94034dd3abb2b348c8b93388035 - sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 - category: apps - optional: true -- name: prometheus_client - version: 0.20.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda - hash: - md5: 9a19b94034dd3abb2b348c8b93388035 - sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 - category: apps - optional: true -- name: prometheus_client - version: 0.20.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda - hash: - md5: 9a19b94034dd3abb2b348c8b93388035 - sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 - category: apps - optional: true -- name: prompt-toolkit - version: 3.0.42 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - wcwidth: '' - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda - hash: - md5: 0bf64bf10eee21f46ac83c161917fa86 - sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 - category: apps - optional: true -- name: prompt-toolkit - version: 3.0.42 - manager: conda - platform: osx-64 - dependencies: - wcwidth: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda - hash: - md5: 0bf64bf10eee21f46ac83c161917fa86 - sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 - category: apps - optional: true -- name: prompt-toolkit - version: 3.0.42 - manager: conda - platform: win-64 - dependencies: - wcwidth: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda - hash: - md5: 0bf64bf10eee21f46ac83c161917fa86 - sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 - category: apps - optional: true -- name: properties - version: 0.6.1 - manager: conda - platform: linux-64 - dependencies: - numpy: '>=1.7' - python: '' - six: '' - vectormath: '>=0.1.4' - url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 - hash: - md5: 62052fa8409d12536ff149e25b0e9905 - sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 - category: main - optional: false -- name: properties - version: 0.6.1 - manager: conda - platform: osx-64 - dependencies: - python: '' - six: '' - numpy: '>=1.7' - vectormath: '>=0.1.4' - url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 - hash: - md5: 62052fa8409d12536ff149e25b0e9905 - sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 - category: main - optional: false -- name: properties - version: 0.6.1 - manager: conda - platform: win-64 - dependencies: - python: '' - six: '' - numpy: '>=1.7' - vectormath: '>=0.1.4' - url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 - hash: - md5: 62052fa8409d12536ff149e25b0e9905 - sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 - category: main - optional: false -- name: psutil - version: 5.9.8 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py39hd1e30aa_0.conda - hash: - md5: ec86403fde8793ac1c36f8afa3d15902 - sha256: d0fa2b24b7245483208014e3567ef3aeeb3242b77ba1002c46923a60a3a05c3b - category: core - optional: true -- name: psutil - version: 5.9.8 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.8-py39ha09f3b3_0.conda - hash: - md5: e8737c3c0c404559b0e2c8a9eb91e977 - sha256: 944c585e1496e22c6457a202127a49f93c81f9b02df46f75200c0fd315a00abb - category: core - optional: true -- name: psutil - version: 5.9.8 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.8-py39ha55989b_0.conda - hash: - md5: 59cff26058f788059a310208dde2e01d - sha256: 41fa383a03bfac0bea4e3a674ecdddd5cf8c403527e7581e258ec35c6e3647a6 - category: core - optional: true -- name: pthread-stubs - version: '0.4' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=7.5.0' - url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 - hash: - md5: 22dad4df6e8630e8dff2428f6f6a7036 - sha256: 67c84822f87b641d89df09758da498b2d4558d47b920fd1d3fe6d3a871e000ff - category: main - optional: false -- name: pthread-stubs - version: '0.4' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-hc929b4f_1001.tar.bz2 - hash: - md5: addd19059de62181cd11ae8f4ef26084 - sha256: 6e3900bb241bcdec513d4e7180fe9a19186c1a38f0b4080ed619d26014222c53 - category: main - optional: false -- name: pthread-stubs - version: '0.4' - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - hash: - md5: a1f820480193ea83582b13249a7e7bd9 - sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a - category: main - optional: false -- name: pthreads-win32 - version: 2.9.1 - manager: conda - platform: win-64 - dependencies: - vc: 14.* - url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - hash: - md5: e2da8758d7d51ff6aa78a14dfb9dbed4 - sha256: 576a228630a72f25d255a5e345e5f10878e153221a96560f2498040cd6f54005 - category: main - optional: false -- name: ptyprocess - version: 0.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - hash: - md5: 359eeb6536da0e687af562ed265ec263 - sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a - category: apps - optional: true -- name: ptyprocess - version: 0.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - hash: - md5: 359eeb6536da0e687af562ed265ec263 - sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a - category: apps - optional: true -- name: pulseaudio-client - version: '16.1' - manager: conda - platform: linux-64 - dependencies: - dbus: '>=1.13.6,<2.0a0' - libgcc-ng: '>=12' - libglib: '>=2.76.4,<3.0a0' - libsndfile: '>=1.2.2,<1.3.0a0' - libsystemd0: '>=254' - url: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda - hash: - md5: ac902ff3c1c6d750dd0dfc93a974ab74 - sha256: 9981c70893d95c8cac02e7edd1a9af87f2c8745b772d529f08b7f9dafbe98606 - category: apps - optional: true -- name: pure_eval - version: 0.2.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6784285c7e55cb7212efabc79e4c2883 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - category: apps - optional: true -- name: pure_eval - version: 0.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6784285c7e55cb7212efabc79e4c2883 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - category: apps - optional: true -- name: pure_eval - version: 0.2.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6784285c7e55cb7212efabc79e4c2883 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - category: apps - optional: true -- name: pycparser - version: '2.22' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - hash: - md5: 844d9eb3b43095b031874477f7d70088 - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - category: apps - optional: true -- name: pycparser - version: '2.22' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - hash: - md5: 844d9eb3b43095b031874477f7d70088 - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - category: apps - optional: true -- name: pycparser - version: '2.22' - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - hash: - md5: 844d9eb3b43095b031874477f7d70088 - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - category: apps - optional: true -- name: pydiso - version: 0.0.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - mkl: '>=2022.1.0,<2023.0a0' - numpy: '>=1.20.3,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=0.13' - url: https://conda.anaconda.org/conda-forge/linux-64/pydiso-0.0.3-py39h051f8f4_4.tar.bz2 - hash: - md5: e39f58c96cb2d15abf86c73b73c280a8 - sha256: e29addcede74fc759ef484900f2796a2cec5accca93a184317d26676dea8c410 - category: core - optional: true -- name: pydiso - version: 0.0.3 - manager: conda - platform: osx-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - numpy: '>=1.20.3,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=0.13' - url: https://conda.anaconda.org/conda-forge/osx-64/pydiso-0.0.3-py39h29261d1_4.tar.bz2 - hash: - md5: 28ce90bf543e6d4efbaf17f7f4829772 - sha256: 354968cf58289350c3ca3ac23b111b308b3370ff8512cffd8d32db6fb5b2595b - category: core - optional: true -- name: pydiso - version: 0.0.3 - manager: conda - platform: win-64 - dependencies: - mkl: '>=2022.1.0,<2023.0a0' - numpy: '>=1.20.3,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '>=0.13' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pydiso-0.0.3-py39h9be9993_4.tar.bz2 - hash: - md5: d33169c9110fd4e697b92fb3373df4bd - sha256: f293370dcb860a3643c6348cef18206d3b9667238ec2f9a2e968961477b32797 - category: core - optional: true -- name: pygments - version: 2.17.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - hash: - md5: 140a7f159396547e9799aa98f9f0742e - sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 - category: apps - optional: true -- name: pygments - version: 2.17.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - hash: - md5: 140a7f159396547e9799aa98f9f0742e - sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 - category: apps - optional: true -- name: pygments - version: 2.17.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - hash: - md5: 140a7f159396547e9799aa98f9f0742e - sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 - category: apps - optional: true -- name: pylint - version: 3.1.0 - manager: conda - platform: linux-64 - dependencies: - astroid: '>=3.1.0,<3.2.0-dev0' - colorama: '>=0.4.5' - dill: '>=0.3.7' - isort: '>=4.2.5,<6,!=5.13.0' - mccabe: '>=0.6,<0.8' - platformdirs: '>=2.2.0' - python: '>=3.8.0' - tomli: '>=1.1.0' - tomlkit: '>=0.10.1' - typing_extensions: '>=3.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3dbc17a1706ec9076c9617136f43762a - sha256: 8b1fd3595f7a29c2aa3a4deb72f6fd5b920904465defc52bf2b73853d8156940 - category: dev - optional: true -- name: pylint - version: 3.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8.0' - tomli: '>=1.1.0' - typing_extensions: '>=3.10.0' - tomlkit: '>=0.10.1' - platformdirs: '>=2.2.0' - colorama: '>=0.4.5' - mccabe: '>=0.6,<0.8' - dill: '>=0.3.7' - isort: '>=4.2.5,<6,!=5.13.0' - astroid: '>=3.1.0,<3.2.0-dev0' - url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3dbc17a1706ec9076c9617136f43762a - sha256: 8b1fd3595f7a29c2aa3a4deb72f6fd5b920904465defc52bf2b73853d8156940 - category: dev - optional: true -- name: pylint - version: 3.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8.0' - tomli: '>=1.1.0' - typing_extensions: '>=3.10.0' - tomlkit: '>=0.10.1' - platformdirs: '>=2.2.0' - colorama: '>=0.4.5' - mccabe: '>=0.6,<0.8' - dill: '>=0.3.7' - isort: '>=4.2.5,<6,!=5.13.0' - astroid: '>=3.1.0,<3.2.0-dev0' - url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.1.0-pyhd8ed1ab_0.conda - hash: - md5: 3dbc17a1706ec9076c9617136f43762a - sha256: 8b1fd3595f7a29c2aa3a4deb72f6fd5b920904465defc52bf2b73853d8156940 - category: dev - optional: true -- name: pymatsolver - version: 0.2.0 - manager: conda - platform: linux-64 - dependencies: - pydiso: '' - pymatsolver-base: 0.2.0 - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-0.2.0-ha770c72_3.conda - hash: - md5: 71c5698e2f1f19b16164bae528b143ca - sha256: 8d16b3c276ffd5f35890bba6539f3f526cc93061b0320eee2c8d488e7d5089de - category: core - optional: true -- name: pymatsolver - version: 0.2.0 - manager: conda - platform: osx-64 - dependencies: - pydiso: '' - pymatsolver-base: 0.2.0 - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-0.2.0-ha770c72_3.conda - hash: - md5: 71c5698e2f1f19b16164bae528b143ca - sha256: 8d16b3c276ffd5f35890bba6539f3f526cc93061b0320eee2c8d488e7d5089de - category: core - optional: true -- name: pymatsolver - version: 0.2.0 - manager: conda - platform: win-64 - dependencies: - pydiso: '' - pymatsolver-base: 0.2.0 - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-0.2.0-ha770c72_3.conda - hash: - md5: 71c5698e2f1f19b16164bae528b143ca - sha256: 8d16b3c276ffd5f35890bba6539f3f526cc93061b0320eee2c8d488e7d5089de - category: core - optional: true -- name: pymatsolver-base - version: 0.2.0 - manager: conda - platform: linux-64 - dependencies: - numpy: '' - python: '' - scipy: '' - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda - hash: - md5: d3843c2374465a0d1a0eb15cc87669c4 - sha256: d03fd3f24f87d7c07675b15129b6e481485500304e03aae35eb93224e2f757b1 - category: core - optional: true -- name: pymatsolver-base - version: 0.2.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - numpy: '' - scipy: '' - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda - hash: - md5: d3843c2374465a0d1a0eb15cc87669c4 - sha256: d03fd3f24f87d7c07675b15129b6e481485500304e03aae35eb93224e2f757b1 - category: core - optional: true -- name: pymatsolver-base - version: 0.2.0 - manager: conda - platform: win-64 - dependencies: - python: '' - numpy: '' - scipy: '' - url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda - hash: - md5: d3843c2374465a0d1a0eb15cc87669c4 - sha256: d03fd3f24f87d7c07675b15129b6e481485500304e03aae35eb93224e2f757b1 - category: core - optional: true -- name: pyobjc-core - version: '10.2' - manager: conda - platform: osx-64 - dependencies: - libffi: '>=3.4,<4.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - setuptools: '' - url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.2-py39h8602b6b_0.conda - hash: - md5: 37b6b21536780b9665b9c84908318d7a - sha256: 6517faf0ad9a22763655b682dc41d53b08c388bcb67c77d1654158baf609ae3f - category: apps - optional: true -- name: pyobjc-framework-cocoa - version: '10.2' - manager: conda - platform: osx-64 - dependencies: - libffi: '>=3.4,<4.0a0' - pyobjc-core: 10.2.* - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-10.2-py39h8602b6b_0.conda - hash: - md5: 271f368ad661bf3bba2d5740ac8ee24c - sha256: e69322b541ceca63691ee40d5745642b90b3f280a64b878e9c67259b551d3223 - category: apps - optional: true -- name: pyparsing - version: 3.1.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - hash: - md5: b9a4dacf97241704529131a0dfc0494f - sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b - category: core - optional: true -- name: pyparsing - version: 3.1.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - hash: - md5: b9a4dacf97241704529131a0dfc0494f - sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b - category: core - optional: true -- name: pyparsing - version: 3.1.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - hash: - md5: b9a4dacf97241704529131a0dfc0494f - sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b - category: core - optional: true -- name: pypng - version: 0.20220715.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pypng-0.20220715.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: cf96bf87b69d217758af7be717c40236 - sha256: 9bd7710a2b361b4956a3c1d94971bce3239b1078dec1e94555bf66179a1d7f11 - category: main - optional: false -- name: pypng - version: 0.20220715.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pypng-0.20220715.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: cf96bf87b69d217758af7be717c40236 - sha256: 9bd7710a2b361b4956a3c1d94971bce3239b1078dec1e94555bf66179a1d7f11 - category: main - optional: false -- name: pypng - version: 0.20220715.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/pypng-0.20220715.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: cf96bf87b69d217758af7be717c40236 - sha256: 9bd7710a2b361b4956a3c1d94971bce3239b1078dec1e94555bf66179a1d7f11 - category: main - optional: false -- name: pyqt - version: 5.15.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - pyqt5-sip: 12.12.2 - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_5.conda - hash: - md5: e1f148e57d071b09187719df86f513c1 - sha256: a0d0662c73b343931dbd66d9c25ec74f40115512568a87bf4d01af8d1a8ddf1c - category: apps - optional: true -- name: pyqt - version: 5.15.9 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - pyqt5-sip: 12.12.2 - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyqt-5.15.9-py39h3dce684_5.conda - hash: - md5: ecc396e7a7badba032c3f9dd30c40e9c - sha256: 58e3f096357bc899fa446bc9ff28cf04feaa3cb7b394b2fcf7e4facce442ff72 - category: apps - optional: true -- name: pyqt - version: 5.15.9 - manager: conda - platform: win-64 - dependencies: - pyqt5-sip: 12.12.2 - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyqt-5.15.9-py39hb77abff_5.conda - hash: - md5: 5ed899124a51958336371ff01482b8fd - sha256: 9aee5ab6f2c5a71f2eb399e5fec175f79498648ff8e4be6f815cf0ca803201c4 - category: apps - optional: true -- name: pyqt5-sip - version: 12.12.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - packaging: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - sip: '' - toml: '' - url: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_5.conda - hash: - md5: 93aff412f3e49fdb43361c0215cbd72d - sha256: 86efec5e57111794e039bb14dfce23d9df6ed8df139ab1404086140eba6d4d7c - category: apps - optional: true -- name: pyqt5-sip - version: 12.12.2 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - packaging: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - sip: '' - toml: '' - url: https://conda.anaconda.org/conda-forge/osx-64/pyqt5-sip-12.12.2-py39hb11a7c1_5.conda - hash: - md5: 10288bdb5ec36c5207d79deee15c6be5 - sha256: ab6ffa5e1755f72cddd9ff45bf681ec710b914705258d6462f606ecf873ff435 - category: apps - optional: true -- name: pyqt5-sip - version: 12.12.2 - manager: conda - platform: win-64 - dependencies: - packaging: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - sip: '' - toml: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyqt5-sip-12.12.2-py39h99910a6_5.conda - hash: - md5: dffbcea794c524c471772a5f697c2aea - sha256: c352489404b993ee0de4a068fd766229dd759a8d7fbc825bf8820073c2ff12d7 - category: apps - optional: true -- name: pyqtwebengine - version: 5.15.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - pyqt: '>=5.15.9,<5.16.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - qt-webengine: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyqtwebengine-5.15.9-py39h071a739_5.conda - hash: - md5: a23ce377b264d72a813900e6fb91cb38 - sha256: 0029f43f1e24cc196d5b0b06cd8ceab007ff0a4aa18aea9d06a8431f25ac923f - category: apps - optional: true -- name: pyqtwebengine - version: 5.15.9 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=15.0.7' - pyqt: '>=5.15.9,<5.16.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - qt-webengine: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyqtwebengine-5.15.9-py39h6ed9014_5.conda - hash: - md5: 23776f4a81bacc0b2c06854be396fa69 - sha256: 9bc6553a0dc32c6dd070ead8b1f59461c2aaffee4173a8d8148031248244fbec - category: apps - optional: true -- name: pyqtwebengine - version: 5.15.9 - manager: conda - platform: win-64 - dependencies: - pyqt: '>=5.15.9,<5.16.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - qt-webengine: '>=5.15.8,<5.16.0a0' - sip: '>=6.7.11,<6.8.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyqtwebengine-5.15.9-py39h2f4a3f1_5.conda - hash: - md5: 7ebc8bbd58dbdc1fbe9803d2237d0239 - sha256: fe8999bbc2141a9703100db5b200df874b96241085b54e9f76f2f029a2863412 - category: apps - optional: true -- name: pyside2 - version: 5.15.8 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libclang13: '>=15.0.7' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libxml2: '>=2.12.3,<3.0.0a0' - libxslt: '>=1.1.39,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - xcb-util: '>=0.4.0,<0.5.0a0' - xcb-util-image: '>=0.4.0,<0.5.0a0' - xcb-util-keysyms: '>=0.4.0,<0.5.0a0' - xcb-util-renderutil: '>=0.3.9,<0.4.0a0' - xcb-util-wm: '>=0.4.1,<0.5.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - xorg-libsm: '>=1.2.4,<2.0a0' - xorg-libx11: '>=1.8.7,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyside2-5.15.8-py39h79e5a0c_4.conda - hash: - md5: a213260bb57c16f2783993e9d305a1d3 - sha256: 32617346fd7e329fbe9af0446cef583303bee0921c10bbc65f4555d2a56cb0ca - category: apps - optional: true -- name: pyside2 - version: 5.15.8 - manager: conda - platform: osx-64 - dependencies: - libclang13: '>=15.0.7' - libcxx: '>=14' - libxml2: '>=2.12.3,<3.0.0a0' - libxslt: '>=1.1.39,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyside2-5.15.8-py39hfaf76cb_4.conda - hash: - md5: 61678943469f21183fb434e6b4d49c8f - sha256: 0f86fe2034c99fc076a3fe40e7deeefbec4ebaac65f4a7a798e172245eec87da - category: apps - optional: true -- name: pyside2 - version: 5.15.8 - manager: conda - platform: win-64 - dependencies: - libclang13: '>=15.0.7' - libxml2: '>=2.12.3,<3.0.0a0' - libxslt: '>=1.1.39,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - qt-main: '>=5.15.8,<5.16.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pyside2-5.15.8-py39hc5a181a_4.conda - hash: - md5: a7286f6de7e63ede7c3e9441829598b8 - sha256: 7fdbbdc3a9c46aeff499563ae18bd0dc559e98e272c36d3b4958f445b63c496c - category: apps - optional: true -- name: pysocks - version: 1.7.1 - manager: conda - platform: linux-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - hash: - md5: 2a7de29fb590ca14b5243c4c812c8025 - sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b - category: main - optional: false -- name: pysocks - version: 1.7.1 - manager: conda - platform: osx-64 - dependencies: - __unix: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - hash: - md5: 2a7de29fb590ca14b5243c4c812c8025 - sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b - category: main - optional: false -- name: pysocks - version: 1.7.1 - manager: conda - platform: win-64 - dependencies: - __win: '' - win_inet_pton: '' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 - hash: - md5: 56cd9fe388baac0e90c7149cfac95b60 - sha256: b3a612bc887f3dd0fb7c4199ad8e342bd148cf69a9b74fd9468a18cf2bef07b7 - category: main - optional: false -- name: pytest - version: 8.1.1 - manager: conda - platform: linux-64 - dependencies: - colorama: '' - exceptiongroup: '>=1.0.0rc8' - iniconfig: '' - packaging: '' - pluggy: <2.0,>=1.4 - python: '>=3.8' - tomli: '>=1' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - hash: - md5: 94ff09cdedcb7b17e9cd5097ee2cfcff - sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 - category: dev - optional: true -- name: pytest - version: 8.1.1 - manager: conda - platform: osx-64 - dependencies: - packaging: '' - colorama: '' - iniconfig: '' - python: '>=3.8' - exceptiongroup: '>=1.0.0rc8' - tomli: '>=1' - pluggy: <2.0,>=1.4 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - hash: - md5: 94ff09cdedcb7b17e9cd5097ee2cfcff - sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 - category: dev - optional: true -- name: pytest - version: 8.1.1 - manager: conda - platform: win-64 - dependencies: - packaging: '' - colorama: '' - iniconfig: '' - python: '>=3.8' - exceptiongroup: '>=1.0.0rc8' - tomli: '>=1' - pluggy: <2.0,>=1.4 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - hash: - md5: 94ff09cdedcb7b17e9cd5097ee2cfcff - sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 - category: dev - optional: true -- name: pytest-cov - version: 5.0.0 - manager: conda - platform: linux-64 - dependencies: - coverage: '>=5.2.1' - pytest: '>=4.6' - python: '>=3.8' - toml: '' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - hash: - md5: c54c0107057d67ddf077751339ec2c63 - sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c - category: dev - optional: true -- name: pytest-cov - version: 5.0.0 - manager: conda - platform: osx-64 - dependencies: - toml: '' - python: '>=3.8' - pytest: '>=4.6' - coverage: '>=5.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - hash: - md5: c54c0107057d67ddf077751339ec2c63 - sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c - category: dev - optional: true -- name: pytest-cov - version: 5.0.0 - manager: conda - platform: win-64 - dependencies: - toml: '' - python: '>=3.8' - pytest: '>=4.6' - coverage: '>=5.2.1' - url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - hash: - md5: c54c0107057d67ddf077751339ec2c63 - sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c - category: dev - optional: true -- name: python - version: 3.9.19 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - ld_impl_linux-64: '>=2.36.1' - libffi: '>=3.4,<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.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' - pip: '' - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.9.19-h0755675_0_cpython.conda - hash: - md5: d9ee3647fbd9e8595b8df759b2bbefb8 - sha256: b9253ca9ca5427e6da4b1d43353a110e0f2edfab9c951afb4bf01cbae2825b31 - category: main - optional: false -- name: python - version: 3.9.19 - manager: conda - platform: osx-64 - dependencies: - bzip2: '>=1.0.8,<2.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' - pip: '' - url: https://conda.anaconda.org/conda-forge/osx-64/python-3.9.19-h7a9c478_0_cpython.conda - hash: - md5: 7d53d366acd9dbfb498c69326ccb520a - sha256: 58b76be84683bc03112b3ed7e377e99af24844ebf7d7568f6466a2dae7a887fe - category: main - optional: false -- name: python - version: 3.9.19 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libffi: '>=3.4,<4.0a0' - libsqlite: '>=3.45.2,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.2.1,<4.0a0' - tk: '>=8.6.13,<8.7.0a0' - tzdata: '' - vc: '>=14.1,<15' - vc14_runtime: '>=14.16.27033' - xz: '>=5.2.6,<6.0a0' - pip: '' - url: https://conda.anaconda.org/conda-forge/win-64/python-3.9.19-h4de0772_0_cpython.conda - hash: - md5: b6999bc275e0e6beae7b1c8ea0be1e85 - sha256: 92d847bc9e79a60c1d139aa4ca0385d283b90aa2d7421bb3ffcb5dc0678fd72f - category: main - optional: false -- name: python-dateutil - version: 2.9.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - six: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - hash: - md5: 2cf4264fffb9e6eff6031c5b6884d61c - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - category: core - optional: true -- name: python-dateutil - version: 2.9.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - six: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - hash: - md5: 2cf4264fffb9e6eff6031c5b6884d61c - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - category: core - optional: true -- name: python-dateutil - version: 2.9.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - six: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - hash: - md5: 2cf4264fffb9e6eff6031c5b6884d61c - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - category: core - optional: true -- name: python-fastjsonschema - version: 2.19.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda - hash: - md5: 4d3ceee3af4b0f9a1f48f57176bf8625 - sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f - category: apps - optional: true -- name: python-fastjsonschema - version: 2.19.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda - hash: - md5: 4d3ceee3af4b0f9a1f48f57176bf8625 - sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f - category: apps - optional: true -- name: python-fastjsonschema - version: 2.19.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda - hash: - md5: 4d3ceee3af4b0f9a1f48f57176bf8625 - sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f - category: apps - optional: true -- name: python_abi - version: '3.9' - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-4_cp39.conda - hash: - md5: bfe4b3259a8ac6cdf0037752904da6a7 - sha256: 7e0157e35929711e1a986c18a8bfb7a38a2209cfada16b541ebb0481f74376d6 - category: main - optional: false -- name: python_abi - version: '3.9' - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.9-4_cp39.conda - hash: - md5: 2d9f6c00555127a9058cfa955adf1090 - sha256: a2b38ce566d9f48a49369f46c50912300a6ac09bf1c58a0d6c2caab074ee551e - category: main - optional: false -- name: python_abi - version: '3.9' - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.9-4_cp39.conda - hash: - md5: 948b0d93d4ab1372d8fd45e1560afd47 - sha256: 3bf150eb6fc99f459210065973fc79b5974a9142672f6dd92eba6ed97697e0ed - category: main - optional: false -- name: pytz - version: '2024.1' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - hash: - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - category: core - optional: true -- name: pytz - version: '2024.1' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - hash: - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - category: core - optional: true -- name: pytz - version: '2024.1' - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - hash: - md5: 3eeeeb9e4827ace8c0c1419c85d590ad - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - category: core - optional: true -- name: pywavelets - version: 1.4.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h44dd56e_1.conda - hash: - md5: d037c20e3da2e85f03ebd20ad480c359 - sha256: 80793735b1b056800a5ef44934709f6be4f682654b3ba45e81e0f0424511fab0 - category: core - optional: true -- name: pywavelets - version: 1.4.1 - manager: conda - platform: osx-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/pywavelets-1.4.1-py39hd01001f_1.conda - hash: - md5: e7a7cb8b2e6c0eb1a90ee1c7382e9dc9 - sha256: 2495de597b4c60a252c1265eda07661c6d0dcac57ba1d76c41bd354f01bcb49a - category: core - optional: true -- name: pywavelets - version: 1.4.1 - manager: conda - platform: win-64 - dependencies: - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pywavelets-1.4.1-py39hd88c2e4_1.conda - hash: - md5: d054a3fda239ccc3669d0628ea87759a - sha256: 13520f15e16a4f152ff9f1ecf56ae49f871183469400c3c97c7759bb16766f7f - category: core - optional: true -- name: pywin32 - version: '306' - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/pywin32-306-py39h99910a6_2.conda - hash: - md5: eab91442160b49994dd2e224e6082770 - sha256: bae89555b73c8bbbb9efe88490f2d16c010188dd078ed3aa39c2ba3084e31608 - category: apps - optional: true -- name: pywinpty - version: 2.0.13 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - winpty: '' - url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.13-py39h99910a6_0.conda - hash: - md5: 6dc677d08286a639b3c064a7a4376e06 - sha256: d0ab6095bd95fb128df90ee613b5b611cae4550172d375bd63199d88c8e19344 - category: apps - optional: true -- name: pyyaml - version: 6.0.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - yaml: '>=0.2.5,<0.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_1.conda - hash: - md5: 37218233bcdc310e4fde6453bc1b40d8 - sha256: 28b147c50ad48215f9427a52811848223ac0371be7caae88522e661a3bfb1448 - category: core - optional: true -- name: pyyaml - version: 6.0.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - yaml: '>=0.2.5,<0.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.1-py39hdc70f33_1.conda - hash: - md5: 542378f49240a94056b50ab1385b3bfb - sha256: 4a8d084617571ecb8d816fe4c46b672d8b9b4bd354cbfdbb6c843143abe3896f - category: core - optional: true -- name: pyyaml - version: 6.0.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - yaml: '>=0.2.5,<0.3.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.1-py39ha55989b_1.conda - hash: - md5: 5c3a9da77fc79c21c5c1fd7ea06306a2 - sha256: 8e18f428c944dc08e34b78dad56af00852bc416b4be9ba528144389ac61bf123 - category: core - optional: true -- name: pyzmq - version: 24.0.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libsodium: '>=1.0.18,<1.0.19.0a0' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - zeromq: '>=4.3.4,<4.4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py39headdf64_1.tar.bz2 - hash: - md5: 8ef2263feb2f0130ced1a41444474e98 - sha256: 50bfdf05f3d8e6c99b11eace72b99da2dfade66626e7adf4efb882c956deaf86 - category: apps - optional: true -- name: pyzmq - version: 24.0.1 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14.0.4' - libsodium: '>=1.0.18,<1.0.19.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - zeromq: '>=4.3.4,<4.4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/pyzmq-24.0.1-py39hed8f129_1.tar.bz2 - hash: - md5: d6fba77eb1eccaa1e89f1adbac9d8e1d - sha256: 0f27dac3740474a0698716317a29f0402ae0bd20bcfffa29ba80d24bb2f4ca2f - category: apps - optional: true -- name: pyzmq - version: 24.0.1 - manager: conda - platform: win-64 - dependencies: - libsodium: '>=1.0.18,<1.0.19.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - zeromq: '>=4.3.4,<4.3.5.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/pyzmq-24.0.1-py39hea35a22_1.tar.bz2 - hash: - md5: 22f22a1c03309ec4dc4c65122c87b668 - sha256: b4e061eca10e1b0ae766d05e3653191e4e61f76f3831d13880cdb7c5d52e03e8 - category: apps - optional: true -- name: qt-main - version: 5.15.8 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - alsa-lib: '>=1.2.10,<1.3.0.0a0' - dbus: '>=1.13.6,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - harfbuzz: '>=8.2.1,<9.0a0' - icu: '>=73.2,<74.0a0' - krb5: '>=1.21.2,<1.22.0a0' - libclang: '>=15.0.7,<16.0a0' - libclang13: '>=15.0.7' - libcups: '>=2.3.3,<2.4.0a0' - libevent: '>=2.1.12,<2.1.13.0a0' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libstdcxx-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - libxkbcommon: '>=1.6.0,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-libs: '>=8.0.33,<8.1.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - openssl: '>=3.1.3,<4.0a0' - pulseaudio-client: '>=16.1,<16.2.0a0' - xcb-util: '>=0.4.0,<0.5.0a0' - xcb-util-image: '>=0.4.0,<0.5.0a0' - xcb-util-keysyms: '>=0.4.0,<0.5.0a0' - xcb-util-renderutil: '>=0.3.9,<0.4.0a0' - xcb-util-wm: '>=0.4.1,<0.5.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - xorg-libsm: '>=1.2.4,<2.0a0' - xorg-libx11: '>=1.8.6,<2.0a0' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-xf86vidmodeproto: '' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda - hash: - md5: 4f01e33dbb406085a16a2813ab067e95 - sha256: 4c3d2b37b00a0a84b9674e88b636e10817ae2c23f5af27bbe77cf4f46f3a4225 - category: apps - optional: true -- name: qt-main - version: 5.15.8 - manager: conda - platform: osx-64 - dependencies: - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - icu: '>=73.2,<74.0a0' - krb5: '>=1.21.2,<1.22.0a0' - libclang: '>=15.0.7,<16.0a0' - libclang13: '>=15.0.7' - libcxx: '>=15.0.7' - libglib: '>=2.78.0,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libpq: '>=16.0,<17.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - mysql-libs: '>=8.0.33,<8.1.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/qt-main-5.15.8-h4385fff_17.conda - hash: - md5: b8e8ef73d0e4e7edfe622eebefb989c5 - sha256: f13d99e88c9f1debf421607d4aac4ddd3c994019a2a86f3e6b08c50896f4136f - category: apps - optional: true -- name: qt-main - version: 5.15.8 - manager: conda - platform: win-64 - dependencies: - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - icu: '>=73.2,<74.0a0' - krb5: '>=1.21.2,<1.22.0a0' - libclang: '>=15.0.7,<16.0a0' - libclang13: '>=15.0.7' - libglib: '>=2.78.0,<3.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.43.2,<4.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.3,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/qt-main-5.15.8-h9e85ed6_17.conda - hash: - md5: 568b134e26f3e2a44ff24028c27b8c0e - sha256: ca624ec9c0d07d2c61b7007661b10111c2f3bb38bcc6175a459f4a5180a5748d - category: apps - optional: true -- name: qt-webengine - version: 5.15.8 - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - alsa-lib: '>=1.2.10,<1.3.0.0a0' - dbus: '>=1.13.6,<2.0a0' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' - freetype: '>=2.12.1,<3.0a0' - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - harfbuzz: '>=8.2.1,<9.0a0' - libcups: '>=2.3.3,<2.4.0a0' - libevent: '>=2.1.12,<2.1.13.0a0' - libexpat: '>=2.5.0,<3.0a0' - libgcc-ng: '>=12' - libglib: '>=2.78.0,<3.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libopus: '>=1.3.1,<2.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.44.0,<4.0a0' - libstdcxx-ng: '>=12' - libwebp: '' - libwebp-base: '>=1.3.2,<2.0a0' - libxcb: '>=1.15,<1.16.0a0' - libxkbcommon: '>=1.6.0,<2.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - pulseaudio-client: '>=16.1,<16.2.0a0' - qt-main: '>=5.15.8,<5.16.0a0' - xorg-libx11: '>=1.8.7,<2.0a0' - xorg-libxcomposite: '' - xorg-libxdamage: '' - xorg-libxext: '>=1.3.4,<2.0a0' - xorg-libxfixes: '' - xorg-libxrandr: '' - xorg-libxrender: '>=0.9.11,<0.10.0a0' - xorg-libxtst: '' - url: https://conda.anaconda.org/conda-forge/linux-64/qt-webengine-5.15.8-h75ea521_4.conda - hash: - md5: b4dceacc13fa80ceeb1e721a4e8b5445 - sha256: 9d702f311bf3b8e81e1e8c46263ee4900afdf25ad61c08e8f0cc58d5099d0acb - category: apps - optional: true -- name: qt-webengine - version: 5.15.8 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - libcxx: '>=15.0.7' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.44.0,<4.0a0' - libwebp: '' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - nspr: '>=4.35,<5.0a0' - nss: '>=3.94,<4.0a0' - qt-main: '>=5.15.8,<5.16.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/qt-webengine-5.15.8-h5f65913_4.conda - hash: - md5: ea76340e48eef9328057f4d337669593 - sha256: 19d5c32af07a49d2bbb15eff2e2e5c6285c292f1e8cd444f4e6d114e49abf672 - category: apps - optional: true -- name: qt-webengine - version: 5.15.8 - manager: conda - platform: win-64 - dependencies: - gst-plugins-base: '>=1.22.6,<1.23.0a0' - gstreamer: '>=1.22.6,<1.23.0a0' - libiconv: '>=1.17,<2.0a0' - libjpeg-turbo: '>=3.0.0,<4.0a0' - libpng: '>=1.6.39,<1.7.0a0' - libsqlite: '>=3.44.0,<4.0a0' - libwebp: '' - libwebp-base: '>=1.3.2,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - qt-main: '>=5.15.8,<5.16.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/qt-webengine-5.15.8-h4bf5c4e_4.tar.bz2 - hash: - md5: e080e2c05baf3821dc1272537d3df48a - sha256: f8eba85995ba7557227a0f87cd3dbfc72ab763cb48c4a6b0e79715804b89fb93 - category: apps - optional: true -- name: re2 - version: 2023.09.01 - manager: conda - platform: linux-64 - dependencies: - libre2-11: 2023.09.01 - url: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_1.conda - hash: - md5: 30c0f66cbc5927a12662acf94067e780 - sha256: b8f9e366f02c559587327f0cd7fa45c5c399b4025f2c9e1aa292bb7cbe1482c0 - category: core - optional: true -- name: re2 - version: 2023.09.01 - manager: conda - platform: osx-64 - dependencies: - libre2-11: 2023.09.01 - url: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.09.01-hb168e87_1.conda - hash: - md5: 81ce9e6ddc1c123aecc59234aa12d3b1 - sha256: e8c9d1fc5c254573bd46e46e4cc4dea6d6101d353ea54081f682438f815e224a - category: core - optional: true -- name: re2 - version: 2023.09.01 - manager: conda - platform: win-64 - dependencies: - libre2-11: 2023.09.01 - url: https://conda.anaconda.org/conda-forge/win-64/re2-2023.09.01-hd3b24a8_1.conda - hash: - md5: 4719b3240cb299de27527f5a1cc0af23 - sha256: 5e7b1aa9ede7778c6b1a52c907b294a1908ac1adfb3ea3c8bb07f5d23f6ebf55 - category: core - optional: true -- name: readline - version: '8.2' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - ncurses: '>=6.3,<7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - hash: - md5: 47d31b792659ce70f470b5c82fdfb7a4 - sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 - category: main - optional: false -- name: readline - version: '8.2' - manager: conda - platform: osx-64 - dependencies: - ncurses: '>=6.3,<7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - hash: - md5: f17f77f2acf4d344734bda76829ce14e - sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568 - category: main - optional: false -- name: referencing - version: 0.34.0 - manager: conda - platform: linux-64 - dependencies: - attrs: '>=22.2.0' - python: '>=3.8' - rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda - hash: - md5: e4492c22e314be5c75db3469e3bbf3d9 - sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672 - category: apps - optional: true -- name: referencing - version: 0.34.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda - hash: - md5: e4492c22e314be5c75db3469e3bbf3d9 - sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672 - category: apps - optional: true -- name: referencing - version: 0.34.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - attrs: '>=22.2.0' - rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.34.0-pyhd8ed1ab_0.conda - hash: - md5: e4492c22e314be5c75db3469e3bbf3d9 - sha256: 2e631e9e1d49280770573f7acc7441b70181b2dc21948bb1be15eaae80550672 - category: apps - optional: true -- name: requests - version: 2.31.0 - manager: conda - platform: linux-64 - dependencies: - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - idna: '>=2.5,<4' - python: '>=3.7' - urllib3: '>=1.21.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - category: main - optional: false -- name: requests - version: 2.31.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - idna: '>=2.5,<4' - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - urllib3: '>=1.21.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - category: main - optional: false -- name: requests - version: 2.31.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - idna: '>=2.5,<4' - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - urllib3: '>=1.21.1,<3' - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - category: main - optional: false -- name: retrying - version: 1.3.3 - manager: conda - platform: linux-64 - dependencies: - python: '' - six: '>=1.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2 - hash: - md5: a11f356d6f93b74b4a84e9501afd48b4 - sha256: ef407b88c45171f41eadcbbcfd41243cb137fe7438fc18f4cd08181c522664cf - category: apps - optional: true -- name: retrying - version: 1.3.3 - manager: conda - platform: osx-64 - dependencies: - python: '' - six: '>=1.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2 - hash: - md5: a11f356d6f93b74b4a84e9501afd48b4 - sha256: ef407b88c45171f41eadcbbcfd41243cb137fe7438fc18f4cd08181c522664cf - category: apps - optional: true -- name: retrying - version: 1.3.3 - manager: conda - platform: win-64 - dependencies: - python: '' - six: '>=1.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2 - hash: - md5: a11f356d6f93b74b4a84e9501afd48b4 - sha256: ef407b88c45171f41eadcbbcfd41243cb137fe7438fc18f4cd08181c522664cf - category: apps - optional: true -- name: rpds-py - version: 0.18.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.18.0-py39h9fdd4d6_0.conda - hash: - md5: ca1e1ff2be5c41142e412c83b88960e4 - sha256: 1bc9bdf6f4a14f38f8decf967fc40bfcd1ab069f012ef0f109163d1ef7b7c633 - category: apps - optional: true -- name: rpds-py - version: 0.18.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.18.0-py39hcf47035_0.conda - hash: - md5: 0e8641e9f0d42d844cf17f5520225e6e - sha256: 02f4bc23980602a53243f46ec08e4bf8f3fb9e53c09322624af38ff4aebc0056 - category: apps - optional: true -- name: rpds-py - version: 0.18.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.18.0-py39hf21820d_0.conda - hash: - md5: 32fa6863c2216dbe787adaf874433713 - sha256: daccdfd59f82b8767f71dc492d117bc2a5329748db3921eb66d752ffb86baf4f - category: apps - optional: true -- name: scikit-image - version: 0.19.3 - manager: conda - platform: linux-64 - dependencies: - cloudpickle: '>=0.2.1' - cytoolz: '>=0.7.3' - dask-core: '>=1.0.0,!=2.17.0' - imageio: '>=2.3.0' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - networkx: '>=2.2' - numpy: '>=1.20.3,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.1.0,!=7.1.0,!=7.1.1,!=8.3.0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - pywavelets: '>=1.1.1' - scipy: '>=1.4.1' - tifffile: '>=2019.7.26' - toolz: '>=0.7.3' - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py39h4661b88_2.tar.bz2 - hash: - md5: a8d53b12aedcd84107ba8c85c81be56f - sha256: b24a19e5a5d78335288b480fd1da021756ba37c832f9ce6be0a7246e4e2aac0e - category: core - optional: true -- name: scikit-image - version: 0.19.3 - manager: conda - platform: osx-64 - dependencies: - cloudpickle: '>=0.2.1' - cytoolz: '>=0.7.3' - dask-core: '>=1.0.0,!=2.17.0' - imageio: '>=2.3.0' - libcxx: '>=14.0.4' - networkx: '>=2.2' - numpy: '>=1.20.3,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.1.0,!=7.1.0,!=7.1.1,!=8.3.0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - pywavelets: '>=1.1.1' - scipy: '>=1.4.1' - tifffile: '>=2019.7.26' - toolz: '>=0.7.3' - url: https://conda.anaconda.org/conda-forge/osx-64/scikit-image-0.19.3-py39hecff1ad_2.tar.bz2 - hash: - md5: 966cbed14955d6773fc368b695db0a97 - sha256: 0fd3f721263b761c84c66dcbe19d5196ed12142e71914d4a6fc52c9065b7ba17 - category: core - optional: true -- name: scikit-image - version: 0.19.3 - manager: conda - platform: win-64 - dependencies: - cloudpickle: '>=0.2.1' - cytoolz: '>=0.7.3' - dask-core: '>=1.0.0,!=2.17.0' - imageio: '>=2.3.0' - networkx: '>=2.2' - numpy: '>=1.20.3,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.1.0,!=7.1.0,!=7.1.1,!=8.3.0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - pywavelets: '>=1.1.1' - scipy: '>=1.4.1' - tifffile: '>=2019.7.26' - toolz: '>=0.7.3' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/scikit-image-0.19.3-py39h2ba5b7c_2.tar.bz2 - hash: - md5: 95af5e59b69d4df686989cd3662a2172 - sha256: 8cc7161db95db3768c36d69a7a347e64afbec82fd4dbc38e56bd6b65438ea69b - category: core - optional: true -- name: scikit-learn - version: 1.2.2 - manager: conda - platform: linux-64 - dependencies: - _openmp_mutex: '>=4.5' - joblib: '>=1.1.1' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '' - threadpoolctl: '>=2.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.2.2-py39hc236052_2.conda - hash: - md5: 43894d2ed4e587557e536d3e4ef93f73 - sha256: 857fcc0505405dcbaedeea8e655383f54126102a919f9a32d55cd77582ce15cb - category: core - optional: true -- name: scikit-learn - version: 1.2.2 - manager: conda - platform: osx-64 - dependencies: - joblib: '>=1.1.1' - libcxx: '>=15.0.7' - llvm-openmp: '>=15.0.7' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '' - threadpoolctl: '>=2.0.0' - url: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.2.2-py39hcb35850_2.conda - hash: - md5: 64e1b9f33c5696c06fad72b4e0e93426 - sha256: 3bc669381a064538ab78f6724b2b9cc9250ecbb6d19c23934b3280046896ce4e - category: core - optional: true -- name: scikit-learn - version: 1.2.2 - manager: conda - platform: win-64 - dependencies: - joblib: '>=1.1.1' - numpy: '>=1.21.6,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - scipy: '' - threadpoolctl: '>=2.0.0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.2.2-py39hfa9d973_2.conda - hash: - md5: 907305bd8b6a384f14d41081efd9eb7e - sha256: 506e62c9813cb398b5831b18e5c50937625607cd1b432987962c94d27508e298 - category: core - optional: true -- name: scipy - version: 1.10.1 - manager: conda - platform: linux-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=12.2.0' - liblapack: '>=3.9.0,<4.0a0' - libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' - pooch: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py39h6183b62_3.conda - hash: - md5: 84c4007675da392fdb99faeefda69552 - sha256: 68b5690a88e2872012fbe218dfb1f197e70aa83ecc3d049b5df5845d8c603406 - category: main - optional: false -- name: scipy - version: 1.10.1 - manager: conda - platform: osx-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libcxx: '>=15.0.7' - libgfortran: 5.* - libgfortran5: '>=12.2.0' - liblapack: '>=3.9.0,<4.0a0' - numpy: '>=1.21.6,<2.0a0' - pooch: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.10.1-py39hded996c_3.conda - hash: - md5: 6e2d428f46a2724b2e46ff47299974bf - sha256: 78c77c4bfd2bfec1bb65e85a9f7529e49151e70ced68dcbed58ebd906c0b5c23 - category: main - optional: false -- name: scipy - version: 1.10.1 - manager: conda - platform: win-64 - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - liblapack: '>=3.9.0,<4.0a0' - m2w64-gcc-libs: '' - m2w64-gcc-libs-core: '' - numpy: '>=1.21.6,<2.0a0' - pooch: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.10.1-py39hde5eda1_3.conda - hash: - md5: 8abf202e8e71ea7233aa6c9f02fcdec6 - sha256: 50eac2767015db950e1b8c40bfd3bc00923bde3e04b8add5680abed35953b3aa - category: main - optional: false -- name: semver - version: 3.0.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5efb3fccda53974aed800b6d575f72ed - sha256: 1cd164b2e80ea011b9272a66cc356773086885c447d6f62fed5f30f99bda3cb3 - category: main - optional: false -- name: semver - version: 3.0.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5efb3fccda53974aed800b6d575f72ed - sha256: 1cd164b2e80ea011b9272a66cc356773086885c447d6f62fed5f30f99bda3cb3 - category: main - optional: false -- name: semver - version: 3.0.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 5efb3fccda53974aed800b6d575f72ed - sha256: 1cd164b2e80ea011b9272a66cc356773086885c447d6f62fed5f30f99bda3cb3 - category: main - optional: false -- name: send2trash - version: 1.8.3 - manager: conda - platform: linux-64 - dependencies: - __linux: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda - hash: - md5: 778594b20097b5a948c59e50ae42482a - sha256: c4401b071e86ddfa0ea4f34b85308db2516b6aeca50053535996864cfdee7b3f - category: apps - optional: true -- name: send2trash - version: 1.8.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '' - pyobjc-framework-cocoa: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda - hash: - md5: c3cb67fc72fb38020fe7923dbbcf69b0 - sha256: f911307db932c92510da6c3c15b461aef935720776643a1fbf3683f61001068b - category: apps - optional: true -- name: send2trash - version: 1.8.3 - manager: conda - platform: win-64 - dependencies: - __win: '' - pywin32: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda - hash: - md5: 5a86a21050ca3831ec7f77fb302f1132 - sha256: d8aa230501a33250af2deee03006a2579f0335e7240a9c7286834788dcdcfaa8 - category: apps - optional: true -- name: setuptools - version: 69.5.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda - hash: - md5: 7462280d81f639363e6e63c81276bd9e - sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7 - category: main - optional: false -- name: setuptools - version: 69.5.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda - hash: - md5: 7462280d81f639363e6e63c81276bd9e - sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7 - category: main - optional: false -- name: setuptools - version: 69.5.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda - hash: - md5: 7462280d81f639363e6e63c81276bd9e - sha256: 72d143408507043628b32bed089730b6d5f5445eccc44b59911ec9f262e365e7 - category: main - optional: false -- name: shapely - version: 2.0.2 - manager: conda - platform: linux-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - libgcc-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py39h1bc45ef_0.conda - hash: - md5: ca067895d22f8a0d38f225a95184858e - sha256: ad3e6c1519205fddcbbf88fd04d26723ced625c4cc86c18fe674e4fd85cde624 - category: core - optional: true -- name: shapely - version: 2.0.2 - manager: conda - platform: osx-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.0.2-py39h808d968_0.conda - hash: - md5: 638ba3d4736735e59d6ab0012d472534 - sha256: 7f1dc9336f48773f72fcb6a666411d32e166214bb4394d4f4a5c91b9e70c450b - category: core - optional: true -- name: shapely - version: 2.0.2 - manager: conda - platform: win-64 - dependencies: - geos: '>=3.12.0,<3.12.1.0a0' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/shapely-2.0.2-py39hacc7841_0.conda - hash: - md5: c82d8276352eccb936107eb4dfa6855d - sha256: 8910bc133bf088ee59b770304922648e724e6089d20dee03bba6fdb92ccdd11b - category: core - optional: true -- name: sip - version: 6.7.12 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - packaging: '' - ply: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py39h3d6467e_0.conda - hash: - md5: e667a3ab0df62c54e60e1843d2e6defb - sha256: fd50c71dc05daf9d28663d448d17f150b3eb79ae629198c73e2186b5b1e990dc - category: apps - optional: true -- name: sip - version: 6.7.12 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - packaging: '' - ply: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tomli: '' - url: https://conda.anaconda.org/conda-forge/osx-64/sip-6.7.12-py39h110ca85_0.conda - hash: - md5: 4c3651b3e1e14064a05a3d722d1ba7cb - sha256: 0c105b599c2e9ba83692a32e14df44fe8eee0d8042550bfa6218f48d641dfbf1 - category: apps - optional: true -- name: sip - version: 6.7.12 - manager: conda - platform: win-64 - dependencies: - packaging: '' - ply: '' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - tomli: '' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/sip-6.7.12-py39h99910a6_0.conda - hash: - md5: 0cc5774390ada632ed7975203057c91c - sha256: 541840bcd849c6c745f537987d0009695ef14c8fd9ad4721333a30bf3c49e018 - category: apps - optional: true -- name: six - version: 1.16.0 - manager: conda - platform: linux-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - hash: - md5: e5f25f8dbc060e9a8d912e432202afc2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - category: main - optional: false -- name: six - version: 1.16.0 - manager: conda - platform: osx-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - hash: - md5: e5f25f8dbc060e9a8d912e432202afc2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - category: main - optional: false -- name: six - version: 1.16.0 - manager: conda - platform: win-64 - dependencies: - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - hash: - md5: e5f25f8dbc060e9a8d912e432202afc2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - category: main - optional: false -- name: snappy - version: 1.2.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.0-hdb0a2a9_1.conda - hash: - md5: 843bbb8ace1d64ac50d64639ff38b014 - sha256: bb87116b8c6198f6979b3d212e9af12e08e12f2bf09970d0f9b4582607648b22 - category: core - optional: true -- name: snappy - version: 1.2.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - url: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.0-h6dc393e_1.conda - hash: - md5: 9c322ec36340610fcf213b72999b049e - sha256: dc2abe5f45859263c36d287d0d6212e83a3552ef19faf98194d32e70d755d648 - category: core - optional: true -- name: snappy - version: 1.2.0 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.0-hfb803bf_1.conda - hash: - md5: a419bf04a7c76a46639e315ac1b8bf72 - sha256: de02a222071d6a832ad3b790c8c977725161ad430ec694fd7b35769b6e1104b4 - category: core - optional: true -- name: sniffio - version: 1.3.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - hash: - md5: 490730480d76cf9c8f8f2849719c6e2b - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - category: apps - optional: true -- name: sniffio - version: 1.3.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - hash: - md5: 490730480d76cf9c8f8f2849719c6e2b - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - category: apps - optional: true -- name: sniffio - version: 1.3.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - hash: - md5: 490730480d76cf9c8f8f2849719c6e2b - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - category: apps - optional: true -- name: sortedcontainers - version: 2.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6d6552722448103793743dabfbda532d - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - category: core - optional: true -- name: sortedcontainers - version: 2.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6d6552722448103793743dabfbda532d - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - category: core - optional: true -- name: sortedcontainers - version: 2.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 6d6552722448103793743dabfbda532d - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - category: core - optional: true -- name: soupsieve - version: '2.5' - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - hash: - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - category: apps - optional: true -- name: soupsieve - version: '2.5' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - hash: - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - category: apps - optional: true -- name: soupsieve - version: '2.5' - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - hash: - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - category: apps - optional: true -- name: sqlite - version: 3.45.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libsqlite: 3.45.3 - libzlib: '>=1.2.13,<1.3.0a0' - ncurses: '>=6.4.20240210,<7.0a0' - readline: '>=8.2,<9.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.45.3-h2c6b66d_0.conda - hash: - md5: be7d70f2db41b674733667bdd69bd000 - sha256: 945ac702e2bd8cc59cc780dfc37c18255d5e538c8433dc290c0edbad2bcbaeb4 - category: core - optional: true -- name: sqlite - version: 3.45.3 - manager: conda - platform: osx-64 - dependencies: - libsqlite: 3.45.3 - libzlib: '>=1.2.13,<1.3.0a0' - ncurses: '>=6.4.20240210,<7.0a0' - readline: '>=8.2,<9.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.45.3-h7461747_0.conda - hash: - md5: 4d9a56087e6150e84b94087a8c0fdf98 - sha256: 73ab284ff41dd6aeb69f7a8a014018fbf8b019fd261ff4190fd5813b62d07b16 - category: core - optional: true -- name: sqlite - version: 3.45.3 - manager: conda - platform: win-64 - dependencies: - libsqlite: 3.45.3 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.45.3-hcfcfb64_0.conda - hash: - md5: ef090bf29a90a1371888385e405a3a6f - sha256: 9815ad33780f8679d21507ffd6e12184da47eab7b945b2e5df35e8af686aafe6 - category: core - optional: true -- name: stack_data - version: 0.6.2 - manager: conda - platform: linux-64 - dependencies: - asttokens: '' - executing: '' - pure_eval: '' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - hash: - md5: e7df0fdd404616638df5ece6e69ba7af - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - category: apps - optional: true -- name: stack_data - version: 0.6.2 - manager: conda - platform: osx-64 - dependencies: - asttokens: '' - executing: '' - pure_eval: '' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - hash: - md5: e7df0fdd404616638df5ece6e69ba7af - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - category: apps - optional: true -- name: stack_data - version: 0.6.2 - manager: conda - platform: win-64 - dependencies: - asttokens: '' - executing: '' - pure_eval: '' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - hash: - md5: e7df0fdd404616638df5ece6e69ba7af - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - category: apps - optional: true -- name: tbb - version: 2021.12.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libhwloc: '>=2.10.0,<2.10.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h00ab1b0_0.conda - hash: - md5: f1b776cff1b426e7e7461a8502a3b731 - sha256: 0b48f402e18f293e3c7a4c4e391ed2523f173bdec86aa42658db787196eb27ca - category: main - optional: false -- name: tbb - version: 2021.12.0 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=16' - libhwloc: '>=2.10.0,<2.10.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/tbb-2021.12.0-h7728843_0.conda - hash: - md5: e4fb6f4700d8890c36cbf317c2c6d0cb - sha256: 6068f814461eeb4ba68ded3d97bbe444d2909b469c51598c40734004b2c3b765 - category: main - optional: false -- name: tbb - version: 2021.12.0 - manager: conda - platform: win-64 - dependencies: - libhwloc: '>=2.10.0,<2.10.1.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.12.0-h91493d7_0.conda - hash: - md5: 21745fdd12f01b41178596143cbecffd - sha256: 621926aae93513408bdca3dd21c97e2aa8ba7dcd2c400dab804fb0ce7da1387b - category: main - optional: false -- name: tblib - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 04eedddeb68ad39871c8127dd1c21f4f - sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a - category: core - optional: true -- name: tblib - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 04eedddeb68ad39871c8127dd1c21f4f - sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a - category: core - optional: true -- name: tblib - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: 04eedddeb68ad39871c8127dd1c21f4f - sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a - category: core - optional: true -- name: tenacity - version: 8.2.3 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - hash: - md5: 1482e77f87c6a702a7e05ef22c9b197b - sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 - category: apps - optional: true -- name: tenacity - version: 8.2.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - hash: - md5: 1482e77f87c6a702a7e05ef22c9b197b - sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 - category: apps - optional: true -- name: tenacity - version: 8.2.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - hash: - md5: 1482e77f87c6a702a7e05ef22c9b197b - sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 - category: apps - optional: true -- name: terminado - version: 0.18.1 - manager: conda - platform: linux-64 - dependencies: - __linux: '' - ptyprocess: '' - python: '>=3.8' - tornado: '>=6.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda - hash: - md5: efba281bbdae5f6b0a1d53c6d4a97c93 - sha256: b300557c0382478cf661ddb520263508e4b3b5871b471410450ef2846e8c352c - category: apps - optional: true -- name: terminado - version: 0.18.1 - manager: conda - platform: osx-64 - dependencies: - __osx: '' - ptyprocess: '' - python: '>=3.8' - tornado: '>=6.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda - hash: - md5: 00b54981b923f5aefcd5e8547de056d5 - sha256: 4daae56fc8da17784578fbdd064f17e3b3076b394730a14119e571707568dc8a - category: apps - optional: true -- name: terminado - version: 0.18.1 - manager: conda - platform: win-64 - dependencies: - __win: '' - python: '>=3.8' - tornado: '>=6.1.0' - pywinpty: '>=1.1.0' - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda - hash: - md5: 4abd500577430a942a995fd0d09b76a2 - sha256: 8cb078291fd7882904e3de594d299c8de16dd3af7405787fce6919a385cfc238 - category: apps - optional: true -- name: threadpoolctl - version: 3.4.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda - hash: - md5: b296278eef667c673bf51de6535bad88 - sha256: 4f4ad4f2a4ee8875cf2cb9c80abf4c7383e5e53cfec41104da7058569d9063b7 - category: core - optional: true -- name: threadpoolctl - version: 3.4.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda - hash: - md5: b296278eef667c673bf51de6535bad88 - sha256: 4f4ad4f2a4ee8875cf2cb9c80abf4c7383e5e53cfec41104da7058569d9063b7 - category: core - optional: true -- name: threadpoolctl - version: 3.4.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda - hash: - md5: b296278eef667c673bf51de6535bad88 - sha256: 4f4ad4f2a4ee8875cf2cb9c80abf4c7383e5e53cfec41104da7058569d9063b7 - category: core - optional: true -- name: tifffile - version: 2020.6.3 - manager: conda - platform: linux-64 - dependencies: - imagecodecs-lite: '>=2019.4.20' - numpy: '>=1.15.1' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2 - hash: - md5: 1fb771bb25b2eecbc73abf5143fa35bd - sha256: 333d6882dd0913196b6e486650416cf4e26dc3d6f28260e56be5ba656770ee83 - category: core - optional: true -- name: tifffile - version: 2020.6.3 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - numpy: '>=1.15.1' - imagecodecs-lite: '>=2019.4.20' - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2 - hash: - md5: 1fb771bb25b2eecbc73abf5143fa35bd - sha256: 333d6882dd0913196b6e486650416cf4e26dc3d6f28260e56be5ba656770ee83 - category: core - optional: true -- name: tifffile - version: 2020.6.3 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - numpy: '>=1.15.1' - imagecodecs-lite: '>=2019.4.20' - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2 - hash: - md5: 1fb771bb25b2eecbc73abf5143fa35bd - sha256: 333d6882dd0913196b6e486650416cf4e26dc3d6f28260e56be5ba656770ee83 - category: core - optional: true -- name: tiledb - version: 2.16.3 - manager: conda - platform: linux-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libabseil: '>=20230802.0,<20230803.0a0' - libgcc-ng: '>=12' - libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libstdcxx-ng: '>=12' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda - hash: - md5: 7de728789b0aba16018f726dc5ddbec2 - sha256: f021df4b9cfd1a54aac87a6c0bac604edc8ffb36d5b2c4aa20bf2d759ae04a11 - category: core - optional: true -- name: tiledb - version: 2.16.3 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.13' - bzip2: '>=1.0.8,<2.0a0' - libabseil: '>=20230802.0,<20230803.0a0' - libcxx: '>=15.0.7' - libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/tiledb-2.16.3-hd3a41d5_3.conda - hash: - md5: 53c2d2746f21a60d0c498c36fb32ec56 - sha256: 9144ad40adb982107dd4f5084d1e488b216025eed91a3feeb3506ee4d5bc98dd - category: core - optional: true -- name: tiledb - version: 2.16.3 - manager: conda - platform: win-64 - dependencies: - bzip2: '>=1.0.8,<2.0a0' - libabseil: '>=20230802.0,<20230803.0a0' - libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.2.1,<9.0a0' - libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libxml2: '>=2.11.5,<3.0.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/win-64/tiledb-2.16.3-hbf04793_3.conda - hash: - md5: 3afaf8882d4568eb9c91870102af1b37 - sha256: 4de5494be2ee102d15077bebc63d17422c40dc8d634097136a9a202a3930e502 - category: core - optional: true -- name: tinycss2 - version: 1.2.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.5' - webencodings: '>=0.4' - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7234c9eefff659501cd2fe0d2ede4d48 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - category: apps - optional: true -- name: tinycss2 - version: 1.2.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.5' - webencodings: '>=0.4' - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7234c9eefff659501cd2fe0d2ede4d48 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - category: apps - optional: true -- name: tinycss2 - version: 1.2.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.5' - webencodings: '>=0.4' - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 7234c9eefff659501cd2fe0d2ede4d48 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - category: apps - optional: true -- name: tk - version: 8.6.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - hash: - md5: d453b98d9c83e71da0741bb0ff4d76bc - sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e - category: main - optional: false -- name: tk - version: 8.6.13 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - hash: - md5: bf830ba5afc507c6232d4ef0fb1a882d - sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 - category: main - optional: false -- name: tk - version: 8.6.13 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - hash: - md5: fc048363eb8f03cd1737600a5d08aafe - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 - category: main - optional: false -- name: toml - version: 0.10.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: f832c45a477c78bebd107098db465095 - sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 - category: dev - optional: true -- name: toml - version: 0.10.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: f832c45a477c78bebd107098db465095 - sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 - category: dev - optional: true -- name: toml - version: 0.10.2 - manager: conda - platform: win-64 - dependencies: - python: '>=2.7' - url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - hash: - md5: f832c45a477c78bebd107098db465095 - sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 - category: dev - optional: true -- name: tomli - version: 2.0.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 5844808ffab9ebdb694585b50ba02a96 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - category: dev - optional: true -- name: tomli - version: 2.0.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 5844808ffab9ebdb694585b50ba02a96 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - category: dev - optional: true -- name: tomli - version: 2.0.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 5844808ffab9ebdb694585b50ba02a96 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - category: dev - optional: true -- name: tomlkit - version: 0.12.4 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda - hash: - md5: 37c47ea93ef00dd80d880fc4ba21256a - sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18 - category: dev - optional: true -- name: tomlkit - version: 0.12.4 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda - hash: - md5: 37c47ea93ef00dd80d880fc4ba21256a - sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18 - category: dev - optional: true -- name: tomlkit - version: 0.12.4 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda - hash: - md5: 37c47ea93ef00dd80d880fc4ba21256a - sha256: 8d45c266bf919788abacd9828f4a2101d7216f6d4fc7c8d3417034fe0d795a18 - category: dev - optional: true -- name: toolz - version: 0.12.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 2fcb582444635e2c402e8569bb94e039 - sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6 - category: core - optional: true -- name: toolz - version: 0.12.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 2fcb582444635e2c402e8569bb94e039 - sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6 - category: core - optional: true -- name: toolz - version: 0.12.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda - hash: - md5: 2fcb582444635e2c402e8569bb94e039 - sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6 - category: core - optional: true -- name: tornado - version: '6.1' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=10.3.0' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.1-py39hb9d737c_3.tar.bz2 - hash: - md5: 5e13a2d214ed4184969df363a1aab420 - sha256: e7f1c835a824403f48bfaaaba9c711069427ddf4610df64fc0cdf001114c22cf - category: core - optional: true -- name: tornado - version: '6.1' - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.1-py39h63b48b0_3.tar.bz2 - hash: - md5: 82c1e73cdc3ae881ef28d56a3a58225c - sha256: 9b390d4f3d632e1c6751dc10bfb73fc2400ef771e306b8eac65fb8febe053309 - category: core - optional: true -- name: tornado - version: '6.1' - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - vc: '>=14.1,<15' - vs2015_runtime: '>=14.16.27033' - url: https://conda.anaconda.org/conda-forge/win-64/tornado-6.1-py39hb82d6ee_3.tar.bz2 - hash: - md5: 244564c2450db05b6e7168902277fcdb - sha256: 5648bc352e86550fe053fb811201ff5acb6f1279f16460f9262f31739709f23a - category: core - optional: true -- name: tqdm - version: 4.66.2 - manager: conda - platform: linux-64 - dependencies: - colorama: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda - hash: - md5: 2b8dfb969f984497f3f98409a9545776 - sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 - category: main - optional: false -- name: tqdm - version: 4.66.2 - manager: conda - platform: osx-64 - dependencies: - colorama: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda - hash: - md5: 2b8dfb969f984497f3f98409a9545776 - sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 - category: main - optional: false -- name: tqdm - version: 4.66.2 - manager: conda - platform: win-64 - dependencies: - colorama: '' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda - hash: - md5: 2b8dfb969f984497f3f98409a9545776 - sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 - category: main - optional: false -- name: traitlets - version: 5.14.2 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.2-pyhd8ed1ab_0.conda - hash: - md5: af5fa2d2186003472e766a23c46cae04 - sha256: 9ea6073091c130470a51b51703c8d2d959434992e29c4aa4abeba07cd56533a3 - category: apps - optional: true -- name: traitlets - version: 5.14.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.2-pyhd8ed1ab_0.conda - hash: - md5: af5fa2d2186003472e766a23c46cae04 - sha256: 9ea6073091c130470a51b51703c8d2d959434992e29c4aa4abeba07cd56533a3 - category: apps - optional: true -- name: traitlets - version: 5.14.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.2-pyhd8ed1ab_0.conda - hash: - md5: af5fa2d2186003472e766a23c46cae04 - sha256: 9ea6073091c130470a51b51703c8d2d959434992e29c4aa4abeba07cd56533a3 - category: apps - optional: true -- name: typing-extensions - version: 4.11.0 - manager: conda - platform: linux-64 - dependencies: - typing_extensions: 4.11.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.11.0-hd8ed1ab_0.conda - hash: - md5: 471e3988f8ca5e9eb3ce6be7eac3bcee - sha256: aecbd9c601ba5a6c128da8975276fd817b968a9edc969b7ae97aee76e80a14a6 - category: dev - optional: true -- name: typing-extensions - version: 4.11.0 - manager: conda - platform: osx-64 - dependencies: - typing_extensions: 4.11.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.11.0-hd8ed1ab_0.conda - hash: - md5: 471e3988f8ca5e9eb3ce6be7eac3bcee - sha256: aecbd9c601ba5a6c128da8975276fd817b968a9edc969b7ae97aee76e80a14a6 - category: dev - optional: true -- name: typing-extensions - version: 4.11.0 - manager: conda - platform: win-64 - dependencies: - typing_extensions: 4.11.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.11.0-hd8ed1ab_0.conda - hash: - md5: 471e3988f8ca5e9eb3ce6be7eac3bcee - sha256: aecbd9c601ba5a6c128da8975276fd817b968a9edc969b7ae97aee76e80a14a6 - category: dev - optional: true -- name: typing_extensions - version: 4.11.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda - hash: - md5: 6ef2fc37559256cf682d8b3375e89b80 - sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2 - category: dev - optional: true -- name: typing_extensions - version: 4.11.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda - hash: - md5: 6ef2fc37559256cf682d8b3375e89b80 - sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2 - category: dev - optional: true -- name: typing_extensions - version: 4.11.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.11.0-pyha770c72_0.conda - hash: - md5: 6ef2fc37559256cf682d8b3375e89b80 - sha256: a7e8714d14f854058e971a6ed44f18cc37cc685f98ddefb2e6b7899a0cc4d1a2 - category: dev - optional: true -- name: tzcode - version: 2024a - manager: conda - platform: linux-64 - dependencies: - __glibc: '>=2.17,<3.0.a0' - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/tzcode-2024a-h3f72095_0.conda - hash: - md5: 32146e34aaec3745a08b6f49af3f41b0 - sha256: d3ea2927cabd6c9f27ee0cb498f893ac0133687d6a9e65e0bce4861c732a18df - category: core - optional: true -- name: tzcode - version: 2024a - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/tzcode-2024a-h10d778d_0.conda - hash: - md5: 8d50ba6668dbd193cd42ccd9099fa2ae - sha256: e3ee34b2711500f3b1d38309d47cfd7e4d05c0144f0b2b2bdfbc271a28cfdd76 - category: core - optional: true -- name: tzdata - version: 2024a - manager: conda - platform: linux-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - hash: - md5: 161081fc7cec0bfda0d86d7cb595f8d8 - sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 - category: main - optional: false -- name: tzdata - version: 2024a - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - hash: - md5: 161081fc7cec0bfda0d86d7cb595f8d8 - sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 - category: main - optional: false -- name: tzdata - version: 2024a - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - hash: - md5: 161081fc7cec0bfda0d86d7cb595f8d8 - sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 - category: main - optional: false -- name: ucrt - version: 10.0.22621.0 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - hash: - md5: 72608f6cd3e5898229c3ea16deb1ac43 - sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 - category: main - optional: false -- name: unicodedata2 - version: 15.1.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda - hash: - md5: 1da984bbb6e765743e13388ba7b7b2c8 - sha256: 90077cbf116112d5112b7beedf896e59c98416d09860ba98c06a770c014829b2 - category: core - optional: true -- name: unicodedata2 - version: 15.1.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-15.1.0-py39hdc70f33_0.conda - hash: - md5: ede122e9ef2775a8879063d9d3ee819f - sha256: 2c3049ec6ffd44beb61964bf109993f654a7316fa6a368c634d603e8347f9fdf - category: core - optional: true -- name: unicodedata2 - version: 15.1.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-15.1.0-py39ha55989b_0.conda - hash: - md5: 20ec896e8d97f2ff8be1124e624dc8f2 - sha256: 7abe28f2a0604018448abf1e3e566e0b6ae45fc8719f908308137d9ab637c68a - category: core - optional: true -- name: uriparser - version: 0.9.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.7-h59595ed_1.conda - hash: - md5: c5edf07141147789784f89d5b4e4a9ad - sha256: ec997599b6dcfef34242c67b695c4704d9ba6cb0b9de8f390defa475a95cdb3f - category: core - optional: true -- name: uriparser - version: 0.9.7 - manager: conda - platform: osx-64 - dependencies: - libcxx: '>=14' - url: https://conda.anaconda.org/conda-forge/osx-64/uriparser-0.9.7-he965462_1.conda - hash: - md5: a342f2d5573ebdb1cba60ef2947c1b7f - sha256: 1f3563325ce2f9b28b6dfbc703f3cac4d36095d2103c40648338533f4cb80b63 - category: core - optional: true -- name: uriparser - version: 0.9.7 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/uriparser-0.9.7-h1537add_1.conda - hash: - md5: 5f3b2772564e761bc2287b89b9e6b14b - sha256: 9b185e00da9829592300359e23e2954188d21749fda675a08abbef728f19f25b - category: core - optional: true -- name: urllib3 - version: 2.2.1 - manager: conda - platform: linux-64 - dependencies: - brotli-python: '>=1.0.9' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda - hash: - md5: 08807a87fa7af10754d46f63b368e016 - sha256: d4009dcc9327684d6409706ce17656afbeae690d8522d3c9bc4df57649a352cd - category: main - optional: false -- name: urllib3 - version: 2.2.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - brotli-python: '>=1.0.9' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda - hash: - md5: 08807a87fa7af10754d46f63b368e016 - sha256: d4009dcc9327684d6409706ce17656afbeae690d8522d3c9bc4df57649a352cd - category: main - optional: false -- name: urllib3 - version: 2.2.1 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - brotli-python: '>=1.0.9' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda - hash: - md5: 08807a87fa7af10754d46f63b368e016 - sha256: d4009dcc9327684d6409706ce17656afbeae690d8522d3c9bc4df57649a352cd - category: main - optional: false -- name: utm - version: 0.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/utm-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 4864e2f5c746f45e02ec46221caccb7e - sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627 - category: core - optional: true -- name: utm - version: 0.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/utm-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 4864e2f5c746f45e02ec46221caccb7e - sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627 - category: core - optional: true -- name: utm - version: 0.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/utm-0.7.0-pyhd8ed1ab_0.tar.bz2 - hash: - md5: 4864e2f5c746f45e02ec46221caccb7e - sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627 - category: core - optional: true -- name: vc - version: '14.3' - manager: conda - platform: win-64 - dependencies: - vc14_runtime: '>=14.38.33130' - url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-hcf57466_18.conda - hash: - md5: 20e1e652a4c740fa719002a8449994a2 - sha256: 447a8d8292a7b2107dcc18afb67f046824711a652725fc0f522c368e7a7b8318 - category: main - optional: false -- name: vc14_runtime - version: 14.38.33130 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33130-h82b7239_18.conda - hash: - md5: 8be79fdd2725ddf7bbf8a27a4c1f79ba - sha256: bf94c9af4b2e9cba88207001197e695934eadc96a5c5e4cd7597e950aae3d8ff - category: main - optional: false -- name: vectormath - version: 0.2.2 - manager: conda - platform: linux-64 - dependencies: - numpy: '>=1.7' - python: '' - url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 - hash: - md5: 7a6395b244b183e9e55e606e3d68e83b - sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 - category: main - optional: false -- name: vectormath - version: 0.2.2 - manager: conda - platform: osx-64 - dependencies: - python: '' - numpy: '>=1.7' - url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 - hash: - md5: 7a6395b244b183e9e55e606e3d68e83b - sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 - category: main - optional: false -- name: vectormath - version: 0.2.2 - manager: conda - platform: win-64 - dependencies: - python: '' - numpy: '>=1.7' - url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 - hash: - md5: 7a6395b244b183e9e55e606e3d68e83b - sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 - category: main - optional: false -- name: vs2015_runtime - version: 14.38.33130 - manager: conda - platform: win-64 - dependencies: - vc14_runtime: '>=14.38.33130' - url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33130-hcb4865c_18.conda - hash: - md5: 10d42885e3ed84e575b454db30f1aa93 - sha256: a2fec221f361d6263c117f4ea6d772b21c90a2f8edc6f3eb0eadec6bfe8843db - category: main - optional: false -- name: wcwidth - version: 0.2.13 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - hash: - md5: 68f0738df502a14213624b288c60c9ad - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - category: apps - optional: true -- name: wcwidth - version: 0.2.13 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - hash: - md5: 68f0738df502a14213624b288c60c9ad - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - category: apps - optional: true -- name: wcwidth - version: 0.2.13 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - hash: - md5: 68f0738df502a14213624b288c60c9ad - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - category: apps - optional: true -- name: webencodings - version: 0.5.1 - manager: conda - platform: linux-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - hash: - md5: daf5160ff9cde3a468556965329085b9 - sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 - category: apps - optional: true -- name: webencodings - version: 0.5.1 - manager: conda - platform: osx-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - hash: - md5: daf5160ff9cde3a468556965329085b9 - sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 - category: apps - optional: true -- name: webencodings - version: 0.5.1 - manager: conda - platform: win-64 - dependencies: - python: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - hash: - md5: daf5160ff9cde3a468556965329085b9 - sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 - category: apps - optional: true -- name: websocket-client - version: 1.7.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 50ad31e07d706aae88b14a4ac9c73f23 - sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f - category: apps - optional: true -- name: websocket-client - version: 1.7.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 50ad31e07d706aae88b14a4ac9c73f23 - sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f - category: apps - optional: true -- name: websocket-client - version: 1.7.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda - hash: - md5: 50ad31e07d706aae88b14a4ac9c73f23 - sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f - category: apps - optional: true -- name: werkzeug - version: 3.0.2 - manager: conda - platform: linux-64 - dependencies: - markupsafe: '>=2.1.1' - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 96b2d2e2550ccba0f4008b4d0b4199dd - sha256: ae5744d6e3826d71826ca939436437016d14f38e3535517e160f74d392788d5d - category: apps - optional: true -- name: werkzeug - version: 3.0.2 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - markupsafe: '>=2.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 96b2d2e2550ccba0f4008b4d0b4199dd - sha256: ae5744d6e3826d71826ca939436437016d14f38e3535517e160f74d392788d5d - category: apps - optional: true -- name: werkzeug - version: 3.0.2 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - markupsafe: '>=2.1.1' - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.2-pyhd8ed1ab_0.conda - hash: - md5: 96b2d2e2550ccba0f4008b4d0b4199dd - sha256: ae5744d6e3826d71826ca939436437016d14f38e3535517e160f74d392788d5d - category: apps - optional: true -- name: wheel - version: 0.43.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda - hash: - md5: 0b5293a157c2b5cd513dd1b03d8d3aae - sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc - category: main - optional: false -- name: wheel - version: 0.43.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda - hash: - md5: 0b5293a157c2b5cd513dd1b03d8d3aae - sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc - category: main - optional: false -- name: wheel - version: 0.43.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda - hash: - md5: 0b5293a157c2b5cd513dd1b03d8d3aae - sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc - category: main - optional: false -- name: widgetsnbextension - version: 3.6.6 - manager: conda - platform: linux-64 - dependencies: - notebook: '>=4.4.1' - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.6-pyhd8ed1ab_0.conda - hash: - md5: fe79dfe7d51794d665ec3c2fdd4e47c3 - sha256: 5fb8ac32fb9d5b2860d271ae1959aa6953044f06cbe5e54d912125cca27dda3b - category: apps - optional: true -- name: widgetsnbextension - version: 3.6.6 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.7' - notebook: '>=4.4.1' - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.6-pyhd8ed1ab_0.conda - hash: - md5: fe79dfe7d51794d665ec3c2fdd4e47c3 - sha256: 5fb8ac32fb9d5b2860d271ae1959aa6953044f06cbe5e54d912125cca27dda3b - category: apps - optional: true -- name: widgetsnbextension - version: 3.6.6 - manager: conda - platform: win-64 - dependencies: - python: '>=3.7' - notebook: '>=4.4.1' - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.6-pyhd8ed1ab_0.conda - hash: - md5: fe79dfe7d51794d665ec3c2fdd4e47c3 - sha256: 5fb8ac32fb9d5b2860d271ae1959aa6953044f06cbe5e54d912125cca27dda3b - category: apps - optional: true -- name: win_inet_pton - version: 1.1.0 - manager: conda - platform: win-64 - dependencies: - __win: '' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyhd8ed1ab_6.tar.bz2 - hash: - md5: 30878ecc4bd36e8deeea1e3c151b2e0b - sha256: a11ae693a0645bf6c7b8a47bac030be9c0967d0b1924537b9ff7458e832c0511 - category: main - optional: false -- name: winpty - version: 0.4.3 - manager: conda - platform: win-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - hash: - md5: 1cee351bf20b830d991dbe0bc8cd7dfe - sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 - category: apps - optional: true -- name: xcb-util - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda - hash: - md5: 9bfac7ccd94d54fd21a0501296d60424 - sha256: 0c91d87f0efdaadd4e56a5f024f8aab20ec30f90aa2ce9e4ebea05fbc20f71ad - category: apps - optional: true -- name: xcb-util-image - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - xcb-util: '>=0.4.0,<0.5.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda - hash: - md5: 9d7bcddf49cbf727730af10e71022c73 - sha256: 92ffd68d2801dbc27afe223e04ae7e78ef605fc8575f107113c93c7bafbd15b0 - category: apps - optional: true -- name: xcb-util-keysyms - version: 0.4.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda - hash: - md5: 632413adcd8bc16b515cab87a2932913 - sha256: 8451d92f25d6054a941b962179180728c48c62aab5bf20ac10fef713d5da6a9a - category: apps - optional: true -- name: xcb-util-renderutil - version: 0.3.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda - hash: - md5: e995b155d938b6779da6ace6c6b13816 - sha256: 6987588e6fff5892056021c2ea52f7a0deefb2c7348e70d24750e2d60dabf009 - category: apps - optional: true -- name: xcb-util-wm - version: 0.4.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda - hash: - md5: 90108a432fb5c6150ccfee3f03388656 - sha256: 08ba7147c7579249b6efd33397dc1a8c2404278053165aaecd39280fee705724 - category: apps - optional: true -- name: xerces-c - version: 3.2.5 - manager: conda - platform: linux-64 - dependencies: - icu: '>=73.2,<74.0a0' - libcurl: '>=8.5.0,<9.0a0' - libgcc-ng: '>=12' - libnsl: '>=2.0.1,<2.1.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda - hash: - md5: 63b80ca78d29380fe69e69412dcbe4ac - sha256: 75d06ca406f03f653d7a3183f2a1ccfdb3a3c6c830493933ec4c3c98e06a32bb - category: core - optional: true -- name: xerces-c - version: 3.2.5 - manager: conda - platform: osx-64 - dependencies: - icu: '>=73.2,<74.0a0' - libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=15' - url: https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.2.5-hbbe9ea5_0.conda - hash: - md5: ade166000a13c81d9a75f65281e302b0 - sha256: 10487c0b28ee2303570c6d0867000587a8c36836fffd4d634d8778c494d16965 - category: core - optional: true -- name: xerces-c - version: 3.2.5 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.2.5-h63175ca_0.conda - hash: - md5: b1e07902b6bb7833db8cc4ec32f32dc7 - sha256: 21328b0442f2f86ad5bf14481ed60f56a8ebb765a68d158a57ec6f32eb55762b - category: core - optional: true -- name: xkeyboard-config - version: '2.41' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-libx11: '>=1.8.7,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda - hash: - md5: 81f740407b45e3f9047b3174fa94eb9e - sha256: 56955610c0747ea7cb026bb8aa9ef165ff41d616e89894538173b8b7dd2ee49a - category: apps - optional: true -- name: xorg-compositeproto - version: 0.4.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-compositeproto-0.4.2-h7f98852_1001.tar.bz2 - hash: - md5: 8bf27eeb636d3acce5c6cb570ba63487 - sha256: 8127541fb7ee4ba81cabd3ac464953ec928489bf01d647e5819cd7cd9428730c - category: apps - optional: true -- name: xorg-damageproto - version: 1.2.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-damageproto-1.2.1-h7f98852_1002.tar.bz2 - hash: - md5: 58c9bb067637c5a13a045a7124eeb027 - sha256: b0a62b8eedc3e1b47fbbe3bbe6011542d36867b90f9b4bf251b78109ee1f0d9b - category: apps - optional: true -- name: xorg-fixesproto - version: '5.0' - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-xextproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-h7f98852_1002.tar.bz2 - hash: - md5: 65ad6e1eb4aed2b0611855aff05e04f6 - sha256: 5d2af1b40f82128221bace9466565eca87c97726bb80bbfcd03871813f3e1876 - category: apps - optional: true -- name: xorg-inputproto - version: 2.3.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2 - hash: - md5: bcd1b3396ec6960cbc1d2855a9e60b2b - sha256: 6c8c2803de0f643f8bad16ece3f9a7259e4a49247543239c182d66d5e3a129a7 - category: apps - optional: true -- name: xorg-kbproto - version: 1.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 - hash: - md5: 4b230e8381279d76131116660f5a241a - sha256: e90b0a6a5d41776f11add74aa030f789faf4efd3875c31964d6f9cfa63a10dd1 - category: core - optional: true -- name: xorg-libice - version: 1.1.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda - hash: - md5: b462a33c0be1421532f28bfe8f4a7514 - sha256: 5aa9b3682285bb2bf1a8adc064cb63aff76ef9178769740d855abb42b0d24236 - category: core - optional: true -- name: xorg-libsm - version: 1.2.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libuuid: '>=2.38.1,<3.0a0' - xorg-libice: '>=1.1.1,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda - hash: - md5: 93ee23f12bc2e684548181256edd2cf6 - sha256: 089ad5f0453c604e18985480218a84b27009e9e6de9a0fa5f4a20b8778ede1f1 - category: core - optional: true -- name: xorg-libx11 - version: 1.8.9 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libxcb: '>=1.15,<1.16.0a0' - xorg-kbproto: '' - xorg-xextproto: '>=7.3.0,<8.0a0' - xorg-xproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-h8ee46fc_0.conda - hash: - md5: 077b6e8ad6a3ddb741fce2496dd01bec - sha256: 3e53ba247f1ad68353f18aceba5bf8ce87e3dea930de85d36946844a7658c9fb - category: core - optional: true -- name: xorg-libxau - version: 1.0.11 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda - hash: - md5: 2c80dc38fface310c9bd81b17037fee5 - sha256: 309751371d525ce50af7c87811b435c176915239fc9e132b99a25d5e1703f2d4 - category: main - optional: false -- name: xorg-libxau - version: 1.0.11 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h0dc2134_0.conda - hash: - md5: 9566b4c29274125b0266d0177b5eb97b - sha256: 8a2e398c4f06f10c64e69f56bcf3ddfa30b432201446a0893505e735b346619a - category: main - optional: false -- name: xorg-libxau - version: 1.0.11 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - m2w64-gcc-libs-core: '' - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda - hash: - md5: c46ba8712093cb0114404ae8a7582e1a - sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 - category: main - optional: false -- name: xorg-libxcomposite - version: 0.4.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-compositeproto: '' - xorg-libx11: '>=1.7.2,<2.0a0' - xorg-libxfixes: '' - xorg-xproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-h0b41bf4_1.conda - hash: - md5: ada6777364a0ea2407a1894e54779cc4 - sha256: 7c5806a8de1ce0d4e0c7aae8d29565f11fba6c6da4a787c3e09f1fcc428725a4 - category: apps - optional: true -- name: xorg-libxdamage - version: 1.1.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - xorg-damageproto: '' - xorg-libx11: '>=1.7.2,<2.0a0' - xorg-libxext: 1.3.* - xorg-libxfixes: '' - xorg-util-macros: '' - xorg-xproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.5-h7f98852_1.tar.bz2 - hash: - md5: bebd3814ec2355fab6a474b07ed73093 - sha256: 4cab878855e48669b64dd7522a518433ac83bb56fa79743d12db316326e2e39e - category: apps - optional: true -- name: xorg-libxdmcp - version: 1.1.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 - hash: - md5: be93aabceefa2fac576e971aef407908 - sha256: 4df7c5ee11b8686d3453e7f3f4aa20ceef441262b49860733066c52cfd0e4a77 - category: main - optional: false -- name: xorg-libxdmcp - version: 1.1.3 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.3-h35c211d_0.tar.bz2 - hash: - md5: 86ac76d6bf1cbb9621943eb3bd9ae36e - sha256: 485421c16f03a01b8ed09984e0b2ababdbb3527e1abf354ff7646f8329be905f - category: main - optional: false -- name: xorg-libxdmcp - version: 1.1.3 - manager: conda - platform: win-64 - dependencies: - m2w64-gcc-libs: '' - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 - hash: - md5: 46878ebb6b9cbd8afcf8088d7ef00ece - sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 - category: main - optional: false -- name: xorg-libxext - version: 1.3.4 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-libx11: '>=1.7.2,<2.0a0' - xorg-xextproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda - hash: - md5: 82b6df12252e6f32402b96dacc656fec - sha256: 73e5cfbdff41ef8a844441f884412aa5a585a0f0632ec901da035a03e1fe1249 - category: core - optional: true -- name: xorg-libxfixes - version: 5.0.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-fixesproto: '' - xorg-libx11: '>=1.7.0,<2.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h7f98852_1004.tar.bz2 - hash: - md5: e9a21aa4d5e3e5f1aed71e8cefd46b6a - sha256: 1e426a1abb774ef1dcf741945ed5c42ad12ea2dc7aeed7682d293879c3e1e4c3 - category: apps - optional: true -- name: xorg-libxi - version: 1.7.10 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-inputproto: '' - xorg-libx11: '>=1.7.0,<2.0a0' - xorg-libxext: 1.3.* - xorg-libxfixes: 5.0.* - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2 - hash: - md5: e77615e5141cad5a2acaa043d1cf0ca5 - sha256: 745c1284a96b4282fe6fe122b2643e1e8c26a7ff40b733a8f4b61357238c4e68 - category: apps - optional: true -- name: xorg-libxrandr - version: 1.5.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-libx11: '>=1.7.1,<2.0a0' - xorg-libxext: '' - xorg-libxrender: '' - xorg-randrproto: '' - xorg-renderproto: '' - xorg-xextproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.2-h7f98852_1.tar.bz2 - hash: - md5: 5b0f7da25a4556c9619c3e4b4a98ab07 - sha256: ffd075a463896ed86d9519e26dc36f754b695b9c1e1b6115d34fe138b36d8200 - category: apps - optional: true -- name: xorg-libxrender - version: 0.9.11 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - xorg-libx11: '>=1.8.6,<2.0a0' - xorg-renderproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda - hash: - md5: ed67c36f215b310412b2af935bf3e530 - sha256: 26da4d1911473c965c32ce2b4ff7572349719eaacb88a066db8d968a4132c3f7 - category: core - optional: true -- name: xorg-libxtst - version: 1.2.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - xorg-inputproto: '' - xorg-libx11: '>=1.7.1,<2.0a0' - xorg-libxext: 1.3.* - xorg-libxi: 1.7.* - xorg-recordproto: '' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.3-h7f98852_1002.tar.bz2 - hash: - md5: a220b1a513e19d5cb56c1311d44f12e6 - sha256: 9a51ae2869b9a47735539dada9d85534418a765d1461c9f91fe7564f3ee75e87 - category: apps - optional: true -- name: xorg-randrproto - version: 1.5.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-randrproto-1.5.0-h7f98852_1001.tar.bz2 - hash: - md5: 68cce654461713977dac6f9ac1bce89a - sha256: f5c7c2de3655a95153e900118959df6a50b6c104a3d7afaee3eadbf86b85fa2e - category: apps - optional: true -- name: xorg-recordproto - version: 1.14.2 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h7f98852_1002.tar.bz2 - hash: - md5: 2f835e6c386e73c6faaddfe9eda67e98 - sha256: 4b91d48fed368c83eafd03891ebfd5bae0a03adc087ebea8a680ae22da99a85f - category: apps - optional: true -- name: xorg-renderproto - version: 0.11.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 - hash: - md5: 06feff3d2634e3097ce2fe681474b534 - sha256: 38942930f233d1898594dd9edf4b0c0786f3dbc12065a0c308634c37fd936034 - category: core - optional: true -- name: xorg-util-macros - version: 1.19.3 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-util-macros-1.19.3-h7f98852_0.tar.bz2 - hash: - md5: b1780cc89cf3949f670d6ca2aa6a7e42 - sha256: 128591045b700d375de98be76f215a0b67c9d6939523b743edc0dca389cdb4be - category: apps - optional: true -- name: xorg-xextproto - version: 7.3.0 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda - hash: - md5: bce9f945da8ad2ae9b1d7165a64d0f87 - sha256: b8dda3b560e8a7830fe23be1c58cc41f407b2e20ae2f3b6901eb5842ba62b743 - category: core - optional: true -- name: xorg-xf86vidmodeproto - version: 2.3.1 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2 - hash: - md5: 3ceea9668625c18f19530de98b15d5b0 - sha256: 43398aeacad5b8753b7a1c12cb6bca36124e0c842330372635879c350c430791 - category: apps - optional: true -- name: xorg-xproto - version: 7.0.31 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.3.0' - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 - hash: - md5: b4a4381d54784606820704f7b5f05a15 - sha256: f197bb742a17c78234c24605ad1fe2d88b1d25f332b75d73e5ba8cf8fbc2a10d - category: core - optional: true -- name: xz - version: 5.2.6 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - hash: - md5: 2161070d867d1b1204ea749c8eec4ef0 - sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 - category: main - optional: false -- name: xz - version: 5.2.6 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - hash: - md5: a72f9d4ea13d55d745ff1ed594747f10 - sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 - category: main - optional: false -- name: xz - version: 5.2.6 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15' - vs2015_runtime: '>=14.16.27033' - url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - hash: - md5: 515d77642eaa3639413c6b1bc3f94219 - sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 - category: main - optional: false -- name: yaml - version: 0.2.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=9.4.0' - url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - hash: - md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae - sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 - category: core - optional: true -- name: yaml - version: 0.2.5 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 - hash: - md5: d7e08fcf8259d742156188e8762b4d20 - sha256: 5301417e2c8dea45b401ffee8df3957d2447d4ce80c83c5ff151fc6bfe1c4148 - category: core - optional: true -- name: yaml - version: 0.2.5 - manager: conda - platform: win-64 - dependencies: - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - hash: - md5: adbfb9f45d1004a26763652246a33764 - sha256: 4e2246383003acbad9682c7c63178e2e715ad0eb84f03a8df1fbfba455dfedc5 - category: core - optional: true -- name: zarr - version: 2.14.2 - manager: conda - platform: linux-64 - dependencies: - asciitree: '' - fasteners: '' - numcodecs: '>=0.10.0' - numpy: '>=1.7' - python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda - hash: - md5: 0c5776fe65a12a421d7ddf90411a6c3f - sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f - category: core - optional: true -- name: zarr - version: 2.14.2 - manager: conda - platform: osx-64 - dependencies: - fasteners: '' - asciitree: '' - python: '>=3.5' - numpy: '>=1.7' - numcodecs: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda - hash: - md5: 0c5776fe65a12a421d7ddf90411a6c3f - sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f - category: core - optional: true -- name: zarr - version: 2.14.2 - manager: conda - platform: win-64 - dependencies: - fasteners: '' - asciitree: '' - python: '>=3.5' - numpy: '>=1.7' - numcodecs: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda - hash: - md5: 0c5776fe65a12a421d7ddf90411a6c3f - sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f - category: core - optional: true -- name: zeromq - version: 4.3.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libsodium: '>=1.0.18,<1.0.19.0a0' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_1.conda - hash: - md5: 7fc9d3288d2420bb3637647621018000 - sha256: 3bec658f5c23abf5e200d98418add7a20ff7b45c928ad4560525bef899496256 - category: apps - optional: true -- name: zeromq - version: 4.3.5 - manager: conda - platform: osx-64 - dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' - libsodium: '>=1.0.18,<1.0.19.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/zeromq-4.3.5-h93d8f39_0.conda - hash: - md5: 4c055e46b394be36681fe476c1e2ee6e - sha256: 19be553b3cc8352b6e842134b8de66ae39fcae80bc575c203076370faab6009c - category: apps - optional: true -- name: zeromq - version: 4.3.4 - manager: conda - platform: win-64 - dependencies: - libsodium: '>=1.0.18,<1.0.19.0a0' - vc: '>=14.1,<15.0a0' - vs2015_runtime: '>=14.16.27012' - url: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.4-h0e60522_1.tar.bz2 - hash: - md5: e1aff0583dda5fb917eb3d2c1025aa80 - sha256: 0489cc6c3bff50620879890431d7142fd6e66b7770ddc6f2d7852094471c0d6c - category: apps - optional: true -- name: zict - version: 3.0.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: cf30c2c15b82aacb07f9c09e28ff2275 - sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5 - category: core - optional: true -- name: zict - version: 3.0.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: cf30c2c15b82aacb07f9c09e28ff2275 - sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5 - category: core - optional: true -- name: zict - version: 3.0.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda - hash: - md5: cf30c2c15b82aacb07f9c09e28ff2275 - sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5 - category: core - optional: true -- name: zipp - version: 3.17.0 - manager: conda - platform: linux-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - hash: - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - category: core - optional: true -- name: zipp - version: 3.17.0 - manager: conda - platform: osx-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - hash: - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - category: core - optional: true -- name: zipp - version: 3.17.0 - manager: conda - platform: win-64 - dependencies: - python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - hash: - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - category: core - optional: true -- name: zlib - version: 1.2.13 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libzlib: 1.2.13 - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda - hash: - md5: 68c34ec6149623be41a1933ab996a209 - sha256: 9887a04d7e7cb14bd2b52fa01858f05a6d7f002c890f618d9fcd864adbfecb1b - category: core - optional: true -- name: zlib - version: 1.2.13 - manager: conda - platform: osx-64 - dependencies: - libzlib: 1.2.13 - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda - hash: - md5: 75a8a98b1c4671c5d2897975731da42d - sha256: d1f4c82fd7bd240a78ce8905e931e68dca5f523c7da237b6b63c87d5625c5b35 - category: core - optional: true -- name: zlib - version: 1.2.13 - manager: conda - platform: win-64 - dependencies: - libzlib: 1.2.13 - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/zlib-1.2.13-hcfcfb64_5.conda - hash: - md5: a318e8622e11663f645cc7fa3260f462 - sha256: 0f91b719c7558046bcd37fdc7ae4b9eb2b7a8e335beb8b59ae7ccb285a46aa46 - category: core - optional: true -- name: zlib-ng - version: 2.0.7 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda - hash: - md5: 49e8329110001f04923fe7e864990b0c - sha256: 6b3a22b7cc219e8d83f16c1ceba67aa51e0b7e3bcc4a647b97a0a510559b0477 - category: main - optional: false -- name: zlib-ng - version: 2.0.7 - manager: conda - platform: osx-64 - dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - hash: - md5: 813b5ad3ba92b75b84f40602b6d34ffb - sha256: 701bf17f3e22c7ba24ca547ccf4b2b5b4b58eda579ddaf68c0571427b10aa366 - category: main - optional: false -- name: zlib-ng - version: 2.0.7 - manager: conda - platform: win-64 - dependencies: - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vs2015_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda - hash: - md5: c72bb979d406650d3a78743ff888c451 - sha256: 61a4e4c209f04d3f426213a187686262ebc2dccac9a97a0743c2ebbf6e3e3dd8 - category: main - optional: false -- name: zstd - version: 1.5.5 - manager: conda - platform: linux-64 - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda - hash: - md5: 04b88013080254850d6c01ed54810589 - sha256: 607cbeb1a533be98ba96cf5cdf0ddbb101c78019f1fda063261871dad6248609 - category: main - optional: false -- name: zstd - version: 1.5.5 - manager: conda - platform: osx-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda - hash: - md5: 80abc41d0c48b82fe0f04e7f42f5cb7e - sha256: d54e31d3d8de5e254c0804abd984807b8ae5cd3708d758a8bf1adff1f5df166c - category: main - optional: false -- name: zstd - version: 1.5.5 - manager: conda - platform: win-64 - dependencies: - libzlib: '>=1.2.13,<1.3.0a0' - ucrt: '>=10.0.20348.0' - vc: '>=14.2,<15' - vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda - hash: - md5: 792bb5da68bf0a6cac6a6072ecb8dbeb - sha256: d540dd56c5ec772b60e4ce7d45f67f01c6614942225885911964ea1e70bb99e3 - category: main - optional: false -- name: geoh5py - version: 0.8.0 - manager: pip - platform: linux-64 - dependencies: - pillow: '>=10.0.1,<11.0.0' - h5py: '>=3.2.1,<4.0.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/9e/2b/61e9fdff9c433be7f0d3239b37d1cd2c2c1427eb1915f84d97b9996c35c3/geoh5py-0.8.0-py3-none-any.whl - hash: - sha256: 40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - category: main - optional: false -- name: geoh5py - version: 0.8.0 - manager: pip - platform: osx-64 - dependencies: - pillow: '>=10.0.1,<11.0.0' - h5py: '>=3.2.1,<4.0.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/9e/2b/61e9fdff9c433be7f0d3239b37d1cd2c2c1427eb1915f84d97b9996c35c3/geoh5py-0.8.0-py3-none-any.whl - hash: - sha256: 40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - category: main - optional: false -- name: geoh5py - version: 0.8.0 - manager: pip - platform: win-64 - dependencies: - pillow: '>=10.0.1,<11.0.0' - h5py: '>=3.2.1,<4.0.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/9e/2b/61e9fdff9c433be7f0d3239b37d1cd2c2c1427eb1915f84d97b9996c35c3/geoh5py-0.8.0-py3-none-any.whl - hash: - sha256: 40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - category: main - optional: false -- name: las-geoh5 - version: 0.1.0 - manager: pip - platform: linux-64 - dependencies: - geoh5py: '>=0.8.0rc3,<0.9.0' - lasio: '>=0.31,<0.32' - tqdm: '>=4.64.0,<5.0.0' - url: https://files.pythonhosted.org/packages/e5/ec/f6c74d4c718e7afa23c4291789cf7b8d1d60b5c378120caf0cfbc094861c/las_geoh5-0.1.0-py3-none-any.whl - hash: - sha256: 547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - category: main - optional: false -- name: las-geoh5 - version: 0.1.0 - manager: pip - platform: osx-64 - dependencies: - geoh5py: '>=0.8.0rc3,<0.9.0' - lasio: '>=0.31,<0.32' - tqdm: '>=4.64.0,<5.0.0' - url: https://files.pythonhosted.org/packages/e5/ec/f6c74d4c718e7afa23c4291789cf7b8d1d60b5c378120caf0cfbc094861c/las_geoh5-0.1.0-py3-none-any.whl - hash: - sha256: 547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - category: main - optional: false -- name: las-geoh5 - version: 0.1.0 - manager: pip - platform: win-64 - dependencies: - geoh5py: '>=0.8.0rc3,<0.9.0' - lasio: '>=0.31,<0.32' - tqdm: '>=4.64.0,<5.0.0' - url: https://files.pythonhosted.org/packages/e5/ec/f6c74d4c718e7afa23c4291789cf7b8d1d60b5c378120caf0cfbc094861c/las_geoh5-0.1.0-py3-none-any.whl - hash: - sha256: 547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - category: main - optional: false -- name: lasio - version: '0.31' - manager: pip - platform: linux-64 - dependencies: - numpy: '*' - url: https://files.pythonhosted.org/packages/62/70/a73c7cefe343162b4085645dacf2c236c0870d348854d2a226ba84f90cab/lasio-0.31-py2.py3-none-any.whl - hash: - sha256: 30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - category: main - optional: false -- name: lasio - version: '0.31' - manager: pip - platform: osx-64 - dependencies: - numpy: '*' - url: https://files.pythonhosted.org/packages/62/70/a73c7cefe343162b4085645dacf2c236c0870d348854d2a226ba84f90cab/lasio-0.31-py2.py3-none-any.whl - hash: - sha256: 30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - category: main - optional: false -- name: lasio - version: '0.31' - manager: pip - platform: win-64 - dependencies: - numpy: '*' - url: https://files.pythonhosted.org/packages/62/70/a73c7cefe343162b4085645dacf2c236c0870d348854d2a226ba84f90cab/lasio-0.31-py2.py3-none-any.whl - hash: - sha256: 30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - category: main - optional: false -- name: mira-omf - version: 3.1.0 - manager: pip - platform: linux-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - properties: '>=0.6.0,<0.7.0' - pypng: '>=0.20220715,<0.20220716' - six: '>=1.16,<2.0' - vectormath: '>=0.2.0,<0.3.0' - url: https://files.pythonhosted.org/packages/d0/fa/30e20459a49eaf91a6a23b2f72a50bef450ab11e4f1e575caa936742e6fd/mira_omf-3.1.0-py3-none-any.whl - hash: - sha256: 626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - category: main - optional: false -- name: mira-omf - version: 3.1.0 - manager: pip - platform: osx-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - properties: '>=0.6.0,<0.7.0' - pypng: '>=0.20220715,<0.20220716' - six: '>=1.16,<2.0' - vectormath: '>=0.2.0,<0.3.0' - url: https://files.pythonhosted.org/packages/d0/fa/30e20459a49eaf91a6a23b2f72a50bef450ab11e4f1e575caa936742e6fd/mira_omf-3.1.0-py3-none-any.whl - hash: - sha256: 626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - category: main - optional: false -- name: mira-omf - version: 3.1.0 - manager: pip - platform: win-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - properties: '>=0.6.0,<0.7.0' - pypng: '>=0.20220715,<0.20220716' - six: '>=1.16,<2.0' - vectormath: '>=0.2.0,<0.3.0' - url: https://files.pythonhosted.org/packages/d0/fa/30e20459a49eaf91a6a23b2f72a50bef450ab11e4f1e575caa936742e6fd/mira_omf-3.1.0-py3-none-any.whl - hash: - sha256: 626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - category: main - optional: false -- name: mira-simpeg - version: 0.19.0.dev7 - manager: pip - platform: linux-64 - dependencies: - discretize: '>=0.8.0' - empymod: '>=2.0.0' - geoh5py: '*' - numpy: '>=1.20' - pandas: '*' - pymatsolver: '>=0.2' - scikit-learn: '>=1.2' - scipy: '>=1.8.0' - url: https://files.pythonhosted.org/packages/a6/a1/fed04083345fde74d6f7012dd21c7e8f91bd98fedc17b1e5e182623844fc/mira_simpeg-0.19.0.dev7-py2.py3-none-any.whl - hash: - sha256: d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - category: core - optional: true -- name: mira-simpeg - version: 0.19.0.dev7 - manager: pip - platform: osx-64 - dependencies: - discretize: '>=0.8.0' - empymod: '>=2.0.0' - geoh5py: '*' - numpy: '>=1.20' - pandas: '*' - pymatsolver: '>=0.2' - scikit-learn: '>=1.2' - scipy: '>=1.8.0' - url: https://files.pythonhosted.org/packages/a6/a1/fed04083345fde74d6f7012dd21c7e8f91bd98fedc17b1e5e182623844fc/mira_simpeg-0.19.0.dev7-py2.py3-none-any.whl - hash: - sha256: d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - category: core - optional: true -- name: mira-simpeg - version: 0.19.0.dev7 - manager: pip - platform: win-64 - dependencies: - discretize: '>=0.8.0' - empymod: '>=2.0.0' - geoh5py: '*' - numpy: '>=1.20' - pandas: '*' - pymatsolver: '>=0.2' - scikit-learn: '>=1.2' - scipy: '>=1.8.0' - url: https://files.pythonhosted.org/packages/a6/a1/fed04083345fde74d6f7012dd21c7e8f91bd98fedc17b1e5e182623844fc/mira_simpeg-0.19.0.dev7-py2.py3-none-any.whl - hash: - sha256: d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - category: core - optional: true -- name: param-sweeps - version: 0.1.6 - manager: pip - platform: linux-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/08/5d/1b1b866e01ed83e1a973da701f6ce0c9614ebdf27172a79f43e22b639717/param_sweeps-0.1.6-py3-none-any.whl - hash: - sha256: d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - category: main - optional: false -- name: param-sweeps - version: 0.1.6 - manager: pip - platform: osx-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/08/5d/1b1b866e01ed83e1a973da701f6ce0c9614ebdf27172a79f43e22b639717/param_sweeps-0.1.6-py3-none-any.whl - hash: - sha256: d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - category: main - optional: false -- name: param-sweeps - version: 0.1.6 - manager: pip - platform: win-64 - dependencies: - geoh5py: '>=0.8.0,<0.9.0' - numpy: '>=1.23.5,<1.24.0' - url: https://files.pythonhosted.org/packages/08/5d/1b1b866e01ed83e1a973da701f6ce0c9614ebdf27172a79f43e22b639717/param_sweeps-0.1.6-py3-none-any.whl - hash: - sha256: d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - category: main - optional: false -- name: simpeg-archive - version: 0.11.0.dev6 - manager: pip - platform: linux-64 - dependencies: - discretize: '*' - numpy: '>=1.7' - properties: '>=0.3.1b2' - pymatsolver: '>=0.1.1' - scipy: '>=0.13' - url: https://files.pythonhosted.org/packages/ce/bf/835bfe4f5b90a9484b5ab434d6b0295bc9c8cc44d4c30c8a70cad61855a3/simpeg_archive-0.11.0.dev6-py2.py3-none-any.whl - hash: - sha256: ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - category: core - optional: true -- name: simpeg-archive - version: 0.11.0.dev6 - manager: pip - platform: osx-64 - dependencies: - discretize: '*' - numpy: '>=1.7' - properties: '>=0.3.1b2' - pymatsolver: '>=0.1.1' - scipy: '>=0.13' - url: https://files.pythonhosted.org/packages/ce/bf/835bfe4f5b90a9484b5ab434d6b0295bc9c8cc44d4c30c8a70cad61855a3/simpeg_archive-0.11.0.dev6-py2.py3-none-any.whl - hash: - sha256: ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - category: core - optional: true -- name: simpeg-archive - version: 0.11.0.dev6 - manager: pip - platform: win-64 - dependencies: - discretize: '*' - numpy: '>=1.7' - properties: '>=0.3.1b2' - pymatsolver: '>=0.1.1' - scipy: '>=0.13' - url: https://files.pythonhosted.org/packages/ce/bf/835bfe4f5b90a9484b5ab434d6b0295bc9c8cc44d4c30c8a70cad61855a3/simpeg_archive-0.11.0.dev6-py2.py3-none-any.whl - hash: - sha256: ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - category: core - optional: true diff --git a/devtools/add_url_tag_sha256.py b/devtools/add_url_tag_sha256.py deleted file mode 100644 index 60505e11f..000000000 --- a/devtools/add_url_tag_sha256.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -""" -Patch pyproject.toml with the computed sha256 for pip dependencies with a tag URL. - -Usage: at the root of the project: -> python devtools/add_url_tag_sha256.py -""" - -from __future__ import annotations - -import re -import subprocess -import tempfile -import warnings -from pathlib import Path -from urllib import request - -_url_filename_re = re.compile(".*/([^/]*)") - - -def compute_sha256(url: str, base_name: str | None = None) -> str: - filename_match = _url_filename_re.match(url) - assert filename_match - - filename = filename_match[1] - if base_name: - filename = f"{base_name}-{filename}" - with tempfile.TemporaryDirectory() as tmpdirname: - copy = Path(tmpdirname) / filename - print(f"# Fetching {url} ...") - request.urlretrieve(url, str(copy)) - return ( - subprocess.check_output(["pip", "hash", "--algorithm", "sha256", copy]) - .decode("utf-8") - .splitlines()[1] - .split(":")[1] - ) - - -def patch_pyproject_toml() -> None: - pyproject = Path("pyproject.toml") - assert pyproject.is_file() - - if has_git_branches(pyproject): - warnings.warn( - f"{pyproject} contains git branches: not computing the sha256 for any git dependency." - ) - return - - tag_url_re = re.compile( - r"""^(\s*[^#]\S+\s*=\s*{\s*url\s*=\s*)"(.*/archive/refs/tags/.*)#sha256=\w*"(.*}.*)""" - ) - pyproject_sha = Path("pyproject-sha.toml") - with open(pyproject_sha, mode="w", encoding="utf-8") as patched: - with open(pyproject, encoding="utf-8") as original: - for line in original: - match = tag_url_re.match(line) - if not match: - patched.write(line) - else: - line_start = match[1] - package_name = line_start.strip() - url = match[2] - line_end = match[3] - sha = compute_sha256(url, package_name) - patched_line = f"""{line_start}"{url}#sha256={sha}"{line_end}\n""" - patched.write(patched_line) - - pyproject_sha.replace(pyproject) - - -def has_git_branches(pyproject: Path) -> bool: - branch_url_re = re.compile( - r"""^(\s*[^#]\S+\s*=\s*{\s*url\s*=\s*)"(.*/archive/refs/heads/.*)\S*"(.*}.*)""" - ) - with open(pyproject, encoding="utf-8") as f: - for line in f: - match = branch_url_re.match(line) - if match: - return True - return False - - -if __name__ == "__main__": - patch_pyproject_toml() diff --git a/devtools/check-copyright.py b/devtools/check-copyright.py deleted file mode 100644 index 695d0be1f..000000000 --- a/devtools/check-copyright.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import re -import sys -from datetime import date - -if __name__ == "__main__": - current_year = date.today().year - copyright_re = re.compile( - rf"\bcopyright \(c\) (:?\d{{4}}-|)\b{current_year}\b", re.IGNORECASE - ) - files = sys.argv[1:] - max_lines = 10 - report_files = [] - for f in files: - with open(f, encoding="utf-8") as file: - count = 0 - has_dated_copyright = False - for line in file: - count += 1 - if count >= max_lines and not ( - f.endswith("README.rst") or f.endswith("README-dev.rst") - ): - break - if re.search(copyright_re, line): - has_dated_copyright = True - break - - if not has_dated_copyright: - report_files.append(f) - - if len(report_files) > 0: - for f in report_files: - sys.stderr.write(f"{f}: No copyright or invalid year\n") - exit(1) - -# readonly CURRENT_YEAR=$(date +"%Y") - -# if ! grep -e "Copyright (c) .*$CURRENT_YEAR" $(head -10 $f) 2>&1 1>/dev/null; then -# echo "File '$f' has no copyright or an invalid year" -# exit 1 -# fi diff --git a/devtools/git_message_hook.py b/devtools/git_message_hook.py deleted file mode 100644 index 6ce90edad..000000000 --- a/devtools/git_message_hook.py +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -"""Some Git pre-commit hooks implementations.""" - -from __future__ import annotations - -import argparse -import re -import shlex -import subprocess -import sys - - -def get_jira_id(text) -> str: - """Detect a JIRA issue ID at the begging of the given text. - - :return: the JIRA issue ID if found, else empty string - """ - - class JiraPattern: - """Internal class that encapsulates the regular expression for the JIRA pattern, - making sure it gets compiled only once.""" - - __pattern = re.compile( - r"(?:GEOPY|GI|GA|GMS|VPem1D|VPem3D|VPmg|UBCGIF|LICMGR)-\d+" - ) - - @staticmethod - def get(): - """:return: the compiled regular expression for the JIRA pattern""" - return JiraPattern.__pattern - - # use re.match() rather than re.search() to enforce the JIRA reference to be at the beginning - match = re.match(JiraPattern.get(), text.strip()) - return match.group(0) if match else "" - - -def get_branch_name() -> str | None: - """:return: the name of the current branch""" - - git_proc = subprocess.run( - shlex.split("git branch --list"), - stdout=subprocess.PIPE, - text=True, - ) - - # cannot use HEAD during rebase - # git_proc = subprocess.run( - # shlex.split('git symbolic-ref --short HEAD'), stdout=subprocess.PIPE, universal_newlines=True - # ) - # Note: version above suggested by Atlassian. Could also use: git rev-parse --abbrev-ref HEAD - - if git_proc.returncode != 0: - return None - - current_branch = None - # current branch is prefixed by '*' - for line in git_proc.stdout.splitlines(): - stripped = line.strip() - if stripped and stripped[0] == "*": - current_branch = stripped[1:] - break - assert current_branch is not None - - class RebasingPattern: - """Internal class that encapsulates the regular expression for the rebasing - message pattern, making sure it gets compiled only once.""" - - __pattern = re.compile(r"\(.*\s(\S+)\s*\)") - - @staticmethod - def get(): - """:return: the compiled regular expression for the Rebasing pattern""" - return RebasingPattern.__pattern - - match = re.match(RebasingPattern.get(), current_branch.strip()) - if match: - return match.group(1) - - return current_branch - - -def check_commit_message(filepath: str) -> tuple[bool, str]: - """Check if the branch name or the commit message starts with a reference to JIRA, - and if the message meets the minimum required length for the summary line. - - The JIRA reference has to be at the beginning of the branch name, or of the commit - message. - :return: a tuple telling whether the commit message is valid or not, and an error - message (empty in case the message is valid). - """ - - branch_jira_id = "" - branch_name = get_branch_name() - if branch_name: - branch_jira_id = get_jira_id(branch_name) - - message_jira_id = "" - first_line = None - with open(filepath) as message_file: - for line in message_file: - if not line.startswith("#") and len(line.strip()) > 0: - # test only the first non-comment line that is not empty - # (should we reject messages with empty first line?) - first_line = line - message_jira_id = get_jira_id(first_line) - break - assert first_line is not None - - if not branch_jira_id and not ( - message_jira_id or first_line.strip().lower().startswith("merge") - ): - return ( - False, - "Either the branch name or the commit message must start with a JIRA ID.", - ) - - if branch_jira_id and message_jira_id and branch_jira_id != message_jira_id: - return ( - False, - "Different JIRA ID in commit message %s and in branch name %s." - % (message_jira_id, branch_jira_id), - ) - - stripped_message_line = "" - if first_line: - stripped_message_line = first_line.strip() - if message_jira_id: - stripped_message_line = stripped_message_line[ - len(message_jira_id) + 1 : - ].strip() - - min_required_length = 10 - if len(stripped_message_line) < min_required_length: - return ( - False, - "First line of commit message must be at least %s characters long, " - "beyond the JIRA ID." % min_required_length, - ) - - return True, "" - - -def check_commit_msg(filepath: str) -> None: - """To be used a the Git commit-msg hook. - - Exit with non-0 status if the commit message is deemed invalid. - """ - - (is_valid, error_message) = check_commit_message(filepath) - if not is_valid: - print( - """commit-msg hook: **ERROR** %s - Message has been saved to %s.""" - % (error_message, filepath) - ) - sys.exit(1) - - -def prepare_commit_msg(filepath: str, source: str | None = None) -> None: - """To be used a the Git prepare-commit-msg hook. - - Will add the JIRA ID found in the branch name in case it is missing from the commit - message. - """ - - branch_jira_id = "" - branch_name = get_branch_name() - if branch_name: - branch_jira_id = get_jira_id(branch_name) - - if not branch_jira_id: - return - - if source not in [None, "message", "template"]: - return - - with open( - filepath, - "r+", - ) as message_file: - message_has_jira_id = False - message_lines = message_file.readlines() - for line_index, line_content in enumerate(message_lines): - if not line_content.startswith("#"): - # test only the first non-comment line - message_jira_id = get_jira_id(line_content) - if not message_jira_id: - message_lines[line_index] = branch_jira_id + ": " + line_content - message_has_jira_id = True - break - - if not message_has_jira_id: - # message is empty or all lines are comments: insert JIRA ID at the very beginning - message_lines.insert(0, branch_jira_id + ": ") - - message_file.seek(0, 0) - message_file.write("".join(message_lines)) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("msg_file", help="the message file") - group = parser.add_mutually_exclusive_group(required=True) - group.add_argument( - "-p", "--prepare", action="store_true", help="prepare the commit message" - ) - group.add_argument( - "-c", - "--check", - action="store_true", - help="check if the commit message is valid", - ) - parser.add_argument("args", nargs=argparse.REMAINDER) - - args = parser.parse_args() - if args.prepare: - prepare_commit_msg(args.msg_file, *args.args) - elif args.check: - check_commit_msg(args.msg_file) diff --git a/devtools/images/pycharm-add_Python_interpreter.png b/devtools/images/pycharm-add_Python_interpreter.png new file mode 100644 index 000000000..f2c279577 Binary files /dev/null and b/devtools/images/pycharm-add_Python_interpreter.png differ diff --git a/devtools/images/pycharm-dialog_edit_test_run_config.png b/devtools/images/pycharm-dialog_edit_test_run_config.png new file mode 100644 index 000000000..b230bd1b6 Binary files /dev/null and b/devtools/images/pycharm-dialog_edit_test_run_config.png differ diff --git a/devtools/images/pycharm-list_all_conda_packages.png b/devtools/images/pycharm-list_all_conda_packages.png new file mode 100644 index 000000000..f484e30b1 Binary files /dev/null and b/devtools/images/pycharm-list_all_conda_packages.png differ diff --git a/devtools/images/pycharm-mark_directory_as_tests.png b/devtools/images/pycharm-mark_directory_as_tests.png new file mode 100644 index 000000000..71d0d3bad Binary files /dev/null and b/devtools/images/pycharm-mark_directory_as_tests.png differ diff --git a/devtools/images/pycharm-menu_modify_test_run_config.png b/devtools/images/pycharm-menu_modify_test_run_config.png new file mode 100644 index 000000000..75246ad29 Binary files /dev/null and b/devtools/images/pycharm-menu_modify_test_run_config.png differ diff --git a/devtools/images/pycharm-set_conda_env_as_interpreter.png b/devtools/images/pycharm-set_conda_env_as_interpreter.png new file mode 100644 index 000000000..5815a9b37 Binary files /dev/null and b/devtools/images/pycharm-set_conda_env_as_interpreter.png differ diff --git a/devtools/images/pycharm-test_results.png b/devtools/images/pycharm-test_results.png new file mode 100644 index 000000000..73ab273dc Binary files /dev/null and b/devtools/images/pycharm-test_results.png differ diff --git a/devtools/run_conda_lock.bat b/devtools/run_conda_lock.bat deleted file mode 100644 index bb1c0bec9..000000000 --- a/devtools/run_conda_lock.bat +++ /dev/null @@ -1,23 +0,0 @@ -:: Creates conda locked environments from pyproject.toml -:: (see run_conda_lock.py for details). -:: -:: The script has no parameters, and can be executed by double-clicking -:: the .bat file from Windows Explorer. -:: -:: Usage: run_conda_lock.bat - -@echo off -setlocal EnableDelayedExpansion - -set project_dir=%~dp0.. -cd %project_dir% -call get_conda_exec.bat -if !errorlevel! neq 0 ( - pause - exit /B !errorlevel! -) - -call !MY_CONDA_EXE! activate && python devtools\run_conda_lock.py - -pause -cmd /k diff --git a/devtools/run_conda_lock.py b/devtools/run_conda_lock.py deleted file mode 100644 index 25a64fd3f..000000000 --- a/devtools/run_conda_lock.py +++ /dev/null @@ -1,446 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -""" -Creates cross-platform lock files for each python version and per-platform conda environment files. - -Cross-platform lock files are created at the root of the project. -Per-platform conda environment files with and without dev dependencies, are placed under the `environments` sub-folder. - -Usage: from the conda base environment, at the root of the project: -> python devtools/run_conda_lock.py - -To prepare the conda base environment, see devtools/setup-conda-base.bat -""" - -from __future__ import annotations - -import os -import re -import subprocess -import tempfile -from collections.abc import Generator -from contextlib import contextmanager -from pathlib import Path - -import networkx as nx -import tomli as toml -from add_url_tag_sha256 import patch_pyproject_toml -from ruamel.yaml import YAML - -env_file_variables_section_ = """ -variables: - KMP_WARNINGS: 0 -""" - -_environments_folder = Path("environments") - -_python_versions = ["3.10", "3.9"] - - -@contextmanager -def print_execution_time(name: str = "") -> Generator: - from datetime import datetime - - start = datetime.now() - try: - yield - finally: - duration = datetime.now() - start - message_prefix = f" {name} -" if name else "" - print(f"--{message_prefix} execution time: {duration}") - - -def create_multi_platform_lock(py_ver: str, platform: str | None = None) -> Path: - print(f"# Creating multi-platform lock file for Python {py_ver} ...") - platform_option = f"-p {platform}" if platform else "" - with print_execution_time(f"conda-lock for {py_ver}"): - subprocess.run( - ( - "conda-lock lock --no-mamba --micromamba -f pyproject.toml" - f" -f {_environments_folder}/env-python-{py_ver}.yml {platform_option}" - f" --lockfile conda-py-{py_ver}-lock.yml" - ), - env=dict(os.environ, PYTHONUTF8="1"), - shell=True, - check=True, - stderr=subprocess.STDOUT, - ) - file = Path(f"conda-py-{py_ver}-lock.yml") - patch_absolute_path(file) - return file - - -def per_platform_env( - py_ver: str, extras: list[str] | None = None, dev=False, suffix="" -) -> None: - if extras is None: - extras = [] - print( - f"# Creating per platform Conda env files for Python {py_ver} ({'WITH' if dev else 'NO'} dev dependencies) ... " - ) - dev_dep_option = "--dev-dependencies" if dev else "--no-dev-dependencies" - dev_suffix = "-dev" if dev else "" - extras_option = " ".join(f"--extras {i}" for i in extras) if extras else "" - subprocess.run( - ( - f"conda-lock render {dev_dep_option} {extras_option} -k env" - f" --filename-template {_environments_folder}/conda-py-{py_ver}-{{platform}}{dev_suffix}{suffix}.lock conda-py-{py_ver}-lock.yml" - ), - env=dict(os.environ, PYTHONUTF8="1"), - shell=True, - check=True, - stderr=subprocess.STDOUT, - ) - - -def finalize_per_platform_envs(py_ver: str, dev=False, suffix="") -> None: - dev_suffix = "-dev" if dev else "" - platform_glob = "*-64" - for lock_env_file in _environments_folder.glob( - f"conda-py-{py_ver}-{platform_glob}{dev_suffix}{suffix}.lock.yml" - ): - LockFilePatcher(lock_env_file).patch() - - -def patch_absolute_path(file: Path) -> None: - """ - Patch the given file to remove reference with absolute file path. - """ - - abs_path_base = str(_environments_folder.absolute().parent) + os.sep - - with tempfile.TemporaryDirectory(dir=str(file.parent)) as tmpdirname: - patched_file = Path(tmpdirname) / file.name - with open(patched_file, mode="w", encoding="utf-8") as patched: - with open(file, encoding="utf-8") as f: - for line in f: - patched.write( - line.replace(abs_path_base, "").replace( - _environments_folder.name + os.sep, - _environments_folder.name + "/", - ) - ) - os.replace(patched_file, file) - - -class LockFilePatcher: - """ - Patch the given file to remove hash information on pip dependency if any hash is missing. - - As soon as one hash is specified, pip requires all hashes to be specified. - """ - - def __init__(self, lock_file: Path) -> None: - self.lock_file = lock_file - self.pip_section_re = re.compile(r"^\s*- pip:\s*$") - self.sha_re = re.compile(r"(.*)(\s--hash|#sha256)=\S*") - - def add_variables_section(self): - """ - Add the variables section to the lock file. - """ - - with open(self.lock_file, mode="a", encoding="utf-8") as f: - f.write(env_file_variables_section_) - - def patch_none_hash(self) -> None: - """ - Patch the lock file to remove --hash=md5:None and #sha25=None - - - pip does not want hash with md5 (but accepts sha256 or others). - - #sha256=None will conflict with the actual sha256 - """ - - none_hash_re = re.compile( - r"(.*)(?:\s--hash=(?:md5:|sha256:)|#sha256=)(?:None|)\s*$" - ) - with tempfile.TemporaryDirectory(dir=str(self.lock_file.parent)) as tmpdirname: - patched_file = Path(tmpdirname) / self.lock_file.name - with open(patched_file, mode="w", encoding="utf-8") as patched, open( - self.lock_file, encoding="utf-8" - ) as f: - for line in f: - match = none_hash_re.match(line) - if not match: - patched.write(line) - else: - patched.write(f"{match[1]}\n") - patched_file.replace(self.lock_file) - - def is_missing_pip_hash(self) -> bool: - """ - Check if the lock file contains pip dependencies with missing hash. - """ - - pip_dependency_re = re.compile(r"^\s*- (\S+) (@|===) .*") - with open(self.lock_file, encoding="utf-8") as file: - while not self.pip_section_re.match(file.readline()): - pass - - for line in file: - if pip_dependency_re.match(line) and not self.sha_re.match(line): - return True - return False - - def remove_pip_hashes(self) -> None: - """ - Remove all hashes from the pip dependencies. - """ - - with tempfile.TemporaryDirectory(dir=str(self.lock_file.parent)) as tmpdirname: - patched_file = Path(tmpdirname) / self.lock_file.name - with open(patched_file, mode="w", encoding="utf-8") as patched, open( - self.lock_file, encoding="utf-8" - ) as f: - for line in f: - patched_line = self.sha_re.sub(r"\1", line) - patched.write(patched_line) - patched_file.replace(self.lock_file) - - def patch(self, force_no_pip_hash=False) -> None: - """ - Apply all patches to the lock file. - """ - - self.patch_none_hash() - if force_no_pip_hash or self.is_missing_pip_hash(): - self.remove_pip_hashes() - self.add_variables_section() - - -def config_conda() -> None: - subprocess.run( - "conda config --set channel_priority strict", - shell=True, - check=True, - stderr=subprocess.STDOUT, - ) - - -def get_multiplatform_lock_files() -> list[Path]: - return list(Path().glob("*-lock.yml")) - - -def delete_multiplatform_lock_files() -> None: - for f in get_multiplatform_lock_files(): - f.unlink() - - -def recreate_multiplatform_lock_files() -> list[Path]: - delete_multiplatform_lock_files() - - # also delete per-platform lock files to make it obvious that - # they must be cre-created after the multi-platform files were updated - delete_per_platform_lock_files() - - non_optional_deps = non_optional_dependencies() - created_files: list[Path] = [] - with print_execution_time("create_multi_platform_lock"): - for py_ver in _python_versions: - file = create_multi_platform_lock(py_ver) - created_files.append(file) - remove_redundant_pip_from_lock_file(file) - force_non_optional_packages(file, non_optional_deps) - return created_files - - -def delete_per_platform_lock_files() -> None: - if _environments_folder.exists(): - for f in _environments_folder.glob("*.lock.yml"): - f.unlink() - - -def recreate_per_platform_lock_files() -> None: - delete_per_platform_lock_files() - with print_execution_time("create_per_platform_lock"): - for py_ver in _python_versions: - per_platform_env(py_ver, ["core", "apps"], dev=False) - finalize_per_platform_envs(py_ver, dev=False) - per_platform_env(py_ver, ["core", "apps"], dev=True) - finalize_per_platform_envs(py_ver, dev=True) - - -def non_optional_dependencies() -> list[str]: - """ - List the names of non-optional dependencies from pyproject.toml - """ - - pyproject_toml = Path("pyproject.toml") - assert pyproject_toml.is_file() - - non_optional_packages: list[str] = [] - with open(pyproject_toml, "rb") as pyproject: - content = toml.load(pyproject) - for name, spec in content["tool"]["poetry"]["dependencies"].items(): - if isinstance(spec, str) or ( - isinstance(spec, dict) and not spec.get("optional", False) - ): - non_optional_packages.append(name) - return non_optional_packages - - -def force_non_optional_packages(lock_file: Path, force_packages: list[str]) -> None: - """ - Patch the multi-platform lock file to force some packages not to be optional. - """ - - if len(force_packages) == 0: - return - - assert lock_file.is_file() - print("## Force packages as non-optional: " + ", ".join(force_packages)) - - yaml = YAML() - yaml.width = 1200 - - with open(lock_file, encoding="utf-8") as file: - yaml_content = yaml.load(file) - assert yaml_content is not None - - # collect packages from that list that are already in the lock file as optional - packages_to_change = [ - package - for package in yaml_content["package"] - if package["name"] in force_packages and package["optional"] - ] - - # change all packages in the dependency tree to be non-optional - graph = build_dependency_tree(packages_to_change) - for package in graph.nodes: - for p in yaml_content["package"]: - if p["name"] == package: - p["optional"] = False - p["category"] = "main" - - with open(lock_file, mode="w", encoding="utf-8") as file: - yaml.dump(yaml_content, file) - - -def remove_redundant_pip_from_lock_file(lock_file: Path) -> None: - """ - Remove pip packages that are also fetched from conda. - - If a package version is different between pip and conda, exit with an error. - """ - - assert lock_file.is_file() - print("## Removing redundant pip packages ...") - - yaml = YAML() - yaml.width = 1200 - - with open(lock_file, encoding="utf-8") as file: - yaml_content = yaml.load(file) - assert yaml_content is not None - - packages = yaml_content["package"] - remaining_pip_per_platform: dict[str, list[str]] = {} - for platform in ["linux-64", "osx-64", "win-64"]: - # parse the yml file - pip_packages = [ - p for p in packages if p["manager"] == "pip" and p["platform"] == platform - ] - if len(pip_packages) == 0: - continue - - conda_packages = { - p["name"]: p["version"] - for p in packages - if p["manager"] == "conda" and p["platform"] == platform - } - redundant_pip_names = list_redundant_pip_packages(pip_packages, conda_packages) - graph = build_dependency_tree(pip_packages) - graph = trim_dependency_tree(graph, redundant_pip_names) - remaining_pip_names = list(graph.nodes) - remaining_pip_packages = [ - p for p in pip_packages if p["name"] in remaining_pip_names - ] - assert ( - len(list_redundant_pip_packages(remaining_pip_packages, conda_packages)) - == 0 - ), "Could not eliminate all redundant pip packages (likely due mismatch on versions)" - remaining_pip_per_platform[platform] = remaining_pip_names - - yaml_content["package"] = [ - p - for p in packages - if p["manager"] != "pip" - or p["name"] in remaining_pip_per_platform[p["platform"]] - ] - with open(lock_file, mode="w", encoding="utf-8") as file: - yaml.dump(yaml_content, file) - - -def list_redundant_pip_packages( - pip_packages: list[dict], conda_packages: dict[str, str] -) -> list[str]: - """ - Return the names of pip packages that are also listed as conda packages. - - If some packages are present for both pip and conda but with different versions, exit with an error. - :param pip_packages: list of pip packages, where each package is a dict with its full description. - :param conda_packages: list of conda packages as a dict with the package name as key and its version as value. - :return: names of the pip packages that are also listed as conda packages. - """ - - redundant_pip_packages: list[str] = [] - for pip_package in pip_packages: - package_name = pip_package["name"] - version_from_conda = conda_packages.get(package_name, None) - if version_from_conda is None: - continue - - if version_from_conda == pip_package["version"]: - print( - f"package {pip_package['name']} ({version_from_conda} {pip_package['platform']}) is fetched from pip and conda" - ) - redundant_pip_packages.append(package_name) - else: - print( - f"package {pip_package['name']} ({pip_package['platform']}) is fetched with a different version " - f"from pip ({pip_package['version']}) and conda ({version_from_conda})" - ) - return redundant_pip_packages - - -def build_dependency_tree(packages: list[dict]) -> nx.DiGraph: - graph = nx.DiGraph() - for package in packages: - graph.add_node(package["name"]) - for dependency in package["dependencies"].keys(): - graph.add_edge(package["name"], dependency) - return graph - - -def trim_dependency_tree( - graph: nx.DiGraph, packages_to_remove: list[str] -) -> nx.DiGraph: - # Remove the specified packages - for package in packages_to_remove: - if package in graph: - graph.remove_node(package) - - orphaned_nodes = [node for node, degree in graph.degree() if degree == 0] - for node in orphaned_nodes: - graph.remove_node(node) - - return graph - - -def main(): - assert _environments_folder.is_dir() - - config_conda() - patch_pyproject_toml() - - recreate_multiplatform_lock_files() - recreate_per_platform_lock_files() - - -if __name__ == "__main__": - main() diff --git a/devtools/setup-conda-base.bat b/devtools/setup-conda-base.bat deleted file mode 100644 index cd98fb2a0..000000000 --- a/devtools/setup-conda-base.bat +++ /dev/null @@ -1,27 +0,0 @@ -:: Setup the conda base environment with conda-lock -:: -:: The script has no parameters, and can be executed by double-clicking -:: the .bat file from Windows Explorer. -:: -:: Usage: setup-conda-base.bat - -@echo off -setlocal EnableDelayedExpansion - -set project_dir=%~dp0.. -call %project_dir%\get_conda_exec.bat -if !errorlevel! neq 0 ( - pause - exit /B !errorlevel! -) - -call !MY_CONDA_EXE! install -n base conda-lock networkx ruamel.yaml tomli - -if !errorlevel! neq 0 ( - echo "** ERROR: Installation failed **" - pause - exit /B !errorlevel! -) - -pause -cmd /k !MY_CONDA_EXE! activate base diff --git a/devtools/setup-dev.bat b/devtools/setup-dev.bat deleted file mode 100644 index 1a80adf83..000000000 --- a/devtools/setup-dev.bat +++ /dev/null @@ -1,53 +0,0 @@ -:: Setup a local conda dev environment under .conda-dev -:: with all dependencies for the application, -:: and local editable installation of geoh5py. -:: Note: the application itself is not installed in the environment. -:: -:: The script has no parameters, and can be executed by double-clicking -:: the .bat file from Windows Explorer. -:: -:: Usage: setup-dev.bat - -@echo off -setlocal EnableDelayedExpansion - -set project_dir=%~dp0.. -call %project_dir%\get_conda_exec.bat -if !errorlevel! neq 0 ( - pause - exit /B !errorlevel! -) - -set PYTHONUTF8=1 - -:: all dependencies are installed from conda -set PIP_NO_DEPS=1 - -set PY_VER=3.10 - -:: use test-pypi to get development versions if needed -set PIP_EXTRA_INDEX_URL=https://test.pypi.org/simple/ - -set env_path=%project_dir%\.conda-env -call !MY_CONDA_EXE! activate base ^ - && call !MY_CONDA_EXE! env update -p %env_path% --file %project_dir%\environments\conda-py-%PY_VER%-win-64-dev.lock.yml - -if !errorlevel! neq 0 ( - pause - exit /B !errorlevel! -) - -if exist %project_dir%\..\geoh5py\ ( - call !MY_CONDA_EXE! run -p %env_path% pip install --upgrade --force-reinstall -e %project_dir%\..\geoh5py -) -if exist %project_dir%\..\param-sweeps\ ( - call !MY_CONDA_EXE! run -p %env_path% pip install --upgrade --force-reinstall -e %project_dir%\..\param-sweeps -) - -if !errorlevel! neq 0 ( - pause - exit /B !errorlevel! -) - -pause -cmd /k !MY_CONDA_EXE! activate %env_path% diff --git a/docs/THIRD_PARTY_SOFTWARE.rst b/docs/THIRD_PARTY_SOFTWARE.rst new file mode 100644 index 000000000..99c12124d --- /dev/null +++ b/docs/THIRD_PARTY_SOFTWARE.rst @@ -0,0 +1,88 @@ +Third Party Software +==================== + +The geoapps repository and source distributions bundle several libraries that are +compatibly licensed. We list these here. + +.. list-table:: + :widths: 30 30 60 + :header-rows: 1 + + * - Name + - License + - Description + * - `Dask `_ + - BSD-3-Clause + - Parallel PyData with Task Scheduling + * - `dash-daq `_ + - MIT + - DAQ components for Dash + * - `discretize `_ + - MIT + - Discretization tools for finite volume and inverse problems + * - `Distributed `_ + - BSD-3-Clause + - Distributed scheduler for Dask + * - `Fiona `_ + - BSD 3-Clause + - Fiona reads and writes spatial data files + * - `fsspec `_ + - BSD-3-Clause + - File-system specification + * - `GDAL `_ + - MIT + - GDAL: Geospatial Data Abstraction Library + * - `geoh5py `_ + - LGPL-3.0-or-later + - Python API for geoh5, an open file format for geoscientific data + * - `ipyfilechooser `_ + - MIT + - Python file chooser widget for use in Jupyter/IPython in conjunction with ipywidgets + * - `ipywidgets `_ + - BSD 3-Clause + - Jupyter interactive widgets + * - `jupyter-dash `_ + - MIT + - Dash support for the Jupyter notebook interface + * - `libhwloc `_ + - BSD-3-Clause + - Portable Hardware Locality (hwloc) + * - `matplotlib `_ + - LicenseRef-PSF-based + - Python plotting package + * - `numpy `_ + - BSD-3-Clause + - Fundamental package for array computing in Python + * - `omf `_ + - MIT + - API Library for Open Mining Format + * - `pandas `_ + - BSD-3-Clause + - Powerful data structures for data analysis, time series, and statistics + * - `param-sweeps `_ + - MIT + - Parameter sweeper for ui.json powered applications + * - `plotly `_ + - MIT + - An open-source, interactive data visualization library for Python + * - `pydiso `_ + - MIT + - Wrapper for intel's pardiso implementation in the MKL + * - `pymatsolver `_ + - MIT + - Matrix Solvers for Python + * - `scikit-image `_ + - BSD-3-Clause + - Image processing in Python + * - `scikit-learn `_ + - BSD-3-Clause + - A set of python modules for machine learning and data mining + * - `scipy `_ + - BSD-3-Clause + - Fundamental algorithms for scientific computing in Python + * - `simpeg `_ + - MIT + - SimPEG: Simulation and Parameter Estimation in Geophysics + * - `tqdm `_ + - MPL-2.0 or MIT + - A Fast, Extensible Progress Bar for Python and CLI diff --git a/docs/conf.py b/docs/conf.py index 67e1627f6..9b36d0593 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,6 +16,9 @@ import sys import shutil import plotly.io as pio +from datetime import datetime +from importlib.metadata import version +from packaging.version import Version pio.renderers.default = "sphinx_gallery" @@ -92,12 +95,15 @@ master_doc = "index" # General information about the project. -project = "geoapps v0.11.1" +project = "geoapps" + +project_copyright = "%Y, Mira Geoscience Ltd" +author = "Mira Geoscience Ltd." -# The short X.Y version. -version = "0.11.1" # The full version, including alpha/beta/rc tags. -release = "0.11.1-post.1" +release = version("geoapps") +# The short X.Y.Z version. +version = Version(release).base_version # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -157,7 +163,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" html_theme = "alabaster" # otherwise, readthedocs.org uses their theme by default, so no need to specify it @@ -171,6 +177,10 @@ # 'display_github': 'True', # } +html_theme_options = { + "description": f"version {release}", +} + # html_logo = 'images/mirageoscience-apps.png' check_meta = False @@ -392,3 +402,11 @@ # TODO: build the source # sphinx-apidoc --templatedir templates/ -o content/api/ ../mirageoscience-apps + + +def get_copyright_notice(): + return f"Copyright {datetime.now().strftime(project_copyright)}" + +rst_epilog = f""" +.. |copyright_notice| replace:: {get_copyright_notice()}. +""" \ No newline at end of file diff --git a/docs/content/installation.rst b/docs/content/installation.rst index 724ca64b2..b909701df 100644 --- a/docs/content/installation.rst +++ b/docs/content/installation.rst @@ -1,14 +1,8 @@ - Getting Started =============== Whether you are developer or an end-user, this page will help you get started with the **geoapps**. -.. contents:: - -.. sectnum:: - :depth: 2 - Installation ------------ diff --git a/docs/content/release_notes.rst b/docs/content/release_notes.rst index 9040073d5..27257df52 100644 --- a/docs/content/release_notes.rst +++ b/docs/content/release_notes.rst @@ -1,6 +1,20 @@ Release Notes ============= +Release 0.12.0 (2025-04-14) +--------------------------- + +Major release + +- GEOPY-378: Allow balancing of octree mesh. +- GEOPY-440: Fix reference angles in MVI +- GEOPY-998: Migrate Peak Finder to **peak-finder-app** repository. +- GEOPY-1072: Implement line refinement for octree mesh. +- GEOPY-1224: Migrate inversion code to **simpeg-drivers** repository. +- GEOPY-1484: Migrate edge detection to **curve-apps** repository. +- General maintenance and bug fixes. + + Release 0.11.1 (2024-03-04) --------------------------- diff --git a/docs/environment.yml b/docs/environment.yml index 953dbcff2..80d68c1a6 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -3,17 +3,17 @@ name: geoapps-docs channels: - conda-forge dependencies: - - python=3.8 - - pip=21.0.1 + - python=3.10 + - pip - ipywidgets - ipykernel - - pandoc=3.1.3 + - pandoc - pip: - numpydoc - - jinja2==3.0.3 - - sphinx==3.5.4 + - jinja2 + - sphinx - sphinx_issues - nbsphinx - - sphinx-gallery==0.10 + - sphinx-gallery - jupyter_sphinx - - plotly==4.9.0 + - plotly diff --git a/docs/index.rst b/docs/index.rst index 9cc9394af..15e072cc7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,8 +1,8 @@ -geoapps: Python applications for geoscientific problems +Geoapps: Python applications for geoscientific problems ======================================================= -Welcome to **geoapps**! Where geoscientists meet to share open-source applications. +Welcome to **Geoapps**! Where geoscientists meet to share open-source applications. In short ^^^^^^^^ @@ -30,3 +30,38 @@ Contents: content/howto.rst content/release_notes.rst content/feedback.rst + THIRD_PARTY_SOFTWARE + + +License +^^^^^^^ +MIT License + +Copyright (c) 2020-2025 Mira Geoscience + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +Curve-apps is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + + +Copyright +^^^^^^^^^ +|copyright_notice| diff --git a/environments/conda-py-3.10-linux-64-dev.lock.yml b/environments/conda-py-3.10-linux-64-dev.lock.yml deleted file mode 100644 index 948f06962..000000000 --- a/environments/conda-py-3.10-linux-64-dev.lock.yml +++ /dev/null @@ -1,388 +0,0 @@ -# Generated by conda-lock. -# platform: linux-64 -# input_hash: 7a13e325aa5a82edea42f7aeb47f3baa857c81da25a776f52a8dbb627885c47f - -channels: - - conda-forge -dependencies: - - _libgcc_mutex=0.1=conda_forge - - _openmp_mutex=4.5=2_kmp_llvm - - alsa-lib=1.2.11=hd590300_1 - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py310h2372a71_4 - - asciitree=0.3.3=py_2 - - astroid=3.1.0=py310hff52083_0 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attr=2.5.1=h166bdaf_1 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hc2324a3_1 - - brotli=1.1.0=hd590300_1 - - brotli-bin=1.1.0=hd590300_1 - - brotli-python=1.1.0=py310hc6cd4ac_1 - - bzip2=1.0.8=hd590300_5 - - c-ares=1.28.1=hd590300_0 - - c-blosc2=2.13.2=hb4ffafa_1 - - ca-certificates=2024.2.2=hbcca054_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h3faef2a_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py310h2fee648_0 - - cfitsio=4.2.0=hd9d235c_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - colorama=0.4.6=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py310hd41b1e2_0 - - coverage=7.4.4=py310h2372a71_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py310h2372a71_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - dbus=1.13.6=h5008d03_3 - - debugpy=1.8.1=py310hc6cd4ac_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - dill=0.3.8=pyhd8ed1ab_0 - - discretize=0.10.0=py310hcb52e73_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - exceptiongroup=1.2.0=pyhd8ed1ab_2 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h59595ed_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py310ha325b7b_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h14ed4e7_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py310h2372a71_0 - - freetype=2.12.1=h267a509_2 - - freexl=2.0.0=h743c826_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py310h5c4b078_22 - - geoana=0.4.0=py310hbf28c38_1 - - geos=3.12.0=h59595ed_0 - - geotiff=1.7.1=hf074850_14 - - gettext=0.22.5=h59595ed_2 - - gettext-tools=0.22.5=h59595ed_2 - - giflib=5.2.2=hd590300_0 - - glib=2.78.1=hfc55251_0 - - glib-tools=2.78.1=hfc55251_0 - - graphite2=1.3.13=h59595ed_1003 - - gst-plugins-base=1.22.7=h8e1006c_0 - - gstreamer=1.22.7=h98fc4e7_0 - - h5py=3.11.0=nompi_py310h65828d5_100 - - harfbuzz=8.3.0=h3d44ed6_0 - - hdf4=4.2.15=h2a13503_7 - - hdf5=1.14.3=nompi_h4f84152_100 - - icu=73.2=h59595ed_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py310h1f7b6fc_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - iniconfig=2.0.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyhd33586a_0 - - ipython=8.22.2=pyh707e725_0 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - isort=5.13.2=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h7ab15ed_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py310hff52083_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h2f55d51_0 - - keyutils=1.6.1=h166bdaf_0 - - kiwisolver=1.4.5=py310hd41b1e2_1 - - krb5=1.21.2=h659d440_0 - - lame=3.100=h166bdaf_1003 - - lcms2=2.16=hb7c19ff_0 - - ld_impl_linux-64=2.40=h41732ed_0 - - lerc=4.0.0=h27087fc_0 - - libabseil=20230802.1=cxx17_h59595ed_0 - - libaec=1.1.3=h59595ed_0 - - libasprintf=0.22.5=h661eb56_2 - - libasprintf-devel=0.22.5=h661eb56_2 - - libblas=3.9.0=16_linux64_mkl - - libboost-headers=1.84.0=ha770c72_2 - - libbrotlicommon=1.1.0=hd590300_1 - - libbrotlidec=1.1.0=hd590300_1 - - libbrotlienc=1.1.0=hd590300_1 - - libcap=2.69=h0f662aa_0 - - libcblas=3.9.0=16_linux64_mkl - - libclang=15.0.7=default_h127d8a8_5 - - libclang13=15.0.7=default_h5d6823c_5 - - libcrc32c=1.1.2=h9c3ff4c_0 - - libcups=2.3.3=h4637d8d_4 - - libcurl=8.7.1=hca28451_0 - - libdeflate=1.19=hd590300_0 - - libedit=3.1.20191231=he28a2e2_2 - - libev=4.33=hd590300_2 - - libevent=2.1.12=hf998b51_1 - - libexpat=2.6.2=h59595ed_0 - - libffi=3.4.2=h7f98852_5 - - libflac=1.4.3=h59595ed_0 - - libgcc-ng=13.2.0=h807b86a_5 - - libgcrypt=1.10.3=hd590300_0 - - libgdal=3.6.4=hb454697_22 - - libgettextpo=0.22.5=h59595ed_2 - - libgettextpo-devel=0.22.5=h59595ed_2 - - libgfortran-ng=13.2.0=h69a702a_5 - - libgfortran5=13.2.0=ha4646dd_5 - - libglib=2.78.1=hebfc3b9_0 - - libgoogle-cloud=2.12.0=hef10d8f_5 - - libgpg-error=1.48=h71f35ed_0 - - libgrpc=1.60.1=h74775cd_0 - - libhwloc=2.10.0=default_h2fb2949_1000 - - libiconv=1.17=hd590300_2 - - libjpeg-turbo=3.0.0=hd590300_1 - - libkml=1.3.0=h01aab08_1018 - - liblapack=3.9.0=16_linux64_mkl - - libllvm14=14.0.6=hcd5def8_4 - - libllvm15=15.0.7=hb3ce162_4 - - libnetcdf=4.9.2=nompi_h9612171_113 - - libnghttp2=1.58.0=h47da74e_1 - - libnsl=2.0.1=hd590300_0 - - libogg=1.3.4=h7f98852_1 - - libopus=1.3.1=h7f98852_1 - - libpng=1.6.43=h2797004_0 - - libpq=16.2=h33b98f1_1 - - libprotobuf=4.25.1=hf27288f_2 - - libre2-11=2023.09.01=h7a70373_1 - - librttopo=1.1.0=hb58d41b_14 - - libsndfile=1.2.2=hc60ed4a_1 - - libsodium=1.0.18=h36c2ea0_1 - - libspatialite=5.0.1=h090f1da_29 - - libsqlite=3.45.3=h2797004_0 - - libssh2=1.11.0=h0841786_0 - - libstdcxx-ng=13.2.0=h7e041cc_5 - - libsystemd0=255=h3516f8a_1 - - libtiff=4.6.0=ha9c0a0a_2 - - libuuid=2.38.1=h0b41bf4_0 - - libvorbis=1.3.7=h9c3ff4c_0 - - libwebp=1.3.2=h658648e_1 - - libwebp-base=1.3.2=hd590300_1 - - libxcb=1.15=h0b41bf4_0 - - libxcrypt=4.4.36=hd590300_1 - - libxkbcommon=1.7.0=h662e7e4_0 - - libxml2=2.12.6=h232c23b_2 - - libxslt=1.1.39=h76b75d6_0 - - libzip=1.10.1=h2629f0a_3 - - libzlib=1.2.13=hd590300_5 - - llvm-openmp=18.1.3=h4dfa4b3_0 - - llvmlite=0.42.0=py310h1b8f574_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcb278e6_0 - - markupsafe=2.1.5=py310h2372a71_0 - - matplotlib-base=3.7.3=py310h62c0568_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - mccabe=0.7.0=pyhd8ed1ab_0 - - minizip=4.0.5=h0ab5242_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h84fe81f_16997 - - mpg123=1.32.6=h59595ed_0 - - msgpack-python=1.0.7=py310hd41b1e2_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=hf1915f5_6 - - mysql-libs=8.0.33=hca2cd23_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h59595ed_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.3=pyhd8ed1ab_1 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=h27087fc_0 - - nss=3.98=h1d7d5a4_0 - - numba=0.59.1=py310h7dc5dd1_0 - - numcodecs=0.12.1=py310hc6cd4ac_0 - - numpy=1.23.5=py310h53a5b5f_0 - - openjpeg=2.5.2=h488ebb8_0 - - openssl=3.2.1=hd590300_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py310h9b08913_1 - - pandoc=3.1.13=ha770c72_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=hc3806b6_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py310hf73ecf8_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.2=h59595ed_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - pluggy=1.4.0=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=h590f24d_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h82ecc9d_1 - - proj=9.3.0=h1d62c97_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py310h2372a71_0 - - pthread-stubs=0.4=h36c2ea0_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pulseaudio-client=16.1=hb77b528_5 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py310h1dd1467_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pylint=3.1.0=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py310h04931ad_5 - - pyqt5-sip=12.12.2=py310hc6cd4ac_5 - - pyqtwebengine=5.15.9=py310h704022c_5 - - pyside2=5.15.8=py310hffc9498_4 - - pysocks=1.7.1=pyha2e5f31_6 - - pytest=8.1.1=pyhd8ed1ab_0 - - pytest-cov=5.0.0=pyhd8ed1ab_0 - - python=3.10.14=hd12c33a_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.10=4_cp310 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py310h1f7b6fc_1 - - pyyaml=6.0.1=py310h2372a71_1 - - pyzmq=24.0.1=py310h330234f_1 - - qt-main=5.15.8=h82b777d_17 - - qt-webengine=5.15.8=h75ea521_4 - - re2=2023.09.01=h7f4b329_1 - - readline=8.2=h8228510_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py310hcb5633a_0 - - scikit-image=0.19.3=py310h769672d_2 - - scikit-learn=1.2.2=py310hf7d194e_2 - - scipy=1.10.1=py310ha4c1d20_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh0d859eb_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py310h7dcad9a_0 - - sip=6.7.12=py310hc6cd4ac_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hdb0a2a9_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h2c6b66d_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h00ab1b0_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh0d859eb_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=h8c794c1_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - tomlkit=0.12.4=pyha770c72_0 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py310h5764c6d_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - typing-extensions=4.11.0=hd8ed1ab_0 - - typing_extensions=4.11.0=pyha770c72_0 - - tzcode=2024a=h3f72095_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py310h2372a71_0 - - uriparser=0.9.7=h59595ed_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xcb-util=0.4.0=hd590300_1 - - xcb-util-image=0.4.0=h8ee46fc_1 - - xcb-util-keysyms=0.4.0=h8ee46fc_1 - - xcb-util-renderutil=0.3.9=hd590300_1 - - xcb-util-wm=0.4.1=h8ee46fc_1 - - xerces-c=3.2.5=hac6953d_0 - - xkeyboard-config=2.41=hd590300_0 - - xorg-compositeproto=0.4.2=h7f98852_1001 - - xorg-damageproto=1.2.1=h7f98852_1002 - - xorg-fixesproto=5.0=h7f98852_1002 - - xorg-inputproto=2.3.2=h7f98852_1002 - - xorg-kbproto=1.0.7=h7f98852_1002 - - xorg-libice=1.1.1=hd590300_0 - - xorg-libsm=1.2.4=h7391055_0 - - xorg-libx11=1.8.9=h8ee46fc_0 - - xorg-libxau=1.0.11=hd590300_0 - - xorg-libxcomposite=0.4.6=h0b41bf4_1 - - xorg-libxdamage=1.1.5=h7f98852_1 - - xorg-libxdmcp=1.1.3=h7f98852_0 - - xorg-libxext=1.3.4=h0b41bf4_2 - - xorg-libxfixes=5.0.3=h7f98852_1004 - - xorg-libxi=1.7.10=h7f98852_0 - - xorg-libxrandr=1.5.2=h7f98852_1 - - xorg-libxrender=0.9.11=hd590300_0 - - xorg-libxtst=1.2.3=h7f98852_1002 - - xorg-randrproto=1.5.0=h7f98852_1001 - - xorg-recordproto=1.14.2=h7f98852_1002 - - xorg-renderproto=0.11.1=h7f98852_1002 - - xorg-util-macros=1.19.3=h7f98852_0 - - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002 - - xorg-xproto=7.0.31=h7f98852_1007 - - xz=5.2.6=h166bdaf_0 - - yaml=0.2.5=h7f98852_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h59595ed_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hd590300_5 - - zlib-ng=2.0.7=h0b41bf4_0 - - zstd=1.5.5=hfc55251_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.10-linux-64.lock.yml b/environments/conda-py-3.10-linux-64.lock.yml deleted file mode 100644 index af31270ac..000000000 --- a/environments/conda-py-3.10-linux-64.lock.yml +++ /dev/null @@ -1,371 +0,0 @@ -# Generated by conda-lock. -# platform: linux-64 -# input_hash: 7a13e325aa5a82edea42f7aeb47f3baa857c81da25a776f52a8dbb627885c47f - -channels: - - conda-forge -dependencies: - - _libgcc_mutex=0.1=conda_forge - - _openmp_mutex=4.5=2_kmp_llvm - - alsa-lib=1.2.11=hd590300_1 - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py310h2372a71_4 - - asciitree=0.3.3=py_2 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attr=2.5.1=h166bdaf_1 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hc2324a3_1 - - brotli=1.1.0=hd590300_1 - - brotli-bin=1.1.0=hd590300_1 - - brotli-python=1.1.0=py310hc6cd4ac_1 - - bzip2=1.0.8=hd590300_5 - - c-ares=1.28.1=hd590300_0 - - c-blosc2=2.13.2=hb4ffafa_1 - - ca-certificates=2024.2.2=hbcca054_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h3faef2a_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py310h2fee648_0 - - cfitsio=4.2.0=hd9d235c_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py310hd41b1e2_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py310h2372a71_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - dbus=1.13.6=h5008d03_3 - - debugpy=1.8.1=py310hc6cd4ac_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - discretize=0.10.0=py310hcb52e73_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h59595ed_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py310ha325b7b_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h14ed4e7_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py310h2372a71_0 - - freetype=2.12.1=h267a509_2 - - freexl=2.0.0=h743c826_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py310h5c4b078_22 - - geoana=0.4.0=py310hbf28c38_1 - - geos=3.12.0=h59595ed_0 - - geotiff=1.7.1=hf074850_14 - - gettext=0.22.5=h59595ed_2 - - gettext-tools=0.22.5=h59595ed_2 - - giflib=5.2.2=hd590300_0 - - glib=2.78.1=hfc55251_0 - - glib-tools=2.78.1=hfc55251_0 - - graphite2=1.3.13=h59595ed_1003 - - gst-plugins-base=1.22.7=h8e1006c_0 - - gstreamer=1.22.7=h98fc4e7_0 - - h5py=3.11.0=nompi_py310h65828d5_100 - - harfbuzz=8.3.0=h3d44ed6_0 - - hdf4=4.2.15=h2a13503_7 - - hdf5=1.14.3=nompi_h4f84152_100 - - icu=73.2=h59595ed_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py310h1f7b6fc_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyhd33586a_0 - - ipython=8.22.2=pyh707e725_0 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h7ab15ed_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py310hff52083_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h2f55d51_0 - - keyutils=1.6.1=h166bdaf_0 - - kiwisolver=1.4.5=py310hd41b1e2_1 - - krb5=1.21.2=h659d440_0 - - lame=3.100=h166bdaf_1003 - - lcms2=2.16=hb7c19ff_0 - - ld_impl_linux-64=2.40=h41732ed_0 - - lerc=4.0.0=h27087fc_0 - - libabseil=20230802.1=cxx17_h59595ed_0 - - libaec=1.1.3=h59595ed_0 - - libasprintf=0.22.5=h661eb56_2 - - libasprintf-devel=0.22.5=h661eb56_2 - - libblas=3.9.0=16_linux64_mkl - - libboost-headers=1.84.0=ha770c72_2 - - libbrotlicommon=1.1.0=hd590300_1 - - libbrotlidec=1.1.0=hd590300_1 - - libbrotlienc=1.1.0=hd590300_1 - - libcap=2.69=h0f662aa_0 - - libcblas=3.9.0=16_linux64_mkl - - libclang=15.0.7=default_h127d8a8_5 - - libclang13=15.0.7=default_h5d6823c_5 - - libcrc32c=1.1.2=h9c3ff4c_0 - - libcups=2.3.3=h4637d8d_4 - - libcurl=8.7.1=hca28451_0 - - libdeflate=1.19=hd590300_0 - - libedit=3.1.20191231=he28a2e2_2 - - libev=4.33=hd590300_2 - - libevent=2.1.12=hf998b51_1 - - libexpat=2.6.2=h59595ed_0 - - libffi=3.4.2=h7f98852_5 - - libflac=1.4.3=h59595ed_0 - - libgcc-ng=13.2.0=h807b86a_5 - - libgcrypt=1.10.3=hd590300_0 - - libgdal=3.6.4=hb454697_22 - - libgettextpo=0.22.5=h59595ed_2 - - libgettextpo-devel=0.22.5=h59595ed_2 - - libgfortran-ng=13.2.0=h69a702a_5 - - libgfortran5=13.2.0=ha4646dd_5 - - libglib=2.78.1=hebfc3b9_0 - - libgoogle-cloud=2.12.0=hef10d8f_5 - - libgpg-error=1.48=h71f35ed_0 - - libgrpc=1.60.1=h74775cd_0 - - libhwloc=2.10.0=default_h2fb2949_1000 - - libiconv=1.17=hd590300_2 - - libjpeg-turbo=3.0.0=hd590300_1 - - libkml=1.3.0=h01aab08_1018 - - liblapack=3.9.0=16_linux64_mkl - - libllvm14=14.0.6=hcd5def8_4 - - libllvm15=15.0.7=hb3ce162_4 - - libnetcdf=4.9.2=nompi_h9612171_113 - - libnghttp2=1.58.0=h47da74e_1 - - libnsl=2.0.1=hd590300_0 - - libogg=1.3.4=h7f98852_1 - - libopus=1.3.1=h7f98852_1 - - libpng=1.6.43=h2797004_0 - - libpq=16.2=h33b98f1_1 - - libprotobuf=4.25.1=hf27288f_2 - - libre2-11=2023.09.01=h7a70373_1 - - librttopo=1.1.0=hb58d41b_14 - - libsndfile=1.2.2=hc60ed4a_1 - - libsodium=1.0.18=h36c2ea0_1 - - libspatialite=5.0.1=h090f1da_29 - - libsqlite=3.45.3=h2797004_0 - - libssh2=1.11.0=h0841786_0 - - libstdcxx-ng=13.2.0=h7e041cc_5 - - libsystemd0=255=h3516f8a_1 - - libtiff=4.6.0=ha9c0a0a_2 - - libuuid=2.38.1=h0b41bf4_0 - - libvorbis=1.3.7=h9c3ff4c_0 - - libwebp=1.3.2=h658648e_1 - - libwebp-base=1.3.2=hd590300_1 - - libxcb=1.15=h0b41bf4_0 - - libxcrypt=4.4.36=hd590300_1 - - libxkbcommon=1.7.0=h662e7e4_0 - - libxml2=2.12.6=h232c23b_2 - - libxslt=1.1.39=h76b75d6_0 - - libzip=1.10.1=h2629f0a_3 - - libzlib=1.2.13=hd590300_5 - - llvm-openmp=18.1.3=h4dfa4b3_0 - - llvmlite=0.42.0=py310h1b8f574_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcb278e6_0 - - markupsafe=2.1.5=py310h2372a71_0 - - matplotlib-base=3.7.3=py310h62c0568_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - minizip=4.0.5=h0ab5242_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h84fe81f_16997 - - mpg123=1.32.6=h59595ed_0 - - msgpack-python=1.0.7=py310hd41b1e2_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=hf1915f5_6 - - mysql-libs=8.0.33=hca2cd23_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h59595ed_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.3=pyhd8ed1ab_1 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=h27087fc_0 - - nss=3.98=h1d7d5a4_0 - - numba=0.59.1=py310h7dc5dd1_0 - - numcodecs=0.12.1=py310hc6cd4ac_0 - - numpy=1.23.5=py310h53a5b5f_0 - - openjpeg=2.5.2=h488ebb8_0 - - openssl=3.2.1=hd590300_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py310h9b08913_1 - - pandoc=3.1.13=ha770c72_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=hc3806b6_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py310hf73ecf8_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.2=h59595ed_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=h590f24d_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h82ecc9d_1 - - proj=9.3.0=h1d62c97_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py310h2372a71_0 - - pthread-stubs=0.4=h36c2ea0_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pulseaudio-client=16.1=hb77b528_5 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py310h1dd1467_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py310h04931ad_5 - - pyqt5-sip=12.12.2=py310hc6cd4ac_5 - - pyqtwebengine=5.15.9=py310h704022c_5 - - pyside2=5.15.8=py310hffc9498_4 - - pysocks=1.7.1=pyha2e5f31_6 - - python=3.10.14=hd12c33a_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.10=4_cp310 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py310h1f7b6fc_1 - - pyyaml=6.0.1=py310h2372a71_1 - - pyzmq=24.0.1=py310h330234f_1 - - qt-main=5.15.8=h82b777d_17 - - qt-webengine=5.15.8=h75ea521_4 - - re2=2023.09.01=h7f4b329_1 - - readline=8.2=h8228510_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py310hcb5633a_0 - - scikit-image=0.19.3=py310h769672d_2 - - scikit-learn=1.2.2=py310hf7d194e_2 - - scipy=1.10.1=py310ha4c1d20_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh0d859eb_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py310h7dcad9a_0 - - sip=6.7.12=py310hc6cd4ac_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hdb0a2a9_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h2c6b66d_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h00ab1b0_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh0d859eb_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=h8c794c1_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py310h5764c6d_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - tzcode=2024a=h3f72095_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py310h2372a71_0 - - uriparser=0.9.7=h59595ed_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xcb-util=0.4.0=hd590300_1 - - xcb-util-image=0.4.0=h8ee46fc_1 - - xcb-util-keysyms=0.4.0=h8ee46fc_1 - - xcb-util-renderutil=0.3.9=hd590300_1 - - xcb-util-wm=0.4.1=h8ee46fc_1 - - xerces-c=3.2.5=hac6953d_0 - - xkeyboard-config=2.41=hd590300_0 - - xorg-compositeproto=0.4.2=h7f98852_1001 - - xorg-damageproto=1.2.1=h7f98852_1002 - - xorg-fixesproto=5.0=h7f98852_1002 - - xorg-inputproto=2.3.2=h7f98852_1002 - - xorg-kbproto=1.0.7=h7f98852_1002 - - xorg-libice=1.1.1=hd590300_0 - - xorg-libsm=1.2.4=h7391055_0 - - xorg-libx11=1.8.9=h8ee46fc_0 - - xorg-libxau=1.0.11=hd590300_0 - - xorg-libxcomposite=0.4.6=h0b41bf4_1 - - xorg-libxdamage=1.1.5=h7f98852_1 - - xorg-libxdmcp=1.1.3=h7f98852_0 - - xorg-libxext=1.3.4=h0b41bf4_2 - - xorg-libxfixes=5.0.3=h7f98852_1004 - - xorg-libxi=1.7.10=h7f98852_0 - - xorg-libxrandr=1.5.2=h7f98852_1 - - xorg-libxrender=0.9.11=hd590300_0 - - xorg-libxtst=1.2.3=h7f98852_1002 - - xorg-randrproto=1.5.0=h7f98852_1001 - - xorg-recordproto=1.14.2=h7f98852_1002 - - xorg-renderproto=0.11.1=h7f98852_1002 - - xorg-util-macros=1.19.3=h7f98852_0 - - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002 - - xorg-xproto=7.0.31=h7f98852_1007 - - xz=5.2.6=h166bdaf_0 - - yaml=0.2.5=h7f98852_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h59595ed_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hd590300_5 - - zlib-ng=2.0.7=h0b41bf4_0 - - zstd=1.5.5=hfc55251_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.10-osx-64-dev.lock.yml b/environments/conda-py-3.10-osx-64-dev.lock.yml deleted file mode 100644 index 8307c5195..000000000 --- a/environments/conda-py-3.10-osx-64-dev.lock.yml +++ /dev/null @@ -1,339 +0,0 @@ -# Generated by conda-lock. -# platform: osx-64 -# input_hash: 217bd8c689986a9e77c79fe61667c9ce18b78ac9ea399dd93bb0d8015a373c52 - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - appnope=0.1.4=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py310h6729b98_4 - - asciitree=0.3.3=py_2 - - astroid=3.1.0=py310h2ec42d9_0 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hafa3907_1 - - brotli=1.1.0=h0dc2134_1 - - brotli-bin=1.1.0=h0dc2134_1 - - brotli-python=1.1.0=py310h9e9d8ca_1 - - bzip2=1.0.8=h10d778d_5 - - c-ares=1.28.1=h10d778d_0 - - c-blosc2=2.13.2=h0ae8482_1 - - ca-certificates=2024.2.2=h8857fd0_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h99e66fa_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py310hdca579f_0 - - cfitsio=4.2.0=hd56cc12_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - colorama=0.4.6=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py310hb3b189b_0 - - coverage=7.4.4=py310hb372a2b_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py310hb372a2b_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py310h5daac23_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - dill=0.3.8=pyhd8ed1ab_0 - - discretize=0.10.0=py310h65d09f4_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - exceptiongroup=1.2.0=pyhd8ed1ab_2 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h73e2aa4_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py310h3963e5c_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h5bb23bf_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py310hb372a2b_0 - - freetype=2.12.1=h60636b9_2 - - freexl=2.0.0=h3ec172f_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py310ha2e6a91_22 - - geoana=0.4.0=py310ha23aa8a_1 - - geos=3.12.0=he965462_0 - - geotiff=1.7.1=h889ec99_14 - - gettext=0.22.5=h5ff76d1_2 - - gettext-tools=0.22.5=h5ff76d1_2 - - giflib=5.2.2=h10d778d_0 - - glib=2.78.1=hf4d7fad_0 - - glib-tools=2.78.1=hf4d7fad_0 - - gst-plugins-base=1.22.7=hd283e88_0 - - gstreamer=1.22.7=h8954545_0 - - h5py=3.11.0=nompi_py310h9b28fce_100 - - hdf4=4.2.15=h8138101_7 - - hdf5=1.14.3=nompi_h691f4bf_100 - - icu=73.2=hf5e326d_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py310hf0b6da5_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - iniconfig=2.0.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyh3cd1d5f_0 - - ipython=8.22.2=pyh707e725_0 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - isort=5.13.2=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h8e11ae5_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py310h2ec42d9_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h5f07ac3_0 - - kiwisolver=1.4.5=py310h88cfcbd_1 - - krb5=1.21.2=hb884880_0 - - lcms2=2.16=ha2f27b4_0 - - lerc=4.0.0=hb486fe8_0 - - libabseil=20230802.1=cxx17_h048a20a_0 - - libaec=1.1.3=h73e2aa4_0 - - libasprintf=0.22.5=h5ff76d1_2 - - libasprintf-devel=0.22.5=h5ff76d1_2 - - libblas=3.9.0=18_osx64_mkl - - libboost-headers=1.84.0=h694c41f_2 - - libbrotlicommon=1.1.0=h0dc2134_1 - - libbrotlidec=1.1.0=h0dc2134_1 - - libbrotlienc=1.1.0=h0dc2134_1 - - libcblas=3.9.0=18_osx64_mkl - - libclang=15.0.7=default_h7151d67_5 - - libclang13=15.0.7=default_h0edc4dd_5 - - libcrc32c=1.1.2=he49afe7_0 - - libcurl=8.7.1=h726d00d_0 - - libcxx=16.0.6=hd57cbcb_0 - - libdeflate=1.19=ha4e1b8e_0 - - libedit=3.1.20191231=h0678c8f_2 - - libev=4.33=h10d778d_2 - - libexpat=2.6.2=h73e2aa4_0 - - libffi=3.4.2=h0d85af4_5 - - libgdal=3.6.4=hbff29b3_22 - - libgettextpo=0.22.5=h5ff76d1_2 - - libgettextpo-devel=0.22.5=h5ff76d1_2 - - libgfortran=5.0.0=13_2_0_h97931a8_3 - - libgfortran5=13.2.0=h2873a65_3 - - libglib=2.78.1=h6d9ecee_0 - - libgoogle-cloud=2.12.0=he77a663_5 - - libgrpc=1.60.1=h038e8f1_0 - - libhwloc=2.10.0=default_h1321489_1000 - - libiconv=1.17=hd75f5a5_2 - - libintl=0.22.5=h5ff76d1_2 - - libintl-devel=0.22.5=h5ff76d1_2 - - libjpeg-turbo=3.0.0=h0dc2134_1 - - libkml=1.3.0=hab3ca0e_1018 - - liblapack=3.9.0=18_osx64_mkl - - libllvm14=14.0.6=hc8e404f_4 - - libllvm15=15.0.7=hbedff68_4 - - libnetcdf=4.9.2=nompi_h7760872_113 - - libnghttp2=1.58.0=h64cf6d3_1 - - libogg=1.3.4=h35c211d_1 - - libopus=1.3.1=hc929b4f_1 - - libpng=1.6.43=h92b6c6a_0 - - libpq=16.2=ha925e61_1 - - libprotobuf=4.25.1=hc4f2305_2 - - libre2-11=2023.09.01=h4694dbf_1 - - librttopo=1.1.0=h23f359d_14 - - libsodium=1.0.18=hbcb3906_1 - - libspatialite=5.0.1=h231fb02_29 - - libsqlite=3.45.3=h92b6c6a_0 - - libssh2=1.11.0=hd019ec5_0 - - libtiff=4.6.0=h684deea_2 - - libvorbis=1.3.7=h046ec9c_0 - - libwebp=1.3.2=h44782d1_1 - - libwebp-base=1.3.2=h10d778d_1 - - libxcb=1.15=hb7f2c08_0 - - libxml2=2.12.6=hc0ae0f7_2 - - libxslt=1.1.39=h03b04e6_0 - - libzip=1.10.1=hc158999_3 - - libzlib=1.2.13=h8a1eda9_5 - - llvm-openmp=18.1.3=hb6ac08f_0 - - llvmlite=0.42.0=py310h7d48a1f_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hf0c8a7f_0 - - markupsafe=2.1.5=py310hb372a2b_0 - - matplotlib-base=3.7.3=py310hf92ae1b_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - mccabe=0.7.0=pyhd8ed1ab_0 - - minizip=4.0.5=h37d7099_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h44ed08c_16952 - - msgpack-python=1.0.7=py310ha697434_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=h1d20c9b_6 - - mysql-libs=8.0.33=hed35180_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h73e2aa4_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.3=pyhd8ed1ab_1 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=hea0b92c_0 - - nss=3.98=ha05da47_0 - - numba=0.59.1=py310h1d5af72_0 - - numcodecs=0.12.1=py310had63691_0 - - numpy=1.23.5=py310h1b7c290_0 - - openjpeg=2.5.2=h7310d3a_0 - - openssl=3.2.1=hd75f5a5_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py310hecf8f37_1 - - pandoc=3.1.13=h694c41f_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h1c4e4bc_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py310h99295b8_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h73e2aa4_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - pluggy=1.4.0=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hdd5a5e8_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h06f2bd8_1 - - proj=9.3.0=h23b96cc_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py310hb372a2b_0 - - pthread-stubs=0.4=hc929b4f_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py310he105d0e_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pylint=3.1.0=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyobjc-core=10.2=py310h3674b6a_0 - - pyobjc-framework-cocoa=10.2=py310h3674b6a_0 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py310hecc045f_5 - - pyqt5-sip=12.12.2=py310h018f80b_5 - - pyqtwebengine=5.15.9=py310hc93c43d_5 - - pyside2=5.15.8=py310h8050119_4 - - pysocks=1.7.1=pyha2e5f31_6 - - pytest=8.1.1=pyhd8ed1ab_0 - - pytest-cov=5.0.0=pyhd8ed1ab_0 - - python=3.10.14=h00d2728_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.10=4_cp310 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py310hf0b6da5_1 - - pyyaml=6.0.1=py310h6729b98_1 - - pyzmq=24.0.1=py310hf615a82_1 - - qt-main=5.15.8=h4385fff_17 - - qt-webengine=5.15.8=h5f65913_4 - - re2=2023.09.01=hb168e87_1 - - readline=8.2=h9e318b2_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py310h54baaa9_0 - - scikit-image=0.19.3=py310hecf8f37_2 - - scikit-learn=1.2.2=py310hd2c063c_2 - - scipy=1.10.1=py310h3900cf1_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh31c8845_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py310hcbf9397_0 - - sip=6.7.12=py310had63691_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=h6dc393e_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h7461747_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h7728843_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh31c8845_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hd3a41d5_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h1abcd95_1 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - tomlkit=0.12.4=pyha770c72_0 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py310h1961e1f_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - typing-extensions=4.11.0=hd8ed1ab_0 - - typing_extensions=4.11.0=pyha770c72_0 - - tzcode=2024a=h10d778d_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py310h6729b98_0 - - uriparser=0.9.7=he965462_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xerces-c=3.2.5=hbbe9ea5_0 - - xorg-libxau=1.0.11=h0dc2134_0 - - xorg-libxdmcp=1.1.3=h35c211d_0 - - xz=5.2.6=h775f41a_0 - - yaml=0.2.5=h0d85af4_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h93d8f39_0 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=h8a1eda9_5 - - zlib-ng=2.0.7=hb7f2c08_0 - - zstd=1.5.5=h829000d_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.10-osx-64.lock.yml b/environments/conda-py-3.10-osx-64.lock.yml deleted file mode 100644 index b1a178b72..000000000 --- a/environments/conda-py-3.10-osx-64.lock.yml +++ /dev/null @@ -1,322 +0,0 @@ -# Generated by conda-lock. -# platform: osx-64 -# input_hash: 217bd8c689986a9e77c79fe61667c9ce18b78ac9ea399dd93bb0d8015a373c52 - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - appnope=0.1.4=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py310h6729b98_4 - - asciitree=0.3.3=py_2 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hafa3907_1 - - brotli=1.1.0=h0dc2134_1 - - brotli-bin=1.1.0=h0dc2134_1 - - brotli-python=1.1.0=py310h9e9d8ca_1 - - bzip2=1.0.8=h10d778d_5 - - c-ares=1.28.1=h10d778d_0 - - c-blosc2=2.13.2=h0ae8482_1 - - ca-certificates=2024.2.2=h8857fd0_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h99e66fa_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py310hdca579f_0 - - cfitsio=4.2.0=hd56cc12_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py310hb3b189b_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py310hb372a2b_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py310h5daac23_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - discretize=0.10.0=py310h65d09f4_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h73e2aa4_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py310h3963e5c_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h5bb23bf_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py310hb372a2b_0 - - freetype=2.12.1=h60636b9_2 - - freexl=2.0.0=h3ec172f_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py310ha2e6a91_22 - - geoana=0.4.0=py310ha23aa8a_1 - - geos=3.12.0=he965462_0 - - geotiff=1.7.1=h889ec99_14 - - gettext=0.22.5=h5ff76d1_2 - - gettext-tools=0.22.5=h5ff76d1_2 - - giflib=5.2.2=h10d778d_0 - - glib=2.78.1=hf4d7fad_0 - - glib-tools=2.78.1=hf4d7fad_0 - - gst-plugins-base=1.22.7=hd283e88_0 - - gstreamer=1.22.7=h8954545_0 - - h5py=3.11.0=nompi_py310h9b28fce_100 - - hdf4=4.2.15=h8138101_7 - - hdf5=1.14.3=nompi_h691f4bf_100 - - icu=73.2=hf5e326d_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py310hf0b6da5_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyh3cd1d5f_0 - - ipython=8.22.2=pyh707e725_0 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h8e11ae5_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py310h2ec42d9_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h5f07ac3_0 - - kiwisolver=1.4.5=py310h88cfcbd_1 - - krb5=1.21.2=hb884880_0 - - lcms2=2.16=ha2f27b4_0 - - lerc=4.0.0=hb486fe8_0 - - libabseil=20230802.1=cxx17_h048a20a_0 - - libaec=1.1.3=h73e2aa4_0 - - libasprintf=0.22.5=h5ff76d1_2 - - libasprintf-devel=0.22.5=h5ff76d1_2 - - libblas=3.9.0=18_osx64_mkl - - libboost-headers=1.84.0=h694c41f_2 - - libbrotlicommon=1.1.0=h0dc2134_1 - - libbrotlidec=1.1.0=h0dc2134_1 - - libbrotlienc=1.1.0=h0dc2134_1 - - libcblas=3.9.0=18_osx64_mkl - - libclang=15.0.7=default_h7151d67_5 - - libclang13=15.0.7=default_h0edc4dd_5 - - libcrc32c=1.1.2=he49afe7_0 - - libcurl=8.7.1=h726d00d_0 - - libcxx=16.0.6=hd57cbcb_0 - - libdeflate=1.19=ha4e1b8e_0 - - libedit=3.1.20191231=h0678c8f_2 - - libev=4.33=h10d778d_2 - - libexpat=2.6.2=h73e2aa4_0 - - libffi=3.4.2=h0d85af4_5 - - libgdal=3.6.4=hbff29b3_22 - - libgettextpo=0.22.5=h5ff76d1_2 - - libgettextpo-devel=0.22.5=h5ff76d1_2 - - libgfortran=5.0.0=13_2_0_h97931a8_3 - - libgfortran5=13.2.0=h2873a65_3 - - libglib=2.78.1=h6d9ecee_0 - - libgoogle-cloud=2.12.0=he77a663_5 - - libgrpc=1.60.1=h038e8f1_0 - - libhwloc=2.10.0=default_h1321489_1000 - - libiconv=1.17=hd75f5a5_2 - - libintl=0.22.5=h5ff76d1_2 - - libintl-devel=0.22.5=h5ff76d1_2 - - libjpeg-turbo=3.0.0=h0dc2134_1 - - libkml=1.3.0=hab3ca0e_1018 - - liblapack=3.9.0=18_osx64_mkl - - libllvm14=14.0.6=hc8e404f_4 - - libllvm15=15.0.7=hbedff68_4 - - libnetcdf=4.9.2=nompi_h7760872_113 - - libnghttp2=1.58.0=h64cf6d3_1 - - libogg=1.3.4=h35c211d_1 - - libopus=1.3.1=hc929b4f_1 - - libpng=1.6.43=h92b6c6a_0 - - libpq=16.2=ha925e61_1 - - libprotobuf=4.25.1=hc4f2305_2 - - libre2-11=2023.09.01=h4694dbf_1 - - librttopo=1.1.0=h23f359d_14 - - libsodium=1.0.18=hbcb3906_1 - - libspatialite=5.0.1=h231fb02_29 - - libsqlite=3.45.3=h92b6c6a_0 - - libssh2=1.11.0=hd019ec5_0 - - libtiff=4.6.0=h684deea_2 - - libvorbis=1.3.7=h046ec9c_0 - - libwebp=1.3.2=h44782d1_1 - - libwebp-base=1.3.2=h10d778d_1 - - libxcb=1.15=hb7f2c08_0 - - libxml2=2.12.6=hc0ae0f7_2 - - libxslt=1.1.39=h03b04e6_0 - - libzip=1.10.1=hc158999_3 - - libzlib=1.2.13=h8a1eda9_5 - - llvm-openmp=18.1.3=hb6ac08f_0 - - llvmlite=0.42.0=py310h7d48a1f_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hf0c8a7f_0 - - markupsafe=2.1.5=py310hb372a2b_0 - - matplotlib-base=3.7.3=py310hf92ae1b_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - minizip=4.0.5=h37d7099_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h44ed08c_16952 - - msgpack-python=1.0.7=py310ha697434_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=h1d20c9b_6 - - mysql-libs=8.0.33=hed35180_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h73e2aa4_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.3=pyhd8ed1ab_1 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=hea0b92c_0 - - nss=3.98=ha05da47_0 - - numba=0.59.1=py310h1d5af72_0 - - numcodecs=0.12.1=py310had63691_0 - - numpy=1.23.5=py310h1b7c290_0 - - openjpeg=2.5.2=h7310d3a_0 - - openssl=3.2.1=hd75f5a5_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py310hecf8f37_1 - - pandoc=3.1.13=h694c41f_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h1c4e4bc_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py310h99295b8_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h73e2aa4_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hdd5a5e8_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h06f2bd8_1 - - proj=9.3.0=h23b96cc_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py310hb372a2b_0 - - pthread-stubs=0.4=hc929b4f_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py310he105d0e_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyobjc-core=10.2=py310h3674b6a_0 - - pyobjc-framework-cocoa=10.2=py310h3674b6a_0 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py310hecc045f_5 - - pyqt5-sip=12.12.2=py310h018f80b_5 - - pyqtwebengine=5.15.9=py310hc93c43d_5 - - pyside2=5.15.8=py310h8050119_4 - - pysocks=1.7.1=pyha2e5f31_6 - - python=3.10.14=h00d2728_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.10=4_cp310 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py310hf0b6da5_1 - - pyyaml=6.0.1=py310h6729b98_1 - - pyzmq=24.0.1=py310hf615a82_1 - - qt-main=5.15.8=h4385fff_17 - - qt-webengine=5.15.8=h5f65913_4 - - re2=2023.09.01=hb168e87_1 - - readline=8.2=h9e318b2_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py310h54baaa9_0 - - scikit-image=0.19.3=py310hecf8f37_2 - - scikit-learn=1.2.2=py310hd2c063c_2 - - scipy=1.10.1=py310h3900cf1_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh31c8845_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py310hcbf9397_0 - - sip=6.7.12=py310had63691_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=h6dc393e_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h7461747_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h7728843_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh31c8845_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hd3a41d5_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h1abcd95_1 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py310h1961e1f_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - tzcode=2024a=h10d778d_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py310h6729b98_0 - - uriparser=0.9.7=he965462_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xerces-c=3.2.5=hbbe9ea5_0 - - xorg-libxau=1.0.11=h0dc2134_0 - - xorg-libxdmcp=1.1.3=h35c211d_0 - - xz=5.2.6=h775f41a_0 - - yaml=0.2.5=h0d85af4_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h93d8f39_0 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=h8a1eda9_5 - - zlib-ng=2.0.7=hb7f2c08_0 - - zstd=1.5.5=h829000d_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.10-win-64-dev.lock.yml b/environments/conda-py-3.10-win-64-dev.lock.yml deleted file mode 100644 index c3c0a81af..000000000 --- a/environments/conda-py-3.10-win-64-dev.lock.yml +++ /dev/null @@ -1,331 +0,0 @@ -# Generated by conda-lock. -# platform: win-64 -# input_hash: a579f89f074a4c96107b02a5e16413ccb81c10bc485d696a362bdcc8d8e1bcdf - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py310h8d17308_4 - - asciitree=0.3.3=py_2 - - astroid=3.1.0=py310h5588dad_0 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hbd69f2e_1 - - brotli=1.1.0=hcfcfb64_1 - - brotli-bin=1.1.0=hcfcfb64_1 - - brotli-python=1.1.0=py310h00ffb61_1 - - bzip2=1.0.8=hcfcfb64_5 - - c-ares=1.28.1=hcfcfb64_0 - - c-blosc2=2.13.2=h183a6f4_1 - - ca-certificates=2024.2.2=h56e8100_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h1fef639_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py310h8d17308_0 - - cfitsio=4.2.0=h9ebe7e4_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=win_pyh7428d3b_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - colorama=0.4.6=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py310h232114e_0 - - coverage=7.4.4=py310h8d17308_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py310h8d17308_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py310h00ffb61_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - dill=0.3.8=pyhd8ed1ab_0 - - discretize=0.10.0=py310h4856b71_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - exceptiongroup=1.2.0=pyhd8ed1ab_2 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h63175ca_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py310h4a685fe_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=hbde0cde_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py310h8d17308_0 - - freetype=2.12.1=hdaf720e_2 - - freexl=2.0.0=h8276f4a_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py310haa9213b_22 - - geoana=0.4.0=py310h232114e_1 - - geos=3.12.0=h1537add_0 - - geotiff=1.7.1=hcf4a93f_14 - - gettext=0.22.5=h5728263_2 - - gettext-tools=0.22.5=h7d00a51_2 - - glib=2.78.1=h12be248_0 - - glib-tools=2.78.1=h12be248_0 - - gst-plugins-base=1.22.7=h001b923_0 - - gstreamer=1.22.7=hb4038d2_0 - - h5py=3.11.0=nompi_py310hde4a0ea_100 - - hdf4=4.2.15=h5557f11_7 - - hdf5=1.14.3=nompi_h73e8ff5_100 - - icu=73.2=h63175ca_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py310h3e78b6c_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - iniconfig=2.0.0=pyhd8ed1ab_0 - - intel-openmp=2024.1.0=h57928b3_965 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyha63f2e9_0 - - ipython=8.22.2=pyh7428d3b_0 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - isort=5.13.2=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py310h5588dad_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=hd248416_0 - - kiwisolver=1.4.5=py310h232114e_1 - - krb5=1.21.2=heb0366b_0 - - lcms2=2.16=h67d730c_0 - - lerc=4.0.0=h63175ca_0 - - libabseil=20230802.1=cxx17_h63175ca_0 - - libaec=1.1.3=h63175ca_0 - - libasprintf=0.22.5=h5728263_2 - - libasprintf-devel=0.22.5=h5728263_2 - - libblas=3.9.0=18_win64_mkl - - libboost-headers=1.84.0=h57928b3_2 - - libbrotlicommon=1.1.0=hcfcfb64_1 - - libbrotlidec=1.1.0=hcfcfb64_1 - - libbrotlienc=1.1.0=hcfcfb64_1 - - libcblas=3.9.0=18_win64_mkl - - libclang=15.0.7=default_h3a3e6c3_5 - - libclang13=15.0.7=default_hf64faad_5 - - libcrc32c=1.1.2=h0e60522_0 - - libcurl=8.7.1=hd5e4a3a_0 - - libdeflate=1.19=hcfcfb64_0 - - libexpat=2.6.2=h63175ca_0 - - libffi=3.4.2=h8ffe710_5 - - libgdal=3.6.4=h8c6448d_22 - - libgettextpo=0.22.5=h5728263_2 - - libgettextpo-devel=0.22.5=h5728263_2 - - libglib=2.78.1=he8f3873_0 - - libgoogle-cloud=2.12.0=hc7cbac0_5 - - libgrpc=1.60.1=h0bf0bfa_0 - - libhwloc=2.10.0=default_h2fffb23_1000 - - libiconv=1.17=hcfcfb64_2 - - libintl=0.22.5=h5728263_2 - - libintl-devel=0.22.5=h5728263_2 - - libjpeg-turbo=3.0.0=hcfcfb64_1 - - libkml=1.3.0=haf3e7a6_1018 - - liblapack=3.9.0=18_win64_mkl - - libnetcdf=4.9.2=nompi_h07c049d_113 - - libogg=1.3.4=h8ffe710_1 - - libpng=1.6.43=h19919ed_0 - - libpq=16.2=hdb24f17_1 - - libprotobuf=4.25.1=hb8276f3_2 - - libre2-11=2023.09.01=h8c5ae5e_1 - - librttopo=1.1.0=h92c5fdb_14 - - libsodium=1.0.18=h8d14728_1 - - libspatialite=5.0.1=hbf340bc_29 - - libsqlite=3.45.3=hcfcfb64_0 - - libssh2=1.11.0=h7dfc565_0 - - libtiff=4.6.0=h6e2ebb7_2 - - libvorbis=1.3.7=h0e60522_0 - - libwebp=1.3.2=hcfcfb64_1 - - libwebp-base=1.3.2=hcfcfb64_1 - - libxcb=1.15=hcd874cb_0 - - libxml2=2.12.6=hc3477c8_2 - - libxslt=1.1.39=h3df6e99_0 - - libzip=1.10.1=h1d365fa_3 - - libzlib=1.2.13=hcfcfb64_5 - - llvmlite=0.42.0=py310hb84602e_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcfcfb64_0 - - m2w64-gcc-libgfortran=5.3.0=6 - - m2w64-gcc-libs=5.3.0=7 - - m2w64-gcc-libs-core=5.3.0=7 - - m2w64-gmp=6.1.0=2 - - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 - - markupsafe=2.1.5=py310h8d17308_0 - - matplotlib-base=3.7.3=py310hc9baf74_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - mccabe=0.7.0=pyhd8ed1ab_0 - - minizip=4.0.5=h5bed578_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.1.0=h6a75c08_874 - - msgpack-python=1.0.7=py310h232114e_0 - - msys2-conda-epoch=20160418=1 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.3=pyhd8ed1ab_1 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - numba=0.59.1=py310h9ccaf4f_0 - - numcodecs=0.12.1=py310h00ffb61_0 - - numpy=1.23.5=py310h4a8f9c9_0 - - openjpeg=2.5.2=h3d672ee_0 - - openssl=3.2.1=hcfcfb64_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py310h1c4a608_1 - - pandoc=3.1.13=h57928b3_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h17e33f8_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py310hf5d6e66_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h63175ca_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - pluggy=1.4.0=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hc2f3c52_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h94c9ec1_1 - - proj=9.3.0=he13c7e8_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py310h8d17308_0 - - pthread-stubs=0.4=hcd874cb_1001 - - pthreads-win32=2.9.1=hfa6e2cd_3 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py310h847dae0_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pylint=3.1.0=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py310h1fd54f2_5 - - pyqt5-sip=12.12.2=py310h00ffb61_5 - - pyqtwebengine=5.15.9=py310he49db7d_5 - - pyside2=5.15.8=py310h1e56762_4 - - pysocks=1.7.1=pyh0701188_6 - - pytest=8.1.1=pyhd8ed1ab_0 - - pytest-cov=5.0.0=pyhd8ed1ab_0 - - python=3.10.14=h4de0772_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.10=4_cp310 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py310h3e78b6c_1 - - pywin32=306=py310h00ffb61_2 - - pywinpty=2.0.13=py310h00ffb61_0 - - pyyaml=6.0.1=py310h8d17308_1 - - pyzmq=24.0.1=py310hcd737a0_1 - - qt-main=5.15.8=h9e85ed6_17 - - qt-webengine=5.15.8=h4bf5c4e_4 - - re2=2023.09.01=hd3b24a8_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py310h87d50f1_0 - - scikit-image=0.19.3=py310h1c4a608_2 - - scikit-learn=1.2.2=py310hd266714_2 - - scipy=1.10.1=py310h578b7cb_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh5737063_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py310h839b4a8_0 - - sip=6.7.12=py310h00ffb61_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hfb803bf_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=hcfcfb64_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h91493d7_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh5737063_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hbf04793_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - tomlkit=0.12.4=pyha770c72_0 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py310he2412df_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - typing-extensions=4.11.0=hd8ed1ab_0 - - typing_extensions=4.11.0=pyha770c72_0 - - tzdata=2024a=h0c530f3_0 - - ucrt=10.0.22621.0=h57928b3_0 - - unicodedata2=15.1.0=py310h8d17308_0 - - uriparser=0.9.7=h1537add_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vc=14.3=hcf57466_18 - - vc14_runtime=14.38.33130=h82b7239_18 - - vectormath=0.2.2=py_0 - - vs2015_runtime=14.38.33130=hcb4865c_18 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - win_inet_pton=1.1.0=pyhd8ed1ab_6 - - winpty=0.4.3=4 - - xerces-c=3.2.5=h63175ca_0 - - xorg-libxau=1.0.11=hcd874cb_0 - - xorg-libxdmcp=1.1.3=hcd874cb_0 - - xz=5.2.6=h8d14728_0 - - yaml=0.2.5=h8ffe710_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.4=h0e60522_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hcfcfb64_5 - - zlib-ng=2.0.7=hcfcfb64_0 - - zstd=1.5.5=h12be248_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.10-win-64.lock.yml b/environments/conda-py-3.10-win-64.lock.yml deleted file mode 100644 index 2899330a2..000000000 --- a/environments/conda-py-3.10-win-64.lock.yml +++ /dev/null @@ -1,314 +0,0 @@ -# Generated by conda-lock. -# platform: win-64 -# input_hash: a579f89f074a4c96107b02a5e16413ccb81c10bc485d696a362bdcc8d8e1bcdf - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py310h8d17308_4 - - asciitree=0.3.3=py_2 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hbd69f2e_1 - - brotli=1.1.0=hcfcfb64_1 - - brotli-bin=1.1.0=hcfcfb64_1 - - brotli-python=1.1.0=py310h00ffb61_1 - - bzip2=1.0.8=hcfcfb64_5 - - c-ares=1.28.1=hcfcfb64_0 - - c-blosc2=2.13.2=h183a6f4_1 - - ca-certificates=2024.2.2=h56e8100_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h1fef639_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py310h8d17308_0 - - cfitsio=4.2.0=h9ebe7e4_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=win_pyh7428d3b_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py310h232114e_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py310h8d17308_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py310h00ffb61_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - discretize=0.10.0=py310h4856b71_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h63175ca_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py310h4a685fe_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=hbde0cde_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py310h8d17308_0 - - freetype=2.12.1=hdaf720e_2 - - freexl=2.0.0=h8276f4a_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py310haa9213b_22 - - geoana=0.4.0=py310h232114e_1 - - geos=3.12.0=h1537add_0 - - geotiff=1.7.1=hcf4a93f_14 - - gettext=0.22.5=h5728263_2 - - gettext-tools=0.22.5=h7d00a51_2 - - glib=2.78.1=h12be248_0 - - glib-tools=2.78.1=h12be248_0 - - gst-plugins-base=1.22.7=h001b923_0 - - gstreamer=1.22.7=hb4038d2_0 - - h5py=3.11.0=nompi_py310hde4a0ea_100 - - hdf4=4.2.15=h5557f11_7 - - hdf5=1.14.3=nompi_h73e8ff5_100 - - icu=73.2=h63175ca_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py310h3e78b6c_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - intel-openmp=2024.1.0=h57928b3_965 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyha63f2e9_0 - - ipython=8.22.2=pyh7428d3b_0 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py310h5588dad_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=hd248416_0 - - kiwisolver=1.4.5=py310h232114e_1 - - krb5=1.21.2=heb0366b_0 - - lcms2=2.16=h67d730c_0 - - lerc=4.0.0=h63175ca_0 - - libabseil=20230802.1=cxx17_h63175ca_0 - - libaec=1.1.3=h63175ca_0 - - libasprintf=0.22.5=h5728263_2 - - libasprintf-devel=0.22.5=h5728263_2 - - libblas=3.9.0=18_win64_mkl - - libboost-headers=1.84.0=h57928b3_2 - - libbrotlicommon=1.1.0=hcfcfb64_1 - - libbrotlidec=1.1.0=hcfcfb64_1 - - libbrotlienc=1.1.0=hcfcfb64_1 - - libcblas=3.9.0=18_win64_mkl - - libclang=15.0.7=default_h3a3e6c3_5 - - libclang13=15.0.7=default_hf64faad_5 - - libcrc32c=1.1.2=h0e60522_0 - - libcurl=8.7.1=hd5e4a3a_0 - - libdeflate=1.19=hcfcfb64_0 - - libexpat=2.6.2=h63175ca_0 - - libffi=3.4.2=h8ffe710_5 - - libgdal=3.6.4=h8c6448d_22 - - libgettextpo=0.22.5=h5728263_2 - - libgettextpo-devel=0.22.5=h5728263_2 - - libglib=2.78.1=he8f3873_0 - - libgoogle-cloud=2.12.0=hc7cbac0_5 - - libgrpc=1.60.1=h0bf0bfa_0 - - libhwloc=2.10.0=default_h2fffb23_1000 - - libiconv=1.17=hcfcfb64_2 - - libintl=0.22.5=h5728263_2 - - libintl-devel=0.22.5=h5728263_2 - - libjpeg-turbo=3.0.0=hcfcfb64_1 - - libkml=1.3.0=haf3e7a6_1018 - - liblapack=3.9.0=18_win64_mkl - - libnetcdf=4.9.2=nompi_h07c049d_113 - - libogg=1.3.4=h8ffe710_1 - - libpng=1.6.43=h19919ed_0 - - libpq=16.2=hdb24f17_1 - - libprotobuf=4.25.1=hb8276f3_2 - - libre2-11=2023.09.01=h8c5ae5e_1 - - librttopo=1.1.0=h92c5fdb_14 - - libsodium=1.0.18=h8d14728_1 - - libspatialite=5.0.1=hbf340bc_29 - - libsqlite=3.45.3=hcfcfb64_0 - - libssh2=1.11.0=h7dfc565_0 - - libtiff=4.6.0=h6e2ebb7_2 - - libvorbis=1.3.7=h0e60522_0 - - libwebp=1.3.2=hcfcfb64_1 - - libwebp-base=1.3.2=hcfcfb64_1 - - libxcb=1.15=hcd874cb_0 - - libxml2=2.12.6=hc3477c8_2 - - libxslt=1.1.39=h3df6e99_0 - - libzip=1.10.1=h1d365fa_3 - - libzlib=1.2.13=hcfcfb64_5 - - llvmlite=0.42.0=py310hb84602e_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcfcfb64_0 - - m2w64-gcc-libgfortran=5.3.0=6 - - m2w64-gcc-libs=5.3.0=7 - - m2w64-gcc-libs-core=5.3.0=7 - - m2w64-gmp=6.1.0=2 - - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 - - markupsafe=2.1.5=py310h8d17308_0 - - matplotlib-base=3.7.3=py310hc9baf74_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - minizip=4.0.5=h5bed578_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.1.0=h6a75c08_874 - - msgpack-python=1.0.7=py310h232114e_0 - - msys2-conda-epoch=20160418=1 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.3=pyhd8ed1ab_1 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - numba=0.59.1=py310h9ccaf4f_0 - - numcodecs=0.12.1=py310h00ffb61_0 - - numpy=1.23.5=py310h4a8f9c9_0 - - openjpeg=2.5.2=h3d672ee_0 - - openssl=3.2.1=hcfcfb64_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py310h1c4a608_1 - - pandoc=3.1.13=h57928b3_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h17e33f8_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py310hf5d6e66_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h63175ca_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hc2f3c52_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h94c9ec1_1 - - proj=9.3.0=he13c7e8_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py310h8d17308_0 - - pthread-stubs=0.4=hcd874cb_1001 - - pthreads-win32=2.9.1=hfa6e2cd_3 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py310h847dae0_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py310h1fd54f2_5 - - pyqt5-sip=12.12.2=py310h00ffb61_5 - - pyqtwebengine=5.15.9=py310he49db7d_5 - - pyside2=5.15.8=py310h1e56762_4 - - pysocks=1.7.1=pyh0701188_6 - - python=3.10.14=h4de0772_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.10=4_cp310 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py310h3e78b6c_1 - - pywin32=306=py310h00ffb61_2 - - pywinpty=2.0.13=py310h00ffb61_0 - - pyyaml=6.0.1=py310h8d17308_1 - - pyzmq=24.0.1=py310hcd737a0_1 - - qt-main=5.15.8=h9e85ed6_17 - - qt-webengine=5.15.8=h4bf5c4e_4 - - re2=2023.09.01=hd3b24a8_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py310h87d50f1_0 - - scikit-image=0.19.3=py310h1c4a608_2 - - scikit-learn=1.2.2=py310hd266714_2 - - scipy=1.10.1=py310h578b7cb_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh5737063_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py310h839b4a8_0 - - sip=6.7.12=py310h00ffb61_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hfb803bf_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=hcfcfb64_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h91493d7_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh5737063_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hbf04793_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py310he2412df_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - tzdata=2024a=h0c530f3_0 - - ucrt=10.0.22621.0=h57928b3_0 - - unicodedata2=15.1.0=py310h8d17308_0 - - uriparser=0.9.7=h1537add_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vc=14.3=hcf57466_18 - - vc14_runtime=14.38.33130=h82b7239_18 - - vectormath=0.2.2=py_0 - - vs2015_runtime=14.38.33130=hcb4865c_18 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - win_inet_pton=1.1.0=pyhd8ed1ab_6 - - winpty=0.4.3=4 - - xerces-c=3.2.5=h63175ca_0 - - xorg-libxau=1.0.11=hcd874cb_0 - - xorg-libxdmcp=1.1.3=hcd874cb_0 - - xz=5.2.6=h8d14728_0 - - yaml=0.2.5=h8ffe710_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.4=h0e60522_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hcfcfb64_5 - - zlib-ng=2.0.7=hcfcfb64_0 - - zstd=1.5.5=h12be248_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.9-linux-64-dev.lock.yml b/environments/conda-py-3.9-linux-64-dev.lock.yml deleted file mode 100644 index df485b58c..000000000 --- a/environments/conda-py-3.9-linux-64-dev.lock.yml +++ /dev/null @@ -1,389 +0,0 @@ -# Generated by conda-lock. -# platform: linux-64 -# input_hash: d7514d18c40d6cddbb40654ada932f51065775b102c52bffecd36b67b3839c05 - -channels: - - conda-forge -dependencies: - - _libgcc_mutex=0.1=conda_forge - - _openmp_mutex=4.5=2_kmp_llvm - - alsa-lib=1.2.11=hd590300_1 - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py39hd1e30aa_4 - - asciitree=0.3.3=py_2 - - astroid=3.1.0=py39hf3d152e_0 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attr=2.5.1=h166bdaf_1 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hc2324a3_1 - - brotli=1.1.0=hd590300_1 - - brotli-bin=1.1.0=hd590300_1 - - brotli-python=1.1.0=py39h3d6467e_1 - - bzip2=1.0.8=hd590300_5 - - c-ares=1.28.1=hd590300_0 - - c-blosc2=2.13.2=hb4ffafa_1 - - ca-certificates=2024.2.2=hbcca054_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h3faef2a_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py39h7a31438_0 - - cfitsio=4.2.0=hd9d235c_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - colorama=0.4.6=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py39h7633fee_0 - - coverage=7.4.4=py39hd1e30aa_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py39hd1e30aa_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - dbus=1.13.6=h5008d03_3 - - debugpy=1.8.1=py39h3d6467e_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - dill=0.3.8=pyhd8ed1ab_0 - - discretize=0.10.0=py39hda80f44_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - exceptiongroup=1.2.0=pyhd8ed1ab_2 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h59595ed_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py39h0801953_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h14ed4e7_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py39hd1e30aa_0 - - freetype=2.12.1=h267a509_2 - - freexl=2.0.0=h743c826_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py39h41b90d8_22 - - geoana=0.4.0=py39hf939315_1 - - geos=3.12.0=h59595ed_0 - - geotiff=1.7.1=hf074850_14 - - gettext=0.22.5=h59595ed_2 - - gettext-tools=0.22.5=h59595ed_2 - - giflib=5.2.2=hd590300_0 - - glib=2.78.1=hfc55251_0 - - glib-tools=2.78.1=hfc55251_0 - - graphite2=1.3.13=h59595ed_1003 - - gst-plugins-base=1.22.7=h8e1006c_0 - - gstreamer=1.22.7=h98fc4e7_0 - - h5py=3.11.0=nompi_py39h2c511df_100 - - harfbuzz=8.3.0=h3d44ed6_0 - - hdf4=4.2.15=h2a13503_7 - - hdf5=1.14.3=nompi_h4f84152_100 - - icu=73.2=h59595ed_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py39h44dd56e_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib-resources=6.4.0=pyhd8ed1ab_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - iniconfig=2.0.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyhd33586a_0 - - ipython=8.18.1=pyh707e725_3 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - isort=5.13.2=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h7ab15ed_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py39hf3d152e_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h2f55d51_0 - - keyutils=1.6.1=h166bdaf_0 - - kiwisolver=1.4.5=py39h7633fee_1 - - krb5=1.21.2=h659d440_0 - - lame=3.100=h166bdaf_1003 - - lcms2=2.16=hb7c19ff_0 - - ld_impl_linux-64=2.40=h41732ed_0 - - lerc=4.0.0=h27087fc_0 - - libabseil=20230802.1=cxx17_h59595ed_0 - - libaec=1.1.3=h59595ed_0 - - libasprintf=0.22.5=h661eb56_2 - - libasprintf-devel=0.22.5=h661eb56_2 - - libblas=3.9.0=16_linux64_mkl - - libboost-headers=1.84.0=ha770c72_2 - - libbrotlicommon=1.1.0=hd590300_1 - - libbrotlidec=1.1.0=hd590300_1 - - libbrotlienc=1.1.0=hd590300_1 - - libcap=2.69=h0f662aa_0 - - libcblas=3.9.0=16_linux64_mkl - - libclang=15.0.7=default_h127d8a8_5 - - libclang13=15.0.7=default_h5d6823c_5 - - libcrc32c=1.1.2=h9c3ff4c_0 - - libcups=2.3.3=h4637d8d_4 - - libcurl=8.7.1=hca28451_0 - - libdeflate=1.19=hd590300_0 - - libedit=3.1.20191231=he28a2e2_2 - - libev=4.33=hd590300_2 - - libevent=2.1.12=hf998b51_1 - - libexpat=2.6.2=h59595ed_0 - - libffi=3.4.2=h7f98852_5 - - libflac=1.4.3=h59595ed_0 - - libgcc-ng=13.2.0=h807b86a_5 - - libgcrypt=1.10.3=hd590300_0 - - libgdal=3.6.4=hb454697_22 - - libgettextpo=0.22.5=h59595ed_2 - - libgettextpo-devel=0.22.5=h59595ed_2 - - libgfortran-ng=13.2.0=h69a702a_5 - - libgfortran5=13.2.0=ha4646dd_5 - - libglib=2.78.1=hebfc3b9_0 - - libgoogle-cloud=2.12.0=hef10d8f_5 - - libgpg-error=1.48=h71f35ed_0 - - libgrpc=1.60.1=h74775cd_0 - - libhwloc=2.10.0=default_h2fb2949_1000 - - libiconv=1.17=hd590300_2 - - libjpeg-turbo=3.0.0=hd590300_1 - - libkml=1.3.0=h01aab08_1018 - - liblapack=3.9.0=16_linux64_mkl - - libllvm14=14.0.6=hcd5def8_4 - - libllvm15=15.0.7=hb3ce162_4 - - libnetcdf=4.9.2=nompi_h9612171_113 - - libnghttp2=1.58.0=h47da74e_1 - - libnsl=2.0.1=hd590300_0 - - libogg=1.3.4=h7f98852_1 - - libopus=1.3.1=h7f98852_1 - - libpng=1.6.43=h2797004_0 - - libpq=16.2=h33b98f1_1 - - libprotobuf=4.25.1=hf27288f_2 - - libre2-11=2023.09.01=h7a70373_1 - - librttopo=1.1.0=hb58d41b_14 - - libsndfile=1.2.2=hc60ed4a_1 - - libsodium=1.0.18=h36c2ea0_1 - - libspatialite=5.0.1=h090f1da_29 - - libsqlite=3.45.3=h2797004_0 - - libssh2=1.11.0=h0841786_0 - - libstdcxx-ng=13.2.0=h7e041cc_5 - - libsystemd0=255=h3516f8a_1 - - libtiff=4.6.0=ha9c0a0a_2 - - libuuid=2.38.1=h0b41bf4_0 - - libvorbis=1.3.7=h9c3ff4c_0 - - libwebp=1.3.2=h658648e_1 - - libwebp-base=1.3.2=hd590300_1 - - libxcb=1.15=h0b41bf4_0 - - libxcrypt=4.4.36=hd590300_1 - - libxkbcommon=1.7.0=h662e7e4_0 - - libxml2=2.12.6=h232c23b_2 - - libxslt=1.1.39=h76b75d6_0 - - libzip=1.10.1=h2629f0a_3 - - libzlib=1.2.13=hd590300_5 - - llvm-openmp=18.1.3=h4dfa4b3_0 - - llvmlite=0.42.0=py39h174d805_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcb278e6_0 - - markupsafe=2.1.5=py39hd1e30aa_0 - - matplotlib-base=3.7.3=py39he9076e7_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - mccabe=0.7.0=pyhd8ed1ab_0 - - minizip=4.0.5=h0ab5242_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h84fe81f_16997 - - mpg123=1.32.6=h59595ed_0 - - msgpack-python=1.0.7=py39h7633fee_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=hf1915f5_6 - - mysql-libs=8.0.33=hca2cd23_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h59595ed_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.2.1=pyhd8ed1ab_0 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=h27087fc_0 - - nss=3.98=h1d7d5a4_0 - - numba=0.59.1=py39h615d6bd_0 - - numcodecs=0.12.1=py39h3d6467e_0 - - numpy=1.23.5=py39h3d75532_0 - - openjpeg=2.5.2=h488ebb8_0 - - openssl=3.2.1=hd590300_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py39h2ad29b5_1 - - pandoc=3.1.13=ha770c72_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=hc3806b6_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py39h90c7501_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.2=h59595ed_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - pluggy=1.4.0=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=h590f24d_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h82ecc9d_1 - - proj=9.3.0=h1d62c97_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py39hd1e30aa_0 - - pthread-stubs=0.4=h36c2ea0_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pulseaudio-client=16.1=hb77b528_5 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py39h051f8f4_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pylint=3.1.0=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py39h52134e7_5 - - pyqt5-sip=12.12.2=py39h3d6467e_5 - - pyqtwebengine=5.15.9=py39h071a739_5 - - pyside2=5.15.8=py39h79e5a0c_4 - - pysocks=1.7.1=pyha2e5f31_6 - - pytest=8.1.1=pyhd8ed1ab_0 - - pytest-cov=5.0.0=pyhd8ed1ab_0 - - python=3.9.19=h0755675_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.9=4_cp39 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py39h44dd56e_1 - - pyyaml=6.0.1=py39hd1e30aa_1 - - pyzmq=24.0.1=py39headdf64_1 - - qt-main=5.15.8=h82b777d_17 - - qt-webengine=5.15.8=h75ea521_4 - - re2=2023.09.01=h7f4b329_1 - - readline=8.2=h8228510_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py39h9fdd4d6_0 - - scikit-image=0.19.3=py39h4661b88_2 - - scikit-learn=1.2.2=py39hc236052_2 - - scipy=1.10.1=py39h6183b62_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh0d859eb_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py39h1bc45ef_0 - - sip=6.7.12=py39h3d6467e_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hdb0a2a9_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h2c6b66d_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h00ab1b0_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh0d859eb_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=h8c794c1_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - tomlkit=0.12.4=pyha770c72_0 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py39hb9d737c_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - typing-extensions=4.11.0=hd8ed1ab_0 - - typing_extensions=4.11.0=pyha770c72_0 - - tzcode=2024a=h3f72095_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py39hd1e30aa_0 - - uriparser=0.9.7=h59595ed_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xcb-util=0.4.0=hd590300_1 - - xcb-util-image=0.4.0=h8ee46fc_1 - - xcb-util-keysyms=0.4.0=h8ee46fc_1 - - xcb-util-renderutil=0.3.9=hd590300_1 - - xcb-util-wm=0.4.1=h8ee46fc_1 - - xerces-c=3.2.5=hac6953d_0 - - xkeyboard-config=2.41=hd590300_0 - - xorg-compositeproto=0.4.2=h7f98852_1001 - - xorg-damageproto=1.2.1=h7f98852_1002 - - xorg-fixesproto=5.0=h7f98852_1002 - - xorg-inputproto=2.3.2=h7f98852_1002 - - xorg-kbproto=1.0.7=h7f98852_1002 - - xorg-libice=1.1.1=hd590300_0 - - xorg-libsm=1.2.4=h7391055_0 - - xorg-libx11=1.8.9=h8ee46fc_0 - - xorg-libxau=1.0.11=hd590300_0 - - xorg-libxcomposite=0.4.6=h0b41bf4_1 - - xorg-libxdamage=1.1.5=h7f98852_1 - - xorg-libxdmcp=1.1.3=h7f98852_0 - - xorg-libxext=1.3.4=h0b41bf4_2 - - xorg-libxfixes=5.0.3=h7f98852_1004 - - xorg-libxi=1.7.10=h7f98852_0 - - xorg-libxrandr=1.5.2=h7f98852_1 - - xorg-libxrender=0.9.11=hd590300_0 - - xorg-libxtst=1.2.3=h7f98852_1002 - - xorg-randrproto=1.5.0=h7f98852_1001 - - xorg-recordproto=1.14.2=h7f98852_1002 - - xorg-renderproto=0.11.1=h7f98852_1002 - - xorg-util-macros=1.19.3=h7f98852_0 - - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002 - - xorg-xproto=7.0.31=h7f98852_1007 - - xz=5.2.6=h166bdaf_0 - - yaml=0.2.5=h7f98852_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h59595ed_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hd590300_5 - - zlib-ng=2.0.7=h0b41bf4_0 - - zstd=1.5.5=hfc55251_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.9-linux-64.lock.yml b/environments/conda-py-3.9-linux-64.lock.yml deleted file mode 100644 index 78bdeac6a..000000000 --- a/environments/conda-py-3.9-linux-64.lock.yml +++ /dev/null @@ -1,372 +0,0 @@ -# Generated by conda-lock. -# platform: linux-64 -# input_hash: d7514d18c40d6cddbb40654ada932f51065775b102c52bffecd36b67b3839c05 - -channels: - - conda-forge -dependencies: - - _libgcc_mutex=0.1=conda_forge - - _openmp_mutex=4.5=2_kmp_llvm - - alsa-lib=1.2.11=hd590300_1 - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py39hd1e30aa_4 - - asciitree=0.3.3=py_2 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attr=2.5.1=h166bdaf_1 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hc2324a3_1 - - brotli=1.1.0=hd590300_1 - - brotli-bin=1.1.0=hd590300_1 - - brotli-python=1.1.0=py39h3d6467e_1 - - bzip2=1.0.8=hd590300_5 - - c-ares=1.28.1=hd590300_0 - - c-blosc2=2.13.2=hb4ffafa_1 - - ca-certificates=2024.2.2=hbcca054_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h3faef2a_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py39h7a31438_0 - - cfitsio=4.2.0=hd9d235c_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py39h7633fee_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py39hd1e30aa_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - dbus=1.13.6=h5008d03_3 - - debugpy=1.8.1=py39h3d6467e_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - discretize=0.10.0=py39hda80f44_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h59595ed_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py39h0801953_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h14ed4e7_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py39hd1e30aa_0 - - freetype=2.12.1=h267a509_2 - - freexl=2.0.0=h743c826_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py39h41b90d8_22 - - geoana=0.4.0=py39hf939315_1 - - geos=3.12.0=h59595ed_0 - - geotiff=1.7.1=hf074850_14 - - gettext=0.22.5=h59595ed_2 - - gettext-tools=0.22.5=h59595ed_2 - - giflib=5.2.2=hd590300_0 - - glib=2.78.1=hfc55251_0 - - glib-tools=2.78.1=hfc55251_0 - - graphite2=1.3.13=h59595ed_1003 - - gst-plugins-base=1.22.7=h8e1006c_0 - - gstreamer=1.22.7=h98fc4e7_0 - - h5py=3.11.0=nompi_py39h2c511df_100 - - harfbuzz=8.3.0=h3d44ed6_0 - - hdf4=4.2.15=h2a13503_7 - - hdf5=1.14.3=nompi_h4f84152_100 - - icu=73.2=h59595ed_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py39h44dd56e_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib-resources=6.4.0=pyhd8ed1ab_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyhd33586a_0 - - ipython=8.18.1=pyh707e725_3 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h7ab15ed_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py39hf3d152e_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h2f55d51_0 - - keyutils=1.6.1=h166bdaf_0 - - kiwisolver=1.4.5=py39h7633fee_1 - - krb5=1.21.2=h659d440_0 - - lame=3.100=h166bdaf_1003 - - lcms2=2.16=hb7c19ff_0 - - ld_impl_linux-64=2.40=h41732ed_0 - - lerc=4.0.0=h27087fc_0 - - libabseil=20230802.1=cxx17_h59595ed_0 - - libaec=1.1.3=h59595ed_0 - - libasprintf=0.22.5=h661eb56_2 - - libasprintf-devel=0.22.5=h661eb56_2 - - libblas=3.9.0=16_linux64_mkl - - libboost-headers=1.84.0=ha770c72_2 - - libbrotlicommon=1.1.0=hd590300_1 - - libbrotlidec=1.1.0=hd590300_1 - - libbrotlienc=1.1.0=hd590300_1 - - libcap=2.69=h0f662aa_0 - - libcblas=3.9.0=16_linux64_mkl - - libclang=15.0.7=default_h127d8a8_5 - - libclang13=15.0.7=default_h5d6823c_5 - - libcrc32c=1.1.2=h9c3ff4c_0 - - libcups=2.3.3=h4637d8d_4 - - libcurl=8.7.1=hca28451_0 - - libdeflate=1.19=hd590300_0 - - libedit=3.1.20191231=he28a2e2_2 - - libev=4.33=hd590300_2 - - libevent=2.1.12=hf998b51_1 - - libexpat=2.6.2=h59595ed_0 - - libffi=3.4.2=h7f98852_5 - - libflac=1.4.3=h59595ed_0 - - libgcc-ng=13.2.0=h807b86a_5 - - libgcrypt=1.10.3=hd590300_0 - - libgdal=3.6.4=hb454697_22 - - libgettextpo=0.22.5=h59595ed_2 - - libgettextpo-devel=0.22.5=h59595ed_2 - - libgfortran-ng=13.2.0=h69a702a_5 - - libgfortran5=13.2.0=ha4646dd_5 - - libglib=2.78.1=hebfc3b9_0 - - libgoogle-cloud=2.12.0=hef10d8f_5 - - libgpg-error=1.48=h71f35ed_0 - - libgrpc=1.60.1=h74775cd_0 - - libhwloc=2.10.0=default_h2fb2949_1000 - - libiconv=1.17=hd590300_2 - - libjpeg-turbo=3.0.0=hd590300_1 - - libkml=1.3.0=h01aab08_1018 - - liblapack=3.9.0=16_linux64_mkl - - libllvm14=14.0.6=hcd5def8_4 - - libllvm15=15.0.7=hb3ce162_4 - - libnetcdf=4.9.2=nompi_h9612171_113 - - libnghttp2=1.58.0=h47da74e_1 - - libnsl=2.0.1=hd590300_0 - - libogg=1.3.4=h7f98852_1 - - libopus=1.3.1=h7f98852_1 - - libpng=1.6.43=h2797004_0 - - libpq=16.2=h33b98f1_1 - - libprotobuf=4.25.1=hf27288f_2 - - libre2-11=2023.09.01=h7a70373_1 - - librttopo=1.1.0=hb58d41b_14 - - libsndfile=1.2.2=hc60ed4a_1 - - libsodium=1.0.18=h36c2ea0_1 - - libspatialite=5.0.1=h090f1da_29 - - libsqlite=3.45.3=h2797004_0 - - libssh2=1.11.0=h0841786_0 - - libstdcxx-ng=13.2.0=h7e041cc_5 - - libsystemd0=255=h3516f8a_1 - - libtiff=4.6.0=ha9c0a0a_2 - - libuuid=2.38.1=h0b41bf4_0 - - libvorbis=1.3.7=h9c3ff4c_0 - - libwebp=1.3.2=h658648e_1 - - libwebp-base=1.3.2=hd590300_1 - - libxcb=1.15=h0b41bf4_0 - - libxcrypt=4.4.36=hd590300_1 - - libxkbcommon=1.7.0=h662e7e4_0 - - libxml2=2.12.6=h232c23b_2 - - libxslt=1.1.39=h76b75d6_0 - - libzip=1.10.1=h2629f0a_3 - - libzlib=1.2.13=hd590300_5 - - llvm-openmp=18.1.3=h4dfa4b3_0 - - llvmlite=0.42.0=py39h174d805_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcb278e6_0 - - markupsafe=2.1.5=py39hd1e30aa_0 - - matplotlib-base=3.7.3=py39he9076e7_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - minizip=4.0.5=h0ab5242_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h84fe81f_16997 - - mpg123=1.32.6=h59595ed_0 - - msgpack-python=1.0.7=py39h7633fee_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=hf1915f5_6 - - mysql-libs=8.0.33=hca2cd23_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h59595ed_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.2.1=pyhd8ed1ab_0 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=h27087fc_0 - - nss=3.98=h1d7d5a4_0 - - numba=0.59.1=py39h615d6bd_0 - - numcodecs=0.12.1=py39h3d6467e_0 - - numpy=1.23.5=py39h3d75532_0 - - openjpeg=2.5.2=h488ebb8_0 - - openssl=3.2.1=hd590300_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py39h2ad29b5_1 - - pandoc=3.1.13=ha770c72_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=hc3806b6_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py39h90c7501_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.2=h59595ed_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=h590f24d_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h82ecc9d_1 - - proj=9.3.0=h1d62c97_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py39hd1e30aa_0 - - pthread-stubs=0.4=h36c2ea0_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pulseaudio-client=16.1=hb77b528_5 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py39h051f8f4_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py39h52134e7_5 - - pyqt5-sip=12.12.2=py39h3d6467e_5 - - pyqtwebengine=5.15.9=py39h071a739_5 - - pyside2=5.15.8=py39h79e5a0c_4 - - pysocks=1.7.1=pyha2e5f31_6 - - python=3.9.19=h0755675_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.9=4_cp39 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py39h44dd56e_1 - - pyyaml=6.0.1=py39hd1e30aa_1 - - pyzmq=24.0.1=py39headdf64_1 - - qt-main=5.15.8=h82b777d_17 - - qt-webengine=5.15.8=h75ea521_4 - - re2=2023.09.01=h7f4b329_1 - - readline=8.2=h8228510_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py39h9fdd4d6_0 - - scikit-image=0.19.3=py39h4661b88_2 - - scikit-learn=1.2.2=py39hc236052_2 - - scipy=1.10.1=py39h6183b62_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh0d859eb_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py39h1bc45ef_0 - - sip=6.7.12=py39h3d6467e_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hdb0a2a9_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h2c6b66d_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h00ab1b0_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh0d859eb_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=h8c794c1_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=noxft_h4845f30_101 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py39hb9d737c_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - tzcode=2024a=h3f72095_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py39hd1e30aa_0 - - uriparser=0.9.7=h59595ed_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xcb-util=0.4.0=hd590300_1 - - xcb-util-image=0.4.0=h8ee46fc_1 - - xcb-util-keysyms=0.4.0=h8ee46fc_1 - - xcb-util-renderutil=0.3.9=hd590300_1 - - xcb-util-wm=0.4.1=h8ee46fc_1 - - xerces-c=3.2.5=hac6953d_0 - - xkeyboard-config=2.41=hd590300_0 - - xorg-compositeproto=0.4.2=h7f98852_1001 - - xorg-damageproto=1.2.1=h7f98852_1002 - - xorg-fixesproto=5.0=h7f98852_1002 - - xorg-inputproto=2.3.2=h7f98852_1002 - - xorg-kbproto=1.0.7=h7f98852_1002 - - xorg-libice=1.1.1=hd590300_0 - - xorg-libsm=1.2.4=h7391055_0 - - xorg-libx11=1.8.9=h8ee46fc_0 - - xorg-libxau=1.0.11=hd590300_0 - - xorg-libxcomposite=0.4.6=h0b41bf4_1 - - xorg-libxdamage=1.1.5=h7f98852_1 - - xorg-libxdmcp=1.1.3=h7f98852_0 - - xorg-libxext=1.3.4=h0b41bf4_2 - - xorg-libxfixes=5.0.3=h7f98852_1004 - - xorg-libxi=1.7.10=h7f98852_0 - - xorg-libxrandr=1.5.2=h7f98852_1 - - xorg-libxrender=0.9.11=hd590300_0 - - xorg-libxtst=1.2.3=h7f98852_1002 - - xorg-randrproto=1.5.0=h7f98852_1001 - - xorg-recordproto=1.14.2=h7f98852_1002 - - xorg-renderproto=0.11.1=h7f98852_1002 - - xorg-util-macros=1.19.3=h7f98852_0 - - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002 - - xorg-xproto=7.0.31=h7f98852_1007 - - xz=5.2.6=h166bdaf_0 - - yaml=0.2.5=h7f98852_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h59595ed_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hd590300_5 - - zlib-ng=2.0.7=h0b41bf4_0 - - zstd=1.5.5=hfc55251_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.9-osx-64-dev.lock.yml b/environments/conda-py-3.9-osx-64-dev.lock.yml deleted file mode 100644 index e3c574df1..000000000 --- a/environments/conda-py-3.9-osx-64-dev.lock.yml +++ /dev/null @@ -1,340 +0,0 @@ -# Generated by conda-lock. -# platform: osx-64 -# input_hash: 47b1fb4228ea370c49682cfb5c08704f90085fd1f217af35e49f85cfc940addd - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - appnope=0.1.4=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py39hdc70f33_4 - - asciitree=0.3.3=py_2 - - astroid=3.1.0=py39h6e9494a_0 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hafa3907_1 - - brotli=1.1.0=h0dc2134_1 - - brotli-bin=1.1.0=h0dc2134_1 - - brotli-python=1.1.0=py39h840bb9f_1 - - bzip2=1.0.8=h10d778d_5 - - c-ares=1.28.1=h10d778d_0 - - c-blosc2=2.13.2=h0ae8482_1 - - ca-certificates=2024.2.2=h8857fd0_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h99e66fa_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py39h18ef598_0 - - cfitsio=4.2.0=hd56cc12_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - colorama=0.4.6=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py39h0ca7971_0 - - coverage=7.4.4=py39ha09f3b3_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py39ha09f3b3_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py39hd253f6c_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - dill=0.3.8=pyhd8ed1ab_0 - - discretize=0.10.0=py39hd83d8d7_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - exceptiongroup=1.2.0=pyhd8ed1ab_2 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h73e2aa4_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py39hcea2a47_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h5bb23bf_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py39ha09f3b3_0 - - freetype=2.12.1=h60636b9_2 - - freexl=2.0.0=h3ec172f_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py39h4ab6eaa_22 - - geoana=0.4.0=py39h92daf61_1 - - geos=3.12.0=he965462_0 - - geotiff=1.7.1=h889ec99_14 - - gettext=0.22.5=h5ff76d1_2 - - gettext-tools=0.22.5=h5ff76d1_2 - - giflib=5.2.2=h10d778d_0 - - glib=2.78.1=hf4d7fad_0 - - glib-tools=2.78.1=hf4d7fad_0 - - gst-plugins-base=1.22.7=hd283e88_0 - - gstreamer=1.22.7=h8954545_0 - - h5py=3.11.0=nompi_py39h9420513_100 - - hdf4=4.2.15=h8138101_7 - - hdf5=1.14.3=nompi_h691f4bf_100 - - icu=73.2=hf5e326d_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py39hd01001f_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib-resources=6.4.0=pyhd8ed1ab_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - iniconfig=2.0.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyh3cd1d5f_0 - - ipython=8.18.1=pyh707e725_3 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - isort=5.13.2=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h8e11ae5_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.1=py39h6e9494a_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h5f07ac3_0 - - kiwisolver=1.4.5=py39h8ee36c8_1 - - krb5=1.21.2=hb884880_0 - - lcms2=2.16=ha2f27b4_0 - - lerc=4.0.0=hb486fe8_0 - - libabseil=20230802.1=cxx17_h048a20a_0 - - libaec=1.1.3=h73e2aa4_0 - - libasprintf=0.22.5=h5ff76d1_2 - - libasprintf-devel=0.22.5=h5ff76d1_2 - - libblas=3.9.0=18_osx64_mkl - - libboost-headers=1.84.0=h694c41f_2 - - libbrotlicommon=1.1.0=h0dc2134_1 - - libbrotlidec=1.1.0=h0dc2134_1 - - libbrotlienc=1.1.0=h0dc2134_1 - - libcblas=3.9.0=18_osx64_mkl - - libclang=15.0.7=default_h7151d67_5 - - libclang13=15.0.7=default_h0edc4dd_5 - - libcrc32c=1.1.2=he49afe7_0 - - libcurl=8.7.1=h726d00d_0 - - libcxx=16.0.6=hd57cbcb_0 - - libdeflate=1.19=ha4e1b8e_0 - - libedit=3.1.20191231=h0678c8f_2 - - libev=4.33=h10d778d_2 - - libexpat=2.6.2=h73e2aa4_0 - - libffi=3.4.2=h0d85af4_5 - - libgdal=3.6.4=hbff29b3_22 - - libgettextpo=0.22.5=h5ff76d1_2 - - libgettextpo-devel=0.22.5=h5ff76d1_2 - - libgfortran=5.0.0=13_2_0_h97931a8_3 - - libgfortran5=13.2.0=h2873a65_3 - - libglib=2.78.1=h6d9ecee_0 - - libgoogle-cloud=2.12.0=he77a663_5 - - libgrpc=1.60.1=h038e8f1_0 - - libhwloc=2.10.0=default_h1321489_1000 - - libiconv=1.17=hd75f5a5_2 - - libintl=0.22.5=h5ff76d1_2 - - libintl-devel=0.22.5=h5ff76d1_2 - - libjpeg-turbo=3.0.0=h0dc2134_1 - - libkml=1.3.0=hab3ca0e_1018 - - liblapack=3.9.0=18_osx64_mkl - - libllvm14=14.0.6=hc8e404f_4 - - libllvm15=15.0.7=hbedff68_4 - - libnetcdf=4.9.2=nompi_h7760872_113 - - libnghttp2=1.58.0=h64cf6d3_1 - - libogg=1.3.4=h35c211d_1 - - libopus=1.3.1=hc929b4f_1 - - libpng=1.6.43=h92b6c6a_0 - - libpq=16.2=ha925e61_1 - - libprotobuf=4.25.1=hc4f2305_2 - - libre2-11=2023.09.01=h4694dbf_1 - - librttopo=1.1.0=h23f359d_14 - - libsodium=1.0.18=hbcb3906_1 - - libspatialite=5.0.1=h231fb02_29 - - libsqlite=3.45.3=h92b6c6a_0 - - libssh2=1.11.0=hd019ec5_0 - - libtiff=4.6.0=h684deea_2 - - libvorbis=1.3.7=h046ec9c_0 - - libwebp=1.3.2=h44782d1_1 - - libwebp-base=1.3.2=h10d778d_1 - - libxcb=1.15=hb7f2c08_0 - - libxml2=2.12.6=hc0ae0f7_2 - - libxslt=1.1.39=h03b04e6_0 - - libzip=1.10.1=hc158999_3 - - libzlib=1.2.13=h8a1eda9_5 - - llvm-openmp=18.1.3=hb6ac08f_0 - - llvmlite=0.42.0=py39he5a6977_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hf0c8a7f_0 - - markupsafe=2.1.5=py39ha09f3b3_0 - - matplotlib-base=3.7.3=py39he57df45_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - mccabe=0.7.0=pyhd8ed1ab_0 - - minizip=4.0.5=h37d7099_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h44ed08c_16952 - - msgpack-python=1.0.7=py39h6be1789_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=h1d20c9b_6 - - mysql-libs=8.0.33=hed35180_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h73e2aa4_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.2.1=pyhd8ed1ab_0 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=hea0b92c_0 - - nss=3.98=ha05da47_0 - - numba=0.59.1=py39hb7f44fa_0 - - numcodecs=0.12.1=py39h110ca85_0 - - numpy=1.23.5=py39hdfa1d0c_0 - - openjpeg=2.5.2=h7310d3a_0 - - openssl=3.2.1=hd75f5a5_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py39hecff1ad_1 - - pandoc=3.1.13=h694c41f_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h1c4e4bc_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py39h9dabb2a_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h73e2aa4_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - pluggy=1.4.0=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hdd5a5e8_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h06f2bd8_1 - - proj=9.3.0=h23b96cc_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py39ha09f3b3_0 - - pthread-stubs=0.4=hc929b4f_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py39h29261d1_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pylint=3.1.0=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyobjc-core=10.2=py39h8602b6b_0 - - pyobjc-framework-cocoa=10.2=py39h8602b6b_0 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py39h3dce684_5 - - pyqt5-sip=12.12.2=py39hb11a7c1_5 - - pyqtwebengine=5.15.9=py39h6ed9014_5 - - pyside2=5.15.8=py39hfaf76cb_4 - - pysocks=1.7.1=pyha2e5f31_6 - - pytest=8.1.1=pyhd8ed1ab_0 - - pytest-cov=5.0.0=pyhd8ed1ab_0 - - python=3.9.19=h7a9c478_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.9=4_cp39 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py39hd01001f_1 - - pyyaml=6.0.1=py39hdc70f33_1 - - pyzmq=24.0.1=py39hed8f129_1 - - qt-main=5.15.8=h4385fff_17 - - qt-webengine=5.15.8=h5f65913_4 - - re2=2023.09.01=hb168e87_1 - - readline=8.2=h9e318b2_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py39hcf47035_0 - - scikit-image=0.19.3=py39hecff1ad_2 - - scikit-learn=1.2.2=py39hcb35850_2 - - scipy=1.10.1=py39hded996c_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh31c8845_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py39h808d968_0 - - sip=6.7.12=py39h110ca85_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=h6dc393e_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h7461747_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h7728843_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh31c8845_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hd3a41d5_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h1abcd95_1 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - tomlkit=0.12.4=pyha770c72_0 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py39h63b48b0_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - typing-extensions=4.11.0=hd8ed1ab_0 - - typing_extensions=4.11.0=pyha770c72_0 - - tzcode=2024a=h10d778d_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py39hdc70f33_0 - - uriparser=0.9.7=he965462_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xerces-c=3.2.5=hbbe9ea5_0 - - xorg-libxau=1.0.11=h0dc2134_0 - - xorg-libxdmcp=1.1.3=h35c211d_0 - - xz=5.2.6=h775f41a_0 - - yaml=0.2.5=h0d85af4_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h93d8f39_0 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=h8a1eda9_5 - - zlib-ng=2.0.7=hb7f2c08_0 - - zstd=1.5.5=h829000d_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.9-osx-64.lock.yml b/environments/conda-py-3.9-osx-64.lock.yml deleted file mode 100644 index 4650f95b8..000000000 --- a/environments/conda-py-3.9-osx-64.lock.yml +++ /dev/null @@ -1,323 +0,0 @@ -# Generated by conda-lock. -# platform: osx-64 -# input_hash: 47b1fb4228ea370c49682cfb5c08704f90085fd1f217af35e49f85cfc940addd - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - appnope=0.1.4=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py39hdc70f33_4 - - asciitree=0.3.3=py_2 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hafa3907_1 - - brotli=1.1.0=h0dc2134_1 - - brotli-bin=1.1.0=h0dc2134_1 - - brotli-python=1.1.0=py39h840bb9f_1 - - bzip2=1.0.8=h10d778d_5 - - c-ares=1.28.1=h10d778d_0 - - c-blosc2=2.13.2=h0ae8482_1 - - ca-certificates=2024.2.2=h8857fd0_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h99e66fa_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py39h18ef598_0 - - cfitsio=4.2.0=hd56cc12_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=unix_pyh707e725_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py39h0ca7971_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py39ha09f3b3_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py39hd253f6c_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - discretize=0.10.0=py39hd83d8d7_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h73e2aa4_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py39hcea2a47_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=h5bb23bf_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py39ha09f3b3_0 - - freetype=2.12.1=h60636b9_2 - - freexl=2.0.0=h3ec172f_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py39h4ab6eaa_22 - - geoana=0.4.0=py39h92daf61_1 - - geos=3.12.0=he965462_0 - - geotiff=1.7.1=h889ec99_14 - - gettext=0.22.5=h5ff76d1_2 - - gettext-tools=0.22.5=h5ff76d1_2 - - giflib=5.2.2=h10d778d_0 - - glib=2.78.1=hf4d7fad_0 - - glib-tools=2.78.1=hf4d7fad_0 - - gst-plugins-base=1.22.7=hd283e88_0 - - gstreamer=1.22.7=h8954545_0 - - h5py=3.11.0=nompi_py39h9420513_100 - - hdf4=4.2.15=h8138101_7 - - hdf5=1.14.3=nompi_h691f4bf_100 - - icu=73.2=hf5e326d_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py39hd01001f_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib-resources=6.4.0=pyhd8ed1ab_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyh3cd1d5f_0 - - ipython=8.18.1=pyh707e725_3 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - json-c=0.17=h8e11ae5_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.1=py39h6e9494a_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=h5f07ac3_0 - - kiwisolver=1.4.5=py39h8ee36c8_1 - - krb5=1.21.2=hb884880_0 - - lcms2=2.16=ha2f27b4_0 - - lerc=4.0.0=hb486fe8_0 - - libabseil=20230802.1=cxx17_h048a20a_0 - - libaec=1.1.3=h73e2aa4_0 - - libasprintf=0.22.5=h5ff76d1_2 - - libasprintf-devel=0.22.5=h5ff76d1_2 - - libblas=3.9.0=18_osx64_mkl - - libboost-headers=1.84.0=h694c41f_2 - - libbrotlicommon=1.1.0=h0dc2134_1 - - libbrotlidec=1.1.0=h0dc2134_1 - - libbrotlienc=1.1.0=h0dc2134_1 - - libcblas=3.9.0=18_osx64_mkl - - libclang=15.0.7=default_h7151d67_5 - - libclang13=15.0.7=default_h0edc4dd_5 - - libcrc32c=1.1.2=he49afe7_0 - - libcurl=8.7.1=h726d00d_0 - - libcxx=16.0.6=hd57cbcb_0 - - libdeflate=1.19=ha4e1b8e_0 - - libedit=3.1.20191231=h0678c8f_2 - - libev=4.33=h10d778d_2 - - libexpat=2.6.2=h73e2aa4_0 - - libffi=3.4.2=h0d85af4_5 - - libgdal=3.6.4=hbff29b3_22 - - libgettextpo=0.22.5=h5ff76d1_2 - - libgettextpo-devel=0.22.5=h5ff76d1_2 - - libgfortran=5.0.0=13_2_0_h97931a8_3 - - libgfortran5=13.2.0=h2873a65_3 - - libglib=2.78.1=h6d9ecee_0 - - libgoogle-cloud=2.12.0=he77a663_5 - - libgrpc=1.60.1=h038e8f1_0 - - libhwloc=2.10.0=default_h1321489_1000 - - libiconv=1.17=hd75f5a5_2 - - libintl=0.22.5=h5ff76d1_2 - - libintl-devel=0.22.5=h5ff76d1_2 - - libjpeg-turbo=3.0.0=h0dc2134_1 - - libkml=1.3.0=hab3ca0e_1018 - - liblapack=3.9.0=18_osx64_mkl - - libllvm14=14.0.6=hc8e404f_4 - - libllvm15=15.0.7=hbedff68_4 - - libnetcdf=4.9.2=nompi_h7760872_113 - - libnghttp2=1.58.0=h64cf6d3_1 - - libogg=1.3.4=h35c211d_1 - - libopus=1.3.1=hc929b4f_1 - - libpng=1.6.43=h92b6c6a_0 - - libpq=16.2=ha925e61_1 - - libprotobuf=4.25.1=hc4f2305_2 - - libre2-11=2023.09.01=h4694dbf_1 - - librttopo=1.1.0=h23f359d_14 - - libsodium=1.0.18=hbcb3906_1 - - libspatialite=5.0.1=h231fb02_29 - - libsqlite=3.45.3=h92b6c6a_0 - - libssh2=1.11.0=hd019ec5_0 - - libtiff=4.6.0=h684deea_2 - - libvorbis=1.3.7=h046ec9c_0 - - libwebp=1.3.2=h44782d1_1 - - libwebp-base=1.3.2=h10d778d_1 - - libxcb=1.15=hb7f2c08_0 - - libxml2=2.12.6=hc0ae0f7_2 - - libxslt=1.1.39=h03b04e6_0 - - libzip=1.10.1=hc158999_3 - - libzlib=1.2.13=h8a1eda9_5 - - llvm-openmp=18.1.3=hb6ac08f_0 - - llvmlite=0.42.0=py39he5a6977_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hf0c8a7f_0 - - markupsafe=2.1.5=py39ha09f3b3_0 - - matplotlib-base=3.7.3=py39he57df45_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - minizip=4.0.5=h37d7099_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.2.1=h44ed08c_16952 - - msgpack-python=1.0.7=py39h6be1789_0 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - mysql-common=8.0.33=h1d20c9b_6 - - mysql-libs=8.0.33=hed35180_6 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - ncurses=6.4.20240210=h73e2aa4_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.2.1=pyhd8ed1ab_0 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - nspr=4.35=hea0b92c_0 - - nss=3.98=ha05da47_0 - - numba=0.59.1=py39hb7f44fa_0 - - numcodecs=0.12.1=py39h110ca85_0 - - numpy=1.23.5=py39hdfa1d0c_0 - - openjpeg=2.5.2=h7310d3a_0 - - openssl=3.2.1=hd75f5a5_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py39hecff1ad_1 - - pandoc=3.1.13=h694c41f_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h1c4e4bc_0 - - pexpect=4.9.0=pyhd8ed1ab_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py39h9dabb2a_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h73e2aa4_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hdd5a5e8_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h06f2bd8_1 - - proj=9.3.0=h23b96cc_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py39ha09f3b3_0 - - pthread-stubs=0.4=hc929b4f_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py39h29261d1_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyobjc-core=10.2=py39h8602b6b_0 - - pyobjc-framework-cocoa=10.2=py39h8602b6b_0 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py39h3dce684_5 - - pyqt5-sip=12.12.2=py39hb11a7c1_5 - - pyqtwebengine=5.15.9=py39h6ed9014_5 - - pyside2=5.15.8=py39hfaf76cb_4 - - pysocks=1.7.1=pyha2e5f31_6 - - python=3.9.19=h7a9c478_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.9=4_cp39 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py39hd01001f_1 - - pyyaml=6.0.1=py39hdc70f33_1 - - pyzmq=24.0.1=py39hed8f129_1 - - qt-main=5.15.8=h4385fff_17 - - qt-webengine=5.15.8=h5f65913_4 - - re2=2023.09.01=hb168e87_1 - - readline=8.2=h9e318b2_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py39hcf47035_0 - - scikit-image=0.19.3=py39hecff1ad_2 - - scikit-learn=1.2.2=py39hcb35850_2 - - scipy=1.10.1=py39hded996c_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh31c8845_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py39h808d968_0 - - sip=6.7.12=py39h110ca85_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=h6dc393e_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=h7461747_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h7728843_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh31c8845_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hd3a41d5_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h1abcd95_1 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py39h63b48b0_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - tzcode=2024a=h10d778d_0 - - tzdata=2024a=h0c530f3_0 - - unicodedata2=15.1.0=py39hdc70f33_0 - - uriparser=0.9.7=he965462_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vectormath=0.2.2=py_0 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - xerces-c=3.2.5=hbbe9ea5_0 - - xorg-libxau=1.0.11=h0dc2134_0 - - xorg-libxdmcp=1.1.3=h35c211d_0 - - xz=5.2.6=h775f41a_0 - - yaml=0.2.5=h0d85af4_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.5=h93d8f39_0 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=h8a1eda9_5 - - zlib-ng=2.0.7=hb7f2c08_0 - - zstd=1.5.5=h829000d_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.9-win-64-dev.lock.yml b/environments/conda-py-3.9-win-64-dev.lock.yml deleted file mode 100644 index d92db6b97..000000000 --- a/environments/conda-py-3.9-win-64-dev.lock.yml +++ /dev/null @@ -1,332 +0,0 @@ -# Generated by conda-lock. -# platform: win-64 -# input_hash: 7998655d789668d70c9ad4f4d23175fb04cc18631c710cf86c3a747b45646c83 - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py39ha55989b_4 - - asciitree=0.3.3=py_2 - - astroid=3.1.0=py39hcbf5309_0 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hbd69f2e_1 - - brotli=1.1.0=hcfcfb64_1 - - brotli-bin=1.1.0=hcfcfb64_1 - - brotli-python=1.1.0=py39h99910a6_1 - - bzip2=1.0.8=hcfcfb64_5 - - c-ares=1.28.1=hcfcfb64_0 - - c-blosc2=2.13.2=h183a6f4_1 - - ca-certificates=2024.2.2=h56e8100_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h1fef639_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py39ha55989b_0 - - cfitsio=4.2.0=h9ebe7e4_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=win_pyh7428d3b_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - colorama=0.4.6=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py39h1f6ef14_0 - - coverage=7.4.4=py39ha55989b_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py39ha55989b_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py39h99910a6_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - dill=0.3.8=pyhd8ed1ab_0 - - discretize=0.10.0=py39h5c3ab46_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - exceptiongroup=1.2.0=pyhd8ed1ab_2 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h63175ca_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py39h7b53f02_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=hbde0cde_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py39ha55989b_0 - - freetype=2.12.1=hdaf720e_2 - - freexl=2.0.0=h8276f4a_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py39hbe60bc6_22 - - geoana=0.4.0=py39h1f6ef14_1 - - geos=3.12.0=h1537add_0 - - geotiff=1.7.1=hcf4a93f_14 - - gettext=0.22.5=h5728263_2 - - gettext-tools=0.22.5=h7d00a51_2 - - glib=2.78.1=h12be248_0 - - glib-tools=2.78.1=h12be248_0 - - gst-plugins-base=1.22.7=h001b923_0 - - gstreamer=1.22.7=hb4038d2_0 - - h5py=3.11.0=nompi_py39he8a0d39_100 - - hdf4=4.2.15=h5557f11_7 - - hdf5=1.14.3=nompi_h73e8ff5_100 - - icu=73.2=h63175ca_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py39hd88c2e4_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib-resources=6.4.0=pyhd8ed1ab_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - iniconfig=2.0.0=pyhd8ed1ab_0 - - intel-openmp=2024.1.0=h57928b3_965 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyha63f2e9_0 - - ipython=8.18.1=pyh7428d3b_3 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - isort=5.13.2=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py39hcbf5309_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=hd248416_0 - - kiwisolver=1.4.5=py39h1f6ef14_1 - - krb5=1.21.2=heb0366b_0 - - lcms2=2.16=h67d730c_0 - - lerc=4.0.0=h63175ca_0 - - libabseil=20230802.1=cxx17_h63175ca_0 - - libaec=1.1.3=h63175ca_0 - - libasprintf=0.22.5=h5728263_2 - - libasprintf-devel=0.22.5=h5728263_2 - - libblas=3.9.0=18_win64_mkl - - libboost-headers=1.84.0=h57928b3_2 - - libbrotlicommon=1.1.0=hcfcfb64_1 - - libbrotlidec=1.1.0=hcfcfb64_1 - - libbrotlienc=1.1.0=hcfcfb64_1 - - libcblas=3.9.0=18_win64_mkl - - libclang=15.0.7=default_h3a3e6c3_5 - - libclang13=15.0.7=default_hf64faad_5 - - libcrc32c=1.1.2=h0e60522_0 - - libcurl=8.7.1=hd5e4a3a_0 - - libdeflate=1.19=hcfcfb64_0 - - libexpat=2.6.2=h63175ca_0 - - libffi=3.4.2=h8ffe710_5 - - libgdal=3.6.4=h8c6448d_22 - - libgettextpo=0.22.5=h5728263_2 - - libgettextpo-devel=0.22.5=h5728263_2 - - libglib=2.78.1=he8f3873_0 - - libgoogle-cloud=2.12.0=hc7cbac0_5 - - libgrpc=1.60.1=h0bf0bfa_0 - - libhwloc=2.10.0=default_h2fffb23_1000 - - libiconv=1.17=hcfcfb64_2 - - libintl=0.22.5=h5728263_2 - - libintl-devel=0.22.5=h5728263_2 - - libjpeg-turbo=3.0.0=hcfcfb64_1 - - libkml=1.3.0=haf3e7a6_1018 - - liblapack=3.9.0=18_win64_mkl - - libnetcdf=4.9.2=nompi_h07c049d_113 - - libogg=1.3.4=h8ffe710_1 - - libpng=1.6.43=h19919ed_0 - - libpq=16.2=hdb24f17_1 - - libprotobuf=4.25.1=hb8276f3_2 - - libre2-11=2023.09.01=h8c5ae5e_1 - - librttopo=1.1.0=h92c5fdb_14 - - libsodium=1.0.18=h8d14728_1 - - libspatialite=5.0.1=hbf340bc_29 - - libsqlite=3.45.3=hcfcfb64_0 - - libssh2=1.11.0=h7dfc565_0 - - libtiff=4.6.0=h6e2ebb7_2 - - libvorbis=1.3.7=h0e60522_0 - - libwebp=1.3.2=hcfcfb64_1 - - libwebp-base=1.3.2=hcfcfb64_1 - - libxcb=1.15=hcd874cb_0 - - libxml2=2.12.6=hc3477c8_2 - - libxslt=1.1.39=h3df6e99_0 - - libzip=1.10.1=h1d365fa_3 - - libzlib=1.2.13=hcfcfb64_5 - - llvmlite=0.42.0=py39hd28a505_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcfcfb64_0 - - m2w64-gcc-libgfortran=5.3.0=6 - - m2w64-gcc-libs=5.3.0=7 - - m2w64-gcc-libs-core=5.3.0=7 - - m2w64-gmp=6.1.0=2 - - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 - - markupsafe=2.1.5=py39ha55989b_0 - - matplotlib-base=3.7.3=py39hf19769e_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - mccabe=0.7.0=pyhd8ed1ab_0 - - minizip=4.0.5=h5bed578_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.1.0=h6a75c08_874 - - msgpack-python=1.0.7=py39h1f6ef14_0 - - msys2-conda-epoch=20160418=1 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.2.1=pyhd8ed1ab_0 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - numba=0.59.1=py39h6836801_0 - - numcodecs=0.12.1=py39h99910a6_0 - - numpy=1.23.5=py39hbccbffa_0 - - openjpeg=2.5.2=h3d672ee_0 - - openssl=3.2.1=hcfcfb64_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py39h2ba5b7c_1 - - pandoc=3.1.13=h57928b3_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h17e33f8_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py39h9ee4981_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h63175ca_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - pluggy=1.4.0=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hc2f3c52_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h94c9ec1_1 - - proj=9.3.0=he13c7e8_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py39ha55989b_0 - - pthread-stubs=0.4=hcd874cb_1001 - - pthreads-win32=2.9.1=hfa6e2cd_3 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py39h9be9993_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pylint=3.1.0=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py39hb77abff_5 - - pyqt5-sip=12.12.2=py39h99910a6_5 - - pyqtwebengine=5.15.9=py39h2f4a3f1_5 - - pyside2=5.15.8=py39hc5a181a_4 - - pysocks=1.7.1=pyh0701188_6 - - pytest=8.1.1=pyhd8ed1ab_0 - - pytest-cov=5.0.0=pyhd8ed1ab_0 - - python=3.9.19=h4de0772_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.9=4_cp39 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py39hd88c2e4_1 - - pywin32=306=py39h99910a6_2 - - pywinpty=2.0.13=py39h99910a6_0 - - pyyaml=6.0.1=py39ha55989b_1 - - pyzmq=24.0.1=py39hea35a22_1 - - qt-main=5.15.8=h9e85ed6_17 - - qt-webengine=5.15.8=h4bf5c4e_4 - - re2=2023.09.01=hd3b24a8_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py39hf21820d_0 - - scikit-image=0.19.3=py39h2ba5b7c_2 - - scikit-learn=1.2.2=py39hfa9d973_2 - - scipy=1.10.1=py39hde5eda1_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh5737063_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py39hacc7841_0 - - sip=6.7.12=py39h99910a6_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hfb803bf_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=hcfcfb64_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h91493d7_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh5737063_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hbf04793_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - tomlkit=0.12.4=pyha770c72_0 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py39hb82d6ee_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - typing-extensions=4.11.0=hd8ed1ab_0 - - typing_extensions=4.11.0=pyha770c72_0 - - tzdata=2024a=h0c530f3_0 - - ucrt=10.0.22621.0=h57928b3_0 - - unicodedata2=15.1.0=py39ha55989b_0 - - uriparser=0.9.7=h1537add_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vc=14.3=hcf57466_18 - - vc14_runtime=14.38.33130=h82b7239_18 - - vectormath=0.2.2=py_0 - - vs2015_runtime=14.38.33130=hcb4865c_18 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - win_inet_pton=1.1.0=pyhd8ed1ab_6 - - winpty=0.4.3=4 - - xerces-c=3.2.5=h63175ca_0 - - xorg-libxau=1.0.11=hcd874cb_0 - - xorg-libxdmcp=1.1.3=hcd874cb_0 - - xz=5.2.6=h8d14728_0 - - yaml=0.2.5=h8ffe710_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.4=h0e60522_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hcfcfb64_5 - - zlib-ng=2.0.7=hcfcfb64_0 - - zstd=1.5.5=h12be248_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/conda-py-3.9-win-64.lock.yml b/environments/conda-py-3.9-win-64.lock.yml deleted file mode 100644 index 10b55e7c9..000000000 --- a/environments/conda-py-3.9-win-64.lock.yml +++ /dev/null @@ -1,315 +0,0 @@ -# Generated by conda-lock. -# platform: win-64 -# input_hash: 7998655d789668d70c9ad4f4d23175fb04cc18631c710cf86c3a747b45646c83 - -channels: - - conda-forge -dependencies: - - anyio=3.7.1=pyhd8ed1ab_0 - - argon2-cffi=23.1.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py39ha55989b_4 - - asciitree=0.3.3=py_2 - - asttokens=2.4.1=pyhd8ed1ab_0 - - attrs=23.2.0=pyh71513ae_0 - - beautifulsoup4=4.12.3=pyha770c72_0 - - bleach=6.1.0=pyhd8ed1ab_0 - - blinker=1.7.0=pyhd8ed1ab_0 - - blosc=1.21.5=hbd69f2e_1 - - brotli=1.1.0=hcfcfb64_1 - - brotli-bin=1.1.0=hcfcfb64_1 - - brotli-python=1.1.0=py39h99910a6_1 - - bzip2=1.0.8=hcfcfb64_5 - - c-ares=1.28.1=hcfcfb64_0 - - c-blosc2=2.13.2=h183a6f4_1 - - ca-certificates=2024.2.2=h56e8100_0 - - cached-property=1.5.2=hd8ed1ab_1 - - cached_property=1.5.2=pyha770c72_1 - - cairo=1.18.0=h1fef639_0 - - certifi=2024.2.2=pyhd8ed1ab_0 - - cffi=1.16.0=py39ha55989b_0 - - cfitsio=4.2.0=h9ebe7e4_0 - - charset-normalizer=3.3.2=pyhd8ed1ab_0 - - click=8.1.7=win_pyh7428d3b_0 - - click-plugins=1.1.1=py_0 - - cligj=0.7.2=pyhd8ed1ab_1 - - cloudpickle=3.0.0=pyhd8ed1ab_0 - - comm=0.2.2=pyhd8ed1ab_0 - - contourpy=1.2.1=py39h1f6ef14_0 - - cycler=0.12.1=pyhd8ed1ab_0 - - cytoolz=0.12.3=py39ha55989b_0 - - dash=2.16.1=pyhd8ed1ab_0 - - dash-daq=0.5.0=pyh9f0ad1d_1 - - dask-core=2022.10.2=pyhd8ed1ab_0 - - debugpy=1.8.1=py39h99910a6_0 - - decorator=5.1.1=pyhd8ed1ab_0 - - defusedxml=0.7.1=pyhd8ed1ab_0 - - discretize=0.10.0=py39h5c3ab46_1 - - distributed=2022.10.2=pyhd8ed1ab_0 - - empymod=2.2.2=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - executing=2.0.1=pyhd8ed1ab_0 - - expat=2.6.2=h63175ca_0 - - fasteners=0.17.3=pyhd8ed1ab_0 - - fiona=1.9.3=py39h7b53f02_0 - - flask=3.0.3=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=h77eed37_1 - - fontconfig=2.14.2=hbde0cde_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.51.0=py39ha55989b_0 - - freetype=2.12.1=hdaf720e_2 - - freexl=2.0.0=h8276f4a_0 - - fsspec=2022.11.0=pyhd8ed1ab_0 - - gdal=3.6.4=py39hbe60bc6_22 - - geoana=0.4.0=py39h1f6ef14_1 - - geos=3.12.0=h1537add_0 - - geotiff=1.7.1=hcf4a93f_14 - - gettext=0.22.5=h5728263_2 - - gettext-tools=0.22.5=h7d00a51_2 - - glib=2.78.1=h12be248_0 - - glib-tools=2.78.1=h12be248_0 - - gst-plugins-base=1.22.7=h001b923_0 - - gstreamer=1.22.7=hb4038d2_0 - - h5py=3.11.0=nompi_py39he8a0d39_100 - - hdf4=4.2.15=h5557f11_7 - - hdf5=1.14.3=nompi_h73e8ff5_100 - - icu=73.2=h63175ca_0 - - idna=3.7=pyhd8ed1ab_0 - - imagecodecs-lite=2019.12.3=py39hd88c2e4_7 - - imageio=2.34.0=pyh4b66e23_0 - - importlib-metadata=7.1.0=pyha770c72_0 - - importlib-resources=6.4.0=pyhd8ed1ab_0 - - importlib_resources=6.4.0=pyhd8ed1ab_0 - - intel-openmp=2024.1.0=h57928b3_965 - - ipyfilechooser=0.6.0=pyhd8ed1ab_0 - - ipykernel=6.29.3=pyha63f2e9_0 - - ipython=8.18.1=pyh7428d3b_3 - - ipython_genutils=0.2.0=py_1 - - ipywidgets=7.8.0=pyhd8ed1ab_0 - - itsdangerous=2.2.0=pyhd8ed1ab_0 - - jedi=0.19.1=pyhd8ed1ab_0 - - jinja2=3.1.3=pyhd8ed1ab_0 - - joblib=1.4.0=pyhd8ed1ab_0 - - jsonschema=4.21.1=pyhd8ed1ab_0 - - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - - jupyter_client=7.3.4=pyhd8ed1ab_0 - - jupyter_core=5.7.2=py39hcbf5309_0 - - jupyter_server=1.24.0=pyhd8ed1ab_0 - - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - - jupyterlab_widgets=1.1.7=pyhd8ed1ab_0 - - kealib=1.5.3=hd248416_0 - - kiwisolver=1.4.5=py39h1f6ef14_1 - - krb5=1.21.2=heb0366b_0 - - lcms2=2.16=h67d730c_0 - - lerc=4.0.0=h63175ca_0 - - libabseil=20230802.1=cxx17_h63175ca_0 - - libaec=1.1.3=h63175ca_0 - - libasprintf=0.22.5=h5728263_2 - - libasprintf-devel=0.22.5=h5728263_2 - - libblas=3.9.0=18_win64_mkl - - libboost-headers=1.84.0=h57928b3_2 - - libbrotlicommon=1.1.0=hcfcfb64_1 - - libbrotlidec=1.1.0=hcfcfb64_1 - - libbrotlienc=1.1.0=hcfcfb64_1 - - libcblas=3.9.0=18_win64_mkl - - libclang=15.0.7=default_h3a3e6c3_5 - - libclang13=15.0.7=default_hf64faad_5 - - libcrc32c=1.1.2=h0e60522_0 - - libcurl=8.7.1=hd5e4a3a_0 - - libdeflate=1.19=hcfcfb64_0 - - libexpat=2.6.2=h63175ca_0 - - libffi=3.4.2=h8ffe710_5 - - libgdal=3.6.4=h8c6448d_22 - - libgettextpo=0.22.5=h5728263_2 - - libgettextpo-devel=0.22.5=h5728263_2 - - libglib=2.78.1=he8f3873_0 - - libgoogle-cloud=2.12.0=hc7cbac0_5 - - libgrpc=1.60.1=h0bf0bfa_0 - - libhwloc=2.10.0=default_h2fffb23_1000 - - libiconv=1.17=hcfcfb64_2 - - libintl=0.22.5=h5728263_2 - - libintl-devel=0.22.5=h5728263_2 - - libjpeg-turbo=3.0.0=hcfcfb64_1 - - libkml=1.3.0=haf3e7a6_1018 - - liblapack=3.9.0=18_win64_mkl - - libnetcdf=4.9.2=nompi_h07c049d_113 - - libogg=1.3.4=h8ffe710_1 - - libpng=1.6.43=h19919ed_0 - - libpq=16.2=hdb24f17_1 - - libprotobuf=4.25.1=hb8276f3_2 - - libre2-11=2023.09.01=h8c5ae5e_1 - - librttopo=1.1.0=h92c5fdb_14 - - libsodium=1.0.18=h8d14728_1 - - libspatialite=5.0.1=hbf340bc_29 - - libsqlite=3.45.3=hcfcfb64_0 - - libssh2=1.11.0=h7dfc565_0 - - libtiff=4.6.0=h6e2ebb7_2 - - libvorbis=1.3.7=h0e60522_0 - - libwebp=1.3.2=hcfcfb64_1 - - libwebp-base=1.3.2=hcfcfb64_1 - - libxcb=1.15=hcd874cb_0 - - libxml2=2.12.6=hc3477c8_2 - - libxslt=1.1.39=h3df6e99_0 - - libzip=1.10.1=h1d365fa_3 - - libzlib=1.2.13=hcfcfb64_5 - - llvmlite=0.42.0=py39hd28a505_1 - - locket=1.0.0=pyhd8ed1ab_0 - - lz4-c=1.9.4=hcfcfb64_0 - - m2w64-gcc-libgfortran=5.3.0=6 - - m2w64-gcc-libs=5.3.0=7 - - m2w64-gcc-libs-core=5.3.0=7 - - m2w64-gmp=6.1.0=2 - - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 - - markupsafe=2.1.5=py39ha55989b_0 - - matplotlib-base=3.7.3=py39hf19769e_0 - - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - - minizip=4.0.5=h5bed578_0 - - mistune=3.0.2=pyhd8ed1ab_0 - - mkl=2022.1.0=h6a75c08_874 - - msgpack-python=1.0.7=py39h1f6ef14_0 - - msys2-conda-epoch=20160418=1 - - munch=4.0.0=pyhd8ed1ab_0 - - munkres=1.1.4=pyh9f0ad1d_0 - - nbclassic=1.0.0=pyhb4ecaf3_1 - - nbclient=0.10.0=pyhd8ed1ab_0 - - nbconvert=7.16.3=hd8ed1ab_1 - - nbconvert-core=7.16.3=pyhd8ed1ab_1 - - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - - nbformat=5.10.4=pyhd8ed1ab_0 - - nest-asyncio=1.6.0=pyhd8ed1ab_0 - - networkx=3.2.1=pyhd8ed1ab_0 - - notebook=6.5.6=pyha770c72_0 - - notebook-shim=0.2.4=pyhd8ed1ab_0 - - numba=0.59.1=py39h6836801_0 - - numcodecs=0.12.1=py39h99910a6_0 - - numpy=1.23.5=py39hbccbffa_0 - - openjpeg=2.5.2=h3d672ee_0 - - openssl=3.2.1=hcfcfb64_1 - - packaging=24.0=pyhd8ed1ab_0 - - pandas=1.5.3=py39h2ba5b7c_1 - - pandoc=3.1.13=h57928b3_0 - - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.4=pyhd8ed1ab_0 - - partd=1.4.1=pyhd8ed1ab_0 - - pcre2=10.40=h17e33f8_0 - - pickleshare=0.7.5=py_1003 - - pillow=10.3.0=py39h9ee4981_0 - - pip=24.0=pyhd8ed1ab_0 - - pixman=0.43.4=h63175ca_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - - platformdirs=4.2.0=pyhd8ed1ab_0 - - plotly=5.13.1=pyhd8ed1ab_0 - - ply=3.11=pyhd8ed1ab_2 - - pooch=1.8.1=pyhd8ed1ab_0 - - poppler=23.10.0=hc2f3c52_0 - - poppler-data=0.4.12=hd8ed1ab_0 - - postgresql=16.2=h94c9ec1_1 - - proj=9.3.0=he13c7e8_2 - - prometheus_client=0.20.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.42=pyha770c72_0 - - properties=0.6.1=py_0 - - psutil=5.9.8=py39ha55989b_0 - - pthread-stubs=0.4=hcd874cb_1001 - - pthreads-win32=2.9.1=hfa6e2cd_3 - - pure_eval=0.2.2=pyhd8ed1ab_0 - - pycparser=2.22=pyhd8ed1ab_0 - - pydiso=0.0.3=py39h9be9993_4 - - pygments=2.17.2=pyhd8ed1ab_0 - - pymatsolver=0.2.0=ha770c72_3 - - pymatsolver-base=0.2.0=pyh44b312d_3 - - pyparsing=3.1.2=pyhd8ed1ab_0 - - pypng=0.20220715.0=pyhd8ed1ab_0 - - pyqt=5.15.9=py39hb77abff_5 - - pyqt5-sip=12.12.2=py39h99910a6_5 - - pyqtwebengine=5.15.9=py39h2f4a3f1_5 - - pyside2=5.15.8=py39hc5a181a_4 - - pysocks=1.7.1=pyh0701188_6 - - python=3.9.19=h4de0772_0_cpython - - python-dateutil=2.9.0=pyhd8ed1ab_0 - - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - - python_abi=3.9=4_cp39 - - pytz=2024.1=pyhd8ed1ab_0 - - pywavelets=1.4.1=py39hd88c2e4_1 - - pywin32=306=py39h99910a6_2 - - pywinpty=2.0.13=py39h99910a6_0 - - pyyaml=6.0.1=py39ha55989b_1 - - pyzmq=24.0.1=py39hea35a22_1 - - qt-main=5.15.8=h9e85ed6_17 - - qt-webengine=5.15.8=h4bf5c4e_4 - - re2=2023.09.01=hd3b24a8_1 - - referencing=0.34.0=pyhd8ed1ab_0 - - requests=2.31.0=pyhd8ed1ab_0 - - retrying=1.3.3=py_2 - - rpds-py=0.18.0=py39hf21820d_0 - - scikit-image=0.19.3=py39h2ba5b7c_2 - - scikit-learn=1.2.2=py39hfa9d973_2 - - scipy=1.10.1=py39hde5eda1_3 - - semver=3.0.2=pyhd8ed1ab_0 - - send2trash=1.8.3=pyh5737063_0 - - setuptools=69.5.1=pyhd8ed1ab_0 - - shapely=2.0.2=py39hacc7841_0 - - sip=6.7.12=py39h99910a6_0 - - six=1.16.0=pyh6c4a22f_0 - - snappy=1.2.0=hfb803bf_1 - - sniffio=1.3.1=pyhd8ed1ab_0 - - sortedcontainers=2.4.0=pyhd8ed1ab_0 - - soupsieve=2.5=pyhd8ed1ab_1 - - sqlite=3.45.3=hcfcfb64_0 - - stack_data=0.6.2=pyhd8ed1ab_0 - - tbb=2021.12.0=h91493d7_0 - - tblib=3.0.0=pyhd8ed1ab_0 - - tenacity=8.2.3=pyhd8ed1ab_0 - - terminado=0.18.1=pyh5737063_0 - - threadpoolctl=3.4.0=pyhc1e730c_0 - - tifffile=2020.6.3=py_0 - - tiledb=2.16.3=hbf04793_3 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.13=h5226925_1 - - toolz=0.12.1=pyhd8ed1ab_0 - - tornado=6.1=py39hb82d6ee_3 - - tqdm=4.66.2=pyhd8ed1ab_0 - - traitlets=5.14.2=pyhd8ed1ab_0 - - tzdata=2024a=h0c530f3_0 - - ucrt=10.0.22621.0=h57928b3_0 - - unicodedata2=15.1.0=py39ha55989b_0 - - uriparser=0.9.7=h1537add_1 - - urllib3=2.2.1=pyhd8ed1ab_0 - - utm=0.7.0=pyhd8ed1ab_0 - - vc=14.3=hcf57466_18 - - vc14_runtime=14.38.33130=h82b7239_18 - - vectormath=0.2.2=py_0 - - vs2015_runtime=14.38.33130=hcb4865c_18 - - wcwidth=0.2.13=pyhd8ed1ab_0 - - webencodings=0.5.1=pyhd8ed1ab_2 - - websocket-client=1.7.0=pyhd8ed1ab_0 - - werkzeug=3.0.2=pyhd8ed1ab_0 - - wheel=0.43.0=pyhd8ed1ab_1 - - widgetsnbextension=3.6.6=pyhd8ed1ab_0 - - win_inet_pton=1.1.0=pyhd8ed1ab_6 - - winpty=0.4.3=4 - - xerces-c=3.2.5=h63175ca_0 - - xorg-libxau=1.0.11=hcd874cb_0 - - xorg-libxdmcp=1.1.3=hcd874cb_0 - - xz=5.2.6=h8d14728_0 - - yaml=0.2.5=h8ffe710_2 - - zarr=2.14.2=pyhd8ed1ab_0 - - zeromq=4.3.4=h0e60522_1 - - zict=3.0.0=pyhd8ed1ab_0 - - zipp=3.17.0=pyhd8ed1ab_0 - - zlib=1.2.13=hcfcfb64_5 - - zlib-ng=2.0.7=hcfcfb64_0 - - zstd=1.5.5=h12be248_0 - - pip: - - geoh5py === 0.8.0 --hash=sha256:40736dd6e0db984e5d659a159ed834117f3c1e2366f9ad26d080763745d008dc - - las-geoh5 === 0.1.0 --hash=sha256:547e5b642d082095b6aa37e6e677429ed6387d32dc32fa6ba35f5bb52078e65f - - lasio === 0.31 --hash=sha256:30204596b0f3eb9118af99a622f177fba2b6c245db0512f9f57c437020599db4 - - mira-omf === 3.1.0 --hash=sha256:626e159fa0d870360acd25ae298b775ece8140018ba1671925150809dead378f - - mira-simpeg === 0.19.0.dev7 --hash=sha256:d3ec1138f09611404ae302510b8298ca72e35d70dc623bcd5f499333d8adce01 - - param-sweeps === 0.1.6 --hash=sha256:d661aeba8f1b95b78fd9ab9f7b798fdd1ea454fdf80484d789b293604b8f2452 - - simpeg-archive === 0.11.0.dev6 --hash=sha256:ddb2487b640846a6859afb6f9f33ec5a04e4e0d5572c690d4c1a88579a47adcb - -variables: - KMP_WARNINGS: 0 diff --git a/environments/env-python-3.9.yml b/environments/env-python-3.9.yml deleted file mode 100644 index a429f799b..000000000 --- a/environments/env-python-3.9.yml +++ /dev/null @@ -1,3 +0,0 @@ -dependencies: - - python=3.9.* - - pip diff --git a/environments/py-3.10-linux-64-dev.conda.lock.yml b/environments/py-3.10-linux-64-dev.conda.lock.yml new file mode 100644 index 000000000..a3249fe3a --- /dev/null +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -0,0 +1,479 @@ +# Generated by conda-lock. +# platform: linux-64 +# input_hash: d292e32079711e4a7fe21b7c9ddf0a63a2663f0d5bcc16d2e1244bc5a1577628 + +channels: + - conda-forge + - nodefaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_kmp_llvm + - accessible-pygments=0.0.5=pyhd8ed1ab_1 + - alabaster=0.7.16=pyhd8ed1ab_0 + - alsa-lib=1.2.13=hb9d3cd8_0 + - annotated-types=0.7.0=pyhd8ed1ab_1 + - ansi2html=1.9.2=py310hff52083_2 + - anyio=4.8.0=pyhd8ed1ab_0 + - aom=3.9.1=hac33072_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi-bindings=21.2.0=py310ha75aee5_5 + - arrow=1.3.0=pyhd8ed1ab_1 + - asciitree=0.3.3=py_2 + - astroid=3.3.8=py310hff52083_0 + - asttokens=3.0.0=pyhd8ed1ab_1 + - async-lru=2.0.4=pyhd8ed1ab_1 + - attr=2.5.1=h166bdaf_1 + - attrs=25.1.0=pyh71513ae_0 + - babel=2.17.0=pyhd8ed1ab_0 + - beautifulsoup4=4.13.3=pyha770c72_0 + - bleach=6.2.0=pyh29332c3_4 + - bleach-with-css=6.2.0=h82add2a_4 + - blinker=1.9.0=pyhff2d567_0 + - blosc=1.21.5=h0f2a231_0 + - brotli=1.1.0=hb9d3cd8_2 + - brotli-bin=1.1.0=hb9d3cd8_2 + - brotli-python=1.1.0=py310hf71b8c6_2 + - brunsli=0.1=h9c3ff4c_0 + - bzip2=1.0.8=h4bc722e_7 + - c-ares=1.34.4=hb9d3cd8_0 + - c-blosc2=2.14.3=hb4ffafa_0 + - ca-certificates=2025.1.31=hbcca054_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - cairo=1.18.0=h3faef2a_0 + - certifi=2025.1.31=pyhd8ed1ab_0 + - cffi=1.17.1=py310h8deb56e_0 + - cfitsio=4.2.0=hd9d235c_0 + - charls=2.4.2=h59595ed_0 + - charset-normalizer=3.4.1=pyhd8ed1ab_0 + - click=8.1.8=pyh707e725_0 + - click-plugins=1.1.1=pyhd8ed1ab_1 + - cligj=0.7.2=pyhd8ed1ab_2 + - cloudpickle=3.1.1=pyhd8ed1ab_0 + - colorama=0.4.6=pyhd8ed1ab_1 + - comm=0.2.2=pyhd8ed1ab_1 + - contourpy=1.3.1=py310h3788b33_0 + - coverage=7.6.12=py310h89163eb_0 + - cycler=0.12.1=pyhd8ed1ab_1 + - cytoolz=1.0.1=py310ha75aee5_0 + - dash=2.12.1=pyhd8ed1ab_0 + - dash-daq=0.5.0=pyhd8ed1ab_2 + - dask-core=2024.6.2=pyhd8ed1ab_0 + - dataclasses=0.8=pyhc8e2a94_3 + - dav1d=1.2.1=hd590300_0 + - dbus=1.13.6=h5008d03_3 + - debugpy=1.8.12=py310hf71b8c6_0 + - decorator=5.1.1=pyhd8ed1ab_1 + - defusedxml=0.7.1=pyhd8ed1ab_0 + - dill=0.3.9=pyhd8ed1ab_1 + - discretize=0.10.0=py310hcb52e73_1 + - distributed=2024.6.2=pyhd8ed1ab_0 + - docutils=0.19=py310hff52083_1 + - empymod=2.2.2=pyhd8ed1ab_0 + - exceptiongroup=1.2.2=pyhd8ed1ab_1 + - executing=2.1.0=pyhd8ed1ab_1 + - expat=2.6.4=h5888daf_0 + - fasteners=0.19=pyhd8ed1ab_1 + - fiona=1.9.3=py310ha325b7b_0 + - flask=3.1.0=pyhff2d567_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=h77eed37_3 + - fontconfig=2.15.0=h7e30c49_1 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.56.0=py310h89163eb_0 + - fqdn=1.5.1=pyhd8ed1ab_1 + - freetype=2.12.1=h267a509_2 + - freexl=2.0.0=h9dce30a_2 + - fsspec=2022.11.0=pyhd8ed1ab_0 + - gdal=3.6.4=py310h5c4b078_22 + - geoana=0.5.0=py310hcb52e73_4 + - geos=3.12.0=h59595ed_0 + - geotiff=1.7.1=hf074850_14 + - gettext=0.23.1=h5888daf_0 + - gettext-tools=0.23.1=h5888daf_0 + - giflib=5.2.2=hd590300_0 + - glib=2.78.1=hfc55251_0 + - glib-tools=2.78.1=hfc55251_0 + - graphite2=1.3.13=h59595ed_1003 + - greenlet=3.1.1=py310hf71b8c6_1 + - gst-plugins-base=1.22.7=h8e1006c_0 + - gstreamer=1.22.7=h98fc4e7_0 + - h11=0.14.0=pyhd8ed1ab_1 + - h2=4.2.0=pyhd8ed1ab_0 + - h5py=3.13.0=nompi_py310h60e0fe6_100 + - harfbuzz=8.3.0=h3d44ed6_0 + - hdf4=4.2.15=h2a13503_7 + - hdf5=1.14.3=nompi_h2d575fe_109 + - hpack=4.1.0=pyhd8ed1ab_0 + - httpcore=1.0.7=pyh29332c3_1 + - httpx=0.28.1=pyhd8ed1ab_0 + - hyperframe=6.1.0=pyhd8ed1ab_0 + - icu=73.2=h59595ed_0 + - idna=3.10=pyhd8ed1ab_1 + - imagecodecs=2024.1.1=py310h0c5f7e8_2 + - imageio=2.37.0=pyhfb79c49_0 + - imagesize=1.4.1=pyhd8ed1ab_0 + - importlib-metadata=8.6.1=pyha770c72_0 + - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib_resources=6.5.2=pyhd8ed1ab_0 + - iniconfig=2.0.0=pyhd8ed1ab_1 + - ipyfilechooser=0.6.0=pyhd8ed1ab_0 + - ipykernel=6.29.5=pyh3099207_0 + - ipython=8.32.0=pyh907856f_0 + - ipywidgets=8.1.5=pyhd8ed1ab_1 + - isoduration=20.11.0=pyhd8ed1ab_1 + - isort=6.0.0=pyhd8ed1ab_0 + - itsdangerous=2.2.0=pyhd8ed1ab_1 + - jedi=0.19.2=pyhd8ed1ab_1 + - jinja2=3.1.5=pyhd8ed1ab_0 + - joblib=1.4.2=pyhd8ed1ab_1 + - json-c=0.17=h1220068_1 + - json5=0.10.0=pyhd8ed1ab_1 + - jsonpointer=3.0.0=py310hff52083_1 + - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 + - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jupyter-book=1.0.3=pyhd8ed1ab_1 + - jupyter-cache=1.0.1=pyhff2d567_0 + - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter_client=8.6.3=pyhd8ed1ab_1 + - jupyter_core=5.7.2=pyh31011fe_1 + - jupyter_events=0.12.0=pyh29332c3_0 + - jupyter_server=2.15.0=pyhd8ed1ab_0 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab=4.3.5=pyhd8ed1ab_0 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - jupyterlab_server=2.27.3=pyhd8ed1ab_1 + - jupyterlab_widgets=3.0.13=pyhd8ed1ab_1 + - jupytext=1.16.7=pyhbbac1ac_0 + - jxrlib=1.1=hd590300_3 + - kealib=1.5.3=hf8d3e68_2 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.7=py310h3788b33_0 + - krb5=1.21.3=h659f571_0 + - lame=3.100=h166bdaf_1003 + - latexcodec=2.0.1=pyh9f0ad1d_0 + - lazy-loader=0.4=pyhd8ed1ab_2 + - lazy_loader=0.4=pyhd8ed1ab_2 + - lcms2=2.16=hb7c19ff_0 + - ld_impl_linux-64=2.43=h712a8e2_2 + - lerc=4.0.0=h27087fc_0 + - libabseil=20230802.1=cxx17_h59595ed_0 + - libaec=1.1.3=h59595ed_0 + - libasprintf=0.23.1=h8e693c7_0 + - libasprintf-devel=0.23.1=h8e693c7_0 + - libavif16=1.1.1=h1909e37_2 + - libblas=3.9.0=20_linux64_mkl + - libbrotlicommon=1.1.0=hb9d3cd8_2 + - libbrotlidec=1.1.0=hb9d3cd8_2 + - libbrotlienc=1.1.0=hb9d3cd8_2 + - libcap=2.71=h39aace5_0 + - libcblas=3.9.0=20_linux64_mkl + - libclang=15.0.7=default_h127d8a8_5 + - libclang13=15.0.7=default_h5d6823c_5 + - libcrc32c=1.1.2=h9c3ff4c_0 + - libcups=2.3.3=h4637d8d_4 + - libcurl=8.12.1=h332b0f4_0 + - libdeflate=1.19=hd590300_0 + - libdlf=0.3.0=pyhd8ed1ab_1 + - libedit=3.1.20250104=pl5321h7949ede_0 + - libev=4.33=hd590300_2 + - libevent=2.1.12=hf998b51_1 + - libexpat=2.6.4=h5888daf_0 + - libffi=3.4.6=h2dba641_0 + - libflac=1.4.3=h59595ed_0 + - libgcc=14.2.0=h77fa898_1 + - libgcc-ng=14.2.0=h69a702a_1 + - libgcrypt-lib=1.11.0=hb9d3cd8_2 + - libgdal=3.6.4=hb454697_22 + - libgettextpo=0.23.1=h5888daf_0 + - libgettextpo-devel=0.23.1=h5888daf_0 + - libgfortran=14.2.0=h69a702a_1 + - libgfortran-ng=14.2.0=h69a702a_1 + - libgfortran5=14.2.0=hd5240d6_1 + - libglib=2.78.1=hebfc3b9_0 + - libgoogle-cloud=2.12.0=hef10d8f_5 + - libgpg-error=1.51=hbd13f7d_1 + - libgrpc=1.60.1=h74775cd_0 + - libhwloc=2.11.2=default_he43201b_1000 + - libhwy=1.1.0=h00ab1b0_0 + - libiconv=1.18=h4ce23a2_0 + - libjpeg-turbo=3.0.0=hd590300_1 + - libjxl=0.10.3=h66b40c8_0 + - libkml=1.3.0=hf539b9f_1021 + - liblapack=3.9.0=20_linux64_mkl + - libllvm15=15.0.7=hb3ce162_4 + - liblzma=5.6.4=hb9d3cd8_0 + - liblzma-devel=5.6.4=hb9d3cd8_0 + - libnetcdf=4.9.2=nompi_h135f659_114 + - libnghttp2=1.64.0=h161d5f1_0 + - libnsl=2.0.1=hd590300_0 + - libogg=1.3.5=h4ab18f5_0 + - libopus=1.3.1=h7f98852_1 + - libpng=1.6.47=h943b412_0 + - libpq=16.4=h2d7952a_3 + - libprotobuf=4.25.1=hf27288f_2 + - libre2-11=2023.09.01=h7a70373_1 + - librttopo=1.1.0=hb58d41b_14 + - libsndfile=1.2.2=hc60ed4a_1 + - libsodium=1.0.20=h4ab18f5_0 + - libspatialite=5.0.1=h090f1da_29 + - libsqlite=3.49.1=hee588c1_1 + - libssh2=1.11.1=hf672d98_0 + - libstdcxx=14.2.0=hc0a3c3a_1 + - libstdcxx-ng=14.2.0=h4852527_1 + - libsystemd0=256.9=h2774228_0 + - libtiff=4.6.0=ha9c0a0a_2 + - libuuid=2.38.1=h0b41bf4_0 + - libvorbis=1.3.7=h9c3ff4c_0 + - libwebp=1.4.0=h2c329e2_0 + - libwebp-base=1.4.0=hd590300_0 + - libxcb=1.15=h0b41bf4_0 + - libxcrypt=4.4.36=hd590300_1 + - libxkbcommon=1.7.0=h662e7e4_0 + - libxml2=2.12.7=h4c95cb1_3 + - libxslt=1.1.39=h76b75d6_0 + - libzip=1.11.2=h6991a6a_0 + - libzlib=1.3.1=hb9d3cd8_2 + - libzopfli=1.0.3=h9c3ff4c_0 + - linkify-it-py=2.0.3=pyhd8ed1ab_1 + - llvm-openmp=19.1.7=h024ca30_0 + - llvmlite=0.44.0=py310h1a6248f_0 + - locket=1.0.0=pyhd8ed1ab_0 + - lz4-c=1.9.4=hcb278e6_0 + - markdown-it-py=2.2.0=pyhd8ed1ab_0 + - markupsafe=3.0.2=py310h89163eb_1 + - matplotlib=3.9.1=py310hff52083_1 + - matplotlib-base=3.9.1=py310hf02ac8c_2 + - matplotlib-inline=0.1.7=pyhd8ed1ab_1 + - mccabe=0.7.0=pyhd8ed1ab_1 + - mdit-py-plugins=0.4.2=pyhd8ed1ab_1 + - mdurl=0.1.2=pyhd8ed1ab_1 + - minizip=4.0.7=h05a5f5f_3 + - mistune=3.1.2=pyhd8ed1ab_0 + - mkl=2023.2.0=h84fe81f_50496 + - mpg123=1.32.9=hc50e24c_0 + - msgpack-python=1.1.0=py310h3788b33_0 + - munch=4.0.0=pyhd8ed1ab_1 + - munkres=1.1.4=pyh9f0ad1d_0 + - mysql-common=8.0.33=hf1915f5_6 + - mysql-libs=8.0.33=hca2cd23_6 + - myst-nb=1.2.0=pyh29332c3_0 + - myst-parser=1.0.0=pyhd8ed1ab_0 + - nbclient=0.10.2=pyhd8ed1ab_0 + - nbconvert-core=7.16.6=pyh29332c3_0 + - nbformat=5.10.4=pyhd8ed1ab_1 + - ncurses=6.5=h2d0b736_3 + - nest-asyncio=1.6.0=pyhd8ed1ab_1 + - networkx=3.4.2=pyh267e887_2 + - notebook=7.3.2=pyhd8ed1ab_0 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - nspr=4.36=h5888daf_0 + - nss=3.108=h159eef7_0 + - numba=0.61.0=py310h699fe88_1 + - numcodecs=0.13.1=py310h5eaa309_0 + - numpy=1.26.4=py310hb13e2d6_0 + - openjpeg=2.5.2=h488ebb8_0 + - openssl=3.4.1=h7b32b05_0 + - overrides=7.7.0=pyhd8ed1ab_1 + - packaging=24.2=pyhd8ed1ab_2 + - pandas=2.2.3=py310h5eaa309_1 + - pandocfilters=1.5.0=pyhd8ed1ab_0 + - parso=0.8.4=pyhd8ed1ab_1 + - partd=1.4.2=pyhd8ed1ab_0 + - pcre2=10.40=hc3806b6_0 + - pexpect=4.9.0=pyhd8ed1ab_1 + - pickleshare=0.7.5=pyhd8ed1ab_1004 + - pillow=10.3.0=py310hf73ecf8_0 + - pip=25.0.1=pyh8b19718_0 + - pixman=0.44.2=h29eaf8c_0 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 + - platformdirs=4.3.6=pyhd8ed1ab_1 + - plotly=5.19.0=pyhd8ed1ab_0 + - pluggy=1.5.0=pyhd8ed1ab_1 + - ply=3.11=pyhd8ed1ab_3 + - poppler=23.10.0=h590f24d_0 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=16.4=hb2eb5c0_3 + - proj=9.3.0=h1d62c97_2 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.50=pyha770c72_0 + - properties=0.6.1=py_0 + - psutil=6.1.1=py310ha75aee5_0 + - pthread-stubs=0.4=hb9d3cd8_1002 + - ptyprocess=0.7.0=pyhd8ed1ab_1 + - pulseaudio-client=16.1=hb77b528_5 + - pure_eval=0.2.3=pyhd8ed1ab_1 + - pybtex=0.24.0=pyhd8ed1ab_3 + - pybtex-docutils=1.0.3=py310hff52083_2 + - pycparser=2.22=pyh29332c3_1 + - pydantic=2.10.6=pyh3cfb1c2_0 + - pydantic-core=2.27.2=py310h505e2c1_0 + - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0 + - pydiso=0.1.2=py310h7b68af5_0 + - pygments=2.19.1=pyhd8ed1ab_0 + - pylint=3.3.4=pyh29332c3_0 + - pyparsing=3.2.1=pyhd8ed1ab_0 + - pyqt=5.15.9=py310h04931ad_5 + - pyqt5-sip=12.12.2=py310hc6cd4ac_5 + - pyqtwebengine=5.15.9=py310h704022c_5 + - pyside2=5.15.8=py310hffc9498_4 + - pysocks=1.7.1=pyha55dd90_7 + - pytest=8.3.4=pyhd8ed1ab_1 + - pytest-cov=6.0.0=pyhd8ed1ab_1 + - python=3.10.16=he725a3c_1_cpython + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python-tzdata=2023.4=pyhd8ed1ab_0 + - python_abi=3.10=5_cp310 + - pytz=2024.1=pyhd8ed1ab_0 + - pywavelets=1.8.0=py310hf462985_0 + - pyyaml=6.0.2=py310h89163eb_2 + - pyzmq=26.2.1=py310h71f11fc_0 + - qhull=2020.2=h434a139_5 + - qt-main=5.15.8=h82b777d_17 + - qt-webengine=5.15.8=h75ea521_4 + - rav1e=0.6.6=he8a937b_2 + - re2=2023.09.01=h7f4b329_1 + - readline=8.2=h8228510_1 + - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 + - referencing=0.36.2=pyh29332c3_0 + - requests=2.32.3=pyhd8ed1ab_1 + - retrying=1.3.4=pyhd8ed1ab_0 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - rpds-py=0.22.3=py310h505e2c1_0 + - scikit-image=0.20.0=py310h9b08913_1 + - scikit-learn=1.4.2=py310h981052a_1 + - scipy=1.14.1=py310hfcf56fc_2 + - semver=3.0.4=pyhd8ed1ab_0 + - send2trash=1.8.3=pyh0d859eb_1 + - setuptools=75.8.0=pyhff2d567_0 + - shapely=2.0.2=py310h7dcad9a_0 + - sip=6.7.12=py310hc6cd4ac_0 + - six=1.17.0=pyhd8ed1ab_0 + - snappy=1.1.10=hdb0a2a9_1 + - sniffio=1.3.1=pyhd8ed1ab_1 + - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - sortedcontainers=2.4.0=pyhd8ed1ab_1 + - soupsieve=2.5=pyhd8ed1ab_1 + - sphinx=5.3.0=pyhd8ed1ab_0 + - sphinx-book-theme=1.1.3=pyhd8ed1ab_1 + - sphinx-comments=0.0.3=pyhd8ed1ab_1 + - sphinx-copybutton=0.5.2=pyhd8ed1ab_1 + - sphinx-design=0.6.1=pyhd8ed1ab_0 + - sphinx-external-toc=1.0.1=pyhd8ed1ab_1 + - sphinx-jupyterbook-latex=1.0.0=pyhd8ed1ab_1 + - sphinx-multitoc-numbering=0.1.3=pyhd8ed1ab_1 + - sphinx-thebe=0.3.1=pyhd8ed1ab_1 + - sphinx-togglebutton=0.3.2=pyhd8ed1ab_0 + - sphinxcontrib-applehelp=2.0.0=pyhd8ed1ab_1 + - sphinxcontrib-bibtex=2.5.0=pyhd8ed1ab_0 + - sphinxcontrib-devhelp=2.0.0=pyhd8ed1ab_1 + - sphinxcontrib-htmlhelp=2.1.0=pyhd8ed1ab_1 + - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_1 + - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1 + - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_1 + - sqlalchemy=2.0.38=py310ha75aee5_0 + - sqlite=3.49.1=h9eae976_1 + - stack_data=0.6.3=pyhd8ed1ab_1 + - svt-av1=2.3.0=h5888daf_0 + - tabulate=0.9.0=pyhd8ed1ab_2 + - tbb=2021.13.0=hceb3a55_1 + - tblib=3.0.0=pyhd8ed1ab_1 + - tenacity=9.0.0=pyhd8ed1ab_1 + - terminado=0.18.1=pyh0d859eb_0 + - threadpoolctl=3.5.0=pyhc1e730c_0 + - tifffile=2024.12.12=pyhd8ed1ab_0 + - tiledb=2.16.3=h8c794c1_3 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - tk=8.6.13=noxft_h4845f30_101 + - toml=0.10.2=pyhd8ed1ab_1 + - tomli=2.2.1=pyhd8ed1ab_1 + - tomlkit=0.13.2=pyha770c72_1 + - toolz=1.0.0=pyhd8ed1ab_1 + - tornado=6.4.2=py310ha75aee5_0 + - tqdm=4.67.1=pyhd8ed1ab_1 + - traitlets=5.14.3=pyhd8ed1ab_1 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.12.2=hd8ed1ab_1 + - typing_extensions=4.12.2=pyha770c72_1 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - tzcode=2025a=hb9d3cd8_0 + - tzdata=2025a=h78e105d_0 + - uc-micro-py=1.0.3=pyhd8ed1ab_1 + - unicodedata2=16.0.0=py310ha75aee5_0 + - uri-template=1.3.0=pyhd8ed1ab_1 + - uriparser=0.9.8=hac33072_0 + - urllib3=2.3.0=pyhd8ed1ab_0 + - vectormath=0.2.2=py_0 + - wcwidth=0.2.13=pyhd8ed1ab_1 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - werkzeug=3.1.3=pyhd8ed1ab_1 + - wheel=0.45.1=pyhd8ed1ab_1 + - widgetsnbextension=4.0.13=pyhd8ed1ab_1 + - xcb-util=0.4.0=hd590300_1 + - xcb-util-image=0.4.0=h8ee46fc_1 + - xcb-util-keysyms=0.4.0=h8ee46fc_1 + - xcb-util-renderutil=0.3.9=hd590300_1 + - xcb-util-wm=0.4.1=h8ee46fc_1 + - xerces-c=3.2.5=hac6953d_0 + - xkeyboard-config=2.42=h4ab18f5_0 + - xorg-compositeproto=0.4.2=hb9d3cd8_1002 + - xorg-damageproto=1.2.1=hb9d3cd8_1003 + - xorg-fixesproto=5.0=hb9d3cd8_1003 + - xorg-inputproto=2.3.2=hb9d3cd8_1003 + - xorg-kbproto=1.0.7=hb9d3cd8_1003 + - xorg-libice=1.1.2=hb9d3cd8_0 + - xorg-libsm=1.2.5=he73a12e_0 + - xorg-libx11=1.8.9=h8ee46fc_0 + - xorg-libxau=1.0.12=hb9d3cd8_0 + - xorg-libxcomposite=0.4.6=h0b41bf4_1 + - xorg-libxdamage=1.1.5=h7f98852_1 + - xorg-libxdmcp=1.1.5=hb9d3cd8_0 + - xorg-libxext=1.3.4=h0b41bf4_2 + - xorg-libxfixes=5.0.3=h7f98852_1004 + - xorg-libxi=1.7.10=h4bc722e_1 + - xorg-libxrandr=1.5.2=h7f98852_1 + - xorg-libxrender=0.9.11=hd590300_0 + - xorg-libxtst=1.2.5=h4bc722e_0 + - xorg-randrproto=1.5.0=hb9d3cd8_1002 + - xorg-recordproto=1.14.2=hb9d3cd8_1003 + - xorg-renderproto=0.11.1=hb9d3cd8_1003 + - xorg-util-macros=1.20.2=hb9d3cd8_0 + - xorg-xextproto=7.3.0=hb9d3cd8_1004 + - xorg-xf86vidmodeproto=2.3.1=hb9d3cd8_1005 + - xorg-xproto=7.0.31=hb9d3cd8_1008 + - xz=5.6.4=hbcc6ac9_0 + - xz-gpl-tools=5.6.4=hbcc6ac9_0 + - xz-tools=5.6.4=hb9d3cd8_0 + - yaml=0.2.5=h7f98852_2 + - zarr=2.14.2=pyhd8ed1ab_0 + - zeromq=4.3.5=h3b0a872_7 + - zfp=1.0.1=h5888daf_2 + - zict=3.0.0=pyhd8ed1ab_1 + - zipp=3.21.0=pyhd8ed1ab_1 + - zlib=1.3.1=hb9d3cd8_2 + - zlib-ng=2.0.7=h0b41bf4_0 + - zstandard=0.19.0=py310h5764c6d_0 + - zstd=1.5.7=hb8e6e7a_0 + - pip: + - curve-apps == 0.2.0 --hash=sha256:3142d0f6b212339c022ca6e9f482b4a30b3c48c85efd4f3843375cd8bdfac9c2 + - geoapps-utils == 0.4.0 --hash=sha256:22baa6f49c09e02ab65efd07fbab1421982f17aefc98749febf858da2b47d6ef + - geoh5py == 0.10.1 --hash=sha256:6ad70a64f5d5ae25c84c1d75f8142a0b34204027041a3edaf1b036fa9e571cf2 + - mira-simpeg == 0.21.2.1 --hash=sha256:82451148ed720078308f5c3273fd78ce83167a214a0164c9956af2865315ab37 + - octree-creation-app == 0.2.0 --hash=sha256:6e1ccce3cbbbb1eb7923c6c92dbc000feca2ffc6b163025f0f33e8245fcabbac + - param-sweeps == 0.2.0 --hash=sha256:f168eabf4f665ec84abd22ae6f02d631692103f86a7769847533b47a1e42b074 + - peak-finder-app == 0.2.0 --hash=sha256:ffdf641c8bdb5858b2c4f28f2ff6267e277fd14ad95e70862377020d7823d4c8 + - pymatsolver == 0.2.0 --hash=sha256:df9e0444f3c7fadf57b226d7d90b7be1dea9e24718575b458ba50429736d6c45 + - simpeg-archive == 0.11.0.1 --hash=sha256:17cc5ee70b65eeece1ab1f09b54d79c5bfa90a4c4863cc6c517bf97fbaa5a3f6 + - simpeg-drivers == 0.2.0 --hash=sha256:9976315d49833ca201504c1e1c7ad29194a3f9cf478ebf803e8b9f61c3acf789 + +variables: + KMP_WARNINGS: 0 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml new file mode 100644 index 000000000..3978b56fa --- /dev/null +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -0,0 +1,426 @@ +# Generated by conda-lock. +# platform: linux-64 +# input_hash: d292e32079711e4a7fe21b7c9ddf0a63a2663f0d5bcc16d2e1244bc5a1577628 + +channels: + - conda-forge + - nodefaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_kmp_llvm + - alsa-lib=1.2.13=hb9d3cd8_0 + - annotated-types=0.7.0=pyhd8ed1ab_1 + - ansi2html=1.9.2=py310hff52083_2 + - anyio=4.8.0=pyhd8ed1ab_0 + - aom=3.9.1=hac33072_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi-bindings=21.2.0=py310ha75aee5_5 + - arrow=1.3.0=pyhd8ed1ab_1 + - asciitree=0.3.3=py_2 + - asttokens=3.0.0=pyhd8ed1ab_1 + - async-lru=2.0.4=pyhd8ed1ab_1 + - attr=2.5.1=h166bdaf_1 + - attrs=25.1.0=pyh71513ae_0 + - babel=2.17.0=pyhd8ed1ab_0 + - beautifulsoup4=4.13.3=pyha770c72_0 + - bleach=6.2.0=pyh29332c3_4 + - bleach-with-css=6.2.0=h82add2a_4 + - blinker=1.9.0=pyhff2d567_0 + - blosc=1.21.5=h0f2a231_0 + - brotli=1.1.0=hb9d3cd8_2 + - brotli-bin=1.1.0=hb9d3cd8_2 + - brotli-python=1.1.0=py310hf71b8c6_2 + - brunsli=0.1=h9c3ff4c_0 + - bzip2=1.0.8=h4bc722e_7 + - c-ares=1.34.4=hb9d3cd8_0 + - c-blosc2=2.14.3=hb4ffafa_0 + - ca-certificates=2025.1.31=hbcca054_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - cairo=1.18.0=h3faef2a_0 + - certifi=2025.1.31=pyhd8ed1ab_0 + - cffi=1.17.1=py310h8deb56e_0 + - cfitsio=4.2.0=hd9d235c_0 + - charls=2.4.2=h59595ed_0 + - charset-normalizer=3.4.1=pyhd8ed1ab_0 + - click=8.1.8=pyh707e725_0 + - click-plugins=1.1.1=pyhd8ed1ab_1 + - cligj=0.7.2=pyhd8ed1ab_2 + - cloudpickle=3.1.1=pyhd8ed1ab_0 + - colorama=0.4.6=pyhd8ed1ab_1 + - comm=0.2.2=pyhd8ed1ab_1 + - contourpy=1.3.1=py310h3788b33_0 + - cycler=0.12.1=pyhd8ed1ab_1 + - cytoolz=1.0.1=py310ha75aee5_0 + - dash=2.12.1=pyhd8ed1ab_0 + - dash-daq=0.5.0=pyhd8ed1ab_2 + - dask-core=2024.6.2=pyhd8ed1ab_0 + - dav1d=1.2.1=hd590300_0 + - dbus=1.13.6=h5008d03_3 + - debugpy=1.8.12=py310hf71b8c6_0 + - decorator=5.1.1=pyhd8ed1ab_1 + - defusedxml=0.7.1=pyhd8ed1ab_0 + - discretize=0.10.0=py310hcb52e73_1 + - distributed=2024.6.2=pyhd8ed1ab_0 + - empymod=2.2.2=pyhd8ed1ab_0 + - exceptiongroup=1.2.2=pyhd8ed1ab_1 + - executing=2.1.0=pyhd8ed1ab_1 + - expat=2.6.4=h5888daf_0 + - fasteners=0.19=pyhd8ed1ab_1 + - fiona=1.9.3=py310ha325b7b_0 + - flask=3.1.0=pyhff2d567_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=h77eed37_3 + - fontconfig=2.15.0=h7e30c49_1 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.56.0=py310h89163eb_0 + - fqdn=1.5.1=pyhd8ed1ab_1 + - freetype=2.12.1=h267a509_2 + - freexl=2.0.0=h9dce30a_2 + - fsspec=2022.11.0=pyhd8ed1ab_0 + - gdal=3.6.4=py310h5c4b078_22 + - geoana=0.5.0=py310hcb52e73_4 + - geos=3.12.0=h59595ed_0 + - geotiff=1.7.1=hf074850_14 + - gettext=0.23.1=h5888daf_0 + - gettext-tools=0.23.1=h5888daf_0 + - giflib=5.2.2=hd590300_0 + - glib=2.78.1=hfc55251_0 + - glib-tools=2.78.1=hfc55251_0 + - graphite2=1.3.13=h59595ed_1003 + - gst-plugins-base=1.22.7=h8e1006c_0 + - gstreamer=1.22.7=h98fc4e7_0 + - h11=0.14.0=pyhd8ed1ab_1 + - h2=4.2.0=pyhd8ed1ab_0 + - h5py=3.13.0=nompi_py310h60e0fe6_100 + - harfbuzz=8.3.0=h3d44ed6_0 + - hdf4=4.2.15=h2a13503_7 + - hdf5=1.14.3=nompi_h2d575fe_109 + - hpack=4.1.0=pyhd8ed1ab_0 + - httpcore=1.0.7=pyh29332c3_1 + - httpx=0.28.1=pyhd8ed1ab_0 + - hyperframe=6.1.0=pyhd8ed1ab_0 + - icu=73.2=h59595ed_0 + - idna=3.10=pyhd8ed1ab_1 + - imagecodecs=2024.1.1=py310h0c5f7e8_2 + - imageio=2.37.0=pyhfb79c49_0 + - importlib-metadata=8.6.1=pyha770c72_0 + - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib_resources=6.5.2=pyhd8ed1ab_0 + - ipyfilechooser=0.6.0=pyhd8ed1ab_0 + - ipykernel=6.29.5=pyh3099207_0 + - ipython=8.32.0=pyh907856f_0 + - ipywidgets=8.1.5=pyhd8ed1ab_1 + - isoduration=20.11.0=pyhd8ed1ab_1 + - itsdangerous=2.2.0=pyhd8ed1ab_1 + - jedi=0.19.2=pyhd8ed1ab_1 + - jinja2=3.1.5=pyhd8ed1ab_0 + - joblib=1.4.2=pyhd8ed1ab_1 + - json-c=0.17=h1220068_1 + - json5=0.10.0=pyhd8ed1ab_1 + - jsonpointer=3.0.0=py310hff52083_1 + - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 + - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter_client=8.6.3=pyhd8ed1ab_1 + - jupyter_core=5.7.2=pyh31011fe_1 + - jupyter_events=0.12.0=pyh29332c3_0 + - jupyter_server=2.15.0=pyhd8ed1ab_0 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab=4.3.5=pyhd8ed1ab_0 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - jupyterlab_server=2.27.3=pyhd8ed1ab_1 + - jupyterlab_widgets=3.0.13=pyhd8ed1ab_1 + - jxrlib=1.1=hd590300_3 + - kealib=1.5.3=hf8d3e68_2 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.7=py310h3788b33_0 + - krb5=1.21.3=h659f571_0 + - lame=3.100=h166bdaf_1003 + - lazy-loader=0.4=pyhd8ed1ab_2 + - lazy_loader=0.4=pyhd8ed1ab_2 + - lcms2=2.16=hb7c19ff_0 + - ld_impl_linux-64=2.43=h712a8e2_2 + - lerc=4.0.0=h27087fc_0 + - libabseil=20230802.1=cxx17_h59595ed_0 + - libaec=1.1.3=h59595ed_0 + - libasprintf=0.23.1=h8e693c7_0 + - libasprintf-devel=0.23.1=h8e693c7_0 + - libavif16=1.1.1=h1909e37_2 + - libblas=3.9.0=20_linux64_mkl + - libbrotlicommon=1.1.0=hb9d3cd8_2 + - libbrotlidec=1.1.0=hb9d3cd8_2 + - libbrotlienc=1.1.0=hb9d3cd8_2 + - libcap=2.71=h39aace5_0 + - libcblas=3.9.0=20_linux64_mkl + - libclang=15.0.7=default_h127d8a8_5 + - libclang13=15.0.7=default_h5d6823c_5 + - libcrc32c=1.1.2=h9c3ff4c_0 + - libcups=2.3.3=h4637d8d_4 + - libcurl=8.12.1=h332b0f4_0 + - libdeflate=1.19=hd590300_0 + - libdlf=0.3.0=pyhd8ed1ab_1 + - libedit=3.1.20250104=pl5321h7949ede_0 + - libev=4.33=hd590300_2 + - libevent=2.1.12=hf998b51_1 + - libexpat=2.6.4=h5888daf_0 + - libffi=3.4.6=h2dba641_0 + - libflac=1.4.3=h59595ed_0 + - libgcc=14.2.0=h77fa898_1 + - libgcc-ng=14.2.0=h69a702a_1 + - libgcrypt-lib=1.11.0=hb9d3cd8_2 + - libgdal=3.6.4=hb454697_22 + - libgettextpo=0.23.1=h5888daf_0 + - libgettextpo-devel=0.23.1=h5888daf_0 + - libgfortran=14.2.0=h69a702a_1 + - libgfortran-ng=14.2.0=h69a702a_1 + - libgfortran5=14.2.0=hd5240d6_1 + - libglib=2.78.1=hebfc3b9_0 + - libgoogle-cloud=2.12.0=hef10d8f_5 + - libgpg-error=1.51=hbd13f7d_1 + - libgrpc=1.60.1=h74775cd_0 + - libhwloc=2.11.2=default_he43201b_1000 + - libhwy=1.1.0=h00ab1b0_0 + - libiconv=1.18=h4ce23a2_0 + - libjpeg-turbo=3.0.0=hd590300_1 + - libjxl=0.10.3=h66b40c8_0 + - libkml=1.3.0=hf539b9f_1021 + - liblapack=3.9.0=20_linux64_mkl + - libllvm15=15.0.7=hb3ce162_4 + - liblzma=5.6.4=hb9d3cd8_0 + - liblzma-devel=5.6.4=hb9d3cd8_0 + - libnetcdf=4.9.2=nompi_h135f659_114 + - libnghttp2=1.64.0=h161d5f1_0 + - libnsl=2.0.1=hd590300_0 + - libogg=1.3.5=h4ab18f5_0 + - libopus=1.3.1=h7f98852_1 + - libpng=1.6.47=h943b412_0 + - libpq=16.4=h2d7952a_3 + - libprotobuf=4.25.1=hf27288f_2 + - libre2-11=2023.09.01=h7a70373_1 + - librttopo=1.1.0=hb58d41b_14 + - libsndfile=1.2.2=hc60ed4a_1 + - libsodium=1.0.20=h4ab18f5_0 + - libspatialite=5.0.1=h090f1da_29 + - libsqlite=3.49.1=hee588c1_1 + - libssh2=1.11.1=hf672d98_0 + - libstdcxx=14.2.0=hc0a3c3a_1 + - libstdcxx-ng=14.2.0=h4852527_1 + - libsystemd0=256.9=h2774228_0 + - libtiff=4.6.0=ha9c0a0a_2 + - libuuid=2.38.1=h0b41bf4_0 + - libvorbis=1.3.7=h9c3ff4c_0 + - libwebp=1.4.0=h2c329e2_0 + - libwebp-base=1.4.0=hd590300_0 + - libxcb=1.15=h0b41bf4_0 + - libxcrypt=4.4.36=hd590300_1 + - libxkbcommon=1.7.0=h662e7e4_0 + - libxml2=2.12.7=h4c95cb1_3 + - libxslt=1.1.39=h76b75d6_0 + - libzip=1.11.2=h6991a6a_0 + - libzlib=1.3.1=hb9d3cd8_2 + - libzopfli=1.0.3=h9c3ff4c_0 + - llvm-openmp=19.1.7=h024ca30_0 + - llvmlite=0.44.0=py310h1a6248f_0 + - locket=1.0.0=pyhd8ed1ab_0 + - lz4-c=1.9.4=hcb278e6_0 + - markupsafe=3.0.2=py310h89163eb_1 + - matplotlib=3.9.1=py310hff52083_1 + - matplotlib-base=3.9.1=py310hf02ac8c_2 + - matplotlib-inline=0.1.7=pyhd8ed1ab_1 + - minizip=4.0.7=h05a5f5f_3 + - mistune=3.1.2=pyhd8ed1ab_0 + - mkl=2023.2.0=h84fe81f_50496 + - mpg123=1.32.9=hc50e24c_0 + - msgpack-python=1.1.0=py310h3788b33_0 + - munch=4.0.0=pyhd8ed1ab_1 + - munkres=1.1.4=pyh9f0ad1d_0 + - mysql-common=8.0.33=hf1915f5_6 + - mysql-libs=8.0.33=hca2cd23_6 + - nbclient=0.10.2=pyhd8ed1ab_0 + - nbconvert-core=7.16.6=pyh29332c3_0 + - nbformat=5.10.4=pyhd8ed1ab_1 + - ncurses=6.5=h2d0b736_3 + - nest-asyncio=1.6.0=pyhd8ed1ab_1 + - networkx=3.4.2=pyh267e887_2 + - notebook=7.3.2=pyhd8ed1ab_0 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - nspr=4.36=h5888daf_0 + - nss=3.108=h159eef7_0 + - numba=0.61.0=py310h699fe88_1 + - numcodecs=0.13.1=py310h5eaa309_0 + - numpy=1.26.4=py310hb13e2d6_0 + - openjpeg=2.5.2=h488ebb8_0 + - openssl=3.4.1=h7b32b05_0 + - overrides=7.7.0=pyhd8ed1ab_1 + - packaging=24.2=pyhd8ed1ab_2 + - pandas=2.2.3=py310h5eaa309_1 + - pandocfilters=1.5.0=pyhd8ed1ab_0 + - parso=0.8.4=pyhd8ed1ab_1 + - partd=1.4.2=pyhd8ed1ab_0 + - pcre2=10.40=hc3806b6_0 + - pexpect=4.9.0=pyhd8ed1ab_1 + - pickleshare=0.7.5=pyhd8ed1ab_1004 + - pillow=10.3.0=py310hf73ecf8_0 + - pip=25.0.1=pyh8b19718_0 + - pixman=0.44.2=h29eaf8c_0 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 + - platformdirs=4.3.6=pyhd8ed1ab_1 + - plotly=5.19.0=pyhd8ed1ab_0 + - ply=3.11=pyhd8ed1ab_3 + - poppler=23.10.0=h590f24d_0 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=16.4=hb2eb5c0_3 + - proj=9.3.0=h1d62c97_2 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.50=pyha770c72_0 + - properties=0.6.1=py_0 + - psutil=6.1.1=py310ha75aee5_0 + - pthread-stubs=0.4=hb9d3cd8_1002 + - ptyprocess=0.7.0=pyhd8ed1ab_1 + - pulseaudio-client=16.1=hb77b528_5 + - pure_eval=0.2.3=pyhd8ed1ab_1 + - pycparser=2.22=pyh29332c3_1 + - pydantic=2.10.6=pyh3cfb1c2_0 + - pydantic-core=2.27.2=py310h505e2c1_0 + - pydiso=0.1.2=py310h7b68af5_0 + - pygments=2.19.1=pyhd8ed1ab_0 + - pyparsing=3.2.1=pyhd8ed1ab_0 + - pyqt=5.15.9=py310h04931ad_5 + - pyqt5-sip=12.12.2=py310hc6cd4ac_5 + - pyqtwebengine=5.15.9=py310h704022c_5 + - pyside2=5.15.8=py310hffc9498_4 + - pysocks=1.7.1=pyha55dd90_7 + - python=3.10.16=he725a3c_1_cpython + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python-tzdata=2023.4=pyhd8ed1ab_0 + - python_abi=3.10=5_cp310 + - pytz=2024.1=pyhd8ed1ab_0 + - pywavelets=1.8.0=py310hf462985_0 + - pyyaml=6.0.2=py310h89163eb_2 + - pyzmq=26.2.1=py310h71f11fc_0 + - qhull=2020.2=h434a139_5 + - qt-main=5.15.8=h82b777d_17 + - qt-webengine=5.15.8=h75ea521_4 + - rav1e=0.6.6=he8a937b_2 + - re2=2023.09.01=h7f4b329_1 + - readline=8.2=h8228510_1 + - referencing=0.36.2=pyh29332c3_0 + - requests=2.32.3=pyhd8ed1ab_1 + - retrying=1.3.4=pyhd8ed1ab_0 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - rpds-py=0.22.3=py310h505e2c1_0 + - scikit-image=0.20.0=py310h9b08913_1 + - scikit-learn=1.4.2=py310h981052a_1 + - scipy=1.14.1=py310hfcf56fc_2 + - send2trash=1.8.3=pyh0d859eb_1 + - setuptools=75.8.0=pyhff2d567_0 + - shapely=2.0.2=py310h7dcad9a_0 + - sip=6.7.12=py310hc6cd4ac_0 + - six=1.17.0=pyhd8ed1ab_0 + - snappy=1.1.10=hdb0a2a9_1 + - sniffio=1.3.1=pyhd8ed1ab_1 + - sortedcontainers=2.4.0=pyhd8ed1ab_1 + - soupsieve=2.5=pyhd8ed1ab_1 + - sqlite=3.49.1=h9eae976_1 + - stack_data=0.6.3=pyhd8ed1ab_1 + - svt-av1=2.3.0=h5888daf_0 + - tbb=2021.13.0=hceb3a55_1 + - tblib=3.0.0=pyhd8ed1ab_1 + - tenacity=9.0.0=pyhd8ed1ab_1 + - terminado=0.18.1=pyh0d859eb_0 + - threadpoolctl=3.5.0=pyhc1e730c_0 + - tifffile=2024.12.12=pyhd8ed1ab_0 + - tiledb=2.16.3=h8c794c1_3 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - tk=8.6.13=noxft_h4845f30_101 + - toml=0.10.2=pyhd8ed1ab_1 + - tomli=2.2.1=pyhd8ed1ab_1 + - toolz=1.0.0=pyhd8ed1ab_1 + - tornado=6.4.2=py310ha75aee5_0 + - tqdm=4.67.1=pyhd8ed1ab_1 + - traitlets=5.14.3=pyhd8ed1ab_1 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.12.2=hd8ed1ab_1 + - typing_extensions=4.12.2=pyha770c72_1 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - tzcode=2025a=hb9d3cd8_0 + - tzdata=2025a=h78e105d_0 + - unicodedata2=16.0.0=py310ha75aee5_0 + - uri-template=1.3.0=pyhd8ed1ab_1 + - uriparser=0.9.8=hac33072_0 + - urllib3=2.3.0=pyhd8ed1ab_0 + - vectormath=0.2.2=py_0 + - wcwidth=0.2.13=pyhd8ed1ab_1 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - werkzeug=3.1.3=pyhd8ed1ab_1 + - wheel=0.45.1=pyhd8ed1ab_1 + - widgetsnbextension=4.0.13=pyhd8ed1ab_1 + - xcb-util=0.4.0=hd590300_1 + - xcb-util-image=0.4.0=h8ee46fc_1 + - xcb-util-keysyms=0.4.0=h8ee46fc_1 + - xcb-util-renderutil=0.3.9=hd590300_1 + - xcb-util-wm=0.4.1=h8ee46fc_1 + - xerces-c=3.2.5=hac6953d_0 + - xkeyboard-config=2.42=h4ab18f5_0 + - xorg-compositeproto=0.4.2=hb9d3cd8_1002 + - xorg-damageproto=1.2.1=hb9d3cd8_1003 + - xorg-fixesproto=5.0=hb9d3cd8_1003 + - xorg-inputproto=2.3.2=hb9d3cd8_1003 + - xorg-kbproto=1.0.7=hb9d3cd8_1003 + - xorg-libice=1.1.2=hb9d3cd8_0 + - xorg-libsm=1.2.5=he73a12e_0 + - xorg-libx11=1.8.9=h8ee46fc_0 + - xorg-libxau=1.0.12=hb9d3cd8_0 + - xorg-libxcomposite=0.4.6=h0b41bf4_1 + - xorg-libxdamage=1.1.5=h7f98852_1 + - xorg-libxdmcp=1.1.5=hb9d3cd8_0 + - xorg-libxext=1.3.4=h0b41bf4_2 + - xorg-libxfixes=5.0.3=h7f98852_1004 + - xorg-libxi=1.7.10=h4bc722e_1 + - xorg-libxrandr=1.5.2=h7f98852_1 + - xorg-libxrender=0.9.11=hd590300_0 + - xorg-libxtst=1.2.5=h4bc722e_0 + - xorg-randrproto=1.5.0=hb9d3cd8_1002 + - xorg-recordproto=1.14.2=hb9d3cd8_1003 + - xorg-renderproto=0.11.1=hb9d3cd8_1003 + - xorg-util-macros=1.20.2=hb9d3cd8_0 + - xorg-xextproto=7.3.0=hb9d3cd8_1004 + - xorg-xf86vidmodeproto=2.3.1=hb9d3cd8_1005 + - xorg-xproto=7.0.31=hb9d3cd8_1008 + - xz=5.6.4=hbcc6ac9_0 + - xz-gpl-tools=5.6.4=hbcc6ac9_0 + - xz-tools=5.6.4=hb9d3cd8_0 + - yaml=0.2.5=h7f98852_2 + - zarr=2.14.2=pyhd8ed1ab_0 + - zeromq=4.3.5=h3b0a872_7 + - zfp=1.0.1=h5888daf_2 + - zict=3.0.0=pyhd8ed1ab_1 + - zipp=3.21.0=pyhd8ed1ab_1 + - zlib=1.3.1=hb9d3cd8_2 + - zlib-ng=2.0.7=h0b41bf4_0 + - zstandard=0.19.0=py310h5764c6d_0 + - zstd=1.5.7=hb8e6e7a_0 + - pip: + - curve-apps == 0.2.0 --hash=sha256:3142d0f6b212339c022ca6e9f482b4a30b3c48c85efd4f3843375cd8bdfac9c2 + - geoapps-utils == 0.4.0 --hash=sha256:22baa6f49c09e02ab65efd07fbab1421982f17aefc98749febf858da2b47d6ef + - geoh5py == 0.10.1 --hash=sha256:6ad70a64f5d5ae25c84c1d75f8142a0b34204027041a3edaf1b036fa9e571cf2 + - mira-simpeg == 0.21.2.1 --hash=sha256:82451148ed720078308f5c3273fd78ce83167a214a0164c9956af2865315ab37 + - octree-creation-app == 0.2.0 --hash=sha256:6e1ccce3cbbbb1eb7923c6c92dbc000feca2ffc6b163025f0f33e8245fcabbac + - param-sweeps == 0.2.0 --hash=sha256:f168eabf4f665ec84abd22ae6f02d631692103f86a7769847533b47a1e42b074 + - peak-finder-app == 0.2.0 --hash=sha256:ffdf641c8bdb5858b2c4f28f2ff6267e277fd14ad95e70862377020d7823d4c8 + - pymatsolver == 0.2.0 --hash=sha256:df9e0444f3c7fadf57b226d7d90b7be1dea9e24718575b458ba50429736d6c45 + - simpeg-archive == 0.11.0.1 --hash=sha256:17cc5ee70b65eeece1ab1f09b54d79c5bfa90a4c4863cc6c517bf97fbaa5a3f6 + - simpeg-drivers == 0.2.0 --hash=sha256:9976315d49833ca201504c1e1c7ad29194a3f9cf478ebf803e8b9f61c3acf789 + +variables: + KMP_WARNINGS: 0 diff --git a/environments/py-3.10-win-64-dev.conda.lock.yml b/environments/py-3.10-win-64-dev.conda.lock.yml new file mode 100644 index 000000000..303692dfd --- /dev/null +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -0,0 +1,414 @@ +# Generated by conda-lock. +# platform: win-64 +# input_hash: 32fa5b433256f527125c8edcdbfb4c703022d845e40540d5fbfea03b21aa140a + +channels: + - conda-forge + - nodefaults +dependencies: + - _openmp_mutex=4.5=2_gnu + - accessible-pygments=0.0.5=pyhd8ed1ab_1 + - alabaster=0.7.16=pyhd8ed1ab_0 + - annotated-types=0.7.0=pyhd8ed1ab_1 + - ansi2html=1.9.2=py310h5588dad_2 + - anyio=4.8.0=pyhd8ed1ab_0 + - aom=3.7.1=h63175ca_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi-bindings=21.2.0=py310ha8f682b_5 + - arrow=1.3.0=pyhd8ed1ab_1 + - asciitree=0.3.3=py_2 + - astroid=3.3.8=py310h5588dad_0 + - asttokens=3.0.0=pyhd8ed1ab_1 + - async-lru=2.0.4=pyhd8ed1ab_1 + - attrs=25.1.0=pyh71513ae_0 + - babel=2.17.0=pyhd8ed1ab_0 + - beautifulsoup4=4.13.3=pyha770c72_0 + - bleach=6.2.0=pyh29332c3_4 + - bleach-with-css=6.2.0=h82add2a_4 + - blinker=1.9.0=pyhff2d567_0 + - blosc=1.21.5=hdccc3a2_0 + - brotli=1.1.0=h2466b09_2 + - brotli-bin=1.1.0=h2466b09_2 + - brotli-python=1.1.0=py310h9e98ed7_2 + - bzip2=1.0.8=h2466b09_7 + - c-ares=1.34.4=h2466b09_0 + - c-blosc2=2.14.3=h183a6f4_0 + - ca-certificates=2025.1.31=h56e8100_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - cairo=1.18.0=h1fef639_0 + - certifi=2025.1.31=pyhd8ed1ab_0 + - cffi=1.17.1=py310ha8f682b_0 + - cfitsio=4.2.0=h9ebe7e4_0 + - charls=2.4.2=h1537add_0 + - charset-normalizer=3.4.1=pyhd8ed1ab_0 + - click=8.1.8=pyh7428d3b_0 + - click-plugins=1.1.1=pyhd8ed1ab_1 + - cligj=0.7.2=pyhd8ed1ab_2 + - cloudpickle=3.1.1=pyhd8ed1ab_0 + - colorama=0.4.6=pyhd8ed1ab_1 + - comm=0.2.2=pyhd8ed1ab_1 + - contourpy=1.3.1=py310hc19bc0b_0 + - coverage=7.6.12=py310h38315fa_0 + - cpython=3.10.16=py310hd8ed1ab_1 + - cycler=0.12.1=pyhd8ed1ab_1 + - cytoolz=1.0.1=py310ha8f682b_0 + - dash=2.12.1=pyhd8ed1ab_0 + - dash-daq=0.5.0=pyhd8ed1ab_2 + - dask-core=2024.6.2=pyhd8ed1ab_0 + - dataclasses=0.8=pyhc8e2a94_3 + - dav1d=1.2.1=hcfcfb64_0 + - debugpy=1.8.12=py310h9e98ed7_0 + - decorator=5.1.1=pyhd8ed1ab_1 + - defusedxml=0.7.1=pyhd8ed1ab_0 + - dill=0.3.9=pyhd8ed1ab_1 + - discretize=0.10.0=py310h4856b71_1 + - distributed=2024.6.2=pyhd8ed1ab_0 + - docutils=0.19=py310h5588dad_1 + - empymod=2.2.2=pyhd8ed1ab_0 + - exceptiongroup=1.2.2=pyhd8ed1ab_1 + - executing=2.1.0=pyhd8ed1ab_1 + - fasteners=0.19=pyhd8ed1ab_1 + - fiona=1.9.3=py310h4a685fe_0 + - flask=3.1.0=pyhff2d567_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=h77eed37_3 + - fontconfig=2.15.0=h765892d_1 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.56.0=py310h38315fa_0 + - fqdn=1.5.1=pyhd8ed1ab_1 + - freetype=2.12.1=hdaf720e_2 + - freexl=2.0.0=hf297d47_2 + - fsspec=2022.11.0=pyhd8ed1ab_0 + - gdal=3.6.4=py310haa9213b_22 + - geoana=0.5.0=py310h4856b71_4 + - geos=3.12.0=h1537add_0 + - geotiff=1.7.1=hcf4a93f_14 + - gettext=0.22.5=h5728263_3 + - gettext-tools=0.22.5=h5a7288d_3 + - giflib=5.2.2=h64bf75a_0 + - glib=2.78.1=h12be248_0 + - glib-tools=2.78.1=h12be248_0 + - greenlet=3.1.1=py310h9e98ed7_1 + - gst-plugins-base=1.22.7=h001b923_0 + - gstreamer=1.22.7=hb4038d2_0 + - h11=0.14.0=pyhd8ed1ab_1 + - h2=4.2.0=pyhd8ed1ab_0 + - h5py=3.13.0=nompi_py310h2b0be38_100 + - hdf4=4.2.15=h5557f11_7 + - hdf5=1.14.3=nompi_hb2c4d47_109 + - hpack=4.1.0=pyhd8ed1ab_0 + - httpcore=1.0.7=pyh29332c3_1 + - httpx=0.28.1=pyhd8ed1ab_0 + - hyperframe=6.1.0=pyhd8ed1ab_0 + - icu=73.2=h63175ca_0 + - idna=3.10=pyhd8ed1ab_1 + - imagecodecs=2024.1.1=py310h32f22c9_2 + - imageio=2.37.0=pyhfb79c49_0 + - imagesize=1.4.1=pyhd8ed1ab_0 + - importlib-metadata=8.6.1=pyha770c72_0 + - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib_resources=6.5.2=pyhd8ed1ab_0 + - iniconfig=2.0.0=pyhd8ed1ab_1 + - intel-openmp=2023.2.0=h57928b3_50497 + - ipyfilechooser=0.6.0=pyhd8ed1ab_0 + - ipykernel=6.29.5=pyh4bbf305_0 + - ipython=8.32.0=pyh9ab4c32_0 + - ipywidgets=8.1.5=pyhd8ed1ab_1 + - isoduration=20.11.0=pyhd8ed1ab_1 + - isort=6.0.0=pyhd8ed1ab_0 + - itsdangerous=2.2.0=pyhd8ed1ab_1 + - jedi=0.19.2=pyhd8ed1ab_1 + - jinja2=3.1.5=pyhd8ed1ab_0 + - joblib=1.4.2=pyhd8ed1ab_1 + - json5=0.10.0=pyhd8ed1ab_1 + - jsonpointer=3.0.0=py310h5588dad_1 + - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 + - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jupyter-book=1.0.3=pyhd8ed1ab_1 + - jupyter-cache=1.0.1=pyhff2d567_0 + - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter_client=8.6.3=pyhd8ed1ab_1 + - jupyter_core=5.7.2=pyh5737063_1 + - jupyter_events=0.12.0=pyh29332c3_0 + - jupyter_server=2.15.0=pyhd8ed1ab_0 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab=4.3.5=pyhd8ed1ab_0 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - jupyterlab_server=2.27.3=pyhd8ed1ab_1 + - jupyterlab_widgets=3.0.13=pyhd8ed1ab_1 + - jupytext=1.16.7=pyhbbac1ac_0 + - jxrlib=1.1=hcfcfb64_3 + - kealib=1.5.3=h6c43f9b_2 + - kiwisolver=1.4.7=py310hc19bc0b_0 + - krb5=1.21.3=hdf4eb48_0 + - latexcodec=2.0.1=pyh9f0ad1d_0 + - lazy-loader=0.4=pyhd8ed1ab_2 + - lazy_loader=0.4=pyhd8ed1ab_2 + - lcms2=2.16=h67d730c_0 + - lerc=4.0.0=h63175ca_0 + - libabseil=20230802.1=cxx17_h63175ca_0 + - libaec=1.1.3=h63175ca_0 + - libasprintf=0.22.5=h5728263_3 + - libasprintf-devel=0.22.5=h5728263_3 + - libavif=1.0.1=h7a9aacb_3 + - libblas=3.9.0=20_win64_mkl + - libbrotlicommon=1.1.0=h2466b09_2 + - libbrotlidec=1.1.0=h2466b09_2 + - libbrotlienc=1.1.0=h2466b09_2 + - libcblas=3.9.0=20_win64_mkl + - libclang=15.0.7=default_h3a3e6c3_5 + - libclang13=15.0.7=default_hf64faad_5 + - libcrc32c=1.1.2=h0e60522_0 + - libcurl=8.12.1=h88aaa65_0 + - libdeflate=1.19=hcfcfb64_0 + - libdlf=0.3.0=pyhd8ed1ab_1 + - libexpat=2.6.4=he0c23c2_0 + - libffi=3.4.6=h537db12_0 + - libgcc=14.2.0=h1383e82_1 + - libgdal=3.6.4=h8c6448d_22 + - libgettextpo=0.22.5=h5728263_3 + - libgettextpo-devel=0.22.5=h5728263_3 + - libglib=2.78.1=he8f3873_0 + - libgomp=14.2.0=h1383e82_1 + - libgoogle-cloud=2.12.0=hc7cbac0_5 + - libgrpc=1.60.1=h0bf0bfa_0 + - libhwloc=2.11.2=default_ha69328c_1001 + - libiconv=1.17=hcfcfb64_2 + - libintl=0.22.5=h5728263_3 + - libintl-devel=0.22.5=h5728263_3 + - libjpeg-turbo=3.0.0=hcfcfb64_1 + - libkml=1.3.0=h538826c_1021 + - liblapack=3.9.0=20_win64_mkl + - liblzma=5.6.4=h2466b09_0 + - liblzma-devel=5.6.4=h2466b09_0 + - libnetcdf=4.9.2=nompi_h92078aa_114 + - libogg=1.3.5=h2466b09_0 + - libpng=1.6.47=had7236b_0 + - libpq=16.8=hddc24e7_0 + - libprotobuf=4.25.1=hb8276f3_2 + - libre2-11=2023.09.01=h8c5ae5e_1 + - librttopo=1.1.0=h92c5fdb_14 + - libsodium=1.0.20=hc70643c_0 + - libspatialite=5.0.1=hbf340bc_29 + - libsqlite=3.49.1=h67fdade_1 + - libssh2=1.11.1=he619c9f_0 + - libtiff=4.6.0=h6e2ebb7_2 + - libvorbis=1.3.7=h0e60522_0 + - libwebp=1.5.0=h3b0e114_0 + - libwebp-base=1.5.0=h3b0e114_0 + - libwinpthread=12.0.0.r4.gg4f2fc60ca=h57928b3_9 + - libxcb=1.17.0=h0e4246c_0 + - libxml2=2.13.5=he286e8c_1 + - libxslt=1.1.39=h3df6e99_0 + - libzip=1.11.2=h3135430_0 + - libzlib=1.3.1=h2466b09_2 + - libzopfli=1.0.3=h0e60522_0 + - linkify-it-py=2.0.3=pyhd8ed1ab_1 + - llvmlite=0.44.0=py310h0288bfe_0 + - locket=1.0.0=pyhd8ed1ab_0 + - lz4-c=1.9.4=hcfcfb64_0 + - markdown-it-py=2.2.0=pyhd8ed1ab_0 + - markupsafe=3.0.2=py310h38315fa_1 + - matplotlib=3.9.1=py310h5588dad_1 + - matplotlib-base=3.9.1=py310h37e0a56_2 + - matplotlib-inline=0.1.7=pyhd8ed1ab_1 + - mccabe=0.7.0=pyhd8ed1ab_1 + - mdit-py-plugins=0.4.2=pyhd8ed1ab_1 + - mdurl=0.1.2=pyhd8ed1ab_1 + - minizip=4.0.7=h9fa1bad_3 + - mistune=3.1.2=pyhd8ed1ab_0 + - mkl=2023.2.0=h6a75c08_50497 + - msgpack-python=1.1.0=py310hc19bc0b_0 + - munch=4.0.0=pyhd8ed1ab_1 + - munkres=1.1.4=pyh9f0ad1d_0 + - myst-nb=1.2.0=pyh29332c3_0 + - myst-parser=1.0.0=pyhd8ed1ab_0 + - nbclient=0.10.2=pyhd8ed1ab_0 + - nbconvert-core=7.16.6=pyh29332c3_0 + - nbformat=5.10.4=pyhd8ed1ab_1 + - nest-asyncio=1.6.0=pyhd8ed1ab_1 + - networkx=3.4.2=pyh267e887_2 + - notebook=7.3.2=pyhd8ed1ab_0 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - numba=0.61.0=py310h7793332_1 + - numcodecs=0.13.1=py310hb4db72f_0 + - numpy=1.26.4=py310hf667824_0 + - openjpeg=2.5.2=h3d672ee_0 + - openssl=3.4.1=ha4e3fda_0 + - overrides=7.7.0=pyhd8ed1ab_1 + - packaging=24.2=pyhd8ed1ab_2 + - pandas=2.2.3=py310hb4db72f_1 + - pandocfilters=1.5.0=pyhd8ed1ab_0 + - parso=0.8.4=pyhd8ed1ab_1 + - partd=1.4.2=pyhd8ed1ab_0 + - pcre2=10.40=h17e33f8_0 + - pickleshare=0.7.5=pyhd8ed1ab_1004 + - pillow=10.3.0=py310h3e38d90_1 + - pip=25.0.1=pyh8b19718_0 + - pixman=0.44.2=had0cd8c_0 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 + - platformdirs=4.3.6=pyhd8ed1ab_1 + - plotly=5.19.0=pyhd8ed1ab_0 + - pluggy=1.5.0=pyhd8ed1ab_1 + - ply=3.11=pyhd8ed1ab_3 + - poppler=23.10.0=hc2f3c52_0 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=16.8=h38e16cc_0 + - proj=9.3.0=he13c7e8_2 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.50=pyha770c72_0 + - properties=0.6.1=py_0 + - psutil=6.1.1=py310ha8f682b_0 + - pthread-stubs=0.4=h0e40799_1002 + - pure_eval=0.2.3=pyhd8ed1ab_1 + - pybtex=0.24.0=pyhd8ed1ab_3 + - pybtex-docutils=1.0.3=py310h5588dad_2 + - pycparser=2.22=pyh29332c3_1 + - pydantic=2.10.6=pyh3cfb1c2_0 + - pydantic-core=2.27.2=py310hc226416_0 + - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0 + - pydiso=0.1.2=py310h5da8fee_0 + - pygments=2.19.1=pyhd8ed1ab_0 + - pylint=3.3.4=pyh29332c3_0 + - pyparsing=3.2.1=pyhd8ed1ab_0 + - pyqt=5.15.9=py310h1fd54f2_5 + - pyqt5-sip=12.12.2=py310h00ffb61_5 + - pyqtwebengine=5.15.9=py310he49db7d_5 + - pyside2=5.15.8=py310h1e56762_4 + - pysocks=1.7.1=pyh09c184e_7 + - pytest=8.3.4=pyhd8ed1ab_1 + - pytest-cov=6.0.0=pyhd8ed1ab_1 + - python=3.10.16=h37870fc_1_cpython + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python-tzdata=2023.4=pyhd8ed1ab_0 + - python_abi=3.10=5_cp310 + - pytz=2024.1=pyhd8ed1ab_0 + - pywavelets=1.8.0=py310hb0944cc_0 + - pywin32=307=py310h9e98ed7_3 + - pywinpty=2.0.15=py310h9e98ed7_0 + - pyyaml=6.0.2=py310h38315fa_2 + - pyzmq=26.2.1=py310h656833d_0 + - qhull=2020.2=hc790b64_5 + - qt-main=5.15.8=h9e85ed6_17 + - qt-webengine=5.15.8=h4bf5c4e_4 + - rav1e=0.6.6=h975169c_2 + - re2=2023.09.01=hd3b24a8_1 + - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1 + - referencing=0.36.2=pyh29332c3_0 + - requests=2.32.3=pyhd8ed1ab_1 + - retrying=1.3.4=pyhd8ed1ab_0 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - rpds-py=0.22.3=py310hc226416_0 + - scikit-image=0.20.0=py310h1c4a608_1 + - scikit-learn=1.4.2=py310hf2a6c47_1 + - scipy=1.14.1=py310hbd0dde3_2 + - semver=3.0.4=pyhd8ed1ab_0 + - send2trash=1.8.3=pyh5737063_1 + - setuptools=75.8.0=pyhff2d567_0 + - shapely=2.0.2=py310h839b4a8_0 + - sip=6.7.12=py310h00ffb61_0 + - six=1.17.0=pyhd8ed1ab_0 + - snappy=1.1.10=hfb803bf_1 + - sniffio=1.3.1=pyhd8ed1ab_1 + - snowballstemmer=2.2.0=pyhd8ed1ab_0 + - sortedcontainers=2.4.0=pyhd8ed1ab_1 + - soupsieve=2.5=pyhd8ed1ab_1 + - sphinx=5.3.0=pyhd8ed1ab_0 + - sphinx-book-theme=1.1.3=pyhd8ed1ab_1 + - sphinx-comments=0.0.3=pyhd8ed1ab_1 + - sphinx-copybutton=0.5.2=pyhd8ed1ab_1 + - sphinx-design=0.6.1=pyhd8ed1ab_0 + - sphinx-external-toc=1.0.1=pyhd8ed1ab_1 + - sphinx-jupyterbook-latex=1.0.0=pyhd8ed1ab_1 + - sphinx-multitoc-numbering=0.1.3=pyhd8ed1ab_1 + - sphinx-thebe=0.3.1=pyhd8ed1ab_1 + - sphinx-togglebutton=0.3.2=pyhd8ed1ab_0 + - sphinxcontrib-applehelp=2.0.0=pyhd8ed1ab_1 + - sphinxcontrib-bibtex=2.5.0=pyhd8ed1ab_0 + - sphinxcontrib-devhelp=2.0.0=pyhd8ed1ab_1 + - sphinxcontrib-htmlhelp=2.1.0=pyhd8ed1ab_1 + - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_1 + - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1 + - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_1 + - sqlalchemy=2.0.38=py310ha8f682b_0 + - sqlite=3.49.1=h2466b09_1 + - stack_data=0.6.3=pyhd8ed1ab_1 + - svt-av1=1.7.0=h63175ca_0 + - tabulate=0.9.0=pyhd8ed1ab_2 + - tbb=2021.13.0=h62715c5_1 + - tblib=3.0.0=pyhd8ed1ab_1 + - tenacity=9.0.0=pyhd8ed1ab_1 + - terminado=0.18.1=pyh5737063_0 + - threadpoolctl=3.5.0=pyhc1e730c_0 + - tifffile=2024.12.12=pyhd8ed1ab_0 + - tiledb=2.16.3=hbf04793_3 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - tk=8.6.13=h5226925_1 + - toml=0.10.2=pyhd8ed1ab_1 + - tomli=2.2.1=pyhd8ed1ab_1 + - tomlkit=0.13.2=pyha770c72_1 + - toolz=1.0.0=pyhd8ed1ab_1 + - tornado=6.4.2=py310ha8f682b_0 + - tqdm=4.67.1=pyhd8ed1ab_1 + - traitlets=5.14.3=pyhd8ed1ab_1 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.12.2=hd8ed1ab_1 + - typing_extensions=4.12.2=pyha770c72_1 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - tzdata=2025a=h78e105d_0 + - uc-micro-py=1.0.3=pyhd8ed1ab_1 + - ucrt=10.0.22621.0=h57928b3_1 + - unicodedata2=16.0.0=py310ha8f682b_0 + - uri-template=1.3.0=pyhd8ed1ab_1 + - uriparser=0.9.8=h5a68840_0 + - urllib3=2.3.0=pyhd8ed1ab_0 + - vc=14.3=h5fd82a7_24 + - vc14_runtime=14.42.34433=h6356254_24 + - vectormath=0.2.2=py_0 + - vs2015_runtime=14.42.34433=hfef2bbc_24 + - wcwidth=0.2.13=pyhd8ed1ab_1 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - werkzeug=3.1.3=pyhd8ed1ab_1 + - wheel=0.45.1=pyhd8ed1ab_1 + - widgetsnbextension=4.0.13=pyhd8ed1ab_1 + - win_inet_pton=1.1.0=pyh7428d3b_8 + - winpty=0.4.3=4 + - xerces-c=3.2.5=he0c23c2_2 + - xorg-libxau=1.0.12=h0e40799_0 + - xorg-libxdmcp=1.1.5=h0e40799_0 + - xz=5.6.4=h208afaa_0 + - xz-tools=5.6.4=h2466b09_0 + - yaml=0.2.5=h8ffe710_2 + - zarr=2.14.2=pyhd8ed1ab_0 + - zeromq=4.3.5=ha9f60a1_7 + - zfp=1.0.1=he0c23c2_2 + - zict=3.0.0=pyhd8ed1ab_1 + - zipp=3.21.0=pyhd8ed1ab_1 + - zlib=1.3.1=h2466b09_2 + - zlib-ng=2.0.7=hcfcfb64_0 + - zstandard=0.23.0=py310he5e10e1_1 + - zstd=1.5.6=h0ea2cb4_0 + - pip: + - curve-apps == 0.2.0 --hash=sha256:3142d0f6b212339c022ca6e9f482b4a30b3c48c85efd4f3843375cd8bdfac9c2 + - geoapps-utils == 0.4.0 --hash=sha256:22baa6f49c09e02ab65efd07fbab1421982f17aefc98749febf858da2b47d6ef + - geoh5py == 0.10.1 --hash=sha256:6ad70a64f5d5ae25c84c1d75f8142a0b34204027041a3edaf1b036fa9e571cf2 + - mira-simpeg == 0.21.2.1 --hash=sha256:82451148ed720078308f5c3273fd78ce83167a214a0164c9956af2865315ab37 + - octree-creation-app == 0.2.0 --hash=sha256:6e1ccce3cbbbb1eb7923c6c92dbc000feca2ffc6b163025f0f33e8245fcabbac + - param-sweeps == 0.2.0 --hash=sha256:f168eabf4f665ec84abd22ae6f02d631692103f86a7769847533b47a1e42b074 + - peak-finder-app == 0.2.0 --hash=sha256:ffdf641c8bdb5858b2c4f28f2ff6267e277fd14ad95e70862377020d7823d4c8 + - pymatsolver == 0.2.0 --hash=sha256:df9e0444f3c7fadf57b226d7d90b7be1dea9e24718575b458ba50429736d6c45 + - simpeg-archive == 0.11.0.1 --hash=sha256:17cc5ee70b65eeece1ab1f09b54d79c5bfa90a4c4863cc6c517bf97fbaa5a3f6 + - simpeg-drivers == 0.2.0 --hash=sha256:9976315d49833ca201504c1e1c7ad29194a3f9cf478ebf803e8b9f61c3acf789 + +variables: + KMP_WARNINGS: 0 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml new file mode 100644 index 000000000..a9ecdca65 --- /dev/null +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -0,0 +1,361 @@ +# Generated by conda-lock. +# platform: win-64 +# input_hash: 32fa5b433256f527125c8edcdbfb4c703022d845e40540d5fbfea03b21aa140a + +channels: + - conda-forge + - nodefaults +dependencies: + - _openmp_mutex=4.5=2_gnu + - annotated-types=0.7.0=pyhd8ed1ab_1 + - ansi2html=1.9.2=py310h5588dad_2 + - anyio=4.8.0=pyhd8ed1ab_0 + - aom=3.7.1=h63175ca_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi-bindings=21.2.0=py310ha8f682b_5 + - arrow=1.3.0=pyhd8ed1ab_1 + - asciitree=0.3.3=py_2 + - asttokens=3.0.0=pyhd8ed1ab_1 + - async-lru=2.0.4=pyhd8ed1ab_1 + - attrs=25.1.0=pyh71513ae_0 + - babel=2.17.0=pyhd8ed1ab_0 + - beautifulsoup4=4.13.3=pyha770c72_0 + - bleach=6.2.0=pyh29332c3_4 + - bleach-with-css=6.2.0=h82add2a_4 + - blinker=1.9.0=pyhff2d567_0 + - blosc=1.21.5=hdccc3a2_0 + - brotli=1.1.0=h2466b09_2 + - brotli-bin=1.1.0=h2466b09_2 + - brotli-python=1.1.0=py310h9e98ed7_2 + - bzip2=1.0.8=h2466b09_7 + - c-ares=1.34.4=h2466b09_0 + - c-blosc2=2.14.3=h183a6f4_0 + - ca-certificates=2025.1.31=h56e8100_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - cairo=1.18.0=h1fef639_0 + - certifi=2025.1.31=pyhd8ed1ab_0 + - cffi=1.17.1=py310ha8f682b_0 + - cfitsio=4.2.0=h9ebe7e4_0 + - charls=2.4.2=h1537add_0 + - charset-normalizer=3.4.1=pyhd8ed1ab_0 + - click=8.1.8=pyh7428d3b_0 + - click-plugins=1.1.1=pyhd8ed1ab_1 + - cligj=0.7.2=pyhd8ed1ab_2 + - cloudpickle=3.1.1=pyhd8ed1ab_0 + - colorama=0.4.6=pyhd8ed1ab_1 + - comm=0.2.2=pyhd8ed1ab_1 + - contourpy=1.3.1=py310hc19bc0b_0 + - cpython=3.10.16=py310hd8ed1ab_1 + - cycler=0.12.1=pyhd8ed1ab_1 + - cytoolz=1.0.1=py310ha8f682b_0 + - dash=2.12.1=pyhd8ed1ab_0 + - dash-daq=0.5.0=pyhd8ed1ab_2 + - dask-core=2024.6.2=pyhd8ed1ab_0 + - dav1d=1.2.1=hcfcfb64_0 + - debugpy=1.8.12=py310h9e98ed7_0 + - decorator=5.1.1=pyhd8ed1ab_1 + - defusedxml=0.7.1=pyhd8ed1ab_0 + - discretize=0.10.0=py310h4856b71_1 + - distributed=2024.6.2=pyhd8ed1ab_0 + - empymod=2.2.2=pyhd8ed1ab_0 + - exceptiongroup=1.2.2=pyhd8ed1ab_1 + - executing=2.1.0=pyhd8ed1ab_1 + - fasteners=0.19=pyhd8ed1ab_1 + - fiona=1.9.3=py310h4a685fe_0 + - flask=3.1.0=pyhff2d567_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=h77eed37_3 + - fontconfig=2.15.0=h765892d_1 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.56.0=py310h38315fa_0 + - fqdn=1.5.1=pyhd8ed1ab_1 + - freetype=2.12.1=hdaf720e_2 + - freexl=2.0.0=hf297d47_2 + - fsspec=2022.11.0=pyhd8ed1ab_0 + - gdal=3.6.4=py310haa9213b_22 + - geoana=0.5.0=py310h4856b71_4 + - geos=3.12.0=h1537add_0 + - geotiff=1.7.1=hcf4a93f_14 + - gettext=0.22.5=h5728263_3 + - gettext-tools=0.22.5=h5a7288d_3 + - giflib=5.2.2=h64bf75a_0 + - glib=2.78.1=h12be248_0 + - glib-tools=2.78.1=h12be248_0 + - gst-plugins-base=1.22.7=h001b923_0 + - gstreamer=1.22.7=hb4038d2_0 + - h11=0.14.0=pyhd8ed1ab_1 + - h2=4.2.0=pyhd8ed1ab_0 + - h5py=3.13.0=nompi_py310h2b0be38_100 + - hdf4=4.2.15=h5557f11_7 + - hdf5=1.14.3=nompi_hb2c4d47_109 + - hpack=4.1.0=pyhd8ed1ab_0 + - httpcore=1.0.7=pyh29332c3_1 + - httpx=0.28.1=pyhd8ed1ab_0 + - hyperframe=6.1.0=pyhd8ed1ab_0 + - icu=73.2=h63175ca_0 + - idna=3.10=pyhd8ed1ab_1 + - imagecodecs=2024.1.1=py310h32f22c9_2 + - imageio=2.37.0=pyhfb79c49_0 + - importlib-metadata=8.6.1=pyha770c72_0 + - importlib_metadata=8.6.1=hd8ed1ab_0 + - importlib_resources=6.5.2=pyhd8ed1ab_0 + - intel-openmp=2023.2.0=h57928b3_50497 + - ipyfilechooser=0.6.0=pyhd8ed1ab_0 + - ipykernel=6.29.5=pyh4bbf305_0 + - ipython=8.32.0=pyh9ab4c32_0 + - ipywidgets=8.1.5=pyhd8ed1ab_1 + - isoduration=20.11.0=pyhd8ed1ab_1 + - itsdangerous=2.2.0=pyhd8ed1ab_1 + - jedi=0.19.2=pyhd8ed1ab_1 + - jinja2=3.1.5=pyhd8ed1ab_0 + - joblib=1.4.2=pyhd8ed1ab_1 + - json5=0.10.0=pyhd8ed1ab_1 + - jsonpointer=3.0.0=py310h5588dad_1 + - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 + - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter_client=8.6.3=pyhd8ed1ab_1 + - jupyter_core=5.7.2=pyh5737063_1 + - jupyter_events=0.12.0=pyh29332c3_0 + - jupyter_server=2.15.0=pyhd8ed1ab_0 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab=4.3.5=pyhd8ed1ab_0 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - jupyterlab_server=2.27.3=pyhd8ed1ab_1 + - jupyterlab_widgets=3.0.13=pyhd8ed1ab_1 + - jxrlib=1.1=hcfcfb64_3 + - kealib=1.5.3=h6c43f9b_2 + - kiwisolver=1.4.7=py310hc19bc0b_0 + - krb5=1.21.3=hdf4eb48_0 + - lazy-loader=0.4=pyhd8ed1ab_2 + - lazy_loader=0.4=pyhd8ed1ab_2 + - lcms2=2.16=h67d730c_0 + - lerc=4.0.0=h63175ca_0 + - libabseil=20230802.1=cxx17_h63175ca_0 + - libaec=1.1.3=h63175ca_0 + - libasprintf=0.22.5=h5728263_3 + - libasprintf-devel=0.22.5=h5728263_3 + - libavif=1.0.1=h7a9aacb_3 + - libblas=3.9.0=20_win64_mkl + - libbrotlicommon=1.1.0=h2466b09_2 + - libbrotlidec=1.1.0=h2466b09_2 + - libbrotlienc=1.1.0=h2466b09_2 + - libcblas=3.9.0=20_win64_mkl + - libclang=15.0.7=default_h3a3e6c3_5 + - libclang13=15.0.7=default_hf64faad_5 + - libcrc32c=1.1.2=h0e60522_0 + - libcurl=8.12.1=h88aaa65_0 + - libdeflate=1.19=hcfcfb64_0 + - libdlf=0.3.0=pyhd8ed1ab_1 + - libexpat=2.6.4=he0c23c2_0 + - libffi=3.4.6=h537db12_0 + - libgcc=14.2.0=h1383e82_1 + - libgdal=3.6.4=h8c6448d_22 + - libgettextpo=0.22.5=h5728263_3 + - libgettextpo-devel=0.22.5=h5728263_3 + - libglib=2.78.1=he8f3873_0 + - libgomp=14.2.0=h1383e82_1 + - libgoogle-cloud=2.12.0=hc7cbac0_5 + - libgrpc=1.60.1=h0bf0bfa_0 + - libhwloc=2.11.2=default_ha69328c_1001 + - libiconv=1.17=hcfcfb64_2 + - libintl=0.22.5=h5728263_3 + - libintl-devel=0.22.5=h5728263_3 + - libjpeg-turbo=3.0.0=hcfcfb64_1 + - libkml=1.3.0=h538826c_1021 + - liblapack=3.9.0=20_win64_mkl + - liblzma=5.6.4=h2466b09_0 + - liblzma-devel=5.6.4=h2466b09_0 + - libnetcdf=4.9.2=nompi_h92078aa_114 + - libogg=1.3.5=h2466b09_0 + - libpng=1.6.47=had7236b_0 + - libpq=16.8=hddc24e7_0 + - libprotobuf=4.25.1=hb8276f3_2 + - libre2-11=2023.09.01=h8c5ae5e_1 + - librttopo=1.1.0=h92c5fdb_14 + - libsodium=1.0.20=hc70643c_0 + - libspatialite=5.0.1=hbf340bc_29 + - libsqlite=3.49.1=h67fdade_1 + - libssh2=1.11.1=he619c9f_0 + - libtiff=4.6.0=h6e2ebb7_2 + - libvorbis=1.3.7=h0e60522_0 + - libwebp=1.5.0=h3b0e114_0 + - libwebp-base=1.5.0=h3b0e114_0 + - libwinpthread=12.0.0.r4.gg4f2fc60ca=h57928b3_9 + - libxcb=1.17.0=h0e4246c_0 + - libxml2=2.13.5=he286e8c_1 + - libxslt=1.1.39=h3df6e99_0 + - libzip=1.11.2=h3135430_0 + - libzlib=1.3.1=h2466b09_2 + - libzopfli=1.0.3=h0e60522_0 + - llvmlite=0.44.0=py310h0288bfe_0 + - locket=1.0.0=pyhd8ed1ab_0 + - lz4-c=1.9.4=hcfcfb64_0 + - markupsafe=3.0.2=py310h38315fa_1 + - matplotlib=3.9.1=py310h5588dad_1 + - matplotlib-base=3.9.1=py310h37e0a56_2 + - matplotlib-inline=0.1.7=pyhd8ed1ab_1 + - minizip=4.0.7=h9fa1bad_3 + - mistune=3.1.2=pyhd8ed1ab_0 + - mkl=2023.2.0=h6a75c08_50497 + - msgpack-python=1.1.0=py310hc19bc0b_0 + - munch=4.0.0=pyhd8ed1ab_1 + - munkres=1.1.4=pyh9f0ad1d_0 + - nbclient=0.10.2=pyhd8ed1ab_0 + - nbconvert-core=7.16.6=pyh29332c3_0 + - nbformat=5.10.4=pyhd8ed1ab_1 + - nest-asyncio=1.6.0=pyhd8ed1ab_1 + - networkx=3.4.2=pyh267e887_2 + - notebook=7.3.2=pyhd8ed1ab_0 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - numba=0.61.0=py310h7793332_1 + - numcodecs=0.13.1=py310hb4db72f_0 + - numpy=1.26.4=py310hf667824_0 + - openjpeg=2.5.2=h3d672ee_0 + - openssl=3.4.1=ha4e3fda_0 + - overrides=7.7.0=pyhd8ed1ab_1 + - packaging=24.2=pyhd8ed1ab_2 + - pandas=2.2.3=py310hb4db72f_1 + - pandocfilters=1.5.0=pyhd8ed1ab_0 + - parso=0.8.4=pyhd8ed1ab_1 + - partd=1.4.2=pyhd8ed1ab_0 + - pcre2=10.40=h17e33f8_0 + - pickleshare=0.7.5=pyhd8ed1ab_1004 + - pillow=10.3.0=py310h3e38d90_1 + - pip=25.0.1=pyh8b19718_0 + - pixman=0.44.2=had0cd8c_0 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 + - platformdirs=4.3.6=pyhd8ed1ab_1 + - plotly=5.19.0=pyhd8ed1ab_0 + - ply=3.11=pyhd8ed1ab_3 + - poppler=23.10.0=hc2f3c52_0 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=16.8=h38e16cc_0 + - proj=9.3.0=he13c7e8_2 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.50=pyha770c72_0 + - properties=0.6.1=py_0 + - psutil=6.1.1=py310ha8f682b_0 + - pthread-stubs=0.4=h0e40799_1002 + - pure_eval=0.2.3=pyhd8ed1ab_1 + - pycparser=2.22=pyh29332c3_1 + - pydantic=2.10.6=pyh3cfb1c2_0 + - pydantic-core=2.27.2=py310hc226416_0 + - pydiso=0.1.2=py310h5da8fee_0 + - pygments=2.19.1=pyhd8ed1ab_0 + - pyparsing=3.2.1=pyhd8ed1ab_0 + - pyqt=5.15.9=py310h1fd54f2_5 + - pyqt5-sip=12.12.2=py310h00ffb61_5 + - pyqtwebengine=5.15.9=py310he49db7d_5 + - pyside2=5.15.8=py310h1e56762_4 + - pysocks=1.7.1=pyh09c184e_7 + - python=3.10.16=h37870fc_1_cpython + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python-tzdata=2023.4=pyhd8ed1ab_0 + - python_abi=3.10=5_cp310 + - pytz=2024.1=pyhd8ed1ab_0 + - pywavelets=1.8.0=py310hb0944cc_0 + - pywin32=307=py310h9e98ed7_3 + - pywinpty=2.0.15=py310h9e98ed7_0 + - pyyaml=6.0.2=py310h38315fa_2 + - pyzmq=26.2.1=py310h656833d_0 + - qhull=2020.2=hc790b64_5 + - qt-main=5.15.8=h9e85ed6_17 + - qt-webengine=5.15.8=h4bf5c4e_4 + - rav1e=0.6.6=h975169c_2 + - re2=2023.09.01=hd3b24a8_1 + - referencing=0.36.2=pyh29332c3_0 + - requests=2.32.3=pyhd8ed1ab_1 + - retrying=1.3.4=pyhd8ed1ab_0 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - rpds-py=0.22.3=py310hc226416_0 + - scikit-image=0.20.0=py310h1c4a608_1 + - scikit-learn=1.4.2=py310hf2a6c47_1 + - scipy=1.14.1=py310hbd0dde3_2 + - send2trash=1.8.3=pyh5737063_1 + - setuptools=75.8.0=pyhff2d567_0 + - shapely=2.0.2=py310h839b4a8_0 + - sip=6.7.12=py310h00ffb61_0 + - six=1.17.0=pyhd8ed1ab_0 + - snappy=1.1.10=hfb803bf_1 + - sniffio=1.3.1=pyhd8ed1ab_1 + - sortedcontainers=2.4.0=pyhd8ed1ab_1 + - soupsieve=2.5=pyhd8ed1ab_1 + - sqlite=3.49.1=h2466b09_1 + - stack_data=0.6.3=pyhd8ed1ab_1 + - svt-av1=1.7.0=h63175ca_0 + - tbb=2021.13.0=h62715c5_1 + - tblib=3.0.0=pyhd8ed1ab_1 + - tenacity=9.0.0=pyhd8ed1ab_1 + - terminado=0.18.1=pyh5737063_0 + - threadpoolctl=3.5.0=pyhc1e730c_0 + - tifffile=2024.12.12=pyhd8ed1ab_0 + - tiledb=2.16.3=hbf04793_3 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - tk=8.6.13=h5226925_1 + - toml=0.10.2=pyhd8ed1ab_1 + - tomli=2.2.1=pyhd8ed1ab_1 + - toolz=1.0.0=pyhd8ed1ab_1 + - tornado=6.4.2=py310ha8f682b_0 + - tqdm=4.67.1=pyhd8ed1ab_1 + - traitlets=5.14.3=pyhd8ed1ab_1 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.12.2=hd8ed1ab_1 + - typing_extensions=4.12.2=pyha770c72_1 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - tzdata=2025a=h78e105d_0 + - ucrt=10.0.22621.0=h57928b3_1 + - unicodedata2=16.0.0=py310ha8f682b_0 + - uri-template=1.3.0=pyhd8ed1ab_1 + - uriparser=0.9.8=h5a68840_0 + - urllib3=2.3.0=pyhd8ed1ab_0 + - vc=14.3=h5fd82a7_24 + - vc14_runtime=14.42.34433=h6356254_24 + - vectormath=0.2.2=py_0 + - vs2015_runtime=14.42.34433=hfef2bbc_24 + - wcwidth=0.2.13=pyhd8ed1ab_1 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - werkzeug=3.1.3=pyhd8ed1ab_1 + - wheel=0.45.1=pyhd8ed1ab_1 + - widgetsnbextension=4.0.13=pyhd8ed1ab_1 + - win_inet_pton=1.1.0=pyh7428d3b_8 + - winpty=0.4.3=4 + - xerces-c=3.2.5=he0c23c2_2 + - xorg-libxau=1.0.12=h0e40799_0 + - xorg-libxdmcp=1.1.5=h0e40799_0 + - xz=5.6.4=h208afaa_0 + - xz-tools=5.6.4=h2466b09_0 + - yaml=0.2.5=h8ffe710_2 + - zarr=2.14.2=pyhd8ed1ab_0 + - zeromq=4.3.5=ha9f60a1_7 + - zfp=1.0.1=he0c23c2_2 + - zict=3.0.0=pyhd8ed1ab_1 + - zipp=3.21.0=pyhd8ed1ab_1 + - zlib=1.3.1=h2466b09_2 + - zlib-ng=2.0.7=hcfcfb64_0 + - zstandard=0.23.0=py310he5e10e1_1 + - zstd=1.5.6=h0ea2cb4_0 + - pip: + - curve-apps == 0.2.0 --hash=sha256:3142d0f6b212339c022ca6e9f482b4a30b3c48c85efd4f3843375cd8bdfac9c2 + - geoapps-utils == 0.4.0 --hash=sha256:22baa6f49c09e02ab65efd07fbab1421982f17aefc98749febf858da2b47d6ef + - geoh5py == 0.10.1 --hash=sha256:6ad70a64f5d5ae25c84c1d75f8142a0b34204027041a3edaf1b036fa9e571cf2 + - mira-simpeg == 0.21.2.1 --hash=sha256:82451148ed720078308f5c3273fd78ce83167a214a0164c9956af2865315ab37 + - octree-creation-app == 0.2.0 --hash=sha256:6e1ccce3cbbbb1eb7923c6c92dbc000feca2ffc6b163025f0f33e8245fcabbac + - param-sweeps == 0.2.0 --hash=sha256:f168eabf4f665ec84abd22ae6f02d631692103f86a7769847533b47a1e42b074 + - peak-finder-app == 0.2.0 --hash=sha256:ffdf641c8bdb5858b2c4f28f2ff6267e277fd14ad95e70862377020d7823d4c8 + - pymatsolver == 0.2.0 --hash=sha256:df9e0444f3c7fadf57b226d7d90b7be1dea9e24718575b458ba50429736d6c45 + - simpeg-archive == 0.11.0.1 --hash=sha256:17cc5ee70b65eeece1ab1f09b54d79c5bfa90a4c4863cc6c517bf97fbaa5a3f6 + - simpeg-drivers == 0.2.0 --hash=sha256:9976315d49833ca201504c1e1c7ad29194a3f9cf478ebf803e8b9f61c3acf789 + +variables: + KMP_WARNINGS: 0 diff --git a/geoapps-assets/FlinFlon.geoh5 b/geoapps-assets/FlinFlon.geoh5 index 7fd87b8b5..19871003e 100644 --- a/geoapps-assets/FlinFlon.geoh5 +++ b/geoapps-assets/FlinFlon.geoh5 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d4be4b45c4b8b2ecd375834ca364f87a0b7aed40f2dfcd82ffdd5bc34c45724 -size 23186054 +oid sha256:f7bf49aa839c2914361abcb8803628ed863efe7508c832634a0a1d37375bc624 +size 21865091 diff --git a/geoapps-assets/FlinFlon_dcip.geoh5 b/geoapps-assets/FlinFlon_dcip.geoh5 index ae14309ed..1b7d0dd2c 100644 --- a/geoapps-assets/FlinFlon_dcip.geoh5 +++ b/geoapps-assets/FlinFlon_dcip.geoh5 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ab8fe351e9aba06dbe7149307ab5169b6c1f6d08af27c2f8b294451ba6a7611 -size 2438535 +oid sha256:2eaf4381a912711a719a41be363585bf01ca9eeb63d3c7e62557d316063883fa +size 2666172 diff --git a/geoapps-assets/__init__.py b/geoapps-assets/__init__.py index b9d69bf1d..c006bae4f 100644 --- a/geoapps-assets/__init__.py +++ b/geoapps-assets/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2023 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps-assets/uijson/block_model_creation.ui.json b/geoapps-assets/uijson/block_model_creation.ui.json index a15d2faa9..d9ec5e45e 100644 --- a/geoapps-assets/uijson/block_model_creation.ui.json +++ b/geoapps-assets/uijson/block_model_creation.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Block Model Creation", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.block_model_creation.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "main": true, "meshType": [ diff --git a/geoapps-assets/uijson/cluster.ui.json b/geoapps-assets/uijson/cluster.ui.json index 3af6376b5..289caf883 100644 --- a/geoapps-assets/uijson/cluster.ui.json +++ b/geoapps-assets/uijson/cluster.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Clustering", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.clustering.application", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "group": "Data Selection", "label": "Object", diff --git a/geoapps-assets/uijson/contours.ui.json b/geoapps-assets/uijson/contours.ui.json index 4d56a19d4..122efe69a 100644 --- a/geoapps-assets/uijson/contours.ui.json +++ b/geoapps-assets/uijson/contours.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Create Contours", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.contours.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "meshType": [ "{2e814779-c35f-4da0-ad6a-39a6912361f9}", diff --git a/geoapps-assets/uijson/edge_detection.ui.json b/geoapps-assets/uijson/edge_detection.ui.json index 93c356999..02bf1a9c3 100644 --- a/geoapps-assets/uijson/edge_detection.ui.json +++ b/geoapps-assets/uijson/edge_detection.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Edge Detection", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.edge_detection.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "group": "Data Selection", "meshType": [ diff --git a/geoapps-assets/uijson/grid_creation.ui.json b/geoapps-assets/uijson/grid_creation.ui.json index a4b106e4a..320d162d8 100644 --- a/geoapps-assets/uijson/grid_creation.ui.json +++ b/geoapps-assets/uijson/grid_creation.ui.json @@ -1,15 +1,15 @@ { "title": "Block Model Creation", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.grid_creation.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", "live_link": false, diff --git a/geoapps-assets/uijson/interpolation.ui.json b/geoapps-assets/uijson/interpolation.ui.json index 2cab6ac02..bfb75706c 100644 --- a/geoapps-assets/uijson/interpolation.ui.json +++ b/geoapps-assets/uijson/interpolation.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Data Transfer", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.interpolation.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "meshType": [ "{2e814779-c35f-4da0-ad6a-39a6912361f9}", diff --git a/geoapps-assets/uijson/inversion_mesh.ui.json b/geoapps-assets/uijson/inversion_mesh.ui.json index 29f19f8ea..403427ce8 100644 --- a/geoapps-assets/uijson/inversion_mesh.ui.json +++ b/geoapps-assets/uijson/inversion_mesh.ui.json @@ -1,6 +1,10 @@ { "title": "Inversion mesh creator", + "conda_environment": "geoapps", + "run_command": "geoapps.octree_creation.application", "geoh5": "", + "monitoring_directory": "", + "workspace_geoh5": "", "objects": { "enabled": true, "group": "Mesh", @@ -134,15 +138,11 @@ "label": "Name:", "value": "Inversion Mesh" }, - "run_command": "geoapps.octree_creation.application", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "workspace_geoh5": "", - "conda_environment": "geoapps", "conda_environment_boolean": false } diff --git a/geoapps-assets/uijson/iso_surfaces.ui.json b/geoapps-assets/uijson/iso_surfaces.ui.json index a697d6a4d..9aa110025 100644 --- a/geoapps-assets/uijson/iso_surfaces.ui.json +++ b/geoapps-assets/uijson/iso_surfaces.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Create Iso Surfaces", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.iso_surfaces.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "meshType": [ "{2e814779-c35f-4da0-ad6a-39a6912361f9}", diff --git a/geoapps-assets/uijson/joint_single.ui.json b/geoapps-assets/uijson/joint_single.ui.json deleted file mode 100644 index 0180bd346..000000000 --- a/geoapps-assets/uijson/joint_single.ui.json +++ /dev/null @@ -1,504 +0,0 @@ -{ - "title": "SimPEG Joint Inversion - Single Property", - "inversion_type": "tipper", - "geoh5": "", - "forward_only": false, - "topography_object": { - "main": true, - "group": "Topography", - "label": "Topography", - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{48F5054A-1C5C-4CA4-9048-80F36DC60A06}", - "{b020a277-90e2-4cd7-84d6-612ee3f25051}" - ], - "value": "" - }, - "topography": { - "association": [ - "Vertex", - "Cell" - ], - "dataType": "Float", - "group": "Topography", - "main": true, - "optional": true, - "enabled": false, - "isValue": true, - "label": "Elevation adjustment", - "tooltip": "Adjust elevation given from topography object", - "parent": "topography_object", - "property": "", - "value": 0.0 - }, - "group_a": { - "main": true, - "group": "Data", - "label": "Group A", - "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", - "value": "" - }, - "group_b": { - "main": true, - "group": "Data", - "label": "Group B", - "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", - "value": "" - }, - "group_c": { - "main": true, - "group": "Data", - "label": "Group C", - "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", - "optional": true, - "enabled": false, - "value": "" - }, - "resolution": { - "min": 0.0, - "group": "Data pre-processing", - "optional": true, - "enabled": false, - "label": "Downsampling resolution", - "value": 0.0 - }, - "z_from_topo": { - "group": "Data pre-processing", - "label": "Take z from topography", - "tooltip": "Sets survey elevation to topography before any offsets are applied.", - "value": false - }, - "gps_receivers_offset": "", - "mesh": { - "group": "Mesh and Models", - "main": true, - "label": "Mesh", - "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", - "value": "" - }, - "background_conductivity": { - "association": [ - "Cell", - "Vertex" - ], - "dataType": "Float", - "group": "Mesh and Models", - "main": true, - "isValue": true, - "parent": "mesh", - "label": "Background Conductivity (S/m)", - "property": "", - "value": 0.001 - }, - "starting_model": { - "association": [ - "Cell", - "Vertex" - ], - "dataType": "Float", - "group": "Mesh and Models", - "main": true, - "isValue": true, - "parent": "mesh", - "label": "Initial Conductivity (S/m)", - "property": "", - "value": 0.001 - }, - "reference_model": { - "association": [ - "Cell", - "Vertex" - ], - "dataType": "Float", - "main": true, - "group": "Mesh and Models", - "isValue": true, - "parent": "mesh", - "label": "Reference Conductivity (S/m)", - "property": "", - "value": 0.001 - }, - "lower_bound": { - "association": [ - "Cell", - "Vertex" - ], - "main": true, - "dataType": "Float", - "group": "Mesh and Models", - "isValue": true, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": "", - "optional": true, - "value": 1e-08, - "enabled": false - }, - "upper_bound": { - "association": [ - "Cell", - "Vertex" - ], - "main": true, - "dataType": "Float", - "group": "Mesh and Models", - "isValue": true, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": "", - "optional": true, - "value": 100.0, - "enabled": false - }, - "output_tile_files": false, - "ignore_values": { - "group": "Data pre-processing", - "optional": true, - "enabled": false, - "label": "Values to ignore", - "value": "" - }, - "detrend_order": { - "min": 0, - "group": "Data pre-processing", - "enabled": false, - "dependencyType": "enabled", - "label": "Detrend order", - "optional": true, - "value": 0 - }, - "detrend_type": { - "choiceList": [ - "all", - "perimeter" - ], - "group": "Data pre-processing", - "dependency": "detrend_order", - "dependencyType": "enabled", - "enabled": false, - "optional": true, - "label": "Detrend type", - "value": "all" - }, - "window_center_x": { - "group": "Data window", - "enabled": false, - "groupOptional": true, - "label": "Window center easting", - "value": 0.0 - }, - "window_center_y": { - "group": "Data window", - "enabled": false, - "label": "Window center northing", - "value": 0.0 - }, - "window_width": { - "min": 0.0, - "group": "Data window", - "enabled": false, - "label": "Window width", - "value": 0.0 - }, - "window_height": { - "min": 0.0, - "group": "Data window", - "enabled": false, - "label": "Window height", - "value": 0.0 - }, - "window_azimuth": { - "min": -180, - "max": 180, - "group": "Data window", - "enabled": false, - "label": "Window azimuth", - "value": 0.0 - }, - "inversion_style": "voxel", - "chi_factor": { - "min": 0.0, - "max": 1.0, - "group": "Optimization", - "label": "Chi factor", - "value": 1.0, - "enabled": true - }, - "initial_beta_ratio": { - "min": 0.0, - "precision": 2, - "group": "Optimization", - "optional": true, - "enabled": true, - "label": "Initial beta ratio", - "value": 100.0 - }, - "initial_beta": { - "min": 0.0, - "group": "Optimization", - "enabled": false, - "dependency": "initial_beta_ratio", - "dependencyType": "disabled", - "label": "Initial beta", - "value": 1.0 - }, - "coolingRate": { - "group": "Optimization", - "label": "Iterations per beta", - "value": 2, - "min": 1 - }, - "coolingFactor": { - "group": "Optimization", - "label": "Beta cooling factor", - "tooltip": "Each beta cooling step will be calculated by dividing the current beta by this factor.", - "value": 2.0, - "min": 1.0 - }, - "max_global_iterations": { - "min": 1, - "lineEdit": false, - "group": "Optimization", - "label": "Maximum iterations", - "tooltip": "Number of L2 and IRLS iterations combined", - "value": 50, - "enabled": true - }, - "max_line_search_iterations": { - "group": "Optimization", - "label": "Maximum number of line searches", - "value": 20, - "min": 1, - "enabled": true - }, - "max_cg_iterations": { - "min": 0, - "group": "Optimization", - "label": "Maximum CG iterations", - "value": 30, - "enabled": true - }, - "tol_cg": { - "min": 0, - "group": "Optimization", - "label": "Conjugate gradient tolerance", - "value": 0.0001, - "enabled": true - }, - "alpha_s": { - "min": 0.0, - "group": "Regularization", - "label": "Smallness weight", - "value": 1.0, - "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model", - "enabled": true - }, - "alpha_x": { - "min": 0.0, - "group": "Regularization", - "label": "X-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness", - "value": 1.0, - "enabled": true - }, - "alpha_y": { - "min": 0.0, - "group": "Regularization", - "label": "Y-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness", - "value": 1.0, - "enabled": true - }, - "alpha_z": { - "min": 0.0, - "group": "Regularization", - "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", - "value": 1.0, - "enabled": true - }, - "s_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "Smallness norm", - "value": 0.0, - "precision": 2, - "lineEdit": false, - "enabled": true - }, - "x_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "X-smoothness norm", - "value": 2.0, - "precision": 2, - "lineEdit": false, - "enabled": true - }, - "y_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "Y-smoothness norm", - "value": 2.0, - "precision": 2, - "lineEdit": false, - "enabled": true - }, - "z_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "Z-smoothness norm", - "value": 2.0, - "precision": 2, - "lineEdit": false, - "enabled": true - }, - "max_irls_iterations": { - "min": 0, - "group": "Update IRLS directive", - "label": "Maximum number of IRLS iterations", - "tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems", - "value": 25, - "enabled": true - }, - "starting_chi_factor": { - "group": "Update IRLS directive", - "label": "IRLS start chi factor", - "optional": true, - "enabled": false, - "value": 1.0, - "tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin." - }, - "f_min_change": { - "group": "Update IRLS directive", - "label": "f min change", - "value": 0.0001, - "min": 1e-06 - }, - "beta_tol": { - "group": "Update IRLS directive", - "label": "Beta tolerance", - "value": 0.5, - "min": 0.0001 - }, - "prctile": { - "group": "Update IRLS directive", - "label": "Percentile", - "value": 95, - "max": 100, - "min": 5 - }, - "coolEps_q": { - "group": "Update IRLS directive", - "label": "Cool epsilon q", - "value": true - }, - "coolEpsFact": { - "group": "Update IRLS directive", - "label": "Cool epsilon fact", - "value": 1.2 - }, - "beta_search": { - "group": "Update IRLS directive", - "label": "Perform beta search", - "value": false - }, - "gradient_type": { - "choiceList": [ - "total", - "components" - ], - "group": "Regularization", - "label": "Gradient type", - "value": "total" - }, - "sens_wts_threshold": { - "group": "Update sensitivity weights directive", - "tooltip": "Update sensitivity weight threshold", - "label": "Threshold (%)", - "value": 0.001, - "max": 1.0, - "min": 0.0, - "precision": 5, - "lineEdit": false - }, - "every_iteration_bool": { - "group": "Update sensitivity weights directive", - "tooltip": "Update weights at every iteration", - "label": "Every iteration", - "value": false - }, - "parallelized": { - "group": "Compute", - "label": "Use parallelization", - "value": true - }, - "n_cpu": { - "min": 1, - "group": "Compute", - "dependency": "parallelized", - "dependencyType": "enabled", - "optional": true, - "enabled": false, - "label": "Number of cpu", - "value": 1 - }, - "tile_spatial": { - "group": "Compute", - "label": "Number of tiles", - "parent": "data_object", - "isValue": true, - "property": "", - "value": 1, - "min": 1, - "max": 1000 - }, - "max_ram": "", - "store_sensitivities": { - "choiceList": [ - "disk", - "ram" - ], - "group": "Compute", - "label": "Storage device", - "value": "disk" - }, - "max_chunk_size": { - "min": 0, - "group": "Compute", - "optional": true, - "enabled": true, - "label": "Maximum chunk size", - "value": 128 - }, - "chunk_by_rows": { - "group": "Compute", - "label": "Chunk by rows", - "value": true - }, - "out_group": { - "label": "Results group name", - "value": "TipperInversion" - }, - "monitoring_directory": "", - "workspace_geoh5": "", - "run_command": "geoapps.inversion.driver", - "run_command_boolean": { - "value": false, - "label": "Run python module ", - "tooltip": "Warning: launches process to run python model on save", - "main": true - }, - "conda_environment": "geoapps", - "distributed_workers": "", - "txz_real_channel_bool": false, - "txz_imag_channel_bool": false, - "tyz_real_channel_bool": false, - "tyz_imag_channel_bool": false -} diff --git a/geoapps-assets/uijson/octree_mesh.ui.json b/geoapps-assets/uijson/octree_mesh.ui.json index 4a32ab148..624411ee3 100644 --- a/geoapps-assets/uijson/octree_mesh.ui.json +++ b/geoapps-assets/uijson/octree_mesh.ui.json @@ -1,18 +1,19 @@ { + "version": "0.11.0-alpha.1", "title": "octree Mesh Creator", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.octree_creation.driver", + "geoh5": "", + "monitoring_directory": "", + "workspace_geoh5": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "enabled": true, "group": "1- Core", @@ -83,7 +84,6 @@ "main": true, "value": false }, - "workspace_geoh5": "", "Refinement A object": { "groupOptional": true, "enabled": true, diff --git a/geoapps-assets/uijson/peak_finder.ui.json b/geoapps-assets/uijson/peak_finder.ui.json index 7d69e403e..0bf4fcc80 100644 --- a/geoapps-assets/uijson/peak_finder.ui.json +++ b/geoapps-assets/uijson/peak_finder.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Peak Finder Parameters", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.peak_finder.driver", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "tem_checkbox": { "main": true, "label": "TEM type", diff --git a/geoapps-assets/uijson/scatter.ui.json b/geoapps-assets/uijson/scatter.ui.json index d01962553..add30a9fc 100644 --- a/geoapps-assets/uijson/scatter.ui.json +++ b/geoapps-assets/uijson/scatter.ui.json @@ -1,18 +1,18 @@ { + "version": "0.11.0-alpha.1", "title": "Scatter Plot", - "geoh5": "", + "conda_environment": "geoapps", "run_command": "geoapps.scatter_plot.application", + "geoh5": "", + "monitoring_directory": "", "run_command_boolean": { "value": false, "label": "Run python module ", "tooltip": "Warning: launches process to run python model on save", "main": true }, - "monitoring_directory": "", - "conda_environment": "geoapps", "conda_environment_boolean": false, "workspace": "", - "version": "0.11.0-alpha.1", "objects": { "group": "Data Selection", "label": "Object", diff --git a/geoapps/__init__.py b/geoapps/__init__.py index aeb5170e8..470025813 100644 --- a/geoapps/__init__.py +++ b/geoapps/__init__.py @@ -1,11 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -__version__ = "0.11.1-post.2" +__version__ = "0.12.0" import os import warnings diff --git a/geoapps/base/__init__.py b/geoapps/base/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/base/__init__.py +++ b/geoapps/base/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/base/application.py b/geoapps/base/application.py index aa378b002..fc5982fb1 100644 --- a/geoapps/base/application.py +++ b/geoapps/base/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -13,22 +15,24 @@ from pathlib import Path from shutil import copyfile +from geoapps_utils.driver.params import BaseParams from geoh5py.groups import Group from geoh5py.objects import ObjectBase from geoh5py.shared.utils import ( dict_mapper, entity2uuid, fetch_active_workspace, + list2str, str2uuid, ) from geoh5py.ui_json import InputFile -from geoh5py.ui_json.utils import list2str, monitored_directory_copy +from geoh5py.ui_json.utils import monitored_directory_copy from geoh5py.workspace import Workspace from traitlets import TraitError -from geoapps.driver_base.params import BaseParams from geoapps.utils import warn_module_not_found + with warn_module_not_found(): from ipyfilechooser import FileChooser @@ -61,6 +65,7 @@ class BaseApplication: _figure = None _refresh = None _params: BaseParams | None = None + _param_class: type[BaseParams] | None = None _defaults: dict | None = None plot_result = False @@ -139,7 +144,7 @@ def __populate__(self, **kwargs): if isinstance(widget, Text): value = list2str(value) - setattr(widget, "value", value) + widget.value = value if hasattr(widget, "style"): widget.style = {"description_width": "initial"} @@ -174,8 +179,8 @@ def file_browser_change(self, _): if isinstance(self.geoh5, Workspace): self.geoh5.close() - if extension == ".json" and getattr(self, "_param_class", None) is not None: - self.params = getattr(self, "_param_class")( + if extension == ".json" and self._param_class is not None: + self.params = self._param_class.build( InputFile.read_ui_json(self.file_browser.selected) ) self.refresh.value = False @@ -217,7 +222,7 @@ def live_link_choice(self, _): ) if getattr(self, "_params", None) is not None: - setattr(self.params, "monitoring_directory", self.monitoring_directory) + self.params.monitoring_directory = self.monitoring_directory self.monitoring_panel.children[0].value = "Monitoring path:" else: self.monitoring_panel.children[0].value = "Save to:" @@ -381,9 +386,9 @@ def params(self) -> BaseParams: @params.setter def params(self, params: BaseParams): - assert isinstance( - params, BaseParams - ), f"Input parameters must be an instance of {BaseParams}" + assert isinstance(params, BaseParams), ( + f"Input parameters must be an instance of {BaseParams}" + ) self._params = params @@ -424,9 +429,9 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) @property @@ -463,15 +468,54 @@ def create_copy(self, _): self.h5file = value def trigger_click(self, _): + new_params = self.collect_parameter_values() + new_params.write_input_file(name=new_params.ga_group_name) + self.run(new_params) + + if self.live_link.value: + print("Live link active. Check your ANALYST session for new mesh.") + + def collect_parameter_values(self): + param_dict = {} for key in self.__dict__: try: - if isinstance(getattr(self, key), Widget): - setattr(self.params, key, getattr(self, key).value) + if isinstance(getattr(self, key), Widget) and hasattr(self.params, key): + value = getattr(self, key).value + if key[0] == "_": + key = key[1:] + + if ( + isinstance(value, uuid.UUID) + and self.workspace.get_entity(value)[0] is not None + ): + value = self.workspace.get_entity(value)[0] + + param_dict[key] = value + except AttributeError: continue - self.params.write_input_file(name=self.params.ga_group_name) - self.run(self.params) + temp_geoh5 = f"{self.ga_group_name.value}_{time.time():.0f}.geoh5" + ws, self.live_link.value = BaseApplication.get_output_workspace( + self.live_link.value, self.export_directory.selected_path, temp_geoh5 + ) + with ws as new_workspace: + param_dict["geoh5"] = new_workspace + + with fetch_active_workspace(self.workspace): + for key, value in param_dict.items(): + if isinstance(value, ObjectBase): + obj = new_workspace.get_entity(value.uid)[0] + if obj is None: + obj = value.copy(parent=new_workspace, copy_children=True) + param_dict[key] = obj + + if self.live_link.value: + param_dict["monitoring_directory"] = self.monitoring_directory + + new_params = type(self.params)(**param_dict) + + return new_params @classmethod def run(cls, params: BaseParams): @@ -516,6 +560,7 @@ def get_param_dict(self): except AttributeError: continue + return param_dict diff --git a/geoapps/base/dash_application.py b/geoapps/base/dash_application.py index fdbef6ef5..9d9f4d828 100644 --- a/geoapps/base/dash_application.py +++ b/geoapps/base/dash_application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -26,6 +28,7 @@ from dash import Dash, callback_context, no_update from dash.dependencies import Input, Output, State from flask import Flask +from geoapps_utils.driver.params import BaseParams from geoh5py.data import Data from geoh5py.objects import ObjectBase from geoh5py.shared import Entity @@ -35,7 +38,6 @@ from PySide2 import QtCore, QtWebEngineWidgets, QtWidgets # pylint: disable=E0401 from geoapps.base.layout import object_selection_layout -from geoapps.driver_base.params import BaseParams class BaseDashApplication: @@ -197,7 +199,9 @@ def get_params_dict(self, update_dict: dict) -> dict: # Loop through self.params and update self.params with locals_dict. for key in self.params.to_dict(): if key in update_dict: - if bool in validations[key]["types"] and type(update_dict[key]) == list: + if ( + bool in validations[key]["types"] and type(update_dict[key]) == list # noqa: E721 + ): # Convert from dash component checklist to bool if not update_dict[key]: output_dict[key] = False @@ -206,7 +210,7 @@ def get_params_dict(self, update_dict: dict) -> dict: elif ( float in validations[key]["types"] and int not in validations[key]["types"] - and type(update_dict[key]) == int + and type(update_dict[key]) == int # noqa: E721 ): # Checking for values that Dash has given as int when they should be floats. output_dict[key] = float(update_dict[key]) @@ -314,9 +318,9 @@ def params(self) -> BaseParams: @params.setter def params(self, params: BaseParams): - assert isinstance( - params, BaseParams - ), f"Input parameters must be an instance of {BaseParams}" + assert isinstance(params, BaseParams), ( + f"Input parameters must be an instance of {BaseParams}" + ) self._params = params @@ -371,7 +375,7 @@ def __init__( } self.workspace = self.params.geoh5 - external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"] + external_stylesheets = None server = Flask(__name__) self.app = Dash( server=server, @@ -531,13 +535,20 @@ def make_qt_window(app_name: str, port: int): :param app_name: App name to display as Qt window title. :param port: Port where the dash app has been launched. """ - app = QtWidgets.QApplication(sys.argv) - browser = QtWebEngineWidgets.QWebEngineView() + app = QtWidgets.QApplication(sys.argv) # pylint: disable=c-extension-no-member + browser = ( + QtWebEngineWidgets.QWebEngineView() # pylint: disable=c-extension-no-member + ) browser.setWindowTitle(app_name) - browser.load(QtCore.QUrl("http://127.0.0.1:" + str(port))) + localhost_url = QtCore.QUrl( # pylint: disable=c-extension-no-member + "http://127.0.0.1:" + str(port) + ) + browser.load(localhost_url) # Brings Qt window to the front - browser.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) + browser.setWindowFlags( + QtCore.Qt.WindowStaysOnTopHint # pylint: disable=c-extension-no-member + ) # Setting window size browser.resize(1200, 800) browser.show() @@ -657,7 +668,7 @@ def param_class(self) -> type[BaseParams]: def param_class(self, val): if not issubclass(val, BaseParams): raise TypeError( - "Value for attribute `param_class` should be a subclass of :obj:`geoapps.driver_base.BaseParams`" + "Value for attribute `param_class` should be a subclass of :obj:`simpeg_drivers.params.BaseParams`" ) self._param_class = val diff --git a/geoapps/base/layout.py b/geoapps/base/layout.py index d3a4ebe44..a1646b524 100644 --- a/geoapps/base/layout.py +++ b/geoapps/base/layout.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from dash import dcc, html + workspace_layout = html.Div( [ dcc.Upload( diff --git a/geoapps/base/plot.py b/geoapps/base/plot.py index babba4f41..e8343f137 100644 --- a/geoapps/base/plot.py +++ b/geoapps/base/plot.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -19,6 +21,7 @@ from geoapps.utils import warn_module_not_found from geoapps.utils.plotting import plot_plan_data_selection + with warn_module_not_found(): from matplotlib import pyplot as plt diff --git a/geoapps/base/selection.py b/geoapps/base/selection.py index 16e23ce08..6c2ef52c4 100644 --- a/geoapps/base/selection.py +++ b/geoapps/base/selection.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -18,6 +20,7 @@ from geoapps.utils.list import find_value from geoapps.utils.workspace import sorted_children_dict + with warn_module_not_found(): import ipywidgets as widgets from ipywidgets import Dropdown, FloatText, SelectMultiple, VBox @@ -87,9 +90,9 @@ def data(self) -> Dropdown | SelectMultiple: @data.setter def data(self, value): - assert isinstance( - value, (Dropdown, SelectMultiple) - ), f"'Objects' must be of type {Dropdown} or {SelectMultiple}" + assert isinstance(value, (Dropdown, SelectMultiple)), ( + f"'Objects' must be of type {Dropdown} or {SelectMultiple}" + ) self._data = value @property @@ -141,9 +144,9 @@ def object_types(self, entity_types): entity_types = tuple(entity_types) for entity_type in entity_types: - assert issubclass( - entity_type, ObjectBase - ), f"Provided object_types must be instances of {ObjectBase}" + assert issubclass(entity_type, ObjectBase), ( + f"Provided object_types must be instances of {ObjectBase}" + ) self._object_types = entity_types @@ -163,9 +166,9 @@ def exclusion_types(self, entity_types): entity_types = tuple(entity_types) for entity_type in entity_types: - assert issubclass( - entity_type, ObjectBase - ), f"Provided exclusion_types must be instances of {ObjectBase}" + assert issubclass(entity_type, ObjectBase), ( + f"Provided exclusion_types must be instances of {ObjectBase}" + ) self._exclusion_types = tuple(entity_types) @@ -188,9 +191,9 @@ def find_label(self, values): values = [values] for value in values: - assert isinstance( - value, str - ), f"Labels to find must be strings. Value {value} of type {type(value)} provided" + assert isinstance(value, str), ( + f"Labels to find must be strings. Value {value} of type {type(value)} provided" + ) self._find_label = values @property @@ -231,9 +234,9 @@ def workspace(self) -> Workspace | None: @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) # Refresh the list of objects @@ -271,6 +274,31 @@ def get_selected_entities(self) -> tuple: else: return None, None + def get_data_list(self, add_groups: bool | str, add_xyz: bool) -> list[list]: + """Get a list of UUIDs and names of data associated with the object.""" + obj: ObjectBase | None = self._workspace.get_entity(self.objects.value)[0] + + options = [["", None]] + + if (add_groups or add_groups == "only") and obj.property_groups: + options = ( + options + + [["-- Groups --", None]] + + [[p_g.name, p_g.uid] for p_g in obj.property_groups] + ) + + if add_groups != "only": + options += [["--- Channels ---", None]] + + children = sorted_children_dict(obj) + excl = ["visual parameter"] + options += [[k, v] for k, v in children.items() if k.lower() not in excl] + + if add_xyz: + options += [["X", "X"], ["Y", "Y"], ["Z", "Z"]] + + return options + def update_data_list(self, _): refresh = self.refresh.value self.refresh.value = False @@ -281,27 +309,7 @@ def update_data_list(self, _): self.refresh.value = refresh return - options = [["", None]] - - if (self.add_groups or self.add_groups == "only") and obj.property_groups: - options = ( - options - + [["-- Groups --", None]] - + [[p_g.name, p_g.uid] for p_g in obj.property_groups] - ) - - if self.add_groups != "only": - options += [["--- Channels ---", None]] - - children = sorted_children_dict(obj) - excl = ["visual parameter"] - options += [ - [k, v] for k, v in children.items() if k.lower() not in excl - ] - - if self.add_xyz: - options += [["X", "X"], ["Y", "Y"], ["Z", "Z"]] - + options = self.get_data_list(self.add_groups, self.add_xyz) value = self.data.value self.data.options = options @@ -451,9 +459,9 @@ def multiple_lines(self): @multiple_lines.setter def multiple_lines(self, value): - assert isinstance( - value, bool - ), f"'multiple_lines' property must be of type {bool}" + assert isinstance(value, bool), ( + f"'multiple_lines' property must be of type {bool}" + ) self._multiple_lines = value def update_line_list(self, _): @@ -461,7 +469,7 @@ def update_line_list(self, _): if data and getattr(data[0], "values", None) is not None: if isinstance(data[0], ReferencedData): self.lines.options = [["", None]] + [ - [v, k] for k, v in data[0].value_map.map.items() + [v, int(k)] for k, v in data[0].value_map().items() ] else: self.lines.options = [["", None]] diff --git a/geoapps/block_model_creation/application.py b/geoapps/block_model_creation/application.py index f4026c2b1..38d6128ed 100644 --- a/geoapps/block_model_creation/application.py +++ b/geoapps/block_model_creation/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=W0613 # pylint: disable=E0401 @@ -11,6 +13,7 @@ from __future__ import annotations import os +import uuid from pathlib import Path from time import time @@ -19,6 +22,7 @@ from dash.exceptions import PreventUpdate from flask import Flask from geoh5py.objects.object_base import ObjectBase +from geoh5py.shared.exceptions import AssociationValidationError from geoapps.base.application import BaseApplication from geoapps.base.dash_application import BaseDashApplication @@ -41,7 +45,15 @@ def __init__(self, ui_json=None, **kwargs): self.params = self._param_class(ui_json) else: app_initializer.update(kwargs) - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) extras = { key: value for key, value in app_initializer.items() @@ -51,7 +63,7 @@ def __init__(self, ui_json=None, **kwargs): super().__init__() - external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"] + external_stylesheets = None server = Flask(__name__) self.app = Dash( server=server, diff --git a/geoapps/block_model_creation/constants.py b/geoapps/block_model_creation/constants.py index 066f3e2ef..0c26346a6 100644 --- a/geoapps/block_model_creation/constants.py +++ b/geoapps/block_model_creation/constants.py @@ -1,19 +1,23 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from uuid import UUID from geoh5py.ui_json.constants import default_ui_json as base_ui_json import geoapps from geoapps import assets_path + defaults = { "version": geoapps.__version__, "title": "Block Model Creation", @@ -116,7 +120,7 @@ app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), "monitoring_directory": str((assets_path() / "Temp").resolve()), - "objects": "{2e814779-c35f-4da0-ad6a-39a6912361f9}", + "objects": UUID("{2e814779-c35f-4da0-ad6a-39a6912361f9}"), "cell_size_x": 50.0, "cell_size_y": 50.0, "cell_size_z": 50.0, diff --git a/geoapps/block_model_creation/driver.py b/geoapps/block_model_creation/driver.py index 5463819db..16c0f4cb5 100644 --- a/geoapps/block_model_creation/driver.py +++ b/geoapps/block_model_creation/driver.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -11,6 +13,7 @@ import numpy as np from discretize.utils import mesh_utils +from geoapps_utils.driver.driver import BaseDriver from geoh5py.objects import BlockModel from geoh5py.shared.utils import fetch_active_workspace from geoh5py.workspace import Workspace @@ -18,8 +21,6 @@ from geoapps.block_model_creation.constants import validations from geoapps.block_model_creation.params import BlockModelParams -from geoapps.driver_base.driver import BaseDriver -from geoapps.shared_utils.utils import get_locations class BlockModelDriver(BaseDriver): @@ -47,9 +48,9 @@ def truncate_locs_depths(locs: np.ndarray, depth_core: float) -> np.ndarray: zmax = locs[:, -1].max() # top of locs below_core_ind = (zmax - locs[:, -1]) > depth_core core_bottom_elev = zmax - depth_core - locs[ - below_core_ind, -1 - ] = core_bottom_elev # sets locations below core to core bottom + locs[below_core_ind, -1] = ( + core_bottom_elev # sets locations below core to core bottom + ) return locs @staticmethod @@ -145,7 +146,7 @@ def run(self): Create block model and add to self.params.geoh5. """ with fetch_active_workspace(self.params.geoh5, mode="r+"): - xyz = get_locations(self.params.geoh5, self.params.objects) + xyz = self.params.objects.locations if xyz is None: raise ValueError("Input object has no centroids or vertices.") diff --git a/geoapps/block_model_creation/layout.py b/geoapps/block_model_creation/layout.py index 959757a9a..fd838617c 100644 --- a/geoapps/block_model_creation/layout.py +++ b/geoapps/block_model_creation/layout.py @@ -1,15 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from dash import dcc, html + block_model_layout = html.Div( [ dcc.Upload( diff --git a/geoapps/block_model_creation/params.py b/geoapps/block_model_creation/params.py index 183d6f0c4..ff376a552 100644 --- a/geoapps/block_model_creation/params.py +++ b/geoapps/block_model_creation/params.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from geoapps_utils.driver.params import BaseParams from geoh5py.objects import ObjectBase from geoapps.block_model_creation.constants import ( @@ -16,7 +19,6 @@ defaults, validations, ) -from geoapps.driver_base.params import BaseParams class BlockModelParams(BaseParams): diff --git a/geoapps/calculator/__init__.py b/geoapps/calculator/__init__.py index 73352e75f..4b5c02eed 100644 --- a/geoapps/calculator/__init__.py +++ b/geoapps/calculator/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/calculator/application.py b/geoapps/calculator/application.py index 134e1a257..2ec6320ed 100644 --- a/geoapps/calculator/application.py +++ b/geoapps/calculator/application.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import re from time import time +from uuid import UUID import numpy from geoh5py.ui_json.utils import monitored_directory_copy @@ -19,20 +22,23 @@ from geoapps.utils.plotting import plot_plan_data_selection from geoapps.utils.workspace import sorted_children_dict + with warn_module_not_found(): from ipywidgets.widgets import Button, HBox, Layout, Text, Textarea, VBox app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{79b719bc-d996-4f52-9af0-10aa9c7bb941}", + "objects": UUID("{79b719bc-d996-4f52-9af0-10aa9c7bb941}"), "data": ["Al2O3", "CaO"], "equation": "{NewChannel} = {Al2O3} + numpy.cos({CaO} / 30.0 * numpy.pi)", } class Calculator(ObjectDataSelection): - assert numpy # to make sure numpy is imported here, as it is required to eval the equation + assert ( + numpy + ) # to make sure numpy is imported here, as it is required to eval the equation _select_multiple = True @@ -103,7 +109,7 @@ def trigger_click(self, _): """ Evaluate the expression and output the result to geoh5 """ - var = self.var # pylint: disable=unused-variable + var = self.var # pylint: disable=unused-variable # noqa: F841 obj = self.workspace.get_entity(self.objects.value)[0] if obj is None: diff --git a/geoapps/clustering/__init__.py b/geoapps/clustering/__init__.py index 286cfdc11..70eb90f78 100644 --- a/geoapps/clustering/__init__.py +++ b/geoapps/clustering/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/clustering/application.py b/geoapps/clustering/application.py index b8ed9d004..1fa5ce3da 100644 --- a/geoapps/clustering/application.py +++ b/geoapps/clustering/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=W0613 # pylint: disable=E0401 @@ -50,7 +52,7 @@ def __init__(self, ui_json=None, ui_json_data=None, params=None): self.scatter_params = self._param_class(**self.params.to_dict(), validate=False) self.scatter_driver = ScatterPlotDriver(self.scatter_params) - external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"] + external_stylesheets = None server = Flask(__name__) self.app = Dash( server=server, @@ -400,7 +402,7 @@ def update_color_pickers( trigger = callback_context.triggered[0]["prop_id"].split(".")[0] if trigger == "ui_json_data": # Read in list of colors from ui.json. - if type(ui_json_data["color_pickers"]) == list: + if type(ui_json_data["color_pickers"]) == list: # noqa: E721 full_list = ui_json_data["color_pickers"] else: # Convert string to list. @@ -738,7 +740,7 @@ def update_colormap(n_clusters: int, color_pickers: list) -> list: color_map[ii] = [ np.min([ii / (n_clusters - 1), 1]), "rgb(" - + ",".join([f"{int(color[i:i + 2], 16)}" for i in (0, 2, 4)]) + + ",".join([f"{int(color[i : i + 2], 16)}" for i in (0, 2, 4)]) + ")", ] else: @@ -835,7 +837,7 @@ def make_scatter_plot( if indices is not None: indices = np.array(indices) - if color_maps == "kmeans" and kmeans is not None and kmeans != []: + if color_maps == "kmeans" and kmeans is not None and len(kmeans) > 0: # Update color_maps color_maps = Clustering.update_colormap(n_clusters, color_pickers) if color_maps is None: diff --git a/geoapps/clustering/constants.py b/geoapps/clustering/constants.py index d7425e2ec..9b7371655 100644 --- a/geoapps/clustering/constants.py +++ b/geoapps/clustering/constants.py @@ -1,13 +1,16 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from uuid import UUID import plotly.express as px @@ -15,6 +18,7 @@ from geoapps import assets_path from geoapps.scatter_plot.constants import default_ui_json as base_default_ui_json + defaults = { "version": geoapps.__version__, "title": "Clustering", @@ -97,26 +101,26 @@ app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), "monitoring_directory": str((assets_path() / "Temp").resolve()), - "objects": "{79b719bc-d996-4f52-9af0-10aa9c7bb941}", - "channel": "{cdd7668a-4b5b-49ac-9365-c9ce4fddf733}", - "x": "{cdd7668a-4b5b-49ac-9365-c9ce4fddf733}", + "objects": UUID("{79b719bc-d996-4f52-9af0-10aa9c7bb941}"), + "channel": UUID("{cdd7668a-4b5b-49ac-9365-c9ce4fddf733}"), + "x": UUID("{cdd7668a-4b5b-49ac-9365-c9ce4fddf733}"), "x_log": False, "x_min": -17.0, "x_max": 25.5, - "y": "{18c2560c-6161-468a-8571-5d9d59649535}", + "y": UUID("{18c2560c-6161-468a-8571-5d9d59649535}"), "y_log": True, "y_min": -17.0, "y_max": 29.8, - "z": "{cb35da1c-7ea4-44f0-8817-e3d80e8ba98c}", + "z": UUID("{cb35da1c-7ea4-44f0-8817-e3d80e8ba98c}"), "z_log": True, "z_min": -20.0, "z_max": 3200.0, - "color": "{94a150e8-16d9-4784-a7aa-e6271df3a3ef}", + "color": UUID("{94a150e8-16d9-4784-a7aa-e6271df3a3ef}"), "color_log": True, "color_min": -17.0, "color_max": 640.0, "color_maps": "kmeans", - "size": "{41d51965-3670-43ba-8a10-d399070689e3}", + "size": UUID("{41d51965-3670-43ba-8a10-d399070689e3}"), "size_log": False, "size_min": -17.0, "size_max": 24.8, diff --git a/geoapps/clustering/driver.py b/geoapps/clustering/driver.py index bf153f434..a6be896d1 100644 --- a/geoapps/clustering/driver.py +++ b/geoapps/clustering/driver.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -14,17 +15,17 @@ from geoh5py.workspace import Workspace -os.environ["OMP_NUM_THREADS"] = "1" +os.environ["OMP_NUM_THREADS"] = "1" import numpy as np import pandas as pd +from geoapps_utils.driver.driver import BaseDriver from scipy.spatial import cKDTree from sklearn.cluster import KMeans from geoapps.clustering.constants import validations from geoapps.clustering.params import ClusteringParams -from geoapps.driver_base.driver import BaseDriver from geoapps.shared_utils.colors import UNIQUE_COLORS from geoapps.shared_utils.utils import hex_to_rgb from geoapps.utils.statistics import random_sampling @@ -86,14 +87,31 @@ def run_clustering( kmeans = KMeans(n_clusters=val, random_state=0, n_init=10).fit( np.vstack(values).T ) + # Get the original labels and cluster centers + original_labels = kmeans.labels_ + cluster_centers = kmeans.cluster_centers_ + + # Create a mapping from original labels to new labels based on sorted cluster centers + sorted_centroids_indices = np.argsort(cluster_centers.sum(axis=1)) + label_mapping = { + old_label: new_label + for new_label, old_label in enumerate(sorted_centroids_indices) + } + + # Apply the mapping to get new labels + new_labels = np.array( + [label_mapping[label] for label in original_labels] + ) + kmeans_dict = { - "labels": kmeans.labels_.astype(float), + "labels": new_labels.astype(float), "inertia": kmeans.inertia_, } clusters[val] = kmeans_dict cluster_ids = clusters[n_clusters]["labels"].astype(float) kmeans = cluster_ids[mapping] + return kmeans, clusters @staticmethod @@ -201,7 +219,9 @@ def run(self): ast.literal_eval(self.params.data_subset), self.params.geoh5, ) - full_scales_dict = dict(zip(self.params.data_subset, self.params.full_scales)) + full_scales_dict = dict( + zip(self.params.data_subset, self.params.full_scales, strict=False) + ) kmeans, _ = ClusteringDriver.run_clustering( self.params.n_clusters, dataframe, @@ -227,7 +247,7 @@ def run(self): colorpicker = color_pickers[ii] color = colorpicker.lstrip("#") group_map[ii + 1] = f"Cluster_{ii}" - color_map += [[ii + 1] + hex_to_rgb(color) + [1]] + color_map += [[ii + 1] + hex_to_rgb(color) + [0]] color_map = np.core.records.fromarrays( np.vstack(color_map).T, diff --git a/geoapps/clustering/layout.py b/geoapps/clustering/layout.py index 0e29ef1bd..9af43dac3 100644 --- a/geoapps/clustering/layout.py +++ b/geoapps/clustering/layout.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -13,6 +15,7 @@ from geoapps.base.layout import workspace_layout from geoapps.scatter_plot.layout import axis_layout, downsampling_layout, plot_layout + # Layout for histogram, stats table, confusion matrix norm_tabs_layout = html.Div( id="norm_tabs", diff --git a/geoapps/clustering/params.py b/geoapps/clustering/params.py index 3aa832b46..e2f731f22 100644 --- a/geoapps/clustering/params.py +++ b/geoapps/clustering/params.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/clustering/plot_data.py b/geoapps/clustering/plot_data.py index 3a8a2757d..bf44e2dc2 100644 --- a/geoapps/clustering/plot_data.py +++ b/geoapps/clustering/plot_data.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/contours/__init__.py b/geoapps/contours/__init__.py index fea0fb112..1f577d13a 100644 --- a/geoapps/contours/__init__.py +++ b/geoapps/contours/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/contours/application.py b/geoapps/contours/application.py index 086f4f70c..212201129 100644 --- a/geoapps/contours/application.py +++ b/geoapps/contours/application.py @@ -1,16 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations +import uuid from pathlib import Path from time import time from geoh5py.objects.object_base import Entity, ObjectBase +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json.input_file import InputFile from ipywidgets import Checkbox, HBox, Label, Layout, Text, VBox @@ -32,9 +36,17 @@ class ContourValues(PlotSelection2D): def __init__(self, ui_json=None, plot_result=True, **kwargs): app_initializer.update(kwargs) if ui_json is not None and Path(ui_json).is_file(): - self.params = self._param_class(InputFile(ui_json)) + self.params = self._param_class(input_file=InputFile(ui_json=ui_json)) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) for key, value in self.params.to_dict().items(): if isinstance(value, Entity): diff --git a/geoapps/contours/constants.py b/geoapps/contours/constants.py index 81a66e883..46a68081a 100644 --- a/geoapps/contours/constants.py +++ b/geoapps/contours/constants.py @@ -1,19 +1,23 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from uuid import UUID from geoh5py.ui_json.constants import default_ui_json as base_ui_json import geoapps from geoapps import assets_path + defaults = { "version": geoapps.__version__, "title": "Create Contours", @@ -115,21 +119,21 @@ }, "window_center_x": { "group": "Window", - "enabled": False, + "enabled": True, "main": True, "label": "Easting", "value": 0.0, }, "window_center_y": { "group": "Window", - "enabled": False, + "enabled": True, "main": True, "label": "Northing", "value": 0.0, }, "window_width": { "group": "Window", - "enabled": False, + "enabled": True, "main": True, "label": "Width", "min": 0.0, @@ -137,7 +141,7 @@ }, "window_height": { "group": "Window", - "enabled": False, + "enabled": True, "main": True, "label": "Height", "min": 0.0, @@ -175,8 +179,8 @@ app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}", - "data": "{44822654-b6ae-45b0-8886-2d845f80f422}", + "objects": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), + "data": UUID("{44822654-b6ae-45b0-8886-2d845f80f422}"), "interval_min": -400.0, "interval_max": 2000.0, "interval_spacing": 100.0, diff --git a/geoapps/contours/driver.py b/geoapps/contours/driver.py index 8da7af3d8..cf8fe8cd3 100644 --- a/geoapps/contours/driver.py +++ b/geoapps/contours/driver.py @@ -1,16 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import sys import numpy as np +from geoapps_utils.driver.driver import BaseDriver from geoh5py.groups import ContainerGroup from geoh5py.objects import Curve, Points, Surface from matplotlib.pyplot import axes @@ -18,7 +20,6 @@ from geoapps.contours.constants import validations from geoapps.contours.params import ContoursParams -from geoapps.driver_base.driver import BaseDriver from geoapps.shared_utils.utils import get_contours from geoapps.utils.formatters import string_name from geoapps.utils.plotting import plot_plan_data_selection @@ -58,7 +59,9 @@ def run(self): if contour_set is not None: vertices, cells, values = [], [], [] count = 0 - for segs, level in zip(contour_set.allsegs, contour_set.levels): + for segs, level in zip( + contour_set.allsegs, contour_set.levels, strict=False + ): for poly in segs: n_v = len(poly) vertices.append(poly) diff --git a/geoapps/contours/params.py b/geoapps/contours/params.py index 80a541d63..2746abb4c 100644 --- a/geoapps/contours/params.py +++ b/geoapps/contours/params.py @@ -1,20 +1,22 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy import numpy as np +from geoapps_utils.driver.params import BaseParams from geoh5py.data import Data from geoh5py.objects import Curve, Grid2D, ObjectBase, Points, Surface from geoapps.contours.constants import default_ui_json, defaults, validations -from geoapps.driver_base.params import BaseParams class ContoursParams(BaseParams): diff --git a/geoapps/coordinate_transformation/__init__.py b/geoapps/coordinate_transformation/__init__.py index 66f39d0d2..c8fe29462 100644 --- a/geoapps/coordinate_transformation/__init__.py +++ b/geoapps/coordinate_transformation/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/coordinate_transformation/application.py b/geoapps/coordinate_transformation/application.py index 0f800b393..b23c54205 100644 --- a/geoapps/coordinate_transformation/application.py +++ b/geoapps/coordinate_transformation/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -11,6 +13,7 @@ from pathlib import Path from time import time +import matplotlib.pyplot as plt import numpy from geoh5py.data import FloatData from geoh5py.groups import ContainerGroup @@ -24,12 +27,16 @@ from ..base.application import BaseApplication + with warn_module_not_found(): from ipywidgets import HBox, Layout, SelectMultiple, Text, Textarea, VBox with warn_module_not_found(): from fiona.transform import transform +from uuid import UUID + + with warn_module_not_found(): from osgeo import gdal, osr @@ -42,8 +49,8 @@ "ga_group_name": "CoordinateTransformation", "geoh5": str(assets_path() / "FlinFlon.geoh5"), "objects": [ - "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}", - "{bb208abb-dc1f-4820-9ea9-b8883e5ff2c6}", + UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), + UUID("{bb208abb-dc1f-4820-9ea9-b8883e5ff2c6}"), ], "code_in": "EPSG:26914", "code_out": "EPSG:4326", @@ -91,7 +98,6 @@ def trigger_click(self, _): """ Run the coordinate transformation """ - import matplotlib.pyplot as plt if self.wkt_in.value != "" and self.wkt_out.value != "": if self.plot_result: diff --git a/geoapps/coordinate_transformation/utils.py b/geoapps/coordinate_transformation/utils.py index a149a46e6..160af1b0d 100644 --- a/geoapps/coordinate_transformation/utils.py +++ b/geoapps/coordinate_transformation/utils.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/driver_base/__init__.py b/geoapps/driver_base/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/driver_base/__init__.py +++ b/geoapps/driver_base/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/driver_base/driver.py b/geoapps/driver_base/driver.py index e86faa320..14f502c05 100644 --- a/geoapps/driver_base/driver.py +++ b/geoapps/driver_base/driver.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -11,6 +13,7 @@ from pathlib import Path from warnings import warn +from geoapps_utils.driver.params import BaseParams from geoh5py import Workspace from geoh5py.objects import ObjectBase from geoh5py.ui_json import InputFile, monitored_directory_copy @@ -19,7 +22,6 @@ from semver import Version from geoapps import __version__ -from geoapps.driver_base.params import BaseParams class BaseDriver(ABC): diff --git a/geoapps/driver_base/params.py b/geoapps/driver_base/params.py index c3413ca2a..a49a57306 100644 --- a/geoapps/driver_base/params.py +++ b/geoapps/driver_base/params.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -120,7 +122,7 @@ def update(self, params_dict: dict[str, Any]): """Update parameters with dictionary contents.""" params_dict = self.input_file.numify(params_dict) if params_dict.get("geoh5", None) is not None and self.input_file.geoh5 is None: - setattr(self, "geoh5", params_dict.pop("geoh5")) + self.geoh5 = params_dict.pop("geoh5") with fetch_active_workspace(self.geoh5): params_dict = self.input_file.promote(params_dict) # pylint: disable=W0212 @@ -240,7 +242,9 @@ def free_parameter_dict(self): # TODO Create a geoh5py validation for "allof" -> ["object", "levels", "type", "distance"] free_parameter_dict[group] = {} forms = utils.collect(self.ui_json, "group", group) - for label, key in zip(forms, self._free_parameter_keys): + for label, key in zip( + forms, self._free_parameter_keys, strict=False + ): if key not in label.lower(): raise ValueError( f"Malformed input refinement group {group}. " @@ -266,9 +270,9 @@ def validations(self) -> dict[str, Any]: @validations.setter def validations(self, validations: dict[str, Any]): - assert isinstance( - validations, dict - ), "Input value must be a dictionary of validations." + assert isinstance(validations, dict), ( + "Input value must be a dictionary of validations." + ) self._validations = validations @property @@ -280,6 +284,7 @@ def geoh5(self, val): if val is None: self._geoh5 = val return + self.setter_validator( "geoh5", val, diff --git a/geoapps/driver_base/utils.py b/geoapps/driver_base/utils.py index 6348cf6c6..c0d2f0669 100644 --- a/geoapps/driver_base/utils.py +++ b/geoapps/driver_base/utils.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -55,8 +57,8 @@ def running_mean( def treemesh_2_octree(workspace, treemesh, **kwargs): - index_array, levels = getattr(treemesh, "_ubc_indArr") - ubc_order = getattr(treemesh, "_ubc_order") + index_array, levels = treemesh._ubc_indArr # pylint: disable=protected-access + ubc_order = treemesh._ubc_order # pylint: disable=protected-access index_array = index_array[ubc_order] - 1 levels = levels[ubc_order] diff --git a/geoapps/edge_detection/__init__.py b/geoapps/edge_detection/__init__.py index 20cf76106..6f07dc8b7 100644 --- a/geoapps/edge_detection/__init__.py +++ b/geoapps/edge_detection/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/edge_detection/application.py b/geoapps/edge_detection/application.py index f98a1d15a..6fb496aef 100644 --- a/geoapps/edge_detection/application.py +++ b/geoapps/edge_detection/application.py @@ -1,18 +1,22 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations +import uuid from pathlib import Path from time import time import numpy as np from geoh5py.objects import Grid2D, ObjectBase from geoh5py.shared import Entity +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile @@ -24,6 +28,7 @@ from geoapps.utils import warn_module_not_found from geoapps.utils.formatters import string_name + with warn_module_not_found(): from ipywidgets import Button, FloatSlider, HBox, IntSlider, Layout, Text, VBox @@ -55,9 +60,17 @@ class EdgeDetectionApp(PlotSelection2D): def __init__(self, ui_json=None, plot_result=True, **kwargs): app_initializer.update(kwargs) if ui_json is not None and Path(ui_json).is_file(): - self.params = self._param_class(InputFile(ui_json)) + self.params = self._param_class(input_file=InputFile(ui_json=ui_json)) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) for key, value in self.params.to_dict().items(): if isinstance(value, Entity): @@ -195,7 +208,7 @@ def window_size(self): def trigger_click(self, _): param_dict = self.get_param_dict() - temp_geoh5 = f"{string_name(self.params.export_as)}_{time():.0f}.geoh5" + temp_geoh5 = f"{string_name(param_dict.get('export_as'))}_{time():.0f}.geoh5" ws, self.live_link.value = BaseApplication.get_output_workspace( self.live_link.value, self.export_directory.selected_path, temp_geoh5 ) @@ -228,16 +241,18 @@ def update_name(self, _): def compute_trigger(self, _): param_dict = self.get_param_dict() - param_dict["geoh5"] = self.params.geoh5 + param_dict["geoh5"] = self.workspace - with fetch_active_workspace(self.params.geoh5): - self.params.update(param_dict) + if param_dict.get("objects", None) is None: + return + with fetch_active_workspace(self.workspace): + new_params = EdgeDetectionParams(**param_dict) self.refresh.value = False ( vertices, _, - ) = EdgeDetectionDriver.get_edges(*self.params.edge_args()) + ) = EdgeDetectionDriver.get_edges(*new_params.edge_args()) self.collections = [ collections.LineCollection( np.reshape(vertices[:, :2], (-1, 2, 2)), colors="k", linewidths=2 diff --git a/geoapps/edge_detection/constants.py b/geoapps/edge_detection/constants.py index f569a2e96..3a4a41ca2 100644 --- a/geoapps/edge_detection/constants.py +++ b/geoapps/edge_detection/constants.py @@ -1,20 +1,23 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from uuid import UUID from geoh5py.ui_json.constants import default_ui_json as base_ui_json import geoapps from geoapps import assets_path + defaults = { "version": geoapps.__version__, "title": "Edge Detection", @@ -172,8 +175,8 @@ app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}", - "data": "{53e59b2b-c2ae-4b77-923b-23e06d874e62}", + "objects": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), + "data": UUID("{53e59b2b-c2ae-4b77-923b-23e06d874e62}"), "sigma": 0.5, "window_azimuth": -20.0, "ga_group_name": "Edges", diff --git a/geoapps/edge_detection/driver.py b/geoapps/edge_detection/driver.py index d8694d49a..39fb3f187 100644 --- a/geoapps/edge_detection/driver.py +++ b/geoapps/edge_detection/driver.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -13,12 +14,12 @@ import geoh5py.data import geoh5py.objects import numpy as np +from geoapps_utils.driver.driver import BaseDriver from geoh5py.groups import ContainerGroup from geoh5py.objects import Curve, Grid2D from skimage.feature import canny from skimage.transform import probabilistic_hough_line -from geoapps.driver_base.driver import BaseDriver from geoapps.edge_detection.constants import validations from geoapps.edge_detection.params import EdgeDetectionParams from geoapps.shared_utils.utils import filter_xy @@ -29,7 +30,7 @@ class EdgeDetectionDriver(BaseDriver): _params_class = EdgeDetectionParams _validations = validations - def __init__(self, params: EdgeDetectionParams): + def __init__(self, params: EdgeDetectionParams): # pylint: disable=useless-super-delegation super().__init__(params) def run(self): diff --git a/geoapps/edge_detection/params.py b/geoapps/edge_detection/params.py index 2c556c290..84d63b0cd 100644 --- a/geoapps/edge_detection/params.py +++ b/geoapps/edge_detection/params.py @@ -1,18 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from geoapps_utils.driver.params import BaseParams from geoh5py.data import Data from geoh5py.objects import ObjectBase -from geoapps.driver_base.params import BaseParams from geoapps.edge_detection.constants import default_ui_json, defaults, validations diff --git a/geoapps/export/__init__.py b/geoapps/export/__init__.py index f55258ffc..1125318b5 100644 --- a/geoapps/export/__init__.py +++ b/geoapps/export/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/export/application.py b/geoapps/export/application.py index 40daa467f..c055cdd99 100644 --- a/geoapps/export/application.py +++ b/geoapps/export/application.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import re from pathlib import Path +from uuid import UUID import discretize import numpy as np @@ -21,6 +24,7 @@ from geoapps.utils.io import export_grid_2_geotiff from geoapps.utils.plotting import plot_plan_data_selection + with warn_module_not_found(): from matplotlib import pyplot as plt @@ -28,17 +32,18 @@ from osgeo import osr with warn_module_not_found(): - from ipywidgets.widgets import HBox, VBox from ipywidgets import Dropdown, FloatText, Layout, RadioButtons, Text, Textarea + from ipywidgets.widgets import HBox, VBox from .utils import export_curve_2_shapefile, object_2_dataframe + app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}", + "objects": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), "data": [ - "{44822654-b6ae-45b0-8886-2d845f80f422}", - "{53e59b2b-c2ae-4b77-923b-23e06d874e62}", + UUID("{44822654-b6ae-45b0-8886-2d845f80f422}"), + UUID("{53e59b2b-c2ae-4b77-923b-23e06d874e62}"), ], "epsg_code": "EPSG:26914", "file_type": "geotiff", @@ -202,9 +207,9 @@ def _export_csv(self, entity, fields): ) def _export_shapefile(self, entity): - assert isinstance( - entity, Curve - ), f"Only Curve objects are support for type {self.file_type.value}" + assert isinstance(entity, Curve), ( + f"Only Curve objects are support for type {self.file_type.value}" + ) if self.data.value: for key in self.data.value: @@ -273,9 +278,9 @@ def _export_geotiff(self, entity): print(f"Object saved to {name}") def _export_ubc(self, entity, data_values): - assert isinstance( - entity, (Octree, BlockModel) - ), "Export available for BlockModel or octree only" + assert isinstance(entity, (Octree, BlockModel)), ( + "Export available for BlockModel or octree only" + ) if isinstance(entity, Octree): mesh = octree_2_treemesh(entity) @@ -291,7 +296,7 @@ def _export_ubc(self, entity, data_values): + ".mod" ] = item[ind] name = f"{Path(self.export_directory.selected_path) / self.export_as.value}.msh" - mesh.writeUBC( + mesh.write_UBC( name, models=models, ) @@ -314,7 +319,7 @@ def _export_ubc(self, entity, data_values): entity.origin["z"] + entity.z_cells[entity.z_cells < 0].sum(), ] name = f"{Path(self.export_directory.selected_path) / self.export_as.value}.msh" - mesh.writeUBC(name) + mesh.write_UBC(name) print(f"Mesh saved to {name}") if any(data_values): diff --git a/geoapps/export/utils.py b/geoapps/export/utils.py index bd6aeda61..5fbf9b594 100644 --- a/geoapps/export/utils.py +++ b/geoapps/export/utils.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -12,6 +14,7 @@ from geoapps.utils import warn_module_not_found + with warn_module_not_found(): from shapely.geometry import LineString, mapping diff --git a/geoapps/index.ipynb b/geoapps/index.ipynb index 503538230..8eb96067a 100644 --- a/geoapps/index.ipynb +++ b/geoapps/index.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d7037643ddf1543b8cfc328f8e1db6b63f80eb3e97141dca6e3215f28d5bb07 +oid sha256:dd081fa62a0d93e1be4ceef13b90a76b5e024aa492ea07cf1c3d0aef6ec6f191 size 5245 diff --git a/geoapps/interpolation/__init__.py b/geoapps/interpolation/__init__.py index 9dc84dd7c..15832febb 100644 --- a/geoapps/interpolation/__init__.py +++ b/geoapps/interpolation/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/interpolation/application.py b/geoapps/interpolation/application.py index 4c495ee3d..4cf916183 100644 --- a/geoapps/interpolation/application.py +++ b/geoapps/interpolation/application.py @@ -1,17 +1,21 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations +import uuid from pathlib import Path from time import time from geoh5py.objects import ObjectBase from geoh5py.objects.object_base import Entity +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json.input_file import InputFile from geoh5py.workspace import Workspace @@ -22,6 +26,7 @@ from geoapps.interpolation.params import DataInterpolationParams from geoapps.utils import warn_module_not_found + with warn_module_not_found(): from ipywidgets import Dropdown, FloatText, HBox, Label, RadioButtons, VBox @@ -37,9 +42,17 @@ class DataInterpolation(ObjectDataSelection): def __init__(self, ui_json=None, **kwargs): app_initializer.update(kwargs) if ui_json is not None and Path(ui_json).is_file(): - self.params = self._param_class(InputFile(ui_json)) + self.params = self._param_class(input_file=InputFile(ui_json=ui_json)) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) for key, value in self.params.to_dict().items(): if isinstance(value, Entity): @@ -222,9 +235,9 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) self.update_objects_list() self.out_object.options = self.objects.options diff --git a/geoapps/interpolation/constants.py b/geoapps/interpolation/constants.py index 5e31627f8..dad955d53 100644 --- a/geoapps/interpolation/constants.py +++ b/geoapps/interpolation/constants.py @@ -1,19 +1,23 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from uuid import UUID from geoh5py.ui_json.constants import default_ui_json as base_ui_json import geoapps from geoapps import assets_path + defaults = { "version": geoapps.__version__, "title": "Data Transfer", @@ -202,15 +206,15 @@ app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{2e814779-c35f-4da0-ad6a-39a6912361f9}", - "data": "{f3e36334-be0a-4210-b13e-06933279de25}", + "objects": UUID("{2e814779-c35f-4da0-ad6a-39a6912361f9}"), + "data": UUID("{f3e36334-be0a-4210-b13e-06933279de25}"), "max_distance": 2e3, "max_depth": 1e3, "no_data_value": 1e-8, - "out_object": "{7450be38-1327-4336-a9e4-5cff587b6715}", + "out_object": UUID("{7450be38-1327-4336-a9e4-5cff587b6715}"), "skew_angle": 0.0, "skew_factor": 1.0, "space": "Linear", - "topography_objects": "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}", - "topography_data": "{a603a762-f6cb-4b21-afda-3160e725bf7d}", + "topography_objects": UUID("{ab3c2083-6ea8-4d31-9230-7aad3ec09525}"), + "topography_data": UUID("{a603a762-f6cb-4b21-afda-3160e725bf7d}"), } diff --git a/geoapps/interpolation/driver.py b/geoapps/interpolation/driver.py index e6b6ba5f1..694ecc0e9 100644 --- a/geoapps/interpolation/driver.py +++ b/geoapps/interpolation/driver.py @@ -1,23 +1,24 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import sys import numpy as np +from geoapps_utils.driver.driver import BaseDriver from scipy.interpolate import LinearNDInterpolator from scipy.spatial import cKDTree -from geoapps.driver_base.driver import BaseDriver from geoapps.interpolation.constants import validations from geoapps.interpolation.params import DataInterpolationParams -from geoapps.shared_utils.utils import get_locations, weighted_average +from geoapps.shared_utils.utils import weighted_average class DataInterpolationDriver(BaseDriver): @@ -29,7 +30,7 @@ def __init__(self, params: DataInterpolationParams): self.params: DataInterpolationParams = params def run(self): - xyz = get_locations(self.params.geoh5, self.params.objects) + xyz = self.params.objects.locations if xyz is None: raise ValueError("Input object has no centroids or vertices.") @@ -37,7 +38,7 @@ def run(self): # Create a tree for the input mesh tree = cKDTree(xyz) - xyz_out = get_locations(self.params.geoh5, self.params.out_object) + xyz_out = self.params.out_object.locations xyz_out_orig = xyz_out.copy() values, sign, dtype = {}, {}, {} @@ -70,13 +71,13 @@ def run(self): for key in values_interp.keys(): if self.params.space == "Log": values_interp[key] = sign[key] * np.exp(values_interp[key]) - values_interp[key][ - np.isnan(values_interp[key]) - ] = self.params.no_data_value + values_interp[key][np.isnan(values_interp[key])] = ( + self.params.no_data_value + ) if self.params.max_distance is not None: - values_interp[key][ - rad > self.params.max_distance - ] = self.params.no_data_value + values_interp[key][rad > self.params.max_distance] = ( + self.params.no_data_value + ) elif self.params.method == "Inverse Distance": print("Computing inverse distance interpolation") # Inverse distance @@ -102,7 +103,7 @@ def run(self): return_indices=True, ) - for key, val in zip(list(values.keys()), vals): + for key, val in zip(list(values.keys()), vals, strict=False): values_interp[key] = val sign[key] = sign[key][ind_inv[:, 0]] @@ -141,19 +142,14 @@ def run(self): if self.params.xy_extent is not None and self.params.geoh5.get_entity( self.params.xy_extent ): - xy_ref = self.params.xy_extent - if hasattr(xy_ref, "centroids"): - xy_ref = xy_ref.centroids - elif hasattr(xy_ref, "vertices"): - xy_ref = xy_ref.vertices - + xy_ref = self.params.xy_extent.locations tree = cKDTree(xy_ref[:, :2]) rad, _ = tree.query(xyz_out_orig[:, :2]) for key in values_interp.keys(): if self.params.max_distance is not None: - values_interp[key][ - rad > self.params.max_distance - ] = self.params.no_data_value + values_interp[key][rad > self.params.max_distance] = ( + self.params.no_data_value + ) for key in values_interp.keys(): if dtype[key] == np.dtype("int32"): diff --git a/geoapps/interpolation/params.py b/geoapps/interpolation/params.py index e36e73697..2ecdc26f1 100644 --- a/geoapps/interpolation/params.py +++ b/geoapps/interpolation/params.py @@ -1,18 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from geoapps_utils.driver.params import BaseParams from geoh5py.data import Data from geoh5py.objects import ObjectBase -from geoapps.driver_base.params import BaseParams from geoapps.interpolation.constants import default_ui_json, defaults, validations diff --git a/geoapps/inversion/__init__.py b/geoapps/inversion/__init__.py index fd44f2cd9..35f6591d5 100644 --- a/geoapps/inversion/__init__.py +++ b/geoapps/inversion/__init__.py @@ -1,18 +1,22 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa # isort: skip_file from __future__ import annotations -from SimPEG import dask +from simpeg import dask -from geoapps.inversion.params import InversionBaseParams # isort: skip -from geoapps.inversion.constants import default_ui_json +from simpeg_drivers.params import InversionBaseParams # isort: skip +from simpeg_drivers.constants import default_ui_json DRIVER_MAP = { diff --git a/geoapps/inversion/base_inversion_application.py b/geoapps/inversion/base_inversion_application.py index 7f47fc7e4..b8e52473f 100644 --- a/geoapps/inversion/base_inversion_application.py +++ b/geoapps/inversion/base_inversion_application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=W0613 @@ -24,14 +26,19 @@ from geoh5py.objects import Curve, Grid2D, ObjectBase, Octree, Points, Surface from geoh5py.shared.utils import is_uuid from geoh5py.workspace import Workspace -from notebook import notebookapp +from jupyter_server import serverapp from plotly import graph_objects as go +from simpeg_drivers import InversionBaseParams from geoapps.base.application import BaseApplication from geoapps.base.dash_application import BaseDashApplication -from geoapps.inversion import InversionBaseParams from geoapps.inversion.components.preprocessing import preprocess_data -from geoapps.shared_utils.utils import downsample_grid, downsample_xy +from geoapps.shared_utils.utils import ( + DrapeOptions, + WindowOptions, + downsample_grid, + downsample_xy, +) class InversionApp(BaseDashApplication): @@ -56,7 +63,7 @@ def __init__(self): self.params.inversion_type.title().replace(" ", "") + "Inversion" ) - external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"] + external_stylesheets = None server = Flask(__name__) self.app = Dash( server=server, @@ -334,17 +341,16 @@ def __init__(self): Output(component_id="window_center_y", component_property="max"), Output(component_id="window_width", component_property="max"), Output(component_id="window_height", component_property="max"), + Output(component_id="window_center_x", component_property="value"), + Output(component_id="window_center_y", component_property="value"), + Output(component_id="window_width", component_property="value"), + Output(component_id="window_height", component_property="value"), Input(component_id="data_object", component_property="value"), )(self.set_bounding_box) # Update plot self.app.callback( Output(component_id="plot", component_property="figure"), Output(component_id="data_count", component_property="children"), - Output(component_id="window_center_x", component_property="value"), - Output(component_id="window_center_y", component_property="value"), - Output(component_id="window_width", component_property="value"), - Output(component_id="window_height", component_property="value"), - Output(component_id="fix_aspect_ratio", component_property="value"), Input(component_id="ui_json_data", component_property="data"), Input(component_id="plot", component_property="figure"), Input(component_id="plot", component_property="relayoutData"), @@ -472,9 +478,9 @@ def open_mesh_app(_) -> None: """ # Get a notebook port that is running from the index page. nb_port = None - servers = list(notebookapp.list_running_servers()) + servers = list(serverapp.list_running_servers()) for s in servers: - if s["notebook_dir"] == str(Path("../../../").resolve()): + if s["root_dir"] == str(Path("../../../").resolve()): nb_port = s["port"] break @@ -504,7 +510,7 @@ def unpack_val(val: float | int | str) -> (str, str, float | int): options = "Model" data = str(val) const = None - elif (type(val) == float) or (type(val) == int): + elif (type(val) == float) or (type(val) == int): # noqa: E721 options = "Constant" data = None const = val @@ -684,7 +690,7 @@ def update_radar_options(self, ui_json_data: dict, object_uid: str) -> (list, st triggers = [c["prop_id"].split(".")[0] for c in callback_context.triggered] if "ui_json_data" in triggers: - value = ui_json_data["receivers_radar_drape"] + value = ui_json_data.get("receivers_radar_drape", None) options = self.get_data_options( ui_json_data, object_uid, @@ -759,8 +765,8 @@ def update_full_components( # Get uncertainty value if comp + "_uncertainty" in ui_json_data and ( - (type(ui_json_data[comp + "_uncertainty"]) == float) - or (type(ui_json_data[comp + "_uncertainty"]) == int) + (type(ui_json_data[comp + "_uncertainty"]) == float) # noqa: E721 + or (type(ui_json_data[comp + "_uncertainty"]) == int) # noqa: E721 ): uncertainty_type = "Floor" uncertainty_floor = ui_json_data[comp + "_uncertainty"] @@ -884,7 +890,7 @@ def set_bounding_box( if is_uuid(object_uid): obj = self.workspace.get_entity(uuid.UUID(object_uid))[0] else: - return no_update, no_update, no_update, no_update, no_update, no_update + return tuple([no_update] * 10) if isinstance(obj, Grid2D): lim_x[0], lim_x[1] = obj.centroids[:, 0].min(), obj.centroids[:, 0].max() lim_y[0], lim_y[1] = obj.centroids[:, 1].min(), obj.centroids[:, 1].max() @@ -892,7 +898,7 @@ def set_bounding_box( lim_x[0], lim_x[1] = obj.vertices[:, 0].min(), obj.vertices[:, 0].max() lim_y[0], lim_y[1] = obj.vertices[:, 1].min(), obj.vertices[:, 1].max() else: - return no_update, no_update, no_update, no_update, no_update, no_update + return tuple([no_update] * 10) width = lim_x[1] - lim_x[0] height = lim_y[1] - lim_y[0] @@ -913,6 +919,10 @@ def set_bounding_box( window_center_y_max, window_width_max, window_height_max, + (window_center_x_min + window_center_x_max) / 2.0, + (window_center_y_min + window_center_y_max) / 2.0, + window_width_max, + window_height_max, ) @staticmethod @@ -1043,7 +1053,6 @@ def plot_plan_data_selection( z = new_values.T[downsampled_index] - if np.any(values): # Update figure data. figure["data"][0]["x"] = down_x figure["data"][0]["y"] = down_y @@ -1128,7 +1137,7 @@ def plot_selection( resolution: float | int, colorbar: list, fix_aspect_ratio: list, - ) -> (go.Figure, str, float, float, float, float, list): + ) -> (go.Figure, str): """ Dash version of the plot_selection function in base/plot. @@ -1159,11 +1168,6 @@ def plot_selection( return ( go.Figure(), data_count, - no_update, - no_update, - no_update, - no_update, - no_update, ) obj = self.workspace.get_entity(uuid.UUID(object_uid))[0] @@ -1188,11 +1192,6 @@ def plot_selection( return ( figure, data_count, - no_update, - no_update, - no_update, - no_update, - no_update, ) else: # Construct figure from existing figure to keep bounds and plot layout. @@ -1261,37 +1260,7 @@ def plot_selection( ) data_count += f"{count}" - if ( - "plot" in triggers - or center_x is None - or center_y is None - or width is None - or height is None - ): - if figure["layout"]["xaxis"]["autorange"]: - x = np.array(figure["data"][0]["x"]) - x_range = [np.amin(x), np.amax(x)] - elif figure["layout"]["xaxis"]["range"] is not None: - x_range = figure["layout"]["xaxis"]["range"] - else: - figure["layout"]["xaxis"]["autorange"] = True - x = np.array(figure["data"][0]["x"]) - x_range = [np.amin(x), np.amax(x)] - width = x_range[1] - x_range[0] - center_x = x_range[0] + (width / 2) - if figure["layout"]["yaxis"]["autorange"]: - y = np.array(figure["data"][0]["y"]) - y_range = [np.amin(y), np.amax(y)] - elif figure["layout"]["yaxis"]["range"] is not None: - y_range = figure["layout"]["yaxis"]["range"] - else: - figure["layout"]["yaxis"]["autorange"] = True - y = np.array(figure["data"][0]["y"]) - y_range = [np.amin(y), np.amax(y)] - height = y_range[1] - y_range[0] - center_y = y_range[0] + (height / 2) - - return figure, data_count, center_x, center_y, width, height, fix_aspect_ratio + return figure, data_count def get_general_inversion_params( self, @@ -1362,14 +1331,10 @@ def get_full_component_params( param_dict[comp + "_uncertainty"] = value["uncertainty_floor"] elif value["uncertainty_type"] == "Channel": if is_uuid(value["uncertainty_channel"]): - param_dict[ - comp + "_uncertainty" - ] = self.workspace.get_entity( - uuid.UUID(value["uncertainty_channel"]) - )[ - 0 - ].copy( - parent=data_object, copy_children=False + param_dict[comp + "_uncertainty"] = ( + self.workspace.get_entity( + uuid.UUID(value["uncertainty_channel"]) + )[0].copy(parent=data_object, copy_children=False) ) else: param_dict[comp + "_channel_bool"] = False @@ -1429,18 +1394,6 @@ def get_inversion_params_dict( ) ) - # Move radar data to current workspace - if is_uuid(update_dict["receivers_radar_drape"]): - param_dict["receivers_radar_drape"] = self.workspace.get_entity( - uuid.UUID(update_dict["receivers_radar_drape"]) - )[0] - if ( - param_dict["receivers_radar_drape"] is not None - and new_workspace.get_entity(param_dict["receivers_radar_drape"].uid)[0] - is None - ): - param_dict["receivers_radar_drape"].copy(parent=data_object) - # Move topography object and data into current workspace obj = self.workspace.get_entity(uuid.UUID(update_dict["topography_object"]))[0] param_dict["topography_object"] = new_workspace.get_entity(obj.uid)[0] @@ -1616,9 +1569,6 @@ def write_trigger( # Get dict of params from base dash application update_dict = { - "z_from_topo": z_from_topo, - "receivers_offset_z": receivers_offset_z, - "receivers_radar_drape": receivers_radar_drape, "forward_only": forward_only, "alpha_s": alpha_s, "length_scale_x": length_scale_x, @@ -1676,11 +1626,9 @@ def write_trigger( # Copy data object to workspace data_object = self.workspace.get_entity(uuid.UUID(data_object))[0] - param_dict["data_object"] = workspace.get_entity(data_object.uid)[0] - if param_dict["data_object"] is None: - param_dict["data_object"] = data_object.copy( - parent=workspace, copy_children=False - ) + param_dict["data_object"] = data_object.copy( + parent=workspace, copy_children=False + ) # Add inversion specific params to param_dict param_dict.update( @@ -1692,17 +1640,35 @@ def write_trigger( if self._inversion_type == "dcip": resolution = None # No downsampling for dcip + window_options = WindowOptions( + center_x=window_center_x, + center_y=window_center_y, + width=window_width, + height=window_height, + azimuth=0.0, + ) + + if receivers_radar_drape is not None: + receivers_radar_drape = self.workspace.get_entity( + uuid.UUID(receivers_radar_drape) + )[0] + + drape_options = DrapeOptions( + topography_object=param_dict["topography_object"], + topography=param_dict["topography"], + z_from_topo=z_from_topo, + receivers_offset_z=receivers_offset_z, + receivers_radar_drape=receivers_radar_drape, + ) + # Pre-processing update_dict = preprocess_data( - workspace=workspace, - param_dict=param_dict, + workspace, + param_dict, + param_dict["data_object"], + window_options, + drape_options=drape_options, resolution=resolution, - data_object=param_dict["data_object"], - window_center_x=window_center_x, - window_center_y=window_center_y, - window_width=window_width, - window_height=window_height, - window_azimuth=0.0, ignore_values=ignore_values, detrend_type=detrend_type, detrend_order=detrend_order, @@ -1715,7 +1681,7 @@ def write_trigger( path=monitoring_directory, ) - return ["\nSaved to " + str(Path(monitoring_directory).resolve())] + return ["\nSaved to " + str(Path(monitoring_directory).resolve() / temp_geoh5)] def trigger_click(self, _): """ diff --git a/geoapps/inversion/base_inversion_layout.py b/geoapps/inversion/base_inversion_layout.py index a33074b4f..c6eea1231 100644 --- a/geoapps/inversion/base_inversion_layout.py +++ b/geoapps/inversion/base_inversion_layout.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from dash import dcc, html from plotly import graph_objects as go diff --git a/geoapps/inversion/components/__init__.py b/geoapps/inversion/components/__init__.py deleted file mode 100644 index bd7fda97c..000000000 --- a/geoapps/inversion/components/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from .data import InversionData -from .meshes import InversionMesh -from .models import InversionModel, InversionModelCollection -from .topography import InversionTopography -from .windows import InversionWindow diff --git a/geoapps/inversion/components/data.py b/geoapps/inversion/components/data.py deleted file mode 100644 index fc34d3232..000000000 --- a/geoapps/inversion/components/data.py +++ /dev/null @@ -1,509 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=W0221 -# pylint: disable=W0622 - -from __future__ import annotations - -from typing import TYPE_CHECKING, Any - -if TYPE_CHECKING: - from geoh5py.workspace import Workspace - from geoapps.inversion.params import InversionBaseParams - -from copy import deepcopy - -import numpy as np -from discretize import TreeMesh -from scipy.spatial import cKDTree -from SimPEG import maps -from SimPEG.electromagnetics.static.utils.static_utils import geometric_factor - -from geoapps.inversion.utils import create_nested_mesh -from geoapps.shared_utils.utils import drape_2_tensor - -from .factories import ( - EntityFactory, - SaveIterationGeoh5Factory, - SimulationFactory, - SurveyFactory, -) -from .locations import InversionLocations - - -class InversionData(InversionLocations): - """ - Retrieve and store data from the workspace and apply transformations. - - Parameters - --------- - - offset : - Static receivers location offsets. - radar : - Radar channel address used to drape receiver locations over topography. - locations : - Data locations. - mask : - Mask accumulated by windowing and downsampling operations and applied - to locations and data on initialization. - vector : - True if models are vector valued. - n_blocks : - Number of blocks if vector. - components : - Component names. - observed : - Components and associated observed geophysical data. - predicted : - Components and associated predicted geophysical data. - uncertainties : - Components and associated data uncertainties. - normalizations : - Data normalizations. - - Methods - ------- - - survey(local_index=None) : - Generates SimPEG survey object. - simulation(mesh, active_cells, local_index=None, tile_id=None) : - Generates SimPEG simulation object. - - """ - - def __init__(self, workspace: Workspace, params: InversionBaseParams): - """ - :param: workspace: :obj`geoh5py.workspace.Workspace` workspace object containing location based data. - :param: params: Params object containing location based data parameters. - """ - super().__init__(workspace, params) - self.offset: list[float] | None = None - self.radar: np.ndarray | None = None - self.locations: np.ndarray | None = None - self.mask: np.ndarray | None = None - self.indices: np.ndarray | None = None - self.vector: bool | None = None - self.n_blocks: int | None = None - self.components: list[str] | None = None - self.observed: dict[str, np.ndarray] = {} - self.predicted: dict[str, np.ndarray] = {} - self.uncertainties: dict[str, np.ndarray] = {} - self.normalizations: dict[str, Any] = {} - self.transformations: dict[str, Any] = {} - self.entity = None - self.data_entity = None - self._observed_data_types = {} - self.survey = None - - self._initialize() - - def _initialize(self) -> None: - """Extract data from the workspace using params data.""" - self.vector = True if self.params.inversion_type == "magnetic vector" else False - self.n_blocks = 3 if self.params.inversion_type == "magnetic vector" else 1 - self.components, self.observed, self.uncertainties = self.get_data() - self.has_tensor = InversionData.check_tensor(self.components) - self.offset, self.radar = self.params.offset() - self.locations = super().get_locations(self.params.data_object) - - if ( - getattr(self.params, "line_id", None) is not None - and getattr(self.params, "line_object", None) is not None - ): - self.mask = self.params.line_object.values == self.params.line_id - else: - self.mask = np.ones(len(self.locations), dtype=bool) - - if self.radar is not None and any(np.isnan(self.radar)): - self.mask[np.isnan(self.radar)] = False - - self.observed = self.filter(self.observed) - self.radar = self.filter(self.radar) - self.uncertainties = self.filter(self.uncertainties) - - self.normalizations = self.get_normalizations() - self.observed = self.normalize(self.observed) - self.uncertainties = self.normalize(self.uncertainties, absolute=True) - self.entity = self.write_entity() - self.params.data_object = self.entity - self.locations = super().get_locations(self.entity) - self.survey, self.local_index, _ = self.create_survey() - - if "direct current" in self.params.inversion_type: - self.transformations["apparent resistivity"] = 1 / ( - geometric_factor(self.survey)[np.argsort(self.local_index)] + 1e-10 - ) - - self.save_data(self.entity) - - def drape_locations(self, locations: np.ndarray) -> np.ndarray: - """ - Return pseudo locations along line in distance, depth. - - The horizontal distance is referenced to first node of the core mesh. - - """ - local_tensor = drape_2_tensor(self.params.mesh) - - # Interpolate distance assuming always inside the mesh trace - tree = cKDTree(self.params.mesh.prisms[:, :2]) - rad, ind = tree.query(locations[:, :2], k=2) - distance_interp = 0.0 - for ii in range(2): - distance_interp += local_tensor.cell_centers_x[ind[:, ii]] / ( - rad[:, ii] + 1e-8 - ) - - distance_interp /= ((rad + 1e-8) ** -1.0).sum(axis=1) - - return np.c_[distance_interp, locations[:, 2:]] - - def filter(self, a): - """Remove vertices based on mask property.""" - if self.indices is None: - self.indices = np.where(self.mask)[0] - - a = super().filter(a, mask=self.indices) - - return a - - def get_data(self) -> tuple[list, dict, dict]: - """ - Get all data and uncertainty components and possibly set infinite uncertainties. - - :return: components: list of data components sorted in the - order of self.observed.keys(). - :return: data: Dictionary of components and associated data - :return: uncertainties: Dictionary of components and - associated uncertainties. - """ - - components = self.params.components() - data = {} - uncertainties = {} - - for comp in components: - data.update({comp: self.params.data(comp)}) - uncertainties.update({comp: self.params.uncertainty(comp)}) - - return list(data.keys()), data, uncertainties - - def write_entity(self): - """Write out the survey to geoh5""" - entity_factory = EntityFactory(self.params) - entity = entity_factory.build(self) - - return entity - - def save_data(self, entity): - """Write out the data to geoh5""" - data = self.predicted if self.params.forward_only else self.observed - basename = "Predicted" if self.params.forward_only else "Observed" - self._observed_data_types = {c: {} for c in data.keys()} - data_dict = {c: {} for c in data.keys()} - uncert_dict = {c: {} for c in data.keys()} - - if self.params.inversion_type in ["magnetotellurics", "tipper", "tdem", "fem"]: - for component, channels in data.items(): - for ind, (channel, values) in enumerate(channels.items()): - dnorm = values / self.normalizations[channel][component] - data_channel = entity.add_data( - {f"{basename}_{component}_[{ind}]": {"values": dnorm}} - ) - data_dict[component] = entity.add_data_to_group( - data_channel, f"{basename}_{component}" - ) - if not self.params.forward_only: - self._observed_data_types[component][ - f"[{ind}]" - ] = data_channel.entity_type - uncerts = np.abs( - self.uncertainties[component][channel].copy() - / self.normalizations[channel][component] - ) - uncerts[np.isinf(uncerts)] = np.nan - uncert_entity = entity.add_data( - {f"Uncertainties_{component}_[{ind}]": {"values": uncerts}} - ) - uncert_dict[component] = entity.add_data_to_group( - uncert_entity, f"Uncertainties_{component}" - ) - else: - for component in data: - dnorm = data[component] / self.normalizations[None][component] - data_dict[component] = entity.add_data( - {f"{basename}_{component}": {"values": dnorm}} - ) - - if not self.params.forward_only: - self._observed_data_types[component] = data_dict[ - component - ].entity_type - uncerts = np.abs( - self.uncertainties[component].copy() - / self.normalizations[None][component] - ) - uncerts[np.isinf(uncerts)] = np.nan - - uncert_dict[component] = entity.add_data( - {f"Uncertainties_{component}": {"values": uncerts}} - ) - - if "direct current" in self.params.inversion_type: - apparent_property = data[component].copy() - apparent_property *= self.transformations["apparent resistivity"] - - data_dict["apparent_resistivity"] = entity.add_data( - { - f"{basename}_apparent_resistivity": { - "values": apparent_property, - "association": "CELL", - } - } - ) - - self.update_params(data_dict, uncert_dict) - - def apply_transformations(self, locations: np.ndarray): - """Apply all coordinate transformations to locations""" - if self.params.z_from_topo: - locations = super().set_z_from_topo(locations) - if self.offset is not None: - locations = self.displace(locations, self.offset) - if self.radar is not None: - locations = self.drape(locations, self.radar) - - return locations - - def displace(self, locs: np.ndarray, offset: np.ndarray) -> np.ndarray: - """Offset data locations in all three dimensions.""" - if locs is None: - return None - else: - return locs + offset if offset is not None else 0 - - def drape(self, locs: np.ndarray, radar_offset: np.ndarray) -> np.ndarray: - """Drape data locations using radar channel offsets.""" - - if locs is None: - return None - - radar_offset_pad = np.zeros((len(radar_offset), 3)) - radar_offset_pad[:, 2] = radar_offset - - return self.displace(locs, radar_offset_pad) - - def normalize( - self, data: dict[str, np.ndarray], absolute=False - ) -> dict[str, np.ndarray]: - """ - Apply data type specific normalizations to data. - - Calling normalize will apply the normalization to the data AND append - to the normalizations attribute list the value applied to the data. - - :param: data: Components and associated geophysical data. - - :return: d: Normalized data. - """ - d = deepcopy(data) - for chan in getattr(self.params.data_object, "channels", [None]): - for comp in self.components: - if isinstance(d[comp], dict): - if d[comp][chan] is not None: - d[comp][chan] *= self.normalizations[chan][comp] - if absolute: - d[comp][chan] = np.abs(d[comp][chan]) - elif d[comp] is not None: - d[comp] *= self.normalizations[chan][comp] - if absolute: - d[comp] = np.abs(d[comp]) - - return d - - def get_normalizations(self): - """Create normalizations dictionary.""" - normalizations = {} - for chan in getattr(self.params.data_object, "channels", [None]): - normalizations[chan] = {} - for comp in self.components: - normalizations[chan][comp] = np.ones(self.mask.sum()) - if comp in ["potential", "chargeability"]: - normalizations[chan][comp] = 1 - if comp in ["gz", "bz", "gxz", "gyz", "bxz", "byz"]: - normalizations[chan][comp] = -1 * np.ones(self.mask.sum()) - elif self.params.inversion_type in ["magnetotellurics"]: - normalizations[chan][comp] = -1 * np.ones(self.mask.sum()) - elif self.params.inversion_type in ["tipper"]: - if "imag" in comp: - normalizations[chan][comp] = -1 * np.ones(self.mask.sum()) - elif self.params.inversion_type in ["fem"]: - mu0 = 4 * np.pi * 1e-7 - offsets = self.params.tx_offsets - offsets = { - k: v * np.ones(len(self.locations)) for k, v in offsets.items() - } - normalizations[chan][comp] = ( - mu0 * (-1 / offsets[chan] ** 3 / (4 * np.pi)) / 1e6 - ) - elif self.params.inversion_type in ["tdem"]: - if comp in ["x", "z"]: - normalizations[chan][comp] = -1 - normalizations[chan][comp] *= np.ones(self.mask.sum()) - - return normalizations - - def create_survey( - self, - mesh: TreeMesh | None = None, - local_index: np.ndarray | None = None, - channel=None, - ): - """ - Generates SimPEG survey object. - - :param: local_index (Optional): Indices of the data belonging to a - particular tile in case of a tiled inversion. - - :return: survey: SimPEG Survey class that covers all data or optionally - the portion of the data indexed by the local_index argument. - :return: local_index: receiver indices belonging to a particular tile. - """ - - survey_factory = SurveyFactory(self.params) - survey = survey_factory.build( - data=self, - mesh=mesh, - local_index=local_index, - channel=channel, - ) - - return survey - - def simulation( - self, - mesh: TreeMesh, - active_cells: np.ndarray, - survey, - models, - tile_id: int | None = None, - padding_cells: int = 6, - ): - """ - Generates SimPEG simulation object. - - :param: mesh: inversion mesh. - :param: active_cells: Mask that reduces model to active (earth) cells. - :param: survey: SimPEG survey object. - :param: tile_id (Optional): Id associated with the tile covered by - the survey in case of a tiled inversion. - - :return: sim: SimPEG simulation object for full data or optionally - the portion of the data indexed by the local_index argument. - :return: map: If local_index and tile_id is provided, the returned - map will maps from local to global data. If no local_index or - tile_id is provided map will simply be an identity map with no - effect of the data. - """ - simulation_factory = SimulationFactory(self.params) - - if tile_id is None or "2d" in self.params.inversion_type: - mapping = maps.IdentityMap(nP=int(self.n_blocks * active_cells.sum())) - sim = simulation_factory.build( - survey=survey, - global_mesh=mesh, - active_cells=active_cells, - mapping=mapping, - ) - - else: - nested_mesh = create_nested_mesh( - survey, - mesh, - minimum_level=3, - padding_cells=padding_cells, - ) - mapping = maps.TileMap( - mesh, - active_cells, - nested_mesh, - enforce_active=True, - components=3 if self.vector else 1, - ) - sim = simulation_factory.build( - survey=survey, - receivers=self.entity, - global_mesh=mesh, - local_mesh=nested_mesh, - active_cells=mapping.local_active, - mapping=mapping, - tile_id=tile_id, - ) - - if "induced polarization" in self.params.inversion_type: - if "2d" in self.params.inversion_type: - proj = maps.InjectActiveCells(mesh, active_cells, valInactive=1e-8) - else: - proj = maps.InjectActiveCells( - nested_mesh, mapping.local_active, valInactive=1e-8 - ) - - # TODO this should be done in the simulation factory - sim.sigma = proj * mapping * models.conductivity - - return sim, mapping - - def simulate(self, model, inverse_problem, sorting, ordering): - """Simulate fields for a particular model.""" - dpred = inverse_problem.get_dpred( - model, compute_J=False if self.params.forward_only else True - ) - if self.params.forward_only: - save_directive = SaveIterationGeoh5Factory(self.params).build( - inversion_object=self, - sorting=np.argsort(np.hstack(sorting)), - ordering=ordering, - ) - save_directive.save_components(0, dpred) - - inverse_problem.dpred = dpred - - @property - def observed_data_types(self): - """ - Stored data types - """ - return self._observed_data_types - - @staticmethod - def check_tensor(channels): - tensor_components = ["xx", "xy", "xz", "yx", "zx", "yy", "zz", "zy", "yz"] - has_tensor = lambda c: any(k in c for k in tensor_components) - return any(has_tensor(c) for c in channels) - - def update_params(self, data_dict, uncert_dict): - """ - Update pointers to newly created object and data. - """ - - components = self.params.components() - self.params.data_object = self.entity - - for comp in components: - if getattr(self.params, "_".join([comp, "channel"]), None) is None: - continue - - setattr(self.params, f"{comp}_channel", data_dict[comp]) - setattr(self.params, f"{comp}_uncertainty", uncert_dict[comp]) - - if getattr(self.params, "line_object", None) is not None: - new_line = self.params.line_object.copy( - parent=self.entity, values=self.params.line_object.values[self.mask] - ) - self.params.line_object = new_line diff --git a/geoapps/inversion/components/factories/__init__.py b/geoapps/inversion/components/factories/__init__.py deleted file mode 100644 index 437d1a9ef..000000000 --- a/geoapps/inversion/components/factories/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from .directives_factory import DirectivesFactory, SaveIterationGeoh5Factory -from .entity_factory import EntityFactory -from .misfit_factory import MisfitFactory -from .simulation_factory import SimulationFactory -from .survey_factory import SurveyFactory, receiver_group diff --git a/geoapps/inversion/components/factories/abstract_factory.py b/geoapps/inversion/components/factories/abstract_factory.py deleted file mode 100644 index 2e5ce0256..000000000 --- a/geoapps/inversion/components/factories/abstract_factory.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from abc import ABC, abstractmethod - - -class AbstractFactory(ABC): - def __init__(self, params): - self.params = params - super().__init__() - - @property - @abstractmethod - def factory_type(self): - """Returns type used to switch concrete build methods.""" - - @property - @abstractmethod - def concrete_object(self): - """Returns a class to be constructed by the build method.""" - - @abstractmethod - def build(self, *args): - """Constructs concrete object for provided factory type.""" diff --git a/geoapps/inversion/components/factories/directives_factory.py b/geoapps/inversion/components/factories/directives_factory.py deleted file mode 100644 index 8978c8b62..000000000 --- a/geoapps/inversion/components/factories/directives_factory.py +++ /dev/null @@ -1,565 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=W0613 -# pylint: disable=W0221 - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import numpy as np -from SimPEG import directives, maps -from SimPEG.utils.mat_utils import cartesian2amplitude_dip_azimuth - -from .simpeg_factory import SimPEGFactory - -if TYPE_CHECKING: - from ...driver import InversionDriver - - -class DirectivesFactory: - def __init__(self, driver: InversionDriver): - self.driver = driver - self.params = driver.params - self.factory_type = self.driver.params.inversion_type - self._directive_list: list[directives.InversionDirective] | None = None - self._vector_inversion_directive = None - self._update_sensitivity_weights_directive = None - self._update_irls_directive = None - self._beta_estimate_by_eigenvalues_directive = None - self._update_preconditioner_directive = None - self._save_iteration_model_directive = None - self._save_iteration_data_directive = None - self._save_iteration_residual_directive = None - self._save_iteration_apparent_resistivity_directive = None - - @property - def beta_estimate_by_eigenvalues_directive(self): - """""" - if ( - self.params.initial_beta is None - and self._beta_estimate_by_eigenvalues_directive is None - ): - self._beta_estimate_by_eigenvalues_directive = ( - directives.BetaEstimate_ByEig( - beta0_ratio=self.params.initial_beta_ratio, method="ratio" - ) - ) - - return self._beta_estimate_by_eigenvalues_directive - - @property - def directive_list(self): - """List of directives to be used in inversion.""" - if self._directive_list is None: - self._directive_list = self.save_directives - - if not self.params.forward_only: - self._directive_list += self.inversion_directives - - return self._directive_list - - @directive_list.setter - def directive_list(self, value): - if not all( - isinstance(directive, directives.InversionDirective) for directive in value - ): - raise TypeError( - "All directives must be of type SimPEG.directives.InversionDirective" - ) - - self._directive_list = value - - @property - def inversion_directives(self): - """List of directives that control the inverse.""" - directives_list = [] - for directive in [ - "vector_inversion_directive", - "update_irls_directive", - "update_sensitivity_weights_directive", - "beta_estimate_by_eigenvalues_directive", - "update_preconditioner_directive", - ]: - if getattr(self, directive) is not None: - directives_list.append(getattr(self, directive)) - return directives_list - - @property - def save_directives(self): - """List of directives to save iteration data and models.""" - directives_list = [] - for directive in [ - "save_iteration_model_directive", - "save_iteration_data_directive", - "save_iteration_residual_directive", - "save_iteration_apparent_resistivity_directive", - ]: - if getattr(self, directive) is not None: - directives_list.append(getattr(self, directive)) - return directives_list - - @property - def save_iteration_apparent_resistivity_directive(self): - """""" - if ( - self._save_iteration_apparent_resistivity_directive is None - and "direct current" in self.factory_type - ): - self._save_iteration_apparent_resistivity_directive = ( - SaveIterationGeoh5Factory(self.params).build( - inversion_object=self.driver.inversion_data, - active_cells=self.driver.models.active_cells, - sorting=np.argsort(np.hstack(self.driver.sorting)), - name="Apparent Resistivity", - ) - ) - return self._save_iteration_apparent_resistivity_directive - - @property - def save_iteration_data_directive(self): - """""" - if self._save_iteration_data_directive is None: - self._save_iteration_data_directive = SaveIterationGeoh5Factory( - self.params - ).build( - inversion_object=self.driver.inversion_data, - active_cells=self.driver.models.active_cells, - sorting=np.argsort(np.hstack(self.driver.sorting)), - ordering=self.driver.ordering, - global_misfit=self.driver.data_misfit, - name="Data", - ) - return self._save_iteration_data_directive - - @property - def save_iteration_model_directive(self): - """""" - if self._save_iteration_model_directive is None: - self._save_iteration_model_directive = SaveIterationGeoh5Factory( - self.params - ).build( - inversion_object=self.driver.inversion_mesh, - active_cells=self.driver.models.active_cells, - save_objective_function=True, - name="Model", - ) - return self._save_iteration_model_directive - - @property - def save_iteration_residual_directive(self): - """""" - if ( - self._save_iteration_residual_directive is None - and self.factory_type not in ["tdem", "fem"] - ): - self._save_iteration_residual_directive = SaveIterationGeoh5Factory( - self.params - ).build( - inversion_object=self.driver.inversion_data, - active_cells=self.driver.models.active_cells, - sorting=np.argsort(np.hstack(self.driver.sorting)), - ordering=self.driver.ordering, - name="Residual", - ) - return self._save_iteration_residual_directive - - @property - def update_irls_directive(self): - """Directive to update IRLS.""" - if self._update_irls_directive is None: - has_chi_start = self.params.starting_chi_factor is not None - self._update_irls_directive = directives.Update_IRLS( - f_min_change=self.params.f_min_change, - max_irls_iterations=self.params.max_irls_iterations, - max_beta_iterations=self.params.max_global_iterations, - beta_tol=self.params.beta_tol, - prctile=self.params.prctile, - coolingRate=self.params.coolingRate, - coolingFactor=self.params.coolingFactor, - coolEps_q=self.params.coolEps_q, - coolEpsFact=self.params.coolEpsFact, - beta_search=self.params.beta_search, - chifact_start=self.params.starting_chi_factor - if has_chi_start - else self.params.chi_factor, - chifact_target=self.params.chi_factor, - ) - return self._update_irls_directive - - @property - def update_preconditioner_directive(self): - """""" - if self._update_preconditioner_directive is None: - self._update_preconditioner_directive = directives.UpdatePreconditioner() - - return self._update_preconditioner_directive - - @property - def update_sensitivity_weights_directive(self): - if self._update_sensitivity_weights_directive is None: - self._update_sensitivity_weights_directive = ( - directives.UpdateSensitivityWeights( - every_iteration=self.params.every_iteration_bool, - threshold_value=self.params.sens_wts_threshold / 100.0, - ) - ) - - return self._update_sensitivity_weights_directive - - @property - def vector_inversion_directive(self): - """Directive to update vector model.""" - if self._vector_inversion_directive is None and "vector" in self.factory_type: - self._vector_inversion_directive = directives.VectorInversion( - [objective.simulation for objective in self.driver.data_misfit.objfcts], - self.driver.regularization, - chifact_target=self.driver.params.chi_factor * 2, - ) - return self._vector_inversion_directive - - -class SaveIterationGeoh5Factory(SimPEGFactory): - def __init__(self, params): - super().__init__(params) - self.simpeg_object = self.concrete_object() - - def concrete_object(self): - return directives.SaveIterationsGeoH5 - - def assemble_arguments( - self, - inversion_object=None, - active_cells=None, - sorting=None, - ordering=None, - transform=None, - save_objective_function=False, - global_misfit=None, - name=None, - ): - return [inversion_object.entity] - - def assemble_keyword_arguments( - self, - inversion_object=None, - active_cells=None, - sorting=None, - ordering=None, - transform=None, - save_objective_function=False, - global_misfit=None, - name=None, - ): - object_type = "mesh" if hasattr(inversion_object, "mesh") else "data" - - if object_type == "data": - if self.factory_type in ["magnetotellurics", "tipper"]: - kwargs = self.assemble_data_keywords_naturalsource( - inversion_object=inversion_object, - active_cells=active_cells, - sorting=sorting, - ordering=ordering, - transform=transform, - save_objective_function=save_objective_function, - global_misfit=global_misfit, - name=name, - ) - - elif self.factory_type in ["fem", "tdem"]: - kwargs = self.assemble_data_keywords_em( - inversion_object=inversion_object, - active_cells=active_cells, - sorting=sorting, - ordering=ordering, - transform=transform, - save_objective_function=save_objective_function, - global_misfit=global_misfit, - name=name, - ) - - elif self.factory_type in [ - "direct current 3d", - "direct current 2d", - "induced polarization 3d", - "induced polarization 2d", - ]: - kwargs = self.assemble_data_keywords_dcip( - inversion_object=inversion_object, - active_cells=active_cells, - sorting=sorting, - transform=transform, - save_objective_function=save_objective_function, - global_misfit=global_misfit, - name=name, - ) - - elif self.factory_type in ["gravity", "magnetic scalar", "magnetic vector"]: - kwargs = self.assemble_data_keywords_potential_fields( - inversion_object=inversion_object, - active_cells=active_cells, - sorting=sorting, - transform=transform, - save_objective_function=save_objective_function, - global_misfit=global_misfit, - name=name, - ) - else: - return None - - if transform is not None: - kwargs["transforms"].append(transform) - - else: - active_cells_map = maps.InjectActiveCells( - inversion_object.mesh, active_cells, np.nan - ) - sorting = inversion_object.permutation # pylint: disable=W0212 - - kwargs = { - "save_objective_function": save_objective_function, - "label": "model", - "association": "CEll", - "sorting": sorting, - "transforms": [active_cells_map], - } - - if self.factory_type == "magnetic vector": - kwargs["channels"] = ["amplitude", "inclination", "declination"] - kwargs["transforms"] = [ - cartesian2amplitude_dip_azimuth, - active_cells_map, - ] - - if self.factory_type in [ - "direct current 3d", - "direct current 2d", - "magnetotellurics", - "tipper", - "tdem", - "fem", - ]: - expmap = maps.ExpMap(inversion_object.mesh) - kwargs["transforms"] = [expmap * active_cells_map] - - return kwargs - - @staticmethod - def assemble_data_keywords_potential_fields( - inversion_object=None, - active_cells=None, - sorting=None, - transform=None, - save_objective_function=False, - global_misfit=None, - name=None, - ): - components = list(inversion_object.observed) - channels = [None] - kwargs = { - "save_objective_function": save_objective_function, - "attribute_type": "predicted", - "data_type": { - comp: {channel: dtype for channel in channels} - for comp, dtype in inversion_object.observed_data_types.items() - }, - "transforms": [ - np.hstack( - [ - inversion_object.normalizations[chan][comp] - for chan in channels - for comp in components - ] - ) - ], - "channels": channels, - "components": components, - "association": "VERTEX", - "reshape": lambda x: x.reshape( - (len(channels), len(components), -1), order="F" - ), - } - if sorting is not None: - kwargs["sorting"] = np.hstack(sorting) - - if name == "Residual": - kwargs["label"] = name - data = inversion_object.normalize(inversion_object.observed) - - def potfield_transform(x): - data_stack = np.row_stack(list(data.values())) - data_stack = data_stack[:, np.argsort(sorting)] - return data_stack.ravel() - x - - kwargs.pop("data_type") - kwargs["transforms"].append(potfield_transform) - - return kwargs - - def assemble_data_keywords_dcip( - self, - inversion_object=None, - active_cells=None, - sorting=None, - transform=None, - save_objective_function=False, - global_misfit=None, - name=None, - ): - components = list(inversion_object.observed) - channels = [""] - is_dc = True if "direct current" in self.factory_type else False - component = "dc" if is_dc else "ip" - kwargs = { - "save_objective_function": save_objective_function, - "attribute_type": "predicted", - "data_type": { - comp: {channel: dtype for channel in channels} - for comp, dtype in inversion_object.observed_data_types.items() - }, - "transforms": [ - np.hstack( - [inversion_object.normalizations[None][c] for c in components] - ) - ], - "channels": channels, - "components": [component], - "reshape": lambda x: x.reshape( - (len(channels), len(components), -1), order="F" - ), - "association": "CELL", - } - - if sorting is not None: - kwargs["sorting"] = np.hstack(sorting) - - if is_dc and name == "Apparent Resistivity": - kwargs["transforms"].insert( - 0, - inversion_object.transformations["apparent resistivity"][ - np.argsort(sorting) - ], - ) - kwargs["channels"] = ["apparent_resistivity"] - observed = self.params.geoh5.get_entity("Observed_apparent_resistivity")[0] - if observed is not None: - kwargs["data_type"] = { - component: {"apparent_resistivity": observed.entity_type} - } - - if name == "Residual": - kwargs["label"] = name - data = inversion_object.normalize(inversion_object.observed) - - def dcip_transform(x): - data_stack = np.row_stack(list(data.values())).ravel() - sorting_stack = np.tile(np.argsort(sorting), len(data)) - return data_stack[sorting_stack] - x - - kwargs["transforms"].insert(0, dcip_transform) - kwargs.pop("data_type") - - return kwargs - - def assemble_data_keywords_naturalsource( - self, - inversion_object=None, - active_cells=None, - sorting=None, - ordering=None, - transform=None, - save_objective_function=False, - global_misfit=None, - name=None, - ): - components = list(inversion_object.observed) - channels = np.unique([list(v) for k, v in inversion_object.observed.items()]) - - kwargs = { - "save_objective_function": save_objective_function, - "attribute_type": "predicted", - "data_type": inversion_object.observed_data_types, - "association": "VERTEX", - "transforms": [ - np.hstack( - [ - inversion_object.normalizations[chan][comp] - for chan in channels - for comp in components - ] - ) - ], - "channels": [f"[{ind}]" for ind in range(len(channels))], - "components": components, - "reshape": lambda x: x.reshape((len(channels), len(components), -1)), - } - - if sorting is not None: - kwargs["sorting"] = np.hstack(sorting) - - if name == "Residual": - kwargs["label"] = name - obs = inversion_object.normalize(inversion_object.observed) - data = {} - for f in channels: - for c in components: - data["_".join([str(f), str(c)])] = obs[c][f] - - def natsource_transform(x): - data_stack = np.row_stack(list(data.values())) - data_stack = data_stack[:, np.argsort(sorting)] - return data_stack.ravel() - x - - kwargs.pop("data_type") - kwargs["transforms"].append(natsource_transform) - - return kwargs - - def assemble_data_keywords_em( - self, - inversion_object=None, - active_cells=None, - sorting=None, - ordering=None, - transform=None, - save_objective_function=False, - global_misfit=None, - name=None, - ): - receivers = inversion_object.entity - channels = np.array(receivers.channels, dtype=float) - components = list(inversion_object.observed) - ordering = np.vstack(ordering) - channel_ids = ordering[:, 0] - component_ids = ordering[:, 1] - rx_ids = ordering[:, 2] - - def reshape(values): - data = np.zeros((len(channels), len(components), receivers.n_vertices)) - data[channel_ids, component_ids, rx_ids] = values - return data - - kwargs = { - "data_type": inversion_object.observed_data_types, - "attribute_type": "predicted", - "save_objective_function": save_objective_function, - "association": "VERTEX", - "transforms": np.hstack( - [ - 1 / inversion_object.normalizations[chan][comp] - for chan in channels - for comp in components - ] - ), - "channels": [f"[{ind}]" for ind, _ in enumerate(channels)], - "components": components, - "sorting": sorting, - "_reshape": reshape, - } - - return kwargs diff --git a/geoapps/inversion/components/factories/entity_factory.py b/geoapps/inversion/components/factories/entity_factory.py deleted file mode 100644 index 0881831c2..000000000 --- a/geoapps/inversion/components/factories/entity_factory.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# - -# pylint: disable=W0221 - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.inversion.components.data import InversionData - -import numpy as np -from geoh5py.objects import CurrentElectrode, Curve, Grid2D, Points, PotentialElectrode - -from geoapps.inversion.components.factories.abstract_factory import AbstractFactory - - -class EntityFactory(AbstractFactory): - def __init__(self, params): - self.params = params - super().__init__(params) - - @property - def factory_type(self): - """Returns inversion type used to switch concrete objects and build methods.""" - return self.params.inversion_type - - @property - def concrete_object(self): - """Returns a geoh5py object to be constructed by the build method.""" - if "current" in self.factory_type or "polarization" in self.factory_type: - return PotentialElectrode, CurrentElectrode - - elif isinstance(self.params.data_object, Grid2D): - return Points - - else: - return type(self.params.data_object) - - def build(self, inversion_data: InversionData): - """Constructs geoh5py object for provided inversion type.""" - - entity = self._build(inversion_data) - - return entity - - def _build(self, inversion_data: InversionData): - if isinstance(self.params.data_object, Grid2D): - entity = inversion_data.create_entity( - "Data", inversion_data.locations, geoh5_object=self.concrete_object - ) - - else: - kwargs = { - "parent": self.params.out_group, - "copy_children": False, - } - - if np.any(~inversion_data.mask): - if isinstance(self.params.data_object, PotentialElectrode): - active_poles = np.zeros( - self.params.data_object.n_vertices, dtype=bool - ) - active_poles[ - self.params.data_object.cells[inversion_data.mask, :].ravel() - ] = True - kwargs.update( - {"mask": active_poles, "cell_mask": inversion_data.mask} - ) - else: - kwargs.update({"mask": inversion_data.mask}) - - entity = self.params.data_object.copy(**kwargs) - entity.vertices = inversion_data.apply_transformations(entity.vertices) - - if getattr(entity, "transmitters", None) is not None: - entity.transmitters.vertices = inversion_data.apply_transformations( - entity.transmitters.vertices - ) - tx_freq = self.params.data_object.transmitters.get_data("Tx frequency") - if tx_freq: - tx_freq[0].copy(parent=entity.transmitters) - - if getattr(entity, "current_electrodes", None) is not None: - entity.current_electrodes.vertices = inversion_data.apply_transformations( - entity.current_electrodes.vertices - ) - - return entity - - @staticmethod - def _prune_from_indices(curve: Curve, cell_indices: np.ndarray): - cells = curve.cells[cell_indices] - uni_ids, ids = np.unique(cells, return_inverse=True) - locations = curve.vertices[uni_ids, :] - cells = np.arange(uni_ids.shape[0], dtype="uint32")[ids].reshape((-1, 2)) - return locations, cells diff --git a/geoapps/inversion/components/factories/misfit_factory.py b/geoapps/inversion/components/factories/misfit_factory.py deleted file mode 100644 index 31b78b8b7..000000000 --- a/geoapps/inversion/components/factories/misfit_factory.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.driver_base.params import BaseParams - -import numpy as np -from SimPEG import data, data_misfit, objective_function - -from .simpeg_factory import SimPEGFactory - - -class MisfitFactory(SimPEGFactory): - """Build SimPEG global misfit function.""" - - def __init__(self, params: BaseParams, models=None): - """ - :param params: Params object containing SimPEG object parameters. - """ - super().__init__(params) - self.simpeg_object = self.concrete_object() - self.factory_type = self.params.inversion_type - self.models = models - self.sorting = None - self.ordering = None - - def concrete_object(self): - return objective_function.ComboObjectiveFunction - - def build( - self, tiles, inversion_data, mesh, active_cells - ): # pylint: disable=arguments-differ - global_misfit = super().build( - tiles=tiles, - inversion_data=inversion_data, - mesh=mesh, - active_cells=active_cells, - ) - return global_misfit, self.sorting, self.ordering - - def assemble_arguments( # pylint: disable=arguments-differ - self, - tiles, - inversion_data, - mesh, - active_cells, - ): - # Base slice over frequencies - if self.factory_type in ["magnetotellurics", "tipper", "fem"]: - channels = np.unique([list(v) for v in inversion_data.observed.values()]) - else: - channels = [None] - - local_misfits = [] - self.sorting = [] - self.ordering = [] - padding_cells = 8 if self.factory_type in ["fem", "tdem"] else 6 - - # Keep whole mesh for 1 tile - if len(tiles) == 1: - padding_cells = 100 - - tile_num = 0 - data_count = 0 - for local_index in tiles: - for count, channel in enumerate(channels): - survey, local_index, ordering = inversion_data.create_survey( - mesh=mesh, local_index=local_index, channel=channel - ) - - if count == 0: - if self.factory_type in ["fem", "tdem"]: - self.sorting.append( - np.arange( - data_count, - data_count + len(local_index), - dtype=int, - ) - ) - data_count += len(local_index) - else: - self.sorting.append(local_index) - - local_sim, local_map = inversion_data.simulation( - mesh, - active_cells, - survey, - self.models, - tile_id=tile_num, - padding_cells=padding_cells, - ) - # TODO Parse workers to simulations - local_sim.workers = self.params.distributed_workers - local_data = data.Data(survey) - - if self.params.forward_only: - lmisfit = data_misfit.L2DataMisfit( - local_data, local_sim, model_map=local_map - ) - - else: - local_data.dobs = survey.dobs - local_data.standard_deviation = survey.std - lmisfit = data_misfit.L2DataMisfit( - data=local_data, - simulation=local_sim, - model_map=local_map, - ) - lmisfit.W = 1 / survey.std - - local_misfits.append(lmisfit) - self.ordering.append(ordering) - tile_num += 1 - - return [local_misfits] - - def assemble_keyword_arguments(self, **_): - """Implementation of abstract method from SimPEGFactory.""" - return {} diff --git a/geoapps/inversion/components/factories/receiver_factory.py b/geoapps/inversion/components/factories/receiver_factory.py deleted file mode 100644 index 6d99c28a9..000000000 --- a/geoapps/inversion/components/factories/receiver_factory.py +++ /dev/null @@ -1,202 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=W0613 -# pylint: disable=W0221 - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.driver_base.params import BaseParams - -import numpy as np - -from geoapps.shared_utils.utils import rotate_xyz - -from .simpeg_factory import SimPEGFactory - - -class ReceiversFactory(SimPEGFactory): - """Build SimPEG receivers objects based on factory type.""" - - def __init__(self, params: BaseParams): - """ - :param params: Params object containing SimPEG object parameters. - - """ - super().__init__(params) - self.simpeg_object = self.concrete_object() - - def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: - from SimPEG.potential_fields.magnetics import receivers - - return receivers.Point - - elif self.factory_type == "gravity": - from SimPEG.potential_fields.gravity import receivers - - return receivers.Point - - elif "direct current" in self.factory_type: - from SimPEG.electromagnetics.static.resistivity import receivers - - return receivers.Dipole - - elif "induced polarization" in self.factory_type: - from SimPEG.electromagnetics.static.induced_polarization import receivers - - return receivers.Dipole - - elif "fem" in self.factory_type: - from SimPEG.electromagnetics.frequency_domain import receivers - - return receivers.PointMagneticFluxDensitySecondary - - elif "tdem" in self.factory_type: - from SimPEG.electromagnetics.time_domain import receivers - - if self.params.data_units == "dB/dt (T/s)": - return receivers.PointMagneticFluxTimeDerivative - elif self.params.data_units == "B (T)": - return receivers.PointMagneticFluxDensity - else: - return receivers.PointMagneticField - - elif self.factory_type == "magnetotellurics": - from SimPEG.electromagnetics.natural_source import receivers - - return receivers.PointNaturalSource - - elif self.factory_type == "tipper": - from SimPEG.electromagnetics.natural_source import receivers - - return receivers.Point3DTipper - - def assemble_arguments( - self, locations=None, data=None, local_index=None, mesh=None, component=None - ): - """Provides implementations to assemble arguments for receivers object.""" - - args = [] - - if ( - "direct current" in self.factory_type - or "induced polarization" in self.factory_type - ): - args += self._dcip_arguments( - locations=locations, - local_index=local_index, - ) - - elif self.factory_type in ["magnetotellurics"]: - args += self._magnetotellurics_arguments( - locations=locations, - local_index=local_index, - mesh=mesh, - ) - - elif self.factory_type in ["tdem"]: - args += self._tdem_arguments( - data=data, - locations=locations, - local_index=local_index, - mesh=mesh, - ) - - else: - args.append(locations[local_index]) - - return args - - def assemble_keyword_arguments( - self, locations=None, data=None, local_index=None, mesh=None, component=None - ): - """Provides implementations to assemble keyword arguments for receivers object.""" - kwargs = {} - if self.factory_type in ["gravity", "magnetic scalar", "magnetic vector"]: - kwargs["components"] = list(data) - else: - kwargs["storeProjections"] = True - - if self.factory_type in ["fem", "magnetotellurics", "tipper"]: - comp = component.split("_")[0] - kwargs["orientation"] = comp[0] if self.factory_type == "fem" else comp[1:] - kwargs["component"] = component.split("_")[1] - if self.factory_type in ["tipper"]: - kwargs["orientation"] = kwargs["orientation"][::-1] - if self.factory_type in ["tdem"]: - kwargs["orientation"] = component - - return kwargs - - def build( - self, locations=None, data=None, local_index=None, mesh=None, component=None - ): - receivers = super().build( - locations=locations, - data=data, - local_index=local_index, - mesh=mesh, - component=component, - ) - - if ( - self.factory_type in ["tipper"] - and getattr(self.params.data_object, "base_stations", None) is not None - ): - stations = self.params.data_object.base_stations.vertices - if stations is not None: - if getattr(self.params.mesh, "rotation", None): - rotate_xyz( - stations, - self.params.mesh.origin.tolist(), - -1 * self.params.mesh.rotation[0], - ) - - if stations.shape[0] == 1: - stations = np.tile(stations.T, self.params.data_object.n_vertices).T - - receivers.reference_locations = stations[local_index, :] - - return receivers - - def _dcip_arguments(self, locations=None, local_index=None): - args = [] - local_index = np.vstack(local_index) - locations_m = locations[local_index[:, 0], :] - locations_n = locations[local_index[:, 1], :] - args.append(locations_m) - - if np.all(locations_m == locations_n): - if "direct current" in self.factory_type: - from SimPEG.electromagnetics.static.resistivity import receivers - else: - from SimPEG.electromagnetics.static.induced_polarization import ( - receivers, - ) - self.simpeg_object = receivers.Pole - else: - args.append(locations_n) - - return args - - def _tdem_arguments(self, data=None, locations=None, local_index=None, mesh=None): - return [ - locations, - np.asarray(data.entity.channels) * self.params.unit_conversion, - ] - - def _magnetotellurics_arguments(self, locations=None, local_index=None, mesh=None): - args = [] - locs = locations[local_index] - - args.append(locs) - - return args diff --git a/geoapps/inversion/components/factories/simpeg_factory.py b/geoapps/inversion/components/factories/simpeg_factory.py deleted file mode 100644 index 062bccc03..000000000 --- a/geoapps/inversion/components/factories/simpeg_factory.py +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from abc import ABC, abstractmethod -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.driver_base.params import BaseParams - -# TODO Redesign simpeg factory to avoid pylint arguments-differ complaint - - -class SimPEGFactory(ABC): - """ - Build SimPEG objects based on inversion type. - - Parameters - ---------- - params : - Driver parameters object. - factory_type : - Concrete factory type. - simpeg_object : - Abstract SimPEG object. - - Methods - ------- - assemble_arguments(): - Assemble arguments for SimPEG object instantiation. - assemble_keyword_arguments(): - Assemble keyword arguments for SimPEG object instantiation. - build(): - Generate SimPEG object with assembled arguments and keyword arguments. - """ - - valid_factory_types = [ - "gravity", - "magnetic scalar", - "magnetic vector", - "direct current pseudo 3d", - "direct current 3d", - "direct current 2d", - "induced polarization 3d", - "induced polarization 2d", - "induced polarization pseudo 3d", - "fem", - "tdem", - "magnetotellurics", - "tipper", - "joint surveys", - "joint cross gradient", - ] - - def __init__(self, params: BaseParams): - """ - :param params: Driver parameters object. - """ - self.params = params - self.factory_type: str = params.inversion_type - self.simpeg_object = None - - @property - def factory_type(self): - return self._factory_type - - @factory_type.setter - def factory_type(self, val): - if val not in self.valid_factory_types: - msg = f"Factory type: {val} not implemented yet." - raise NotImplementedError(msg) - else: - self._factory_type = val - - @abstractmethod - def concrete_object(self): - """To be over-ridden in factory implementations.""" - - @abstractmethod - def assemble_arguments(self, _) -> list: - """To be over-ridden in factory implementations.""" - - @abstractmethod - def assemble_keyword_arguments(self, **_) -> dict: - """To be over-ridden in factory implementations.""" - - def build(self, **kwargs): - """To be over-ridden in factory implementations.""" - - class_args = self.assemble_arguments(**kwargs) - class_kwargs = self.assemble_keyword_arguments(**kwargs) - return self.simpeg_object( # pylint: disable=not-callable - *class_args, **class_kwargs - ) diff --git a/geoapps/inversion/components/factories/simulation_factory.py b/geoapps/inversion/components/factories/simulation_factory.py deleted file mode 100644 index 824ca2fc5..000000000 --- a/geoapps/inversion/components/factories/simulation_factory.py +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=W0613 -# pylint: disable=W0221 - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.driver_base.params import BaseParams - -from pathlib import Path - -import numpy as np -from SimPEG import maps - -from .simpeg_factory import SimPEGFactory - - -class SimulationFactory(SimPEGFactory): - def __init__(self, params: BaseParams): - """ - :param params: Params object containing SimPEG object parameters. - - """ - super().__init__(params) - self.simpeg_object = self.concrete_object() - - if self.factory_type in [ - "direct current pseudo 3d", - "direct current 3d", - "direct current 2d", - "induced polarization 3d", - "induced polarization 2d", - "induced polarization pseudo 3d", - "magnetotellurics", - "tipper", - "fem", - "tdem", - ]: - import pymatsolver.direct as solver_module - - self.solver = solver_module.Pardiso - - def concrete_object(self): - if self.factory_type in ["magnetic scalar", "magnetic vector"]: - from SimPEG.potential_fields.magnetics import simulation - - return simulation.Simulation3DIntegral - - if self.factory_type == "gravity": - from SimPEG.potential_fields.gravity import simulation - - return simulation.Simulation3DIntegral - - if self.factory_type in ["direct current 3d", "direct current pseudo 3d"]: - from SimPEG.electromagnetics.static.resistivity import simulation - - return simulation.Simulation3DNodal - - if self.factory_type == "direct current 2d": - from SimPEG.electromagnetics.static.resistivity import simulation_2d - - return simulation_2d.Simulation2DNodal - - if self.factory_type in [ - "induced polarization 3d", - "induced polarization pseudo 3d", - ]: - from SimPEG.electromagnetics.static.induced_polarization import simulation - - return simulation.Simulation3DNodal - - if self.factory_type == "induced polarization 2d": - from SimPEG.electromagnetics.static.induced_polarization.simulation import ( - Simulation2DNodal, - ) - - return Simulation2DNodal - - if self.factory_type in ["magnetotellurics", "tipper"]: - from SimPEG.electromagnetics.natural_source import simulation - - return simulation.Simulation3DPrimarySecondary - - if self.factory_type in ["fem"]: - from SimPEG.electromagnetics.frequency_domain import simulation - - return simulation.Simulation3DMagneticFluxDensity - - if self.factory_type in ["tdem"]: - from SimPEG.electromagnetics.time_domain import simulation - - return simulation.Simulation3DMagneticFluxDensity - - def assemble_arguments( - self, - survey=None, - receivers=None, - global_mesh=None, - local_mesh=None, - active_cells=None, - mapping=None, - tile_id=None, - ): - mesh = global_mesh if tile_id is None else local_mesh - return [mesh] - - def assemble_keyword_arguments( - self, - survey=None, - receivers=None, - global_mesh=None, - local_mesh=None, - active_cells=None, - mapping=None, - tile_id=None, - ): - mesh = global_mesh if tile_id is None else local_mesh - sensitivity_path = self._get_sensitivity_path(tile_id) - - kwargs = {} - kwargs["survey"] = survey - kwargs["sensitivity_path"] = sensitivity_path - kwargs["max_chunk_size"] = self.params.max_chunk_size - kwargs["store_sensitivities"] = ( - None if self.params.forward_only else self.params.store_sensitivities - ) - - if self.factory_type == "magnetic vector": - return self._magnetic_vector_keywords(kwargs, active_cells=active_cells) - if self.factory_type == "magnetic scalar": - return self._magnetic_scalar_keywords(kwargs, active_cells=active_cells) - if self.factory_type == "gravity": - return self._gravity_keywords(kwargs, active_cells=active_cells) - if "induced polarization" in self.factory_type: - return self._induced_polarization_keywords( - kwargs, - mesh, - active_cells=active_cells, - ) - if self.factory_type in [ - "direct current 3d", - "direct current 2d", - "magnetotellurics", - "tipper", - "fem", - ]: - return self._conductivity_keywords(kwargs, mesh, active_cells=active_cells) - if self.factory_type in ["tdem"]: - return self._tdem_keywords( - kwargs, receivers, mesh, active_cells=active_cells - ) - - def _magnetic_vector_keywords(self, kwargs, active_cells=None): - kwargs["ind_active"] = active_cells - kwargs["chiMap"] = maps.IdentityMap(nP=int(active_cells.sum()) * 3) - kwargs["model_type"] = "vector" - kwargs["chunk_format"] = "row" - return kwargs - - def _magnetic_scalar_keywords(self, kwargs, active_cells=None): - kwargs["ind_active"] = active_cells - kwargs["chiMap"] = maps.IdentityMap(nP=int(active_cells.sum())) - kwargs["chunk_format"] = "row" - return kwargs - - def _gravity_keywords(self, kwargs, active_cells=None): - kwargs["ind_active"] = active_cells - kwargs["rhoMap"] = maps.IdentityMap(nP=int(active_cells.sum())) - kwargs["chunk_format"] = "row" - return kwargs - - def _induced_polarization_keywords( - self, - kwargs, - mesh, - active_cells=None, - ): - etamap = maps.InjectActiveCells(mesh, indActive=active_cells, valInactive=0) - kwargs["etaMap"] = etamap - kwargs["solver"] = self.solver - return kwargs - - def _conductivity_keywords(self, kwargs, mesh, active_cells=None): - actmap = maps.InjectActiveCells(mesh, active_cells, valInactive=np.log(1e-8)) - kwargs["sigmaMap"] = maps.ExpMap(mesh) * actmap - kwargs["solver"] = self.solver - return kwargs - - def _tdem_keywords(self, kwargs, receivers, mesh, active_cells=None): - kwargs = self._conductivity_keywords(kwargs, mesh, active_cells=active_cells) - kwargs["t0"] = -receivers.timing_mark * self.params.unit_conversion - kwargs["time_steps"] = ( - np.round((np.diff(np.unique(receivers.waveform[:, 0]))), decimals=6) - * self.params.unit_conversion - ) - return kwargs - - def _get_sensitivity_path(self, tile_id: int) -> str: - """Build path to destination of on-disk sensitivities.""" - out_dir = Path(self.params.workpath) / "SimPEG_PFInversion" - - if tile_id is None: - sens_path = out_dir / "Tile.zarr" - else: - sens_path = out_dir / f"Tile{tile_id}.zarr" - - return str(sens_path) diff --git a/geoapps/inversion/components/factories/source_factory.py b/geoapps/inversion/components/factories/source_factory.py deleted file mode 100644 index 3c249bdd2..000000000 --- a/geoapps/inversion/components/factories/source_factory.py +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.driver_base.params import BaseParams - -import numpy as np -from geoh5py.objects import LargeLoopGroundTEMReceivers - -from geoapps.shared_utils.utils import rotate_xyz - -from .simpeg_factory import SimPEGFactory - - -class SourcesFactory(SimPEGFactory): - """Build SimPEG sources objects based on factory type.""" - - def __init__(self, params: BaseParams): - """ - :param params: Params object containing SimPEG object parameters. - - """ - super().__init__(params) - self.simpeg_object = self.concrete_object() - - def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: - from SimPEG.potential_fields.magnetics import sources - - return sources.UniformBackgroundField - - elif self.factory_type == "gravity": - from SimPEG.potential_fields.gravity import sources - - return sources.SourceField - - elif "direct current" in self.factory_type: - from SimPEG.electromagnetics.static.resistivity import sources - - return sources.Dipole - - elif "induced polarization" in self.factory_type: - from SimPEG.electromagnetics.static.induced_polarization import sources - - return sources.Dipole - - elif "fem" in self.factory_type: - from SimPEG.electromagnetics.frequency_domain import sources - - return sources.MagDipole - - elif "tdem" in self.factory_type: - from SimPEG.electromagnetics.time_domain import sources - - if isinstance(self.params.data_object, LargeLoopGroundTEMReceivers): - return sources.LineCurrent - else: - return sources.MagDipole - - elif self.factory_type in ["magnetotellurics", "tipper"]: - from SimPEG.electromagnetics.natural_source import sources - - return sources.PlanewaveXYPrimary - - def assemble_arguments( - self, - receivers=None, - locations=None, - frequency=None, - waveform=None, - ): # pylint: disable=arguments-differ - """Provides implementations to assemble arguments for sources object.""" - - _ = waveform - args = [] - - if locations is not None and getattr(self.params.mesh, "rotation", None): - locations = rotate_xyz( - locations, - self.params.mesh.origin.tolist(), - -1 * self.params.mesh.rotation[0], - ) - - if self.factory_type in [ - "direct current pseudo 3d", - "direct current 3d", - "direct current 2d", - "induced polarization 3d", - "induced polarization 2d", - "induced polarization pseudo 3d", - ]: - args += self._dcip_arguments( - receivers=receivers, - locations=locations, - ) - - elif self.factory_type in ["fem", "magnetotellurics", "tipper"]: - args.append(receivers) - args.append(frequency) - - elif self.factory_type in ["tdem"]: - args.append(receivers) - - else: - args.append([receivers]) - - return args - - def assemble_keyword_arguments( # pylint: disable=arguments-differ - self, receivers=None, locations=None, frequency=None, waveform=None - ): - """Provides implementations to assemble keyword arguments for receivers object.""" - _ = (receivers, frequency) - kwargs = {} - if self.factory_type in ["magnetic scalar", "magnetic vector"]: - kwargs = dict( - zip( - ["amplitude", "inclination", "declination"], - self.params.inducing_field_aid(), - ) - ) - - if self.factory_type in ["magnetotellurics", "tipper"]: - kwargs["sigma_primary"] = [self.params.background_conductivity] - if self.factory_type in ["fem"]: - kwargs["location"] = locations - if self.factory_type in ["tdem"]: - kwargs["location"] = locations - kwargs["waveform"] = waveform - - return kwargs - - def build( - self, receivers=None, locations=None, frequency=None, waveform=None - ): # pylint: disable=arguments-differ - return super().build( - receivers=receivers, - locations=locations, - frequency=frequency, - waveform=waveform, - ) - - def _dcip_arguments(self, receivers=None, locations=None): - args = [] - - locations_a = locations[0] - locations_b = locations[1] - args.append([receivers]) - args.append(locations_a) - - if np.all(locations_a == locations_b): - if "direct current" in self.factory_type: - from SimPEG.electromagnetics.static.resistivity import sources - else: - from SimPEG.electromagnetics.static.induced_polarization import sources - self.simpeg_object = sources.Pole - else: - args.append(locations_b) - - return args diff --git a/geoapps/inversion/components/factories/survey_factory.py b/geoapps/inversion/components/factories/survey_factory.py deleted file mode 100644 index d2be08c24..000000000 --- a/geoapps/inversion/components/factories/survey_factory.py +++ /dev/null @@ -1,455 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=W0613 -# pylint: disable=W0221 - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.driver_base.params import BaseParams - -import numpy as np -import SimPEG.electromagnetics.time_domain as tdem -from scipy.interpolate import interp1d - -from .receiver_factory import ReceiversFactory -from .simpeg_factory import SimPEGFactory -from .source_factory import SourcesFactory - - -def receiver_group(txi, potential_electrodes): - """ - Group receivers by common transmitter id. - - :param: txi : transmitter index number. - :param: potential_electrodes : geoh5py object that holds potential electrodes - ab_map and ab_cell_id for a dc survey. - - :return: ids : list of ids of potential electrodes used with transmitter txi. - """ - - index_map = potential_electrodes.ab_map.map - index_map = {int(v): k for k, v in index_map.items() if v != "Unknown"} - ids = np.where( - potential_electrodes.ab_cell_id.values.astype(int) == index_map[txi] - )[0] - - return ids - - -def group_locations(obj, ids): - """ - Return vertex locations for possible group of cells. - - :param obj : geoh5py object containing cells, vertices structure. - :param ids : list of ids (or possibly single id) that indexes cells array. - - :return locations : tuple of n locations arrays where n is length of second - dimension of cells array. - """ - return (obj.vertices[obj.cells[ids, i]] for i in range(obj.cells.shape[1])) - - -class SurveyFactory(SimPEGFactory): - """Build SimPEG sources objects based on factory type.""" - - dummy = -999.0 - - def __init__(self, params: BaseParams): - """ - :param params: Params object containing SimPEG object parameters. - """ - super().__init__(params) - self.simpeg_object = self.concrete_object() - self.local_index = None - self.survey = None - self.ordering = None - - def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: - from SimPEG.potential_fields.magnetics import survey - - elif self.factory_type == "gravity": - from SimPEG.potential_fields.gravity import survey - - elif "direct current" in self.factory_type: - from SimPEG.electromagnetics.static.resistivity import survey - - elif "induced polarization" in self.factory_type: - from SimPEG.electromagnetics.static.induced_polarization import survey - - elif "fem" in self.factory_type: - from SimPEG.electromagnetics.frequency_domain import survey - - elif "tdem" in self.factory_type: - from SimPEG.electromagnetics.time_domain import survey - - elif self.factory_type in ["magnetotellurics", "tipper"]: - from SimPEG.electromagnetics.natural_source import survey - - return survey.Survey - - def assemble_arguments(self, data=None, mesh=None, local_index=None, channel=None): - """Provides implementations to assemble arguments for receivers object.""" - receiver_entity = data.entity - - if local_index is None: - if "current" in self.factory_type or "polarization" in self.factory_type: - n_data = receiver_entity.n_cells - else: - n_data = receiver_entity.n_vertices - - self.local_index = np.arange(n_data) - else: - self.local_index = local_index - - if "current" in self.factory_type or "polarization" in self.factory_type: - return self._dcip_arguments(data=data, local_index=local_index) - elif self.factory_type in ["tdem"]: - return self._tdem_arguments(data=data, mesh=mesh, local_index=local_index) - elif self.factory_type in ["magnetotellurics", "tipper"]: - return self._naturalsource_arguments( - data=data, mesh=mesh, frequency=channel - ) - elif self.factory_type in ["fem"]: - return self._fem_arguments(data=data, mesh=mesh, channel=channel) - else: - receivers = ReceiversFactory(self.params).build( - locations=data.locations, - data=data.observed, - local_index=self.local_index, - ) - sources = SourcesFactory(self.params).build(receivers) - return [sources] - - def assemble_keyword_arguments(self, **_): - """Implementation of abstract method from SimPEGFactory.""" - return {} - - def build( - self, - data=None, - mesh=None, - local_index=None, - indices=None, - channel=None, - ): - """Overloads base method to add dobs, std attributes to survey class instance.""" - - survey = super().build( - data=data, - local_index=local_index, - mesh=mesh, - channel=channel, - ) - - if not self.params.forward_only: - self._add_data(survey, data, self.local_index, channel) - - survey.dummy = self.dummy - - return survey, self.local_index, self.ordering - - def _get_local_data(self, data, channel, local_index): - local_data = {} - local_uncertainties = {} - - components = list(data.observed.keys()) - for comp in components: - comp_name = comp - if self.factory_type == "magnetotellurics": - comp_name = { - "zxx_real": "zyy_real", - "zxx_imag": "zyy_imag", - "zxy_real": "zyx_real", - "zxy_imag": "zyx_imag", - "zyx_real": "zxy_real", - "zyx_imag": "zxy_imag", - "zyy_real": "zxx_real", - "zyy_imag": "zxx_imag", - }[comp] - - key = "_".join([str(channel), str(comp_name)]) - local_data[key] = data.observed[comp][channel][local_index] - local_uncertainties[key] = data.uncertainties[comp][channel][local_index] - - return local_data, local_uncertainties - - def _add_data(self, survey, data, local_index, channel): - if self.factory_type in ["fem", "tdem"]: - dobs = [] - uncerts = [] - - data_stack = [np.vstack(list(k.values())) for k in data.observed.values()] - uncert_stack = [ - np.vstack(list(k.values())) for k in data.uncertainties.values() - ] - for order in self.ordering: - channel_id, component_id, rx_id = order - dobs.append(data_stack[component_id][channel_id, rx_id]) - uncerts.append(uncert_stack[component_id][channel_id, rx_id]) - - survey.dobs = np.vstack([dobs]).flatten() - survey.std = np.vstack([uncerts]).flatten() - - elif self.factory_type in ["magnetotellurics", "tipper"]: - local_data = {} - local_uncertainties = {} - - if channel is None: - channels = np.unique([list(v.keys()) for v in data.observed.values()]) - for chan in channels: - dat, unc = self._get_local_data(data, chan, local_index) - local_data.update(dat) - local_uncertainties.update(unc) - - else: - dat, unc = self._get_local_data(data, channel, local_index) - local_data.update(dat) - local_uncertainties.update(unc) - - data_vec = self._stack_channels(local_data, "row") - uncertainty_vec = self._stack_channels(local_uncertainties, "row") - uncertainty_vec[np.isnan(data_vec)] = np.inf - data_vec[ - np.isnan(data_vec) - ] = self.dummy # Nan's handled by inf uncertainties - survey.dobs = data_vec - survey.std = uncertainty_vec - - else: - local_data = {k: v[local_index] for k, v in data.observed.items()} - local_uncertainties = { - k: v[local_index] for k, v in data.uncertainties.items() - } - - data_vec = self._stack_channels(local_data, "column") - uncertainty_vec = self._stack_channels(local_uncertainties, "column") - uncertainty_vec[np.isnan(data_vec)] = np.inf - data_vec[ - np.isnan(data_vec) - ] = self.dummy # Nan's handled by inf uncertainties - survey.dobs = data_vec - survey.std = uncertainty_vec - - def _stack_channels(self, channel_data: dict[str, np.ndarray], mode: str): - """ - Convert dictionary of data/uncertainties to stacked array. - - parameters: - ---------- - - channel_data: Array of data to stack - mode: Stacks rows or columns before flattening. Must be either 'row' or 'column'. - - - notes: - ------ - If mode is row the components will be clustered in the resulting 1D array. - Column stacking results in the locations being clustered. - - """ - if mode == "column": - return np.column_stack(list(channel_data.values())).ravel() - elif mode == "row": - return np.row_stack(list(channel_data.values())).ravel() - - def _dcip_arguments(self, data=None, local_index=None): - if getattr(data, "entity", None) is None: - return None - - receiver_entity = data.entity - if "2d" in self.factory_type: - self.local_index = np.arange(receiver_entity.n_cells) - - source_ids, order = np.unique( - receiver_entity.ab_cell_id.values[self.local_index], return_index=True - ) - currents = receiver_entity.current_electrodes - - if "2d" in self.params.inversion_type: - receiver_locations = data.drape_locations(receiver_entity.vertices) - source_locations = data.drape_locations(currents.vertices) - else: - receiver_locations = receiver_entity.vertices - source_locations = currents.vertices - - # TODO hook up tile_spatial to handle local_index handling - sources = [] - self.local_index = [] - for source_id in source_ids[np.argsort(order)]: # Cycle in original order - receiver_indices = receiver_group(source_id, receiver_entity) - - if local_index is not None: - receiver_indices = list(set(receiver_indices).intersection(local_index)) - - receivers = ReceiversFactory(self.params).build( - locations=receiver_locations, - local_index=receiver_entity.cells[receiver_indices], - ) - - if receivers.nD == 0: - continue - - if "induced polarization" in self.factory_type: - receivers.data_type = "apparent_chargeability" - - cell_ind = int(np.where(currents.ab_cell_id.values == source_id)[0]) - source = SourcesFactory(self.params).build( - receivers=receivers, - locations=source_locations[currents.cells[cell_ind]], - ) - - sources.append(source) - self.local_index.append(receiver_indices) - - self.local_index = np.hstack(self.local_index) - - return [sources] - - def _tdem_arguments(self, data=None, local_index=None, mesh=None): - receivers = data.entity - transmitters = receivers.transmitters - transmitter_id = receivers.get_data("Transmitter ID") - - if transmitter_id: - tx_rx = transmitter_id[0].values - tx_ids = transmitters.get_data("Transmitter ID")[0].values - rx_lookup = {} - tx_locs_lookup = {} - for k in np.unique(tx_rx[self.local_index]): - rx_lookup[k] = np.where(tx_rx == k)[0] - tx_ind = tx_ids == k - loop_cells = transmitters.cells[ - np.all(tx_ind[transmitters.cells], axis=1), : - ] - loop_ind = np.r_[loop_cells[:, 0], loop_cells[-1, 1]] - tx_locs = transmitters.vertices[loop_ind, :] - tx_locs_lookup[k] = tx_locs - else: - rx_lookup = {k: [k] for k in self.local_index} - tx_locs_lookup = {k: transmitters.vertices[k, :] for k in self.local_index} - - wave_function = interp1d( - (receivers.waveform[:, 0] - receivers.timing_mark) - * self.params.unit_conversion, - receivers.waveform[:, 1], - fill_value="extrapolate", - ) - - waveform = tdem.sources.RawWaveform( - waveform_function=wave_function, offTime=0.0 - ) - - self.ordering = [] - tx_list = [] - rx_factory = ReceiversFactory(self.params) - tx_factory = SourcesFactory(self.params) - for tx_id, rx_ids in rx_lookup.items(): - locs = receivers.vertices[rx_ids, :] - - rx_list = [] - for component_id, component in enumerate(data.components): - rx_obj = rx_factory.build( - locations=locs, - local_index=self.local_index, - data=data, - mesh=mesh, - component=component, - ) - rx_list.append(rx_obj) - - for time_id in range(len(receivers.channels)): - for rx_id in rx_ids: - self.ordering.append([time_id, component_id, rx_id]) - - tx_list.append( - tx_factory.build( - rx_list, locations=tx_locs_lookup[tx_id], waveform=waveform - ) - ) - - return [tx_list] - - def _fem_arguments(self, data=None, mesh=None, channel=None): - channels = np.array(data.entity.channels) - frequencies = channels if channel is None else [channel] - rx_locs = data.entity.vertices - tx_locs = data.entity.transmitters.vertices - freqs = data.entity.transmitters.workspace.get_entity("Tx frequency")[0] - freqs = np.array([int(freqs.value_map[f]) for f in freqs.values]) - - self.ordering = [] - sources = [] - rx_factory = ReceiversFactory(self.params) - tx_factory = SourcesFactory(self.params) - - receiver_groups = {} - ordering = [] - for receiver_id in self.local_index: - receivers = [] - for component_id, component in enumerate(data.components): - receivers.append( - rx_factory.build( - locations=rx_locs[receiver_id, :], - data=data, - mesh=mesh, - component=component, - ) - ) - ordering.append([component_id, receiver_id]) - receiver_groups[receiver_id] = receivers - - ordering = np.vstack(ordering) - for frequency in frequencies: - frequency_id = np.where(frequency == channels)[0][0] - self.ordering.append( - np.hstack([np.ones((ordering.shape[0], 1)) * frequency_id, ordering]) - ) - - self.ordering = np.vstack(self.ordering).astype(int) - - for frequency in frequencies: - for receiver_id, receivers in receiver_groups.items(): - locs = tx_locs[frequency == freqs, :][receiver_id, :] - sources.append( - tx_factory.build( - receivers, - locations=locs, - frequency=frequency, - ) - ) - - return [sources] - - def _naturalsource_arguments(self, data=None, mesh=None, frequency=None): - receivers = [] - sources = [] - rx_factory = ReceiversFactory(self.params) - tx_factory = SourcesFactory(self.params) - for comp in data.components: - receivers.append( - rx_factory.build( - locations=data.locations, - local_index=self.local_index, - data=data, - mesh=mesh, - component=comp, - ) - ) - - if frequency is None: - frequencies = np.unique([list(v) for v in data.observed.values()]) - for frequency in frequencies: - sources.append(tx_factory.build(receivers, frequency=frequency)) - else: - sources.append(tx_factory.build(receivers, frequency=frequency)) - - return [sources] diff --git a/geoapps/inversion/components/locations.py b/geoapps/inversion/components/locations.py deleted file mode 100644 index e50c0a34d..000000000 --- a/geoapps/inversion/components/locations.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoh5py.workspace import Workspace - from geoapps.inversion.params import InversionBaseParams - - -import numpy as np -from geoh5py.objects import Points -from geoh5py.shared import Entity -from scipy.interpolate import LinearNDInterpolator -from scipy.spatial import cKDTree - -from geoapps.shared_utils.utils import get_locations as get_locs - - -class InversionLocations: - """ - Retrieve topography data from workspace and apply transformations. - - Parameters - ---------- - mask : - Mask that stores cumulative filtering actions. - locations : - xyz locations. - - Methods - ------- - get_locations() : - Returns locations of data object centroids or vertices. - filter() : - Apply accumulated self.mask to array, or dict of arrays. - - """ - - def __init__(self, workspace: Workspace, params: InversionBaseParams): - """ - :param workspace: Geoh5py workspace object containing location based data. - :param params: Params object containing location based data parameters. - """ - self.workspace = workspace - self._params: InversionBaseParams = params - self.mask: np.ndarray | None = None - self.locations: np.ndarray | None = None - - @property - def mask(self): - return self._mask - - @mask.setter - def mask(self, v): - if v is None: - self._mask = v - return - if np.all([n in [0, 1] for n in np.unique(v)]): - v = np.array(v, dtype=bool) - else: - msg = f"Badly formed mask array {v}" - raise (ValueError(msg)) - self._mask = v - - def create_entity(self, name, locs: np.ndarray, geoh5_object=Points): - """Create Data group and Points object with observed data.""" - entity = geoh5_object.create( - self.workspace, - name=name, - vertices=locs, - parent=self.params.out_group, - ) - - return entity - - def get_locations(self, obj) -> np.ndarray: - """ - Returns locations of data object centroids or vertices. - - :param uid: UUID of geoh5py object containing centroid or - vertex location data - - :return: Array shape(*, 3) of x, y, z location data - - """ - - locs = get_locs(self.workspace, obj) - - if locs is None: - msg = f"Workspace object {obj} 'vertices' attribute is None." - msg += " Object type should be Grid2D or point-like." - raise (ValueError(msg)) - - return locs - - def _filter(self, a, mask): - for k, v in a.items(): - if not isinstance(v, np.ndarray): - a.update({k: self._filter(v, mask)}) - else: - a.update({k: v[mask]}) - return a - - def _none_dict(self, a): - is_none = [] - for v in a.values(): - if isinstance(v, dict): - v = None if self._none_dict(v) else 1 - is_none.append(v is None) - return all(is_none) - - def filter(self, a: dict[str, np.ndarray] | np.ndarray, mask=None): - """ - Apply accumulated self.mask to array, or dict of arrays. - - If argument a is a dictionary filter will be applied to all key/values. - - :param a: Object containing data to filter. - - :return: Filtered data. - - """ - - mask = self.mask if mask is None else mask - - if isinstance(a, dict): - if self._none_dict(a): - return a - else: - return self._filter(a, mask) - else: - if a is None: - return None - else: - return a[mask] - - def set_z_from_topo(self, locs: np.ndarray): - """interpolate locations z data from topography.""" - - if locs is None: - return None - - topo = self.get_locations(self.params.topography_object) - if self.params.topography is not None: - if isinstance(self.params.topography, Entity): - z = self.params.topography.values - else: - z = np.ones_like(topo[:, 2]) * self.params.topography - - topo[:, 2] = z - - xyz = locs.copy() - topo_interpolator = LinearNDInterpolator(topo[:, :2], topo[:, 2]) - z_topo = topo_interpolator(xyz[:, :2]) - if np.any(np.isnan(z_topo)): - tree = cKDTree(topo[:, :2]) - _, ind = tree.query(xyz[np.isnan(z_topo), :2]) - z_topo[np.isnan(z_topo)] = topo[ind, 2] - xyz[:, 2] = z_topo - - return xyz - - @property - def params(self): - """Associated parameters.""" - return self._params diff --git a/geoapps/inversion/components/meshes.py b/geoapps/inversion/components/meshes.py deleted file mode 100644 index a76b446cd..000000000 --- a/geoapps/inversion/components/meshes.py +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import numpy as np -from geoh5py.objects import DrapeModel, Octree - -from geoapps.octree_creation.params import OctreeParams -from geoapps.shared_utils.utils import drape_2_tensor, octree_2_treemesh - -if TYPE_CHECKING: - from geoh5py.workspace import Workspace - - from . import InversionData, InversionTopography - -from discretize import TensorMesh, TreeMesh - - -class InversionMesh: - """ - Retrieve octree mesh data from workspace and convert to Treemesh. - - Attributes - ---------- - - n_cells: - Number of cells in the mesh. - rotation : - Rotation of original octree mesh. - permutation: - Permutation vector to restore cell centers or model values to - origin octree mesh order. - - """ - - def __init__( - self, - workspace: Workspace, - params: OctreeParams, - inversion_data: InversionData | None, - inversion_topography: InversionTopography, - ) -> None: - """ - :param workspace: Workspace object containing mesh data. - :param params: Params object containing mesh parameters. - :param window: Center and size defining window for data, topography, etc. - - """ - self.workspace = workspace - self.params = params - self.inversion_data = inversion_data - self.inversion_topography = inversion_topography - self._mesh: TreeMesh | TensorMesh | None = None - self.n_cells: int | None = None - self.rotation: dict[str, float] | None = None - self._permutation: np.ndarray | None = None - self.entity: Octree | DrapeModel | None = None - self._initialize() - - def _initialize(self) -> None: - """ - Collects mesh data stored in geoh5 workspace into TreeMesh object. - - Handles conversion from geoh5's native octree mesh type to TreeMesh - type required for SimPEG inversion and stores data needed to restore - original the octree mesh type. - """ - - if self.params.mesh is None: - raise ValueError("Must pass pre-constructed mesh.") - else: - self.entity = self.params.mesh.copy( - parent=self.params.out_group, copy_children=False - ) - self.params.mesh = self.entity - - if ( - getattr(self.entity, "rotation", None) - and self.inversion_data is not None - and self.inversion_data.has_tensor - ): - msg = "Cannot use tensor components with rotated mesh." - raise NotImplementedError(msg) - - self.uid = self.entity.uid - self.n_cells = self.entity.n_cells - - @property - def mesh(self) -> TreeMesh | TensorMesh: - """""" - if self._mesh is None: - if isinstance(self.entity, Octree): - if self.entity.rotation: - origin = self.entity.origin.tolist() - angle = self.entity.rotation[0] - self.rotation = {"origin": origin, "angle": angle} - - self._mesh = octree_2_treemesh(self.entity) - self._permutation = getattr(self.mesh, "_ubc_order") - - if isinstance(self.entity, DrapeModel) and self._mesh is None: - self._mesh, self._permutation = drape_2_tensor( - self.entity, return_sorting=True - ) - - return self._mesh - - @property - def permutation(self) -> np.ndarray: - """Permutation vector between discretize and geoh5py ordering.""" - if self.mesh is None: - raise ValueError("A 'mesh' must be assigned before accessing permutation.") - - return self._permutation diff --git a/geoapps/inversion/components/models.py b/geoapps/inversion/components/models.py deleted file mode 100644 index ef6f4e74a..000000000 --- a/geoapps/inversion/components/models.py +++ /dev/null @@ -1,496 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import numpy as np -from geoh5py.data import Data -from SimPEG.utils.mat_utils import ( - cartesian2amplitude_dip_azimuth, - dip_azimuth2cartesian, - mkvc, -) - -from geoapps.driver_base.driver import BaseDriver -from geoapps.shared_utils.utils import rotate_xyz, weighted_average - -if TYPE_CHECKING: - from ..driver import InversionDriver - - -class InversionModelCollection: - """ - Collection of inversion models. - - Methods - ------- - remove_air: Use active cells vector to remove air cells from model. - permute_2_octree: Reorder model values stored in cell centers of a TreeMesh to - their original octree mesh sorting. - permute_2_treemesh: Reorder model values stored in cell centers of an octree mesh to - TreeMesh sorting. - - """ - - model_types = [ - "starting", - "reference", - "lower_bound", - "upper_bound", - "conductivity", - ] - - def __init__(self, driver): - """ - :param driver: Parental InversionDriver class. - """ - self._driver: InversionDriver | None = None - self._active_cells = None - self.is_sigma = None - self.is_vector = None - self.n_blocks = None - self._starting = None - self._reference = None - self._lower_bound = None - self._upper_bound = None - self._conductivity = None - self._initialize(driver) - - @property - def n_active(self): - """Number of active cells.""" - return int(self.active_cells.sum()) - - @property - def driver(self): - return self._driver - - @driver.setter - def driver(self, driver): - if not isinstance(driver, BaseDriver): - raise ValueError("'driver' must be an InversionDriver object.") - - self._driver = driver - - @property - def active_cells(self): - """Active cells vector.""" - if self._active_cells is None: - # Build active cells array and reduce models active set - if ( - self.driver.inversion_mesh is not None - and self.driver.inversion_data is not None - ): - self.active_cells = self.driver.inversion_topography.active_cells( - self.driver.inversion_mesh, self.driver.inversion_data - ) - return self._active_cells - - @active_cells.setter - def active_cells(self, active_cells): - if self._active_cells is not None: - raise ValueError("'active_cells' can only be set once.") - - if not isinstance(active_cells, np.ndarray) or active_cells.dtype != bool: - raise ValueError("active_cells must be a boolean numpy array.") - - self.edit_ndv_model(active_cells[self.driver.inversion_mesh.permutation]) - self.remove_air(active_cells) - self.driver.inversion_mesh.entity.add_data( - { - "active_cells": { - "values": active_cells[ - self.driver.inversion_mesh.permutation - ].astype(np.int32) - } - } - ) - self._active_cells = active_cells - - @property - def starting(self) -> np.ndarray | None: - if self._starting.model is None: - return None - - mstart = self._starting.model.copy() - - if mstart is not None and self.is_sigma: - mstart = np.log(mstart) - - return mstart - - @property - def reference(self) -> np.ndarray | None: - mref = self._reference.model - - if self.driver.params.forward_only: - return mref - - if mref is None or (self.is_sigma and all(mref == 0)): - mref = self.starting - self.driver.params.alpha_s = 0.0 - - ref_model = mref.copy() - ref_model = np.log(ref_model) if self.is_sigma else ref_model - - return ref_model - - @property - def lower_bound(self) -> np.ndarray | None: - if self._lower_bound.model is None: - return -np.inf - - lbound = self._lower_bound.model.copy() - - if self.is_sigma: - is_finite = np.isfinite(lbound) - lbound[is_finite] = np.log(lbound[is_finite]) - return lbound - - @property - def upper_bound(self) -> np.ndarray | None: - if self._upper_bound.model is None: - return np.inf - - ubound = self._upper_bound.model.copy() - - if self.is_sigma: - is_finite = np.isfinite(ubound) - ubound[is_finite] = np.log(ubound[is_finite]) - - return ubound - - @property - def conductivity(self) -> np.ndarray | None: - if self._conductivity.model is None: - return None - - cond_model = self._conductivity.model.copy() - - if cond_model is not None and self.is_sigma: - cond_model = np.log(cond_model) - - return cond_model - - def _initialize(self, driver): - self.driver = driver - self.is_sigma = self.driver.params.physical_property == "conductivity" - self.is_vector = ( - True if self.driver.params.inversion_type == "magnetic vector" else False - ) - self.n_blocks = ( - 3 if self.driver.params.inversion_type == "magnetic vector" else 1 - ) - self._starting = InversionModel(driver, "starting") - self._reference = InversionModel(driver, "reference") - self._lower_bound = InversionModel(driver, "lower_bound") - self._upper_bound = InversionModel(driver, "upper_bound") - self._conductivity = InversionModel(driver, "conductivity") - - def _model_method_wrapper(self, method, name=None, **kwargs): - """wraps individual model's specific method and applies in loop over model types.""" - returned_items = {} - for mtype in self.model_types: - model = self.__getattribute__(f"_{mtype}") - if model.model is not None: - f = getattr(model, method) - returned_items[mtype] = f(**kwargs) - - if name is not None: - return returned_items[name] - - def remove_air(self, active_cells: np.ndarray): - """Use active cells vector to remove air cells from model""" - self._model_method_wrapper("remove_air", active_cells=active_cells) - - def permute_2_octree(self, name): - """ - Reorder model values stored in cell centers of a TreeMesh to - their original octree mesh sorting. - - :param: name: model type name ("starting", "reference", - "lower_bound", or "upper_bound"). - - :return: Vector of model values reordered for octree mesh. - """ - return self._model_method_wrapper("permute_2_octree", name=name) - - def permute_2_treemesh(self, model, name): - """ - Reorder model values stored in cell centers of an octree mesh to - TreeMesh sorting. - - :param model: octree sorted model. - :param name: model type name ("starting", "reference", - "lower_bound", or "upper_bound"). - - :return: Vector of model values reordered for TreeMesh. - """ - return self._model_method_wrapper("permute_2_treemesh", name=name, model=model) - - def edit_ndv_model(self, actives: np.ndarray): - """ - Change values in models recorded in geoh5 for no-data-values. - - :param actives: Array of bool defining the air: False | ground: True. - """ - return self._model_method_wrapper("edit_ndv_model", name=None, model=actives) - - -class InversionModel: - """ - A class for constructing and storing models defined on the cell centers - of an inversion mesh. - - Methods - ------- - remove_air: Use active cells vector to remove air cells from model. - permute_2_octree: Reorder model values stored in cell centers of a TreeMesh to - their original octree mesh sorting. - permute_2_treemesh: Reorder model values stored in cell centers of an octree mesh to - TreeMesh sorting. - """ - - model_types = [ - "starting", - "reference", - "lower_bound", - "upper_bound", - "conductivity", - ] - - def __init__( - self, - driver: InversionDriver, - model_type: str, - ): - """ - :param driver: InversionDriver object. - :param model_type: Type of inversion model, can be any of "starting", "reference", - "lower_bound", "upper_bound". - """ - self.driver = driver - self.model_type = model_type - self.model = None - self.is_vector = None - self.n_blocks = None - self._initialize() - - def _initialize(self): - """ - Build the model vector from params data. - - If params.inversion_type is "magnetic vector" and no inclination/declination - are provided, then values are projected onto the direction of the - inducing field. - """ - - self.is_vector = ( - True if self.driver.params.inversion_type == "magnetic vector" else False - ) - self.n_blocks = ( - 3 if self.driver.params.inversion_type == "magnetic vector" else 1 - ) - - if self.model_type in ["starting", "reference", "conductivity"]: - model = self._get(self.model_type + "_model") - - if self.is_vector: - inclination = self._get(self.model_type + "_inclination") - declination = self._get(self.model_type + "_declination") - - if inclination is None: - inclination = ( - np.ones(self.driver.inversion_mesh.n_cells) - * self.driver.params.inducing_field_inclination - ) - - if declination is None: - declination = ( - np.ones(self.driver.inversion_mesh.n_cells) - * self.driver.params.inducing_field_declination - ) - - if self.driver.inversion_mesh.rotation is not None: - declination += self.driver.inversion_mesh.rotation["angle"] - - inclination[np.isnan(inclination)] = 0 - declination[np.isnan(declination)] = 0 - field_vecs = dip_azimuth2cartesian( - inclination, - declination, - ) - - if model is not None: - model += 1e-8 # make sure the incl/decl don't zero out - model = (field_vecs.T * model).T - - else: - model = self._get(self.model_type) - - if ( - model is not None - and self.is_vector - and model.shape[0] == self.driver.inversion_mesh.n_cells - ): - model = np.tile(model, self.n_blocks) - - if model is not None: - self.model = mkvc(model) - self.save_model() - - def remove_air(self, active_cells): - """Use active cells vector to remove air cells from model""" - - self.model = self.model[np.tile(active_cells, self.n_blocks)] - - def permute_2_octree(self): - """ - Reorder model values stored in cell centers of a TreeMesh to - its original octree mesh order. - - :return: Vector of model values reordered for octree mesh. - """ - if self.is_vector: - return mkvc( - self.model.reshape((-1, 3), order="F")[ - self.driver.inversion_mesh.permutation, : - ] - ) - return self.model[self.driver.inversion_mesh.permutation] - - def permute_2_treemesh(self, model): - """ - Reorder model values stored in cell centers of an octree mesh to - TreeMesh order in self.driver.inversion_mesh. - - :param model: octree sorted model - :return: Vector of model values reordered for TreeMesh. - """ - return model[np.argsort(self.driver.inversion_mesh.permutation)] - - def save_model(self): - """Resort model to the octree object's ordering and save to workspace.""" - remapped_model = self.permute_2_octree() - if self.is_vector: - if self.model_type in ["starting", "reference"]: - aid = cartesian2amplitude_dip_azimuth(remapped_model) - aid[np.isnan(aid[:, 0]), 1:] = np.nan - entity = self.driver.inversion_mesh.entity.add_data( - {f"{self.model_type}_inclination": {"values": aid[:, 1]}} - ) - setattr(self.driver.params, f"{self.model_type}_inclination", entity) - entity = self.driver.inversion_mesh.entity.add_data( - {f"{self.model_type}_declination": {"values": aid[:, 2]}} - ) - setattr(self.driver.params, f"{self.model_type}_declination", entity) - remapped_model = aid[:, 0] - else: - remapped_model = np.linalg.norm( - remapped_model.reshape((-1, 3), order="F"), axis=1 - ) - - entity = self.driver.inversion_mesh.entity.add_data( - {f"{self.model_type}_model": {"values": remapped_model}} - ) - model_type = self.model_type - - # TODO: Standardize names for upper_model and lower_model - if model_type in ["starting", "reference", "conductivity"]: - model_type += "_model" - - setattr(self.driver.params, model_type, entity) - - def edit_ndv_model(self, model): - """Change values to NDV on models and save to workspace.""" - for field in ["model", "inclination", "declination"]: - data_obj = self.driver.inversion_mesh.entity.get_data( - f"{self.model_type}_{field}" - ) - if any(data_obj) and isinstance(data_obj[0], Data): - values = data_obj[0].values - values[~model] = np.nan - data_obj[0].values = values - - def _get(self, name: str) -> np.ndarray | None: - """ - Return model vector from value stored in params class. - - :param name: model name as stored in self.driver.params - :return: vector with appropriate size for problem. - """ - - if hasattr(self.driver.params, name): - model = getattr(self.driver.params, name) - - if "reference" in name and model is None: - model = self._get("starting") - - model_values = self._get_value(model) - - return model_values - - return None - - def _get_value(self, model: float | Data): - """ - Fills vector with model value to match size of inversion mesh. - - :param model: Float value to fill vector with. - :return: Vector of model float repeated nC times, where nC is - the number of cells in the inversion mesh. - """ - if isinstance(model, Data): - model = self._obj_2_mesh(model.values, model.parent) - - else: - nc = self.driver.inversion_mesh.n_cells - if isinstance(model, (int, float)): - model *= np.ones(nc) - - return model - - def _obj_2_mesh(self, obj, parent): - """ - Interpolates obj into inversion mesh using nearest neighbors of parent. - - :param obj: geoh5 entity object containing model data - :param parent: parent geoh5 entity to model containing location data. - :return: Vector of values nearest neighbor interpolated into - inversion mesh. - - """ - xyz_out = self.driver.inversion_mesh.entity.centroids - - if hasattr(parent, "centroids"): - xyz_in = parent.centroids - if self.driver.inversion_mesh.rotation is not None: - xyz_out = rotate_xyz( - xyz_out, - self.driver.inversion_mesh.rotation["origin"], - self.driver.inversion_mesh.rotation["angle"], - ) - - else: - xyz_in = parent.vertices - - full_vector = weighted_average(xyz_in, xyz_out, [obj], n=1)[0] - - return full_vector[np.argsort(self.driver.inversion_mesh.permutation)] - - @property - def model_type(self): - return self._model_type - - @model_type.setter - def model_type(self, v): - if v not in self.model_types: - msg = f"Invalid 'model_type'. Must be one of {*self.model_types,}." - raise ValueError(msg) - self._model_type = v diff --git a/geoapps/inversion/components/preprocessing.py b/geoapps/inversion/components/preprocessing.py index be00ecbd5..17c317553 100644 --- a/geoapps/inversion/components/preprocessing.py +++ b/geoapps/inversion/components/preprocessing.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -13,11 +14,12 @@ import numpy as np from geoh5py import Workspace from geoh5py.data import Data, NumericData -from geoh5py.objects import Grid2D, ObjectBase, Points, PotentialElectrode +from geoh5py.objects import Grid2D, ObjectBase, Points from geoh5py.shared.utils import is_uuid +from scipy.interpolate import LinearNDInterpolator from geoapps.inversion.utils import calculate_2D_trend -from geoapps.shared_utils.utils import filter_xy, get_locations +from geoapps.shared_utils.utils import DrapeOptions, WindowOptions, filter_xy # TODO replace with implementation in geoh5py v0.9.0 @@ -37,7 +39,6 @@ def window_data( data_object: ObjectBase, components: list[str], data_dict: dict, - workspace: Workspace, window_azimuth: float, window_center_x: float, window_center_y: float, @@ -51,7 +52,6 @@ def window_data( :param data_object: Data object to be windowed. :param components: List of active data components. :param data_dict: Dictionary of data components and uncertainties. - :param workspace: Output workspace. :param window_azimuth: Azimuth of the window. :param window_center_x: X center of the window. :param window_center_y: Y center of the window. @@ -73,7 +73,7 @@ def window_data( data_object = grid_to_points(data_object) # Get locations - locations = get_locations(workspace, data_object) + locations = data_object.locations # Get window window = { @@ -97,11 +97,6 @@ def window_data( distance=resolution, ) - if isinstance(data_object, PotentialElectrode): - vert_mask = np.zeros(data_object.n_vertices, dtype=bool) - vert_mask[data_object.cells[mask, :].ravel()] = True - mask = vert_mask - new_data_object = data_object.copy( parent=data_object.workspace, copy_children=True, @@ -110,12 +105,6 @@ def window_data( name=data_object.name + "_processed", ) - if ( - not isinstance(data_object, PotentialElectrode) - and getattr(data_object, "parts", None) is not None - ): - new_data_object.parts = data_object.parts[mask] - # Update data dict for comp in components: data_dict[comp + "_channel"]["values"] = new_data_object.get_entity( @@ -126,13 +115,7 @@ def window_data( data_dict[comp + "_uncertainty"]["name"] )[0].values - # Get new locations - if hasattr(new_data_object, "centroids"): - locations = new_data_object.centroids - elif hasattr(new_data_object, "vertices"): - locations = new_data_object.vertices - - return new_data_object, data_dict, locations + return new_data_object, data_dict, new_data_object.locations def detrend_data( @@ -215,6 +198,49 @@ def set_infinity_uncertainties( return data_dict +def transform_elevation( + data_object: Points, + topography_object: Points | Grid2D, + topography: NumericData | None, + offset: float, + from_topo: bool, + radar_drape: NumericData | None, +): + """ + Transform elevation of the receivers based on topography if requested. + + :param data_object: Data object to copy to new workspace. + :param topography_object: Topography object. + :param topography: Topography data for elevation. + :param offset: Offset to apply to elevation. + :param from_topo: Checkbox for getting z from topography. + :param radar_drape: Radar drape data. + + :return: Updated data object. + """ + elevations = data_object.locations[:, 2] + + if from_topo: + dem = topography_object.locations + if topography is not None: + dem[:, 2] = topography.values + + # Interpolate elevation from DEM + interp = LinearNDInterpolator(dem[:, :2], dem[:, 2]) + elevations = interp(data_object.locations[:, :2]) + + if radar_drape is not None: + elevations += radar_drape.values + + if offset != 0: + elevations += offset + + # Update data object with new elevations + data_object.vertices = np.c_[data_object.locations[:, :2], elevations] + + return data_object + + def parse_ignore_values(ignore_values: str, forward_only: bool) -> tuple[float, str]: """ Returns an ignore value and type ('<', '>', or '=') from params data. @@ -286,12 +312,9 @@ def preprocess_data( workspace: Workspace, param_dict: dict, data_object: ObjectBase, - resolution: float | None, - window_center_x: float, - window_center_y: float, - window_width: float, - window_height: float, - window_azimuth: float | None = None, + window_options: WindowOptions, + drape_options: DrapeOptions | None = None, + resolution: float | None = None, ignore_values: str | None = None, detrend_type: str | None = None, detrend_order: int | None = None, @@ -299,17 +322,14 @@ def preprocess_data( data_dict: dict | None = None, ) -> dict: """ - Window, detrend, and ignore values in data_object. Update data_dict with new data uids. + All data and object transformation not supported by the inversion driver. :param workspace: Parent workspace for data_object and data components. :param param_dict: Dictionary of params to run the inversion. :param data_object: Parent object for data components. :param resolution: Resolution for downsampling. - :param window_center_x: X center of the window. - :param window_center_y: Y center of the window. - :param window_width: Width of the window. - :param window_height: Height of the window. - :param window_azimuth: Azimuth of the window. + :param window_options: Windowing options. + :param drape_options: Topography options. :param ignore_values: Values to be ignored. :param detrend_type: Method to be used for the detrending. :param detrend_order: Order of the polynomial to be used for detrend. @@ -326,12 +346,11 @@ def preprocess_data( data_object, components, data_dict, - workspace, - window_azimuth, - window_center_x, - window_center_y, - window_width, - window_height, + window_options.azimuth, + window_options.center_x, + window_options.center_y, + window_options.width, + window_options.height, resolution, ) @@ -353,6 +372,16 @@ def preprocess_data( locations, ) + if drape_options is not None: + new_data_object = transform_elevation( + new_data_object, + drape_options.topography_object, + drape_options.topography, + drape_options.receivers_offset_z, + drape_options.z_from_topo, + drape_options.receivers_radar_drape, + ) + # Add processed data to data object update_dict = {} update_dict["data_object"] = new_data_object.uid @@ -363,12 +392,5 @@ def preprocess_data( data = data_dict[key] if key in data_dict.keys(): update_dict[key] = new_data_object.get_entity(data["name"])[0].uid - # Update update_dict with new radar uid - if "receivers_radar_drape" in param_dict: - radar = param_dict["receivers_radar_drape"] - if radar is not None: - update_dict["receivers_radar_drape"] = new_data_object.get_entity( - radar.name - )[0].uid return update_dict diff --git a/geoapps/inversion/components/topography.py b/geoapps/inversion/components/topography.py deleted file mode 100644 index bfa0e52af..000000000 --- a/geoapps/inversion/components/topography.py +++ /dev/null @@ -1,162 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoh5py.workspace import Workspace - from geoapps.driver_base.params import BaseParams - from . import InversionMesh - -import warnings - -import numpy as np -from discretize import TreeMesh -from geoh5py.objects.surveys.electromagnetics.base import LargeLoopGroundEMSurvey -from geoh5py.shared import Entity - -from geoapps.driver_base.utils import active_from_xyz -from geoapps.inversion.components.data import InversionData -from geoapps.inversion.components.locations import InversionLocations -from geoapps.shared_utils.utils import filter_xy, get_neighbouring_cells -from geoapps.utils.models import floating_active -from geoapps.utils.surveys import get_containing_cells - - -class InversionTopography(InversionLocations): - """ - Retrieve topography data from workspace and apply transformations. - - Parameters - ---------- - locations : - Topography locations. - mask : - Mask created by windowing operation and applied to locations - and data on initialization. - - Methods - ------- - active_cells(mesh) : - Return mask that restricts models to active (earth) cells. - - """ - - def __init__( - self, - workspace: Workspace, - params: BaseParams, - ): - """ - :param: workspace: :obj`geoh5py.workspace.Workspace` object containing location based data. - :param: params: Params object containing location based data parameters. - """ - super().__init__(workspace, params) - self.locations: np.ndarray | None = None - self.mask: np.ndarray | None = None - self._initialize() - - def _initialize(self): - self.locations = self.get_locations(self.params.topography_object) - self.mask = filter_xy( - self.locations[:, 0], - self.locations[:, 1], - ) - self.locations = super().filter(self.locations) - - def active_cells(self, mesh: InversionMesh, data: InversionData) -> np.ndarray: - """ - Return mask that restricts models to set of earth cells. - - :param: mesh: inversion mesh. - :return: active_cells: Mask that restricts a model to the set of - earth cells that are active in the inversion (beneath topography). - """ - forced_to_surface = self.params.inversion_type in [ - "magnetotellurics", - "direct current 3d", - "direct current 2d", - "induced polarization 3d", - "induced polarization 2d", - ] or isinstance(data.entity, LargeLoopGroundEMSurvey) - active_cells = active_from_xyz( - mesh.entity, - self.locations, - grid_reference="bottom" if forced_to_surface else "center", - ) - active_cells = active_cells[np.argsort(mesh.permutation)] - - if forced_to_surface: - active_cells = self.expand_actives(active_cells, mesh, data) - - if floating_active(mesh.mesh, active_cells): - warnings.warn( - "Active cell adjustment has created a patch of active cells in the air, " - "likely due to a faulty survey location." - ) - - return active_cells - - def get_locations(self, obj: Entity) -> np.ndarray: - """ - Returns locations of data object centroids or vertices. - - :param obj: geoh5py object containing centroid or - vertex location data - - :return: Array shape(*, 3) of x, y, z location data - - """ - - locs = super().get_locations(obj) - - if self.params.topography is not None: - if isinstance(self.params.topography, Entity): - elev = self.params.topography.values - elif isinstance(self.params.topography, (int, float)): - elev = np.ones_like(locs[:, 2]) * self.params.topography - else: - elev = self.params.topography.values # Must be FloatData at this point - - if not np.all(locs[:, 2] == elev): - locs[:, 2] = elev - - return locs - - def expand_actives( - self, active_cells: np.ndarray, mesh: InversionMesh, data: InversionData - ) -> np.ndarray: - """ - Expand active cells to ensure receivers are within active cells. - - :param active_cells: Mask that restricts a model to the set of - :param mesh: Inversion mesh. - :param data: Inversion data. - - :return: active_cells: Mask that restricts a model to the set of - """ - containing_cells = get_containing_cells(mesh.mesh, data) - active_cells[containing_cells] = True - - # Apply extra active cells to ensure connectivity for tree meshes - if isinstance(mesh.mesh, TreeMesh): - neighbours = get_neighbouring_cells(mesh.mesh, containing_cells) - neighbours_xy = np.r_[neighbours[0] + neighbours[1]] - - # Make sure the new actives are connected to the old actives - new_actives = ~active_cells[neighbours_xy] - if np.any(new_actives): - neighbours = get_neighbouring_cells( - mesh.mesh, neighbours_xy[new_actives] - ) - active_cells[np.r_[neighbours[2][0]]] = True # z-axis neighbours - - active_cells[neighbours_xy] = True # xy-axis neighbours - - return active_cells diff --git a/geoapps/inversion/components/windows.py b/geoapps/inversion/components/windows.py deleted file mode 100644 index c2890dc19..000000000 --- a/geoapps/inversion/components/windows.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING, Any - -if TYPE_CHECKING: - from geoh5py.workspace import Workspace - from geoapps.drivers import BaseParams - -import numpy as np -from geoh5py.objects import Grid2D, PotentialElectrode - - -class InversionWindow: - """ - Retrieve and store window data from workspace. - - If params contains no window data, the window will initialize with from the - data extents. - - Attributes - ---------- - - workspace: - Geoh5py workspace object containing window data. - params: - Params object containing window parameters. - window: - Center and size defining window for data, topography, etc. - - Methods - ------- - - is_empty(): - Check if window data is empty. - - """ - - window_keys = ["center_x", "center_y", "height", "width", "size", "center"] - - def __init__(self, workspace: Workspace, params: BaseParams): - """ - :param: workspace: Geoh5py workspace object containing window data. - :param: params: Params object containing window parameters. - :param: window: - """ - self.workspace = workspace - self.params = params - self._window: dict[str, Any] | None = None - - def is_empty(self) -> bool: - """Check if window data is empty.""" - if self._window is None: - return True - elif (self._window["size"][0] == 0) & (self._window["size"][1] == 0): - return True - else: - center_x_null = True if self._window["center"][0] is None else False - center_y_null = True if self._window["center"][1] is None else False - size_x_null = True if self._window["size"][0] is None else False - size_y_null = True if self._window["size"][1] is None else False - return center_x_null & center_y_null & size_x_null & size_y_null - - @property - def window(self): - """Get params.window data.""" - if self._window is None: - if self.is_empty(): - data_object = self.params.data_object - if isinstance(data_object, Grid2D): - locs = data_object.centroids - elif isinstance(data_object, PotentialElectrode): - locs = np.vstack( - [data_object.vertices, data_object.current_electrodes.vertices] - ) - locs = np.unique(locs, axis=0) - else: - locs = data_object.vertices - - if locs is None: - msg = f"Object {data_object} is not Grid2D object and doesn't contain vertices." - raise (ValueError(msg)) - - min_corner = np.min(locs[:, :2], axis=0) - max_corner = np.max(locs[:, :2], axis=0) - - size = max_corner - min_corner - size[size == 0] = np.mean(size) - - self._window = { - "center": np.mean([max_corner, min_corner], axis=0), - "size": size, - } - else: - self._window = self.params.window - return self._window - - def __call__(self): - return self.window diff --git a/geoapps/inversion/constants.py b/geoapps/inversion/constants.py index fadfe5401..52fcfa530 100644 --- a/geoapps/inversion/constants.py +++ b/geoapps/inversion/constants.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -13,6 +15,7 @@ import geoapps + default_ui_json = { "forward_only": False, "topography_object": { @@ -451,7 +454,7 @@ "monitoring_directory": None, "workspace_geoh5": None, "geoh5": None, - "run_command": "geoapps.inversion.driver", + "run_command": "simpeg_drivers.driver", "run_command_boolean": None, "conda_environment": "geoapps", "distributed_workers": None, diff --git a/geoapps/inversion/driver.py b/geoapps/inversion/driver.py deleted file mode 100644 index 65f3b3c3c..000000000 --- a/geoapps/inversion/driver.py +++ /dev/null @@ -1,495 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from geoapps.inversion import InversionBaseParams - -import multiprocessing -import sys -from datetime import datetime, timedelta -from multiprocessing.pool import ThreadPool -from pathlib import Path -from time import time - -import numpy as np -from dask import config as dconf -from geoh5py.groups import SimPEGGroup -from geoh5py.shared.utils import fetch_active_workspace -from geoh5py.ui_json import InputFile -from SimPEG import ( - directives, - inverse_problem, - inversion, - maps, - objective_function, - optimization, -) -from SimPEG.regularization import BaseRegularization, Sparse - -from geoapps.driver_base.driver import BaseDriver -from geoapps.inversion import DRIVER_MAP -from geoapps.inversion.components import ( - InversionData, - InversionMesh, - InversionModelCollection, - InversionTopography, - InversionWindow, -) -from geoapps.inversion.components.factories import DirectivesFactory, MisfitFactory -from geoapps.inversion.params import InversionBaseParams -from geoapps.inversion.utils import tile_locations - - -class InversionDriver(BaseDriver): - _params_class = InversionBaseParams # pylint: disable=E0601 - _inversion_type: str | None = None - _validations = None - - def __init__(self, params: InversionBaseParams): - super().__init__(params) - - self.inversion_type = self.params.inversion_type - self._data_misfit: objective_function.ComboObjectiveFunction | None = None - self._directives: list[directives.InversionDirective] | None = None - self._inverse_problem: inverse_problem.BaseInvProblem | None = None - self._inversion: inversion.BaseInversion | None = None - self._inversion_data: InversionData | None = None - self._inversion_mesh: InversionMesh | None = None - self._inversion_topography: InversionTopography | None = None - self._logger: InversionLogger | None = None - self._mapping: list[maps.IdentityMap] | None = None - self._models: InversionModelCollection | None = None - self._n_values: int | None = None - self._optimization: optimization.ProjectedGNCG | None = None - self._regularization: None = None - self._sorting: list[np.ndarray] | None = None - self._ordering: list[np.ndarray] | None = None - self._window = None - - @property - def data_misfit(self): - """The Simpeg.data_misfit class""" - if getattr(self, "_data_misfit", None) is None: - with fetch_active_workspace(self.workspace, mode="r+"): - # Tile locations - tiles = self.get_tiles() - - print(f"Setting up {len(tiles)} tile(s) . . .") - # Build tiled misfits and combine to form global misfit - self._data_misfit, self._sorting, self._ordering = MisfitFactory( - self.params, models=self.models - ).build( - tiles, - self.inversion_data, - self.inversion_mesh.mesh, - self.models.active_cells, - ) - print("Done.") - - # Re-scale misfits by problem size - multipliers = [] - for mult, func in self._data_misfit: - multipliers.append( - mult * (func.model_map.shape[0] / func.model_map.shape[1]) - ) - - self._data_misfit.multipliers = multipliers - - return self._data_misfit - - @property - def directives(self): - if getattr(self, "_directives", None) is None: - with fetch_active_workspace(self.workspace, mode="r+"): - self._directives = DirectivesFactory(self) - return self._directives - - @property - def inverse_problem(self): - if getattr(self, "_inverse_problem", None) is None: - self._inverse_problem = inverse_problem.BaseInvProblem( - self.data_misfit, - self.regularization, - self.optimization, - ) - - if self.params.initial_beta: - self._inverse_problem.beta = self.params.initial_beta - - return self._inverse_problem - - @property - def inversion(self): - if getattr(self, "_inversion", None) is None: - self._inversion = inversion.BaseInversion( - self.inverse_problem, directiveList=self.directives.directive_list - ) - return self._inversion - - @property - def inversion_data(self): - """Inversion data""" - if getattr(self, "_inversion_data", None) is None: - with fetch_active_workspace(self.workspace, mode="r+"): - self._inversion_data = InversionData(self.workspace, self.params) - - return self._inversion_data - - @property - def inversion_mesh(self): - """Inversion mesh""" - if getattr(self, "_inversion_mesh", None) is None: - with fetch_active_workspace(self.workspace, mode="r+"): - self._inversion_mesh = InversionMesh( - self.workspace, - self.params, - self.inversion_data, - self.inversion_topography, - ) - return self._inversion_mesh - - @property - def inversion_topography(self): - """Inversion topography""" - if getattr(self, "_inversion_topography", None) is None: - self._inversion_topography = InversionTopography( - self.workspace, self.params - ) - return self._inversion_topography - - @property - def inversion_type(self) -> str | None: - """Inversion type""" - return self._inversion_type - - @inversion_type.setter - def inversion_type(self, value): - if value not in DRIVER_MAP: - raise ValueError(f"Invalid inversion type: {value}") - self._inversion_type = value - - @property - def logger(self): - """ - Inversion logger - """ - if getattr(self, "_logger", None) is None: - self._logger = InversionLogger("SimPEG.log", self) - - return self._logger - - @property - def models(self): - """Inversion models""" - if getattr(self, "_models", None) is None: - with fetch_active_workspace(self.workspace, mode="r+"): - self._models = InversionModelCollection(self) - - return self._models - - @property - def n_values(self): - """Number of values in the model""" - if self._n_values is None: - self._n_values = self.models.n_active - - return self._n_values - - @property - def optimization(self): - if getattr(self, "_optimization", None) is None: - if self.params.forward_only: - return optimization.ProjectedGNCG() - - self._optimization = optimization.ProjectedGNCG( - maxIter=self.params.max_global_iterations, - lower=self.models.lower_bound, - upper=self.models.upper_bound, - maxIterLS=self.params.max_line_search_iterations, - maxIterCG=self.params.max_cg_iterations, - tolCG=self.params.tol_cg, - stepOffBoundsFact=1e-8, - LSshorten=0.25, - ) - return self._optimization - - @property - def ordering(self): - """List of ordering of the data.""" - return self._ordering - - @property - def out_group(self): - """The SimPEGGroup""" - if self._out_group is None: - if self.params.out_group is not None: - self._out_group = self.params.out_group - return self._out_group - - with fetch_active_workspace(self.workspace, mode="r+"): - name = self.params.inversion_type.capitalize() - if self.params.forward_only: - name += " Forward" - else: - name += " Inversion" - - self._out_group = SimPEGGroup.create(self.params.geoh5, name=name) - - return self._out_group - - @property - def regularization(self): - if getattr(self, "_regularization", None) is None: - self._regularization = self.get_regularization() - - return self._regularization - - @regularization.setter - def regularization(self, regularization: objective_function.ComboObjectiveFunction): - if not isinstance(regularization, objective_function.ComboObjectiveFunction): - raise TypeError( - f"Regularization must be a ComboObjectiveFunction, not {type(regularization)}." - ) - self._regularization = regularization - - @property - def sorting(self): - """List of arrays for sorting of data from tiles.""" - return self._sorting - - @property - def window(self): - """Inversion window""" - if getattr(self, "_window", None) is None: - self._window = InversionWindow(self.workspace, self.params) - return self._window - - def run(self): - """Run inversion from params""" - sys.stdout = self.logger - self.logger.start() - self.configure_dask() - - simpeg_inversion = self.inversion - self.params.update_group_options() - - predicted = None - if self.params.forward_only: - print("Running the forward simulation ...") - predicted = simpeg_inversion.invProb.get_dpred( - self.models.starting, compute_J=False - ) - else: - # Run the inversion - self.start_inversion_message() - simpeg_inversion.run(self.models.starting) - - self.logger.end() - sys.stdout = self.logger.terminal - self.logger.log.close() - - if self.params.forward_only: - self.directives.save_directives[1].save_components(0, predicted) - self.directives.save_directives[1].save_log() - else: - for directive in self.directives.save_directives: - if ( - isinstance(directive, directives.SaveIterationsGeoH5) - and directive.save_objective_function - ): - directive.save_log() - - def start_inversion_message(self): - # SimPEG reports half phi_d, so we scale to match - has_chi_start = self.params.starting_chi_factor is not None - chi_start = ( - self.params.starting_chi_factor if has_chi_start else self.params.chi_factor - ) - - if getattr(self, "drivers", None) is not None: # joint problem - data_count = np.sum( - [len(d.inversion_data.survey.std) for d in getattr(self, "drivers")] - ) - else: - data_count = len(self.inversion_data.survey.std) - - print( - "Target Misfit: {:.2e} ({} data with chifact = {}) / 2".format( - 0.5 * self.params.chi_factor * data_count, - data_count, - self.params.chi_factor, - ) - ) - print( - "IRLS Start Misfit: {:.2e} ({} data with chifact = {}) / 2".format( - 0.5 * chi_start * data_count, - data_count, - chi_start, - ) - ) - - @property - def mapping(self) -> list[maps.IdentityMap] | None: - """Model mapping for the inversion.""" - if self._mapping is None: - self.mapping = maps.IdentityMap(nP=self.n_values) - - return self._mapping - - @mapping.setter - def mapping(self, value: maps.IdentityMap | list[maps.IdentityMap]): - if not isinstance(value, list): - value = [value] - - if not all( - isinstance(val, maps.IdentityMap) and val.shape[0] == self.n_values - for val in value - ): - raise TypeError( - "'mapping' must be an instance of maps.IdentityMap with shape (n_values, *). " - f"Provided {value}" - ) - - self._mapping = value - - def get_regularization(self): - if self.params.forward_only: - return BaseRegularization(mesh=self.inversion_mesh.mesh) - - reg_funcs = [] - for mapping in self.mapping: - reg = Sparse( - self.inversion_mesh.mesh, - active_cells=self.models.active_cells, - mapping=mapping, - alpha_s=self.params.alpha_s, - reference_model=self.models.reference, - ) - norms = [] - # Adjustment for 2D versus 3D problems - for comp in ["s", "x", "y", "z"]: - if getattr(self.params, f"length_scale_{comp}", None) is not None: - setattr( - reg, - f"length_scale_{comp}", - getattr(self.params, f"length_scale_{comp}"), - ) - - if getattr(self.params, f"{comp}_norm") is not None: - norms.append(getattr(self.params, f"{comp}_norm")) - - if norms: - reg.norms = norms - - if getattr(self.params, "gradient_type") is not None: - setattr( - reg, - "gradient_type", - getattr(self.params, "gradient_type"), - ) - - reg_funcs.append(reg) - - return objective_function.ComboObjectiveFunction(objfcts=reg_funcs) - - def get_tiles(self): - if "2d" in self.params.inversion_type: - tiles = [np.arange(len(self.inversion_data.indices))] - else: - locations = self.inversion_data.locations - - tiles = tile_locations( - locations, - self.params.tile_spatial, - method="kmeans", - ) - - return tiles - - def configure_dask(self): - """Sets Dask config settings.""" - - if self.params.parallelized: - if self.params.n_cpu is None: - self.params.n_cpu = int(multiprocessing.cpu_count() / 2) - - dconf.set({"array.chunk-size": str(self.params.max_chunk_size) + "MiB"}) - dconf.set(scheduler="threads", pool=ThreadPool(self.params.n_cpu)) - - @classmethod - def start(cls, filepath: str | Path, driver_class=None): - _ = driver_class - - ifile = InputFile.read_ui_json(filepath) - inversion_type = ifile.data["inversion_type"] - if inversion_type not in DRIVER_MAP: - msg = f"Inversion type {inversion_type} is not supported." - msg += f" Valid inversions are: {*list(DRIVER_MAP),}." - raise NotImplementedError(msg) - - mod_name, class_name = DRIVER_MAP.get(inversion_type) - module = __import__(mod_name, fromlist=[class_name]) - inversion_driver = getattr(module, class_name) - driver = BaseDriver.start(filepath, driver_class=inversion_driver) - return driver - - -class InversionLogger: - def __init__(self, logfile, driver): - self.driver = driver - self.forward = driver.params.forward_only - self.terminal = sys.stdout - self.log = open(self.get_path(logfile), "w", encoding="utf8") - self.initial_time = time() - - def start(self): - date_time = datetime.now().strftime("%b-%d-%Y:%H:%M:%S") - self.write( - f"SimPEG {self.driver.inversion_type} {'forward' if self.forward else 'inversion'} started {date_time}\n" - ) - - def end(self): - elapsed_time = timedelta(seconds=time() - self.initial_time).seconds - days, hours, minutes, seconds = self.format_seconds(elapsed_time) - self.write( - f"Total runtime: {days} days, {hours} hours, {minutes} minutes, and {seconds} seconds.\n" - ) - - def write(self, message): - self.terminal.write(message) - self.log.write(message) - self.log.flush() - - @staticmethod - def format_seconds(seconds): - days = seconds // (24 * 3600) - seconds = seconds % (24 * 3600) - hours = seconds // 3600 - seconds = seconds % 3600 - minutes = seconds // 60 - seconds = seconds % 60 - return days, hours, minutes, seconds - - def close(self): - self.terminal.close() - - def flush(self): - pass - - def get_path(self, filepath: str | Path) -> str: - root_directory = Path(self.driver.workspace.h5file).parent - return str(root_directory / filepath) - - -if __name__ == "__main__": - file = str(Path(sys.argv[1]).resolve()) - InversionDriver.start(file) - sys.stdout.close() diff --git a/geoapps/inversion/electricals/__init__.py b/geoapps/inversion/electricals/__init__.py index a921312b7..6a6e87967 100644 --- a/geoapps/inversion/electricals/__init__.py +++ b/geoapps/inversion/electricals/__init__.py @@ -1,11 +1,12 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from __future__ import annotations +# flake8: noqa -from .direct_current.three_dimensions import DirectCurrent3DParams -from .induced_polarization.three_dimensions.params import InducedPolarization3DParams +from __future__ import annotations diff --git a/geoapps/inversion/electricals/application.py b/geoapps/inversion/electricals/application.py index b11080878..dfa92ee67 100644 --- a/geoapps/inversion/electricals/application.py +++ b/geoapps/inversion/electricals/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -18,9 +20,16 @@ import numpy as np from geoh5py.data import Data from geoh5py.objects import CurrentElectrode, PotentialElectrode +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile from geoh5py.workspace import Workspace +from simpeg_drivers.electricals.direct_current.three_dimensions.params import ( + DirectCurrent3DParams, +) +from simpeg_drivers.electricals.induced_polarization.three_dimensions.params import ( + InducedPolarization3DParams, +) from geoapps.base.application import BaseApplication from geoapps.base.plot import PlotSelection2D @@ -29,19 +38,15 @@ from geoapps.inversion.electricals.direct_current.three_dimensions.constants import ( app_initializer, ) -from geoapps.inversion.electricals.direct_current.three_dimensions.params import ( - DirectCurrent3DParams, -) -from geoapps.inversion.electricals.induced_polarization.three_dimensions.params import ( - InducedPolarization3DParams, -) from geoapps.inversion.potential_fields.application import ( MeshOctreeOptions, ModelOptions, ) +from geoapps.shared_utils.utils import DrapeOptions, WindowOptions from geoapps.utils import warn_module_not_found from geoapps.utils.list import find_value + with warn_module_not_found(): import ipywidgets as widgets from ipywidgets.widgets import ( @@ -107,7 +112,17 @@ def __init__(self, ui_json=None, plot_result=True, **kwargs): self.params = self._param_class(ui_json) else: app_initializer.update(kwargs) - self.params = self._param_class(**app_initializer) + + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) + extras = { key: value for key, value in app_initializer.items() @@ -225,9 +240,6 @@ def __init__(self, ui_json=None, plot_result=True, **kwargs): object_types=self._object_types, exclusion_types=self._exclusion_types, add_xyz=False, - receivers_offset_z=self.defaults["receivers_offset_z"], - z_from_topo=self.defaults["z_from_topo"], - receivers_radar_drape=self.defaults["receivers_radar_drape"], ) self._alpha_s = widgets.FloatText( min=0, @@ -716,9 +728,9 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) self.update_objects_list() # self.lines.workspace = workspace @@ -1087,9 +1099,11 @@ def write_trigger(self, _): param_dict[f"{key}_channel_bool"] = True if self.receivers_radar_drape.value is not None: - self.workspace.get_entity(self.receivers_radar_drape.value)[0].copy( - parent=new_obj - ) + receiver_drape = self.workspace.get_entity( + self.receivers_radar_drape.value + )[0] + else: + receiver_drape = None for key in self.__dict__: if "resolution" in key: @@ -1122,24 +1136,34 @@ def write_trigger(self, _): param_dict[sub_key.lstrip("_")] = value # Create new params object and write - param_dict["resolution"] = None # No downsampling for dcip param_dict["geoh5"] = new_workspace if param_dict.get("reference_model", None) is None: param_dict["reference_model"] = param_dict["starting_model"] param_dict["alpha_s"] = 0.0 + window_options = WindowOptions( + center_x=self.window_center_x.value, + center_y=self.window_center_y.value, + width=self.window_width.value, + height=self.window_height.value, + azimuth=self.window_azimuth.value, + ) + drape_options = DrapeOptions( + topography_object=param_dict["topography_object"], + topography=param_dict["topography"], + z_from_topo=param_dict["z_from_topo"], + receivers_offset_z=param_dict["receivers_offset_z"], + receivers_radar_drape=receiver_drape, + ) + # Pre-processing update_dict = preprocess_data( - workspace=ws, - param_dict=param_dict, - resolution=None, - data_object=param_dict["data_object"], - window_center_x=self.window_center_x.value, - window_center_y=self.window_center_y.value, - window_width=self.window_width.value, - window_height=self.window_height.value, - window_azimuth=self.window_azimuth.value, + ws, + param_dict, + param_dict["data_object"], + window_options, + drape_options=drape_options, ) param_dict.update(update_dict) @@ -1187,7 +1211,7 @@ def file_browser_change(self, _): elif data["inversion_type"] == "induced polarization 3d": self._param_class = InducedPolarization3DParams - self.params = getattr(self, "_param_class")( + self.params = self._param_class( InputFile.read_ui_json(self.file_browser.selected) ) self.params.geoh5.open(mode="r") diff --git a/geoapps/inversion/electricals/direct_current/__init__.py b/geoapps/inversion/electricals/direct_current/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/inversion/electricals/direct_current/__init__.py +++ b/geoapps/inversion/electricals/direct_current/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/constants.py b/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/constants.py index 3fea63dbb..37dd903e2 100644 --- a/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/constants.py +++ b/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/constants.py @@ -1,312 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.direct_current import PotentialElectrode - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Direct Current (DC) 2D Batch Inversion", - "icon": "PotentialElectrode", - "inversion_type": "direct current pseudo 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "line_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": 0.0, - "gps_receivers_offset": None, - "potential_channel": None, - "potential_uncertainty": 1.0, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "mesh": None, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "files_only": False, - "cleanup": True, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "run_command_boolean": False, - "conda_environment": "geoapps", - "distributed_workers": None, - "potential_channel_bool": True, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Direct Current (DC) 2D Batch Forward", - "icon": "PotentialElectrode", - "inversion_type": "direct current pseudo 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "line_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": 0.0, - "gps_receivers_offset": None, - "potential_channel_bool": True, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "mesh": None, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "files_only": False, - "cleanup": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "run_command_boolean": False, - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Direct Current (DC) 3D Inversion", - "icon": "PotentialElectrode", - "inversion_type": "direct current pseudo 3d", - "line_object": { - "association": "Cell", - "dataType": "Referenced", - "group": "Data", - "main": True, - "label": "Line ID", - "parent": "data_object", - "value": None, - }, - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{275ecee9-9c24-4378-bf94-65f3c5fbe163}", - "value": None, - }, - "potential_channel_bool": True, - "potential_channel": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Potential (V/I)", - "parent": "data_object", - "value": None, - }, - "potential_uncertainty": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "property": None, - "value": 1.0, - }, - "mesh": { - "group": "Mesh and models", - "main": True, - "label": "Mesh", - "meshType": "{4EA87376-3ECE-438B-BF12-3479733DED46}", - "optional": True, - "enabled": False, - "value": None, - "visible": True, - }, - "u_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Easting core cell size (m)", - "value": 25.0, - }, - "v_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Northing core cell size (m)", - "value": 25.0, - }, - "depth_core": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Depth of core (m)", - "value": 500.0, - }, - "horizontal_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Horizontal padding (m)", - "value": 1000.0, - }, - "vertical_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "dependencyType": "disabled", - "label": "Vertical padding (m)", - "value": 1000.0, - }, - "expansion_factor": { - "main": True, - "group": "Mesh and models", - "label": "Expansion factor", - "value": 1.1, - }, - "starting_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial Conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": "Cell", - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference Conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "tile_spatial": 1, - "files_only": { - "label": "Generate files only", - "group": "Python run preferences", - "main": True, - "value": False, - }, - "cleanup": { - "main": True, - "group": "Python run preferences", - "label": "Clean directory", - "value": True, - }, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - - -################ Validations ################# - -validations = { - "inversion_type": { - "required": True, - "values": ["direct current pseudo 3d", "direct current 2d"], - }, - "data_object": {"required": True, "types": [UUID, PotentialElectrode]}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon_dcip.geoh5"), @@ -314,7 +20,7 @@ "potential_channel": UUID("{502e7256-aafa-4016-969f-5cc3a4f27315}"), "potential_uncertainty": UUID("{62746129-3d82-427e-a84c-78cded00c0bc}"), "line_object": UUID("{d400e8f1-8460-4609-b852-b3b93f945770}"), - "mesh": UUID("{da109284-aa8c-4824-a647-29951109b058}"), + "mesh": UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"), "starting_model": 1e-1, "reference_model": 1e-1, "s_norm": 0.0, diff --git a/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/driver.py b/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/driver.py deleted file mode 100644 index 5f8bac455..000000000 --- a/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/driver.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.electricals.direct_current.pseudo_three_dimensions.constants import ( - validations, -) -from geoapps.inversion.electricals.direct_current.pseudo_three_dimensions.params import ( - DirectCurrentPseudo3DParams, -) -from geoapps.inversion.electricals.direct_current.two_dimensions.params import ( - DirectCurrent2DParams, -) -from geoapps.inversion.electricals.driver import BasePseudo3DDriver - - -class DirectCurrentPseudo3DDriver(BasePseudo3DDriver): - _params_class = DirectCurrentPseudo3DParams - _params_2d_class = DirectCurrent2DParams - _validations = validations diff --git a/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/params.py b/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/params.py deleted file mode 100644 index 2216c33f7..000000000 --- a/geoapps/inversion/electricals/direct_current/pseudo_three_dimensions/params.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion.electricals.direct_current.pseudo_three_dimensions.constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) -from geoapps.inversion.electricals.params import BasePseudo3DParams - - -class DirectCurrentPseudo3DParams(BasePseudo3DParams): - """ - Parameter class for electrical->conductivity inversion. - """ - - _physical_property = "conductivity" - _inversion_type = "direct current 3d" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._validations = validations - self._potential_channel_bool = None - self._potential_channel = None - self._potential_uncertainty = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def potential_channel_bool(self): - return self._potential_channel_bool - - @potential_channel_bool.setter - def potential_channel_bool(self, val): - self.setter_validator("potential_channel_bool", val) - - @property - def potential_channel(self): - return self._potential_channel - - @potential_channel.setter - def potential_channel(self, val): - self.setter_validator("potential_channel", val, fun=self._uuid_promoter) - - @property - def potential_uncertainty(self): - return self._potential_uncertainty - - @potential_uncertainty.setter - def potential_uncertainty(self, val): - self.setter_validator("potential_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/electricals/direct_current/three_dimensions/__init__.py b/geoapps/inversion/electricals/direct_current/three_dimensions/__init__.py index 677f61a81..6844b17f2 100644 --- a/geoapps/inversion/electricals/direct_current/three_dimensions/__init__.py +++ b/geoapps/inversion/electricals/direct_current/three_dimensions/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import DirectCurrent3DParams +# flake8: noqa diff --git a/geoapps/inversion/electricals/direct_current/three_dimensions/constants.py b/geoapps/inversion/electricals/direct_current/three_dimensions/constants.py index aac574b34..7fc13ba41 100644 --- a/geoapps/inversion/electricals/direct_current/three_dimensions/constants.py +++ b/geoapps/inversion/electricals/direct_current/three_dimensions/constants.py @@ -1,253 +1,25 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.direct_current import PotentialElectrode - -import geoapps from geoapps import assets_path -from geoapps.inversion.constants import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Direct Current (DC) 3D Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html", - "icon": "PotentialElectrode", - "inversion_type": "direct current 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "potential_channel": None, - "potential_uncertainty": 1.0, - "mesh": None, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, - "potential_channel_bool": True, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Direct Current (DC) 3D Forward", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html", - "icon": "PotentialElectrode", - "inversion_type": "direct current 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "potential_channel_bool": True, - "mesh": None, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Direct Current (DC) 3D Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html", - "icon": "PotentialElectrode", - "inversion_type": "direct current 3d", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{275ecee9-9c24-4378-bf94-65f3c5fbe163}", - "value": None, - }, - "z_from_topo": { - "group": "Data", - "main": True, - "label": "Surface survey", - "tooltip": "Uncheck if borehole data is present", - "value": True, - }, - "potential_channel_bool": True, - "potential_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Potential (V/I)", - "parent": "data_object", - "value": None, - }, - "potential_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "property": None, - "value": 1.0, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial conductivity (S/m)", - "property": None, - "value": 1e-1, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference conductivity (S/m)", - "property": None, - "value": 0.0, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "receivers_offset_z": { - "group": "Data pre-processing", - "label": "Z static offset", - "optional": True, - "enabled": False, - "value": 0.0, - "visible": False, - }, - "receivers_radar_drape": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data pre-processing", - "label": "Z radar offset", - "tooltip": "Apply a non-homogeneous offset to survey object from radar channel.", - "optional": True, - "parent": "data_object", - "value": None, - "enabled": False, - "visible": False, - }, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - - -################ Validations ################# - -validations = { - "inversion_type": { - "required": True, - "values": ["direct current 3d"], - }, - "data_object": {"required": True, "types": [UUID, PotentialElectrode]}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon_dcip.geoh5"), "data_object": UUID("{6e14de2c-9c2f-4976-84c2-b330d869cb82}"), "potential_channel": UUID("{502e7256-aafa-4016-969f-5cc3a4f27315}"), "potential_uncertainty": UUID("{62746129-3d82-427e-a84c-78cded00c0bc}"), - "mesh": UUID("{da109284-aa8c-4824-a647-29951109b058}"), + "mesh": UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"), "reference_model": 1e-1, "starting_model": 1e-1, "octree_levels_topo": [0, 0, 0, 2], diff --git a/geoapps/inversion/electricals/direct_current/three_dimensions/driver.py b/geoapps/inversion/electricals/direct_current/three_dimensions/driver.py deleted file mode 100644 index f4cc2d5f8..000000000 --- a/geoapps/inversion/electricals/direct_current/three_dimensions/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import DirectCurrent3DParams - - -class DirectCurrent3DDriver(InversionDriver): - _params_class = DirectCurrent3DParams - _validations = validations - - def __init__(self, params: DirectCurrent3DParams): - super().__init__(params) diff --git a/geoapps/inversion/electricals/direct_current/three_dimensions/params.py b/geoapps/inversion/electricals/direct_current/three_dimensions/params.py deleted file mode 100644 index e0d8242c9..000000000 --- a/geoapps/inversion/electricals/direct_current/three_dimensions/params.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class DirectCurrent3DParams(InversionBaseParams): - """ - Parameter class for electrical->conductivity inversion. - """ - - _physical_property = "conductivity" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "direct current 3d" - self._validations = validations - self._potential_channel_bool = None - self._potential_channel = None - self._potential_uncertainty = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def inversion_type(self): - return self._inversion_type - - @inversion_type.setter - def inversion_type(self, val): - self.setter_validator("inversion_type", val) - - @property - def potential_channel_bool(self): - return self._potential_channel_bool - - @potential_channel_bool.setter - def potential_channel_bool(self, val): - self.setter_validator("potential_channel_bool", val) - - @property - def potential_channel(self): - return self._potential_channel - - @potential_channel.setter - def potential_channel(self, val): - self.setter_validator("potential_channel", val, fun=self._uuid_promoter) - - @property - def potential_uncertainty(self): - return self._potential_uncertainty - - @potential_uncertainty.setter - def potential_uncertainty(self, val): - self.setter_validator("potential_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/electricals/direct_current/two_dimensions/__init__.py b/geoapps/inversion/electricals/direct_current/two_dimensions/__init__.py index db0b0b918..6844b17f2 100644 --- a/geoapps/inversion/electricals/direct_current/two_dimensions/__init__.py +++ b/geoapps/inversion/electricals/direct_current/two_dimensions/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import DirectCurrent2DParams +# flake8: noqa diff --git a/geoapps/inversion/electricals/direct_current/two_dimensions/constants.py b/geoapps/inversion/electricals/direct_current/two_dimensions/constants.py index cc8db9774..5341dcd03 100644 --- a/geoapps/inversion/electricals/direct_current/two_dimensions/constants.py +++ b/geoapps/inversion/electricals/direct_current/two_dimensions/constants.py @@ -1,330 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.direct_current import PotentialElectrode - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Direct Current (DC) 2D Inversion", - "icon": "PotentialElectrode", - "inversion_type": "direct current 2d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "line_object": None, - "line_id": 1, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "potential_channel": None, - "potential_uncertainty": 1.0, - "mesh": None, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, - "potential_channel_bool": True, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Direct Current (DC) 2D Forward", - "icon": "PotentialElectrode", - "inversion_type": "direct current 2d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "line_object": None, - "line_id": 1, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "potential_channel_bool": True, - "mesh": None, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, - "gradient_type": "total", -} - -default_ui_json = { - "title": "Direct Current (DC) 2D Inversion", - "icon": "PotentialElectrode", - "inversion_type": "direct current 2d", - "line_object": { - "association": "Cell", - "dataType": "Referenced", - "group": "Data", - "main": True, - "label": "Line ID", - "parent": "data_object", - "value": None, - }, - "line_id": { - "group": "Data", - "main": True, - "min": 1, - "label": "Line number", - "value": 1, - }, - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{275ecee9-9c24-4378-bf94-65f3c5fbe163}", - "value": None, - }, - "z_from_topo": { - "group": "Data", - "main": True, - "label": "Surface survey", - "tooltip": "Uncheck if borehole data is present", - "value": False, - }, - "potential_channel_bool": True, - "potential_channel": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Potential (V/I)", - "tooltip": "Potential: voltage normalized by current", - "parent": "data_object", - "value": None, - }, - "potential_uncertainty": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "property": None, - "value": 1.0, - }, - "mesh": { - "group": "Mesh and models", - "main": True, - "optional": True, - "enabled": False, - "label": "Mesh", - "meshType": "{C94968EA-CF7D-11EB-B8BC-0242AC130003}", - "value": None, - }, - "u_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Easting core cell size (m)", - "value": 25.0, - }, - "v_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Northing core cell size (m)", - "value": 25.0, - }, - "depth_core": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Depth of core (m)", - "value": 500.0, - }, - "horizontal_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Horizontal padding (m)", - "value": 1000.0, - }, - "vertical_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "dependencyType": "disabled", - "label": "Vertical padding (m)", - "value": 1000.0, - }, - "expansion_factor": { - "main": True, - "group": "Mesh and models", - "label": "Expansion factor", - "value": 1.1, - }, - "starting_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": "Cell", - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "receivers_offset_z": { - "group": "Data pre-processing", - "label": "Z static offset", - "optional": True, - "enabled": False, - "value": 0.0, - "visible": False, - }, - "receivers_radar_drape": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data pre-processing", - "label": "Z radar offset", - "tooltip": "Apply a non-homogeneous offset to survey object from radar channel.", - "optional": True, - "parent": "data_object", - "value": None, - "enabled": False, - "visible": False, - }, - "tile_spatial": 1, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - -################ Validations ################# - -validations = { - "inversion_type": { - "required": True, - "values": ["direct current 2d"], - }, - "data_object": {"required": True, "types": [UUID, PotentialElectrode]}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon_dcip.geoh5"), diff --git a/geoapps/inversion/electricals/direct_current/two_dimensions/driver.py b/geoapps/inversion/electricals/direct_current/two_dimensions/driver.py deleted file mode 100644 index 832b288ba..000000000 --- a/geoapps/inversion/electricals/direct_current/two_dimensions/driver.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import DirectCurrent2DParams - - -class DirectCurrent2DDriver(InversionDriver): - _params_class = DirectCurrent2DParams - _validations = validations - - def __init__(self, params: DirectCurrent2DParams): - super().__init__(params) diff --git a/geoapps/inversion/electricals/direct_current/two_dimensions/params.py b/geoapps/inversion/electricals/direct_current/two_dimensions/params.py deleted file mode 100644 index c24f9fc3a..000000000 --- a/geoapps/inversion/electricals/direct_current/two_dimensions/params.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from ...params import Base2DParams -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class DirectCurrent2DParams(Base2DParams): - """ - Parameter class for electrical->conductivity inversion. - """ - - _physical_property = "conductivity" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "direct current 2d" - self._validations = validations - self._potential_channel_bool = None - self._potential_channel = None - self._potential_uncertainty = None - self._line_object = None - self._line_id = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def potential_channel_bool(self): - return self._potential_channel_bool - - @potential_channel_bool.setter - def potential_channel_bool(self, val): - self.setter_validator("potential_channel_bool", val) - - @property - def potential_channel(self): - return self._potential_channel - - @potential_channel.setter - def potential_channel(self, val): - self.setter_validator("potential_channel", val, fun=self._uuid_promoter) - - @property - def potential_uncertainty(self): - return self._potential_uncertainty - - @potential_uncertainty.setter - def potential_uncertainty(self, val): - self.setter_validator("potential_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/electricals/driver.py b/geoapps/inversion/electricals/driver.py deleted file mode 100644 index f93a87570..000000000 --- a/geoapps/inversion/electricals/driver.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import sys -import uuid -from copy import deepcopy -from pathlib import Path - -import numpy as np -from geoh5py.data import Data -from geoh5py.objects import DrapeModel -from geoh5py.workspace import Workspace - -from geoapps.inversion.components.data import InversionData -from geoapps.inversion.components.topography import InversionTopography -from geoapps.inversion.components.windows import InversionWindow -from geoapps.inversion.line_sweep.driver import LineSweepDriver -from geoapps.inversion.params import BaseParams -from geoapps.shared_utils.utils import get_locations, weighted_average -from geoapps.utils.models import get_drape_model -from geoapps.utils.surveys import extract_dcip_survey - - -class BasePseudo3DDriver(LineSweepDriver): - _params_class: type(BaseParams) - _params_2d_class: type(BaseParams) - _validations: dict - _model_list: list[str] = [] - - def __init__(self, params): # pylint: disable=W0235 - super().__init__(params) - if params.files_only: - sys.exit("Files written") - - def transfer_models(self, mesh: DrapeModel) -> dict[str, uuid.UUID]: - xyz_in = get_locations(self.workspace, self.pseudo3d_params.mesh) - - models = {"starting_model": self.pseudo3d_params.starting_model} - - for model in self._model_list: - models[model] = getattr(self.pseudo3d_params, model) - - if not self.pseudo3d_params.forward_only: - for model in ["reference_model", "lower_bound", "upper_bound"]: - models[model] = getattr(self.pseudo3d_params, model) - - xyz_out = mesh.centroids - model_uids = deepcopy(models) - for name, model in models.items(): - if model is None: - continue - elif isinstance(model, Data): - model_values = weighted_average(xyz_in, xyz_out, [model.values], n=1)[0] - else: - model_values = model * np.ones(len(xyz_out)) - - model_object = mesh.add_data({name: {"values": model_values}}) - model_uids[name] = model_object.uid - - return model_uids - - def write_files(self, lookup): - """Write ui.geoh5 and ui.json files for sweep trials.""" - - forward_only = self.pseudo3d_params.forward_only - ifile = self._params_2d_class(forward_only=forward_only).input_file - - with self.workspace.open(mode="r+"): - self._window = InversionWindow(self.workspace, self.pseudo3d_params) - self._inversion_data = InversionData(self.workspace, self.pseudo3d_params) - self._inversion_topography = InversionTopography( - self.workspace, self.pseudo3d_params - ) - - for uid, trial in lookup.items(): - if trial["status"] != "pending": - continue - - filepath = Path(self.working_directory) / f"{uid}.ui.geoh5" - with Workspace(filepath) as iter_workspace: - cell_mask: np.ndarray = ( - self.pseudo3d_params.line_object.values == trial["line_id"] - ) - - if not np.any(cell_mask): - continue - - receiver_entity = extract_dcip_survey( - iter_workspace, self.inversion_data.entity, cell_mask - ) - current_entity = receiver_entity.current_electrodes - receiver_locs = np.vstack( - [receiver_entity.vertices, current_entity.vertices] - ) - - mesh = get_drape_model( - iter_workspace, - "Models", - receiver_locs, - [ - self.pseudo3d_params.u_cell_size, - self.pseudo3d_params.v_cell_size, - ], - self.pseudo3d_params.depth_core, - [self.pseudo3d_params.horizontal_padding] * 2 - + [self.pseudo3d_params.vertical_padding, 1], - self.pseudo3d_params.expansion_factor, - )[0] - - model_uids = self.transfer_models(mesh) - - for key in ifile.data: - param = getattr(self.pseudo3d_params, key, None) - if key not in ["title", "inversion_type"]: - ifile.data[key] = param - - self.pseudo3d_params.topography_object.copy( - parent=iter_workspace, copy_children=True - ) - - ifile.data.update( - dict( - **{ - "geoh5": iter_workspace, - "mesh": mesh, - "data_object": receiver_entity, - "line_id": trial["line_id"], - "out_group": None, - }, - **model_uids, - ) - ) - - ifile.name = f"{uid}.ui.json" - ifile.path = self.working_directory # pylint: disable=E1101 - ifile.write_ui_json() - lookup[uid]["status"] = "written" - - _ = self.update_lookup(lookup) # pylint: disable=E1101 diff --git a/geoapps/inversion/electricals/induced_polarization/__init__.py b/geoapps/inversion/electricals/induced_polarization/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/inversion/electricals/induced_polarization/__init__.py +++ b/geoapps/inversion/electricals/induced_polarization/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/constants.py b/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/constants.py index d2019e6a5..98bcee0d0 100644 --- a/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/constants.py +++ b/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/constants.py @@ -1,325 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.direct_current import PotentialElectrode - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Induced Polarization (IP) 2D Batch Inversion", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization pseudo 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "line_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": 0.0, - "gps_receivers_offset": None, - "chargeability_channel": None, - "chargeability_uncertainty": 1.0, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "mesh": None, - "conductivity_model": 1e-3, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "files_only": False, - "cleanup": True, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "run_command_boolean": False, - "conda_environment": "geoapps", - "distributed_workers": None, - "chargeability_channel_bool": True, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Induced Polarization (IP) 2D Batch Forward", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization pseudo 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "line_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": 0.0, - "gps_receivers_offset": None, - "chargeability_channel_bool": True, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "mesh": None, - "conductivity_model": 1e-3, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "files_only": False, - "cleanup": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "run_command_boolean": False, - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Induced Polarization (IP) 3D Inversion", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization pseudo 3d", - "line_object": { - "association": "Cell", - "dataType": "Referenced", - "group": "Data", - "main": True, - "label": "Line ID", - "parent": "data_object", - "value": None, - }, - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{275ecee9-9c24-4378-bf94-65f3c5fbe163}", - "value": None, - }, - "chargeability_channel_bool": True, - "chargeability_channel": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Chargeability (V/V)", - "parent": "data_object", - "value": None, - }, - "chargeability_uncertainty": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "property": None, - "value": 1.0, - }, - "mesh": { - "group": "Mesh and models", - "main": True, - "optional": True, - "enabled": False, - "label": "Mesh", - "meshType": "{4EA87376-3ECE-438B-BF12-3479733DED46}", - "value": None, - "visible": True, - }, - "conductivity_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "u_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Easting core cell size (m)", - "value": 25.0, - }, - "v_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Northing core cell size (m)", - "value": 25.0, - }, - "depth_core": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Depth of core (m)", - "value": 500.0, - }, - "horizontal_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Horizontal padding (m)", - "value": 1000.0, - }, - "vertical_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "dependencyType": "disabled", - "label": "Vertical padding (m)", - "value": 1000.0, - }, - "expansion_factor": { - "main": True, - "group": "Mesh and models", - "label": "Expansion factor", - "value": 1.1, - }, - "starting_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial chargeability (V/V)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": "Cell", - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference chargeability (V/V)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (V/V)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (V/V)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "tile_spatial": 1, - "files_only": { - "label": "Generate files only", - "group": "Python run preferences", - "main": True, - "value": False, - }, - "cleanup": { - "main": True, - "group": "Python run preferences", - "label": "Clean directory", - "value": True, - }, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - - -################ Validations ################# - -validations = { - "inversion_type": { - "required": True, - "values": ["induced polarization pseudo 3d", "induced polarization 2d"], - }, - "data_object": {"required": True, "types": [UUID, PotentialElectrode]}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon_dcip.geoh5"), @@ -327,7 +20,7 @@ "chargeability_channel": UUID("{162320e6-2b80-4877-9ec1-a8f5b6a13673}"), "chargeability_uncertainty": 0.001, "line_object": UUID("{d400e8f1-8460-4609-b852-b3b93f945770}"), - "mesh": UUID("{da109284-aa8c-4824-a647-29951109b058}"), + "mesh": UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"), "starting_model": 1e-4, "conductivity_model": 0.1, "s_norm": 0.0, diff --git a/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/driver.py b/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/driver.py deleted file mode 100644 index d0c6806f8..000000000 --- a/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/driver.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.electricals.driver import BasePseudo3DDriver -from geoapps.inversion.electricals.induced_polarization.pseudo_three_dimensions.constants import ( - validations, -) -from geoapps.inversion.electricals.induced_polarization.pseudo_three_dimensions.params import ( - InducedPolarizationPseudo3DParams, -) -from geoapps.inversion.electricals.induced_polarization.two_dimensions.params import ( - InducedPolarization2DParams, -) - - -class InducedPolarizationPseudo3DDriver(BasePseudo3DDriver): - _params_class = InducedPolarizationPseudo3DParams - _params_2d_class = InducedPolarization2DParams - _validations = validations - _model_list = ["conductivity_model"] diff --git a/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/params.py b/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/params.py deleted file mode 100644 index 77580a024..000000000 --- a/geoapps/inversion/electricals/induced_polarization/pseudo_three_dimensions/params.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion.electricals.induced_polarization.pseudo_three_dimensions.constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) -from geoapps.inversion.electricals.params import BasePseudo3DParams - - -class InducedPolarizationPseudo3DParams(BasePseudo3DParams): - """ - Parameter class for electrical->chargeability inversion. - """ - - _physical_property = "chargeability" - _inversion_type = "induced polarization pseudo 3d" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._validations = validations - self._conductivity_model: float | None = 1e-3 - self._chargeability_channel_bool: bool = True - self._chargeability_channel = None - self._chargeability_uncertainty = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def conductivity_model(self): - return self._conductivity_model - - @conductivity_model.setter - def conductivity_model(self, value): - self.setter_validator("conductivity_model", value) - - @property - def chargeability_channel_bool(self): - return self._chargeability_channel_bool - - @chargeability_channel_bool.setter - def chargeability_channel_bool(self, value): - self.setter_validator("chargeability_channel_bool", value) - - @property - def chargeability_channel(self): - return self._chargeability_channel - - @chargeability_channel.setter - def chargeability_channel(self, value): - self.setter_validator("chargeability_channel", value) - - @property - def chargeability_uncertainty(self): - return self._chargeability_uncertainty - - @chargeability_uncertainty.setter - def chargeability_uncertainty(self, value): - self.setter_validator("chargeability_uncertainty", value) diff --git a/geoapps/inversion/electricals/induced_polarization/three_dimensions/__init__.py b/geoapps/inversion/electricals/induced_polarization/three_dimensions/__init__.py index 951bd314b..6844b17f2 100644 --- a/geoapps/inversion/electricals/induced_polarization/three_dimensions/__init__.py +++ b/geoapps/inversion/electricals/induced_polarization/three_dimensions/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import InducedPolarization3DParams +# flake8: noqa diff --git a/geoapps/inversion/electricals/induced_polarization/three_dimensions/constants.py b/geoapps/inversion/electricals/induced_polarization/three_dimensions/constants.py index 00bd0c17f..b4207d4f2 100644 --- a/geoapps/inversion/electricals/induced_polarization/three_dimensions/constants.py +++ b/geoapps/inversion/electricals/induced_polarization/three_dimensions/constants.py @@ -1,267 +1,25 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.direct_current import PotentialElectrode - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -inversion_defaults = { - "version": geoapps.__version__, - "title": "Induced Polarization (IP) 3D Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "chargeability_channel": None, - "chargeability_uncertainty": 1.0, - "mesh": None, - "conductivity_model": 1e-3, - "starting_model": 0.0, - "reference_model": 0.0, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 1e1, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 50, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_ram": None, - "store_sensitivities": "ram", - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, - "chargeability_channel_bool": True, -} - -forward_defaults = { - "version": geoapps.__version__, - "title": "Induced Polarization (IP) 3D Forward", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization 3d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "chargeability_channel_bool": True, - "mesh": None, - "conductivity_model": 1e-3, - "starting_model": None, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Induced Polarization (IP) 3D Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization 3d", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{275ecee9-9c24-4378-bf94-65f3c5fbe163}", - "value": None, - }, - "z_from_topo": { - "group": "Data", - "main": True, - "label": "Surface survey", - "tooltip": "Uncheck if borehole data is present", - "value": True, - }, - "chargeability_channel_bool": True, - "chargeability_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Chargeability (V/V)", - "parent": "data_object", - "value": None, - }, - "chargeability_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "property": None, - "value": 1.0, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial Chargeability (V/V)", - "property": None, - "min": 0.0, - "max": 10000.0, - "value": 0.0, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference Chargeability (V/V)", - "property": None, - "value": 0.0, - }, - "conductivity_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (V/V)", - "property": None, - "optional": True, - "value": 0, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (V/V", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "receivers_offset_z": { - "group": "Data pre-processing", - "label": "Z static offset", - "optional": True, - "enabled": False, - "value": 0.0, - "visible": False, - }, - "receivers_radar_drape": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data pre-processing", - "label": "Z radar offset", - "tooltip": "Apply a non-homogeneous offset to survey object from radar channel.", - "optional": True, - "parent": "data_object", - "value": None, - "enabled": False, - "visible": False, - }, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - - -################ Validations ################## - -validations = { - "inversion_type": { - "required": True, - "values": ["induced polarization 3d"], - }, - "conductivity_model": {"required": True}, - "data_object": {"required": True, "types": [UUID, PotentialElectrode]}, -} app_initializer = { "geoh5": str(assets_path() / "FlinFlon_dcip.geoh5"), "data_object": UUID("{6e14de2c-9c2f-4976-84c2-b330d869cb82}"), "chargeability_channel": UUID("{162320e6-2b80-4877-9ec1-a8f5b6a13673}"), "chargeability_uncertainty": 0.001, - "mesh": UUID("{da109284-aa8c-4824-a647-29951109b058}"), + "mesh": UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"), "starting_model": 1e-4, "conductivity_model": 0.1, "octree_levels_topo": [0, 0, 4, 4], diff --git a/geoapps/inversion/electricals/induced_polarization/three_dimensions/driver.py b/geoapps/inversion/electricals/induced_polarization/three_dimensions/driver.py deleted file mode 100644 index 2cf13ac18..000000000 --- a/geoapps/inversion/electricals/induced_polarization/three_dimensions/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import InducedPolarization3DParams - - -class InducedPolarization3DDriver(InversionDriver): - _params_class = InducedPolarization3DParams - _validations = validations - - def __init__(self, params: InducedPolarization3DParams): - super().__init__(params) diff --git a/geoapps/inversion/electricals/induced_polarization/three_dimensions/params.py b/geoapps/inversion/electricals/induced_polarization/three_dimensions/params.py deleted file mode 100644 index 0b6d59aa9..000000000 --- a/geoapps/inversion/electricals/induced_polarization/three_dimensions/params.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class InducedPolarization3DParams(InversionBaseParams): - """ - Parameter class for electrical-induced polarization (IP) inversion. - """ - - _physical_property = "chargeability" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "induced polarization 3d" - self._validations = validations - self._chargeability_channel_bool = None - self._chargeability_channel = None - self._chargeability_uncertainty = None - self._conductivity_model_object = None - self._conductivity_model = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def inversion_type(self): - return self._inversion_type - - @inversion_type.setter - def inversion_type(self, val): - self.setter_validator("inversion_type", val) - - @property - def chargeability_channel_bool(self): - return self._chargeability_channel_bool - - @chargeability_channel_bool.setter - def chargeability_channel_bool(self, val): - self.setter_validator("chargeability_channel_bool", val) - - @property - def chargeability_channel(self): - return self._chargeability_channel - - @chargeability_channel.setter - def chargeability_channel(self, val): - self.setter_validator("chargeability_channel", val, fun=self._uuid_promoter) - - @property - def chargeability_uncertainty(self): - return self._chargeability_uncertainty - - @chargeability_uncertainty.setter - def chargeability_uncertainty(self, val): - self.setter_validator("chargeability_uncertainty", val, fun=self._uuid_promoter) - - @property - def conductivity_model_object(self): - return self._conductivity_model_object - - @conductivity_model_object.setter - def conductivity_model_object(self, val): - self.setter_validator("conductivity_model_object", val, fun=self._uuid_promoter) - - @property - def conductivity_model(self): - return self._conductivity_model - - @conductivity_model.setter - def conductivity_model(self, val): - self.setter_validator("conductivity_model", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/electricals/induced_polarization/two_dimensions/__init__.py b/geoapps/inversion/electricals/induced_polarization/two_dimensions/__init__.py index 2dd8e5366..6844b17f2 100644 --- a/geoapps/inversion/electricals/induced_polarization/two_dimensions/__init__.py +++ b/geoapps/inversion/electricals/induced_polarization/two_dimensions/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import InducedPolarization2DParams +# flake8: noqa diff --git a/geoapps/inversion/electricals/induced_polarization/two_dimensions/constants.py b/geoapps/inversion/electricals/induced_polarization/two_dimensions/constants.py index 2ff8d634b..abf15e2fc 100644 --- a/geoapps/inversion/electricals/induced_polarization/two_dimensions/constants.py +++ b/geoapps/inversion/electricals/induced_polarization/two_dimensions/constants.py @@ -1,341 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.direct_current import PotentialElectrode - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Induced Polarization (IP) 2D Inversion", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization 2d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "line_object": None, - "line_id": 1, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "chargeability_channel": None, - "chargeability_uncertainty": 1.0, - "mesh": None, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "conductivity_model": 1e-3, - "starting_model": None, - "reference_model": None, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_ram": None, - "store_sensitivities": "ram", - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, - "chargeability_channel_bool": True, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Induced Polarization (IP) 2D Forward", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization 2d", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": True, - "line_object": None, - "line_id": 1, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "chargeability_channel_bool": True, - "mesh": None, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "depth_core": 500.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "expansion_factor": 1.1, - "conductivity_model": 1e-3, - "starting_model": None, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Induced Polarization (IP) 2D Inversion", - "icon": "PotentialElectrode", - "inversion_type": "induced polarization 2d", - "line_object": { - "association": "Cell", - "dataType": "Referenced", - "group": "Data", - "main": True, - "label": "Line ID", - "parent": "data_object", - "value": None, - }, - "line_id": { - "group": "Data", - "main": True, - "min": 1, - "label": "Line number", - "value": 1, - }, - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{275ecee9-9c24-4378-bf94-65f3c5fbe163}", - "value": None, - }, - "z_from_topo": { - "group": "Data", - "main": True, - "label": "Surface survey", - "tooltip": "Uncheck if borehole data is present", - "value": True, - }, - "chargeability_channel_bool": True, - "chargeability_channel": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Chargeability (V/V)", - "parent": "data_object", - "value": None, - }, - "chargeability_uncertainty": { - "association": "Cell", - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "property": None, - "value": 1.0, - }, - "mesh": { - "group": "Mesh and models", - "main": True, - "optional": True, - "enabled": False, - "label": "Mesh", - "meshType": "{C94968EA-CF7D-11EB-B8BC-0242AC130003}", - "value": None, - }, - "u_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Easting core cell size (m)", - "value": 25.0, - }, - "v_cell_size": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Northing core cell size (m)", - "value": 25.0, - }, - "depth_core": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Depth of core (m)", - "value": 500.0, - }, - "horizontal_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "enabled": True, - "label": "Horizontal padding (m)", - "value": 1000.0, - }, - "vertical_padding": { - "min": 0.0, - "group": "Mesh and models", - "main": True, - "dependencyType": "disabled", - "label": "Vertical padding (m)", - "value": 1000.0, - }, - "expansion_factor": { - "main": True, - "group": "Mesh and models", - "label": "Expansion factor", - "value": 1.1, - }, - "conductivity_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "starting_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial chargeability (V/V)", - "property": None, - "value": 0.0, - }, - "reference_model": { - "association": "Cell", - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference chargeability (V/V)", - "property": None, - "value": 0.0, - }, - "lower_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (V/V)", - "property": None, - "optional": True, - "value": 0, - "enabled": False, - }, - "upper_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (V/V)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "tile_spatial": 1, - "receivers_offset_z": { - "group": "Data pre-processing", - "label": "Z static offset", - "optional": True, - "enabled": False, - "value": 0.0, - "visible": False, - }, - "receivers_radar_drape": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data pre-processing", - "label": "Z radar offset", - "tooltip": "Apply a non-homogeneous offset to survey object from radar channel.", - "optional": True, - "parent": "data_object", - "value": None, - "enabled": False, - "visible": False, - }, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - -################ Validations ################# - -validations = { - "inversion_type": { - "required": True, - "values": ["induced polarization 2d"], - }, - "data_object": {"required": True, "types": [UUID, PotentialElectrode]}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon_dcip.geoh5"), diff --git a/geoapps/inversion/electricals/induced_polarization/two_dimensions/driver.py b/geoapps/inversion/electricals/induced_polarization/two_dimensions/driver.py deleted file mode 100644 index 1e0019498..000000000 --- a/geoapps/inversion/electricals/induced_polarization/two_dimensions/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import InducedPolarization2DParams - - -class InducedPolarization2DDriver(InversionDriver): - _params_class = InducedPolarization2DParams - _validations = validations - - def __init__(self, params: InducedPolarization2DParams): - super().__init__(params) diff --git a/geoapps/inversion/electricals/induced_polarization/two_dimensions/params.py b/geoapps/inversion/electricals/induced_polarization/two_dimensions/params.py deleted file mode 100644 index 532e24e00..000000000 --- a/geoapps/inversion/electricals/induced_polarization/two_dimensions/params.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from ...params import Base2DParams -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class InducedPolarization2DParams(Base2DParams): - """ - Parameter class for electrical->induced polarization (IP) inversion. - """ - - _physical_property = "chargeability" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "induced polarization 2d" - self._validations = validations - self._chargeability_channel_bool = None - self._chargeability_channel = None - self._chargeability_uncertainty = None - self._line_object = None - self._line_id = None - self._conductivity_model_object = None - self._conductivity_model = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def chargeability_channel_bool(self): - return self._chargeability_channel_bool - - @chargeability_channel_bool.setter - def chargeability_channel_bool(self, val): - self.setter_validator("chargeability_channel_bool", val) - - @property - def chargeability_channel(self): - return self._chargeability_channel - - @chargeability_channel.setter - def chargeability_channel(self, val): - self.setter_validator("chargeability_channel", val, fun=self._uuid_promoter) - - @property - def chargeability_uncertainty(self): - return self._chargeability_uncertainty - - @chargeability_uncertainty.setter - def chargeability_uncertainty(self, val): - self.setter_validator("chargeability_uncertainty", val, fun=self._uuid_promoter) - - @property - def conductivity_model_object(self): - return self._conductivity_model_object - - @conductivity_model_object.setter - def conductivity_model_object(self, val): - self.setter_validator("conductivity_model_object", val, fun=self._uuid_promoter) - - @property - def conductivity_model(self): - return self._conductivity_model - - @conductivity_model.setter - def conductivity_model(self, val): - self.setter_validator("conductivity_model", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/electricals/params.py b/geoapps/inversion/electricals/params.py deleted file mode 100644 index de40d4fda..000000000 --- a/geoapps/inversion/electricals/params.py +++ /dev/null @@ -1,171 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import numpy as np -from geoh5py.data import Data, DataAssociationEnum - -from geoapps.inversion import InversionBaseParams -from geoapps.utils.models import get_drape_model - - -class Core2DParams(InversionBaseParams): - """ - Core parameter class for 2D electrical->conductivity inversion. - """ - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._line_object = None - self._u_cell_size: float = 25.0 - self._v_cell_size: float = 25.0 - self._depth_core: float = 100.0 - self._horizontal_padding: float = 100.0 - self._vertical_padding: float = 100.0 - self._expansion_factor: float = 100.0 - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def line_object(self): - """ReferenceData entity containing line information on poles.""" - return self._line_object - - @line_object.setter - def line_object(self, val): - self._line_object = val - - if isinstance(val, Data) and val.association is not DataAssociationEnum.CELL: - raise ValueError("Line identifier must be associated with cells.") - - @property - def u_cell_size(self): - """""" - return self._u_cell_size - - @u_cell_size.setter - def u_cell_size(self, value): - self.setter_validator("u_cell_size", value) - - @property - def v_cell_size(self): - """""" - return self._v_cell_size - - @v_cell_size.setter - def v_cell_size(self, value): - self.setter_validator("v_cell_size", value) - - @property - def depth_core(self): - """""" - return self._depth_core - - @depth_core.setter - def depth_core(self, value): - self.setter_validator("depth_core", value) - - @property - def horizontal_padding(self): - """""" - return self._horizontal_padding - - @horizontal_padding.setter - def horizontal_padding(self, value): - self.setter_validator("horizontal_padding", value) - - @property - def vertical_padding(self): - """""" - return self._vertical_padding - - @vertical_padding.setter - def vertical_padding(self, value): - self.setter_validator("vertical_padding", value) - - @property - def expansion_factor(self): - """""" - return self._expansion_factor - - @expansion_factor.setter - def expansion_factor(self, value): - self.setter_validator("expansion_factor", value) - - -class Base2DParams(Core2DParams): - """ - Parameter class for electrical->induced polarization (IP) inversion. - """ - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._line_id = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def line_id(self): - """Line ID to invert.""" - return self._line_id - - @line_id.setter - def line_id(self, val): - self._line_id = val - - @property - def mesh(self): - if self._mesh is None and self.geoh5 is not None: - current_entity = self.data_object.current_electrodes - receiver_locs = np.vstack( - [self.data_object.vertices, current_entity.vertices] - ) - self._mesh = get_drape_model( - self.geoh5, - "Models", - receiver_locs, - [ - self.u_cell_size, - self.v_cell_size, - ], - self.depth_core, - [self.horizontal_padding] * 2 + [self.vertical_padding, 1], - self.expansion_factor, - )[0] - - return self._mesh - - @mesh.setter - def mesh(self, val): - self.setter_validator("mesh", val, fun=self._uuid_promoter) - - -class BasePseudo3DParams(Core2DParams): - """ - Base parameter class for pseudo electrical->conductivity inversion. - """ - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._files_only = None - self._cleanup = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def files_only(self): - return self._files_only - - @files_only.setter - def files_only(self, val): - self.setter_validator("files_only", val) - - @property - def cleanup(self): - return self._cleanup - - @cleanup.setter - def cleanup(self, val): - self.setter_validator("cleanup", val) diff --git a/geoapps/inversion/electromagnetics/__init__.py b/geoapps/inversion/electromagnetics/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/inversion/electromagnetics/__init__.py +++ b/geoapps/inversion/electromagnetics/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/inversion/electromagnetics/application.py b/geoapps/inversion/electromagnetics/application.py index 6d23d8040..b29790c01 100644 --- a/geoapps/inversion/electromagnetics/application.py +++ b/geoapps/inversion/electromagnetics/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -13,6 +15,7 @@ import uuid from pathlib import Path from time import time +from uuid import UUID import numpy as np from geoh5py.data import Data @@ -33,10 +36,12 @@ from geoapps.base.plot import PlotSelection2D from geoapps.base.selection import LineOptions, ObjectDataSelection, TopographyOptions from geoapps.inversion.components.preprocessing import preprocess_data +from geoapps.shared_utils.utils import WindowOptions from geoapps.utils import geophysical_systems, warn_module_not_found from geoapps.utils.list import find_value from geoapps.utils.string import string_2_list + with warn_module_not_found(): from matplotlib import pyplot as plt @@ -708,8 +713,8 @@ def inversion_defaults(): app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{656acd40-25de-4865-814c-cb700f6ee51a}", - "data": "{2d165431-63bd-4e07-9db8-5b44acf8c9bf}", + "objects": UUID("{656acd40-25de-4865-814c-cb700f6ee51a}"), + "data": UUID("{2d165431-63bd-4e07-9db8-5b44acf8c9bf}"), "resolution": 50, "window_width": 1500, "window_height": 1500, @@ -717,11 +722,11 @@ def inversion_defaults(): "inversion_parameters": {"max_iterations": 25}, "topography": { "options": "Object", - "objects": "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}", - "data": "{a603a762-f6cb-4b21-afda-3160e725bf7d}", + "objects": UUID("{ab3c2083-6ea8-4d31-9230-7aad3ec09525}"), + "data": UUID("{a603a762-f6cb-4b21-afda-3160e725bf7d}"), }, "lines": { - "data": "{b6927372-22d2-4ca1-9c23-372411ddc772}", + "data": UUID("{b6927372-22d2-4ca1-9c23-372411ddc772}"), "lines": [8, 9, 10, 11, 12], }, "sensor": {"offset": "0, 0, 0", "options": "sensor location + (dx, dy, dz)"}, @@ -926,9 +931,9 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) # Refresh the list of objects @@ -1195,7 +1200,7 @@ def write_trigger(self, _): "out_group": self.ga_group_name.value, "mesh": "Mesh", "system": self.system.value, - "lines": {str(self.lines.data.value): [self.lines.lines.value]}, + "lines": {str(self.lines.data.value): self.lines.lines.value}, "mesh 1D": [ self.mesh_1D.hz_min.value, self.mesh_1D.hz_expansion.value, @@ -1212,9 +1217,9 @@ def write_trigger(self, _): if self.inversion_parameters.beta_start_options.value == "value": input_dict["initial_beta"] = self.inversion_parameters.beta_start.value else: - input_dict[ - "initial_beta_ratio" - ] = self.inversion_parameters.beta_start.value + input_dict["initial_beta_ratio"] = ( + self.inversion_parameters.beta_start.value + ) input_dict["tol_cg"] = self.inversion_parameters.tol_cg.value input_dict["ignore_values"] = self.inversion_parameters.ignore_values.value @@ -1455,39 +1460,37 @@ def write_trigger(self, _): uuid.UUID(value["uncertainties"]) )[0].name } - # Add lines to data_dict - components.append("lines") - line_data = list(input_dict["lines"].keys())[0] - data_dict["lines_channel"] = { - "name": new_workspace.get_entity(uuid.UUID(line_data))[0].name - } + + window_options = WindowOptions( + center_x=self.window_center_x.value, + center_y=self.window_center_y.value, + width=self.window_width.value, + height=self.window_height.value, + azimuth=self.window_azimuth.value, + ) # Pre-processing update_dict = preprocess_data( - workspace=new_workspace, - param_dict=input_dict, + new_workspace, + input_dict, + data_object, + window_options, + drape_options=None, resolution=self.resolution.value, - data_object=data_object, - window_center_x=self.window_center_x.value, - window_center_y=self.window_center_y.value, - window_width=self.window_width.value, - window_height=self.window_height.value, - window_azimuth=self.window_azimuth.value, components=components, data_dict=data_dict, ) # Update input dict from pre-processing + line_data = new_workspace.get_entity(self.lines.data.value)[0] input_dict["data"]["name"] = str(update_dict["data_object"]) + survey = new_workspace.get_entity(update_dict["data_object"])[0] + new_line_uid = survey.get_entity(line_data.name)[0].uid + input_dict["lines"] = { + str(new_line_uid): input_dict["lines"][str(line_data.uid)] + } if isinstance(input_dict["data"]["channels"], dict): for comp in components: - if comp == "lines": - input_dict["lines"] = { - str(update_dict["lines_channel"]): list( - input_dict["lines"].values() - )[0] - } - continue if comp + "_channel" in update_dict: input_dict["data"]["channels"][comp]["name"] = str( update_dict[comp + "_channel"] @@ -1497,18 +1500,10 @@ def write_trigger(self, _): update_dict[comp + "_uncertainty"] ) else: - survey = new_workspace.get_entity(update_dict["data_object"])[0] new_group = survey.get_entity(data_group.name)[0] input_dict["data"]["channels"] = str(new_group.uid) new_group = survey.get_entity(uncert_group.name)[0] input_dict["uncertainty_channel"] = str(new_group.uid) - line_data = self.workspace.get_entity(self.lines.data.value)[0] - - if line_data: - new_uid = survey.get_entity(line_data.name)[0].uid - input_dict["lines"] = { - str(new_uid): list(input_dict["lines"].values())[0] - } input_dict["workspace"] = input_dict["save_to_geoh5"] = str( Path(new_workspace.h5file).resolve() diff --git a/geoapps/inversion/electromagnetics/driver.py b/geoapps/inversion/electromagnetics/driver.py index 73bcc5213..72599738c 100644 --- a/geoapps/inversion/electromagnetics/driver.py +++ b/geoapps/inversion/electromagnetics/driver.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: skip-file @@ -21,7 +23,7 @@ from geoh5py.workspace import Workspace from pymatsolver import PardisoSolver from scipy.interpolate import LinearNDInterpolator -from scipy.sparse import csr_matrix, diags +from scipy.sparse import csr_matrix from scipy.spatial import cKDTree from simpeg_archive import ( DataMisfit, @@ -219,7 +221,9 @@ def inversion(input_file): else: em_specs["tx_specs"]["type"] = "VMD" - for dat_uid, unc_uid in zip(data_group.properties, uncert_group.properties): + for dat_uid, unc_uid in zip( + data_group.properties, uncert_group.properties, strict=False + ): d_entity = workspace.get_entity(dat_uid)[0] u_entity = workspace.get_entity(unc_uid)[0] channels[d_entity.name] = True @@ -330,7 +334,7 @@ def offset_receivers_xy(locations, offsets): for key, values in selection.items(): line_data = workspace.get_entity(uuid.UUID(key))[0] - for line in values[0]: + for line in values: line_ind = np.where(line_data.values == float(line))[0] if len(line_ind) < 2: @@ -461,13 +465,10 @@ def offset_receivers_xy(locations, offsets): out_group.add_comment(json.dumps(input_param, indent=4).strip(), author="input") hz = hz_min * expansion ** np.arange(n_cells) - CCz = -np.cumsum(hz) + hz / 2.0 - top_hz = hz[0] / 2.0 nZ = hz.shape[0] # Select data and downsample stn_id = [] - model_vertices = [] pred_count = 0 line_ids = [] data_ordering = [] @@ -481,7 +482,7 @@ def offset_receivers_xy(locations, offsets): full_model_line_ids = [] for key, values in selection.items(): line_data: ReferencedData = workspace.get_entity(uuid.UUID(key))[0] - for line in values[0]: + for line in values: line_ind = np.where(line_data.values[win_ind] == line)[0] n_sounding = len(line_ind) if n_sounding < 2: @@ -502,12 +503,12 @@ def offset_receivers_xy(locations, offsets): ) pred_count += z_loc.shape[0] - if line != values[0][0]: + if line != values[0]: prisms, layers, column_count, cell_count, ghost_ind = append_ghost( 0, xyz, z_loc, prisms, layers, column_count, cell_count, ghost_ind ) - K, I = np.meshgrid( + K, I = np.meshgrid( # noqa: E741 np.arange(nZ), np.arange(column_count, column_count + n_sounding) ) @@ -524,7 +525,7 @@ def offset_receivers_xy(locations, offsets): cell_count += nZ * n_sounding full_model_line_ids.append(np.ones(nZ * n_sounding) * line) - if line != values[0][-1]: + if line != values[-1]: prisms, layers, column_count, cell_count, ghost_ind = append_ghost( -1, xyz, z_loc, prisms, layers, column_count, cell_count, ghost_ind ) @@ -552,7 +553,7 @@ def offset_receivers_xy(locations, offsets): "values": ghost_mat @ np.hstack(full_model_line_ids).astype("uint32"), "type": "referenced", - "value_map": line_data.value_map.map, + "value_map": line_data.value_map(), } } ) @@ -569,7 +570,7 @@ def offset_receivers_xy(locations, offsets): "Line": { "values": np.hstack(line_ids).astype("uint32"), "type": "referenced", - "value_map": line_data.value_map.map, + "value_map": line_data.value_map(), } } ) @@ -587,10 +588,7 @@ def offset_receivers_xy(locations, offsets): 0 ].values - if hasattr(con_object, "centroids"): - grid = con_object.centroids - else: - grid = con_object.vertices + grid = con_object.locations tree = cKDTree(grid) _, ind = tree.query(model.centroids) @@ -614,10 +612,7 @@ def offset_receivers_xy(locations, offsets): 0 ].values - if hasattr(con_object, "centroids"): - grid = con_object.centroids - else: - grid = con_object.vertices + grid = con_object.locations tree = cKDTree(grid) _, ind = tree.query(model.centroids) @@ -639,10 +634,7 @@ def offset_receivers_xy(locations, offsets): 0 ].values - if hasattr(sus_object, "centroids"): - grid = sus_object.centroids - else: - grid = sus_object.vertices + grid = sus_object.locations tree = cKDTree(grid) _, ind = tree.query(model.centroids) @@ -668,7 +660,7 @@ def offset_receivers_xy(locations, offsets): uncert = np.zeros(n_sounding * block) n_data = 0 - for ind, (d, u) in enumerate(zip(data, uncertainties)): + for ind, (d, u) in enumerate(zip(data, uncertainties, strict=False)): dobs[ind::block] = d[win_ind][stn_id] uncert[ind::block] = u[win_ind][stn_id] n_data += dobs[ind::block].shape[0] @@ -705,7 +697,7 @@ def offset_receivers_xy(locations, offsets): } } ) - curve.add_data_to_group(d_i, f"Observed") + curve.add_data_to_group(d_i, "Observed") data_types[channel] = d_i.entity_type xyz = locations[stn_id, :] @@ -744,7 +736,7 @@ def offset_receivers_xy(locations, offsets): n_sounding ) a = [em_specs["tx_specs"]["a"]] * n_sounding - I = [em_specs["tx_specs"]["I"]] * n_sounding + I = [em_specs["tx_specs"]["I"]] * n_sounding # noqa: E741 if em_specs["tx_specs"]["type"] == "VMD": offsets = np.linalg.norm(np.c_[offset_x, offset_y], axis=1).reshape((-1, 1)) @@ -963,7 +955,7 @@ def offset_receivers_xy(locations, offsets): d_i = curve.add_data( {"Uncertainties_" + channel: {"association": "VERTEX", "values": temp}} ) - curve.add_data_to_group(d_i, f"Uncertainties") + curve.add_data_to_group(d_i, "Uncertainties") uncert[ind::block][uncert_orig[ind::block] == np.inf] = np.inf diff --git a/geoapps/inversion/electromagnetics/frequency_domain/__init__.py b/geoapps/inversion/electromagnetics/frequency_domain/__init__.py index 47142eefa..6844b17f2 100644 --- a/geoapps/inversion/electromagnetics/frequency_domain/__init__.py +++ b/geoapps/inversion/electromagnetics/frequency_domain/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import FrequencyDomainElectromagneticsParams +# flake8: noqa diff --git a/geoapps/inversion/electromagnetics/frequency_domain/constants.py b/geoapps/inversion/electromagnetics/frequency_domain/constants.py index 0e25ffea1..4dc01c3ae 100644 --- a/geoapps/inversion/electromagnetics/frequency_domain/constants.py +++ b/geoapps/inversion/electromagnetics/frequency_domain/constants.py @@ -1,247 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -from uuid import UUID -from geoh5py.objects.surveys.electromagnetics.airborne_fem import AirborneFEMReceivers - -import geoapps -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Frequency-domain EM (FEM) Inversion", - "icon": "surveyairborneem", - "inversion_type": "fem", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_real_channel": None, - "z_real_uncertainty": None, - "z_imag_channel": None, - "z_imag_uncertainty": None, - "mesh": None, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "chi_factor": 1.0, - "initial_beta_ratio": 1e2, - "initial_beta": None, - "coolingRate": 2, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 50, - "tol_cg": 1e-4, - "alpha_s": 0.0, - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 1.0, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Frequency-domain EM (FEM) Forward", - "icon": "surveyairborneem", - "inversion_type": "fem", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_real_channel_bool": True, - "z_imag_channel_bool": True, - "mesh": None, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Frequency Domain Electromagnetic Inversion", - "icon": "surveyairborneem", - "inversion_type": "fem", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": [ - "{b3a47539-0301-4b27-922e-1dde9d882c60}", # AirborneFEMReceivers - ], - "value": None, - }, - "z_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Z real component", - "value": False, - }, - "z_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "z-real component", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "z_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "z_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "z_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Z imag component", - "value": False, - }, - "z_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "z-imag component", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "z_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "z_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "types": [str], - "required": True, - "values": ["fem"], - }, - "data_object": {"types": [str, UUID, AirborneFEMReceivers]}, - "z_real_channel": {"one_of": "data_channel"}, - "z_real_uncertainty": {"one_of": "uncertainty_channel"}, - "z_imag_channel": {"one_of": "data_channel"}, - "z_imag_uncertainty": {"one_of": "uncertainty_channel"}, -} -validations = dict(base_validations, **validations) app_initializer = {} diff --git a/geoapps/inversion/electromagnetics/frequency_domain/driver.py b/geoapps/inversion/electromagnetics/frequency_domain/driver.py deleted file mode 100644 index 1ad5b8b71..000000000 --- a/geoapps/inversion/electromagnetics/frequency_domain/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import FrequencyDomainElectromagneticsParams - - -class FrequencyDomainElectromagneticsDriver(InversionDriver): - _params_class = FrequencyDomainElectromagneticsParams - _validations = validations - - def __init__(self, params: FrequencyDomainElectromagneticsParams): - super().__init__(params) diff --git a/geoapps/inversion/electromagnetics/frequency_domain/params.py b/geoapps/inversion/electromagnetics/frequency_domain/params.py deleted file mode 100644 index 22bfac929..000000000 --- a/geoapps/inversion/electromagnetics/frequency_domain/params.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy -from uuid import UUID - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class FrequencyDomainElectromagneticsParams(InversionBaseParams): - """ - Parameter class for Frequency-domain Electromagnetic (FEM) -> conductivity inversion. - """ - - _physical_property = "conductivity" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "fem" - self._validations = validations - self._tx_offsets = None - self._z_real_channel_bool = None - self._z_real_channel = None - self._z_real_uncertainty = None - self._z_imag_channel_bool = None - self._z_imag_channel = None - self._z_imag_uncertainty = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def data_channel(self, component: str): - """Return uuid of data channel.""" - return getattr(self, "_".join([component, "channel"]), None) - - def uncertainty_channel(self, component: str): - """Return uuid of uncertainty channel.""" - return getattr(self, "_".join([component, "uncertainty"]), None) - - def property_group_data(self, property_group: UUID): - """ - Return dictionary of channel/data. - - :param property_group: Property group uid - """ - channels = self.data_object.channels - if self.forward_only: - out = {k: None for k in channels} - else: - group = self.data_object.find_or_create_property_group( - name=property_group.name - ) - properties = [self.geoh5.get_entity(p)[0].values for p in group.properties] - out = {f: properties[i] for i, f in enumerate(channels)} - - return out - - @property - def unit_conversion(self): - """Return time unit conversion factor.""" - conversion = { - "Hertz (Hz)": 1.0, - } - return conversion[self.data_object.unit] - - def data(self, component: str): - """Returns array of data for chosen data component.""" - property_group = self.data_channel(component) - return self.property_group_data(property_group) - - def uncertainty(self, component: str) -> float: - """Returns uncertainty for chosen data component.""" - uid = self.uncertainty_channel(component) - return self.property_group_data(uid) - - @property - def tx_offsets(self): - if self._tx_offsets is None and self.data_object is not None: - try: - offset_data = self.data_object.metadata["EM Dataset"][ - "Frequency configurations" - ] - self._tx_offsets = {k["Frequency"]: k["Offset"] for k in offset_data} - except KeyError as exception: - msg = "Metadata must contain 'Frequency configurations' dictionary with 'Offset' data." - raise KeyError(msg) from exception - - return self._tx_offsets - - @property - def z_real_channel_bool(self): - return self._z_real_channel_bool - - @z_real_channel_bool.setter - def z_real_channel_bool(self, val): - self.setter_validator("z_real_channel_bool", val) - - @property - def z_real_channel(self): - return self._z_real_channel - - @z_real_channel.setter - def z_real_channel(self, val): - self.setter_validator("z_real_channel", val, fun=self._uuid_promoter) - - @property - def z_real_uncertainty(self): - return self._z_real_uncertainty - - @z_real_uncertainty.setter - def z_real_uncertainty(self, val): - self.setter_validator("z_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def z_imag_channel_bool(self): - return self._z_imag_channel_bool - - @z_imag_channel_bool.setter - def z_imag_channel_bool(self, val): - self.setter_validator("z_imag_channel_bool", val) - - @property - def z_imag_channel(self): - return self._z_imag_channel - - @z_imag_channel.setter - def z_imag_channel(self, val): - self.setter_validator("z_imag_channel", val, fun=self._uuid_promoter) - - @property - def z_imag_uncertainty(self): - return self._z_imag_uncertainty - - @z_imag_uncertainty.setter - def z_imag_uncertainty(self, val): - self.setter_validator("z_imag_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/electromagnetics/time_domain/__init__.py b/geoapps/inversion/electromagnetics/time_domain/__init__.py index 51509ac72..6844b17f2 100644 --- a/geoapps/inversion/electromagnetics/time_domain/__init__.py +++ b/geoapps/inversion/electromagnetics/time_domain/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import TimeDomainElectromagneticsParams +# flake8: noqa diff --git a/geoapps/inversion/electromagnetics/time_domain/constants.py b/geoapps/inversion/electromagnetics/time_domain/constants.py index 20e73e2b6..4dc01c3ae 100644 --- a/geoapps/inversion/electromagnetics/time_domain/constants.py +++ b/geoapps/inversion/electromagnetics/time_domain/constants.py @@ -1,301 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -from uuid import UUID -from geoh5py.objects import AirborneTEMReceivers, LargeLoopGroundTEMReceivers - -import geoapps -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Time-domain EM (TEM) Inversion", - "icon": "surveyairborneem", - "inversion_type": "tdem", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "data_units": "dB/dt (T/s)", - "z_channel": None, - "z_uncertainty": None, - "x_channel": None, - "x_uncertainty": None, - "y_channel": None, - "y_uncertainty": None, - "mesh": None, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "chi_factor": 1.0, - "initial_beta_ratio": 1e2, - "initial_beta": None, - "coolingRate": 4, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 50, - "tol_cg": 1e-4, - "alpha_s": 0.0, - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 1.0, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Time-domain EM (TEM) Forward", - "icon": "surveyairborneem", - "inversion_type": "tdem", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "data_units": "dB/dt (T/s)", - "z_channel_bool": True, - "x_channel_bool": True, - "y_channel_bool": True, - "mesh": None, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -default_ui_json = { - "title": "Time Domain Electromagnetic Inversion", - "icon": "surveyairborneem", - "inversion_type": "tdem", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": [ - "{19730589-fd28-4649-9de0-ad47249d9aba}", - "{deebe11a-b57b-4a03-99d6-8f27b25eb2a8}", - ], - "value": None, - }, - "data_units": { - "choiceList": ["dB/dt (T/s)", "B (T)", "H (A/m)"], - "group": "Data", - "main": True, - "label": "Data type", - "tooltip": "Set the units of the data.", - "value": "dB/dt (T/s)", - }, - "z_channel_bool": { - "group": "Data", - "main": True, - "label": "Z component", - "value": False, - }, - "z_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "z-component", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "z_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "z_channel", - "dependencyType": "enabled", - "value": None, - }, - "x_channel_bool": { - "group": "Data", - "main": True, - "label": "X component", - "value": False, - }, - "x_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "x-component", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "x_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "x_channel", - "dependencyType": "enabled", - "value": None, - }, - "y_channel_bool": { - "group": "Data", - "main": True, - "label": "Y component", - "value": False, - }, - "y_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "y-component", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "y_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "y_channel", - "dependencyType": "enabled", - "value": None, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, - "store_sensitivities": { - "choiceList": ["ram"], - "group": "Compute", - "label": "Storage device", - "tooltip": "Only RAM storage available for now.", - "value": "ram", - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "types": [str], - "required": True, - "values": ["tdem"], - }, - "data_object": { - "types": [str, UUID, AirborneTEMReceivers, LargeLoopGroundTEMReceivers] - }, - "z_channel": {"one_of": "data_channel"}, - "z_uncertainty": {"one_of": "uncertainty_channel"}, - "x_channel": {"one_of": "data_channel"}, - "x_uncertainty": {"one_of": "uncertainty_channel"}, - "y_channel": {"one_of": "data_channel"}, - "y_uncertainty": {"one_of": "uncertainty_channel"}, -} -validations = dict(base_validations, **validations) app_initializer = {} diff --git a/geoapps/inversion/electromagnetics/time_domain/driver.py b/geoapps/inversion/electromagnetics/time_domain/driver.py deleted file mode 100644 index 73b071feb..000000000 --- a/geoapps/inversion/electromagnetics/time_domain/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import TimeDomainElectromagneticsParams - - -class TimeDomainElectromagneticsDriver(InversionDriver): - _params_class = TimeDomainElectromagneticsParams - _validations = validations - - def __init__(self, params: TimeDomainElectromagneticsParams): - super().__init__(params) diff --git a/geoapps/inversion/electromagnetics/time_domain/params.py b/geoapps/inversion/electromagnetics/time_domain/params.py deleted file mode 100644 index f72097e50..000000000 --- a/geoapps/inversion/electromagnetics/time_domain/params.py +++ /dev/null @@ -1,179 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy -from uuid import UUID - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class TimeDomainElectromagneticsParams(InversionBaseParams): - """ - Parameter class for Time-domain Electromagnetic (TEM) -> conductivity inversion. - """ - - _physical_property = "conductivity" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "tdem" - self._validations = validations - self._data_units = "dB/dt (T/s)" - self._z_channel_bool = None - self._z_channel = None - self._z_uncertainty = None - self._x_channel_bool = None - self._x_channel = None - self._x_uncertainty = None - self._y_channel_bool = None - self._y_channel = None - self._y_uncertainty = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def data_channel(self, component: str): - """Return uuid of data channel.""" - return getattr(self, "_".join([component, "channel"]), None) - - @property - def data_units(self): - return self._data_units - - @data_units.setter - def data_units(self, val): - self.setter_validator("data_units", val) - - def uncertainty_channel(self, component: str): - """Return uuid of uncertainty channel.""" - return getattr(self, "_".join([component, "uncertainty"]), None) - - def property_group_data(self, property_group: UUID): - data = {} - channels = self.data_object.channels - if self.forward_only: - return {k: None for k in channels} - else: - group = self.data_object.find_or_create_property_group( - name=property_group.name - ) - property_names = [ - self.geoh5.get_entity(p)[0].name for p in group.properties - ] - properties = [self.geoh5.get_entity(p)[0].values for p in group.properties] - for i, f in enumerate(channels): - try: - f_ind = property_names.index( - [k for k in property_names if f"{f:.2e}" in k][0] - ) # Safer if data was saved with geoapps naming convention - data[f] = properties[f_ind] - except IndexError: - data[f] = properties[i] # in case of other naming conventions - - return data - - @property - def unit_conversion(self): - """Return time unit conversion factor.""" - conversion = { - "Seconds (s)": 1.0, - "Milliseconds (ms)": 1e-3, - "Microseconds (us)": 1e-6, - } - return conversion[self.data_object.unit] - - def data(self, component: str): - """Returns array of data for chosen data component.""" - property_group = self.data_channel(component) - return self.property_group_data(property_group) - - def uncertainty(self, component: str) -> float: - """Returns uncertainty for chosen data component.""" - uid = self.uncertainty_channel(component) - return self.property_group_data(uid) - - @property - def z_channel_bool(self): - return self._z_channel_bool - - @z_channel_bool.setter - def z_channel_bool(self, val): - self.setter_validator("z_channel_bool", val) - - @property - def z_channel(self): - return self._z_channel - - @z_channel.setter - def z_channel(self, val): - self.setter_validator("z_channel", val, fun=self._uuid_promoter) - - @property - def z_uncertainty(self): - return self._z_uncertainty - - @z_uncertainty.setter - def z_uncertainty(self, val): - self.setter_validator("z_uncertainty", val, fun=self._uuid_promoter) - - @property - def x_channel_bool(self): - return self._x_channel_bool - - @x_channel_bool.setter - def x_channel_bool(self, val): - self.setter_validator("x_channel_bool", val) - - @property - def x_channel(self): - return self._x_channel - - @x_channel.setter - def x_channel(self, val): - self.setter_validator("x_channel", val, fun=self._uuid_promoter) - - @property - def x_uncertainty(self): - return self._x_uncertainty - - @x_uncertainty.setter - def x_uncertainty(self, val): - self.setter_validator("x_uncertainty", val, fun=self._uuid_promoter) - - @property - def y_channel_bool(self): - return self._y_channel_bool - - @y_channel_bool.setter - def y_channel_bool(self, val): - self.setter_validator("y_channel_bool", val) - - @property - def y_channel(self): - return self._y_channel - - @y_channel.setter - def y_channel(self, val): - self.setter_validator("y_channel", val, fun=self._uuid_promoter) - - @property - def y_uncertainty(self): - return self._y_uncertainty - - @y_uncertainty.setter - def y_uncertainty(self, val): - self.setter_validator("y_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/joint/constants.py b/geoapps/inversion/joint/constants.py index 29b35abd2..4dc01c3ae 100644 --- a/geoapps/inversion/joint/constants.py +++ b/geoapps/inversion/joint/constants.py @@ -1,84 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations -default_ui_json = { - "title": "SimPEG Joint Surveys Inversion", - "inversion_type": "joint surveys", - "mesh": { - "group": "Mesh and Models", - "main": True, - "label": "Mesh", - "meshType": "4EA87376-3ECE-438B-BF12-3479733DED46", - "value": None, - "enabled": False, - "optional": True, - }, - "group_a": { - "main": True, - "group": "Joint", - "label": "Group A", - "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", - "value": "", - }, - "group_a_multiplier": { - "min": 0.0, - "main": True, - "group": "Joint", - "label": "Misfit A Scale", - "value": 1.0, - "tooltip": "Constant multiplier for the data misfit function for Group A.", - }, - "group_b": { - "main": True, - "group": "Joint", - "label": "Group B", - "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", - "value": "", - }, - "group_b_multiplier": { - "min": 0.0, - "main": True, - "group": "Joint", - "label": "Misfit B Scale", - "value": 1.0, - "tooltip": "Constant multiplier for the data misfit function for Group B.", - }, - "group_c": { - "main": True, - "group": "Joint", - "label": "Group C", - "groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}", - "optional": True, - "enabled": False, - "value": "", - }, - "group_c_multiplier": { - "min": 0.0, - "main": True, - "group": "Joint", - "label": "Misfit C Scale", - "value": 1.0, - "dependency": "group_c", - "dependencyType": "enabled", - "tooltip": "Constant multiplier for the data misfit function for Group C.", - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["joint surveys"], - }, -} - -validations = dict(base_validations, **validations) app_initializer = {} diff --git a/geoapps/inversion/joint/driver.py b/geoapps/inversion/joint/driver.py deleted file mode 100644 index 374557b9b..000000000 --- a/geoapps/inversion/joint/driver.py +++ /dev/null @@ -1,208 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=unexpected-keyword-arg, no-value-for-parameter - -from __future__ import annotations - -import sys - -import numpy as np -from geoh5py.ui_json import InputFile -from SimPEG.maps import TileMap -from SimPEG.objective_function import ComboObjectiveFunction - -from geoapps.driver_base.utils import treemesh_2_octree -from geoapps.inversion import DRIVER_MAP -from geoapps.inversion.components import InversionMesh -from geoapps.inversion.components.factories import SaveIterationGeoh5Factory -from geoapps.inversion.driver import InversionDriver -from geoapps.inversion.joint.params import BaseJointParams -from geoapps.utils.models import collocate_octrees, create_octree_from_octrees - - -class BaseJointDriver(InversionDriver): - def __init__(self, params: BaseJointParams): - self._directives = None - self._drivers = None - self._wires = None - - super().__init__(params) - - @property - def data_misfit(self): - if getattr(self, "_data_misfit", None) is None and self.drivers is not None: - objective_functions = [] - multipliers = [] - for label, driver in zip("abc", self.drivers): - if driver.data_misfit is not None: - objective_functions += driver.data_misfit.objfcts - multipliers += [ - getattr(self.params, f"group_{label}_multiplier") - ] * len(driver.data_misfit.objfcts) - - self._data_misfit = ComboObjectiveFunction( - objfcts=objective_functions, multipliers=multipliers - ) - - return self._data_misfit - - @property - def drivers(self) -> list[InversionDriver] | None: - """List of inversion drivers.""" - if self._drivers is None: - drivers = [] - physical_property = [] - # Create sub-drivers - for group in [ - self.params.group_a, - self.params.group_b, - self.params.group_c, - ]: - if group is None: - continue - - group = self.workspace.get_entity(group.uid)[0] - ui_json = group.options - ui_json["geoh5"] = self.workspace - ui_json["workspace_geoh5"] = None - - ifile = InputFile(ui_json=ui_json) - mod_name, class_name = DRIVER_MAP.get(ifile.data["inversion_type"]) - module = __import__(mod_name, fromlist=[class_name]) - inversion_driver = getattr(module, class_name) - params = inversion_driver._params_class( # pylint: disable=W0212 - ifile, out_group=group - ) - driver = inversion_driver(params) - physical_property.append(params.physical_property) - group.parent = self.params.out_group - drivers.append(driver) - - self._drivers = drivers - self.params.physical_property = physical_property - - return self._drivers - - def get_local_actives(self, driver: InversionDriver): - """Get all local active cells within the global mesh for a given driver.""" - - in_local = driver.inversion_mesh.mesh._get_containing_cell_indexes( # pylint: disable=W0212 - self.inversion_mesh.mesh.gridCC - ) - local_actives = driver.inversion_topography.active_cells( - driver.inversion_mesh, driver.inversion_data - ) - global_active = local_actives[in_local] - global_active[ - ~driver.inversion_mesh.mesh.is_inside(self.inversion_mesh.mesh.gridCC) - ] = False - return global_active - - def initialize(self): - """Generate sub drivers.""" - - self.validate_create_mesh() - - # Add re-projection to the global mesh - global_actives = np.zeros(self.inversion_mesh.mesh.nC, dtype=bool) - for driver in self.drivers: - local_actives = self.get_local_actives(driver) - global_actives |= local_actives - - self.models.active_cells = global_actives - for driver, wire in zip(self.drivers, self.wires): - projection = TileMap( - self.inversion_mesh.mesh, - global_actives, - driver.inversion_mesh.mesh, - enforce_active=False, - components=3 if driver.inversion_data.vector else 1, - ) - driver.models.active_cells = projection.local_active - driver.data_misfit.model_map = projection * wire - - multipliers = [] - for mult, func in driver.data_misfit: - func.model_map = func.model_map * driver.data_misfit.model_map - multipliers.append( - mult * (func.model_map.shape[0] / projection.shape[1]) - ) - - driver.data_misfit.multipliers = multipliers - - self.validate_create_models() - - @property - def inversion_data(self): - """Inversion data""" - return self._inversion_data - - @property - def inversion_mesh(self): - """Inversion mesh""" - if getattr(self, "_inversion_mesh", None) is None: - self._inversion_mesh = InversionMesh( - self.workspace, - self.params, - self.inversion_data, - self.inversion_topography, - ) - return self._inversion_mesh - - def validate_create_mesh(self): - """Function to validate and create the inversion mesh.""" - - if self.params.mesh is None: - print("Creating a global mesh from sub-meshes parameters.") - tree = create_octree_from_octrees( - [driver.inversion_mesh.mesh for driver in self.drivers] - ) - self.params.mesh = treemesh_2_octree(self.workspace, tree) - - collocate_octrees( - self.inversion_mesh.entity, - [driver.inversion_mesh.entity for driver in self.drivers], - ) - for driver in self.drivers: - setattr(driver.inversion_mesh, "_mesh", None) - - def validate_create_models(self): - """Construct models from the local drivers.""" - raise NotImplementedError("Must be implemented by subclass.") - - @property - def wires(self): - """Model projections.""" - raise NotImplementedError("Must be implemented by subclass.") - - def run(self): - """Run inversion from params""" - sys.stdout = self.logger - self.logger.start() - self.configure_dask() - - if self.params.forward_only: - print("Running the forward simulation ...") - predicted = self.inverse_problem.get_dpred( - self.models.starting, compute_J=False - ) - - for sub, driver in zip(predicted, self.drivers): - SaveIterationGeoh5Factory(driver.params).build( - inversion_object=driver.inversion_data, - sorting=np.argsort(np.hstack(driver.sorting)), - ordering=driver.ordering, - ).save_components(0, sub) - else: - # Run the inversion - self.start_inversion_message() - self.inversion.run(self.models.starting) - - self.logger.end() - sys.stdout = self.logger.terminal - self.logger.log.close() diff --git a/geoapps/inversion/joint/joint_cross_gradient/__init__.py b/geoapps/inversion/joint/joint_cross_gradient/__init__.py index 36b7cfd5c..6844b17f2 100644 --- a/geoapps/inversion/joint/joint_cross_gradient/__init__.py +++ b/geoapps/inversion/joint/joint_cross_gradient/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import JointCrossGradientParams +# flake8: noqa diff --git a/geoapps/inversion/joint/joint_cross_gradient/constants.py b/geoapps/inversion/joint/joint_cross_gradient/constants.py index 9916b6046..4dc01c3ae 100644 --- a/geoapps/inversion/joint/joint_cross_gradient/constants.py +++ b/geoapps/inversion/joint/joint_cross_gradient/constants.py @@ -1,200 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -import geoapps -from geoapps.inversion.constants import validations as base_validations -from geoapps.inversion.joint.constants import default_ui_json as joint_default_ui_json -inversion_defaults = { - "title": "SimPEG Joint Cross Gradient Inversion", - "inversion_type": "joint cross gradient", - "version": geoapps.__version__, - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "group_a": None, - "group_a_multiplier": 1.0, - "group_b": None, - "group_b_multiplier": 1.0, - "cross_gradient_weight_a_b": 1e6, - "group_c": None, - "group_c_multiplier": 1.0, - "cross_gradient_weight_c_a": 1e6, - "cross_gradient_weight_c_b": 1e6, - "mesh": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 1, - "coolingFactor": 2.0, - "max_global_iterations": 100, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": None, - "length_scale_x": None, - "length_scale_y": None, - "length_scale_z": None, - "s_norm": None, - "x_norm": None, - "y_norm": None, - "z_norm": None, - "gradient_type": None, - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -default_ui_json = { - "title": "SimPEG Joint Cross Gradient Inversion", - "inversion_type": "joint surveys", - "cross_gradient_weight_a_b": { - "min": 0.0, - "group": "Joint", - "label": "A x B Coupling Scale", - "value": 1.0, - "main": True, - "lineEdit": False, - "tooltip": "Weight applied to the cross gradient regularizations (1: equal weight with the standard Smallness and Smoothness terms.)", - }, - "cross_gradient_weight_c_a": { - "min": 0.0, - "group": "Joint", - "label": "A x C Coupling Scale", - "value": 1.0, - "main": True, - "lineEdit": False, - "dependency": "group_c", - "dependencyType": "enabled", - "tooltip": "Weight applied to the cross gradient regularizations (1: equal weight with the standard Smallness and Smoothness terms.)", - }, - "cross_gradient_weight_c_b": { - "min": 0.0, - "group": "Joint", - "label": "B x C Coupling Scale", - "value": 1.0, - "main": True, - "lineEdit": False, - "dependency": "group_c", - "dependencyType": "enabled", - "tooltip": "Weight applied to the cross gradient regularizations (1: equal weight with the standard Smallness and Smoothness terms.)", - }, - "alpha_s": { - "min": 0.0, - "group": "Regularization", - "groupOptional": True, - "label": "Smallness weight", - "value": 1.0, - "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model", - "enabled": False, - }, - "length_scale_x": { - "min": 0.0, - "group": "Regularization", - "label": "X-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness", - "value": 1.0, - "enabled": False, - }, - "length_scale_y": { - "min": 0.0, - "group": "Regularization", - "label": "Y-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness", - "value": 1.0, - "enabled": False, - }, - "length_scale_z": { - "min": 0.0, - "group": "Regularization", - "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", - "value": 1.0, - "enabled": False, - }, - "s_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "Smallness norm", - "value": 0.0, - "precision": 2, - "lineEdit": False, - "enabled": False, - }, - "x_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "X-smoothness norm", - "value": 2.0, - "precision": 2, - "lineEdit": False, - "enabled": False, - }, - "y_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "Y-smoothness norm", - "value": 2.0, - "precision": 2, - "lineEdit": False, - "enabled": False, - }, - "z_norm": { - "min": 0.0, - "max": 2.0, - "group": "Regularization", - "label": "Z-smoothness norm", - "value": 2.0, - "precision": 2, - "lineEdit": False, - "enabled": False, - }, - "gradient_type": { - "choiceList": ["total", "components"], - "group": "Regularization", - "label": "Gradient type", - "value": "total", - "verbose": 3, - "enabled": False, - }, -} -default_ui_json = dict(joint_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["joint cross gradient"], - }, -} -validations = dict(base_validations, **validations) app_initializer = {} diff --git a/geoapps/inversion/joint/joint_cross_gradient/driver.py b/geoapps/inversion/joint/joint_cross_gradient/driver.py deleted file mode 100644 index 4d57d1bd2..000000000 --- a/geoapps/inversion/joint/joint_cross_gradient/driver.py +++ /dev/null @@ -1,231 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=unexpected-keyword-arg, no-value-for-parameter - -from __future__ import annotations - -from itertools import combinations - -import numpy as np -from geoh5py.shared.utils import fetch_active_workspace -from SimPEG import maps -from SimPEG.objective_function import ComboObjectiveFunction -from SimPEG.regularization import CrossGradient - -from geoapps.inversion.components.factories import ( - DirectivesFactory, - SaveIterationGeoh5Factory, -) -from geoapps.inversion.joint.driver import BaseJointDriver - -from .constants import validations -from .params import JointCrossGradientParams - - -class JointCrossGradientDriver(BaseJointDriver): - _params_class = JointCrossGradientParams - _validations = validations - - def __init__(self, params: JointCrossGradientParams): - self._wires = None - self._directives = None - - super().__init__(params) - - with fetch_active_workspace(self.workspace, mode="r+"): - self.initialize() - - def validate_create_models(self): - """Create stacked model vectors from all drivers provided.""" - for model_type in self.models.model_types: - model = np.zeros(self.models.n_active * len(self.mapping)) - - for child_driver in self.drivers: - model_local_values = getattr(child_driver.models, model_type) - - if model_local_values is not None: - projection = child_driver.data_misfit.model_map.deriv(model).T - - if isinstance(model_local_values, float): - model_local_values = ( - np.ones(projection.shape[1]) * model_local_values - ) - - norm = np.array(np.sum(projection, axis=1)).flatten() - model += (projection * model_local_values) / (norm + 1e-8) - - if model is not None: - setattr( - getattr(self.models, f"_{model_type}"), - "model", - model, - ) - - @property - def directives(self): - if getattr(self, "_directives", None) is None and not self.params.forward_only: - with fetch_active_workspace(self.workspace, mode="r+"): - directives_list = [] - count = 0 - for driver in self.drivers: - driver_directives = driver.directives - n_tiles = len(driver.data_misfit.objfcts) - - for name in [ - "save_iteration_data_directive", - "save_iteration_residual_directive", - "save_iteration_apparent_resistivity_directive", - ]: - directive = getattr(driver_directives, name) - if directive is not None: - directive.joint_index = [ - count + ii for ii in range(n_tiles) - ] - directives_list.append(directive) - - save_model = driver_directives.save_iteration_model_directive - save_model.label = driver.params.physical_property - save_model.transforms = [ - driver.data_misfit.model_map - ] + save_model.transforms - - directives_list.append(save_model) - - if ( - getattr(driver_directives, "vector_inversion_directive") - is not None - ): - directives_list.append( - getattr(driver_directives, "vector_inversion_directive") - ) - - count += n_tiles - - for driver, wire in zip(self.drivers, self.wires): - factory = SaveIterationGeoh5Factory(self.params) - factory.factory_type = driver.params.inversion_type - model_directive = factory.build( - inversion_object=self.inversion_mesh, - active_cells=self.models.active_cells, - save_objective_function=True, - name="Model", - ) - - model_directive.label = driver.params.physical_property - model_directive.transforms = [wire] + model_directive.transforms - directives_list.append(model_directive) - - self._directives = DirectivesFactory(self) - self._directives.directive_list = ( - self._directives.inversion_directives + directives_list - ) - return self._directives - - def get_regularization(self): - """ - Create a flat ComboObjectiveFunction from all drivers provided and - add cross-gradient regularization for all combinations of model parameters. - """ - regularizations = super().get_regularization() - reg_list = regularizations.objfcts - multipliers = regularizations.multipliers - reg_dict = {reg.mapping: reg for reg in reg_list} - for driver in self.drivers: - reg_block = [] - for mapping in driver.mapping: - reg_block.append(reg_dict[self._mapping[driver, mapping]]) - - # Pass down regularization parameters from driver. - for param in [ - "alpha_s", - "length_scale_x", - "length_scale_y", - "length_scale_z", - "s_norm", - "x_norm", - "y_norm", - "z_norm", - "gradient_type", - ]: - if getattr(self.params, param) is None: - for reg in reg_block: - setattr(reg, param, getattr(driver.params, param)) - - driver.regularization = ComboObjectiveFunction(objfcts=reg_block) - - for label, driver_pairs in zip( - ["a_b", "c_a", "c_b"], combinations(self.drivers, 2) - ): - # Deal with MVI components - for mapping_a in driver_pairs[0].mapping: - for mapping_b in driver_pairs[1].mapping: - wires = [ - self._mapping[driver_pairs[0], mapping_a], - self._mapping[driver_pairs[1], mapping_b], - ] - reg_list.append( - CrossGradient( - self.inversion_mesh.mesh, - wires, - active_cells=self.models.active_cells, - ) - ) - multipliers.append( - getattr(self.params, f"cross_gradient_weight_{label}") - ) - - return ComboObjectiveFunction(objfcts=reg_list, multipliers=multipliers) - - @property - def wires(self): - """Model projections""" - if self._wires is None: - collection = [] - start = 0 - for n_values in self.n_values: - collection.append( - maps.Projection( - int(np.sum(self.n_values)), slice(start, start + n_values) - ) - ) - start += n_values - - self._wires = collection - - return self._wires - - @property - def mapping(self): - """Create a list of all mappings augmented with projection to global problem""" - if self._mapping is None: - mappings = {} - start = 0 - n_values = int(np.sum(self.models.active_cells)) - for driver in self.drivers: - for mapping in driver.mapping: - mappings[driver, mapping] = maps.Projection( - int(np.sum(self.n_values)), slice(start, start + n_values) - ) - start += n_values - - self._mapping = mappings - - return self._mapping.values() - - @property - def n_values(self): - """Number of values in the model""" - if self._n_values is None: - n_values = self.models.n_active - count = [] - for driver in self.drivers: - n_comp = 3 if driver.inversion_data.vector else 1 - count.append(n_values * n_comp) - self._n_values = count - - return self._n_values diff --git a/geoapps/inversion/joint/joint_cross_gradient/params.py b/geoapps/inversion/joint/joint_cross_gradient/params.py deleted file mode 100644 index a8f37542e..000000000 --- a/geoapps/inversion/joint/joint_cross_gradient/params.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion.joint.params import BaseJointParams - -from .constants import default_ui_json, inversion_defaults, validations - - -class JointCrossGradientParams(BaseJointParams): - """ - Parameter class for joint cross-gradient inversion. - """ - - _physical_property = [""] - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "joint cross gradient" - self._validations = validations - self._cross_gradient_weight_a_b = 1.0 - self._cross_gradient_weight_c_a = 1.0 - self._cross_gradient_weight_c_b = 1.0 - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def cross_gradient_weight_a_b(self): - return self._cross_gradient_weight_a_b - - @cross_gradient_weight_a_b.setter - def cross_gradient_weight_a_b(self, val): - self.setter_validator("cross_gradient_weight_a_b", val) - - @property - def cross_gradient_weight_c_a(self): - return self._cross_gradient_weight_c_a - - @cross_gradient_weight_c_a.setter - def cross_gradient_weight_c_a(self, val): - self.setter_validator("cross_gradient_weight_c_a", val) - - @property - def cross_gradient_weight_c_b(self): - return self._cross_gradient_weight_c_b - - @cross_gradient_weight_c_b.setter - def cross_gradient_weight_c_b(self, val): - self.setter_validator("cross_gradient_weight_c_b", val) - - @property - def physical_property(self): - """Physical property to invert.""" - return self._physical_property - - @physical_property.setter - def physical_property(self, val: list[str]): - self._physical_property = val diff --git a/geoapps/inversion/joint/joint_surveys/__init__.py b/geoapps/inversion/joint/joint_surveys/__init__.py index e1ad3090e..6844b17f2 100644 --- a/geoapps/inversion/joint/joint_surveys/__init__.py +++ b/geoapps/inversion/joint/joint_surveys/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import JointSurveysParams +# flake8: noqa diff --git a/geoapps/inversion/joint/joint_surveys/constants.py b/geoapps/inversion/joint/joint_surveys/constants.py index 84432d04b..4dc01c3ae 100644 --- a/geoapps/inversion/joint/joint_surveys/constants.py +++ b/geoapps/inversion/joint/joint_surveys/constants.py @@ -1,145 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -import geoapps -from geoapps.inversion.constants import validations as base_validations -from geoapps.inversion.joint.constants import default_ui_json as joint_default_ui_json -################# defaults ################## - -inversion_defaults = { - "title": "SimPEG Joint Surveys Inversion", - "inversion_type": "joint surveys", - "version": geoapps.__version__, - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "group_a": None, - "group_a_multiplier": 1.0, - "group_b": None, - "group_b_multiplier": 1.0, - "group_c": None, - "group_c_multiplier": 1.0, - "mesh": None, - "starting_model": None, - "reference_model": None, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 1, - "coolingFactor": 2.0, - "max_global_iterations": 100, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "SimPEG Joint Surveys Inversion", - "inversion_type": "joint surveys", - "starting_model": { - "association": "Cell", - "dataType": "Float", - "group": "Mesh and Models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial model", - "property": None, - "optional": True, - "enabled": False, - "value": 1e-4, - }, - "lower_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and Models", - "isValue": False, - "parent": "mesh", - "label": "Lower bound)", - "property": None, - "optional": True, - "value": -10.0, - "enabled": False, - }, - "upper_bound": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and Models", - "isValue": False, - "parent": "mesh", - "label": "Upper bound", - "property": None, - "optional": True, - "value": 10.0, - "enabled": False, - }, - "reference_model": { - "association": "Cell", - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": False, - "parent": "mesh", - "label": "Reference", - "property": None, - "optional": True, - "value": 1e-4, - "enabled": False, - }, -} -default_ui_json = dict(joint_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["joint surveys"], - }, -} - -validations = dict(base_validations, **validations) app_initializer = {} diff --git a/geoapps/inversion/joint/joint_surveys/driver.py b/geoapps/inversion/joint/joint_surveys/driver.py deleted file mode 100644 index 46aab255b..000000000 --- a/geoapps/inversion/joint/joint_surveys/driver.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=unexpected-keyword-arg, no-value-for-parameter - -from __future__ import annotations - -import numpy as np -from geoh5py.shared.utils import fetch_active_workspace -from SimPEG import maps - -from geoapps.inversion.components.factories import DirectivesFactory -from geoapps.inversion.joint.driver import BaseJointDriver - -from .constants import validations -from .params import JointSurveysParams - - -class JointSurveyDriver(BaseJointDriver): - _params_class = JointSurveysParams - _validations = validations - - def __init__(self, params: JointSurveysParams): - super().__init__(params) - - with fetch_active_workspace(self.workspace, mode="r+"): - self.initialize() - - def validate_create_models(self): - """Check if all models were provided, otherwise use the first driver models.""" - for model_type in self.models.model_types: - model_class = getattr(self.models, model_type) - if ( - model_class is None - and getattr(self.drivers[0].models, model_type) is not None - ): - model_local_values = getattr(self.drivers[0].models, model_type) - projection = ( - self.drivers[0] - .data_misfit.model_map.deriv(np.ones(self.models.n_active)) - .T - ) - norm = np.array(np.sum(projection, axis=1)).flatten() - model = (projection * model_local_values) / (norm + 1e-8) - - if self.drivers[0].models.is_sigma: - model = np.exp(model) - - setattr( - getattr(self.models, f"_{model_type}"), - "model", - model, - ) - - @property - def wires(self): - """Model projections""" - if self._wires is None: - wires = [maps.IdentityMap(nP=self.models.n_active) for _ in self.drivers] - self._wires = wires - - return self._wires - - @property - def directives(self): - if getattr(self, "_directives", None) is None and not self.params.forward_only: - with fetch_active_workspace(self.workspace, mode="r+"): - directives_list = [] - count = 0 - for driver in self.drivers: - driver_directives = DirectivesFactory(driver) - save_data = driver_directives.save_iteration_data_directive - - n_tiles = len(driver.data_misfit.objfcts) - save_data.joint_index = [count + ii for ii in range(n_tiles)] - count += n_tiles - - save_model = driver_directives.save_iteration_model_directive - save_model.transforms = [ - driver.data_misfit.model_map - ] + save_model.transforms - directives_list += [ - save_data, - save_model, - ] - - for directive in [ - "save_iteration_apparent_resistivity_directive", - "vector_inversion_directive", - ]: - if getattr(driver_directives, directive) is not None: - directives_list.append( - getattr(driver_directives, directive) - ) - - self._directives = DirectivesFactory(self) - self._directives.directive_list = ( - self._directives.inversion_directives - + [self._directives.save_iteration_model_directive] - + directives_list - ) - return self._directives diff --git a/geoapps/inversion/joint/joint_surveys/params.py b/geoapps/inversion/joint/joint_surveys/params.py deleted file mode 100644 index 1102ff170..000000000 --- a/geoapps/inversion/joint/joint_surveys/params.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion.joint.params import BaseJointParams - -from .constants import default_ui_json, inversion_defaults, validations - - -class JointSurveysParams(BaseJointParams): - """ - Parameter class for gravity->density inversion. - """ - - _physical_property = "" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "joint surveys" - self._validations = validations - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def physical_property(self): - """Physical property to invert.""" - return self._physical_property - - @physical_property.setter - def physical_property(self, val: list[str]): - unique_properties = list(set(val)) - if len(unique_properties) > 1: - raise ValueError( - "All physical properties must be the same. " - f"Provided SimPEG groups for {unique_properties}." - ) - self._physical_property = unique_properties[0] diff --git a/geoapps/inversion/joint/params.py b/geoapps/inversion/joint/params.py deleted file mode 100644 index b868b74eb..000000000 --- a/geoapps/inversion/joint/params.py +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoh5py.groups.simpeg_group import SimPEGGroup - -from geoapps.inversion.params import InversionBaseParams - - -class BaseJointParams(InversionBaseParams): - """ - Parameter class for gravity->density inversion. - """ - - _physical_property = "" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._group_a = None - self._group_b = None - self._group_c = None - self._group_a_multiplier = None - self._group_b_multiplier = None - self._group_c_multiplier = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - @property - def group_a(self): - """First SimPEGGroup inversion.""" - return self._group_a - - @group_a.setter - def group_a(self, val: SimPEGGroup): - self.setter_validator("group_a", val, fun=self._uuid_promoter) - - @property - def group_a_multiplier(self): - """Multiplier for the first SimPEGGroup inversion.""" - return self._group_a_multiplier - - @group_a_multiplier.setter - def group_a_multiplier(self, value): - self.setter_validator("group_a_multiplier", value) - - @property - def group_b(self): - """Second SimPEGGroup inversion.""" - return self._group_b - - @group_b.setter - def group_b(self, val: SimPEGGroup): - self.setter_validator("group_b", val, fun=self._uuid_promoter) - - @property - def group_b_multiplier(self): - """Multiplier for the second SimPEGGroup inversion.""" - return self._group_b_multiplier - - @group_b_multiplier.setter - def group_b_multiplier(self, value): - self.setter_validator("group_b_multiplier", value) - - @property - def group_c(self): - """Third SimPEGGroup inversion.""" - return self._group_c - - @group_c.setter - def group_c(self, val: SimPEGGroup): - self.setter_validator("group_c", val, fun=self._uuid_promoter) - - @property - def group_c_multiplier(self): - """Multiplier for the third SimPEGGroup inversion.""" - return self._group_c_multiplier - - @group_c_multiplier.setter - def group_c_multiplier(self, value): - self.setter_validator("group_c_multiplier", value) - - @property - def forward_only(self): - return self._forward_only - - @forward_only.setter - def forward_only(self, val: bool): - if val: - raise ValueError("Joint inversion does not support forward only.") - - self.setter_validator("forward_only", val) diff --git a/geoapps/inversion/line_sweep/driver.py b/geoapps/inversion/line_sweep/driver.py deleted file mode 100644 index 175eced17..000000000 --- a/geoapps/inversion/line_sweep/driver.py +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import json -import re -from pathlib import Path - -import numpy as np -from geoh5py.data import FilenameData -from geoh5py.groups import SimPEGGroup -from geoh5py.objects import DrapeModel, PotentialElectrode -from geoh5py.shared.utils import fetch_active_workspace -from geoh5py.ui_json import InputFile -from geoh5py.workspace import Workspace -from param_sweeps.driver import SweepDriver, SweepParams -from param_sweeps.generate import generate - -from geoapps.driver_base.utils import active_from_xyz -from geoapps.inversion.driver import InversionDriver -from geoapps.utils.models import drape_to_octree - - -class LineSweepDriver(SweepDriver, InversionDriver): - def __init__(self, params): - self._out_group = None - self.workspace = params.geoh5 - self.pseudo3d_params = params - self.cleanup = params.cleanup - - if ( - hasattr(self.pseudo3d_params, "out_group") - and self.pseudo3d_params.out_group is None - ): - self.pseudo3d_params.out_group = self.out_group - - super().__init__(self.setup_params()) - - @property - def out_group(self): - """The SimPEGGroup""" - if self._out_group is None: - with fetch_active_workspace(self.workspace, mode="r+"): - name = self.pseudo3d_params.inversion_type.capitalize() - if self.pseudo3d_params.forward_only: - name += "Forward" - else: - name += "Inversion" - - # with fetch_active_workspace(self.geoh5, mode="r+"): - self._out_group = SimPEGGroup.create( - self.pseudo3d_params.geoh5, name=name - ) - - return self._out_group - - def run(self): # pylint: disable=W0221 - super().run() # pylint: disable=W0221 - with self.workspace.open(mode="r+"): - self.collect_results() - if self.cleanup: - self.file_cleanup() - - def setup_params(self): - h5_file_path = Path(self.workspace.h5file).resolve() - ui_json_path = h5_file_path.parent / ( - re.sub(r"\.ui$", "", h5_file_path.stem) + ".ui.json" - ) - if not (ui_json_path).is_file(): - with self.workspace.open(): - self.pseudo3d_params.write_input_file( - name=ui_json_path.name, - path=h5_file_path.parent, - ) - generate( - ui_json_path, - parameters=["line_id"], - update_values={"conda_environment": "geoapps"}, - ) - ifile = InputFile.read_ui_json( - h5_file_path.parent - / (re.sub(r"\.ui$", "", h5_file_path.stem) + "_sweep.ui.json") - ) - with self.workspace.open(mode="r"): - lines = self.pseudo3d_params.line_object.values - ifile.data["line_id_start"] = int(lines.min()) - ifile.data["line_id_end"] = int(lines.max()) - ifile.data["line_id_n"] = len(np.unique(lines)) - sweep_params = SweepParams.from_input_file(ifile) - sweep_params.geoh5 = self.workspace - return sweep_params - - def file_cleanup(self): - """Remove files associated with the parameter sweep.""" - path = Path(self.workspace.h5file).parent - with open(path / "lookup.json", encoding="utf8") as f: - files = list(json.load(f)) - - files = [f"{f}.ui.json" for f in files] + [f"{f}.ui.geoh5" for f in files] - files += ["lookup.json", "SimPEG.log", "SimPEG.out"] - files += [f.name for f in path.glob("*_sweep.ui.json")] - - for file in files: - (path / file).unlink(missing_ok=True) - - @staticmethod - def line_files(path: str | Path): - with open(Path(path) / "lookup.json", encoding="utf8") as file: - line_files = {v["line_id"]: k for k, v in json.load(file).items()} - return line_files - - def collect_results(self): - path = Path(self.workspace.h5file).parent - files = LineSweepDriver.line_files(str(path)) - line_ids = self.pseudo3d_params.line_object.values - data = {} - drape_models = [] - for line in np.unique(line_ids): - with Workspace(f"{path / files[line]}.ui.geoh5") as ws: - out_group = [ - group for group in ws.groups if isinstance(group, SimPEGGroup) - ][0] - survey = [ - child - for child in out_group.children - if isinstance(child, PotentialElectrode) - ][0] - line_data = survey.get_entity(self.pseudo3d_params.line_object.name) - - if not line_data: - raise ValueError(f"Line {line} not found in {survey.name}") - - line_indices = line_ids == line - data = self.collect_line_data(survey, line_indices, data) - mesh = [ - child - for child in out_group.children - if isinstance(child, DrapeModel) - ][0] - filedata = [ - k for k in mesh.parent.children if isinstance(k, FilenameData) - ] - local_simpeg_group = mesh.parent.copy( - name=f"Line {line}", - parent=self.pseudo3d_params.out_group, - copy_children=False, - ) - for fdat in filedata: - fdat.copy(parent=local_simpeg_group) - - mesh = mesh.copy(parent=local_simpeg_group) - drape_models.append(mesh) - - self.pseudo3d_params.data_object.add_data(data) - - if self.pseudo3d_params.mesh is None: - return - - # interpolate drape model children common to all drape models into octree - active = active_from_xyz( - self.pseudo3d_params.mesh, self.inversion_topography.locations - ) - common_children = set.intersection( - *[{c.name for c in d.children} for d in drape_models] - ) - children = {n: [n] * len(drape_models) for n in common_children} - octree_model = drape_to_octree( - self.pseudo3d_params.mesh, drape_models, children, active, method="nearest" - ) - - # interpolate last iterations for each drape model into octree - iter_children = [ - [c.name for c in m.children if "iteration" in c.name.lower()] - for m in drape_models - ] - if any(iter_children): - iter_numbers = [ - [int(re.findall(r"\d+", n)[0]) for n in k] for k in iter_children - ] - last_iterations = [np.where(k == np.max(k))[0][0] for k in iter_numbers] - label = iter_children[0][0].replace( - re.findall(r"\d+", iter_children[0][0])[0], "final" - ) - children = { - label: [c[last_iterations[i]] for i, c in enumerate(iter_children)] - } - octree_model = drape_to_octree( - self.pseudo3d_params.mesh, - drape_models, - children, - active, - method="nearest", - ) - - octree_model.copy(parent=self.pseudo3d_params.out_group) - - def collect_line_data(self, survey, line_indices, data): - """ - Fill chunks of values from one line - """ - for child in survey.children: # initialize data values dictionary - if "Iteration" in child.name and child.name not in data: - data[child.name] = {"values": np.zeros_like(line_indices) * np.nan} - - for child in survey.children: - if "Iteration" in child.name: - data[child.name]["values"][line_indices] = child.values - - return data diff --git a/geoapps/inversion/natural_sources/__init__.py b/geoapps/inversion/natural_sources/__init__.py index 4d74f0178..6844b17f2 100644 --- a/geoapps/inversion/natural_sources/__init__.py +++ b/geoapps/inversion/natural_sources/__init__.py @@ -1,9 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .magnetotellurics import MagnetotelluricsParams -from .tipper import TipperParams +# flake8: noqa diff --git a/geoapps/inversion/natural_sources/magnetotellurics/__init__.py b/geoapps/inversion/natural_sources/magnetotellurics/__init__.py index 6ba8be7ec..6844b17f2 100644 --- a/geoapps/inversion/natural_sources/magnetotellurics/__init__.py +++ b/geoapps/inversion/natural_sources/magnetotellurics/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import MagnetotelluricsParams +# flake8: noqa diff --git a/geoapps/inversion/natural_sources/magnetotellurics/constants.py b/geoapps/inversion/natural_sources/magnetotellurics/constants.py index 51bc54b32..1274d0d32 100644 --- a/geoapps/inversion/natural_sources/magnetotellurics/constants.py +++ b/geoapps/inversion/natural_sources/magnetotellurics/constants.py @@ -1,485 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from uuid import UUID -from geoh5py.objects.surveys.electromagnetics.magnetotellurics import MTReceivers - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -################# defaults ################## -inversion_defaults = { - "version": geoapps.__version__, - "title": "Magnetotellurics (MT) Inversion", - "icon": "surveymagnetotellurics", - "inversion_type": "magnetotellurics", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "zxx_real_channel": None, - "zxx_real_uncertainty": None, - "zxx_imag_channel": None, - "zxx_imag_uncertainty": None, - "zxy_real_channel": None, - "zxy_real_uncertainty": None, - "zxy_imag_channel": None, - "zxy_imag_uncertainty": None, - "zyx_real_channel": None, - "zyx_real_uncertainty": None, - "zyx_imag_channel": None, - "zyx_imag_uncertainty": None, - "zyy_real_channel": None, - "zyy_real_uncertainty": None, - "zyy_imag_channel": None, - "zyy_imag_uncertainty": None, - "mesh": None, - "background_conductivity": 1e-3, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 1e2, - "initial_beta": None, - "coolingRate": 4, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 50, - "tol_cg": 1e-4, - "alpha_s": 0.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Magnetotellurics (MT) Forward", - "icon": "surveymagnetotellurics", - "inversion_type": "magnetotellurics", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "zxx_real_channel_bool": True, - "zxx_imag_channel_bool": True, - "zxy_real_channel_bool": True, - "zxy_imag_channel_bool": True, - "zyx_real_channel_bool": True, - "zyx_imag_channel_bool": True, - "zyy_real_channel_bool": True, - "zyy_imag_channel_bool": True, - "mesh": None, - "background_conductivity": 1e-3, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Magnetotellurics Inversion", - "icon": "surveymagnetotellurics", - "inversion_type": "magnetotellurics", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{b99bd6e5-4fe1-45a5-bd2f-75fc31f91b38}", - "value": None, - }, - "zxx_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Zxx real", - "value": False, - }, - "zxx_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zxx real", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zxx_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zxx_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "zxx_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Zxx imaginary", - "value": False, - }, - "zxx_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zxx imaginary", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zxx_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zxx_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "zxy_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Zxy real", - "value": False, - }, - "zxy_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zxy real", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zxy_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zxy_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "zxy_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Zxy imaginary", - "value": False, - }, - "zxy_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zxy imaginary", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zxy_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zxy_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "zyx_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Zyx real", - "value": False, - }, - "zyx_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zyx real", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zyx_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zyx_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "zyx_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Zyx imaginary", - "value": False, - }, - "zyx_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zyx imaginary", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zyx_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zyx_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "zyy_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Zyy real", - "value": False, - }, - "zyy_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zyy real", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zyy_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zyy_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "zyy_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Zyy imaginary", - "value": False, - }, - "zyy_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Zyy imaginary", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "zyy_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "zyy_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "background_conductivity": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Background conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, -} - -default_ui_json = dict(base_default_ui_json, **default_ui_json) - - -################ Validations ################# -validations = { - "inversion_type": { - "types": [str], - "required": True, - "values": ["magnetotellurics"], - }, - "data_object": {"types": [str, UUID, MTReceivers]}, - "zxx_real_channel": {"one_of": "data_channel"}, - "zxx_real_uncertainty": {"one_of": "uncertainty_channel"}, - "zxx_imag_channel": {"one_of": "data_channel"}, - "zxx_imag_uncertainty": {"one_of": "uncertainty_channel"}, - "zxy_real_channel": {"one_of": "data_channel"}, - "zxy_real_uncertainty": {"one_of": "uncertainty_channel"}, - "zxy_imag_channel": {"one_of": "data_channel"}, - "zxy_imag_uncertainty": {"one_of": "uncertainty_channel"}, - "zyx_real_channel": {"one_of": "data_channel"}, - "zyx_real_uncertainty": {"one_of": "uncertainty_channel"}, - "zyx_imag_channel": {"one_of": "data_channel"}, - "zyx_imag_uncertainty": {"one_of": "uncertainty_channel"}, - "zyy_real_channel": {"one_of": "data_channel"}, - "zyy_real_uncertainty": {"one_of": "uncertainty_channel"}, - "zyy_imag_channel": {"one_of": "data_channel"}, - "zyy_imag_uncertainty": {"one_of": "uncertainty_channel"}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon_natural_sources.geoh5"), diff --git a/geoapps/inversion/natural_sources/magnetotellurics/driver.py b/geoapps/inversion/natural_sources/magnetotellurics/driver.py deleted file mode 100644 index 80b39ee77..000000000 --- a/geoapps/inversion/natural_sources/magnetotellurics/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import MagnetotelluricsParams - - -class MagnetotelluricsDriver(InversionDriver): - _params_class = MagnetotelluricsParams - _validations = validations - - def __init__(self, params: MagnetotelluricsParams): - super().__init__(params) diff --git a/geoapps/inversion/natural_sources/magnetotellurics/params.py b/geoapps/inversion/natural_sources/magnetotellurics/params.py deleted file mode 100644 index e2721b692..000000000 --- a/geoapps/inversion/natural_sources/magnetotellurics/params.py +++ /dev/null @@ -1,306 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy -from uuid import UUID - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class MagnetotelluricsParams(InversionBaseParams): - """ - Parameter class for magnetotelluric->conductivity inversion. - """ - - _physical_property = "conductivity" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "magnetotellurics" - self._validations = validations - self._zxx_real_channel_bool = None - self._zxx_real_channel = None - self._zxx_real_uncertainty = None - self._zxx_imag_channel_bool = None - self._zxx_imag_channel = None - self._zxx_imag_uncertainty = None - self._zxy_real_channel_bool = None - self._zxy_real_channel = None - self._zxy_real_uncertainty = None - self._zxy_imag_channel_bool = None - self._zxy_imag_channel = None - self._zxy_imag_uncertainty = None - self._zyx_real_channel_bool = None - self._zyx_real_channel = None - self._zyx_real_uncertainty = None - self._zyx_imag_channel_bool = None - self._zyx_imag_channel = None - self._zyx_imag_uncertainty = None - self._zyy_real_channel_bool = None - self._zyy_real_channel = None - self._zyy_real_uncertainty = None - self._zyy_imag_channel_bool = None - self._zyy_imag_channel = None - self._zyy_imag_uncertainty = None - self._background_conductivity = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def data_channel(self, component: str): - """Return uuid of data channel.""" - return getattr(self, "_".join([component, "channel"]), None) - - def uncertainty_channel(self, component: str): - """Return uuid of uncertainty channel.""" - return getattr(self, "_".join([component, "uncertainty"]), None) - - def property_group_data(self, property_group: UUID): - data = {} - frequencies = self.data_object.channels - if self.forward_only: - return {k: None for k in frequencies} - else: - group = [ - k - for k in self.data_object.property_groups - if k.uid == property_group.uid - ][0] - property_names = [ - self.geoh5.get_entity(p)[0].name for p in group.properties - ] - properties = [self.geoh5.get_entity(p)[0].values for p in group.properties] - for i, f in enumerate(frequencies): - try: - f_ind = property_names.index( - [k for k in property_names if f"{f:.2e}" in k][0] - ) # Safer if data was saved with geoapps naming convention - data[f] = properties[f_ind] - except IndexError: - data[f] = properties[i] # in case of other naming conventions - - return data - - def data(self, component: str): - """Returns array of data for chosen data component.""" - property_group = self.data_channel(component) - return self.property_group_data(property_group) - - def uncertainty(self, component: str) -> float: - """Returns uncertainty for chosen data component.""" - uid = self.uncertainty_channel(component) - return self.property_group_data(uid) - - @property - def zxx_real_channel_bool(self): - return self._zxx_real_channel_bool - - @zxx_real_channel_bool.setter - def zxx_real_channel_bool(self, val): - self.setter_validator("zxx_real_channel_bool", val) - - @property - def zxx_real_channel(self): - return self._zxx_real_channel - - @zxx_real_channel.setter - def zxx_real_channel(self, val): - self.setter_validator("zxx_real_channel", val, fun=self._uuid_promoter) - - @property - def zxx_real_uncertainty(self): - return self._zxx_real_uncertainty - - @zxx_real_uncertainty.setter - def zxx_real_uncertainty(self, val): - self.setter_validator("zxx_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def zxx_imag_channel_bool(self): - return self._zxx_imag_channel_bool - - @zxx_imag_channel_bool.setter - def zxx_imag_channel_bool(self, val): - self.setter_validator("zxx_imag_channel_bool", val) - - @property - def zxx_imag_channel(self): - return self._zxx_imag_channel - - @zxx_imag_channel.setter - def zxx_imag_channel(self, val): - self.setter_validator("zxx_imag_channel", val, fun=self._uuid_promoter) - - @property - def zxx_imag_uncertainty(self): - return self._zxx_imag_uncertainty - - @zxx_imag_uncertainty.setter - def zxx_imag_uncertainty(self, val): - self.setter_validator("zxx_imag_uncertainty", val, fun=self._uuid_promoter) - - @property - def zxy_real_channel_bool(self): - return self._zxy_real_channel_bool - - @zxy_real_channel_bool.setter - def zxy_real_channel_bool(self, val): - self.setter_validator("zxy_real_channel_bool", val) - - @property - def zxy_real_channel(self): - return self._zxy_real_channel - - @zxy_real_channel.setter - def zxy_real_channel(self, val): - self.setter_validator("zxy_real_channel", val, fun=self._uuid_promoter) - - @property - def zxy_real_uncertainty(self): - return self._zxy_real_uncertainty - - @zxy_real_uncertainty.setter - def zxy_real_uncertainty(self, val): - self.setter_validator("zxy_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def zxy_imag_channel_bool(self): - return self._zxy_imag_channel_bool - - @zxy_imag_channel_bool.setter - def zxy_imag_channel_bool(self, val): - self.setter_validator("zxy_imag_channel_bool", val) - - @property - def zxy_imag_channel(self): - return self._zxy_imag_channel - - @zxy_imag_channel.setter - def zxy_imag_channel(self, val): - self.setter_validator("zxy_imag_channel", val, fun=self._uuid_promoter) - - @property - def zxy_imag_uncertainty(self): - return self._zxy_imag_uncertainty - - @zxy_imag_uncertainty.setter - def zxy_imag_uncertainty(self, val): - self.setter_validator("zxy_imag_uncertainty", val, fun=self._uuid_promoter) - - @property - def zyx_real_channel_bool(self): - return self._zyx_real_channel_bool - - @zyx_real_channel_bool.setter - def zyx_real_channel_bool(self, val): - self.setter_validator("zyx_real_channel_bool", val) - - @property - def zyx_real_channel(self): - return self._zyx_real_channel - - @zyx_real_channel.setter - def zyx_real_channel(self, val): - self.setter_validator("zyx_real_channel", val, fun=self._uuid_promoter) - - @property - def zyx_real_uncertainty(self): - return self._zyx_real_uncertainty - - @zyx_real_uncertainty.setter - def zyx_real_uncertainty(self, val): - self.setter_validator("zyx_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def zyx_imag_channel_bool(self): - return self._zyx_imag_channel_bool - - @zyx_imag_channel_bool.setter - def zyx_imag_channel_bool(self, val): - self.setter_validator("zyx_imag_channel_bool", val) - - @property - def zyx_imag_channel(self): - return self._zyx_imag_channel - - @zyx_imag_channel.setter - def zyx_imag_channel(self, val): - self.setter_validator("zyx_imag_channel", val, fun=self._uuid_promoter) - - @property - def zyx_imag_uncertainty(self): - return self._zyx_imag_uncertainty - - @zyx_imag_uncertainty.setter - def zyx_imag_uncertainty(self, val): - self.setter_validator("zyx_imag_uncertainty", val, fun=self._uuid_promoter) - - @property - def zyy_real_channel_bool(self): - return self._zyy_real_channel_bool - - @zyy_real_channel_bool.setter - def zyy_real_channel_bool(self, val): - self.setter_validator("zyy_real_channel_bool", val) - - @property - def zyy_real_channel(self): - return self._zyy_real_channel - - @zyy_real_channel.setter - def zyy_real_channel(self, val): - self.setter_validator("zyy_real_channel", val, fun=self._uuid_promoter) - - @property - def zyy_real_uncertainty(self): - return self._zyy_real_uncertainty - - @zyy_real_uncertainty.setter - def zyy_real_uncertainty(self, val): - self.setter_validator("zyy_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def zyy_imag_channel_bool(self): - return self._zyy_imag_channel_bool - - @zyy_imag_channel_bool.setter - def zyy_imag_channel_bool(self, val): - self.setter_validator("zyy_imag_channel_bool", val) - - @property - def zyy_imag_channel(self): - return self._zyy_imag_channel - - @zyy_imag_channel.setter - def zyy_imag_channel(self, val): - self.setter_validator("zyy_imag_channel", val, fun=self._uuid_promoter) - - @property - def zyy_imag_uncertainty(self): - return self._zyy_imag_uncertainty - - @zyy_imag_uncertainty.setter - def zyy_imag_uncertainty(self, val): - self.setter_validator("zyy_imag_uncertainty", val, fun=self._uuid_promoter) - - @property - def background_conductivity(self): - return self._background_conductivity - - @background_conductivity.setter - def background_conductivity(self, val): - self.setter_validator("background_conductivity", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/natural_sources/tipper/__init__.py b/geoapps/inversion/natural_sources/tipper/__init__.py index b4f22e2ce..6844b17f2 100644 --- a/geoapps/inversion/natural_sources/tipper/__init__.py +++ b/geoapps/inversion/natural_sources/tipper/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import TipperParams +# flake8: noqa diff --git a/geoapps/inversion/natural_sources/tipper/constants.py b/geoapps/inversion/natural_sources/tipper/constants.py index f9883dee1..4dc01c3ae 100644 --- a/geoapps/inversion/natural_sources/tipper/constants.py +++ b/geoapps/inversion/natural_sources/tipper/constants.py @@ -1,325 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -from uuid import UUID -from geoh5py.objects.surveys.electromagnetics.tipper import TipperReceivers - -import geoapps -from geoapps.inversion import default_ui_json as base_default_ui_json - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Tipper Inversion", - "icon": "surveyztem", - "inversion_type": "tipper", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "txz_real_channel": None, - "txz_real_uncertainty": None, - "txz_imag_channel": None, - "txz_imag_uncertainty": None, - "tyz_real_channel": None, - "tyz_real_uncertainty": None, - "tyz_imag_channel": None, - "tyz_imag_uncertainty": None, - "mesh": None, - "background_conductivity": 1e-3, - "starting_model": 1e-3, - "reference_model": 1e-3, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 1e2, - "initial_beta": None, - "coolingRate": 4, - "coolingFactor": 2.0, - "max_global_iterations": 50, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 0.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "gradient_type": "total", - "sens_wts_threshold": 0.001, - "every_iteration_bool": True, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_ram": None, - "store_sensitivities": "ram", - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Tipper Forward", - "icon": "surveyztem", - "inversion_type": "tipper", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "txz_real_channel_bool": True, - "txz_imag_channel_bool": True, - "tyz_real_channel_bool": True, - "tyz_imag_channel_bool": True, - "mesh": None, - "background_conductivity": 1e-3, - "starting_model": 1e-3, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Tipper Inversion", - "icon": "surveyztem", - "inversion_type": "tipper", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": "{0b639533-f35b-44d8-92a8-f70ecff3fd26}", - "value": None, - }, - "txz_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Txz real", - "value": False, - }, - "txz_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Txz real", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "txz_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "txz_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "txz_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Txz imaginary", - "value": False, - }, - "txz_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Txz imaginary", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "txz_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "txz_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "tyz_real_channel_bool": { - "group": "Data", - "main": True, - "label": "Tyz real", - "value": False, - }, - "tyz_real_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Tyz real", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "tyz_real_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "tyz_real_channel", - "dependencyType": "enabled", - "value": None, - }, - "tyz_imag_channel_bool": { - "group": "Data", - "main": True, - "label": "Tyz imaginary", - "value": False, - }, - "tyz_imag_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Tyz imaginary", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "tyz_imag_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "dataGroupType": "Multi-element", - "main": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "tyz_imag_channel", - "dependencyType": "enabled", - "value": None, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "main": True, - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Reference conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "background_conductivity": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Background conductivity (S/m)", - "property": None, - "value": 1e-3, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (S/m)", - "property": None, - "optional": True, - "value": 1e-8, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (S/m)", - "property": None, - "optional": True, - "value": 100.0, - "enabled": False, - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["tipper"], - }, - "data_object": {"required": True, "types": [str, UUID, TipperReceivers]}, -} app_initializer = {} diff --git a/geoapps/inversion/natural_sources/tipper/driver.py b/geoapps/inversion/natural_sources/tipper/driver.py deleted file mode 100644 index d42981f38..000000000 --- a/geoapps/inversion/natural_sources/tipper/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import TipperParams - - -class TipperDriver(InversionDriver): - _params_class = TipperParams - _validations = validations - - def __init__(self, params: TipperParams): - super().__init__(params) diff --git a/geoapps/inversion/natural_sources/tipper/params.py b/geoapps/inversion/natural_sources/tipper/params.py deleted file mode 100644 index ff84feff7..000000000 --- a/geoapps/inversion/natural_sources/tipper/params.py +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy -from uuid import UUID - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class TipperParams(InversionBaseParams): - """ - Parameter class for magnetotelluric->conductivity inversion. - """ - - _physical_property = "conductivity" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "tipper" - self._validations = validations - self._txz_real_channel_bool = None - self._txz_real_channel = None - self._txz_real_uncertainty = None - self._txz_imag_channel_bool = None - self._txz_imag_channel = None - self._txz_imag_uncertainty = None - self._tyz_real_channel_bool = None - self._tyz_real_channel = None - self._tyz_real_uncertainty = None - self._tyz_imag_channel_bool = None - self._tyz_imag_channel = None - self._tyz_imag_uncertainty = None - self._background_conductivity = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def data_channel(self, component: str): - """Return uuid of data channel.""" - return getattr(self, "_".join([component, "channel"]), None) - - def uncertainty_channel(self, component: str): - """Return uuid of uncertainty channel.""" - return getattr(self, "_".join([component, "uncertainty"]), None) - - def property_group_data(self, property_group: UUID): - data = {} - frequencies = self.data_object.channels - if self.forward_only: - return {k: None for k in frequencies} - else: - group = [ - k - for k in self.data_object.property_groups - if k.uid == property_group.uid - ][0] - property_names = [ - self.geoh5.get_entity(p)[0].name for p in group.properties - ] - properties = [self.geoh5.get_entity(p)[0].values for p in group.properties] - for i, f in enumerate(frequencies): - try: - f_ind = property_names.index( - [k for k in property_names if f"{f:.2e}" in k][0] - ) # Safer if data was saved with geoapps naming convention - data[f] = properties[f_ind] - except IndexError: - data[f] = properties[i] # in case of other naming conventions - - return data - - def data(self, component: str): - """Returns array of data for chosen data component.""" - property_group = self.data_channel(component) - return self.property_group_data(property_group) - - def uncertainty(self, component: str) -> float: - """Returns uncertainty for chosen data component.""" - uid = self.uncertainty_channel(component) - return self.property_group_data(uid) - - @property - def txz_real_channel_bool(self): - return self._txz_real_channel_bool - - @txz_real_channel_bool.setter - def txz_real_channel_bool(self, val): - self.setter_validator("txz_real_channel_bool", val) - - @property - def txz_real_channel(self): - return self._txz_real_channel - - @txz_real_channel.setter - def txz_real_channel(self, val): - self.setter_validator("txz_real_channel", val, fun=self._uuid_promoter) - - @property - def txz_real_uncertainty(self): - return self._txz_real_uncertainty - - @txz_real_uncertainty.setter - def txz_real_uncertainty(self, val): - self.setter_validator("txz_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def txz_imag_channel_bool(self): - return self._txz_imag_channel_bool - - @txz_imag_channel_bool.setter - def txz_imag_channel_bool(self, val): - self.setter_validator("txz_imag_channel_bool", val) - - @property - def txz_imag_channel(self): - return self._txz_imag_channel - - @txz_imag_channel.setter - def txz_imag_channel(self, val): - self.setter_validator("txz_imag_channel", val, fun=self._uuid_promoter) - - @property - def txz_imag_uncertainty(self): - return self._txz_imag_uncertainty - - @txz_imag_uncertainty.setter - def txz_imag_uncertainty(self, val): - self.setter_validator("txz_imag_uncertainty", val, fun=self._uuid_promoter) - - @property - def tyz_real_channel_bool(self): - return self._tyz_real_channel_bool - - @tyz_real_channel_bool.setter - def tyz_real_channel_bool(self, val): - self.setter_validator("tyz_real_channel_bool", val) - - @property - def tyz_real_channel(self): - return self._tyz_real_channel - - @tyz_real_channel.setter - def tyz_real_channel(self, val): - self.setter_validator("tyz_real_channel", val, fun=self._uuid_promoter) - - @property - def tyz_real_uncertainty(self): - return self._tyz_real_uncertainty - - @tyz_real_uncertainty.setter - def tyz_real_uncertainty(self, val): - self.setter_validator("tyz_real_uncertainty", val, fun=self._uuid_promoter) - - @property - def tyz_imag_channel_bool(self): - return self._tyz_imag_channel_bool - - @tyz_imag_channel_bool.setter - def tyz_imag_channel_bool(self, val): - self.setter_validator("tyz_imag_channel_bool", val) - - @property - def tyz_imag_channel(self): - return self._tyz_imag_channel - - @tyz_imag_channel.setter - def tyz_imag_channel(self, val): - self.setter_validator("tyz_imag_channel", val, fun=self._uuid_promoter) - - @property - def tyz_imag_uncertainty(self): - return self._tyz_imag_uncertainty - - @tyz_imag_uncertainty.setter - def tyz_imag_uncertainty(self, val): - self.setter_validator("tyz_imag_uncertainty", val, fun=self._uuid_promoter) - - @property - def background_conductivity(self): - return self._background_conductivity - - @background_conductivity.setter - def background_conductivity(self, val): - self.setter_validator("background_conductivity", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/params.py b/geoapps/inversion/params.py deleted file mode 100644 index 034c19537..000000000 --- a/geoapps/inversion/params.py +++ /dev/null @@ -1,695 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy -from uuid import UUID - -import numpy as np -from geoh5py.data import NumericData -from geoh5py.groups import SimPEGGroup -from geoh5py.objects import Octree -from geoh5py.shared.utils import fetch_active_workspace -from geoh5py.ui_json import InputFile - -from geoapps.driver_base.params import BaseParams - - -class InversionBaseParams(BaseParams): - """ - Base parameter class for geophysical->property inversion. - """ - - _default_ui_json = None - _forward_defaults = None - _inversion_defaults = None - _inversion_type = None - _physical_property = None - - def __init__( - self, - input_file: InputFile | None = None, - forward_only: bool = False, - **kwargs, - ): - self._forward_only: bool = ( - forward_only if input_file is None else input_file.data["forward_only"] - ) - self._topography_object: UUID = None - self._topography: UUID | float = None - self._data_object: UUID = None - self._starting_model: UUID | float = None - self._tile_spatial = None - self._z_from_topo: bool = None - self._receivers_radar_drape = None - self._receivers_offset_z: float = None - self._gps_receivers_offset = None - self._max_chunk_size: int = None - self._chunk_by_rows: bool = None - self._output_tile_files: bool = None - self._mesh = None - self._inversion_style: str = None - self._chi_factor: float = None - self._sens_wts_threshold: float = None - self._every_iteration_bool: bool = None - self._f_min_change: float = None - self._beta_tol: float = None - self._prctile: float = None - self._coolingRate: float = None - self._coolingFactor: float = None - self._coolEps_q: bool = None - self._coolEpsFact: float = None - self._beta_search: bool = None - self._starting_chi_factor: float = None - self._max_irls_iterations: int = None - self._max_global_iterations: int = None - self._max_line_search_iterations: int = None - self._max_cg_iterations: int = None - self._initial_beta: float = None - self._initial_beta_ratio: float = None - self._tol_cg: float = None - self._alpha_s: float = None - self._length_scale_x: float = None - self._length_scale_y: float = None - self._length_scale_z: float = None - self._s_norm: float = None - self._x_norm: float = None - self._y_norm: float = None - self._z_norm: float = None - self._reference_model = None - self._gradient_type: str = None - self._lower_bound = None - self._upper_bound = None - self._parallelized: bool = None - self._n_cpu: int = None - self._max_ram: float = None - self._store_sensitivities: str = None - self._out_group = None - self._ga_group = None - self._no_data_value: float = None - self._distributed_workers = None - self._documentation: str = "" - self._icon: str = "" - self._defaults = ( - self._forward_defaults if self.forward_only else self._inversion_defaults - ) - - if input_file is None: - ui_json = deepcopy(self._default_ui_json) - ui_json = { - k: ui_json[k] for k in list(self.defaults) - } # Re-order using defaults - input_file = InputFile( - ui_json=ui_json, - data=self.defaults, - validations=self.validations, - validate=False, - ) - - super().__init__(input_file=input_file, **kwargs) - - if not self.forward_only: - for key in self.__dict__: - if "channel_bool" in key and getattr(self, key[:-5], None) is not None: - setattr(self, key, True) - - def data_channel(self, component: str): - """Return uuid of data channel.""" - return getattr(self, "_".join([component, "channel"]), None) - - @property - def documentation(self): - return self._documentation - - @documentation.setter - def documentation(self, val): - self.setter_validator("documentation", val) - - @property - def icon(self): - return self._icon - - @icon.setter - def icon(self, val): - self.setter_validator("icon", val) - - def uncertainty_channel(self, component: str): - """Return uuid of uncertainty channel.""" - return getattr(self, "_".join([component, "uncertainty"]), None) - - def data(self, component: str): - """Returns array of data for chosen data component.""" - data_entity = self.data_channel(component) - if isinstance(data_entity, NumericData): - return data_entity.values.astype(float) - return None - - def uncertainty(self, component: str) -> np.ndarray | None: - """Returns uncertainty for chosen data component.""" - val = self.uncertainty_channel(component) - - if isinstance(val, NumericData): - return val.values.astype(float) - elif self.data(component) is not None: - d = self.data(component) - if isinstance(val, (int, float)): - return np.array([float(val)] * len(d)) - else: - return d * 0.0 + 1.0 # Default - else: - return None - - def components(self) -> list[str]: - """Retrieve component names used to index channel and uncertainty data.""" - comps = [] - channels = [ - k.lstrip("_").split("_channel_bool")[0] - for k in self.__dict__ - if "channel_bool" in k - ] - - for c in channels: - if ( - getattr(self, f"{c}_channel", None) is not None - or getattr(self, f"{c}_channel_bool", None) is True - ): - comps.append(c) - - return comps - - def offset(self) -> tuple[list[float], UUID]: - """Returns offset components as list and drape data.""" - offsets = [ - 0, - 0, - 0 if self.receivers_offset_z is None else self.receivers_offset_z, - ] - is_offset = any([(k != 0) for k in offsets]) - offsets = offsets if is_offset else None - r = self.receivers_radar_drape - if isinstance(r, (str, UUID)): - r = UUID(r) if isinstance(r, str) else r - radar = self.geoh5.get_entity(r) - radar = radar[0].values if radar else None - else: - radar = None - return offsets, radar - - def model_norms(self) -> list[float]: - """Returns model norm components as a list.""" - return [ - self.s_norm, - self.x_norm, - self.y_norm, - self.z_norm, - ] - - @property - def forward_defaults(self): - if getattr(self, "_forward_defaults", None) is None: - raise NotImplementedError( - "The property '_forward_defaults' must be assigned on " - "the child inversion class." - ) - return self._forward_defaults - - @property - def forward_only(self): - return self._forward_only - - @forward_only.setter - def forward_only(self, val): - self.setter_validator("forward_only", val) - - @property - def inversion_defaults(self): - if getattr(self, "_inversion_defaults", None) is None: - raise NotImplementedError( - "The property '_inversion_defaults' must be assigned on " - "the child inversion class." - ) - return self._inversion_defaults - - @property - def topography_object(self): - return self._topography_object - - @topography_object.setter - def topography_object(self, val): - self.setter_validator("topography_object", val, fun=self._uuid_promoter) - - @property - def topography(self): - return self._topography - - @topography.setter - def topography(self, val): - self.setter_validator("topography", val, fun=self._uuid_promoter) - - @property - def data_object(self): - return self._data_object - - @data_object.setter - def data_object(self, val): - self.setter_validator("data_object", val, fun=self._uuid_promoter) - self.update_group_options() - - @property - def starting_model(self): - return self._starting_model - - @starting_model.setter - def starting_model(self, val): - self.setter_validator("starting_model", val, fun=self._uuid_promoter) - - @property - def tile_spatial(self): - return self._tile_spatial - - @tile_spatial.setter - def tile_spatial(self, val): - self.setter_validator("tile_spatial", val, fun=self._uuid_promoter) - - @property - def z_from_topo(self): - return self._z_from_topo - - @z_from_topo.setter - def z_from_topo(self, val): - self.setter_validator("z_from_topo", val) - - @property - def receivers_radar_drape(self): - return self._receivers_radar_drape - - @receivers_radar_drape.setter - def receivers_radar_drape(self, val): - self.setter_validator("receivers_radar_drape", val, fun=self._uuid_promoter) - - @property - def receivers_offset_z(self): - return self._receivers_offset_z - - @receivers_offset_z.setter - def receivers_offset_z(self, val): - self.setter_validator("receivers_offset_z", val) - - @property - def gps_receivers_offset(self): - return self._gps_receivers_offset - - @gps_receivers_offset.setter - def gps_receivers_offset(self, val): - self.setter_validator("gps_receivers_offset", val, fun=self._uuid_promoter) - - @property - def inversion_type(self): - return self._inversion_type - - @inversion_type.setter - def inversion_type(self, val): - self.setter_validator("inversion_type", val) - - @property - def max_chunk_size(self): - return self._max_chunk_size - - @max_chunk_size.setter - def max_chunk_size(self, val): - self.setter_validator("max_chunk_size", val) - - @property - def chunk_by_rows(self): - return self._chunk_by_rows - - @chunk_by_rows.setter - def chunk_by_rows(self, val): - self.setter_validator("chunk_by_rows", val) - - @property - def output_tile_files(self): - return self._output_tile_files - - @output_tile_files.setter - def output_tile_files(self, val): - self.setter_validator("output_tile_files", val) - - @property - def mesh(self): - return self._mesh - - @mesh.setter - def mesh(self, val): - self.setter_validator("mesh", val, fun=self._uuid_promoter) - - if ( - isinstance(self._mesh, Octree) - and self._mesh.rotation is not None - and self._mesh.rotation != 0.0 - ): - raise ValueError( - "Rotated meshes are not supported. Please use a mesh with an angle of 0.0." - ) - - self.update_group_options() - - @property - def inversion_style(self): - return self._inversion_style - - @inversion_style.setter - def inversion_style(self, val): - self.setter_validator("inversion_style", val) - - @property - def chi_factor(self): - return self._chi_factor - - @chi_factor.setter - def chi_factor(self, val): - self.setter_validator("chi_factor", val) - - @property - def sens_wts_threshold(self): - return self._sens_wts_threshold - - @sens_wts_threshold.setter - def sens_wts_threshold(self, val): - self.setter_validator("sens_wts_threshold", val) - - @property - def every_iteration_bool(self): - return self._every_iteration_bool - - @every_iteration_bool.setter - def every_iteration_bool(self, val): - self.setter_validator("every_iteration_bool", val) - - @property - def f_min_change(self): - return self._f_min_change - - @f_min_change.setter - def f_min_change(self, val): - self.setter_validator("f_min_change", val) - - @property - def beta_tol(self): - return self._beta_tol - - @beta_tol.setter - def beta_tol(self, val): - self.setter_validator("beta_tol", val) - - @property - def prctile(self): - return self._prctile - - @prctile.setter - def prctile(self, val): - self.setter_validator("prctile", val) - - @property - def coolingRate(self): - return self._coolingRate - - @coolingRate.setter - def coolingRate(self, val): - self.setter_validator("coolingRate", val) - - @property - def coolingFactor(self): - return self._coolingFactor - - @coolingFactor.setter - def coolingFactor(self, val): - self.setter_validator("coolingFactor", val) - - @property - def coolEps_q(self): - return self._coolEps_q - - @coolEps_q.setter - def coolEps_q(self, val): - self.setter_validator("coolEps_q", val) - - @property - def coolEpsFact(self): - return self._coolEpsFact - - @coolEpsFact.setter - def coolEpsFact(self, val): - self.setter_validator("coolEpsFact", val) - - @property - def beta_search(self): - return self._beta_search - - @beta_search.setter - def beta_search(self, val): - self.setter_validator("beta_search", val) - - @property - def starting_chi_factor(self): - return self._starting_chi_factor - - @starting_chi_factor.setter - def starting_chi_factor(self, val): - self.setter_validator("starting_chi_factor", val) - - @property - def max_irls_iterations(self): - return self._max_irls_iterations - - @max_irls_iterations.setter - def max_irls_iterations(self, val): - self.setter_validator("max_irls_iterations", val) - - @property - def max_global_iterations(self): - return self._max_global_iterations - - @max_global_iterations.setter - def max_global_iterations(self, val): - self.setter_validator("max_global_iterations", val) - - @property - def max_line_search_iterations(self): - return self._max_line_search_iterations - - @max_line_search_iterations.setter - def max_line_search_iterations(self, val): - self.setter_validator("max_line_search_iterations", val) - - @property - def max_cg_iterations(self): - return self._max_cg_iterations - - @max_cg_iterations.setter - def max_cg_iterations(self, val): - self.setter_validator("max_cg_iterations", val) - - @property - def initial_beta(self): - return self._initial_beta - - @initial_beta.setter - def initial_beta(self, val): - self.setter_validator("initial_beta", val) - - @property - def initial_beta_ratio(self): - return self._initial_beta_ratio - - @initial_beta_ratio.setter - def initial_beta_ratio(self, val): - self.setter_validator("initial_beta_ratio", val) - - @property - def tol_cg(self): - return self._tol_cg - - @tol_cg.setter - def tol_cg(self, val): - self.setter_validator("tol_cg", val) - - @property - def alpha_s(self): - return self._alpha_s - - @alpha_s.setter - def alpha_s(self, val): - self.setter_validator("alpha_s", val) - - @property - def length_scale_x(self): - return self._length_scale_x - - @length_scale_x.setter - def length_scale_x(self, val): - self.setter_validator("length_scale_x", val) - - @property - def length_scale_y(self): - return self._length_scale_y - - @length_scale_y.setter - def length_scale_y(self, val): - self.setter_validator("length_scale_y", val) - - @property - def length_scale_z(self): - return self._length_scale_z - - @length_scale_z.setter - def length_scale_z(self, val): - self.setter_validator("length_scale_z", val) - - @property - def s_norm(self): - return self._s_norm - - @s_norm.setter - def s_norm(self, val): - self.setter_validator("s_norm", val) - - @property - def x_norm(self): - return self._x_norm - - @x_norm.setter - def x_norm(self, val): - self.setter_validator("x_norm", val) - - @property - def y_norm(self): - return self._y_norm - - @y_norm.setter - def y_norm(self, val): - self.setter_validator("y_norm", val) - - @property - def z_norm(self): - return self._z_norm - - @z_norm.setter - def z_norm(self, val): - self.setter_validator("z_norm", val) - - @property - def reference_model(self): - return self._reference_model - - @reference_model.setter - def reference_model(self, val): - self.setter_validator("reference_model", val, fun=self._uuid_promoter) - - @property - def gradient_type(self): - return self._gradient_type - - @gradient_type.setter - def gradient_type(self, val): - self.setter_validator("gradient_type", val) - - @property - def lower_bound(self): - return self._lower_bound - - @lower_bound.setter - def lower_bound(self, val): - self.setter_validator("lower_bound", val, fun=self._uuid_promoter) - - @property - def upper_bound(self): - return self._upper_bound - - @upper_bound.setter - def upper_bound(self, val): - self.setter_validator("upper_bound", val, fun=self._uuid_promoter) - - @property - def parallelized(self): - return self._parallelized - - @parallelized.setter - def parallelized(self, val): - self.setter_validator("parallelized", val) - - @property - def physical_property(self): - """Physical property to invert.""" - return self._physical_property - - @property - def n_cpu(self): - return self._n_cpu - - @n_cpu.setter - def n_cpu(self, val): - self.setter_validator("n_cpu", val) - - @property - def max_ram(self): - return self._max_ram - - @max_ram.setter - def max_ram(self, val): - self.setter_validator("max_ram", val) - - @property - def store_sensitivities(self): - return self._store_sensitivities - - @store_sensitivities.setter - def store_sensitivities(self, val): - self.setter_validator("store_sensitivities", val) - - @property - def out_group(self) -> SimPEGGroup | None: - """Return the SimPEGGroup object.""" - return self._out_group - - @out_group.setter - def out_group(self, val): - self.setter_validator("out_group", val) - self.update_group_options() - - @property - def ga_group(self) -> str: - """GA group name.""" - return self._ga_group - - @ga_group.setter - def ga_group(self, val): - self.setter_validator("ga_group", val) - - @property - def distributed_workers(self): - return self._distributed_workers - - @distributed_workers.setter - def distributed_workers(self, val): - self.setter_validator("distributed_workers", val) - - @property - def unit_conversion(self): - """Return unit conversion factor.""" - return None - - def update_group_options(self): - """ - Add options to the SimPEGGroup inversion using input file class. - """ - if self._input_file is not None and self._out_group is not None: - with fetch_active_workspace(self.geoh5, mode="r+"): - ui_json = self.to_dict(ui_json_format=True) - self._out_group.options = ui_json - self._out_group.metadata = None diff --git a/geoapps/inversion/potential_fields/__init__.py b/geoapps/inversion/potential_fields/__init__.py index fa34a9563..6844b17f2 100644 --- a/geoapps/inversion/potential_fields/__init__.py +++ b/geoapps/inversion/potential_fields/__init__.py @@ -1,10 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .gravity.params import GravityParams -from .magnetic_scalar.params import MagneticScalarParams -from .magnetic_vector.params import MagneticVectorParams +# flake8: noqa diff --git a/geoapps/inversion/potential_fields/application.py b/geoapps/inversion/potential_fields/application.py index ac860efc6..4c697b3fd 100644 --- a/geoapps/inversion/potential_fields/application.py +++ b/geoapps/inversion/potential_fields/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -20,6 +22,7 @@ from geoh5py.data import Data from geoh5py.objects import Octree from geoh5py.shared import Entity +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile from geoh5py.workspace import Workspace @@ -32,6 +35,7 @@ from ...base.application import BaseApplication + with warn_module_not_found(): import ipywidgets as widgets from ipywidgets.widgets import ( @@ -47,9 +51,9 @@ Widget, ) -from .gravity.params import GravityParams -from .magnetic_scalar.params import MagneticScalarParams -from .magnetic_vector.params import MagneticVectorParams +from simpeg_drivers.potential_fields.gravity.params import GravityParams +from simpeg_drivers.potential_fields.magnetic_scalar.params import MagneticScalarParams +from simpeg_drivers.potential_fields.magnetic_vector.params import MagneticVectorParams def inversion_defaults(): @@ -104,7 +108,15 @@ def __init__(self, ui_json: str | Path | None = None, plot_result=True, **kwargs ifile = InputFile.read_ui_json(ui_json) self.params = self._param_class(ifile, **kwargs) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) self.data_object = self.objects for key, value in self.params.to_dict().items(): @@ -790,9 +802,9 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) self.update_objects_list() self.sensor.workspace = workspace @@ -1342,7 +1354,7 @@ def file_browser_change(self, _): elif data["inversion_type"] == "magnetic scalar": self._param_class = MagneticScalarParams - self.params = getattr(self, "_param_class")( + self.params = self._param_class( InputFile.read_ui_json(self.file_browser.selected) ) params = self.params.to_dict() diff --git a/geoapps/inversion/potential_fields/gravity/__init__.py b/geoapps/inversion/potential_fields/gravity/__init__.py index 0ca2e09bb..6844b17f2 100644 --- a/geoapps/inversion/potential_fields/gravity/__init__.py +++ b/geoapps/inversion/potential_fields/gravity/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import GravityParams +# flake8: noqa diff --git a/geoapps/inversion/potential_fields/gravity/application.py b/geoapps/inversion/potential_fields/gravity/application.py index a720e85f2..c284def01 100644 --- a/geoapps/inversion/potential_fields/gravity/application.py +++ b/geoapps/inversion/potential_fields/gravity/application.py @@ -1,14 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import pathlib +import uuid + +from geoh5py.shared.exceptions import AssociationValidationError +from simpeg_drivers.potential_fields.gravity.params import GravityParams from geoapps.inversion.base_inversion_application import InversionApp from geoapps.inversion.potential_fields.gravity.constants import app_initializer @@ -17,7 +23,6 @@ gravity_inversion_params, gravity_layout, ) -from geoapps.inversion.potential_fields.gravity.params import GravityParams class GravityApp(InversionApp): @@ -36,7 +41,17 @@ def __init__(self, ui_json=None, **kwargs): self.params = self._param_class(ui_json) else: app_initializer.update(kwargs) - self.params = self._param_class(**app_initializer) + + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) + extras = { key: value for key, value in app_initializer.items() diff --git a/geoapps/inversion/potential_fields/gravity/constants.py b/geoapps/inversion/potential_fields/gravity/constants.py index e5156bb4f..3470690c6 100644 --- a/geoapps/inversion/potential_fields/gravity/constants.py +++ b/geoapps/inversion/potential_fields/gravity/constants.py @@ -1,569 +1,38 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import multiprocessing from uuid import UUID -from geoh5py.objects import Grid2D, Points, Surface - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations -inversion_defaults = { - "version": geoapps.__version__, - "title": "Gravity Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "gravity", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "gz_channel": None, - "gz_uncertainty": 1.0, - "gx_channel": None, - "gx_uncertainty": 1.0, - "gy_channel": None, - "gy_uncertainty": 1.0, - "guv_channel": None, - "guv_uncertainty": 1.0, - "gxy_channel": None, - "gxy_uncertainty": 1.0, - "gxx_channel": None, - "gxx_uncertainty": 1.0, - "gyy_channel": None, - "gyy_uncertainty": 1.0, - "gzz_channel": None, - "gzz_uncertainty": 1.0, - "gxz_channel": None, - "gxz_uncertainty": 1.0, - "gyz_channel": None, - "gyz_uncertainty": 1.0, - "mesh": None, - "starting_model": 1e-3, - "reference_model": 0.0, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 1, - "coolingFactor": 2.0, - "max_global_iterations": 100, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "ga_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Gravity Forward", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "gravity", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_radar_drape": None, - "receivers_offset_z": None, - "gps_receivers_offset": None, - "gz_channel_bool": True, - "gx_channel_bool": False, - "gy_channel_bool": False, - "guv_channel_bool": False, - "gxy_channel_bool": False, - "gxx_channel_bool": False, - "gyy_channel_bool": False, - "gzz_channel_bool": False, - "gxz_channel_bool": False, - "gyz_channel_bool": False, - "mesh": None, - "starting_model": None, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "ga_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -default_ui_json = { - "title": "Gravity Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "gravity", - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{48F5054A-1C5C-4CA4-9048-80F36DC60A06}", - "{b020a277-90e2-4cd7-84d6-612ee3f25051}", - "{b54f6be6-0eb5-4a4e-887a-ba9d276f9a83}", - "{5ffa3816-358d-4cdd-9b7d-e1f7f5543e05}", - ], - "value": None, - }, - "gz_channel_bool": { - "group": "Data", - "main": True, - "label": "Gz (mGal)", - "value": False, - }, - "gz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gz (mGal)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gx_channel_bool": { - "group": "Data", - "main": True, - "label": "Gx (mGal)", - "value": False, - }, - "gx_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gx (mGal)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gx_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gx_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gy_channel_bool": { - "group": "Data", - "main": True, - "label": "Gy (mGal)", - "value": False, - }, - "gy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gy (mGal)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "guv_channel_bool": { - "group": "Data", - "main": True, - "label": "Guv (Eo)", - "value": False, - }, - "guv_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Guv (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "guv_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "guv_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gxy_channel_bool": { - "group": "Data", - "main": True, - "label": "Gxy/Gne (Eo)", - "value": False, - }, - "gxy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gxy/Gne (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gxy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gxy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gxx_channel_bool": { - "group": "Data", - "main": True, - "label": "Gxx (Eo)", - "value": False, - }, - "gxx_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gxx (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gxx_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gxx_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gyy_channel_bool": { - "group": "Data", - "main": True, - "label": "Gyy (Eo)", - "value": False, - }, - "gyy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gyy (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gyy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gyy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gzz_channel_bool": { - "group": "Data", - "main": True, - "label": "Gzz (Eo)", - "value": False, - }, - "gzz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gzz (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gzz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gzz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gxz_channel_bool": { - "group": "Data", - "main": True, - "label": "Gxz (Eo)", - "value": False, - }, - "gxz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gxz (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gxz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gxz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "gyz_channel_bool": { - "group": "Data", - "main": True, - "label": "Gyz (Eo)", - "value": False, - }, - "gyz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Gyz (Eo)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "gyz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "gyz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Initial density (g/cc)", - "property": None, - "value": 1e-3, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "optional": True, - "enabled": False, - "parent": "mesh", - "label": "Reference density (g/cc)", - "property": None, - "value": 0.0, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (g/cc)", - "property": None, - "optional": True, - "value": -10.0, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (g/cc)", - "property": None, - "optional": True, - "value": 10.0, - "enabled": False, - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["gravity"], - }, - "data_object": {"types": [str, UUID, Points, Surface, Grid2D]}, - "gz_channel": {"one_of": "data channel"}, - "gz_uncertainty": {"one_of": "uncertainty channel"}, - "guv_channel": {"one_of": "data channel"}, - "guv_uncertainty": {"one_of": "uncertainty channel"}, - "gxy_channel": {"one_of": "data channel"}, - "gxy_uncertainty": {"one_of": "uncertainty channel"}, - "gxx_channel": {"one_of": "data channel"}, - "gxx_uncertainty": {"one_of": "uncertainty channel"}, - "gyy_channel": {"one_of": "data channel"}, - "gyy_uncertainty": {"one_of": "uncertainty channel"}, - "gzz_channel": {"one_of": "data channel"}, - "gzz_uncertainty": {"one_of": "uncertainty channel"}, - "gxz_channel": {"one_of": "data channel"}, - "gxz_uncertainty": {"one_of": "uncertainty channel"}, - "gyz_channel": {"one_of": "data channel"}, - "gyz_uncertainty": {"one_of": "uncertainty channel"}, - "gx_channel": {"one_of": "data channel"}, - "gx_uncertainty": {"one_of": "uncertainty channel"}, - "gy_channel": {"one_of": "data channel"}, - "gy_uncertainty": {"one_of": "uncertainty channel"}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), "monitoring_directory": str((assets_path() / "Temp").resolve()), "forward_only": False, - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), - "gxx_channel": UUID("{53e59b2b-c2ae-4b77-923b-23e06d874e62}"), + "data_object": UUID("{7aaf00be-adbf-4540-8333-8ac2c2a3c31a}"), + "gxx_channel": UUID("{3d7ace18-e9c5-4cef-9ca3-8adc12fd53c4}"), "gxx_uncertainty": 1.0, - "gyy_channel": UUID("{51c0acd7-84b8-421f-a66b-fdc15c826a47}"), + "gyy_channel": UUID("{1d001501-3d84-4afb-8e24-6be267827ae0}"), "gyy_uncertainty": 1.0, - "gzz_channel": UUID("{f450906d-80e2-4c50-ab27-6da5cf0906af}"), + "gzz_channel": UUID("{82e34b29-a6f7-4488-944c-ff5bd8580a13}"), "gzz_uncertainty": 1.0, - "gxy_channel": UUID("{9c2afb52-d7b6-4a21-88e9-23bfe9459529}"), + "gxy_channel": UUID("{a960226f-e69c-4131-9855-cd59d98ca994}"), "gxy_uncertainty": 1.0, - "gxz_channel": UUID("{55a38ea9-ab20-4944-9fe0-3f77b1f4dcc2}"), + "gxz_channel": UUID("{1daec416-29b6-4e66-8a25-b366ef41bb03}"), "gxz_uncertainty": 1.0, - "gyz_channel": UUID("{3d19bd53-8bb8-4634-aeae-4e3a90e9d19e}"), + "gyz_channel": UUID("{45a05273-3d57-45de-b435-d752077bb2f4}"), "gyz_uncertainty": 1.0, - "mesh": UUID("{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}"), + "mesh": UUID("{f6b08e3b-9a85-45ab-a487-4700e3ca1917}"), "resolution": 50.0, "window_center_x": 314565.0, "window_center_y": 6072334.0, diff --git a/geoapps/inversion/potential_fields/gravity/driver.py b/geoapps/inversion/potential_fields/gravity/driver.py deleted file mode 100644 index 761c2e4e9..000000000 --- a/geoapps/inversion/potential_fields/gravity/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import GravityParams - - -class GravityDriver(InversionDriver): - _params_class = GravityParams - _validations = validations - - def __init__(self, params: GravityParams): - super().__init__(params) diff --git a/geoapps/inversion/potential_fields/gravity/layout.py b/geoapps/inversion/potential_fields/gravity/layout.py index 780c76bc3..397b5f3f3 100644 --- a/geoapps/inversion/potential_fields/gravity/layout.py +++ b/geoapps/inversion/potential_fields/gravity/layout.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from dash import html import geoapps.inversion.base_inversion_layout as base_layout + component_list = [ "gx", "gy", diff --git a/geoapps/inversion/potential_fields/gravity/params.py b/geoapps/inversion/potential_fields/gravity/params.py deleted file mode 100644 index 87c7bc767..000000000 --- a/geoapps/inversion/potential_fields/gravity/params.py +++ /dev/null @@ -1,315 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion.params import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class GravityParams(InversionBaseParams): - """ - Parameter class for gravity->density inversion. - """ - - _physical_property = "density" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "gravity" - self._validations = validations - self._gz_channel_bool = None - self._gz_channel = None - self._gz_uncertainty = None - self._guv_channel_bool = None - self._guv_channel = None - self._guv_uncertainty = None - self._gxy_channel_bool = None - self._gxy_channel = None - self._gxy_uncertainty = None - self._gxx_channel_bool = None - self._gxx_channel = None - self._gxx_uncertainty = None - self._gyy_channel_bool = None - self._gyy_channel = None - self._gyy_uncertainty = None - self._gzz_channel_bool = None - self._gzz_channel = None - self._gzz_uncertainty = None - self._gxz_channel_bool = None - self._gxz_channel = None - self._gxz_uncertainty = None - self._gyz_channel_bool = None - self._gyz_channel = None - self._gyz_uncertainty = None - self._gx_channel_bool = None - self._gx_channel = None - self._gx_uncertainty = None - self._gy_channel_bool = None - self._gy_channel = None - self._gy_uncertainty = None - self._out_group = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def components(self) -> list[str]: - """Retrieve component names used to index channel and uncertainty data.""" - comps = super().components() - if self.forward_only: - if len(comps) == 0: - comps = ["gz"] - return comps - - @property - def gz_channel_bool(self): - return self._gz_channel_bool - - @gz_channel_bool.setter - def gz_channel_bool(self, val): - self.setter_validator("gz_channel_bool", val) - - @property - def gz_channel(self): - return self._gz_channel - - @gz_channel.setter - def gz_channel(self, val): - self.setter_validator("gz_channel", val, fun=self._uuid_promoter) - - @property - def gz_uncertainty(self): - return self._gz_uncertainty - - @gz_uncertainty.setter - def gz_uncertainty(self, val): - self.setter_validator("gz_uncertainty", val, fun=self._uuid_promoter) - - @property - def guv_channel_bool(self): - return self._guv_channel_bool - - @guv_channel_bool.setter - def guv_channel_bool(self, val): - self.setter_validator("guv_channel_bool", val) - - @property - def guv_channel(self): - return self._guv_channel - - @guv_channel.setter - def guv_channel(self, val): - self.setter_validator("guv_channel", val, fun=self._uuid_promoter) - - @property - def guv_uncertainty(self): - return self._guv_uncertainty - - @guv_uncertainty.setter - def guv_uncertainty(self, val): - self.setter_validator("guv_uncertainty", val, fun=self._uuid_promoter) - - @property - def gxy_channel_bool(self): - return self._gxy_channel_bool - - @gxy_channel_bool.setter - def gxy_channel_bool(self, val): - self.setter_validator("gxy_channel_bool", val) - - @property - def gxy_channel(self): - return self._gxy_channel - - @gxy_channel.setter - def gxy_channel(self, val): - self.setter_validator("gxy_channel", val, fun=self._uuid_promoter) - - @property - def gxy_uncertainty(self): - return self._gxy_uncertainty - - @gxy_uncertainty.setter - def gxy_uncertainty(self, val): - self.setter_validator("gxy_uncertainty", val, fun=self._uuid_promoter) - - @property - def gxx_channel_bool(self): - return self._gxx_channel_bool - - @gxx_channel_bool.setter - def gxx_channel_bool(self, val): - self.setter_validator("gxx_channel_bool", val) - - @property - def gxx_channel(self): - return self._gxx_channel - - @gxx_channel.setter - def gxx_channel(self, val): - self.setter_validator("gxx_channel", val, fun=self._uuid_promoter) - - @property - def gxx_uncertainty(self): - return self._gxx_uncertainty - - @gxx_uncertainty.setter - def gxx_uncertainty(self, val): - self.setter_validator("gxx_uncertainty", val, fun=self._uuid_promoter) - - @property - def gyy_channel_bool(self): - return self._gyy_channel_bool - - @gyy_channel_bool.setter - def gyy_channel_bool(self, val): - self.setter_validator("gyy_channel_bool", val) - - @property - def gyy_channel(self): - return self._gyy_channel - - @gyy_channel.setter - def gyy_channel(self, val): - self.setter_validator("gyy_channel", val, fun=self._uuid_promoter) - - @property - def gyy_uncertainty(self): - return self._gyy_uncertainty - - @gyy_uncertainty.setter - def gyy_uncertainty(self, val): - self.setter_validator("gyy_uncertainty", val, fun=self._uuid_promoter) - - @property - def gzz_channel_bool(self): - return self._gzz_channel_bool - - @gzz_channel_bool.setter - def gzz_channel_bool(self, val): - self.setter_validator("gzz_channel_bool", val) - - @property - def gzz_channel(self): - return self._gzz_channel - - @gzz_channel.setter - def gzz_channel(self, val): - self.setter_validator("gzz_channel", val, fun=self._uuid_promoter) - - @property - def gzz_uncertainty(self): - return self._gzz_uncertainty - - @gzz_uncertainty.setter - def gzz_uncertainty(self, val): - self.setter_validator("gzz_uncertainty", val, fun=self._uuid_promoter) - - @property - def gxz_channel_bool(self): - return self._gxz_channel_bool - - @gxz_channel_bool.setter - def gxz_channel_bool(self, val): - self.setter_validator("gxz_channel_bool", val) - - @property - def gxz_channel(self): - return self._gxz_channel - - @gxz_channel.setter - def gxz_channel(self, val): - self.setter_validator("gxz_channel", val, fun=self._uuid_promoter) - - @property - def gxz_uncertainty(self): - return self._gxz_uncertainty - - @gxz_uncertainty.setter - def gxz_uncertainty(self, val): - self.setter_validator("gxz_uncertainty", val, fun=self._uuid_promoter) - - @property - def gyz_channel_bool(self): - return self._gyz_channel_bool - - @gyz_channel_bool.setter - def gyz_channel_bool(self, val): - self.setter_validator("gyz_channel_bool", val) - - @property - def gyz_channel(self): - return self._gyz_channel - - @gyz_channel.setter - def gyz_channel(self, val): - self.setter_validator("gyz_channel", val, fun=self._uuid_promoter) - - @property - def gyz_uncertainty(self): - return self._gyz_uncertainty - - @gyz_uncertainty.setter - def gyz_uncertainty(self, val): - self.setter_validator("gyz_uncertainty", val, fun=self._uuid_promoter) - - @property - def gx_channel_bool(self): - return self._gx_channel_bool - - @gx_channel_bool.setter - def gx_channel_bool(self, val): - self.setter_validator("gx_channel_bool", val) - - @property - def gx_channel(self): - return self._gx_channel - - @gx_channel.setter - def gx_channel(self, val): - self.setter_validator("gx_channel", val, fun=self._uuid_promoter) - - @property - def gx_uncertainty(self): - return self._gx_uncertainty - - @gx_uncertainty.setter - def gx_uncertainty(self, val): - self.setter_validator("gx_uncertainty", val, fun=self._uuid_promoter) - - @property - def gy_channel_bool(self): - return self._gy_channel_bool - - @gy_channel_bool.setter - def gy_channel_bool(self, val): - self.setter_validator("gy_channel_bool", val) - - @property - def gy_channel(self): - return self._gy_channel - - @gy_channel.setter - def gy_channel(self, val): - self.setter_validator("gy_channel", val, fun=self._uuid_promoter) - - @property - def gy_uncertainty(self): - return self._gy_uncertainty - - @gy_uncertainty.setter - def gy_uncertainty(self, val): - self.setter_validator("gy_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/potential_fields/magnetic_scalar/__init__.py b/geoapps/inversion/potential_fields/magnetic_scalar/__init__.py index bcbbc0094..6844b17f2 100644 --- a/geoapps/inversion/potential_fields/magnetic_scalar/__init__.py +++ b/geoapps/inversion/potential_fields/magnetic_scalar/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import MagneticScalarParams +# flake8: noqa diff --git a/geoapps/inversion/potential_fields/magnetic_scalar/application.py b/geoapps/inversion/potential_fields/magnetic_scalar/application.py index 71b27adc9..d4cb427b1 100644 --- a/geoapps/inversion/potential_fields/magnetic_scalar/application.py +++ b/geoapps/inversion/potential_fields/magnetic_scalar/application.py @@ -1,16 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import pathlib +import uuid from dash import Input, Output, State +from geoh5py.shared.exceptions import AssociationValidationError +from simpeg_drivers.potential_fields.magnetic_scalar.params import MagneticScalarParams from geoapps.inversion.base_inversion_application import InversionApp from geoapps.inversion.potential_fields.magnetic_scalar.constants import app_initializer @@ -19,9 +23,6 @@ magnetic_scalar_inversion_params, magnetic_scalar_layout, ) -from geoapps.inversion.potential_fields.magnetic_scalar.params import ( - MagneticScalarParams, -) class MagneticScalarApp(InversionApp): @@ -40,7 +41,17 @@ def __init__(self, ui_json=None, **kwargs): self.params = self._param_class(ui_json) else: app_initializer.update(kwargs) - self.params = self._param_class(**app_initializer) + + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) + extras = { key: value for key, value in app_initializer.items() diff --git a/geoapps/inversion/potential_fields/magnetic_scalar/constants.py b/geoapps/inversion/potential_fields/magnetic_scalar/constants.py index eebec1d2d..72717b3d4 100644 --- a/geoapps/inversion/potential_fields/magnetic_scalar/constants.py +++ b/geoapps/inversion/potential_fields/magnetic_scalar/constants.py @@ -1,599 +1,30 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import multiprocessing from uuid import UUID -from geoh5py.objects import Grid2D, Points, Surface - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations - -inversion_defaults = { - "version": geoapps.__version__, - "title": "Magnetic Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornemagnetics", - "inversion_type": "magnetic scalar", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "inducing_field_strength": 50000.0, - "inducing_field_inclination": 90.0, - "inducing_field_declination": 0.0, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "tmi_channel": None, - "tmi_uncertainty": 1.0, - "bx_channel": None, - "bx_uncertainty": 1.0, - "by_channel": None, - "by_uncertainty": 1.0, - "bz_channel": None, - "bz_uncertainty": 1.0, - "bxx_channel": None, - "bxx_uncertainty": 1.0, - "bxy_channel": None, - "bxy_uncertainty": 1.0, - "bxz_channel": None, - "bxz_uncertainty": 1.0, - "byy_channel": None, - "byy_uncertainty": 1.0, - "byz_channel": None, - "byz_uncertainty": 1.0, - "bzz_channel": None, - "bzz_uncertainty": 1.0, - "mesh": None, - "starting_model": 1e-4, - "reference_model": 0.0, - "lower_bound": None, - "upper_bound": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 10.0, - "initial_beta": None, - "coolingRate": 1, - "coolingFactor": 2.0, - "max_global_iterations": 100, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "ga_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Magnetic Forward", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "magnetic scalar", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "inducing_field_strength": 50000.0, - "inducing_field_inclination": 90.0, - "inducing_field_declination": 0.0, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "tmi_channel_bool": True, - "bx_channel_bool": False, - "by_channel_bool": False, - "bz_channel_bool": False, - "bxx_channel_bool": False, - "bxy_channel_bool": False, - "bxz_channel_bool": False, - "byy_channel_bool": False, - "byz_channel_bool": False, - "bzz_channel_bool": False, - "mesh": None, - "starting_model": 1e-4, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "ga_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} - -default_ui_json = { - "title": "Magnetic Susceptibility Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "magnetic scalar", - "inducing_field_strength": { - "min": 0.0, - "max": 100000.0, - "precision": 2, - "lineEdit": False, - "main": True, - "group": "Inducing Field", - "label": "Strength (nT)", - "value": 50000.0, - }, - "inducing_field_inclination": { - "min": -90.0, - "max": 90.0, - "precision": 2, - "lineEdit": False, - "main": True, - "group": "Inducing Field", - "label": "Inclination (deg)", - "value": 90.0, - }, - "inducing_field_declination": { - "min": -180.0, - "max": 180.0, - "precision": 2, - "lineEdit": False, - "main": True, - "group": "Inducing Field", - "label": "Declination (deg)", - "value": 0.0, - }, - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{48F5054A-1C5C-4CA4-9048-80F36DC60A06}", - "{b020a277-90e2-4cd7-84d6-612ee3f25051}", - "{4b99204c-d133-4579-a916-a9c8b98cfccb}", - "{028e4905-cc97-4dab-b1bf-d76f58b501b5}", - ], - "value": None, - }, - "tmi_channel_bool": { - "group": "Data", - "main": True, - "label": "TMI (nT)", - "value": False, - }, - "tmi_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "TMI (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "tmi_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "tmi_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bxx_channel_bool": { - "group": "Data", - "main": True, - "label": "Bxx (nT/m)", - "value": False, - }, - "bxx_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bxx (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bxx_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bxx_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bxy_channel_bool": { - "group": "Data", - "main": True, - "label": "Bxy (nT/m)", - "value": False, - }, - "bxy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bxy (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bxy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bxy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bxz_channel_bool": { - "group": "Data", - "main": True, - "label": "Bxz (nT/m)", - "value": False, - }, - "bxz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bxz (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bxz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bxz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "byy_channel_bool": { - "group": "Data", - "main": True, - "label": "Byy (nT/m)", - "value": False, - }, - "byy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Byy (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "byy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "byy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "byz_channel_bool": { - "group": "Data", - "main": True, - "label": "Byz (nT/m)", - "value": False, - }, - "byz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Byz (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "byz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "byz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bzz_channel_bool": { - "group": "Data", - "main": True, - "label": "Bzz (nT/m)", - "value": False, - }, - "bzz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bzz (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bzz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bzz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bx_channel_bool": { - "group": "Data", - "main": True, - "label": "Bx (nT)", - "value": False, - }, - "bx_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bx (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bx_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bx_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "by_channel_bool": { - "group": "Data", - "main": True, - "label": "By (nT)", - "value": False, - }, - "by_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "By (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "by_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "by_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bz_channel_bool": { - "group": "Data", - "main": True, - "label": "Bz (nT)", - "value": False, - }, - "bz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bz (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "parent": "mesh", - "label": "Initial susceptibility (SI)", - "property": None, - "value": 1e-4, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "optional": True, - "enabled": False, - "parent": "mesh", - "label": "Reference susceptibility (SI)", - "property": None, - "value": 0.0, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Lower bound (SI)", - "property": None, - "optional": True, - "value": 0.0, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "parent": "mesh", - "label": "Upper bound (SI)", - "property": None, - "optional": True, - "value": 1.0, - "enabled": False, - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["magnetic scalar"], - }, - "data_object": {"types": [str, UUID, Points, Surface, Grid2D]}, - "tmi_channel": {"one_of": "data channel"}, - "tmi_uncertainty": {"one_of": "uncertainty channel"}, - "bxx_channel": {"one_of": "data channel"}, - "bxx_uncertainty": {"one_of": "uncertainty channel"}, - "bxy_channel": {"one_of": "data channel"}, - "bxy_uncertainty": {"one_of": "uncertainty channel"}, - "bxz_channel": {"one_of": "data channel"}, - "bxz_uncertainty": {"one_of": "uncertainty channel"}, - "byy_channel": {"one_of": "data channel"}, - "byy_uncertainty": {"one_of": "uncertainty channel"}, - "byz_channel": {"one_of": "data channel"}, - "byz_uncertainty": {"one_of": "uncertainty channel"}, - "bzz_channel": {"one_of": "data channel"}, - "bzz_uncertainty": {"one_of": "uncertainty channel"}, - "bx_channel": {"one_of": "data channel"}, - "bx_uncertainty": {"one_of": "uncertainty channel"}, - "by_channel": {"one_of": "data channel"}, - "by_uncertainty": {"one_of": "uncertainty channel"}, - "bz_channel": {"one_of": "data channel"}, - "bz_uncertainty": {"one_of": "uncertainty channel"}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), "monitoring_directory": str((assets_path() / "Temp").resolve()), "forward_only": False, - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), + "data_object": UUID("{7aaf00be-adbf-4540-8333-8ac2c2a3c31a}"), "resolution": 50.0, - "tmi_channel": UUID("{44822654-b6ae-45b0-8886-2d845f80f422}"), + "tmi_channel": UUID("{a342e416-946a-4162-9604-6807ccb06073}"), "tmi_uncertainty": 10.0, "tmi_channel_bool": True, - "mesh": UUID("{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}"), + "mesh": UUID("{f6b08e3b-9a85-45ab-a487-4700e3ca1917}"), "inducing_field_strength": 60000.0, "inducing_field_inclination": 79.0, "inducing_field_declination": 11.0, diff --git a/geoapps/inversion/potential_fields/magnetic_scalar/driver.py b/geoapps/inversion/potential_fields/magnetic_scalar/driver.py deleted file mode 100644 index aa90ebf3b..000000000 --- a/geoapps/inversion/potential_fields/magnetic_scalar/driver.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import MagneticScalarParams - - -class MagneticScalarDriver(InversionDriver): - _params_class = MagneticScalarParams - _validations = validations - - def __init__(self, params: MagneticScalarParams): - super().__init__(params) diff --git a/geoapps/inversion/potential_fields/magnetic_scalar/layout.py b/geoapps/inversion/potential_fields/magnetic_scalar/layout.py index 00a832307..1369982a7 100644 --- a/geoapps/inversion/potential_fields/magnetic_scalar/layout.py +++ b/geoapps/inversion/potential_fields/magnetic_scalar/layout.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from dash import html import geoapps.inversion.base_inversion_layout as base_layout + component_list = [ "tmi", "bx", diff --git a/geoapps/inversion/potential_fields/magnetic_scalar/params.py b/geoapps/inversion/potential_fields/magnetic_scalar/params.py deleted file mode 100644 index b98e4a0de..000000000 --- a/geoapps/inversion/potential_fields/magnetic_scalar/params.py +++ /dev/null @@ -1,361 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -# pylint: disable=too-many-public-methods -# pylint: disable=too-many-instance-attributes - - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class MagneticScalarParams(InversionBaseParams): - """ - Parameter class for magnetics->susceptibility inversion. - """ - - _physical_property = "susceptibility" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "magnetic scalar" - self._validations = validations - self._inducing_field_strength: float = None - self._inducing_field_inclination: float = None - self._inducing_field_declination: float = None - self._tmi_channel_bool = None - self._tmi_channel = None - self._tmi_uncertainty = None - self._bxx_channel_bool = None - self._bxx_channel = None - self._bxx_uncertainty = None - self._bxy_channel_bool = None - self._bxy_channel = None - self._bxy_uncertainty = None - self._bxz_channel_bool = None - self._bxz_channel = None - self._bxz_uncertainty = None - self._byy_channel_bool = None - self._byy_channel = None - self._byy_uncertainty = None - self._byz_channel_bool = None - self._byz_channel = None - self._byz_uncertainty = None - self._bzz_channel_bool = None - self._bzz_channel = None - self._bzz_uncertainty = None - self._bx_channel_bool = None - self._bx_channel = None - self._bx_uncertainty = None - self._by_channel_bool = None - self._by_channel = None - self._by_uncertainty = None - self._bz_channel_bool = None - self._bz_channel = None - self._bz_uncertainty = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def components(self) -> list[str]: - """Retrieve component names used to index channel and uncertainty data.""" - comps = super().components() - if self.forward_only: - if len(comps) == 0: - comps = ["tmi"] - return comps - - def inducing_field_aid(self) -> list[float]: - """Returns inducing field components as a list.""" - return [ - self.inducing_field_strength, - self.inducing_field_inclination, - self.inducing_field_declination, - ] - - @property - def inversion_type(self): - return self._inversion_type - - @inversion_type.setter - def inversion_type(self, val): - self.setter_validator("inversion_type", val) - - @property - def inducing_field_strength(self): - return self._inducing_field_strength - - @inducing_field_strength.setter - def inducing_field_strength(self, val): - self.setter_validator("inducing_field_strength", val) - - @property - def inducing_field_inclination(self): - return self._inducing_field_inclination - - @inducing_field_inclination.setter - def inducing_field_inclination(self, val): - self.setter_validator("inducing_field_inclination", val) - - @property - def inducing_field_declination(self): - return self._inducing_field_declination - - @inducing_field_declination.setter - def inducing_field_declination(self, val): - self.setter_validator("inducing_field_declination", val) - - @property - def tmi_channel_bool(self): - return self._tmi_channel_bool - - @tmi_channel_bool.setter - def tmi_channel_bool(self, val): - self.setter_validator("tmi_channel_bool", val) - - @property - def tmi_channel(self): - return self._tmi_channel - - @tmi_channel.setter - def tmi_channel(self, val): - self.setter_validator("tmi_channel", val, fun=self._uuid_promoter) - - @property - def tmi_uncertainty(self): - return self._tmi_uncertainty - - @tmi_uncertainty.setter - def tmi_uncertainty(self, val): - self.setter_validator("tmi_uncertainty", val, fun=self._uuid_promoter) - - @property - def bxx_channel_bool(self): - return self._bxx_channel_bool - - @bxx_channel_bool.setter - def bxx_channel_bool(self, val): - self.setter_validator("bxx_channel_bool", val) - - @property - def bxx_channel(self): - return self._bxx_channel - - @bxx_channel.setter - def bxx_channel(self, val): - self.setter_validator("bxx_channel", val, fun=self._uuid_promoter) - - @property - def bxx_uncertainty(self): - return self._bxx_uncertainty - - @bxx_uncertainty.setter - def bxx_uncertainty(self, val): - self.setter_validator("bxx_uncertainty", val, fun=self._uuid_promoter) - - @property - def bxy_channel_bool(self): - return self._bxy_channel_bool - - @bxy_channel_bool.setter - def bxy_channel_bool(self, val): - self.setter_validator("bxy_channel_bool", val) - - @property - def bxy_channel(self): - return self._bxy_channel - - @bxy_channel.setter - def bxy_channel(self, val): - self.setter_validator("bxy_channel", val, fun=self._uuid_promoter) - - @property - def bxy_uncertainty(self): - return self._bxy_uncertainty - - @bxy_uncertainty.setter - def bxy_uncertainty(self, val): - self.setter_validator("bxy_uncertainty", val, fun=self._uuid_promoter) - - @property - def bxz_channel_bool(self): - return self._bxz_channel_bool - - @bxz_channel_bool.setter - def bxz_channel_bool(self, val): - self.setter_validator("bxz_channel_bool", val) - - @property - def bxz_channel(self): - return self._bxz_channel - - @bxz_channel.setter - def bxz_channel(self, val): - self.setter_validator("bxz_channel", val, fun=self._uuid_promoter) - - @property - def bxz_uncertainty(self): - return self._bxz_uncertainty - - @bxz_uncertainty.setter - def bxz_uncertainty(self, val): - self.setter_validator("bxz_uncertainty", val, fun=self._uuid_promoter) - - @property - def byy_channel_bool(self): - return self._byy_channel_bool - - @byy_channel_bool.setter - def byy_channel_bool(self, val): - self.setter_validator("byy_channel_bool", val) - - @property - def byy_channel(self): - return self._byy_channel - - @byy_channel.setter - def byy_channel(self, val): - self.setter_validator("byy_channel", val, fun=self._uuid_promoter) - - @property - def byy_uncertainty(self): - return self._byy_uncertainty - - @byy_uncertainty.setter - def byy_uncertainty(self, val): - self.setter_validator("byy_uncertainty", val, fun=self._uuid_promoter) - - @property - def byz_channel_bool(self): - return self._byz_channel_bool - - @byz_channel_bool.setter - def byz_channel_bool(self, val): - self.setter_validator("byz_channel_bool", val) - - @property - def byz_channel(self): - return self._byz_channel - - @byz_channel.setter - def byz_channel(self, val): - self.setter_validator("byz_channel", val, fun=self._uuid_promoter) - - @property - def byz_uncertainty(self): - return self._byz_uncertainty - - @byz_uncertainty.setter - def byz_uncertainty(self, val): - self.setter_validator("byz_uncertainty", val, fun=self._uuid_promoter) - - @property - def bzz_channel_bool(self): - return self._bzz_channel_bool - - @bzz_channel_bool.setter - def bzz_channel_bool(self, val): - self.setter_validator("bzz_channel_bool", val) - - @property - def bzz_channel(self): - return self._bzz_channel - - @bzz_channel.setter - def bzz_channel(self, val): - self.setter_validator("bzz_channel", val, fun=self._uuid_promoter) - - @property - def bzz_uncertainty(self): - return self._bzz_uncertainty - - @bzz_uncertainty.setter - def bzz_uncertainty(self, val): - self.setter_validator("bzz_uncertainty", val, fun=self._uuid_promoter) - - @property - def bx_channel_bool(self): - return self._bx_channel_bool - - @bx_channel_bool.setter - def bx_channel_bool(self, val): - self.setter_validator("bx_channel_bool", val) - - @property - def bx_channel(self): - return self._bx_channel - - @bx_channel.setter - def bx_channel(self, val): - self.setter_validator("bx_channel", val, fun=self._uuid_promoter) - - @property - def bx_uncertainty(self): - return self._bx_uncertainty - - @bx_uncertainty.setter - def bx_uncertainty(self, val): - self.setter_validator("bx_uncertainty", val, fun=self._uuid_promoter) - - @property - def by_channel_bool(self): - return self._by_channel_bool - - @by_channel_bool.setter - def by_channel_bool(self, val): - self.setter_validator("by_channel_bool", val) - - @property - def by_channel(self): - return self._by_channel - - @by_channel.setter - def by_channel(self, val): - self.setter_validator("by_channel", val, fun=self._uuid_promoter) - - @property - def by_uncertainty(self): - return self._by_uncertainty - - @by_uncertainty.setter - def by_uncertainty(self, val): - self.setter_validator("by_uncertainty", val, fun=self._uuid_promoter) - - @property - def bz_channel_bool(self): - return self._bz_channel_bool - - @bz_channel_bool.setter - def bz_channel_bool(self, val): - self.setter_validator("bz_channel_bool", val) - - @property - def bz_channel(self): - return self._bz_channel - - @bz_channel.setter - def bz_channel(self, val): - self.setter_validator("bz_channel", val, fun=self._uuid_promoter) - - @property - def bz_uncertainty(self): - return self._bz_uncertainty - - @bz_uncertainty.setter - def bz_uncertainty(self, val): - self.setter_validator("bz_uncertainty", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/potential_fields/magnetic_vector/__init__.py b/geoapps/inversion/potential_fields/magnetic_vector/__init__.py index e96c66cfd..6844b17f2 100644 --- a/geoapps/inversion/potential_fields/magnetic_vector/__init__.py +++ b/geoapps/inversion/potential_fields/magnetic_vector/__init__.py @@ -1,8 +1,10 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from .params import MagneticVectorParams +# flake8: noqa diff --git a/geoapps/inversion/potential_fields/magnetic_vector/application.py b/geoapps/inversion/potential_fields/magnetic_vector/application.py index f114e3419..c9010120b 100644 --- a/geoapps/inversion/potential_fields/magnetic_vector/application.py +++ b/geoapps/inversion/potential_fields/magnetic_vector/application.py @@ -1,16 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import pathlib +import uuid from dash import Input, Output, State +from geoh5py.shared.exceptions import AssociationValidationError +from simpeg_drivers.potential_fields.magnetic_vector.params import MagneticVectorParams from geoapps.inversion.base_inversion_application import InversionApp from geoapps.inversion.potential_fields.magnetic_vector.constants import app_initializer @@ -19,9 +23,6 @@ magnetic_vector_inversion_params, magnetic_vector_layout, ) -from geoapps.inversion.potential_fields.magnetic_vector.params import ( - MagneticVectorParams, -) class MagneticVectorApp(InversionApp): @@ -40,7 +41,17 @@ def __init__(self, ui_json=None, **kwargs): self.params = self._param_class(ui_json) else: app_initializer.update(kwargs) - self.params = self._param_class(**app_initializer) + + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) + extras = { key: value for key, value in app_initializer.items() diff --git a/geoapps/inversion/potential_fields/magnetic_vector/constants.py b/geoapps/inversion/potential_fields/magnetic_vector/constants.py index b8e9421cf..809188ea3 100644 --- a/geoapps/inversion/potential_fields/magnetic_vector/constants.py +++ b/geoapps/inversion/potential_fields/magnetic_vector/constants.py @@ -1,670 +1,29 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import multiprocessing from uuid import UUID -from geoh5py.objects import Grid2D, Points, Surface - -import geoapps from geoapps import assets_path -from geoapps.inversion import default_ui_json as base_default_ui_json -from geoapps.inversion.constants import validations as base_validations -inversion_defaults = { - "version": geoapps.__version__, - "title": "Magnetic Vector (MVI) Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "magnetic vector", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": False, - "inducing_field_strength": 50000.0, - "inducing_field_inclination": 90.0, - "inducing_field_declination": 0.0, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "tmi_channel": None, - "tmi_uncertainty": 1.0, - "bx_channel": None, - "bx_uncertainty": 1.0, - "by_channel": None, - "by_uncertainty": 1.0, - "bz_channel": None, - "bz_uncertainty": 1.0, - "bxx_channel": None, - "bxx_uncertainty": 1.0, - "bxy_channel": None, - "bxy_uncertainty": 1.0, - "bxz_channel": None, - "bxz_uncertainty": 1.0, - "byy_channel": None, - "byy_uncertainty": 1.0, - "byz_channel": None, - "byz_uncertainty": 1.0, - "bzz_channel": None, - "bzz_uncertainty": 1.0, - "mesh": None, - "starting_model": 1e-4, - "reference_model": 0.0, - "lower_bound": None, - "upper_bound": None, - "starting_inclination": None, - "starting_declination": None, - "reference_inclination": None, - "reference_declination": None, - "output_tile_files": False, - "inversion_style": "voxel", - "chi_factor": 1.0, - "initial_beta_ratio": 100.0, - "initial_beta": None, - "coolingRate": 1, - "coolingFactor": 2.0, - "max_global_iterations": 100, - "max_line_search_iterations": 20, - "max_cg_iterations": 30, - "tol_cg": 1e-4, - "alpha_s": 1.0, - "length_scale_x": 1.0, - "length_scale_y": 1.0, - "length_scale_z": 1.0, - "s_norm": 0.0, - "x_norm": 2.0, - "y_norm": 2.0, - "z_norm": 2.0, - "gradient_type": "total", - "max_irls_iterations": 25, - "starting_chi_factor": None, - "f_min_change": 1e-4, - "beta_tol": 0.5, - "prctile": 95, - "coolEps_q": True, - "coolEpsFact": 1.2, - "beta_search": False, - "sens_wts_threshold": 0.001, - "every_iteration_bool": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "store_sensitivities": "ram", - "max_ram": None, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "ga_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -forward_defaults = { - "version": geoapps.__version__, - "title": "Magnetic Vector (MVI) Forward", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornemagnetics", - "inversion_type": "magnetic vector", - "geoh5": None, # Must remain at top of list for notebook app initialization - "forward_only": True, - "inducing_field_strength": 50000.0, - "inducing_field_inclination": 90.0, - "inducing_field_declination": 0.0, - "topography_object": None, - "topography": None, - "data_object": None, - "z_from_topo": False, - "receivers_offset_z": None, - "receivers_radar_drape": None, - "gps_receivers_offset": None, - "tmi_channel_bool": True, - "bx_channel_bool": False, - "by_channel_bool": False, - "bz_channel_bool": False, - "bxx_channel_bool": False, - "bxy_channel_bool": False, - "bxz_channel_bool": False, - "byy_channel_bool": False, - "byz_channel_bool": False, - "bzz_channel_bool": False, - "mesh": None, - "starting_model": None, - "starting_inclination": None, - "starting_declination": None, - "output_tile_files": False, - "parallelized": True, - "n_cpu": None, - "tile_spatial": 1, - "max_chunk_size": 128, - "chunk_by_rows": True, - "out_group": None, - "ga_group": None, - "generate_sweep": False, - "monitoring_directory": None, - "workspace_geoh5": None, - "run_command": "geoapps.inversion.driver", - "conda_environment": "geoapps", - "distributed_workers": None, -} -default_ui_json = { - "title": "Magnetic Vector (MVI) Inversion", - "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html", - "icon": "surveyairbornegravity", - "inversion_type": "magnetic vector", - "inducing_field_strength": { - "min": 0.1, - "max": 100000.0, - "precision": 2, - "lineEdit": False, - "main": True, - "group": "Inducing Field", - "label": "Strength (nT)", - "value": 50000.0, - }, - "inducing_field_inclination": { - "min": -90.0, - "max": 90.0, - "precision": 2, - "lineEdit": False, - "main": True, - "group": "Inducing Field", - "label": "Inclination (deg)", - "value": 90.0, - }, - "inducing_field_declination": { - "min": -180.0, - "max": 180.0, - "precision": 2, - "lineEdit": False, - "main": True, - "group": "Inducing Field", - "label": "Declination (deg)", - "value": 0.0, - }, - "data_object": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{48F5054A-1C5C-4CA4-9048-80F36DC60A06}", - "{b020a277-90e2-4cd7-84d6-612ee3f25051}", - "{4b99204c-d133-4579-a916-a9c8b98cfccb}", - "{028e4905-cc97-4dab-b1bf-d76f58b501b5}", - ], - "value": None, - }, - "tmi_channel_bool": { - "group": "Data", - "main": True, - "label": "TMI (nT)", - "value": False, - }, - "tmi_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "TMI (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "tmi_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "tmi_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bxx_channel_bool": { - "group": "Data", - "main": True, - "label": "Bxx (nT/m)", - "value": False, - }, - "bxx_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bxx (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bxx_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bxx_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bxy_channel_bool": { - "group": "Data", - "main": True, - "label": "Bxy (nT/m)", - "value": False, - }, - "bxy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bxy (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bxy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bxy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bxz_channel_bool": { - "group": "Data", - "main": True, - "label": "Bxz (nT/m)", - "value": False, - }, - "bxz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bxz (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bxz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bxz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "byy_channel_bool": { - "group": "Data", - "main": True, - "label": "Byy (nT/m)", - "value": False, - }, - "byy_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Byy (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "byy_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "byy_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "byz_channel_bool": { - "group": "Data", - "main": True, - "label": "Byz (nT/m)", - "value": False, - }, - "byz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Byz (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "byz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "byz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bzz_channel_bool": { - "group": "Data", - "main": True, - "label": "Bzz (nT/m)", - "value": False, - }, - "bzz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bzz (nT/m)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bzz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bzz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bx_channel_bool": { - "group": "Data", - "main": True, - "label": "Bx (nT)", - "value": False, - }, - "bx_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bx (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bx_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bx_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "by_channel_bool": { - "group": "Data", - "main": True, - "label": "By (nT)", - "value": False, - }, - "by_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "By (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "by_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "by_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "bz_channel_bool": { - "group": "Data", - "main": True, - "label": "Bz (nT)", - "value": False, - }, - "bz_channel": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "label": "Bz (nT)", - "parent": "data_object", - "optional": True, - "enabled": False, - "value": None, - }, - "bz_uncertainty": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Data", - "main": True, - "isValue": True, - "label": "Uncertainty", - "parent": "data_object", - "dependency": "bz_channel", - "dependencyType": "enabled", - "property": None, - "value": 1.0, - }, - "starting_model": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "parent": "mesh", - "label": "Initial susceptibility (SI)", - "property": None, - "value": 1e-4, - }, - "starting_inclination": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "optional": True, - "enabled": False, - "parent": "mesh", - "label": "Initial inclination (deg)", - "property": None, - "value": 0.0, - }, - "starting_inclination_object": { - "group": "Mesh and models", - "main": True, - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{48F5054A-1C5C-4CA4-9048-80F36DC60A06}", - "{b020a277-90e2-4cd7-84d6-612ee3f25051}", - "{4ea87376-3ece-438b-bf12-3479733ded46}", - ], - "optional": True, - "enabled": False, - "label": "Object", - "value": None, - }, - "starting_declination": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "optional": True, - "enabled": False, - "parent": "mesh", - "label": "Initial declination (deg)", - "property": None, - "value": 0.0, - }, - "reference_model": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": True, - "optional": True, - "enabled": False, - "parent": "mesh", - "label": "Reference susceptibility (SI)", - "property": None, - "value": 0.0, - }, - "reference_inclination": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": False, - "optional": True, - "enabled": False, - "label": "Reference inclination (deg)", - "parent": "mesh", - "property": None, - "value": 0.0, - }, - "reference_declination": { - "association": ["Cell", "Vertex"], - "dataType": "Float", - "group": "Mesh and models", - "main": True, - "isValue": True, - "optional": True, - "enabled": False, - "label": "Reference declination (deg)", - "parent": "mesh", - "property": None, - "value": 0.0, - }, - "lower_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": False, - "parent": "mesh", - "label": "Lower bound (SI)", - "property": None, - "optional": True, - "value": 0.0, - "enabled": False, - }, - "upper_bound": { - "association": ["Cell", "Vertex"], - "main": True, - "dataType": "Float", - "group": "Mesh and models", - "isValue": False, - "parent": "mesh", - "label": "Upper bound (SI)", - "property": None, - "optional": True, - "value": 1.0, - "enabled": False, - }, -} -default_ui_json = dict(base_default_ui_json, **default_ui_json) -validations = { - "inversion_type": { - "required": True, - "values": ["magnetic vector"], - }, - "data_object": {"required": True, "types": [str, UUID, Points, Surface, Grid2D]}, - "tmi_channel": {"one_of": "data channel"}, - "tmi_uncertainty": {"one_of": "uncertainty channel"}, - "bxx_channel": {"one_of": "data channel"}, - "bxx_uncertainty": {"one_of": "uncertainty channel"}, - "bxy_channel": {"one_of": "data channel"}, - "bxy_uncertainty": {"one_of": "uncertainty channel"}, - "bxz_channel": {"one_of": "data channel"}, - "bxz_uncertainty": {"one_of": "uncertainty channel"}, - "byy_channel": {"one_of": "data channel"}, - "byy_uncertainty": {"one_of": "uncertainty channel"}, - "byz_channel": {"one_of": "data channel"}, - "byz_uncertainty": {"one_of": "uncertainty channel"}, - "bzz_channel": {"one_of": "data channel"}, - "bzz_uncertainty": {"one_of": "uncertainty channel"}, - "bx_channel": {"one_of": "data channel"}, - "bx_uncertainty": {"one_of": "uncertainty channel"}, - "by_channel": {"one_of": "data channel"}, - "by_uncertainty": {"one_of": "uncertainty channel"}, - "bz_channel": {"one_of": "data channel"}, - "bz_uncertainty": {"one_of": "uncertainty channel"}, -} -validations = dict(base_validations, **validations) app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), "monitoring_directory": str((assets_path() / "Temp").resolve()), "forward_only": False, - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), - "tmi_channel": UUID("{44822654-b6ae-45b0-8886-2d845f80f422}"), + "data_object": UUID("{7aaf00be-adbf-4540-8333-8ac2c2a3c31a}"), + "tmi_channel": UUID("{a342e416-946a-4162-9604-6807ccb06073}"), "tmi_uncertainty": 10.0, "tmi_channel_bool": True, - "mesh": UUID("{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}"), + "mesh": UUID("{f6b08e3b-9a85-45ab-a487-4700e3ca1917}"), "inducing_field_strength": 60000.0, "inducing_field_inclination": 79.0, "inducing_field_declination": 11.0, diff --git a/geoapps/inversion/potential_fields/magnetic_vector/driver.py b/geoapps/inversion/potential_fields/magnetic_vector/driver.py deleted file mode 100644 index be1d09b29..000000000 --- a/geoapps/inversion/potential_fields/magnetic_vector/driver.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from SimPEG import maps - -from geoapps.inversion.driver import InversionDriver - -from .constants import validations -from .params import MagneticVectorParams - - -class MagneticVectorDriver(InversionDriver): - _params_class = MagneticVectorParams - _validations = validations - - def __init__(self, params: MagneticVectorParams): - super().__init__(params) - - @property - def mapping(self) -> list[maps.Projection] | None: - """Model mapping for the inversion.""" - if self._mapping is None: - mapping = [] - start = 0 - for _ in range(3): - mapping.append( - maps.Projection( - self.n_values * 3, slice(start, start + self.n_values) - ) - ) - start += self.n_values - - self._mapping = mapping - - return self._mapping - - @mapping.setter - def mapping(self, value: list[maps.Projection]): - if not isinstance(value, list) or len(value) != 3: - raise TypeError( - "'mapping' must be a list of 3 instances of maps.IdentityMap. " - f"Provided {value}" - ) - - if not all( - isinstance(val, maps.Projection) - and val.shape == (self.n_values, 3 * self.n_values) - for val in value - ): - raise TypeError( - "'mapping' must be an instance of maps.Projection with shape (n_values, 3 * self.n_values). " - f"Provided {value}" - ) - - self._mapping = value diff --git a/geoapps/inversion/potential_fields/magnetic_vector/layout.py b/geoapps/inversion/potential_fields/magnetic_vector/layout.py index 75795f07a..1b04e5573 100644 --- a/geoapps/inversion/potential_fields/magnetic_vector/layout.py +++ b/geoapps/inversion/potential_fields/magnetic_vector/layout.py @@ -1,14 +1,17 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from dash import html import geoapps.inversion.base_inversion_layout as base_layout + component_list = [ "tmi", "bx", diff --git a/geoapps/inversion/potential_fields/magnetic_vector/params.py b/geoapps/inversion/potential_fields/magnetic_vector/params.py deleted file mode 100644 index 22364bd52..000000000 --- a/geoapps/inversion/potential_fields/magnetic_vector/params.py +++ /dev/null @@ -1,392 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoapps.inversion import InversionBaseParams - -from .constants import ( - default_ui_json, - forward_defaults, - inversion_defaults, - validations, -) - - -class MagneticVectorParams(InversionBaseParams): - """ - Parameter class for magnetics->vector magnetization inversion. - """ - - _physical_property = "magnetization" - - def __init__(self, input_file=None, forward_only=False, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._forward_defaults = deepcopy(forward_defaults) - self._inversion_defaults = deepcopy(inversion_defaults) - self._inversion_type = "magnetic vector" - self._validations = validations - self._inducing_field_strength: float = None - self._inducing_field_inclination: float = None - self._inducing_field_declination: float = None - self._tmi_channel_bool = None - self._tmi_channel = None - self._tmi_uncertainty = None - self._bxx_channel_bool = None - self._bxx_channel = None - self._bxx_uncertainty = None - self._bxy_channel_bool = None - self._bxy_channel = None - self._bxy_uncertainty = None - self._bxz_channel_bool = None - self._bxz_channel = None - self._bxz_uncertainty = None - self._byy_channel_bool = None - self._byy_channel = None - self._byy_uncertainty = None - self._byz_channel_bool = None - self._byz_channel = None - self._byz_uncertainty = None - self._bzz_channel_bool = None - self._bzz_channel = None - self._bzz_uncertainty = None - self._bx_channel_bool = None - self._bx_channel = None - self._bx_uncertainty = None - self._by_channel_bool = None - self._by_channel = None - self._by_uncertainty = None - self._bz_channel_bool = None - self._bz_channel = None - self._bz_uncertainty = None - self._starting_inclination = None - self._starting_declination = None - self._reference_inclination = None - self._reference_declination = None - - super().__init__(input_file=input_file, forward_only=forward_only, **kwargs) - - def components(self) -> list[str]: - comps = super().components() - if self.forward_only: - if len(comps) == 0: - comps = ["tmi"] - return comps - - def inducing_field_aid(self) -> list[float]: - """Returns inducing field components as a list.""" - return [ - self.inducing_field_strength, - self.inducing_field_inclination, - self.inducing_field_declination, - ] - - @property - def inversion_type(self): - return self._inversion_type - - @inversion_type.setter - def inversion_type(self, val): - self.setter_validator("inversion_type", val) - - @property - def inducing_field_strength(self): - return self._inducing_field_strength - - @inducing_field_strength.setter - def inducing_field_strength(self, val): - self.setter_validator("inducing_field_strength", val) - - @property - def inducing_field_inclination(self): - return self._inducing_field_inclination - - @inducing_field_inclination.setter - def inducing_field_inclination(self, val): - self.setter_validator("inducing_field_inclination", val) - - @property - def inducing_field_declination(self): - return self._inducing_field_declination - - @inducing_field_declination.setter - def inducing_field_declination(self, val): - self.setter_validator("inducing_field_declination", val) - - @property - def tmi_channel_bool(self): - return self._tmi_channel_bool - - @tmi_channel_bool.setter - def tmi_channel_bool(self, val): - self.setter_validator("tmi_channel_bool", val) - - @property - def tmi_channel(self): - return self._tmi_channel - - @tmi_channel.setter - def tmi_channel(self, val): - self.setter_validator("tmi_channel", val, fun=self._uuid_promoter) - - @property - def tmi_uncertainty(self): - return self._tmi_uncertainty - - @tmi_uncertainty.setter - def tmi_uncertainty(self, val): - self.setter_validator("tmi_uncertainty", val, fun=self._uuid_promoter) - - @property - def bxx_channel_bool(self): - return self._bxx_channel_bool - - @bxx_channel_bool.setter - def bxx_channel_bool(self, val): - self.setter_validator("bxx_channel_bool", val) - - @property - def bxx_channel(self): - return self._bxx_channel - - @bxx_channel.setter - def bxx_channel(self, val): - self.setter_validator("bxx_channel", val, fun=self._uuid_promoter) - - @property - def bxx_uncertainty(self): - return self._bxx_uncertainty - - @bxx_uncertainty.setter - def bxx_uncertainty(self, val): - self.setter_validator("bxx_uncertainty", val, fun=self._uuid_promoter) - - @property - def bxy_channel_bool(self): - return self._bxy_channel_bool - - @bxy_channel_bool.setter - def bxy_channel_bool(self, val): - self.setter_validator("bxy_channel_bool", val) - - @property - def bxy_channel(self): - return self._bxy_channel - - @bxy_channel.setter - def bxy_channel(self, val): - self.setter_validator("bxy_channel", val, fun=self._uuid_promoter) - - @property - def bxy_uncertainty(self): - return self._bxy_uncertainty - - @bxy_uncertainty.setter - def bxy_uncertainty(self, val): - self.setter_validator("bxy_uncertainty", val, fun=self._uuid_promoter) - - @property - def bxz_channel_bool(self): - return self._bxz_channel_bool - - @bxz_channel_bool.setter - def bxz_channel_bool(self, val): - self.setter_validator("bxz_channel_bool", val) - - @property - def bxz_channel(self): - return self._bxz_channel - - @bxz_channel.setter - def bxz_channel(self, val): - self.setter_validator("bxz_channel", val, fun=self._uuid_promoter) - - @property - def bxz_uncertainty(self): - return self._bxz_uncertainty - - @bxz_uncertainty.setter - def bxz_uncertainty(self, val): - self.setter_validator("bxz_uncertainty", val, fun=self._uuid_promoter) - - @property - def byy_channel_bool(self): - return self._byy_channel_bool - - @byy_channel_bool.setter - def byy_channel_bool(self, val): - self.setter_validator("byy_channel_bool", val) - - @property - def byy_channel(self): - return self._byy_channel - - @byy_channel.setter - def byy_channel(self, val): - self.setter_validator("byy_channel", val, fun=self._uuid_promoter) - - @property - def byy_uncertainty(self): - return self._byy_uncertainty - - @byy_uncertainty.setter - def byy_uncertainty(self, val): - self.setter_validator("byy_uncertainty", val, fun=self._uuid_promoter) - - @property - def byz_channel_bool(self): - return self._byz_channel_bool - - @byz_channel_bool.setter - def byz_channel_bool(self, val): - self.setter_validator("byz_channel_bool", val) - - @property - def byz_channel(self): - return self._byz_channel - - @byz_channel.setter - def byz_channel(self, val): - self.setter_validator("byz_channel", val, fun=self._uuid_promoter) - - @property - def byz_uncertainty(self): - return self._byz_uncertainty - - @byz_uncertainty.setter - def byz_uncertainty(self, val): - self.setter_validator("byz_uncertainty", val, fun=self._uuid_promoter) - - @property - def bzz_channel_bool(self): - return self._bzz_channel_bool - - @bzz_channel_bool.setter - def bzz_channel_bool(self, val): - self.setter_validator("bzz_channel_bool", val) - - @property - def bzz_channel(self): - return self._bzz_channel - - @bzz_channel.setter - def bzz_channel(self, val): - self.setter_validator("bzz_channel", val, fun=self._uuid_promoter) - - @property - def bzz_uncertainty(self): - return self._bzz_uncertainty - - @bzz_uncertainty.setter - def bzz_uncertainty(self, val): - self.setter_validator("bzz_uncertainty", val, fun=self._uuid_promoter) - - @property - def bx_channel_bool(self): - return self._bx_channel_bool - - @bx_channel_bool.setter - def bx_channel_bool(self, val): - self.setter_validator("bx_channel_bool", val) - - @property - def bx_channel(self): - return self._bx_channel - - @bx_channel.setter - def bx_channel(self, val): - self.setter_validator("bx_channel", val, fun=self._uuid_promoter) - - @property - def bx_uncertainty(self): - return self._bx_uncertainty - - @bx_uncertainty.setter - def bx_uncertainty(self, val): - self.setter_validator("bx_uncertainty", val, fun=self._uuid_promoter) - - @property - def by_channel_bool(self): - return self._by_channel_bool - - @by_channel_bool.setter - def by_channel_bool(self, val): - self.setter_validator("by_channel_bool", val) - - @property - def by_channel(self): - return self._by_channel - - @by_channel.setter - def by_channel(self, val): - self.setter_validator("by_channel", val, fun=self._uuid_promoter) - - @property - def by_uncertainty(self): - return self._by_uncertainty - - @by_uncertainty.setter - def by_uncertainty(self, val): - self.setter_validator("by_uncertainty", val, fun=self._uuid_promoter) - - @property - def bz_channel_bool(self): - return self._bz_channel_bool - - @bz_channel_bool.setter - def bz_channel_bool(self, val): - self.setter_validator("bz_channel_bool", val) - - @property - def bz_channel(self): - return self._bz_channel - - @bz_channel.setter - def bz_channel(self, val): - self.setter_validator("bz_channel", val, fun=self._uuid_promoter) - - @property - def bz_uncertainty(self): - return self._bz_uncertainty - - @bz_uncertainty.setter - def bz_uncertainty(self, val): - self.setter_validator("bz_uncertainty", val, fun=self._uuid_promoter) - - @property - def starting_inclination(self): - return self._starting_inclination - - @starting_inclination.setter - def starting_inclination(self, val): - self.setter_validator("starting_inclination", val, fun=self._uuid_promoter) - - @property - def starting_declination(self): - return self._starting_declination - - @starting_declination.setter - def starting_declination(self, val): - self.setter_validator("starting_declination", val, fun=self._uuid_promoter) - - @property - def reference_inclination(self): - return self._reference_inclination - - @reference_inclination.setter - def reference_inclination(self, val): - self.setter_validator("reference_inclination", val, fun=self._uuid_promoter) - - @property - def reference_declination(self): - return self._reference_declination - - @reference_declination.setter - def reference_declination(self, val): - self.setter_validator("reference_declination", val, fun=self._uuid_promoter) diff --git a/geoapps/inversion/utils.py b/geoapps/inversion/utils.py index a8c63a7d5..bde4c83ad 100644 --- a/geoapps/inversion/utils.py +++ b/geoapps/inversion/utils.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -12,12 +14,12 @@ import numpy as np from discretize import TreeMesh from scipy.spatial import ConvexHull, cKDTree -from SimPEG.electromagnetics.frequency_domain.sources import ( +from simpeg.electromagnetics.frequency_domain.sources import ( LineCurrent as FEMLineCurrent, ) -from SimPEG.electromagnetics.time_domain.sources import LineCurrent as TEMLineCurrent -from SimPEG.survey import BaseSurvey -from SimPEG.utils import mkvc +from simpeg.electromagnetics.time_domain.sources import LineCurrent as TEMLineCurrent +from simpeg.survey import BaseSurvey +from simpeg.utils import mkvc from geoapps.utils.surveys import get_intersecting_cells, get_unique_locations @@ -60,8 +62,7 @@ def calculate_2D_trend( """ if not isinstance(order, int) or order < 0: raise ValueError( - "Polynomial 'order' should be an integer > 0. " - f"Value of {order} provided." + f"Polynomial 'order' should be an integer > 0. Value of {order} provided." ) ind_nan = ~np.isnan(values) @@ -75,7 +76,7 @@ def calculate_2D_trend( values = values[hull.vertices] elif not method == "all": raise ValueError( - "'method' must be either 'all', or 'perimeter'. " f"Value {method} provided" + f"'method' must be either 'all', or 'perimeter'. Value {method} provided" ) # Compute center of mass @@ -84,7 +85,7 @@ def calculate_2D_trend( polynomial = [] xx, yy = np.triu_indices(order + 1) - for x, y in zip(xx, yy): + for x, y in zip(xx, yy, strict=False): polynomial.append( (loc_xy[:, 0] - center_x) ** float(x) * (loc_xy[:, 1] - center_y) ** float(y - x) @@ -99,7 +100,7 @@ def calculate_2D_trend( params, _, _, _ = np.linalg.lstsq(polynomial, values, rcond=None) data_trend = np.zeros(points.shape[0]) - for count, (x, y) in enumerate(zip(xx, yy)): + for count, (x, y) in enumerate(zip(xx, yy, strict=False)): data_trend += ( params[count] * (points[:, 0] - center_x) ** float(x) @@ -214,15 +215,13 @@ def tile_locations( if method == "kmeans": # Best for smaller problems - - np.random.seed(0) # Cluster # TODO turn off filter once sklearn has dealt with the issue causing the warning with warnings.catch_warnings(): warnings.simplefilter("ignore", category=UserWarning) from sklearn.cluster import KMeans - cluster = KMeans(n_clusters=n_tiles, n_init="auto") + cluster = KMeans(n_clusters=n_tiles, random_state=0, n_init="auto") cluster.fit_predict(locations[:, :2]) labels = cluster.labels_ diff --git a/geoapps/iso_surfaces/__init__.py b/geoapps/iso_surfaces/__init__.py index da3a0cc0c..0cb4baa89 100644 --- a/geoapps/iso_surfaces/__init__.py +++ b/geoapps/iso_surfaces/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/iso_surfaces/application.py b/geoapps/iso_surfaces/application.py index a28493dbd..07267ed09 100644 --- a/geoapps/iso_surfaces/application.py +++ b/geoapps/iso_surfaces/application.py @@ -1,16 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations +import uuid from pathlib import Path from time import time from geoh5py.shared import Entity +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import uuid2entity from geoh5py.ui_json import InputFile @@ -21,6 +25,7 @@ from geoapps.iso_surfaces.params import IsoSurfacesParams from geoapps.utils.importing import warn_module_not_found + with warn_module_not_found(): from ipywidgets import FloatText, HBox, Label, Text, VBox, Widget @@ -38,9 +43,17 @@ class IsoSurface(ObjectDataSelection): def __init__(self, ui_json=None, **kwargs): app_initializer.update(kwargs) if ui_json is not None and Path(ui_json).is_file(): - self.params = self._param_class(InputFile(ui_json)) + self.params = self._param_class(input_file=InputFile(ui_json=ui_json)) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) for key, value in self.params.to_dict().items(): if isinstance(value, Entity): diff --git a/geoapps/iso_surfaces/constants.py b/geoapps/iso_surfaces/constants.py index 893fbc696..daec18aa7 100644 --- a/geoapps/iso_surfaces/constants.py +++ b/geoapps/iso_surfaces/constants.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -15,6 +17,7 @@ import geoapps from geoapps import assets_path + defaults = { "version": geoapps.__version__, "title": "Create Iso Surfaces", diff --git a/geoapps/iso_surfaces/driver.py b/geoapps/iso_surfaces/driver.py index 1821843a2..bd82c4b23 100644 --- a/geoapps/iso_surfaces/driver.py +++ b/geoapps/iso_surfaces/driver.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -12,6 +13,7 @@ import warnings import numpy as np +from geoapps_utils.driver.driver import BaseDriver from geoh5py.groups import ContainerGroup from geoh5py.objects import BlockModel, ObjectBase, Surface from geoh5py.shared.utils import fetch_active_workspace @@ -19,7 +21,6 @@ from skimage.measure import marching_cubes from tqdm import tqdm -from geoapps.driver_base.driver import BaseDriver from geoapps.iso_surfaces.constants import validations from geoapps.iso_surfaces.params import IsoSurfacesParams from geoapps.shared_utils.utils import get_contours, rotate_xyz, weighted_average @@ -60,7 +61,7 @@ def run(self): container = ContainerGroup.create(self.params.geoh5, name="Isosurface") result = [] - for surface, level in zip(surfaces, levels): + for surface, level in zip(surfaces, levels, strict=False): if len(surface[0]) > 0 and len(surface[1]) > 0: result += [ Surface.create( @@ -73,7 +74,7 @@ def run(self): ] self.update_monitoring_directory(container) - print("Isosurface completed. " f"-> {len(surfaces)} surface(s) created.") + print(f"Isosurface completed. -> {len(surfaces)} surface(s) created.") return result @@ -175,8 +176,8 @@ def iso_surface( active[nan_verts] = nan_verts.shape[0] _, inv_map = np.unique(active, return_inverse=True) - verts = verts[nan_verts == False, :] - faces = faces[rem_cells == False, :] + verts = verts[~nan_verts, :] + faces = faces[~rem_cells, :] faces = inv_map[faces].astype("uint32") vertices = [] diff --git a/geoapps/iso_surfaces/params.py b/geoapps/iso_surfaces/params.py index c5c2abe69..c6e1f3ce6 100644 --- a/geoapps/iso_surfaces/params.py +++ b/geoapps/iso_surfaces/params.py @@ -1,18 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from geoapps_utils.driver.params import BaseParams from geoh5py.data import Data from geoh5py.objects import ObjectBase -from geoapps.driver_base.params import BaseParams from geoapps.iso_surfaces.constants import default_ui_json, defaults, validations diff --git a/geoapps/octree_creation/__init__.py b/geoapps/octree_creation/__init__.py index 40deb3c13..2188e64b8 100644 --- a/geoapps/octree_creation/__init__.py +++ b/geoapps/octree_creation/__init__.py @@ -1,11 +1,14 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations from .constants import app_initializer -from .params import OctreeParams diff --git a/geoapps/octree_creation/application.py b/geoapps/octree_creation/application.py index 6c0ee4ff7..bf65ed108 100644 --- a/geoapps/octree_creation/application.py +++ b/geoapps/octree_creation/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=E0401 @@ -17,17 +19,19 @@ from geoh5py.objects import Curve, ObjectBase, Octree, Points, Surface from geoh5py.shared import Entity +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.shared.utils import fetch_active_workspace from geoh5py.ui_json import InputFile from geoh5py.workspace import Workspace +from octree_creation_app.driver import OctreeDriver +from octree_creation_app.params import OctreeParams from geoapps.base.application import BaseApplication from geoapps.base.selection import ObjectDataSelection from geoapps.octree_creation.constants import app_initializer -from geoapps.octree_creation.driver import OctreeDriver -from geoapps.octree_creation.params import OctreeParams from geoapps.utils import warn_module_not_found + with warn_module_not_found(): from ipywidgets import ( Checkbox, @@ -62,9 +66,17 @@ class OctreeMesh(ObjectDataSelection): def __init__(self, ui_json=None, **kwargs): app_initializer.update(kwargs) if ui_json is not None and Path(ui_json).is_file(): - self.params = self._param_class(InputFile(ui_json)) + self.params = self._param_class(input_file=InputFile(ui_json=ui_json)) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) for key, value in self.params.to_dict().items(): if isinstance(value, Entity): @@ -231,12 +243,11 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) self.update_objects_choices() - self.params.geoh5 = workspace def update_objects_choices(self): # Refresh the list of objects for all @@ -334,15 +345,9 @@ def add_refinement_widget(self, label: str): attr_name, Text(description=key.capitalize(), value=value), ) - elif "type" in key: + elif "horizon" in key: setattr( - self, - attr_name, - Dropdown( - description=key.capitalize(), - options=["surface", "radial"], - value=value, - ), + self, attr_name, Checkbox(description=key.capitalize(), value=value) ) elif "distance" in key: setattr( diff --git a/geoapps/octree_creation/constants.py b/geoapps/octree_creation/constants.py index 027c9e7b9..3988d4418 100644 --- a/geoapps/octree_creation/constants.py +++ b/geoapps/octree_creation/constants.py @@ -1,176 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -from copy import deepcopy from uuid import UUID -from geoh5py.ui_json.constants import default_ui_json as base_ui_json - -import geoapps from geoapps import assets_path -defaults = { - "version": geoapps.__version__, - "title": "octree Mesh Creator", - "geoh5": None, - "objects": None, - "u_cell_size": 25.0, - "v_cell_size": 25.0, - "w_cell_size": 25.0, - "horizontal_padding": 1000.0, - "vertical_padding": 1000.0, - "depth_core": 500.0, - "ga_group_name": "Octree_Mesh", - "generate_sweep": False, - "run_command": "geoapps.octree_creation.driver", - "monitoring_directory": None, - "workspace_geoh5": None, - "conda_environment": "geoapps", - "conda_environment_boolean": False, -} - -default_ui_json = deepcopy(base_ui_json) -default_ui_json.update( - { - "version": geoapps.__version__, - "title": "octree Mesh Creator", - "geoh5": None, - "objects": { - "enabled": True, - "group": "1- Core", - "label": "Core hull extent", - "main": True, - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{b99bd6e5-4fe1-45a5-bd2f-75fc31f91b38}", - "{0b639533-f35b-44d8-92a8-f70ecff3fd26}", - "{9b08bb5a-300c-48fe-9007-d206f971ea92}", - "{19730589-fd28-4649-9de0-ad47249d9aba}", - ], - "value": None, - }, - "u_cell_size": { - "enabled": True, - "group": "2- Core cell size", - "label": "Easting (m)", - "main": True, - "value": 25.0, - }, - "v_cell_size": { - "enabled": True, - "group": "2- Core cell size", - "label": "Northing (m)", - "main": True, - "value": 25.0, - }, - "w_cell_size": { - "enabled": True, - "group": "2- Core cell size", - "label": "Vertical (m)", - "main": True, - "value": 25.0, - }, - "horizontal_padding": { - "enabled": True, - "group": "3- Padding distance", - "label": "Horizontal (m)", - "main": True, - "value": 1000.0, - }, - "vertical_padding": { - "enabled": True, - "group": "3- Padding distance", - "label": "Vertical (m)", - "main": True, - "value": 1000.0, - }, - "depth_core": { - "enabled": True, - "group": "1- Core", - "label": "Minimum Depth (m)", - "main": True, - "value": 500.0, - }, - "diagonal_balance": { - "group": "Basic", - "label": "UBC Compatible", - "main": True, - "value": True, - }, - "minimum_level": { - "enabled": True, - "group": "Basic", - "label": "Minimum refinement level.", - "main": True, - "min": 1, - "tooltip": "Minimum refinement in padding region: 2**(n-1) x base_cell.", - "value": 4, - }, - "ga_group_name": { - "enabled": True, - "group": None, - "label": "Name:", - "value": "Octree_Mesh", - }, - "generate_sweep": { - "label": "Generate sweep file", - "group": "Python run preferences", - "main": True, - "value": False, - }, - "conda_environment": "geoapps", - "workspace_geoh5": None, - "run_command": "geoapps.octree_creation.driver", - } -) - -template_dict = { - "object": { - "groupOptional": True, - "enabled": False, - "group": "Refinement A", - "label": "Object", - "meshType": [ - "{202C5DB1-A56D-4004-9CAD-BAAFD8899406}", - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - "{F26FEBA3-ADED-494B-B9E9-B2BBCBE298E1}", - "{b99bd6e5-4fe1-45a5-bd2f-75fc31f91b38}", - "{0b639533-f35b-44d8-92a8-f70ecff3fd26}", - "{9b08bb5a-300c-48fe-9007-d206f971ea92}", - "{19730589-fd28-4649-9de0-ad47249d9aba}", - ], - "value": None, - }, - "levels": { - "enabled": False, - "group": "Refinement A", - "label": "Levels", - "value": "4, 4, 4", - }, - "type": { - "choiceList": ["surface", "radial"], - "enabled": False, - "group": "Refinement A", - "label": "Type", - "value": "radial", - }, - "distance": { - "enabled": False, - "group": "Refinement A", - "label": "Distance", - "value": 1000.0, - }, -} - -validations = {} app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), diff --git a/geoapps/octree_creation/driver.py b/geoapps/octree_creation/driver.py deleted file mode 100644 index eb8aa62ad..000000000 --- a/geoapps/octree_creation/driver.py +++ /dev/null @@ -1,336 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -import sys - -import numpy as np -from discretize import TreeMesh -from discretize.utils import mesh_builder_xyz -from geoh5py.objects import Curve, ObjectBase, Octree, Surface -from geoh5py.shared.utils import fetch_active_workspace -from geoh5py.ui_json import utils -from scipy import interpolate -from scipy.spatial import Delaunay, cKDTree - -from geoapps.driver_base.driver import BaseDriver -from geoapps.driver_base.utils import treemesh_2_octree -from geoapps.octree_creation.constants import validations -from geoapps.octree_creation.params import OctreeParams -from geoapps.shared_utils.utils import densify_curve, get_locations - - -class OctreeDriver(BaseDriver): - _params_class = OctreeParams - _validations = validations - - def __init__(self, params: OctreeParams): - super().__init__(params) - self.params: OctreeParams = params - - def run(self) -> Octree: - """ - Create an octree mesh from input values - """ - with fetch_active_workspace(self.params.geoh5, mode="r+"): - octree = self.octree_from_params(self.params) - self.update_monitoring_directory(octree) - - return octree - - @staticmethod - def minimum_level(mesh: TreeMesh, level: int): - """Computes the minimum level of refinement for a given tree mesh.""" - return max([1, mesh.max_level - level + 1]) - - @staticmethod - def octree_from_params(params: OctreeParams): - print("Setting the mesh extent") - entity = params.objects - mesh: TreeMesh = mesh_builder_xyz( - entity.vertices, - [ - params.u_cell_size, - params.v_cell_size, - params.w_cell_size, - ], - padding_distance=params.get_padding(), - mesh_type="tree", - depth_core=params.depth_core, - ) - minimum_level = OctreeDriver.minimum_level(mesh, params.minimum_level) - mesh.refine( - minimum_level, finalize=False, diagonal_balance=params.diagonal_balance - ) - - for label, value in params.free_parameter_dict.items(): - refinement_object = getattr(params, value["object"]) - levels = utils.str2list(getattr(params, value["levels"])) - if not isinstance(refinement_object, ObjectBase): - continue - - print(f"Applying {label} on: {getattr(params, value['object']).name}") - - if isinstance(refinement_object, Curve): - mesh = OctreeDriver.refine_tree_from_curve( - mesh, refinement_object, levels, params.diagonal_balance - ) - - elif isinstance(refinement_object, Surface): - mesh = OctreeDriver.refine_tree_from_triangulation( - mesh, refinement_object, levels, params.diagonal_balance - ) - - elif getattr(params, value["type"]) == "surface": - mesh = OctreeDriver.refine_tree_from_surface( - mesh, - refinement_object, - levels, - params.diagonal_balance, - max_distance=getattr(params, value["distance"]), - ) - - elif getattr(params, value["type"]) == "radial": - mesh = OctreeDriver.refine_tree_from_points( - mesh, - refinement_object, - levels, - diagonal_balance=params.diagonal_balance, - ) - - else: - raise NotImplementedError( - f"Refinement type {value['type']} is not implemented." - ) - - print("Finalizing . . .") - mesh.finalize() - octree = treemesh_2_octree(params.geoh5, mesh, name=params.ga_group_name) - - return octree - - @staticmethod - def refine_tree_from_curve( - mesh: TreeMesh, - curve: Curve, - levels: list[int] | np.ndarray, - diagonal_balance: bool = True, - finalize: bool = False, - ) -> TreeMesh: - """ - Refine a tree mesh along the segments of a curve densified by the - mesh cell size. - - :param mesh: Tree mesh to refine. - :param curve: Curve object to use for refinement. - :param levels: Number of cells requested at each refinement level. - Defined in reversed order from the highest octree to lowest. - :param diagonal_balance: Whether to balance cells along the diagonal of the tree during construction. - :param finalize: Finalize the tree mesh after refinement. - - """ - if not isinstance(curve, Curve): - raise TypeError("Refinement object must be a Curve.") - - if isinstance(levels, list): - levels = np.array(levels) - - locations = densify_curve(curve, mesh.h[0][0]) - mesh = OctreeDriver.refine_tree_from_points( - mesh, locations, levels, diagonal_balance=diagonal_balance, finalize=False - ) - - if finalize: - mesh.finalize() - - return mesh - - @staticmethod - def refine_tree_from_points( - mesh: TreeMesh, - points: ObjectBase | np.ndarray, - levels: list[int] | np.ndarray, - diagonal_balance: bool = True, - finalize: bool = False, - ) -> TreeMesh: - """ - Refine a tree mesh along the vertices of an object. - - :param mesh: Tree mesh to refine. - :param points: Object to use for refinement. - :param levels: Number of cells requested at each refinement level. - Defined in reversed order from the highest octree to lowest. - :param diagonal_balance: Whether to balance cells along the diagonal of the tree during construction. - :param finalize: Finalize the tree mesh after refinement. - - :return: Refined tree mesh. - """ - if isinstance(points, ObjectBase): - locations = get_locations(points.workspace, points) - else: - locations = points - - if locations is None: - raise ValueError("Could not find locations for refinement.") - - if isinstance(levels, list): - levels = np.array(levels) - - distance = 0 - for ii, n_cells in enumerate(levels): - distance += n_cells * OctreeDriver.cell_size_from_level(mesh, ii) - mesh.refine_ball( - locations, - distance, - mesh.max_level - ii, - diagonal_balance=diagonal_balance, - finalize=False, - ) - - if finalize: - mesh.finalize() - - return mesh - - @staticmethod - def refine_tree_from_surface( - mesh: TreeMesh, - surface: ObjectBase, - levels: list[int] | np.ndarray, - diagonal_balance: bool = True, - max_distance: float = np.inf, - finalize: bool = False, - ) -> TreeMesh: - """ - Refine a tree mesh along the simplicies of a surface. - - :param mesh: Tree mesh to refine. - :param surface: Surface object to use for refinement. - :param levels: Number of cells requested at each refinement level. - Defined in reversed order from the highest octree to lowest. - :param max_distance: Maximum distance from the surface to refine. - :param diagonal_balance: Whether to balance cells along the diagonal of the tree during construction. - :param finalize: Finalize the tree mesh after refinement. - - :return: Refined tree mesh. - """ - if isinstance(levels, list): - levels = np.array(levels) - - xyz = get_locations(surface.workspace, surface) - tri2D = Delaunay(xyz[:, :2]) - tree = cKDTree(xyz[:, :2]) - - if isinstance(surface, Surface): - tri2D.simplices = surface.cells - - F = interpolate.LinearNDInterpolator(tri2D, xyz[:, -1]) - levels = np.array(levels) - - depth = 0 - # Cycle through the Tree levels backward - for ind, n_cells in enumerate(levels): - if n_cells == 0: - continue - - dx = OctreeDriver.cell_size_from_level(mesh, ind, 0) - dy = OctreeDriver.cell_size_from_level(mesh, ind, 1) - dz = OctreeDriver.cell_size_from_level(mesh, ind, 2) - - # Create a grid at the octree level in xy - cell_center_x, cell_center_y = np.meshgrid( - np.arange(surface.extent[0, 0], surface.extent[1, 0], dx), - np.arange(surface.extent[0, 1], surface.extent[1, 1], dy), - ) - xy = np.c_[cell_center_x.reshape(-1), cell_center_y.reshape(-1)] - - # Only keep points within triangulation - inside = tri2D.find_simplex(xy) != -1 - r, _ = tree.query(xy) - keeper = np.logical_and(r < max_distance, inside) - nnz = keeper.sum() - elevation = F(xy[keeper]) - - # Apply vertical padding for current octree level - for _ in range(int(n_cells)): - depth += dz - mesh.insert_cells( - np.c_[xy[keeper], elevation - depth], - np.ones(nnz) * mesh.max_level - ind, - diagonal_balance=diagonal_balance, - finalize=False, - ) - - if finalize: - mesh.finalize() - - return mesh - - @staticmethod - def refine_tree_from_triangulation( - mesh: TreeMesh, - surface, - levels: list[int] | np.ndarray, - diagonal_balance: bool = True, - finalize=False, - ) -> TreeMesh: - """ - Refine a tree mesh along the simplicies of a surface. - - :param mesh: Tree mesh to refine. - :param surface: Surface object to use for refinement. - :param levels: Number of cells requested at each refinement level. - Defined in reversed order from highest octree to lowest. - :param diagonal_balance: Whether to balance cells along the diagonal of the tree during construction. - :param finalize: Finalize the tree mesh after refinement. - - :return: Refined tree mesh. - """ - if not isinstance(surface, Surface): - raise TypeError("Refinement object must be a Surface.") - - if isinstance(levels, list): - levels = np.array(levels) - - ind = np.where(np.r_[levels] > 0)[0] - - if any(ind): - paddings = [] - for n_cells in levels[ind[0] :]: - if n_cells == 0: - continue - - paddings.append([n_cells] * 3) - - mesh.refine_surface( - (surface.vertices, surface.cells), - -ind[0] - 1, - paddings, - diagonal_balance=diagonal_balance, - finalize=finalize, - ) - return mesh - - @staticmethod - def cell_size_from_level(octree, level: int, axis: int = 0): - """ - Computes the cell size at a given level of refinement for a given tree mesh. - - :param octree: Tree mesh to refine. - :param level: Level of refinement. - :param axis: Axis of refinement. - - :return: Cell size at the given level of refinement. - """ - return octree.h[axis][0] * 2**level - - -if __name__ == "__main__": - file = sys.argv[1] - OctreeDriver.start(file) diff --git a/geoapps/octree_creation/notebook.ipynb b/geoapps/octree_creation/notebook.ipynb index 97b5827e0..921b665ba 100644 --- a/geoapps/octree_creation/notebook.ipynb +++ b/geoapps/octree_creation/notebook.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13555f4b23e548427ed5d5203cf5a3f9c972313910c13110a22e2b0283651724 -size 2481 +oid sha256:8fb46f79ab18184d354678322e018858d36767ef12efebbe6c08ec95bf6f7cd1 +size 1765 diff --git a/geoapps/octree_creation/params.py b/geoapps/octree_creation/params.py deleted file mode 100644 index 53d844f7e..000000000 --- a/geoapps/octree_creation/params.py +++ /dev/null @@ -1,169 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoh5py.ui_json import InputFile - -from geoapps.driver_base.params import BaseParams - -from .constants import default_ui_json, defaults, template_dict, validations - - -class OctreeParams(BaseParams): - """ - Parameter class for octree mesh creation application. - """ - - def __init__(self, input_file=None, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._defaults = deepcopy(defaults) - self._free_parameter_keys = ["object", "levels", "type", "distance"] - self._free_parameter_identifier = "refinement" - self._validations = validations - self._objects = None - self._u_cell_size = None - self._v_cell_size = None - self._w_cell_size = None - self._diagonal_balance = None - self._minimum_level = None - self._horizontal_padding = None - self._vertical_padding = None - self._depth_core = None - self._ga_group_name = None - self._title = None - - if input_file is None: - free_param_dict = {} - for key in kwargs: - if ( - self._free_parameter_identifier in key.lower() - and "object" in key.lower() - ): - group = key.replace("object", "").rstrip() - free_param_dict[group] = deepcopy(template_dict) - - ui_json = deepcopy(self._default_ui_json) - for group, forms in free_param_dict.items(): - for key, form in forms.items(): - form["group"] = group - ui_json[f"{group} {key}"] = form - self._defaults[f"{group} {key}"] = form["value"] - - input_file = InputFile( - ui_json=ui_json, - validations=self.validations, - validate=False, - ) - - super().__init__(input_file=input_file, **kwargs) - - def get_padding(self) -> list: - """ - Utility to get the padding values as a list of padding along each axis. - """ - return [ - [ - self.horizontal_padding, - self.horizontal_padding, - ], - [ - self.horizontal_padding, - self.horizontal_padding, - ], - [self.vertical_padding, self.vertical_padding], - ] - - @property - def title(self): - return self._title - - @title.setter - def title(self, val): - self.setter_validator("title", val) - - @property - def objects(self): - return self._objects - - @objects.setter - def objects(self, val): - self.setter_validator("objects", val, fun=self._uuid_promoter) - - @property - def u_cell_size(self): - return self._u_cell_size - - @u_cell_size.setter - def u_cell_size(self, val): - self.setter_validator("u_cell_size", val) - - @property - def v_cell_size(self): - return self._v_cell_size - - @v_cell_size.setter - def v_cell_size(self, val): - self.setter_validator("v_cell_size", val) - - @property - def w_cell_size(self): - return self._w_cell_size - - @w_cell_size.setter - def w_cell_size(self, val): - self.setter_validator("w_cell_size", val) - - @property - def horizontal_padding(self): - return self._horizontal_padding - - @horizontal_padding.setter - def horizontal_padding(self, val): - self.setter_validator("horizontal_padding", val) - - @property - def vertical_padding(self): - return self._vertical_padding - - @vertical_padding.setter - def vertical_padding(self, val): - self.setter_validator("vertical_padding", val) - - @property - def depth_core(self): - return self._depth_core - - @depth_core.setter - def depth_core(self, val): - self.setter_validator("depth_core", val) - - @property - def diagonal_balance(self): - return self._diagonal_balance - - @diagonal_balance.setter - def diagonal_balance(self, val): - self.setter_validator("diagonal_balance", val) - - @property - def minimum_level(self): - return self._minimum_level - - @minimum_level.setter - def minimum_level(self, val): - self.setter_validator("minimum_level", val) - - @property - def ga_group_name(self): - return self._ga_group_name - - @ga_group_name.setter - def ga_group_name(self, val): - self.setter_validator("ga_group_name", val) diff --git a/geoapps/peak_finder/__init__.py b/geoapps/peak_finder/__init__.py index 76bebc0f2..a70539a08 100644 --- a/geoapps/peak_finder/__init__.py +++ b/geoapps/peak_finder/__init__.py @@ -1,11 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from .constants import app_initializer -from .params import PeakFinderParams +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/peak_finder/application.py b/geoapps/peak_finder/application.py index 04c86c6fe..dcdb6c30f 100644 --- a/geoapps/peak_finder/application.py +++ b/geoapps/peak_finder/application.py @@ -1,63 +1,29 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations -import sys import uuid -import warnings -from copy import deepcopy from pathlib import Path -from time import time -import numpy as np from geoh5py.data import ReferencedData -from geoh5py.objects import Curve, ObjectBase +from geoh5py.objects import ObjectBase from geoh5py.shared import Entity -from geoh5py.shared.utils import fetch_active_workspace +from geoh5py.shared.exceptions import AssociationValidationError from geoh5py.ui_json import InputFile -from geoh5py.workspace import Workspace +from ipywidgets import Dropdown, VBox +from peak_finder.application import PeakFinder as DashPeakFinder +from peak_finder.dash_application import ObjectSelection +from peak_finder.params import PeakFinderParams -from geoapps.base.application import BaseApplication -from geoapps.base.selection import LineOptions, ObjectDataSelection -from geoapps.peak_finder.constants import ( - app_initializer, - default_ui_json, - template_dict, -) -from geoapps.utils import geophysical_systems, warn_module_not_found - -from . import PeakFinderParams -from .driver import PeakFinderDriver -from .utils import default_groups_from_property_group, find_anomalies - -with warn_module_not_found(): - from matplotlib import pyplot as plt - -with warn_module_not_found(): - from ipywidgets import ( - Box, - Checkbox, - ColorPicker, - Dropdown, - FloatLogSlider, - FloatSlider, - FloatText, - HBox, - IntSlider, - Label, - Layout, - ToggleButton, - ToggleButtons, - VBox, - Widget, - interactive_output, - ) - from ipywidgets.widgets.widget_selection import TraitError +from geoapps.base.selection import ObjectDataSelection +from geoapps.peak_finder.constants import app_initializer class PeakFinder(ObjectDataSelection): @@ -67,48 +33,21 @@ class PeakFinder(ObjectDataSelection): _param_class = PeakFinderParams _add_groups = "only" - _center = None - _flip_sign = None - _group_auto = None - _group_list = None - _group_display = None - _groups_setter = None - _lines = None - _markers = None - _max_migration = None - _min_amplitude = None - _min_channels = None - _min_value = None - _min_width = None - _plot_trigger = None - _residual = None - _scale_button = None - _scale_value = None - _show_decay = None - _smoothing = None - _structural_markers = None - _system = None - _tem_checkbox = None - _width = None - _x_label = None - _object_types = (Curve,) - all_anomalies = [] - active_channels = {} - _survey = None - _channel_groups = {} - pause_refresh = False - decay_figure = None - marker = {"left": "<", "right": ">"} - plot_result = True - def __init__(self, ui_json=None, plot_result=True, **kwargs): - self.figure = None - self.plot_result = plot_result + def __init__(self, ui_json=None, **kwargs): app_initializer.update(kwargs) if ui_json is not None and Path(ui_json).is_file(): - self.params = self._param_class(InputFile(ui_json)) + self.params = self._param_class(input_file=InputFile(ui_json=ui_json)) else: - self.params = self._param_class(**app_initializer) + try: + self.params = self._param_class(**app_initializer) + + except AssociationValidationError: + for key, value in app_initializer.items(): + if isinstance(value, uuid.UUID): + app_initializer[key] = None + + self.params = self._param_class(**app_initializer) for key, value in self.params.to_dict().items(): if isinstance(value, Entity): @@ -116,1258 +55,55 @@ def __init__(self, ui_json=None, plot_result=True, **kwargs): else: self.defaults[key] = value - self.groups_panel = VBox([]) - self.group_auto.observe(self.create_default_groups, names="value") - self.objects.observe(self.objects_change, names="value") - self.groups_widget = HBox([self.group_auto, self.groups_setter]) - self.decay_panel = VBox([self.show_decay]) - self.tem_box = HBox( - [ - self.tem_checkbox, - self.system, - self.decay_panel, - ] - ) - self.data.observe(self.set_data, names="value") - self.system.observe(self.set_data, names="value") - self.previous_line = None - super().__init__(**self.defaults) - self.pause_refresh = False - self.refresh.value = True - self.previous_line = self.lines.lines.value - self.smoothing.observe(self.line_update, names="value") - self.max_migration.observe(self.line_update, names="value") - self.min_channels.observe(self.line_update, names="value") - self.min_amplitude.observe(self.line_update, names="value") - self.min_value.observe(self.line_update, names="value") - self.min_width.observe(self.line_update, names="value") - self.lines.lines.observe(self.line_update, names="value") - self.scale_panel = VBox([self.scale_button, self.scale_value]) - self.plotting = interactive_output( - self.plot_data_selection, - { - "residual": self.residual, - "markers": self.markers, - "scale": self.scale_button, - "scale_value": self.scale_value, - "center": self.center, - "width": self.width, - "plot_trigger": self.plot_trigger, - "refresh": self.refresh, - "x_label": self.x_label, - }, - ) - self.decay = interactive_output( - self.plot_decay_curve, - { - "center": self.center, - "plot_trigger": self.plot_trigger, - }, - ) - self.group_display.observe(self.update_center, names="value") - self.show_decay.observe(self.show_decay_trigger, names="value") - self.tem_checkbox.observe(self.tem_change, names="value") - self.groups_setter.observe(self.groups_trigger) - self.scale_button.observe(self.scale_update) - self.flip_sign.observe(self.set_data, names="value") - self.trigger.description = "Process All Lines" - self.trigger_panel = VBox( - [ - VBox([self.trigger, self.structural_markers, self.ga_group_name]), - self.live_link_panel, - ] - ) - self.ga_group_name.description = "Save As" - self.visual_parameters = VBox( - [ - self.group_display, - self.center, - self.width, - self.x_label, - self.scale_panel, - self.markers, - ] - ) - self.detection_parameters = VBox( - [ - self.smoothing, - self.min_amplitude, - self.min_value, - self.min_width, - self.max_migration, - self.min_channels, - self.residual, - ] - ) - self.output_panel = VBox( - [ - self.trigger_panel, - ] - ) - self.line_update(None) - - def __populate__(self, **kwargs): - super().__populate__(**kwargs) + self.group_a_data = self.data - obj_list = self.workspace.get_entity(self.objects.value) + self.line_field = Dropdown(description="Line", options=[["", None]]) + super().__init__(**self.defaults) - if obj_list[0] is not None and any(self.params.free_parameter_dict): - self._channel_groups = self.params.groups_from_free_params() + self._objects.observe(self.update_line_list, names="value") + self.update_line_list(None) + + self.trigger.description = "Launch Dash App" + self.trigger.on_click(self.trigger_click) + + def update_line_list(self, _): + refresh = self.refresh.value + self.refresh.value = False + if getattr(self, "_workspace", None) is not None: + obj: ObjectBase | None = self._workspace.get_entity(self.objects.value)[0] + if obj is None or getattr(obj, "get_data_list", None) is None: + self.line_field.options = [["", None]] + self.refresh.value = refresh + return + + options = self.get_data_list(False, False) + reference_options = [["", None]] + [ + [name, uid] + for name, uid in options + if isinstance(self._workspace.get_entity(uid)[0], ReferencedData) + ] - group_list = [] - for pg, params in self._channel_groups.items(): - group_list += [self.add_group_widget(pg, params)] - self.groups_panel.children = group_list + self.line_field.options = reference_options else: - if not self.group_auto.value: - self.group_auto.value = True - else: - self.create_default_groups(None) + self.line_field.options = [] @property - def main(self) -> VBox: - if getattr(self, "_main", None) is None: + def main(self): + if self._main is None: self._main = VBox( [ self.project_panel, - HBox( - [ - VBox( - [self.data_panel, self.flip_sign], - layout=Layout(width="50%"), - ), - Box( - children=[self.lines.main], - layout=Layout( - display="flex", - flex_flow="row", - align_items="stretch", - width="100%", - justify_content="flex-start", - ), - ), - ], - ), - self.tem_box, - Label("Groups"), - self.groups_widget, - self.plotting, - HBox( - [ - VBox( - [Label("Visual Parameters"), self.visual_parameters], - layout=Layout(width="50%"), - ), - VBox( - [ - Label("Detection Parameters"), - self.detection_parameters, - ], - layout=Layout(width="50%"), - ), - ] - ), + self.data_panel, + self.line_field, self.output_panel, ] ) return self._main - @property - def center(self) -> FloatSlider: - """ - Adjust the data plot center position along line - """ - if getattr(self, "_center", None) is None: - self._center = FloatSlider( - min=0, - max=5000, - step=1.0, - description="Window Center", - disabled=False, - continuous_update=False, - orientation="horizontal", - ) - return self._center - - @property - def em_system_specs(self) -> dict: - return geophysical_systems.parameters() - - @property - def flip_sign(self) -> ToggleButton: - """ - Apply a sign flip to the selected data - """ - if getattr(self, "_flip_sign", None) is None: - self._flip_sign = ToggleButton( - description="Flip Y (-1x)", button_style="warning" - ) - return self._flip_sign - - @property - def group_auto(self) -> ToggleButton: - """ - Auto-create groups (3) from selected data channels. - """ - if getattr(self, "_group_auto", None) is None: - self._group_auto = ToggleButton( - description="Use/Create Default", value=False - ) - return self._group_auto - - @property - def group_list(self) -> Dropdown: - """ - List of default time data groups - """ - if getattr(self, "_group_list", None) is None: - self._group_list = Dropdown( - description="", - options=[ - "early", - "middle", - "late", - ], - ) - return self._group_list - - @property - def group_display(self) -> Dropdown: - """ - List of groups to chose from for display - """ - if getattr(self, "_group_display", None) is None: - self._group_display = Dropdown(description="Select Peak") - return self._group_display - - @property - def groups_setter(self) -> ToggleButton: - """ - Display the group options panel - """ - if getattr(self, "_groups_setter", None) is None: - self._groups_setter = ToggleButton( - description="Group Settings", value=False - ) - - return self._groups_setter - - @property - def line_field(self) -> Dropdown: - """ - Alias of lines.data widget - """ - return self.lines.data - - @property - def line_id(self) -> Dropdown: - """ - Alias of lines.lines widget - """ - return self.lines.lines - - @property - def lines(self) -> LineOptions: - """ - Line selection defining the profile used for plotting. - """ - if getattr(self, "_lines", None) is None: - self._lines = LineOptions( - workspace=self.workspace, multiple_lines=False, objects=self.objects - ) - - return self._lines - - @property - def markers(self) -> ToggleButton: - """ - Display markers on the data plot - """ - if getattr(self, "_markers", None) is None: - self._markers = ToggleButton(description="Show markers", value=True) - - return self._markers - - @property - def max_migration(self) -> FloatSlider: - """ - Filter anomalies based on maximum horizontal migration of peaks. - """ - if getattr(self, "_max_migration", None) is None: - self._max_migration = FloatSlider( - value=25, - min=1.0, - max=1000.0, - step=1.0, - continuous_update=False, - description="Max Peak Migration", - style={"description_width": "initial"}, - disabled=False, - ) - - return self._max_migration - - @property - def min_amplitude(self) -> IntSlider: - """ - Filter small anomalies based on amplitude ratio - between peaks and lows. - """ - if getattr(self, "_min_amplitude", None) is None: - self._min_amplitude = IntSlider( - value=1, - min=0, - max=100, - continuous_update=False, - description="Minimum amplitude (%)", - style={"description_width": "initial"}, - ) - - return self._min_amplitude - - @property - def min_channels(self) -> IntSlider: - """ - Filter peak groups based on minimum number of data channels overlap. - """ - if getattr(self, "_min_channels", None) is None: - self._min_channels = IntSlider( - value=1, - min=1, - max=10, - continuous_update=False, - description="Minimum # channels", - style={"description_width": "initial"}, - disabled=False, - ) - - return self._min_channels - - @property - def min_value(self) -> FloatText: - """ - Filter out small data values. - """ - if getattr(self, "_min_value", None) is None: - self._min_value = FloatText( - value=0, - continuous_update=False, - description="Minimum data value", - style={"description_width": "initial"}, - ) - - return self._min_value - - @property - def min_width(self) -> FloatSlider: - """ - Filter small anomalies based on width - between lows. - """ - if getattr(self, "_min_width", None) is None: - self._min_width = FloatSlider( - value=100, - min=1.0, - max=1000.0, - step=1.0, - continuous_update=False, - description="Minimum width (m)", - style={"description_width": "initial"}, - ) - - return self._min_width - - @property - def plot_trigger(self) -> ToggleButton: - """ - Trigger refresh of all plots - """ - if getattr(self, "_plot_trigger", None) is None: - self._plot_trigger = ToggleButton( - description="Pick nearest target", value=False - ) - return self._plot_trigger - - @property - def residual(self) -> Checkbox: - """ - Use the residual between the original and smoothed data profile - """ - if getattr(self, "_residual", None) is None: - self._residual = Checkbox(description="Show residual", value=False) - - return self._residual - - @property - def scale_button(self) -> ToggleButtons: - """ - Scale the vertical axis of the data plot - """ - if getattr(self, "_scale_button", None) is None: - self._scale_button = ToggleButtons( - options=[ - "linear", - "symlog", - ], - value="symlog", - description="Y-axis scaling", - ) - - return self._scale_button - - @property - def scale_value(self) -> FloatLogSlider: - """ - Threshold value used by th symlog scaling - """ - if getattr(self, "_scale_value", None) is None: - self._scale_value = FloatLogSlider( - min=-18, - max=10, - step=0.1, - base=10, - value=1e-2, - description="Linear threshold", - continuous_update=False, - style={"description_width": "initial"}, - ) - - return self._scale_value - - @property - def show_decay(self) -> ToggleButton: - """ - Display the decay curve plot - """ - if getattr(self, "_show_decay", None) is None: - self._show_decay = ToggleButton(description="Show decay", value=False) - - return self._show_decay - - @property - def smoothing(self) -> IntSlider: - """ - Number of neighboring data points used for the running mean smoothing - """ - if getattr(self, "_smoothing", None) is None: - self._smoothing = IntSlider( - min=0, - max=64, - value=0, - description="Smoothing", - continuous_update=False, - ) - - return self._smoothing - - @property - def structural_markers(self) -> Checkbox: - """ - Export peaks as structural markers - """ - if getattr(self, "_structural_markers", None) is None: - self._structural_markers = Checkbox(description="All Markers") - - return self._structural_markers - - @property - def survey(self) -> Entity | None: - """ - Selected curve object - """ - return self._survey - - @property - def system(self) -> Dropdown: - """ - Selection of a TEM system - """ - if getattr(self, "_system", None) is None: - self._system = Dropdown( - options=[ - key - for key, specs in self.em_system_specs.items() - if specs["type"] == "time" - ], - description="Time-Domain System:", - style={"description_width": "initial"}, - ) - return self._system - - @property - def tem_checkbox(self) -> Checkbox: - """ - :obj:`ipywidgets.Checkbox`: Enable options specific to TEM data groups - """ - if getattr(self, "_tem_checkbox", None) is None: - self._tem_checkbox = Checkbox(description="TEM Data", value=True) - - return self._tem_checkbox - - @property - def channel_groups(self) -> dict: - """ - Dict of time groups used to classify peaks - """ - return self._channel_groups - - @channel_groups.setter - def channel_groups(self, groups: dict): - self._channel_groups = groups - - @property - def width(self) -> FloatSlider: - """ - Adjust the length of data displayed on the data plot - """ - if getattr(self, "_width", None) is None: - self._width = FloatSlider( - min=0.0, - max=5000.0, - step=1.0, - description="Window Width", - disabled=False, - continuous_update=False, - orientation="horizontal", - ) - - return self._width - - @property - def workspace(self) -> Workspace: - """ - Target geoh5py workspace - """ - if ( - getattr(self, "_workspace", None) is None - and getattr(self, "_h5file", None) is not None - ): - self.workspace = Workspace(self.h5file) - return self._workspace - - @workspace.setter - def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" - self.base_workspace_changes(workspace) - self.update_objects_list() - self.lines.workspace = workspace - - @property - def x_label(self) -> ToggleButtons: - """ - Units of distance displayed on the data plot - """ - if getattr(self, "_x_label", None) is None: - self._x_label = ToggleButtons( - options=["Distance", "Easting", "Northing"], - value="Distance", - description="X-axis label:", - ) - - return self._x_label - - def add_group_widget(self, property_group, params: dict): - """ - Add a group from dictionary - """ - if getattr(self, f"Group {property_group} Data", None) is None: - setattr( - self, - f"Group {property_group} Data", - Dropdown( - description="Group Name:", - ), - ) - widget = getattr(self, f"Group {property_group} Data") - widget.name = property_group - widget.value = None - widget.options = self.data.options - - try: - widget.value = params["data"] - except TraitError: - pass - if getattr(self, f"Group {property_group} Color", None) is None: - setattr( - self, - f"Group {property_group} Color", - ColorPicker(description="Color"), - ) - getattr(self, f"Group {property_group} Color").name = property_group - try: - getattr(self, f"Group {property_group} Color").value = str(params["color"]) - except TraitError: - pass - - getattr(self, f"Group {property_group} Data").observe( - self.edit_group, names="value" - ) - getattr(self, f"Group {property_group} Color").observe( - self.edit_group, names="value" - ) - return VBox( - [ - getattr(self, f"Group {property_group} Data"), - getattr(self, f"Group {property_group} Color"), - ], - layout=Layout(border="solid"), - ) - - def create_default_groups(self, _): - if self.group_auto.value: - with fetch_active_workspace(self.workspace, mode="r+") as workspace: - obj = workspace.get_entity(self.objects.value)[0] - if obj is None: - return - - group = [pg for pg in obj.property_groups if pg.uid == self.data.value] - if any(group): - channel_groups = default_groups_from_property_group(group[0]) - self._channel_groups = channel_groups - self.pause_refresh = True - - group_list = [] - self.update_data_list(None) - self.pause_refresh = True - for pg, params in self._channel_groups.items(): - group_list += [self.add_group_widget(pg, params)] - - self.pause_refresh = False - self.groups_panel.children = group_list - - self.set_data(None) - - self.group_auto.value = False - self._group_auto.button_style = "success" - - def edit_group(self, caller): - """ - Observer of :obj:`geoapps.processing.peak_finder.`: Change channels associated with groups - """ - widget = caller["owner"] - if not self.pause_refresh: - if isinstance(widget, Dropdown): - obj, _ = self.get_selected_entities() - group = {"color": getattr(self, f"Group {widget.name} Color").value} - if widget.value in [pg.uid for pg in obj.property_groups]: - prop_group = [ - pg for pg in obj.property_groups if pg.uid == widget.value - ] - group["data"] = prop_group[0].uid - group["properties"] = prop_group[0].properties - else: - group["data"] = None - group["properties"] = [] - self._channel_groups[widget.name] = group - else: - self._channel_groups[widget.name]["color"] = widget.value - self.set_data(None) - - def get_line_indices(self, line_id): - """ - Find the vertices for a given line ID - """ - line_data = self.workspace.get_entity(self.lines.data.value)[0] - - if not isinstance(line_data, ReferencedData): - return - - indices = np.where(np.asarray(line_data.values) == line_id)[0] - - if len(indices) == 0: - return - - return indices - - def groups_trigger(self, _): - """ - Observer of :obj:`geoapps.processing.peak_finder.`: - """ - if self.groups_setter.value: - self.groups_widget.children = [ - self.group_auto, - self.groups_setter, - self.groups_panel, - ] - else: - self.groups_widget.children = [self.group_auto, self.groups_setter] - - def line_update(self, _): - """ - Re-compute derivatives - """ - if ( - getattr(self, "survey", None) is None - or len(self.workspace.get_entity(self.lines.data.value)) == 0 - or self.lines.lines.value == "" - or len(self.channel_groups) == 0 - ): - return - - line_indices = self.get_line_indices(self.lines.lines.value) - - if line_indices is None: - return - - self.plot_trigger.value = False - self.survey.line_indices = line_indices - result = find_anomalies( - self.survey.vertices, - line_indices, - self.active_channels, - self.channel_groups, - data_normalization=self.em_system_specs[self.system.value]["normalization"], - smoothing=self.smoothing.value, - min_amplitude=self.min_amplitude.value, - min_value=self.min_value.value, - min_width=self.min_width.value, - max_migration=self.max_migration.value, - min_channels=self.min_channels.value, - return_profile=True, - ) - - if len(result) > 0: - self.lines.anomalies, self.lines.profile = result - else: - self.group_display.disabled = True - return - - self.pause_refresh = True - if self.previous_line != self.lines.lines.value: - end = self.lines.profile.locations_resampled[-1] - mid = self.lines.profile.locations_resampled[-1] * 0.5 - - if self.center.value >= end: - self.center.value = 0 - self.center.max = end - self.width.value = 0 - self.width.max = end - self.width.value = mid - else: - self.center.max = end - self.width.max = end - - if len(self.lines.anomalies) > 0: - peaks = np.sort( - self.lines.profile.locations_resampled[ - [group["peak"][0] for group in self.lines.anomalies] - ] - ) - current = self.center.value - self.group_display.options = np.round(peaks, decimals=1) - self.group_display.value = self.group_display.options[ - np.argmin(np.abs(peaks - current)) - ] - self.previous_line = self.lines.lines.value - self.pause_refresh = False - self.plot_trigger.value = True - - def objects_change(self, _): - """ - Observer of :obj:`geoapps.processing.peak_finder.objects`: Reset data and auto-detect AEM system - """ - obj = self.workspace.get_entity(self.objects.value)[0] - if obj is None: - return - - self._survey = obj - self.update_data_list(None) - is_tem = False - self.active_channels = {} - self.channel_groups = {} - for child in self.groups_panel.children: - child.children[0].options = self.data.options - - for aem_system, specs in self.em_system_specs.items(): - if specs["flag"] is not None and any( - [specs["flag"] in channel for channel in self._survey.get_data_list()] - ): - if aem_system in self.system.options: - self.system.value = aem_system - is_tem = True - break - - self.tem_checkbox.value = is_tem - - if self.group_auto: - self.create_default_groups(None) - - self.set_data(None) - - def tem_change(self, _): - self.min_channels.disabled = not self.tem_checkbox.value - self.show_decay.value = False - self.system.disabled = not self.tem_checkbox.value - - def plot_data_selection( - self, - residual, - markers, - scale, - scale_value, - center, - width, - plot_trigger, - refresh, - x_label, - ): - """ - Observer of :obj:`geoapps.processing.peak_finder.`: - """ - - if ( - self.pause_refresh - or not refresh - or plot_trigger is False - or not self.plot_result - ): - return - - self.figure = plt.figure(figsize=(12, 6)) - axs = plt.subplot() - - if ( - getattr(self, "survey", None) is None - or getattr(self.survey, "line_indices", None) is None - or len(self.survey.line_indices) < 2 - or len(self.active_channels) == 0 - ): - return - - lims = np.searchsorted( - self.lines.profile.locations_resampled, - [ - (center - width / 2.0), - (center + width / 2.0), - ], - ) - sub_ind = np.arange(lims[0], lims[1]) - if len(sub_ind) == 0: - return - - y_min, y_max = np.inf, -np.inf - locs = self.lines.profile.locations_resampled - peak_markers_x, peak_markers_y, peak_markers_c = [], [], [] - end_markers_x, end_markers_y = [], [] - start_markers_x, start_markers_y = [], [] - up_markers_x, up_markers_y = [], [] - dwn_markers_x, dwn_markers_y = [], [] - - for cc, channel in enumerate(self.active_channels.values()): - if "values" not in channel: - continue - - self.lines.profile.values = channel["values"][self.survey.line_indices] - values = self.lines.profile.values_resampled - y_min = np.nanmin([values[sub_ind].min(), y_min]) - y_max = np.nanmax([values[sub_ind].max(), y_max]) - axs.plot(locs, values, color=[0.5, 0.5, 0.5, 1]) - for group in self.lines.anomalies: - query = np.where(group["channels"] == cc)[0] - - if ( - len(query) == 0 - or group["peak"][query[0]] < lims[0] - or group["peak"][query[0]] > lims[1] - ): - continue - - i = query[0] - start = group["start"][i] - end = group["end"][i] - axs.plot( - locs[start:end], - values[start:end], - color=group["channel_group"]["color"], - ) - - if group["azimuth"] < 180: - ori = "right" - else: - ori = "left" - - if markers: - if i == 0: - axs.scatter( - locs[group["peak"][i]], - values[group["peak"][i]], - s=200, - c="k", - marker=self.marker[ori], - zorder=10, - ) - peak_markers_x += [locs[group["peak"][i]]] - peak_markers_y += [values[group["peak"][i]]] - peak_markers_c += [group["channel_group"]["color"]] - start_markers_x += [locs[group["start"][i]]] - start_markers_y += [values[group["start"][i]]] - end_markers_x += [locs[group["end"][i]]] - end_markers_y += [values[group["end"][i]]] - up_markers_x += [locs[group["inflx_up"][i]]] - up_markers_y += [values[group["inflx_up"][i]]] - dwn_markers_x += [locs[group["inflx_dwn"][i]]] - dwn_markers_y += [values[group["inflx_dwn"][i]]] - - if residual: - raw = self.lines.profile.values_resampled_raw - axs.fill_between( - locs, values, raw, where=raw > values, color=[1, 0, 0, 0.5] - ) - axs.fill_between( - locs, values, raw, where=raw < values, color=[0, 0, 1, 0.5] - ) - - if np.isinf(y_min): - return - - if scale == "symlog": - plt.yscale("symlog", linthresh=scale_value) - - x_lims = [ - center - width / 2.0, - center + width / 2.0, - ] - y_lims = [np.nanmax([y_min, self.min_value.value]), y_max] - axs.set_xlim(x_lims) - axs.set_ylim(y_lims) - axs.set_ylabel("Data") - axs.plot([center, center], [y_min, y_max], "k--") - - if markers: - axs.scatter( - peak_markers_x, - peak_markers_y, - s=50, - c=peak_markers_c, - marker="o", - ) - axs.scatter( - start_markers_x, - start_markers_y, - s=100, - color="k", - marker="4", - ) - axs.scatter( - end_markers_x, - end_markers_y, - s=100, - color="k", - marker="3", - ) - axs.scatter( - up_markers_x, - up_markers_y, - color="k", - marker="1", - s=100, - ) - axs.scatter( - dwn_markers_x, - dwn_markers_y, - color="k", - marker="2", - s=100, - ) - - ticks_loc = axs.get_xticks().tolist() - axs.set_xticks(ticks_loc) - - if x_label == "Easting": - axs.text( - center, - y_lims[0], - f"{self.lines.profile.interp_x(center):.0f} m E", - va="top", - ha="center", - bbox={"edgecolor": "r"}, - ) - axs.set_xticklabels( - [f"{self.lines.profile.interp_x(label):.0f}" for label in ticks_loc] - ) - axs.set_xlabel("Easting (m)") - - elif x_label == "Northing": - axs.text( - center, - y_lims[0], - f"{self.lines.profile.interp_y(center):.0f} m N", - va="top", - ha="center", - bbox={"edgecolor": "r"}, - ) - axs.set_xticklabels( - [f"{self.lines.profile.interp_y(label):.0f}" for label in ticks_loc] - ) - axs.set_xlabel("Northing (m)") - - else: - axs.text( - center, - y_min, - f"{center:.0f} m", - va="top", - ha="center", - bbox={"edgecolor": "r"}, - ) - axs.set_xlabel("Distance (m)") - axs.grid(True) - plt.show() - - def plot_decay_curve(self, center, plot_trigger): - """ - Observer of :obj:`geoapps.processing.peak_finder.`: - """ - if self.pause_refresh or not self.plot_result: - return - - if ( - plot_trigger - or self.refresh.value - and hasattr(self.lines, "profile") - and self.tem_checkbox.value - ): - if self.decay_figure is None: - self.decay_figure = plt.figure(figsize=(8, 8)) - - else: - plt.figure(self.decay_figure.number) - - axs = plt.subplot() - # Find nearest decay to cursor - group = None - if getattr(self.lines, "anomalies", None) is not None: - peaks = np.r_[[group["peak"][0] for group in self.lines.anomalies]] - if len(peaks) > 0: - group = self.lines.anomalies[ - np.argmin( - np.abs( - self.lines.profile.locations_resampled[peaks] - center - ) - ) - ] - - # Get the times of the group and plot the linear regression - times = [] - if group is not None and group["linear_fit"] is not None: - times = [ - channel["time"] - for i, channel in enumerate(self.active_channels.values()) - if i in list(group["channels"]) - ] - if any(times): - times = np.hstack(times) - y = np.exp(times * group["linear_fit"][1] + group["linear_fit"][0]) - axs.plot( - times, - y, - "--", - linewidth=2, - color="k", - ) - axs.text( - np.mean(times), - np.mean(y), - f"Tau: {np.abs(group['linear_fit'][1] ** -1.)*1e+3:.2e} msec", - color="k", - ) - axs.scatter( - times, - group["peak_values"], - s=100, - color=group["channel_group"]["color"], - marker="^", - edgecolors="k", - ) - axs.grid(True) - - plt.yscale("log") - axs.set_ylabel("log(V)") - axs.set_xlabel("Time (sec)") - axs.set_title("Decay - MADTau") - else: - axs.set_ylabel("log(V)") - axs.set_xlabel("Time (sec)") - axs.set_title("Too few channels") - plt.show() - - def scale_update(self, _): - """ - Observer of :obj:`geoapps.processing.peak_finder.`: - """ - if self.scale_button.value == "symlog": - self.scale_panel.children = [ - self.scale_button, - self.scale_value, - ] - else: - self.scale_panel.children = [self.scale_button] - - def set_data(self, _): - """ - Observer of :obj:`geoapps.processing.peak_finder.data` - Populate the list of available channels and refresh groups - """ - self._group_auto.button_style = "warning" - if getattr(self, "survey", None) is not None and self.data.value is not None: - self.pause_refresh = True - self.active_channels = {} - for group in self.channel_groups.values(): - for channel in group["properties"]: - obj = self.workspace.get_entity(channel)[0] - - if getattr(obj, "values", None) is not None: - self.active_channels[channel] = {"name": obj.name} - - d_min, d_max = np.inf, -np.inf - thresh_value = np.inf - if self.tem_checkbox.value: - system = self.em_system_specs[self.system.value] - - for uid, params in self.active_channels.copy().items(): - obj = self.workspace.get_entity(uid)[0] - try: - if self.tem_checkbox.value: - channel = [ - ch for ch in system["channels"] if ch in params["name"] - ] - if any(channel): - self.active_channels[uid]["time"] = system["channels"][ - channel[0] - ] - else: - del self.active_channels[uid] - - self.active_channels[uid]["values"] = ( - -1.0 - ) ** self.flip_sign.value * obj.values.copy() - thresh_value = np.min( - [ - thresh_value, - np.percentile( - np.abs(self.active_channels[uid]["values"]), 95 - ), - ] - ) - d_min = np.nanmin( - [d_min, self.active_channels[uid]["values"].min()] - ) - d_max = np.nanmax( - [d_max, self.active_channels[uid]["values"].max()] - ) - except KeyError: - continue - - self.pause_refresh = False - self.plot_trigger.value = False - - if d_max > -np.inf: - self.plot_trigger.value = False - self.min_value.value = d_min - self.scale_value.value = thresh_value - - self.line_update(None) - def trigger_click(self, _): - param_dict = {} - ui_json = deepcopy(default_ui_json) - for key in ui_json: - try: - if isinstance(getattr(self, key), Widget) and hasattr(self.params, key): - value = getattr(self, key).value - - if ( - isinstance(value, uuid.UUID) - and self.workspace.get_entity(value)[0] is not None - ): - value = self.workspace.get_entity(value)[0] - - param_dict[key] = value - - except AttributeError: - continue - - for label, group in self._channel_groups.items(): - for member in ["data", "color"]: - name = f"Group {label} {member}" - ui_json[name] = deepcopy(template_dict[member]) - ui_json[name]["group"] = f"Group {label}" - param_dict[name] = group[member] - - p_g_uid = {p_g.uid: p_g.name for p_g in param_dict["objects"].property_groups} - - temp_geoh5 = f"{self.ga_group_name.value}_{time():.0f}.geoh5" - - ws, self.live_link.value = BaseApplication.get_output_workspace( - self.live_link.value, self.export_directory.selected_path, temp_geoh5 - ) - - with ws as new_workspace: - with self.workspace.open("r"): - for key, value in param_dict.items(): - if isinstance(value, ObjectBase): - if new_workspace.get_entity(value.uid)[0] is None: - param_dict[key] = value.copy( - parent=new_workspace, copy_children=True - ) - - elif isinstance(value, uuid.UUID) and value in p_g_uid: - param_dict[key] = param_dict[ - "objects" - ].find_or_create_property_group(name=p_g_uid[value]) - - param_dict["data"] = param_dict[ - "objects" - ].find_or_create_property_group(name=p_g_uid[param_dict["data"].uid]) - param_dict["geoh5"] = new_workspace - - if self.live_link.value: - param_dict["monitoring_directory"] = self.monitoring_directory - - new_params = PeakFinderParams(**param_dict) - new_params.write_input_file(name=temp_geoh5.replace(".geoh5", ".ui.json")) - self.run(new_params) - - if self.live_link.value: - print("Live link active. Check your ANALYST session for result.") - - def update_center(self, _): """ - Update the center view on group selection + Trigger the application """ - if hasattr(self.lines, "anomalies"): - self.center.value = self.group_display.value - - @classmethod - def run(cls, params: PeakFinderParams): - """ - Create an octree mesh from input values - """ - driver = PeakFinderDriver(params) - with params.geoh5.open(mode="r+"): - driver.run() - - def show_decay_trigger(self, _): - """ - Observer of :obj:`geoapps.processing.peak_finder.`: Add the decay curve plot - """ - if self.show_decay.value: - self.decay_panel.children = [self.show_decay, self.decay] - self.show_decay.description = "Hide decay curve" - else: - self.decay_panel.children = [self.show_decay] - self.show_decay.description = "Show decay curve" - - -if __name__ == "__main__": - file = sys.argv[1] - warnings.warn( - "'geoapps.peak_finder.application' replaced by " - "'geoapps.peak_finder.driver' in version 0.7.0. " - "This warning is likely due to the execution of older ui.json files. Please update." - ) - params_class = PeakFinderParams(InputFile(file)) - PeakFinder.run(params_class) + new_params = self.collect_parameter_values() + ObjectSelection.run("Peak Finder", DashPeakFinder, new_params) diff --git a/geoapps/peak_finder/constants.py b/geoapps/peak_finder/constants.py index c7486c15f..0bfe7c1b7 100644 --- a/geoapps/peak_finder/constants.py +++ b/geoapps/peak_finder/constants.py @@ -1,202 +1,19 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from __future__ import annotations - -from copy import deepcopy from uuid import UUID -from geoh5py.ui_json.constants import default_ui_json as base_ui_json - -import geoapps from geoapps import assets_path -from geoapps.utils.geophysical_systems import parameters - -defaults = { - "version": geoapps.__version__, - "title": "Peak Finder Parameters", - "geoh5": None, - "tem_checkbox": False, - "objects": None, - "data": None, - "flip_sign": False, - "line_field": None, - "system": None, - "smoothing": 6, - "min_amplitude": 1, - "min_value": None, - "min_width": 100.0, - "max_migration": 25.0, - "min_channels": 1, - "ga_group_name": "peak_finder", - "structural_markers": False, - "line_id": None, - "group_auto": True, - "center": None, - "width": None, - "run_command": "geoapps.peak_finder.driver", - "monitoring_directory": None, - "workspace_geoh5": None, - "conda_environment": "geoapps", - "conda_environment_boolean": False, -} -default_ui_json = deepcopy(base_ui_json) -default_ui_json.update( - { - "version": geoapps.__version__, - "title": "Peak Finder Parameters", - "tem_checkbox": { - "main": True, - "label": "TEM type", - "value": False, - }, - "objects": { - "main": True, - "group": "Data", - "label": "Object", - "meshType": [ - "{6A057FDC-B355-11E3-95BE-FD84A7FFCB88}", - ], - "value": None, - }, - "data": { - "association": "Vertex", - "dataType": "Float", - "group": "Data", - "main": True, - "dataGroupType": "Multi-element", - "label": "Channels", - "parent": "objects", - "value": None, - }, - "flip_sign": { - "main": True, - "group": "Data", - "label": "Flip sign", - "value": False, - }, - "line_field": { - "association": "Vertex", - "dataType": "Referenced", - "group": "Data", - "main": True, - "label": "Line Field", - "parent": "objects", - "value": None, - }, - "system": { - "choiceList": list(parameters()), - "main": True, - "label": "TEM system", - "dependency": "tem_checkbox", - "dependencyType": "enabled", - "value": None, - }, - "smoothing": { - "group": "Detection Parameters", - "label": "Smoothing window", - "main": True, - "value": 6, - }, - "min_amplitude": { - "group": "Detection Parameters", - "label": "Minimum Amplitude (%)", - "value": 1, - "main": True, - }, - "min_value": { - "group": "Detection Parameters", - "label": "Minimum Value", - "value": 0.0, - "main": True, - }, - "min_width": { - "group": "Detection Parameters", - "label": "Minimum Width (m)", - "value": 100.0, - "main": True, - }, - "max_migration": { - "group": "Detection Parameters", - "label": "Maximum Peak Migration (m)", - "value": 25.0, - "main": True, - }, - "min_channels": { - "group": "Detection Parameters", - "label": "Minimum # Channels", - "value": 1, - "main": True, - }, - "ga_group_name": { - "enabled": True, - "main": True, - "group": "Python run preferences", - "label": "Save As", - "value": "peak_finder", - }, - "structural_markers": { - "main": True, - "group": "Python run preferences", - "label": "Export all markers", - "value": False, - }, - "line_id": None, - "group_auto": { - "label": "Auto-group", - "value": True, - }, - "center": None, - "width": None, - "conda_environment": "geoapps", - "run_command": "geoapps.peak_finder.driver", - } -) - -template_dict = { - "data": { - "association": "Vertex", - "group": "Group A", - "dataGroupType": "Multi-element", - "label": "Property Group", - "parent": "objects", - "dependency": "group_auto", - "dependencyType": "disabled", - "value": None, - }, - "color": { - "dataType": "Text", - "group": "Group A", - "label": "Color", - "dependency": "group_auto", - "dependencyType": "disabled", - "value": None, - }, -} - -# Over-write validations for jupyter app parameters -validations = { - "line_id": {"types": [int, type(None)]}, - "center": {"types": [float, type(None)]}, - "width": {"types": [float, type(None)]}, -} app_initializer = { - "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": UUID("{bb208abb-dc1f-4820-9ea9-b8883e5ff2c6}"), - "data": UUID("{b834a590-dea9-48cb-abe3-8c714bb0bb7c}"), - "line_field": UUID("{90b1d710-8a0f-4f69-bd38-6c06c7a977ed}"), - "system": "VTEM (2007)", - "line_id": 13, - "center": 4041.2, - "width": 1000.0, - "tem_checkbox": True, - "min_value": -0.0004509940918069333, - "group_auto": True, + "geoh5": str(assets_path() / "FlinFlon_airborne_tem.geoh5"), + "objects": UUID("{34698019-cde6-4b43-8d53-a040b25c989a}"), + "group_a_data": UUID("{22a9cf91-5cff-42b5-8bbb-2f1c6a559204}"), } diff --git a/geoapps/peak_finder/driver.py b/geoapps/peak_finder/driver.py deleted file mode 100644 index 2a1f506e0..000000000 --- a/geoapps/peak_finder/driver.py +++ /dev/null @@ -1,328 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -import sys - -import numpy as np -from dask import compute, delayed -from dask.diagnostics import ProgressBar -from geoh5py.groups import ContainerGroup -from geoh5py.objects import Curve, Points -from geoh5py.shared.utils import fetch_active_workspace -from tqdm import tqdm - -from geoapps.driver_base.driver import BaseDriver -from geoapps.peak_finder.constants import validations -from geoapps.peak_finder.params import PeakFinderParams -from geoapps.peak_finder.utils import default_groups_from_property_group, find_anomalies -from geoapps.shared_utils.utils import hex_to_rgb -from geoapps.utils import geophysical_systems -from geoapps.utils.formatters import string_name - - -class PeakFinderDriver(BaseDriver): - _params_class = PeakFinderParams - _validations = validations - - def __init__(self, params: PeakFinderParams): - super().__init__(params) - self.params: PeakFinderParams = params - - def run(self): - with fetch_active_workspace(self.params.geoh5, mode="r+"): - survey = self.params.objects - prop_group = [ - pg for pg in survey.property_groups if pg.uid == self.params.data.uid - ] - - if self.params.tem_checkbox: - system = geophysical_systems.parameters()[self.params.system] - normalization = system["normalization"] - else: - normalization = [1] - - output_group = ContainerGroup.create( - self.params.geoh5, name=string_name(self.params.ga_group_name) - ) - - line_field = self.params.line_field - lines = np.unique(line_field.values) - - if self.params.group_auto and any(prop_group): - channel_groups = default_groups_from_property_group(prop_group[0]) - else: - channel_groups = self.params.groups_from_free_params() - - active_channels = {} - for group in channel_groups.values(): - for channel in group["properties"]: - obj = self.params.geoh5.get_entity(channel)[0] - active_channels[channel] = {"name": obj.name} - - for uid, channel_params in active_channels.items(): - obj = self.params.geoh5.get_entity(uid)[0] - if self.params.tem_checkbox: - channel = [ch for ch in system["channels"] if ch in obj.name] - if any(channel): - channel_params["time"] = system["channels"][channel[0]] - else: - continue - channel_params["values"] = ( - obj.values.copy() * (-1.0) ** self.params.flip_sign - ) - - print("Submitting parallel jobs:") - anomalies = [] - locations = survey.vertices.copy() - - line_computation = delayed(find_anomalies, pure=True) - for line_id in tqdm(list(lines)): - line_indices = np.where(line_field.values == line_id)[0] - - anomalies += [ - line_computation( - locations, - line_indices, - active_channels, - channel_groups, - data_normalization=normalization, - smoothing=self.params.smoothing, - min_amplitude=self.params.min_amplitude, - min_value=self.params.min_value, - min_width=self.params.min_width, - max_migration=self.params.max_migration, - min_channels=self.params.min_channels, - minimal_output=True, - ) - ] - ( - channel_group, - tau, - migration, - azimuth, - cox, - amplitude, - inflx_up, - inflx_dwn, - start, - end, - skew, - peaks, - ) = ([], [], [], [], [], [], [], [], [], [], [], []) - - print("Processing and collecting results:") - with ProgressBar(): - results = compute(anomalies)[0] - - for line in tqdm(results): - for group in line: - if "channel_group" in group and len(group["cox"]) > 0: - channel_group += group["channel_group"]["label"] - - if group["linear_fit"] is None: - tau += [0] - else: - tau += [np.abs(group["linear_fit"][0] ** -1.0)] - migration += [group["migration"]] - amplitude += [group["amplitude"]] - azimuth += [group["azimuth"]] - cox += [group["cox"]] - inflx_dwn += [group["inflx_dwn"]] - inflx_up += [group["inflx_up"]] - start += [group["start"]] - end += [group["end"]] - skew += [group["skew"]] - peaks += [group["peaks"]] - - print("Exporting . . .") - if cox: - channel_group = np.hstack(channel_group) # Start count at 1 - - # Create reference values and color_map - group_map, color_map = {}, [] - for ind, (name, group) in enumerate(channel_groups.items()): - group_map[ind + 1] = name - color_map += [[ind + 1] + hex_to_rgb(group["color"]) + [1]] - - color_map = np.core.records.fromarrays( - np.vstack(color_map).T, - names=["Value", "Red", "Green", "Blue", "Alpha"], - ) - points = Points.create( - self.params.geoh5, - name="PointMarkers", - vertices=np.vstack(cox), - parent=output_group, - ) - points.entity_type.name = self.params.ga_group_name - migration = np.hstack(migration) - dip = migration / migration.max() - dip = np.rad2deg(np.arccos(dip)) - skew = np.hstack(skew) - azimuth = np.hstack(azimuth) - points.add_data( - { - "amplitude": {"values": np.hstack(amplitude)}, - "skew": {"values": skew}, - } - ) - - if self.params.tem_checkbox: - points.add_data( - { - "tau": {"values": np.hstack(tau)}, - "azimuth": {"values": azimuth}, - "dip": {"values": dip}, - } - ) - - channel_group_data = points.add_data( - { - "channel_group": { - "type": "referenced", - "values": np.hstack(channel_group), - "value_map": group_map, - } - } - ) - channel_group_data.entity_type.color_map = { - "name": "Time Groups", - "values": color_map, - } - - if self.params.tem_checkbox: - group = points.find_or_create_property_group( - name="AzmDip", property_group_type="Dip direction & dip" - ) - group.properties = [ - points.get_data("azimuth")[0].uid, - points.get_data("dip")[0].uid, - ] - - # Add structural markers - if self.params.structural_markers: - if self.params.tem_checkbox: - markers = [] - - def rotation_2D(angle): - R = np.r_[ - np.c_[ - np.cos(np.pi * angle / 180), - -np.sin(np.pi * angle / 180), - ], - np.c_[ - np.sin(np.pi * angle / 180), - np.cos(np.pi * angle / 180), - ], - ] - return R - - for azm, xyz, mig in zip( - np.hstack(azimuth).tolist(), - np.vstack(cox).tolist(), - migration.tolist(), - ): - marker = np.r_[ - np.c_[-0.5, 0.0] * 50, - np.c_[0.5, 0] * 50, - np.c_[0.0, 0.0], - np.c_[0.0, 1.0] * mig, - ] - - marker = ( - np.c_[ - np.dot(rotation_2D(-azm), marker.T).T, np.zeros(4) - ] - + xyz - ) - markers.append(marker.squeeze()) - - curves = Curve.create( - self.params.geoh5, - name="TickMarkers", - vertices=np.vstack(markers), - cells=np.arange(len(markers) * 4, dtype="uint32").reshape( - (-1, 2) - ), - parent=output_group, - ) - channel_group_data = curves.add_data( - { - "channel_group": { - "type": "referenced", - "values": np.kron( - np.hstack(channel_group), np.ones(4) - ), - "value_map": group_map, - } - } - ) - channel_group_data.entity_type.color_map = { - "name": "Time Groups", - "values": color_map, - } - inflx_pts = Points.create( - self.params.geoh5, - name="Inflections_Up", - vertices=np.vstack(inflx_up), - parent=output_group, - ) - channel_group_data = inflx_pts.add_data( - { - "channel_group": { - "type": "referenced", - "values": np.repeat( - np.hstack(channel_group), - [i.shape[0] for i in inflx_up], - ), - "value_map": group_map, - } - } - ) - channel_group_data.entity_type.color_map = { - "name": "Time Groups", - "values": color_map, - } - inflx_pts = Points.create( - self.params.geoh5, - name="Inflections_Down", - vertices=np.vstack(inflx_dwn), - parent=output_group, - ) - channel_group_data.copy(parent=inflx_pts) - - start_pts = Points.create( - self.params.geoh5, - name="Starts", - vertices=np.vstack(start), - parent=output_group, - ) - channel_group_data.copy(parent=start_pts) - - end_pts = Points.create( - self.params.geoh5, - name="Ends", - vertices=np.vstack(end), - parent=output_group, - ) - channel_group_data.copy(parent=end_pts) - - Points.create( - self.params.geoh5, - name="Peaks", - vertices=np.vstack(peaks), - parent=output_group, - ) - self.update_monitoring_directory(output_group) - - -if __name__ == "__main__": - file = sys.argv[1] - PeakFinderDriver.start(file) diff --git a/geoapps/peak_finder/notebook.ipynb b/geoapps/peak_finder/notebook.ipynb index b32dec034..d5c0954bc 100644 --- a/geoapps/peak_finder/notebook.ipynb +++ b/geoapps/peak_finder/notebook.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e5966d9d21f7156eb38369a8d8d4ac5173ef4961f566fcd84a624e3131dcc9c -size 2163 +oid sha256:dcb9729d99eb559fefc012c20d2d2799361b7b89df6ff0657968cdc4d4fbbb63 +size 1944 diff --git a/geoapps/peak_finder/params.py b/geoapps/peak_finder/params.py deleted file mode 100644 index 5971c7a23..000000000 --- a/geoapps/peak_finder/params.py +++ /dev/null @@ -1,297 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from copy import deepcopy - -from geoh5py.ui_json import InputFile - -from geoapps.driver_base.params import BaseParams - -from .constants import default_ui_json, defaults, template_dict, validations - - -class PeakFinderParams(BaseParams): - """ - Parameter class for peak finder application. - """ - - def __init__(self, input_file=None, **kwargs): - self._default_ui_json = deepcopy(default_ui_json) - self._defaults = deepcopy(defaults) - self._free_parameter_keys: list = ["data", "color"] - self._free_parameter_identifier: str = "group" - self._validations = validations - self._objects = None - self._data = None - self._flip_sign = None - self._line_field = None - self._tem_checkbox = None - self._system = None - self._smoothing = None - self._min_amplitude = None - self._min_value = None - self._min_width = None - self._max_migration = None - self._min_channels = None - self._ga_group_name = None - self._structural_markers = None - self._line_id = None - self._group_auto = None - self._center = None - self._width = None - self._template_data = None - self._template_color = None - self._plot_result = True - self._title = None - - if input_file is None: - free_param_dict = {} - for key in kwargs: - if ( - self._free_parameter_identifier in key.lower() - and "data" in key.lower() - ): - group = key.replace("data", "").rstrip() - free_param_dict[group] = deepcopy(template_dict) - - ui_json = deepcopy(self._default_ui_json) - for group, forms in free_param_dict.items(): - for key, form in forms.items(): - form["group"] = group - ui_json[f"{group} {key}"] = form - self._defaults[f"{group} {key}"] = form["value"] - - input_file = InputFile( - ui_json=ui_json, - validations=self.validations, - validate=False, - ) - - super().__init__(input_file=input_file, **kwargs) - - @property - def center(self): - return self._center - - @center.setter - def center(self, val): - self.setter_validator("center", val) - - @property - def conda_environment(self): - return self._conda_environment - - @conda_environment.setter - def conda_environment(self, val): - self.setter_validator("conda_environment", val) - - @property - def conda_environment_boolean(self): - return self._conda_environment_boolean - - @conda_environment_boolean.setter - def conda_environment_boolean(self, val): - self.setter_validator("conda_environment_boolean", val) - - @property - def data(self): - return self._data - - @data.setter - def data(self, val): - self.setter_validator("data", val, fun=self._uuid_promoter) - - @property - def flip_sign(self): - return self._flip_sign - - @flip_sign.setter - def flip_sign(self, val): - self.setter_validator("flip_sign", val) - - @property - def ga_group_name(self): - return self._ga_group_name - - @ga_group_name.setter - def ga_group_name(self, val): - self.setter_validator("ga_group_name", val) - - @property - def group_auto(self): - return self._group_auto - - @group_auto.setter - def group_auto(self, val): - self.setter_validator("group_auto", val) - - @property - def line_field(self): - return self._line_field - - @line_field.setter - def line_field(self, val): - self.setter_validator("line_field", val, fun=self._uuid_promoter) - - @property - def line_id(self): - return self._line_id - - @line_id.setter - def line_id(self, val): - self.setter_validator("line_id", val) - - @property - def max_migration(self): - return self._max_migration - - @max_migration.setter - def max_migration(self, val): - self.setter_validator("max_migration", val) - - @property - def min_amplitude(self): - return self._min_amplitude - - @min_amplitude.setter - def min_amplitude(self, val): - self.setter_validator("min_amplitude", val) - - @property - def min_channels(self): - return self._min_channels - - @min_channels.setter - def min_channels(self, val): - self.setter_validator("min_channels", val) - - @property - def min_value(self): - return self._min_value - - @min_value.setter - def min_value(self, val): - self.setter_validator("min_value", val) - - @property - def min_width(self): - return self._min_width - - @min_width.setter - def min_width(self, val): - self.setter_validator("min_width", val) - - @property - def monitoring_directory(self): - return self._monitoring_directory - - @monitoring_directory.setter - def monitoring_directory(self, val): - self.setter_validator("monitoring_directory", val) - - @property - def objects(self): - return self._objects - - @objects.setter - def objects(self, val): - self.setter_validator("objects", val, fun=self._uuid_promoter) - - @property - def plot_result(self): - return self._plot_result - - @plot_result.setter - def plot_result(self, val): - self._plot_result = val - - @property - def smoothing(self): - return self._smoothing - - @smoothing.setter - def smoothing(self, val): - self.setter_validator("smoothing", val) - - @property - def structural_markers(self): - return self._structural_markers - - @structural_markers.setter - def structural_markers(self, val): - self.setter_validator("structural_markers", val) - - @property - def system(self): - return self._system - - @system.setter - def system(self, val): - self.setter_validator("system", val) - - @property - def tem_checkbox(self): - return self._tem_checkbox - - @tem_checkbox.setter - def tem_checkbox(self, val): - self.setter_validator("tem_checkbox", val) - - @property - def template_data(self): - return self._template_data - - @template_data.setter - def template_data(self, val): - self.setter_validator("template_data", val) - - @property - def template_color(self): - return self._template_color - - @template_color.setter - def template_color(self, val): - self.setter_validator("template_color", val) - - @property - def title(self): - return self._title - - @title.setter - def title(self, val): - self.setter_validator("title", val) - - @property - def width(self): - return self._width - - @width.setter - def width(self, val): - self.setter_validator("width", val) - - def groups_from_free_params(self): - """ - Generate a dictionary of groups with associate properties from params. - """ - count = 0 - channel_groups = {} - for group_params in self.free_parameter_dict.values(): - if group_params["data"] is not None: - prop_group = getattr(self, group_params["data"], None) - - if prop_group is not None: - count += 1 - channel_groups[prop_group.name] = { - "data": prop_group.uid, - "color": getattr(self, group_params["color"], None), - "label": [count], - "properties": prop_group.properties, - } - - return channel_groups diff --git a/geoapps/peak_finder/utils.py b/geoapps/peak_finder/utils.py deleted file mode 100644 index 721d5a590..000000000 --- a/geoapps/peak_finder/utils.py +++ /dev/null @@ -1,699 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import numpy as np -from scipy.interpolate import interp1d - -from geoapps.driver_base.utils import running_mean - - -class LineDataDerivatives: - """ - Compute and store the derivatives of inline data values. The values are re-sampled at a constant - interval, padded then transformed to the Fourier domain using the :obj:`numpy.fft` package. - - :param locations: An array of data locations, either as distance along line or 3D coordinates. - For 3D coordinates, the locations are automatically converted and sorted as distance from the origin. - :param values: Data values used to compute derivatives over, shape(locations.shape[0],). - :param epsilon: Adjustable constant used in :obj:`scipy.interpolate.Rbf`. Defaults to 20x the average sampling - :param interpolation: Type on interpolation accepted by the :obj:`scipy.interpolate.Rbf` routine: - 'multiquadric', 'inverse', 'gaussian', 'linear', 'cubic', 'quintic', 'thin_plate' - :param sampling_width: Number of padding values used in the FFT. By default, the entire array is used as - padding. - :param residual: Use the residual between the values and the running mean to compute derivatives. - :param sampling: Sampling interval length (m) used in the FFT. Defaults to the mean data separation. - :param smoothing: Number of neighbours used by the :obj:`geoapps.utils.running_mean` routine. - """ - - def __init__( - self, - locations: np.ndarray | None = None, - values: np.array | None = None, - epsilon: float | None = None, - interpolation: str = "gaussian", - smoothing: int = 0, - residual: bool = False, - sampling: float | None = None, - **kwargs, - ): - self._locations_resampled = None - self._epsilon = epsilon - self.x_locations = None - self.y_locations = None - self.z_locations = None - self.locations = locations - self.values = values - self._interpolation = interpolation - self._smoothing = smoothing - self._residual = residual - self._sampling = sampling - self._values_resampled_raw = None - self._values_resampled = None - self.Fx = None - self.Fy = None - self.Fz = None - - # if values is not None: - # self._values = values[self.sorting] - - for key, value in kwargs.items(): - if getattr(self, key, None) is not None: - setattr(self, key, value) - - def interp_x(self, distance): - """ - Get the x-coordinate from the inline distance. - """ - if getattr(self, "Fx", None) is None and self.x_locations is not None: - self.Fx = interp1d( - self.locations, - self.x_locations, - bounds_error=False, - fill_value="extrapolate", - ) - return self.Fx(distance) - - def interp_y(self, distance): - """ - Get the y-coordinate from the inline distance. - """ - if getattr(self, "Fy", None) is None and self.y_locations is not None: - self.Fy = interp1d( - self.locations, - self.y_locations, - bounds_error=False, - fill_value="extrapolate", - ) - return self.Fy(distance) - - def interp_z(self, distance): - """ - Get the z-coordinate from the inline distance. - """ - if getattr(self, "Fz", None) is None and self.z_locations is not None: - self.Fz = interp1d( - self.locations, - self.z_locations, - bounds_error=False, - fill_value="extrapolate", - ) - return self.Fz(distance) - - @property - def epsilon(self): - """ - Adjustable constant used by :obj:`scipy.interpolate.Rbf` - """ - if getattr(self, "_epsilon", None) is None: - width = self.locations[-1] - self.locations[0] - self._epsilon = width / 5.0 - - return self._epsilon - - @property - def sampling_width(self): - """ - Number of padding cells added for the FFT - """ - if getattr(self, "_sampling_width", None) is None: - self._sampling_width = int(np.floor(len(self.values_resampled))) - - return self._sampling_width - - @property - def locations(self): - """ - Position of values along line. - """ - return self._locations - - @locations.setter - def locations(self, locations): - self._locations = None - self.x_locations = None - self.y_locations = None - self.z_locations = None - self.sorting = None - self.values_resampled = None - self._locations_resampled = None - - if locations is not None: - if locations.ndim > 1: - if np.std(locations[:, 1]) > np.std(locations[:, 0]): - start = np.argmin(locations[:, 1]) - self.sorting = np.argsort(locations[:, 1]) - else: - start = np.argmin(locations[:, 0]) - self.sorting = np.argsort(locations[:, 0]) - - self.x_locations = locations[self.sorting, 0] - self.y_locations = locations[self.sorting, 1] - - if locations.shape[1] == 3: - self.z_locations = locations[self.sorting, 2] - - distances = np.linalg.norm( - np.c_[ - locations[start, 0] - locations[self.sorting, 0], - locations[start, 1] - locations[self.sorting, 1], - ], - axis=1, - ) - - else: - self.x_locations = locations - self.sorting = np.argsort(locations) - distances = locations[self.sorting] - - self._locations = distances - - if self._locations[0] == self._locations[-1]: - return - - dx = np.mean(np.abs(self.locations[1:] - self.locations[:-1])) - self._sampling_width = np.ceil( - (self._locations[-1] - self._locations[0]) / dx - ).astype(int) - self._locations_resampled = np.linspace( - self._locations[0], self._locations[-1], self.sampling_width - ) - - @property - def locations_resampled(self): - """ - Position of values resampled on a fix interval - """ - return self._locations_resampled - - @property - def values(self): - """ - Original values sorted along line. - """ - return self._values - - @values.setter - def values(self, values): - self.values_resampled = None - self._values = None - if (values is not None) and (self.sorting is not None): - self._values = values[self.sorting] - - @property - def sampling(self): - """ - Discrete interval length (m) - """ - if getattr(self, "_sampling", None) is None: - self._sampling = np.mean( - np.abs(self.locations_resampled[1:] - self.locations_resampled[:-1]) - ) - return self._sampling - - @property - def values_resampled(self): - """ - Values re-sampled on a regular interval - """ - if getattr(self, "_values_resampled", None) is None: - # self._values_resampled = self.values_padded[self.sampling_width: -self.sampling_width] - F = interp1d(self.locations, self.values, fill_value="extrapolate") - self._values_resampled = F(self._locations_resampled) - self._values_resampled_raw = self._values_resampled.copy() - if self._smoothing > 0: - mean_values = running_mean( - self._values_resampled, width=self._smoothing, method="centered" - ) - - if self.residual: - self._values_resampled = self._values_resampled - mean_values - else: - self._values_resampled = mean_values - - return self._values_resampled - - @values_resampled.setter - def values_resampled(self, values): - self._values_resampled = values - self._values_resampled_raw = None - - @property - def values_resampled_raw(self): - """ - Resampled values prior to smoothing - """ - return self._values_resampled_raw - - @property - def interpolation(self): - """ - Method of interpolation: ['linear'], 'nearest', 'slinear', 'quadratic' or 'cubic' - """ - return self._interpolation - - @interpolation.setter - def interpolation(self, method): - methods = ["linear", "nearest", "slinear", "quadratic", "cubic"] - assert method in methods, f"Method on interpolation must be one of {methods}" - - @property - def residual(self): - """ - Use the residual of the smoothing data - """ - return self._residual - - @residual.setter - def residual(self, value): - assert isinstance(value, bool), "Residual must be a bool" - if value != self._residual: - self._residual = value - self.values_resampled = None - - @property - def smoothing(self): - """ - Smoothing factor in terms of number of nearest neighbours used - in a running mean averaging of the signal - """ - return self._smoothing - - @smoothing.setter - def smoothing(self, value): - assert ( - isinstance(value, int) and value >= 0 - ), "Smoothing parameter must be an integer >0" - if value != self._smoothing: - self._smoothing = value - self.values_resampled = None - - def derivative(self, order=1) -> np.ndarray: - """ - Compute and return the first order derivative. - """ - deriv = self.values_resampled - for _ in range(order): - deriv = ( - deriv[1:] - deriv[:-1] # pylint: disable=unsubscriptable-object - ) / self.sampling - deriv = np.r_[ - 2 * deriv[0] - deriv[1], deriv # pylint: disable=unsubscriptable-object - ] - - return deriv - - -def default_groups_from_property_group(property_group, start_index=0): - _default_channel_groups = { - "early": {"label": ["early"], "color": "#0000FF", "channels": []}, - "middle": {"label": ["middle"], "color": "#FFFF00", "channels": []}, - "late": {"label": ["late"], "color": "#FF0000", "channels": []}, - "early + middle": { - "label": ["early", "middle"], - "color": "#00FFFF", - "channels": [], - }, - "early + middle + late": { - "label": ["early", "middle", "late"], - "color": "#008000", - "channels": [], - }, - "middle + late": { - "label": ["middle", "late"], - "color": "#FFA500", - "channels": [], - }, - } - - parent = property_group.parent - - data_list = [ - parent.workspace.get_entity(uid)[0] for uid in property_group.properties - ] - - start = start_index - end = len(data_list) - block = int((end - start) / 3) - ranges = { - "early": np.arange(start, start + block).tolist(), - "middle": np.arange(start + block, start + 2 * block).tolist(), - "late": np.arange(start + 2 * block, end).tolist(), - } - - channel_groups = {} - for i, (key, default) in enumerate(_default_channel_groups.items()): - prop_group = parent.find_or_create_property_group(name=key) - properties = [] - - for val in default["label"]: - for ind in ranges[val]: - properties += [data_list[ind].uid] - - prop_group.add_properties(properties) - - channel_groups[prop_group.name] = { - "data": prop_group.uid, - "color": default["color"], - "label": [i + 1], - "properties": prop_group.properties, - } - - return channel_groups - - -def find_anomalies( - locations, - line_indices, - channels, - channel_groups, - smoothing=1, - use_residual=False, - data_normalization=(1.0,), - min_amplitude=25, - min_value=-np.inf, - min_width=200, - max_migration=50, - min_channels=3, - minimal_output=False, - return_profile=False, -): - """ - Find all anomalies along a line profile of data. - Anomalies are detected based on the lows, inflection points and a peaks. - Neighbouring anomalies are then grouped and assigned a channel_group label. - - :param: :obj:`geoh5py.objects.Curve` - Curve object containing data. - :param: list - List of Data channels - :param: array of int or bool - Array defining a line of data from the input Curve object - - - :return: list of dict - """ - profile = LineDataDerivatives( - locations=locations[line_indices], smoothing=smoothing, residual=use_residual - ) - locs = profile.locations_resampled - if data_normalization == "ppm": - data_normalization = [1e-6] - - if locs is None: - return {} - - xy = np.c_[profile.interp_x(locs), profile.interp_y(locs)] - angles = np.arctan2(xy[1:, 1] - xy[:-1, 1], xy[1:, 0] - xy[:-1, 0]) - angles = np.r_[angles[0], angles].tolist() - azimuth = (450.0 - np.rad2deg(running_mean(angles, width=5))) % 360.0 - anomalies = { - "channel": [], - "start": [], - "inflx_up": [], - "peak": [], - "peak_values": [], - "inflx_dwn": [], - "end": [], - "amplitude": [], - "group": [], - "channel_group": [], - } - data_uid = list(channels) - property_groups = [pg for pg in channel_groups.values()] - group_prop_size = np.r_[[len(grp["properties"]) for grp in channel_groups.values()]] - for cc, (uid, params) in enumerate(channels.items()): - if "values" not in list(params): - continue - - values = params["values"][line_indices].copy() - profile.values = values - values = profile.values_resampled - dx = profile.derivative(order=1) - ddx = profile.derivative(order=2) - peaks = np.where( - (np.diff(np.sign(dx)) != 0) - & (ddx[1:] < 0) - & (values[:-1] > min_value) # pylint: disable=unsubscriptable-object - )[0] - lows = np.where( - (np.diff(np.sign(dx)) != 0) - & (ddx[1:] > 0) - & (values[:-1] > min_value) # pylint: disable=unsubscriptable-object - )[0] - lows = np.r_[0, lows, locs.shape[0] - 1] - up_inflx = np.where( - (np.diff(np.sign(ddx)) != 0) - & (dx[1:] > 0) - & (values[:-1] > min_value) # pylint: disable=unsubscriptable-object - )[0] - dwn_inflx = np.where( - (np.diff(np.sign(ddx)) != 0) - & (dx[1:] < 0) - & (values[:-1] > min_value) # pylint: disable=unsubscriptable-object - )[0] - - if len(peaks) == 0 or len(lows) < 2 or len(up_inflx) < 2 or len(dwn_inflx) < 2: - continue - - for peak in peaks: - ind = np.median( - [0, lows.shape[0] - 1, np.searchsorted(locs[lows], locs[peak]) - 1] - ).astype(int) - start = lows[ind] - ind = np.median( - [0, lows.shape[0] - 1, np.searchsorted(locs[lows], locs[peak])] - ).astype(int) - end = np.min([locs.shape[0] - 1, lows[ind]]) - ind = np.median( - [ - 0, - up_inflx.shape[0] - 1, - np.searchsorted(locs[up_inflx], locs[peak]) - 1, - ] - ).astype(int) - inflx_up = up_inflx[ind] - ind = np.median( - [ - 0, - dwn_inflx.shape[0] - 1, - np.searchsorted(locs[dwn_inflx], locs[peak]), - ] - ).astype(int) - inflx_dwn = np.min([locs.shape[0] - 1, dwn_inflx[ind] + 1]) - # Check amplitude and width thresholds - delta_amp = ( - np.abs( - np.min( - [ - values[peak] # pylint: disable=unsubscriptable-object - - values[start], # pylint: disable=unsubscriptable-object - values[peak] # pylint: disable=unsubscriptable-object - - values[end], # pylint: disable=unsubscriptable-object - ] - ) - ) - / (np.std(values) + 2e-32) - ) * 100.0 - delta_x = locs[end] - locs[start] - amplitude = ( - np.sum( - np.abs(values[start:end]) # pylint: disable=unsubscriptable-object - ) - * profile.sampling - ) - if (delta_amp > min_amplitude) & (delta_x > min_width): - anomalies["channel"] += [cc] - anomalies["start"] += [start] - anomalies["inflx_up"] += [inflx_up] - anomalies["peak"] += [peak] - anomalies["peak_values"] += [ - values[peak] # pylint: disable=unsubscriptable-object - ] - anomalies["inflx_dwn"] += [inflx_dwn] - anomalies["amplitude"] += [amplitude] - anomalies["end"] += [end] - anomalies["group"] += [-1] - anomalies["channel_group"] += [ - [ - key - for key, channel_group in enumerate(channel_groups.values()) - if uid in channel_group["properties"] - ] - ] - - if len(anomalies["peak"]) == 0: - if return_profile: - return {}, profile - else: - return {} - - groups = [] - - # Re-cast as numpy arrays - for key, values in anomalies.items(): - if key == "channel_group": - continue - anomalies[key] = np.hstack(values) - - group_id = -1 - peaks_position = locs[anomalies["peak"]] - for i in range(peaks_position.shape[0]): - # Skip if already labeled - if anomalies["group"][i] != -1: - continue - - group_id += 1 # Increment group id - dist = np.abs(peaks_position[i] - peaks_position) - # Find anomalies across channels within horizontal range - near = np.where((dist < max_migration) & (anomalies["group"] == -1))[0] - # Reject from group if channel gap > 1 - u_gates, u_count = np.unique(anomalies["channel"][near], return_counts=True) - if len(u_gates) > 1 and np.any((u_gates[1:] - u_gates[:-1]) > 2): - cutoff = u_gates[np.where((u_gates[1:] - u_gates[:-1]) > 2)[0][0]] - near = near[anomalies["channel"][near] <= cutoff] # Remove after cutoff - # Check for multiple nearest peaks on single channel - # and keep the nearest - u_gates, u_count = np.unique(anomalies["channel"][near], return_counts=True) - for gate in u_gates[np.where(u_count > 1)]: - mask = np.ones_like(near, dtype="bool") - sub_ind = anomalies["channel"][near] == gate - sub_ind[np.where(sub_ind)[0][np.argmin(dist[near][sub_ind])]] = False - mask[sub_ind] = False - near = near[mask] - - score = np.zeros(len(channel_groups)) - for ids in near: - score[anomalies["channel_group"][ids]] += 1 - - # Find groups with largest channel overlap - max_scores = np.where(score == score.max())[0] - # Keep the group with less properties - in_group = max_scores[ - np.argmax(score[max_scores] / group_prop_size[max_scores]) - ] - if score[in_group] < min_channels: - continue - - channel_group = property_groups[in_group] - # Remove anomalies not in group - mask = [ - data_uid[anomalies["channel"][id]] in channel_group["properties"] - for id in near - ] - near = near[mask, ...] - if len(near) == 0: - continue - anomalies["group"][near] = group_id - gates = anomalies["channel"][near] - cox = anomalies["peak"][near] - inflx_dwn = anomalies["inflx_dwn"][near] - inflx_up = anomalies["inflx_up"][near] - cox_sort = np.argsort(locs[cox]) - azimuth_near = azimuth[cox] - dip_direction = azimuth[cox[0]] - - if ( - anomalies["peak_values"][near][cox_sort][0] - < anomalies["peak_values"][near][cox_sort][-1] - ): - dip_direction = (dip_direction + 180) % 360.0 - - migration = np.abs(locs[cox[cox_sort[-1]]] - locs[cox[cox_sort[0]]]) - skew = (locs[cox][cox_sort[0]] - locs[inflx_up][cox_sort]) / ( - locs[inflx_dwn][cox_sort] - locs[cox][cox_sort[0]] + 1e-8 - ) - skew[azimuth_near[cox_sort] > 180] = 1.0 / ( - skew[azimuth_near[cox_sort] > 180] + 1e-2 - ) - # Change skew factor from [-100, 1] - flip_skew = skew < 1 - skew[flip_skew] = 1.0 / (skew[flip_skew] + 1e-2) - skew = 1.0 - skew - skew[flip_skew] *= -1 - values = anomalies["peak_values"][near] * np.prod(data_normalization) - amplitude = np.sum(anomalies["amplitude"][near]) - times = [ - channel["time"] - for i, channel in enumerate(channels.values()) - if (i in list(gates) and "time" in channel) - ] - linear_fit = None - - if len(times) > 2 and len(cox) > 0: - times = np.hstack(times)[values > 0] - if len(times) > 2: - # Compute linear trend - A = np.c_[np.ones_like(times), times] - y0, slope = np.linalg.solve( - np.dot(A.T, A), np.dot(A.T, np.log(values[values > 0])) - ) - linear_fit = [y0, slope] - - group = { - "channels": gates, - "start": anomalies["start"][near], - "inflx_up": anomalies["inflx_up"][near], - "peak": cox, - "cox": np.mean( - np.c_[ - profile.interp_x(locs[cox[cox_sort[0]]]), - profile.interp_y(locs[cox[cox_sort[0]]]), - profile.interp_z(locs[cox[cox_sort[0]]]), - ], - axis=0, - ), - "inflx_dwn": anomalies["inflx_dwn"][near], - "end": anomalies["end"][near], - "azimuth": dip_direction, - "migration": migration, - "amplitude": amplitude, - "channel_group": channel_group, - "linear_fit": linear_fit, - } - if minimal_output: - group["skew"] = np.mean(skew) - group["inflx_dwn"] = np.c_[ - profile.interp_x(locs[inflx_dwn]), - profile.interp_y(locs[inflx_dwn]), - profile.interp_z(locs[inflx_dwn]), - ] - group["inflx_up"] = np.c_[ - profile.interp_x(locs[inflx_up]), - profile.interp_y(locs[inflx_up]), - profile.interp_z(locs[inflx_up]), - ] - start = anomalies["start"][near] - group["start"] = np.c_[ - profile.interp_x(locs[start]), - profile.interp_y(locs[start]), - profile.interp_z(locs[start]), - ] - - end = anomalies["end"][near] - group["peaks"] = np.c_[ - profile.interp_x(locs[cox]), - profile.interp_y(locs[cox]), - profile.interp_z(locs[cox]), - ] - - group["end"] = np.c_[ - profile.interp_x(locs[end]), - profile.interp_y(locs[end]), - profile.interp_z(locs[end]), - ] - - else: - group["peak_values"] = values - - groups += [group] - - if return_profile: - return groups, profile - else: - return groups diff --git a/geoapps/scatter_plot/__init__.py b/geoapps/scatter_plot/__init__.py index 1c9156436..9c9e88bc8 100644 --- a/geoapps/scatter_plot/__init__.py +++ b/geoapps/scatter_plot/__init__.py @@ -1,11 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from __future__ import annotations +# flake8: noqa from .constants import app_initializer from .params import ScatterPlotParams diff --git a/geoapps/scatter_plot/application.py b/geoapps/scatter_plot/application.py index 06c83451f..83dcb5561 100644 --- a/geoapps/scatter_plot/application.py +++ b/geoapps/scatter_plot/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=W0613 @@ -55,7 +57,7 @@ def __init__(self, ui_json=None, ui_json_data=None, params=None): super().__init__() # Start flask server - external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"] + external_stylesheets = None server = Flask(__name__) self.app = Dash( server=server, @@ -358,20 +360,25 @@ def update_channel_bounds( trigger = callback_context.triggered[0]["prop_id"].split(".")[0] if trigger == "ui_json_data" or trigger == "": - x_min, x_max = ui_json_data.get("x_min", None), ui_json_data.get( - "x_max", None + x_min, x_max = ( + ui_json_data.get("x_min", None), + ui_json_data.get("x_max", None), ) - y_min, y_max = ui_json_data.get("y_min", None), ui_json_data.get( - "y_max", None + y_min, y_max = ( + ui_json_data.get("y_min", None), + ui_json_data.get("y_max", None), ) - z_min, z_max = ui_json_data.get("z_min", None), ui_json_data.get( - "z_max", None + z_min, z_max = ( + ui_json_data.get("z_min", None), + ui_json_data.get("z_max", None), ) - color_min, color_max = ui_json_data.get( - "color_min", None - ), ui_json_data.get("color_max", None) - size_min, size_max = ui_json_data.get("size_min", None), ui_json_data.get( - "size_max", None + color_min, color_max = ( + ui_json_data.get("color_min", None), + ui_json_data.get("color_max", None), + ) + size_min, size_max = ( + ui_json_data.get("size_min", None), + ui_json_data.get("size_max", None), ) elif trigger == "x": diff --git a/geoapps/scatter_plot/constants.py b/geoapps/scatter_plot/constants.py index 47e3061f3..7ef2ced2d 100644 --- a/geoapps/scatter_plot/constants.py +++ b/geoapps/scatter_plot/constants.py @@ -1,13 +1,16 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from uuid import UUID import plotly.express as px from geoh5py.ui_json.constants import default_ui_json as base_ui_json @@ -15,6 +18,7 @@ import geoapps from geoapps import assets_path + defaults = { "version": geoapps.__version__, "title": "Scatter Plot", @@ -365,25 +369,25 @@ app_initializer = { "geoh5": str(assets_path() / "FlinFlon.geoh5"), - "objects": "{79b719bc-d996-4f52-9af0-10aa9c7bb941}", - "x": "{cdd7668a-4b5b-49ac-9365-c9ce4fddf733}", + "objects": UUID("{79b719bc-d996-4f52-9af0-10aa9c7bb941}"), + "x": UUID("{cdd7668a-4b5b-49ac-9365-c9ce4fddf733}"), "x_log": False, "x_min": -17.0, "x_max": 25.5, - "y": "{18c2560c-6161-468a-8571-5d9d59649535}", + "y": UUID("{18c2560c-6161-468a-8571-5d9d59649535}"), "y_log": True, "y_min": -17.0, "y_max": 29.8, - "z": "{cb35da1c-7ea4-44f0-8817-e3d80e8ba98c}", + "z": UUID("{cb35da1c-7ea4-44f0-8817-e3d80e8ba98c}"), "z_log": True, "z_min": -20.0, "z_max": 3200.0, - "color": "{94a150e8-16d9-4784-a7aa-e6271df3a3ef}", + "color": UUID("{94a150e8-16d9-4784-a7aa-e6271df3a3ef}"), "color_log": True, "color_min": -17.0, "color_max": 640.0, "color_maps": "inferno", - "size": "{41d51965-3670-43ba-8a10-d399070689e3}", + "size": UUID("{41d51965-3670-43ba-8a10-d399070689e3}"), "size_log": False, "size_min": -17.0, "size_max": 24.8, diff --git a/geoapps/scatter_plot/driver.py b/geoapps/scatter_plot/driver.py index fb56280d6..bb90481e7 100644 --- a/geoapps/scatter_plot/driver.py +++ b/geoapps/scatter_plot/driver.py @@ -1,17 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import numpy as np import plotly.graph_objects as go +from geoapps_utils.driver.driver import BaseDriver -from geoapps.driver_base.driver import BaseDriver from geoapps.scatter_plot.constants import validations from geoapps.scatter_plot.params import ScatterPlotParams from geoapps.utils.plotting import format_axis, normalize, symlog diff --git a/geoapps/scatter_plot/layout.py b/geoapps/scatter_plot/layout.py index 951ed958b..1ac093e76 100644 --- a/geoapps/scatter_plot/layout.py +++ b/geoapps/scatter_plot/layout.py @@ -1,15 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import plotly.express as px from dash import dcc, html + downsampling_layout = html.Div( [ html.Div( diff --git a/geoapps/scatter_plot/params.py b/geoapps/scatter_plot/params.py index e9305f432..463a3e1bd 100644 --- a/geoapps/scatter_plot/params.py +++ b/geoapps/scatter_plot/params.py @@ -1,19 +1,20 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from copy import deepcopy +from geoapps_utils.driver.params import BaseParams from geoh5py.data import Data from geoh5py.objects import ObjectBase -from geoapps.driver_base.params import BaseParams - from .constants import default_ui_json, defaults, validations @@ -23,7 +24,7 @@ class ScatterPlotParams(BaseParams): """ def __init__(self, input_file=None, **kwargs): - if self._default_ui_json is None: + if self._default_ui_json is None: # pylint: disable=E0203 self._default_ui_json = deepcopy(default_ui_json) self._defaults = deepcopy(defaults) diff --git a/geoapps/scripts/__init__.py b/geoapps/scripts/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/scripts/__init__.py +++ b/geoapps/scripts/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/scripts/start_notebook.py b/geoapps/scripts/start_notebook.py index 75ca38cb0..690fbf550 100644 --- a/geoapps/scripts/start_notebook.py +++ b/geoapps/scripts/start_notebook.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -11,7 +13,7 @@ import logging from pathlib import Path -from notebook.notebookapp import main as notebook_main +from notebook.app import main as notebook_main def main(): @@ -23,7 +25,6 @@ def main(): logging.getLogger(__package__).error( "Could not find index.ipynb (looking in %s)", geoapps_root.resolve() ) - notebook_main([str(index_notebook.resolve())]) diff --git a/geoapps/shared_utils/__init__.py b/geoapps/shared_utils/__init__.py index fd76a123c..a70539a08 100644 --- a/geoapps/shared_utils/__init__.py +++ b/geoapps/shared_utils/__init__.py @@ -1,6 +1,8 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/geoapps/shared_utils/colors.py b/geoapps/shared_utils/colors.py index ff5fd114f..8ca5a3a96 100644 --- a/geoapps/shared_utils/colors.py +++ b/geoapps/shared_utils/colors.py @@ -1,13 +1,15 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations + UNIQUE_COLORS = [ "#000000", "#FFFF00", diff --git a/geoapps/shared_utils/utils.py b/geoapps/shared_utils/utils.py index 1519d17a2..d77351a98 100644 --- a/geoapps/shared_utils/utils.py +++ b/geoapps/shared_utils/utils.py @@ -1,21 +1,22 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import re +from dataclasses import dataclass from uuid import UUID import numpy as np from discretize import TensorMesh, TreeMesh +from geoh5py.data import FloatData from geoh5py.objects import Curve, DrapeModel -from geoh5py.objects.surveys.direct_current import BaseElectrode -from geoh5py.shared import Entity from geoh5py.workspace import Workspace from scipy.interpolate import interp1d from scipy.spatial import cKDTree @@ -32,46 +33,6 @@ def hex_to_rgb(hex_color): return [int(code[i : i + 2], 16) for i in (0, 2, 4)] -def get_locations(workspace: Workspace, entity: UUID | Entity): - """ - Returns entity's centroids or vertices. - - If no location data is found on the provided entity, the method will - attempt to call itself on its parent. - - :param workspace: Geoh5py Workspace entity. - :param entity: Object or uuid of entity containing centroid or - vertex location data. - - :return: Array shape(*, 3) of x, y, z location data - - """ - locations = None - - if isinstance(entity, UUID): - entity = workspace.get_entity(entity)[0] - - if hasattr(entity, "centroids"): - locations = entity.centroids - elif hasattr(entity, "vertices"): - if isinstance(entity, BaseElectrode): - potentials = entity.potential_electrodes - locations = np.mean( - [ - potentials.vertices[potentials.cells[:, 0], :], - potentials.vertices[potentials.cells[:, 1], :], - ], - axis=0, - ) - else: - locations = entity.vertices - - elif getattr(entity, "parent", None) is not None and entity.parent is not None: - locations = get_locations(workspace, entity.parent) - - return locations - - def get_neighbouring_cells(mesh: TreeMesh, indices: list | np.ndarray) -> tuple: """ Get the indices of neighbouring cells along a given axis for a given list of @@ -130,9 +91,9 @@ def weighted_average( n = np.min([xyz_in.shape[0], n]) assert isinstance(values, list), "Input 'values' must be a list of numpy.ndarrays" - assert all( - [vals.shape[0] == xyz_in.shape[0] for vals in values] - ), "Input 'values' must have the same shape as input 'locations'" + assert all([vals.shape[0] == xyz_in.shape[0] for vals in values]), ( + "Input 'values' must have the same shape as input 'locations'" + ) avg_values = [] for value in values: @@ -280,8 +241,11 @@ def downsample_grid( """ - u_diff = lambda u: np.unique(np.diff(u, axis=1))[0] - v_diff = lambda v: np.unique(np.diff(v, axis=0))[0] + def u_diff(u): + return np.unique(np.diff(u, axis=1))[0] + + def v_diff(v): + return np.unique(np.diff(v, axis=0))[0] du = np.linalg.norm(np.c_[u_diff(xg), u_diff(yg)]) dv = np.linalg.norm(np.c_[v_diff(xg), v_diff(yg)]) @@ -458,7 +422,9 @@ def octree_2_treemesh(mesh): tsw_corner = np.asarray(mesh.origin.tolist()) small_cell = [mesh.u_cell_size, mesh.v_cell_size, mesh.w_cell_size] n_cell_dim = [mesh.u_count, mesh.v_count, mesh.w_count] - cell_sizes = [np.ones(nr) * sz for nr, sz in zip(n_cell_dim, small_cell)] + cell_sizes = [ + np.ones(nr) * sz for nr, sz in zip(n_cell_dim, small_cell, strict=False) + ] u_shift, v_shift, w_shift = (np.sum(h[h < 0]) for h in cell_sizes) h1, h2, h3 = (np.abs(h) for h in cell_sizes) x0 = tsw_corner + np.array([u_shift, v_shift, w_shift]) @@ -541,10 +507,12 @@ def get_inversion_output(h5file: str | Workspace, inversion_group: str | UUID): ) from exc outfile = group.get_entity("SimPEG.out")[0] - out = [l for l in outfile.values.decode("utf-8").replace("\r", "").split("\n")][:-1] + out = [ + line for line in outfile.values.decode("utf-8").replace("\r", "").split("\n") + ][:-1] cols = out.pop(0).split(" ") - out = [[string_to_numeric(k) for k in l.split(" ")] for l in out] - out = dict(zip(cols, list(map(list, zip(*out))))) + out = [[string_to_numeric(k) for k in line.split(" ")] for line in out] + out = dict(zip(cols, list(map(list, zip(*out, strict=False))), strict=False)) return out @@ -591,3 +559,29 @@ def resample_locations(locations: np.ndarray, increment: float) -> np.ndarray: resampled.append(interpolator(new_distances)) return np.c_[resampled].T + + +@dataclass +class WindowOptions: + """ + Parameters to window options for 2D data. + """ + + center_x: float + center_y: float + width: float + height: float + azimuth: float = 0.0 + + +@dataclass +class DrapeOptions: + """ + Parameters to change the receiver locations to drape on a topography surface. + """ + + topography_object: str + topography: str + z_from_topo: bool + receivers_offset_z: float + receivers_radar_drape: FloatData | None = None diff --git a/geoapps/triangulated_surfaces/__init__.py b/geoapps/triangulated_surfaces/__init__.py index 519d30259..52d3c14c5 100644 --- a/geoapps/triangulated_surfaces/__init__.py +++ b/geoapps/triangulated_surfaces/__init__.py @@ -1,9 +1,13 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +# flake8: noqa from __future__ import annotations diff --git a/geoapps/triangulated_surfaces/application.py b/geoapps/triangulated_surfaces/application.py index a8501857d..d2dcf2e41 100644 --- a/geoapps/triangulated_surfaces/application.py +++ b/geoapps/triangulated_surfaces/application.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -25,6 +27,7 @@ from geoapps.utils import warn_module_not_found from geoapps.utils.formatters import string_name + with warn_module_not_found(): from ipywidgets import ( FloatText, @@ -105,21 +108,12 @@ def trigger_click(self, _): return _, elevations = self.elevations.get_selected_entities() - - if hasattr(obj, "centroids"): - locations = obj.centroids - else: - locations = obj.vertices + locations = obj.locations if self.z_option.value == "depth": if self.topography.options.value == "Object": topo_obj = self.workspace.get_entity(self.topography.objects.value)[0] - - if hasattr(topo_obj, "centroids"): - vertices = topo_obj.centroids.copy() - else: - vertices = topo_obj.vertices.copy() - + vertices = topo_obj.locations topo_xy = vertices[:, :2] try: @@ -274,7 +268,7 @@ def trigger_click(self, _): else: if elevations: # Assumes non-property_group selection z_values = elevations[0].values - ind = np.isnan(z_values) == False + ind = ~np.isnan(z_values) locations = np.c_[locations[ind, :2], z_values[ind]] else: ind = np.ones(locations.shape[0], dtype="bool") @@ -343,14 +337,14 @@ def trigger_click(self, _): ) if len(self.models) > 0: - for uid, model in zip(self.data.value, self.models): + for uid, model in zip(self.data.value, self.models, strict=False): surface.add_data( { self.data.uid_name_map[uid]: {"values": model}, } ) else: - for data_obj, model in zip(data_list, self.models): + for data_obj, model in zip(data_list, self.models, strict=False): surface.add_data( { data_obj.name: {"values": model}, @@ -412,9 +406,9 @@ def elevations(self): @elevations.setter def elevations(self, value): - assert isinstance( - value, ObjectDataSelection - ), f"elevations must be an object of type {ObjectDataSelection}" + assert isinstance(value, ObjectDataSelection), ( + f"elevations must be an object of type {ObjectDataSelection}" + ) self._elevations = value @property @@ -495,9 +489,9 @@ def workspace(self): @workspace.setter def workspace(self, workspace): - assert isinstance( - workspace, Workspace - ), f"Workspace must be of class {Workspace}" + assert isinstance(workspace, Workspace), ( + f"Workspace must be of class {Workspace}" + ) self.base_workspace_changes(workspace) # Refresh the list of objects diff --git a/geoapps/utils/__init__.py b/geoapps/utils/__init__.py index 9992fa987..8a211dded 100644 --- a/geoapps/utils/__init__.py +++ b/geoapps/utils/__init__.py @@ -1,10 +1,12 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from __future__ import annotations +# flake8: noqa from .importing import warn_module_not_found diff --git a/geoapps/utils/formatters.py b/geoapps/utils/formatters.py index 3c712b9c7..4d3c7fdac 100644 --- a/geoapps/utils/formatters.py +++ b/geoapps/utils/formatters.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/geophysical_systems.py b/geoapps/utils/geophysical_systems.py index d64e4c1d5..2067e3d39 100644 --- a/geoapps/utils/geophysical_systems.py +++ b/geoapps/utils/geophysical_systems.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/importing.py b/geoapps/utils/importing.py index cf812d9fd..ff2592bc1 100644 --- a/geoapps/utils/importing.py +++ b/geoapps/utils/importing.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/io.py b/geoapps/utils/io.py index b13995f01..47f150c5f 100644 --- a/geoapps/utils/io.py +++ b/geoapps/utils/io.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -97,8 +99,8 @@ def export_grid_2_geotiff( dataset = driver.Create( file_name, - grid2d.shape[0], - grid2d.shape[1], + int(grid2d.shape[0]), + int(grid2d.shape[1]), num_bands, encode_type, ) diff --git a/geoapps/utils/list.py b/geoapps/utils/list.py index 0e5f9c7a1..9dfc9e0b5 100644 --- a/geoapps/utils/list.py +++ b/geoapps/utils/list.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/models.py b/geoapps/utils/models.py index 3827f2ea2..f7269a6f8 100644 --- a/geoapps/utils/models.py +++ b/geoapps/utils/models.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -84,10 +85,8 @@ def drape_to_octree( if method == "nearest": octree_model.append(datum[0].values) else: - lookup_inds = ( - mesh._get_containing_cell_indexes( # pylint: disable=W0212 - model.centroids - ) + lookup_inds = mesh._get_containing_cell_indexes( # pylint: disable=W0212 + model.centroids ) octree_model[lookup_inds] = datum[0].values @@ -425,9 +424,9 @@ def truncate_locs_depths(locs: np.ndarray, depth_core: int) -> np.ndarray: zmax = locs[:, 2].max() # top of locs below_core_ind = (zmax - locs[:, 2]) > depth_core core_bottom_elev = zmax - depth_core - locs[ - below_core_ind, 2 - ] = core_bottom_elev # sets locations below core to core bottom + locs[below_core_ind, 2] = ( + core_bottom_elev # sets locations below core to core bottom + ) return locs diff --git a/geoapps/utils/plotting.py b/geoapps/utils/plotting.py index cf0464e84..c0fb5a6ef 100644 --- a/geoapps/utils/plotting.py +++ b/geoapps/utils/plotting.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -18,6 +20,7 @@ from geoapps.shared_utils.utils import filter_xy from geoapps.utils import warn_module_not_found + with warn_module_not_found(): from matplotlib import colors from matplotlib import pyplot as plt @@ -70,7 +73,7 @@ def normalize(values): ind = ~np.isnan(values) values[ind] = np.abs(values[ind]) values[ind] /= values[ind].max() - values[ind == False] = 0 + values[~ind] = 0 return values @@ -110,7 +113,7 @@ def plot_plan_data_selection(entity, data, **kwargs): :return line_selection: :return contour_set: """ - indices = None + indices: np.array | None = None line_selection = None contour_set = None values = None @@ -141,7 +144,7 @@ def plot_plan_data_selection(entity, data, **kwargs): if "indices" in kwargs: indices = kwargs["indices"] - if isinstance(indices, np.ndarray) and np.all(indices == False): + if isinstance(indices, np.ndarray) and np.all(~indices): indices = None if isinstance(getattr(data, "values", None), np.ndarray) and not isinstance( @@ -196,7 +199,8 @@ def plot_plan_data_selection(entity, data, **kwargs): if values is not None: values = np.asarray(values.reshape(entity.shape, order="F"), dtype=float) - values[indices == False] = np.nan + assert indices is not None + values[~indices] = np.nan # pylint: disable=invalid-unary-operand-type values = values[ind_x, :][:, ind_y] if np.any(values): @@ -264,7 +268,7 @@ def plot_plan_data_selection(entity, data, **kwargs): axis.set_xlim([x.min() - width * 0.1, x.max() + width * 0.1]) axis.set_ylim([y.min() - height * 0.1, y.max() + height * 0.1]) - if "colorbar" in kwargs and kwargs["colorbar"]: + if kwargs.get("colorbar"): plt.colorbar(out, ax=axis) line_selection = np.zeros_like(indices, dtype=bool) @@ -360,13 +364,19 @@ def plot_profile_data_selection( yy[-1], yerr=uncertainties[i][0] * np.abs(yy[-1]) + uncertainties[i][1], - color=[c + i * i for c, i in zip(color, c_increment)], + color=[ + c + i * i + for c, i in zip(color, c_increment, strict=False) + ], ) else: ax.plot( xx[-1], yy[-1], - color=[c + i * i for c, i in zip(color, c_increment)], + color=[ + c + i * i + for c, i in zip(color, c_increment, strict=False) + ], ) legend.append(field) @@ -399,9 +409,9 @@ def plotly_scatter( """ Create a plotly.graph_objects.Mesh3D figure. """ - assert ( - getattr(points, "vertices", None) is not None - ), "Input object must have vertices" + assert getattr(points, "vertices", None) is not None, ( + "Input object must have vertices" + ) if figure is None: figure = go.FigureWidget() @@ -480,9 +490,9 @@ def plotly_block_model( """ Create a plotly.graph_objects.Mesh3D figure. """ - assert isinstance( - block_model, BlockModel - ), f"Input block_model must be of type {Surface}" + assert isinstance(block_model, BlockModel), ( + f"Input block_model must be of type {Surface}" + ) if figure is None: figure = go.FigureWidget() diff --git a/geoapps/utils/statistics.py b/geoapps/utils/statistics.py index af9a81dcb..e226e78b7 100644 --- a/geoapps/utils/statistics.py +++ b/geoapps/utils/statistics.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/string.py b/geoapps/utils/string.py index d7da7a224..b1511b806 100644 --- a/geoapps/utils/string.py +++ b/geoapps/utils/string.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/surveys.py b/geoapps/utils/surveys.py index de6ef5097..dc46dd5dd 100644 --- a/geoapps/utils/surveys.py +++ b/geoapps/utils/surveys.py @@ -1,19 +1,23 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + from __future__ import annotations from typing import TYPE_CHECKING -from SimPEG.survey import BaseSurvey +from simpeg.survey import BaseSurvey + if TYPE_CHECKING: - from geoapps.inversion.components.data import InversionData + from simpeg_drivers.components import InversionData -from typing import Callable +from collections.abc import Callable import numpy as np from discretize import TensorMesh, TreeMesh @@ -174,15 +178,15 @@ def slice_and_map(obj: np.ndarray, slicer: np.ndarray | Callable): if isinstance(slicer, np.ndarray): if slicer.dtype == bool: sliced_object = obj[slicer] - g2l = dict(zip(np.where(slicer)[0], np.arange(len(obj)))) + g2l = dict(zip(np.where(slicer)[0], np.arange(len(obj)), strict=False)) else: sliced_object = obj[slicer] - g2l = dict(zip(slicer, np.arange(len(slicer)))) + g2l = dict(zip(slicer, np.arange(len(slicer)), strict=False)) elif callable(slicer): slicer = np.array([slicer(k) for k in obj]) sliced_object = obj[slicer] - g2l = dict(zip(np.where(slicer)[0], np.arange(len(obj)))) + g2l = dict(zip(np.where(slicer)[0], np.arange(len(obj)), strict=False)) return sliced_object, g2l diff --git a/geoapps/utils/testing.py b/geoapps/utils/testing.py index 40a8cdb4e..eb29166b4 100644 --- a/geoapps/utils/testing.py +++ b/geoapps/utils/testing.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -30,11 +31,11 @@ TipperReceivers, ) from geoh5py.workspace import Workspace +from octree_creation_app.driver import OctreeDriver from scipy.spatial import Delaunay -from SimPEG import utils +from simpeg import utils from geoapps.driver_base.utils import active_from_xyz, treemesh_2_octree -from geoapps.octree_creation.driver import OctreeDriver from geoapps.utils.models import get_drape_model @@ -478,8 +479,10 @@ def check_target(output: dict, target: dict, tolerance=0.1): :param tolerance: Tolerance between output and target measured as: |a-b|/b """ print( - f"'data_norm': {np.linalg.norm(output['data'])}, 'phi_d': {output['phi_d'][1]}, 'phi_m': {output['phi_m'][1]}" + f"Output: 'data_norm': {np.linalg.norm(output['data'])}, 'phi_d': {output['phi_d'][1]}, 'phi_m': {output['phi_m'][1]}" ) + print(f"Target: {target}") + if any(np.isnan(output["data"])): warnings.warn( "Skipping data norm comparison due to nan (used to bypass lone faulty test run in GH actions)." diff --git a/geoapps/utils/workspace.py b/geoapps/utils/workspace.py index 5b4073a35..a335a0325 100644 --- a/geoapps/utils/workspace.py +++ b/geoapps/utils/workspace.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/geoapps/utils/write_default_uijson.py b/geoapps/utils/write_default_uijson.py index 7c621972b..e56d07c9e 100644 --- a/geoapps/utils/write_default_uijson.py +++ b/geoapps/utils/write_default_uijson.py @@ -1,58 +1,59 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations import argparse from pathlib import Path -from geoapps import assets_path -from geoapps.block_model_creation.params import BlockModelParams -from geoapps.clustering.params import ClusteringParams -from geoapps.contours.params import ContoursParams -from geoapps.edge_detection.params import EdgeDetectionParams -from geoapps.interpolation.params import DataInterpolationParams -from geoapps.inversion.electricals.direct_current.pseudo_three_dimensions.params import ( +from octree_creation_app.params import OctreeParams +from simpeg_drivers.electricals.direct_current.pseudo_three_dimensions.params import ( DirectCurrentPseudo3DParams, ) -from geoapps.inversion.electricals.direct_current.three_dimensions import ( +from simpeg_drivers.electricals.direct_current.three_dimensions import ( DirectCurrent3DParams, ) -from geoapps.inversion.electricals.direct_current.two_dimensions import ( +from simpeg_drivers.electricals.direct_current.two_dimensions import ( DirectCurrent2DParams, ) -from geoapps.inversion.electricals.induced_polarization.pseudo_three_dimensions.params import ( +from simpeg_drivers.electricals.induced_polarization.pseudo_three_dimensions.params import ( InducedPolarizationPseudo3DParams, ) -from geoapps.inversion.electricals.induced_polarization.three_dimensions import ( +from simpeg_drivers.electricals.induced_polarization.three_dimensions import ( InducedPolarization3DParams, ) -from geoapps.inversion.electricals.induced_polarization.two_dimensions import ( +from simpeg_drivers.electricals.induced_polarization.two_dimensions import ( InducedPolarization2DParams, ) -from geoapps.inversion.electromagnetics.frequency_domain import ( +from simpeg_drivers.electromagnetics.frequency_domain import ( FrequencyDomainElectromagneticsParams, ) -from geoapps.inversion.electromagnetics.time_domain import ( - TimeDomainElectromagneticsParams, -) -from geoapps.inversion.joint.joint_cross_gradient import JointCrossGradientParams -from geoapps.inversion.joint.joint_surveys import JointSurveysParams -from geoapps.inversion.natural_sources import MagnetotelluricsParams, TipperParams -from geoapps.inversion.potential_fields import ( +from simpeg_drivers.electromagnetics.time_domain import TimeDomainElectromagneticsParams +from simpeg_drivers.joint.joint_cross_gradient import JointCrossGradientParams +from simpeg_drivers.joint.joint_surveys import JointSurveysParams +from simpeg_drivers.natural_sources import MagnetotelluricsParams, TipperParams +from simpeg_drivers.potential_fields import ( GravityParams, MagneticScalarParams, MagneticVectorParams, ) + +from geoapps import assets_path +from geoapps.block_model_creation.params import BlockModelParams +from geoapps.clustering.params import ClusteringParams +from geoapps.contours.params import ContoursParams +from geoapps.edge_detection.params import EdgeDetectionParams +from geoapps.interpolation.params import DataInterpolationParams from geoapps.iso_surfaces.params import IsoSurfacesParams -from geoapps.octree_creation.params import OctreeParams -from geoapps.peak_finder.params import PeakFinderParams from geoapps.scatter_plot.params import ScatterPlotParams + active_data_channels = [ "z_real_channel", "z_imag_channel", @@ -75,14 +76,14 @@ def write_default_uijson(path: str | Path, use_initializers=False): - from geoapps.inversion.potential_fields.gravity.constants import ( + from simpeg_drivers.potential_fields.gravity.constants import ( app_initializer as grav_init, ) grav_init["geoh5"] = str(assets_path() / "FlinFlon.geoh5") grav_init = grav_init if use_initializers else {} - from geoapps.inversion.potential_fields.magnetic_scalar.constants import ( + from simpeg_drivers.potential_fields.magnetic_scalar.constants import ( app_initializer as mag_init, ) @@ -162,8 +163,9 @@ def write_default_uijson(path: str | Path, use_initializers=False): tipper_init["geoh5"] = str(assets_path() / "FlinFlon_natural_sources.geoh5") tipper_init = tipper_init if use_initializers else {} + from octree_creation_app.constants import template_dict + from geoapps.octree_creation.constants import app_initializer as oct_init - from geoapps.octree_creation.constants import template_dict if use_initializers: oct_init["geoh5"] = str(assets_path() / "FlinFlon.geoh5") @@ -309,7 +311,6 @@ def write_default_uijson(path: str | Path, use_initializers=False): forward_only=False, validate=False, **joint_cross_gradient_init ), "octree_mesh.ui.json": OctreeParams(validate=False, **oct_init), - "peak_finder.ui.json": PeakFinderParams(validate=False, **peak_init), "scatter.ui.json": ScatterPlotParams(validate=False, **scatter_init), "interpolation.ui.json": DataInterpolationParams(validate=False, **interp_init), "block_model_creation.ui.json": BlockModelParams(validate=False, **block_init), diff --git a/Install_or_Update.bat b/install.bat similarity index 84% rename from Install_or_Update.bat rename to install.bat index bf9ecc7ed..45c4b9a2f 100644 --- a/Install_or_Update.bat +++ b/install.bat @@ -18,7 +18,7 @@ set CONDA_CHANNEL_PRIORITY=strict :: all dependencies are installed from conda set PIP_NO_DEPS=1 -set MY_CONDA_ENV_FILE=environments\conda-py-%PY_VER%-win-64.lock.yml +set MY_CONDA_ENV_FILE=environments\py-%PY_VER%-win-64.conda.lock.yml if not exist %MY_CONDA_ENV_FILE% ( echo "** ERROR: Could not find the conda environment specification file '%MY_CONDA_ENV_FILE%' **" pause @@ -27,7 +27,7 @@ if not exist %MY_CONDA_ENV_FILE% ( call "!MY_CONDA!" activate base ^ && call "!MY_CONDA!" env create -y -n %ENV_NAME% --file %MY_CONDA_ENV_FILE% ^ - && call "!MY_CONDA!" run -n %ENV_NAME% pip install -e .[core,apps] + && call "!MY_CONDA!" run -n %ENV_NAME% pip install .[core,apps] if !errorlevel! neq 0 ( echo "** ERROR: Installation failed **" diff --git a/package.rst b/package.rst new file mode 100644 index 000000000..295f76577 --- /dev/null +++ b/package.rst @@ -0,0 +1,66 @@ +geoapps +================ + +The **geoapps** project has been created for the development and sharing of open-source +applications in geoscience, directly leverage the powerful visualization capabilities of +`Geoscience ANALYST `_ along with open-source code from the Python ecosystem. + + +Installation +^^^^^^^^^^^^ +**geoapps** is currently written for Python 3.10 or higher. + +Install **geoapps** from PyPI:: + + $ pip install geoapps + + +Feedback +^^^^^^^^ +Have comments or suggestions? Submit feedback. +All the content can be found on the github_ repository. + +.. _github: https://github.com/MiraGeoscience/geoapps + + +Visit `Mira Geoscience website `_ to learn more about our products +and services. + + +License +^^^^^^^ +MIT License + +Copyright (c) 2020-2025 Mira Geoscience + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Third Party Software +^^^^^^^^^^^^^^^^^^^^ +The geoapps Software may provide links to third party libraries or code (collectively “Third Party Software”) +to implement various functions. Third Party Software does not comprise part of the Software. +The use of Third Party Software is governed by the terms of such software license(s). +Third Party Software notices and/or additional terms and conditions are located in the +`THIRD_PARTY_SOFTWARE.rst`_ file. + +.. _THIRD_PARTY_SOFTWARE.rst: ./docs/source/THIRD_PARTY_SOFTWARE.rst + +Copyright +^^^^^^^^^ +Copyright (c) 2024-2025 Mira Geoscience Ltd. diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml new file mode 100644 index 000000000..297c99315 --- /dev/null +++ b/py-3.10.conda-lock.yml @@ -0,0 +1,13158 @@ +# This lock file was generated by conda-lock (https://github.com/conda/conda-lock). DO NOT EDIT! +# +# A "lock file" contains a concrete list of package versions (with checksums) to be installed. Unlike +# e.g. `conda env create`, the resulting environment will not change as new package versions become +# available, unless you explicitly update the lock file. +# +# Install this environment as "YOURENV" with: +# conda-lock install -n YOURENV py-3.10.conda-lock.yml +# This lock contains optional development dependencies. Include them in the installed environment with: +# conda-lock install --dev-dependencies -n YOURENV py-3.10.conda-lock.yml +# To update a single package to the latest version compatible with the version constraints in the source: +# conda-lock lock --lockfile py-3.10.conda-lock.yml --update PACKAGE +# To re-solve the entire environment, e.g. after changing a version constraint in the source file: +# conda-lock -f pyproject.toml -f environments/env-python-3.10.yml --lockfile py-3.10.conda-lock.yml +version: 1 +metadata: + content_hash: + win-64: 32fa5b433256f527125c8edcdbfb4c703022d845e40540d5fbfea03b21aa140a + linux-64: d292e32079711e4a7fe21b7c9ddf0a63a2663f0d5bcc16d2e1244bc5a1577628 + channels: + - url: conda-forge + used_env_vars: [] + - url: nodefaults + used_env_vars: [] + platforms: + - win-64 + - linux-64 + sources: + - pyproject.toml + - environments/env-python-3.10.yml +package: +- name: _libgcc_mutex + version: '0.1' + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + hash: + md5: d7c89558ba9fa0495403155b64376d81 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + category: main + optional: false +- name: _openmp_mutex + version: '4.5' + manager: conda + platform: linux-64 + dependencies: + _libgcc_mutex: '0.1' + llvm-openmp: '>=9.0.1' + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 + hash: + md5: 562b26ba2e19059551a811e72ab7f793 + sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc + category: main + optional: false +- name: _openmp_mutex + version: '4.5' + manager: conda + platform: win-64 + dependencies: + libgomp: '>=7.5.0' + libwinpthread: '>=12.0.0.r2.ggc561118da' + url: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + hash: + md5: 37e16618af5c4851a3f3d66dd0e11141 + sha256: 1a62cd1f215fe0902e7004089693a78347a30ad687781dfda2289cab000e652d + category: main + optional: false +- name: accessible-pygments + version: 0.0.5 + manager: conda + platform: linux-64 + dependencies: + pygments: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda + hash: + md5: 74ac5069774cdbc53910ec4d631a3999 + sha256: 1307719f0d8ee694fc923579a39c0621c23fdaa14ccdf9278a5aac5665ac58e9 + category: dev + optional: true +- name: accessible-pygments + version: 0.0.5 + manager: conda + platform: win-64 + dependencies: + pygments: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda + hash: + md5: 74ac5069774cdbc53910ec4d631a3999 + sha256: 1307719f0d8ee694fc923579a39c0621c23fdaa14ccdf9278a5aac5665ac58e9 + category: dev + optional: true +- name: alabaster + version: 0.7.16 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda + hash: + md5: def531a3ac77b7fb8c21d17bb5d0badb + sha256: fd39ad2fabec1569bbb0dfdae34ab6ce7de6ec09dcec8638f83dad0373594069 + category: dev + optional: true +- name: alabaster + version: 0.7.16 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda + hash: + md5: def531a3ac77b7fb8c21d17bb5d0badb + sha256: fd39ad2fabec1569bbb0dfdae34ab6ce7de6ec09dcec8638f83dad0373594069 + category: dev + optional: true +- name: alsa-lib + version: 1.2.13 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.13-hb9d3cd8_0.conda + hash: + md5: ae1370588aa6a5157c34c73e9bbb36a0 + sha256: f507b58f77eabc0cc133723cb7fc45c053d551f234df85e70fb3ede082b0cd53 + category: main + optional: false +- name: annotated-types + version: 0.7.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + typing-extensions: '>=4.0.0' + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + hash: + md5: 2934f256a8acfe48f6ebb4fce6cde29c + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + category: main + optional: false +- name: annotated-types + version: 0.7.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + typing-extensions: '>=4.0.0' + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + hash: + md5: 2934f256a8acfe48f6ebb4fce6cde29c + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + category: main + optional: false +- name: ansi2html + version: 1.9.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + setuptools: '' + six: '' + url: https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.2-py310hff52083_2.conda + hash: + md5: 7a90a3a962d9765abb9f92b9a7856da7 + sha256: 06aa9664d79589e4623b04648e9782c41f66fd6e2fe86aa85be3d81fc9ee4680 + category: main + optional: false +- name: ansi2html + version: 1.9.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + setuptools: '' + six: '' + url: https://conda.anaconda.org/conda-forge/win-64/ansi2html-1.9.2-py310h5588dad_2.conda + hash: + md5: 585e54873583d7bfe8f492b3dd877894 + sha256: 13e71fa083de77b7ec20bf28672bdf8179ce574d655408238fc203dcd923a189 + category: main + optional: false +- name: anyio + version: 4.8.0 + manager: conda + platform: linux-64 + dependencies: + exceptiongroup: '>=1.0.2' + idna: '>=2.8' + python: '>=3.9' + sniffio: '>=1.1' + typing_extensions: '>=4.5' + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda + hash: + md5: 848d25bfbadf020ee4d4ba90e5668252 + sha256: f1455d2953e3eb6d71bc49881c8558d8e01888469dfd21061dd48afb6183e836 + category: main + optional: false +- name: anyio + version: 4.8.0 + manager: conda + platform: win-64 + dependencies: + exceptiongroup: '>=1.0.2' + idna: '>=2.8' + python: '>=3.9' + sniffio: '>=1.1' + typing_extensions: '>=4.5' + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda + hash: + md5: 848d25bfbadf020ee4d4ba90e5668252 + sha256: f1455d2953e3eb6d71bc49881c8558d8e01888469dfd21061dd48afb6183e836 + category: main + optional: false +- name: aom + version: 3.9.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + hash: + md5: 346722a0be40f6edc53f12640d301338 + sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 + category: main + optional: false +- name: aom + version: 3.7.1 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/aom-3.7.1-h63175ca_0.conda + hash: + md5: 1b52cb3995f780a5c0a52fc1bb81b337 + sha256: aa317fd3271b4fabbfe3b800cc0d55a9bbfb9b5aa7f91bfb08c86f2da08d2729 + category: main + optional: false +- name: argon2-cffi + version: 23.1.0 + manager: conda + platform: linux-64 + dependencies: + argon2-cffi-bindings: '' + python: '>=3.9' + typing-extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + hash: + md5: a7ee488b71c30ada51c48468337b85ba + sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + category: main + optional: false +- name: argon2-cffi + version: 23.1.0 + manager: conda + platform: win-64 + dependencies: + argon2-cffi-bindings: '' + python: '>=3.9' + typing-extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda + hash: + md5: a7ee488b71c30ada51c48468337b85ba + sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f + category: main + optional: false +- name: argon2-cffi-bindings + version: 21.2.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + cffi: '>=1.0.1' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310ha75aee5_5.conda + hash: + md5: a2da54f3a705d518c95a5b6de8ad8af6 + sha256: 1050f55294476b4d9b36ca3cf22b47f2f23d6e143ad6a177025bc5e5984d5409 + category: main + optional: false +- name: argon2-cffi-bindings + version: 21.2.0 + manager: conda + platform: win-64 + dependencies: + cffi: '>=1.0.1' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py310ha8f682b_5.conda + hash: + md5: d18002177f557891c1fc5482da6decd7 + sha256: f0b23aa9a3c27500d58a383d635c01b86ab652c34646c3ad9e89fd82607178a0 + category: main + optional: false +- name: arrow + version: 1.3.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + python-dateutil: '>=2.7.0' + types-python-dateutil: '>=2.8.10' + url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda + hash: + md5: 46b53236fdd990271b03c3978d4218a9 + sha256: c4b0bdb3d5dee50b60db92f99da3e4c524d5240aafc0a5fcc15e45ae2d1a3cd1 + category: main + optional: false +- name: arrow + version: 1.3.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + python-dateutil: '>=2.7.0' + types-python-dateutil: '>=2.8.10' + url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_1.conda + hash: + md5: 46b53236fdd990271b03c3978d4218a9 + sha256: c4b0bdb3d5dee50b60db92f99da3e4c524d5240aafc0a5fcc15e45ae2d1a3cd1 + category: main + optional: false +- name: asciitree + version: 0.3.3 + manager: conda + platform: linux-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 + hash: + md5: c0481c9de49f040272556e2cedf42816 + sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 + category: main + optional: false +- name: asciitree + version: 0.3.3 + manager: conda + platform: win-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 + hash: + md5: c0481c9de49f040272556e2cedf42816 + sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 + category: main + optional: false +- name: astroid + version: 3.3.8 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + typing_extensions: '>=4.0.0' + url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.3.8-py310hff52083_0.conda + hash: + md5: 9afaff1d0f354d98cff43bc80666c428 + sha256: 02c0e9c683002c05958b21427c51e7d0c6b9c212b518a04793ed62d0c7bc31f9 + category: dev + optional: true +- name: astroid + version: 3.3.8 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + typing_extensions: '>=4.0.0' + url: https://conda.anaconda.org/conda-forge/win-64/astroid-3.3.8-py310h5588dad_0.conda + hash: + md5: c54bfa9d47e3a08b15ea6d364890a352 + sha256: 7efa33c85f77a7c9fdc1b1e0a0352503d3c1b59f3539ee7188d00d4ed427e25d + category: dev + optional: true +- name: asttokens + version: 3.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + hash: + md5: 8f587de4bcf981e26228f268df374a9b + sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593 + category: main + optional: false +- name: asttokens + version: 3.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + hash: + md5: 8f587de4bcf981e26228f268df374a9b + sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593 + category: main + optional: false +- name: async-lru + version: 2.0.4 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + typing_extensions: '>=4.0.0' + url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_1.conda + hash: + md5: 40c673c7d585623b8f1ee650c8734eb6 + sha256: 344157f396dfdc929d1dff8fe010abe173cd168d22a56648583e616495f2929e + category: main + optional: false +- name: async-lru + version: 2.0.4 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + typing_extensions: '>=4.0.0' + url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_1.conda + hash: + md5: 40c673c7d585623b8f1ee650c8734eb6 + sha256: 344157f396dfdc929d1dff8fe010abe173cd168d22a56648583e616495f2929e + category: main + optional: false +- name: attr + version: 2.5.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2 + hash: + md5: d9c69a24ad678ffce24c6543a0176b00 + sha256: 82c13b1772c21fc4a17441734de471d3aabf82b61db9b11f4a1bd04a9c4ac324 + category: main + optional: false +- name: attrs + version: 25.1.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/attrs-25.1.0-pyh71513ae_0.conda + hash: + md5: 2cc3f588512f04f3a0c64b4e9bedc02d + sha256: 1f267886522dfb9ae4e5ebbc3135b5eb13cff27bdbfe8d881a4d893459166ab4 + category: main + optional: false +- name: attrs + version: 25.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/attrs-25.1.0-pyh71513ae_0.conda + hash: + md5: 2cc3f588512f04f3a0c64b4e9bedc02d + sha256: 1f267886522dfb9ae4e5ebbc3135b5eb13cff27bdbfe8d881a4d893459166ab4 + category: main + optional: false +- name: babel + version: 2.17.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + pytz: '>=2015.7' + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + hash: + md5: 0a01c169f0ab0f91b26e77a3301fbfe4 + sha256: 1c656a35800b7f57f7371605bc6507c8d3ad60fbaaec65876fce7f73df1fc8ac + category: main + optional: false +- name: babel + version: 2.17.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + pytz: '>=2015.7' + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + hash: + md5: 0a01c169f0ab0f91b26e77a3301fbfe4 + sha256: 1c656a35800b7f57f7371605bc6507c8d3ad60fbaaec65876fce7f73df1fc8ac + category: main + optional: false +- name: beautifulsoup4 + version: 4.13.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + soupsieve: '>=1.2' + typing-extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.3-pyha770c72_0.conda + hash: + md5: 373374a3ed20141090504031dc7b693e + sha256: 4ce42860292a57867cfc81a5d261fb9886fc709a34eca52164cc8bbf6d03de9f + category: main + optional: false +- name: beautifulsoup4 + version: 4.13.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + soupsieve: '>=1.2' + typing-extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.3-pyha770c72_0.conda + hash: + md5: 373374a3ed20141090504031dc7b693e + sha256: 4ce42860292a57867cfc81a5d261fb9886fc709a34eca52164cc8bbf6d03de9f + category: main + optional: false +- name: bleach + version: 6.2.0 + manager: conda + platform: linux-64 + dependencies: + python: '' + webencodings: '' + url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyh29332c3_4.conda + hash: + md5: f0b4c8e370446ef89797608d60a564b3 + sha256: a05971bb80cca50ce9977aad3f7fc053e54ea7d5321523efc7b9a6e12901d3cd + category: main + optional: false +- name: bleach + version: 6.2.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + webencodings: '' + url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyh29332c3_4.conda + hash: + md5: f0b4c8e370446ef89797608d60a564b3 + sha256: a05971bb80cca50ce9977aad3f7fc053e54ea7d5321523efc7b9a6e12901d3cd + category: main + optional: false +- name: bleach-with-css + version: 6.2.0 + manager: conda + platform: linux-64 + dependencies: + bleach: ==6.2.0 + tinycss2: '' + url: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.2.0-h82add2a_4.conda + hash: + md5: a30e9406c873940383555af4c873220d + sha256: 0aba699344275b3972bd751f9403316edea2ceb942db12f9f493b63c74774a46 + category: main + optional: false +- name: bleach-with-css + version: 6.2.0 + manager: conda + platform: win-64 + dependencies: + bleach: ==6.2.0 + tinycss2: '' + url: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.2.0-h82add2a_4.conda + hash: + md5: a30e9406c873940383555af4c873220d + sha256: 0aba699344275b3972bd751f9403316edea2ceb942db12f9f493b63c74774a46 + category: main + optional: false +- name: blinker + version: 1.9.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.9.0-pyhff2d567_0.conda + hash: + md5: 42834439227a4551b939beeeb8a4b085 + sha256: f7efd22b5c15b400ed84a996d777b6327e5c402e79e3c534a7e086236f1eb2dc + category: main + optional: false +- name: blinker + version: 1.9.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.9.0-pyhff2d567_0.conda + hash: + md5: 42834439227a4551b939beeeb8a4b085 + sha256: f7efd22b5c15b400ed84a996d777b6327e5c402e79e3c534a7e086236f1eb2dc + category: main + optional: false +- name: blosc + version: 1.21.5 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + snappy: '>=1.1.10,<1.2.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda + hash: + md5: 009521b7ed97cca25f8f997f9e745976 + sha256: e2b15b017775d1bda8edbb1bc48e545e45364edefa4d926732fc5488cc600731 + category: main + optional: false +- name: blosc + version: 1.21.5 + manager: conda + platform: win-64 + dependencies: + libzlib: '>=1.2.13,<2.0.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + snappy: '>=1.1.10,<1.2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda + hash: + md5: 77a5cea2ce92907b7d1e7954457a526a + sha256: 73cee35e5366ce998ef36ccccb4c11ef9ead297886cc08269379f91539131288 + category: main + optional: false +- name: brotli + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + brotli-bin: 1.1.0 + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + hash: + md5: 98514fe74548d768907ce7a13f680e8f + sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b + category: main + optional: false +- name: brotli + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + brotli-bin: 1.1.0 + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-h2466b09_2.conda + hash: + md5: 378f1c9421775dfe644731cb121c8979 + sha256: d8fd7d1b446706776117d2dcad1c0289b9f5e1521cb13405173bad38568dd252 + category: main + optional: false +- name: brotli-bin + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + hash: + md5: c63b5e52939e795ba8d26e35d767a843 + sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 + category: main + optional: false +- name: brotli-bin + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_2.conda + hash: + md5: d22534a9be5771fc58eb7564947f669d + sha256: f3bf2893613540ac256c68f211861c4de618d96291719e32178d894114ac2bc2 + category: main + optional: false +- name: brotli-python + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda + hash: + md5: bf502c169c71e3c6ac0d6175addfacc2 + sha256: 14f1e89d3888d560a553f40ac5ba83e4435a107552fa5b2b2029a7472554c1ef + category: main + optional: false +- name: brotli-python + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda + hash: + md5: 3a10a1d0cf3ece273195f26191fd6cc6 + sha256: 1b7893a07f2323410b09b63b4627103efa86163be835ac94966333b37741cdc7 + category: main + optional: false +- name: brunsli + version: '0.1' + manager: conda + platform: linux-64 + dependencies: + brotli: '>=1.0.9,<2.0a0' + libgcc-ng: '>=9.3.0' + libstdcxx-ng: '>=9.3.0' + url: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 + hash: + md5: c1ac6229d0bfd14f8354ff9ad2a26cad + sha256: 36da32e5a6beab7a9af39be1c8f42e5eca716e64562cb9d5e0d559c14406b11d + category: main + optional: false +- name: bzip2 + version: 1.0.8 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + hash: + md5: 62ee74e96c5ebb0af99386de58cf9553 + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + category: main + optional: false +- name: bzip2 + version: 1.0.8 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + hash: + md5: 276e7ffe9ffe39688abc665ef0f45596 + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + category: main + optional: false +- name: c-ares + version: 1.34.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda + hash: + md5: e2775acf57efd5af15b8e3d1d74d72d3 + sha256: d4f28d87b6339b94f74762c0076e29c8ef8ddfff51a564a92da2843573c18320 + category: main + optional: false +- name: c-ares + version: 1.34.4 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.4-h2466b09_0.conda + hash: + md5: d387e6f147273d548f068f49a4291aef + sha256: f364f7de63a7c35a62c8d90383dd7747b46fa6b9c35c16c99154a8c45685c86b + category: main + optional: false +- name: c-blosc2 + version: 2.14.3 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + lz4-c: '>=1.9.3,<1.10.0a0' + zlib-ng: '>=2.0.7,<2.1.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.14.3-hb4ffafa_0.conda + hash: + md5: 0673d3714f294406ee458962a212c455 + sha256: 03ebfc1dc25601de3a597132946bec279462278d347e6ab4b74dee882b935a00 + category: main + optional: false +- name: c-blosc2 + version: 2.14.3 + manager: conda + platform: win-64 + dependencies: + lz4-c: '>=1.9.3,<1.10.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zlib-ng: '>=2.0.7,<2.1.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.14.3-h183a6f4_0.conda + hash: + md5: cb3c2e859ac57ae26fe5b0b35546fda9 + sha256: 32aa27a47c96975f28fce8618d57d5d0b2a00cc4dc60836a214732fa1c0e4993 + category: main + optional: false +- name: ca-certificates + version: 2025.1.31 + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda + hash: + md5: 19f3a56f68d2fd06c516076bff482c52 + sha256: bf832198976d559ab44d6cdb315642655547e26d826e34da67cbee6624cda189 + category: main + optional: false +- name: ca-certificates + version: 2025.1.31 + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2025.1.31-h56e8100_0.conda + hash: + md5: 5304a31607974dfc2110dfbb662ed092 + sha256: 1bedccdf25a3bd782d6b0e57ddd97cdcda5501716009f2de4479a779221df155 + category: main + optional: false +- name: cached-property + version: 1.5.2 + manager: conda + platform: linux-64 + dependencies: + cached_property: '>=1.5.2,<1.5.3.0a0' + url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + hash: + md5: 9b347a7ec10940d3f7941ff6c460b551 + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + category: main + optional: false +- name: cached-property + version: 1.5.2 + manager: conda + platform: win-64 + dependencies: + cached_property: '>=1.5.2,<1.5.3.0a0' + url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + hash: + md5: 9b347a7ec10940d3f7941ff6c460b551 + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + category: main + optional: false +- name: cached_property + version: 1.5.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + hash: + md5: 576d629e47797577ab0f1b351297ef4a + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + category: main + optional: false +- name: cached_property + version: 1.5.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + hash: + md5: 576d629e47797577ab0f1b351297ef4a + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + category: main + optional: false +- name: cairo + version: 1.18.0 + manager: conda + platform: linux-64 + dependencies: + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + icu: '>=73.2,<74.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.0,<3.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libstdcxx-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + pixman: '>=0.42.2,<1.0a0' + xorg-libice: '>=1.1.1,<2.0a0' + xorg-libsm: '>=1.2.4,<2.0a0' + xorg-libx11: '>=1.8.6,<2.0a0' + xorg-libxext: '>=1.3.4,<2.0a0' + xorg-libxrender: '>=0.9.11,<0.10.0a0' + zlib: '' + url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda + hash: + md5: f907bb958910dc404647326ca80c263e + sha256: 142e2639a5bc0e99c44d76f4cc8dce9c6a2d87330c4beeabb128832cd871a86e + category: main + optional: false +- name: cairo + version: 1.18.0 + manager: conda + platform: win-64 + dependencies: + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + icu: '>=73.2,<74.0a0' + libglib: '>=2.78.0,<3.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + pixman: '>=0.42.2,<1.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zlib: '' + url: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.0-h1fef639_0.conda + hash: + md5: b3fe2c6381ec74afe8128e16a11eee02 + sha256: 451e714f065b5dd0c11169058be56b10973dfd7d9a0fccf9c6a05d1e09995730 + category: main + optional: false +- name: certifi + version: 2025.1.31 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + hash: + md5: c207fa5ac7ea99b149344385a9c0880d + sha256: 42a78446da06a2568cb13e69be3355169fbd0ea424b00fc80b7d840f5baaacf3 + category: main + optional: false +- name: certifi + version: 2025.1.31 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + hash: + md5: c207fa5ac7ea99b149344385a9c0880d + sha256: 42a78446da06a2568cb13e69be3355169fbd0ea424b00fc80b7d840f5baaacf3 + category: main + optional: false +- name: cffi + version: 1.17.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libffi: '>=3.4,<4.0a0' + libgcc: '>=13' + pycparser: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda + hash: + md5: 1fc24a3196ad5ede2a68148be61894f4 + sha256: 1b389293670268ab80c3b8735bc61bc71366862953e000efbb82204d00e41b6c + category: main + optional: false +- name: cffi + version: 1.17.1 + manager: conda + platform: win-64 + dependencies: + pycparser: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda + hash: + md5: 9c7ec967f4ae263aec56cff05bdbfc07 + sha256: 32638e79658f76e3700f783c519025290110f207833ae1d166d262572cbec8a8 + category: main + optional: false +- name: cfitsio + version: 4.2.0 + manager: conda + platform: linux-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libcurl: '>=7.86.0,<9.0a0' + libgcc-ng: '>=12' + libgfortran-ng: '' + libgfortran5: '>=10.4.0' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.2.0-hd9d235c_0.conda + hash: + md5: 8c57a9adbafd87f5eff842abde599cb4 + sha256: 6409d15f09ae1a1673c971c8f45fc87272d1af569d027efbe16b689a1a8afd0d + category: main + optional: false +- name: cfitsio + version: 4.2.0 + manager: conda + platform: win-64 + dependencies: + libcurl: '>=7.86.0,<9.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/cfitsio-4.2.0-h9ebe7e4_0.conda + hash: + md5: cccd314cbeea4f2f70f73c763d9660e8 + sha256: 18e893342e7ac8254741ea1dbae1b1f8e7771f2fdbb12e591e55f3a0519343ef + category: main + optional: false +- name: charls + version: 2.4.2 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda + hash: + md5: 4336bd67920dd504cd8c6761d6a99645 + sha256: 18f1c43f91ccf28297f92b094c2c8dbe9c6e8241c0d3cbd6cda014a990660fdd + category: main + optional: false +- name: charls + version: 2.4.2 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/charls-2.4.2-h1537add_0.conda + hash: + md5: 0935766a50dfe44315b62ec0046a8779 + sha256: e6a3eab3fe65389900f39a78dc3bd86bbc030e2a746addb8b69a997495ca867c + category: main + optional: false +- name: charset-normalizer + version: 3.4.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + hash: + md5: e83a31202d1c0a000fce3e9cf3825875 + sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b + category: main + optional: false +- name: charset-normalizer + version: 3.4.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + hash: + md5: e83a31202d1c0a000fce3e9cf3825875 + sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b + category: main + optional: false +- name: click + version: 8.1.8 + manager: conda + platform: linux-64 + dependencies: + __unix: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + hash: + md5: f22f4d4970e09d68a10b922cbb0408d3 + sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab + category: main + optional: false +- name: click + version: 8.1.8 + manager: conda + platform: win-64 + dependencies: + __win: '' + colorama: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh7428d3b_0.conda + hash: + md5: 90e5571556f7a45db92ee51cb8f97af6 + sha256: c889ed359ae47eead4ffe8927b7206b22c55e67d6e74a9044c23736919d61e8d + category: main + optional: false +- name: click-plugins + version: 1.1.1 + manager: conda + platform: linux-64 + dependencies: + click: '>=3.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda + hash: + md5: 82bea35e4dac4678ba623cf10e95e375 + sha256: e7e2371a2561fbda9d50deb895d56fb16ccefe54f6d81b35ba8f1d33d3cc6957 + category: main + optional: false +- name: click-plugins + version: 1.1.1 + manager: conda + platform: win-64 + dependencies: + click: '>=3.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-pyhd8ed1ab_1.conda + hash: + md5: 82bea35e4dac4678ba623cf10e95e375 + sha256: e7e2371a2561fbda9d50deb895d56fb16ccefe54f6d81b35ba8f1d33d3cc6957 + category: main + optional: false +- name: cligj + version: 0.7.2 + manager: conda + platform: linux-64 + dependencies: + click: '>=4.0' + python: '>=3.9,<4.0' + url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda + hash: + md5: 55c7804f428719241a90b152016085a1 + sha256: 1a52ae1febfcfb8f56211d1483a1ac4419b0028b7c3e9e61960a298978a42396 + category: main + optional: false +- name: cligj + version: 0.7.2 + manager: conda + platform: win-64 + dependencies: + click: '>=4.0' + python: '>=3.9,<4.0' + url: https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda + hash: + md5: 55c7804f428719241a90b152016085a1 + sha256: 1a52ae1febfcfb8f56211d1483a1ac4419b0028b7c3e9e61960a298978a42396 + category: main + optional: false +- name: cloudpickle + version: 3.1.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + hash: + md5: 364ba6c9fb03886ac979b482f39ebb92 + sha256: 21ecead7268241007bf65691610cd7314da68c1f88113092af690203b5780db5 + category: main + optional: false +- name: cloudpickle + version: 3.1.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + hash: + md5: 364ba6c9fb03886ac979b482f39ebb92 + sha256: 21ecead7268241007bf65691610cd7314da68c1f88113092af690203b5780db5 + category: main + optional: false +- name: colorama + version: 0.4.6 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + hash: + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + category: main + optional: false +- name: colorama + version: 0.4.6 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + hash: + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + category: main + optional: false +- name: comm + version: 0.2.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda + hash: + md5: 74673132601ec2b7fc592755605f4c1b + sha256: 7e87ef7c91574d9fac19faedaaee328a70f718c9b4ddadfdc0ba9ac021bd64af + category: main + optional: false +- name: comm + version: 0.2.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda + hash: + md5: 74673132601ec2b7fc592755605f4c1b + sha256: 7e87ef7c91574d9fac19faedaaee328a70f718c9b4ddadfdc0ba9ac021bd64af + category: main + optional: false +- name: contourpy + version: 1.3.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + numpy: '>=1.23' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py310h3788b33_0.conda + hash: + md5: f993b13665fc2bb262b30217c815d137 + sha256: 1b18ebb72fb20b9ece47c582c6112b1d4f0f7deebaa056eada99e1f994e8a81f + category: main + optional: false +- name: contourpy + version: 1.3.1 + manager: conda + platform: win-64 + dependencies: + numpy: '>=1.23' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.1-py310hc19bc0b_0.conda + hash: + md5: 741bcc6a07e77d3102aa23c580cad4f0 + sha256: b9e50ead1c1a7a7c0bff5b1e72436016037b0187cecba7f626c9feffe5b3deaf + category: main + optional: false +- name: coverage + version: 7.6.12 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tomli: '' + url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.12-py310h89163eb_0.conda + hash: + md5: 6fdad60a1f9adce8c1bf2eca277b3cc8 + sha256: 78cb9ec8b72b52a2846130663a8a54f28a32d3b3560d85eb3bae53e7917c1b94 + category: dev + optional: true +- name: coverage + version: 7.6.12 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tomli: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.12-py310h38315fa_0.conda + hash: + md5: ce4c964daa1f98c5158992352531945e + sha256: 880b8bc206618a9e685cbd22be92f0bc9522f35df94d69cd744449a4e45eb53a + category: dev + optional: true +- name: cpython + version: 3.10.16 + manager: conda + platform: win-64 + dependencies: + python: 3.10.16.* + python_abi: '*' + url: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.16-py310hd8ed1ab_1.conda + hash: + md5: 5c7fe189f8761cd08a69924554c1ffab + sha256: 522b5ff2c5b1ebe0050ad15cd76a1e14696752eead790ab28e29977d7a8a99e6 + category: main + optional: false +- name: cycler + version: 0.12.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + hash: + md5: 44600c4667a319d67dbe0681fc0bc833 + sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c + category: main + optional: false +- name: cycler + version: 0.12.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + hash: + md5: 44600c4667a319d67dbe0681fc0bc833 + sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c + category: main + optional: false +- name: cytoolz + version: 1.0.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + toolz: '>=0.10.0' + url: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py310ha75aee5_0.conda + hash: + md5: d0be1adaa04a03aed745f3d02afb59ce + sha256: b427689dfc24a6a297363122ce10d502ea00ddb3c43af6cff175ff563cc94eea + category: main + optional: false +- name: cytoolz + version: 1.0.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + toolz: '>=0.10.0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/cytoolz-1.0.1-py310ha8f682b_0.conda + hash: + md5: ed2af2a0262d44f753738588640b8534 + sha256: 670800d13b6cd64b8f53756b28254b47cfc177606dcd42094696582335ed0f02 + category: main + optional: false +- name: dash + version: 2.12.1 + manager: conda + platform: linux-64 + dependencies: + ansi2html: '' + flask: '>=1.0.4' + nest-asyncio: '' + plotly: '>=5.0.0' + python: '>=3.6' + requests: '' + retrying: '' + setuptools: '' + typing-extensions: '>=4.1.1' + werkzeug: '' + url: https://conda.anaconda.org/conda-forge/noarch/dash-2.12.1-pyhd8ed1ab_0.conda + hash: + md5: ef8cbf64af2a8f94ab967b6f16fa7f82 + sha256: c4be071de643d7ae26a0c129570d4a0521aa8278a04a4b9f58cc9cd75019b743 + category: main + optional: false +- name: dash + version: 2.12.1 + manager: conda + platform: win-64 + dependencies: + ansi2html: '' + flask: '>=1.0.4' + nest-asyncio: '' + plotly: '>=5.0.0' + python: '>=3.6' + requests: '' + retrying: '' + setuptools: '' + typing-extensions: '>=4.1.1' + werkzeug: '' + url: https://conda.anaconda.org/conda-forge/noarch/dash-2.12.1-pyhd8ed1ab_0.conda + hash: + md5: ef8cbf64af2a8f94ab967b6f16fa7f82 + sha256: c4be071de643d7ae26a0c129570d4a0521aa8278a04a4b9f58cc9cd75019b743 + category: main + optional: false +- name: dash-daq + version: 0.5.0 + manager: conda + platform: linux-64 + dependencies: + dash: '>=1.6.1' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyhd8ed1ab_2.conda + hash: + md5: 0e0f9a45cefd5e52030555503618cb18 + sha256: 3b9d0e8a34c7c3b73a17ab03727304165cb06bb6c833303263f61f109820d4f3 + category: main + optional: false +- name: dash-daq + version: 0.5.0 + manager: conda + platform: win-64 + dependencies: + dash: '>=1.6.1' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/dash-daq-0.5.0-pyhd8ed1ab_2.conda + hash: + md5: 0e0f9a45cefd5e52030555503618cb18 + sha256: 3b9d0e8a34c7c3b73a17ab03727304165cb06bb6c833303263f61f109820d4f3 + category: main + optional: false +- name: dask-core + version: 2024.6.2 + manager: conda + platform: linux-64 + dependencies: + click: '>=8.1' + cloudpickle: '>=1.5.0' + fsspec: '>=2021.09.0' + importlib_metadata: '>=4.13.0' + packaging: '>=20.0' + partd: '>=1.2.0' + python: '>=3.9' + pyyaml: '>=5.3.1' + toolz: '>=0.10.0' + url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.6.2-pyhd8ed1ab_0.conda + hash: + md5: 048ca0ec2cd1f3995d2d36dec0efd99a + sha256: bf240aa576e75cffb7cec1cd86942f9d62b710cee1a737f19ea32636d3f1bcff + category: main + optional: false +- name: dask-core + version: 2024.6.2 + manager: conda + platform: win-64 + dependencies: + click: '>=8.1' + cloudpickle: '>=1.5.0' + fsspec: '>=2021.09.0' + importlib_metadata: '>=4.13.0' + packaging: '>=20.0' + partd: '>=1.2.0' + python: '>=3.9' + pyyaml: '>=5.3.1' + toolz: '>=0.10.0' + url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.6.2-pyhd8ed1ab_0.conda + hash: + md5: 048ca0ec2cd1f3995d2d36dec0efd99a + sha256: bf240aa576e75cffb7cec1cd86942f9d62b710cee1a737f19ea32636d3f1bcff + category: main + optional: false +- name: dataclasses + version: '0.8' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2 + hash: + md5: a362b2124b06aad102e2ee4581acee7d + sha256: 63a83e62e0939bc1ab32de4ec736f6403084198c4639638b354a352113809c92 + category: dev + optional: true +- name: dataclasses + version: '0.8' + manager: conda + platform: win-64 + dependencies: + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2 + hash: + md5: a362b2124b06aad102e2ee4581acee7d + sha256: 63a83e62e0939bc1ab32de4ec736f6403084198c4639638b354a352113809c92 + category: dev + optional: true +- name: dav1d + version: 1.2.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + hash: + md5: 418c6ca5929a611cbd69204907a83995 + sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 + category: main + optional: false +- name: dav1d + version: 1.2.1 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda + hash: + md5: ed2c27bda330e3f0ab41577cf8b9b585 + sha256: 2aa2083c9c186da7d6f975ccfbef654ed54fff27f4bc321dbcd12cee932ec2c4 + category: main + optional: false +- name: dbus + version: 1.13.6 + manager: conda + platform: linux-64 + dependencies: + expat: '>=2.4.2,<3.0a0' + libgcc-ng: '>=9.4.0' + libglib: '>=2.70.2,<3.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + hash: + md5: ecfff944ba3960ecb334b9a2663d708d + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + category: main + optional: false +- name: debugpy + version: 1.8.12 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.12-py310hf71b8c6_0.conda + hash: + md5: 9b1dedfc47e1242253d6e2ca3b864693 + sha256: 1de0f06d106d89355977e859320fb0412d757f62114597f9bd1c4f1b377440c3 + category: main + optional: false +- name: debugpy + version: 1.8.12 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.12-py310h9e98ed7_0.conda + hash: + md5: 6ce8c7ad37a65f7c39014a106e9c38e1 + sha256: fa60c05e1ba14eab7f619a0416764e88c7bb8935b59ee936f2562493f6b5a1f5 + category: main + optional: false +- name: decorator + version: 5.1.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda + hash: + md5: d622d8d7ee8868870f9cbe259f381181 + sha256: 84e5120c97502a3785e8c3241c3bf51f64b4d445f13b4d2445db00d9816fe479 + category: main + optional: false +- name: decorator + version: 5.1.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda + hash: + md5: d622d8d7ee8868870f9cbe259f381181 + sha256: 84e5120c97502a3785e8c3241c3bf51f64b4d445f13b4d2445db00d9816fe479 + category: main + optional: false +- name: defusedxml + version: 0.7.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 961b3a227b437d82ad7054484cfa71b2 + sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be + category: main + optional: false +- name: defusedxml + version: 0.7.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 961b3a227b437d82ad7054484cfa71b2 + sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be + category: main + optional: false +- name: dill + version: 0.3.9 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda + hash: + md5: 5e11310fca410e9f31381157079dee55 + sha256: 499be2f8e4397a46249e8e500535795704af27e56360ae0c964904140b41454a + category: dev + optional: true +- name: dill + version: 0.3.9 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda + hash: + md5: 5e11310fca410e9f31381157079dee55 + sha256: 499be2f8e4397a46249e8e500535795704af27e56360ae0c964904140b41454a + category: dev + optional: true +- name: discretize + version: 0.10.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '>=1.8' + url: https://conda.anaconda.org/conda-forge/linux-64/discretize-0.10.0-py310hcb52e73_1.conda + hash: + md5: 1f0f0e9eb694f1d36ea44e167622fd97 + sha256: 3cfbc4e072448f7e1bbcfdff0c01b18ae67d6d83d12b7585567a4dd057b8c02e + category: main + optional: false +- name: discretize + version: 0.10.0 + manager: conda + platform: win-64 + dependencies: + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '>=1.8' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/discretize-0.10.0-py310h4856b71_1.conda + hash: + md5: 7af88a12920a5b2b5ae459a5dd032019 + sha256: 6170c71a13541cd570afde2d6acfb24f19ced2f3a082c94157ed31d34c92c563 + category: main + optional: false +- name: distributed + version: 2024.6.2 + manager: conda + platform: linux-64 + dependencies: + click: '>=8.0' + cloudpickle: '>=1.5.0' + cytoolz: '>=0.10.1' + dask-core: '>=2024.6.2,<2024.6.3.0a0' + jinja2: '>=2.10.3' + locket: '>=1.0.0' + msgpack-python: '>=1.0.0' + packaging: '>=20.0' + psutil: '>=5.7.2' + python: '>=3.9' + pyyaml: '>=5.3.1' + sortedcontainers: '>=2.0.5' + tblib: '>=1.6.0' + toolz: '>=0.10.0' + tornado: '>=6.0.4' + urllib3: '>=1.24.3' + zict: '>=3.0.0' + url: https://conda.anaconda.org/conda-forge/noarch/distributed-2024.6.2-pyhd8ed1ab_0.conda + hash: + md5: eecb4c188864376d2b45a5afc4bcb2fa + sha256: e322d23e86eb85cf17d096b8ce864d87a509981f372d2c8bfeb085e0397151f1 + category: main + optional: false +- name: distributed + version: 2024.6.2 + manager: conda + platform: win-64 + dependencies: + click: '>=8.0' + cloudpickle: '>=1.5.0' + cytoolz: '>=0.10.1' + dask-core: '>=2024.6.2,<2024.6.3.0a0' + jinja2: '>=2.10.3' + locket: '>=1.0.0' + msgpack-python: '>=1.0.0' + packaging: '>=20.0' + psutil: '>=5.7.2' + python: '>=3.9' + pyyaml: '>=5.3.1' + sortedcontainers: '>=2.0.5' + tblib: '>=1.6.0' + toolz: '>=0.10.0' + tornado: '>=6.0.4' + urllib3: '>=1.24.3' + zict: '>=3.0.0' + url: https://conda.anaconda.org/conda-forge/noarch/distributed-2024.6.2-pyhd8ed1ab_0.conda + hash: + md5: eecb4c188864376d2b45a5afc4bcb2fa + sha256: e322d23e86eb85cf17d096b8ce864d87a509981f372d2c8bfeb085e0397151f1 + category: main + optional: false +- name: docutils + version: '0.19' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2 + hash: + md5: 21b8fa2179290505e607f5ccd65b01b0 + sha256: f3a564449daedafe5931ab4efe7bc4f240182f2b760e7877f15b2898b7f1c988 + category: dev + optional: true +- name: docutils + version: '0.19' + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/win-64/docutils-0.19-py310h5588dad_1.tar.bz2 + hash: + md5: 88111d95b12d83681d0ecdbbc24eee8e + sha256: 6b40f145b1fdf6b45016d29f193a8ca72a9359ea44cc19624901248f7a9b5ba7 + category: dev + optional: true +- name: empymod + version: 2.2.2 + manager: conda + platform: linux-64 + dependencies: + numba: '>=0.47' + python: '>=3.7' + scipy: '>=1.4.0' + url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda + hash: + md5: bebcf8f5112a7d755e2781fe9f87ae7b + sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 + category: main + optional: false +- name: empymod + version: 2.2.2 + manager: conda + platform: win-64 + dependencies: + numba: '>=0.47' + python: '>=3.7' + scipy: '>=1.4.0' + url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.2.2-pyhd8ed1ab_0.conda + hash: + md5: bebcf8f5112a7d755e2781fe9f87ae7b + sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5 + category: main + optional: false +- name: exceptiongroup + version: 1.2.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + hash: + md5: a16662747cdeb9abbac74d0057cc976e + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + category: main + optional: false +- name: exceptiongroup + version: 1.2.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + hash: + md5: a16662747cdeb9abbac74d0057cc976e + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + category: main + optional: false +- name: executing + version: 2.1.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + hash: + md5: ef8b5fca76806159fc25b4f48d8737eb + sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60 + category: main + optional: false +- name: executing + version: 2.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + hash: + md5: ef8b5fca76806159fc25b4f48d8737eb + sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60 + category: main + optional: false +- name: expat + version: 2.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libexpat: 2.6.4 + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.4-h5888daf_0.conda + hash: + md5: 1d6afef758879ef5ee78127eb4cd2c4a + sha256: 1848c7db9e264e3b8036ee133d570dd880422983cd20dd9585a505289606d276 + category: main + optional: false +- name: fasteners + version: '0.19' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.19-pyhd8ed1ab_1.conda + hash: + md5: dbe9d42e94b5ff7af7b7893f4ce052e7 + sha256: 42fb170778b47303e82eddfea9a6d1e1b8af00c927cd5a34595eaa882b903a16 + category: main + optional: false +- name: fasteners + version: '0.19' + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.19-pyhd8ed1ab_1.conda + hash: + md5: dbe9d42e94b5ff7af7b7893f4ce052e7 + sha256: 42fb170778b47303e82eddfea9a6d1e1b8af00c927cd5a34595eaa882b903a16 + category: main + optional: false +- name: fiona + version: 1.9.3 + manager: conda + platform: linux-64 + dependencies: + attrs: '>=17' + click: '>=4.0' + click-plugins: '>=1.0' + cligj: '>=0.5' + gdal: '' + importlib-metadata: '' + libgcc-ng: '>=12' + libgdal: '>=3.6.3,<3.7.0a0' + libstdcxx-ng: '>=12' + munch: '' + numpy: '>=1.21.6,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + setuptools: '' + shapely: '' + six: '>=1.7' + url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.3-py310ha325b7b_0.conda + hash: + md5: 612c0935aa627804826a1bd38694c0d3 + sha256: b5fb73ab2cba0329de9030abb109fc1a4bd12dd9c819674e39a8243a490c02ab + category: main + optional: false +- name: fiona + version: 1.9.3 + manager: conda + platform: win-64 + dependencies: + attrs: '>=17' + click: '>=4.0' + click-plugins: '>=1.0' + cligj: '>=0.5' + gdal: '' + importlib-metadata: '' + libgdal: '>=3.6.3,<3.7.0a0' + munch: '' + numpy: '>=1.21.6,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + setuptools: '' + shapely: '' + six: '>=1.7' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/fiona-1.9.3-py310h4a685fe_0.conda + hash: + md5: f5313037ddbb4119f685ca5ddfc6430f + sha256: 41cd6c9d20f5b4391c83e1e9a40a0d811dde39e8724084c3a79a61b30261e7db + category: main + optional: false +- name: flask + version: 3.1.0 + manager: conda + platform: linux-64 + dependencies: + blinker: '>=1.9' + click: '>=8.1.3' + importlib-metadata: '>=3.6' + itsdangerous: '>=2.2' + jinja2: '>=3.1.2' + python: '>=3.9' + werkzeug: '>=3.1' + url: https://conda.anaconda.org/conda-forge/noarch/flask-3.1.0-pyhff2d567_0.conda + hash: + md5: 3963487fb67f4deb3e16728ad101da7c + sha256: 5eb604e7993c519d8ac5bfe9ce0a50709d4c502bafda4d38f0d4d54da2411a36 + category: main + optional: false +- name: flask + version: 3.1.0 + manager: conda + platform: win-64 + dependencies: + blinker: '>=1.9' + click: '>=8.1.3' + importlib-metadata: '>=3.6' + itsdangerous: '>=2.2' + jinja2: '>=3.1.2' + python: '>=3.9' + werkzeug: '>=3.1' + url: https://conda.anaconda.org/conda-forge/noarch/flask-3.1.0-pyhff2d567_0.conda + hash: + md5: 3963487fb67f4deb3e16728ad101da7c + sha256: 5eb604e7993c519d8ac5bfe9ce0a50709d4c502bafda4d38f0d4d54da2411a36 + category: main + optional: false +- name: font-ttf-dejavu-sans-mono + version: '2.37' + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + hash: + md5: 0c96522c6bdaed4b1566d11387caaf45 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + category: main + optional: false +- name: font-ttf-dejavu-sans-mono + version: '2.37' + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + hash: + md5: 0c96522c6bdaed4b1566d11387caaf45 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + category: main + optional: false +- name: font-ttf-inconsolata + version: '3.000' + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + hash: + md5: 34893075a5c9e55cdafac56607368fc6 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + category: main + optional: false +- name: font-ttf-inconsolata + version: '3.000' + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + hash: + md5: 34893075a5c9e55cdafac56607368fc6 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + category: main + optional: false +- name: font-ttf-source-code-pro + version: '2.038' + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + hash: + md5: 4d59c254e01d9cde7957100457e2d5fb + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + category: main + optional: false +- name: font-ttf-source-code-pro + version: '2.038' + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + hash: + md5: 4d59c254e01d9cde7957100457e2d5fb + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + category: main + optional: false +- name: font-ttf-ubuntu + version: '0.83' + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + hash: + md5: 49023d73832ef61042f6a237cb2687e7 + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + category: main + optional: false +- name: font-ttf-ubuntu + version: '0.83' + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + hash: + md5: 49023d73832ef61042f6a237cb2687e7 + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + category: main + optional: false +- name: fontconfig + version: 2.15.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + freetype: '>=2.12.1,<3.0a0' + libexpat: '>=2.6.3,<3.0a0' + libgcc: '>=13' + libuuid: '>=2.38.1,<3.0a0' + libzlib: '>=1.3.1,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + hash: + md5: 8f5b0b297b59e1ac160ad4beec99dbee + sha256: 7093aa19d6df5ccb6ca50329ef8510c6acb6b0d8001191909397368b65b02113 + category: main + optional: false +- name: fontconfig + version: 2.15.0 + manager: conda + platform: win-64 + dependencies: + freetype: '>=2.12.1,<3.0a0' + libexpat: '>=2.6.3,<3.0a0' + libiconv: '>=1.17,<2.0a0' + libzlib: '>=1.3.1,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.15.0-h765892d_1.conda + hash: + md5: 9bb0026a2131b09404c59c4290c697cd + sha256: ed122fc858fb95768ca9ca77e73c8d9ddc21d4b2e13aaab5281e27593e840691 + category: main + optional: false +- name: fonts-conda-ecosystem + version: '1' + manager: conda + platform: linux-64 + dependencies: + fonts-conda-forge: '' + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + hash: + md5: fee5683a3f04bd15cbd8318b096a27ab + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + category: main + optional: false +- name: fonts-conda-ecosystem + version: '1' + manager: conda + platform: win-64 + dependencies: + fonts-conda-forge: '' + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + hash: + md5: fee5683a3f04bd15cbd8318b096a27ab + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + category: main + optional: false +- name: fonts-conda-forge + version: '1' + manager: conda + platform: linux-64 + dependencies: + font-ttf-dejavu-sans-mono: '' + font-ttf-inconsolata: '' + font-ttf-source-code-pro: '' + font-ttf-ubuntu: '' + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + hash: + md5: f766549260d6815b0c52253f1fb1bb29 + sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 + category: main + optional: false +- name: fonts-conda-forge + version: '1' + manager: conda + platform: win-64 + dependencies: + font-ttf-dejavu-sans-mono: '' + font-ttf-inconsolata: '' + font-ttf-source-code-pro: '' + font-ttf-ubuntu: '' + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + hash: + md5: f766549260d6815b0c52253f1fb1bb29 + sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 + category: main + optional: false +- name: fonttools + version: 4.56.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + brotli: '' + libgcc: '>=13' + munkres: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + unicodedata2: '>=15.1.0' + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.56.0-py310h89163eb_0.conda + hash: + md5: cd3125e1924bd8699dac9989652bca74 + sha256: 751599162ba980477e9267b67d82e116465d0cf69efc52e016e8f72e7f9cdfcd + category: main + optional: false +- name: fonttools + version: 4.56.0 + manager: conda + platform: win-64 + dependencies: + brotli: '' + munkres: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + unicodedata2: '>=15.1.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.56.0-py310h38315fa_0.conda + hash: + md5: fd7c0f52022a6bbd9bc7f71c11faf59c + sha256: 2a431938b39c0ba7edf884c5a03ad6ef5f4ce67cb70f34a9bfac5730114f267f + category: main + optional: false +- name: fqdn + version: 1.5.1 + manager: conda + platform: linux-64 + dependencies: + cached-property: '>=1.3.0' + python: '>=3.9,<4' + url: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + hash: + md5: d3549fd50d450b6d9e7dddff25dd2110 + sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276 + category: main + optional: false +- name: fqdn + version: 1.5.1 + manager: conda + platform: win-64 + dependencies: + cached-property: '>=1.3.0' + python: '>=3.9,<4' + url: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + hash: + md5: d3549fd50d450b6d9e7dddff25dd2110 + sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276 + category: main + optional: false +- name: freetype + version: 2.12.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libpng: '>=1.6.39,<1.7.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + hash: + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + category: main + optional: false +- name: freetype + version: 2.12.1 + manager: conda + platform: win-64 + dependencies: + libpng: '>=1.6.39,<1.7.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + hash: + md5: 3761b23693f768dc75a8fd0a73ca053f + sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 + category: main + optional: false +- name: freexl + version: 2.0.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libexpat: '>=2.6.4,<3.0a0' + libgcc: '>=13' + libiconv: '>=1.17,<2.0a0' + minizip: '>=4.0.7,<5.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda + hash: + md5: ecb5d11305b8ba1801543002e69d2f2f + sha256: c8960e00a6db69b85c16c693ce05484facf20f1a80430552145f652a880e0d2a + category: main + optional: false +- name: freexl + version: 2.0.0 + manager: conda + platform: win-64 + dependencies: + libexpat: '>=2.6.4,<3.0a0' + libiconv: '>=1.17,<2.0a0' + minizip: '>=4.0.7,<5.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/freexl-2.0.0-hf297d47_2.conda + hash: + md5: d6a8059de245e53478b581742b53f71d + sha256: 1e62cbc6daa74656034dc4a6e58faa2d50291719c1cba53cc0b1946f0d2b9404 + category: main + optional: false +- name: fsspec + version: 2022.11.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: eb919f2119a6db5d0192f9e9c3711572 + sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb + category: main + optional: false +- name: fsspec + version: 2022.11.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2022.11.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: eb919f2119a6db5d0192f9e9c3711572 + sha256: 1ba0e6a0c6f023753b6766fda092b333485a7c640f1069a64d003570c652bddb + category: main + optional: false +- name: gdal + version: 3.6.4 + manager: conda + platform: linux-64 + dependencies: + hdf5: '>=1.14.2,<1.14.4.0a0' + libgcc-ng: '>=12' + libgdal: 3.6.4 + libstdcxx-ng: '>=12' + libxml2: '>=2.11.5,<3.0.0a0' + numpy: '>=1.22.4,<2.0a0' + openssl: '>=3.1.3,<4.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.6.4-py310h5c4b078_22.conda + hash: + md5: 6e58319ba956f30cdc8468e944af3166 + sha256: 6d6b3ec5336e794d5117a44c61901f94accd901e286e05b1e440be56256654a7 + category: main + optional: false +- name: gdal + version: 3.6.4 + manager: conda + platform: win-64 + dependencies: + hdf5: '>=1.14.2,<1.14.4.0a0' + libgdal: 3.6.4 + libxml2: '>=2.11.5,<3.0.0a0' + numpy: '>=1.22.4,<2.0a0' + openssl: '>=3.1.3,<4.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/gdal-3.6.4-py310haa9213b_22.conda + hash: + md5: 1efc7ef341d96398a1fcd0a800f052e0 + sha256: e44c1d14e5f290b41ca6d749e09f9edd58b4d66ba47524538e8b5600340b488b + category: main + optional: false +- name: geoana + version: 0.5.0 + manager: conda + platform: linux-64 + dependencies: + libdlf: '' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '>=1.8' + url: https://conda.anaconda.org/conda-forge/linux-64/geoana-0.5.0-py310hcb52e73_4.conda + hash: + md5: 5a70abcb7d771758abdbefe81367085b + sha256: e54743d430e2c98f9d2546cf4420dadccb87a4998ae80fa2985d5a8bd93ade0d + category: main + optional: false +- name: geoana + version: 0.5.0 + manager: conda + platform: win-64 + dependencies: + libdlf: '' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '>=1.8' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/geoana-0.5.0-py310h4856b71_4.conda + hash: + md5: ea10d52800881e088c64ee3f2ea024e8 + sha256: 0cd07365c7d2891e998647a483e2a4590d3c3e52d255eabbdf6162eae527b4c2 + category: main + optional: false +- name: geos + version: 3.12.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda + hash: + md5: 3fdf79ef322c8379ae83be491d805369 + sha256: c80ff0ed71db0d56567ee87df28bc442b596330ac241ab86f488e3139f0e2cae + category: main + optional: false +- name: geos + version: 3.12.0 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/geos-3.12.0-h1537add_0.conda + hash: + md5: 78119c25e59de33135b673375c6fa126 + sha256: 096c45cb03240ae67ff9e09166110a3bd19a5ab20bf7deea8be55557792b9924 + category: main + optional: false +- name: geotiff + version: 1.7.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libstdcxx-ng: '>=12' + libtiff: '>=4.6.0,<4.8.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + proj: '>=9.3.0,<9.3.1.0a0' + zlib: '' + url: https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda + hash: + md5: 1d53ee057d8481bd2b4c2c34c8e92aac + sha256: b00958767cb5607bdb3bbcec0b2056b3e48c0f9e34c31ed8ac01c9bd36704dab + category: main + optional: false +- name: geotiff + version: 1.7.1 + manager: conda + platform: win-64 + dependencies: + libjpeg-turbo: '>=3.0.0,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + proj: '>=9.3.0,<9.3.1.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zlib: '' + url: https://conda.anaconda.org/conda-forge/win-64/geotiff-1.7.1-hcf4a93f_14.conda + hash: + md5: ba4fadef391cfecb95ad9dc8617fe481 + sha256: 12f8e01f8cb4dccfbd16af9f88f81aa6ccda8607d98a9eb1f7f305c3f455439f + category: main + optional: false +- name: gettext + version: 0.23.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + gettext-tools: 0.23.1 + libasprintf: 0.23.1 + libasprintf-devel: 0.23.1 + libgcc: '>=13' + libgettextpo: 0.23.1 + libgettextpo-devel: 0.23.1 + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/gettext-0.23.1-h5888daf_0.conda + hash: + md5: 0754038c806eae440582da1c3af85577 + sha256: 9d93e75a63a8ca8f86d1be09f68f1211754e6f1e9ee4fa6d90b9d46ee0f1dabb + category: main + optional: false +- name: gettext + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + gettext-tools: 0.22.5 + libasprintf: 0.22.5 + libasprintf-devel: 0.22.5 + libgettextpo: 0.22.5 + libgettextpo-devel: 0.22.5 + libiconv: '>=1.17,<2.0a0' + libintl: 0.22.5 + libintl-devel: 0.22.5 + url: https://conda.anaconda.org/conda-forge/win-64/gettext-0.22.5-h5728263_3.conda + hash: + md5: 85bbe942c8b188fa70f6ffb88a80ae2e + sha256: 8cbfe8fc9421438fcfd06e08ace5587dcceb544ce46f773e116e414a51d6b3ff + category: main + optional: false +- name: gettext-tools + version: 0.23.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/gettext-tools-0.23.1-h5888daf_0.conda + hash: + md5: 2f659535feef3cfb782f7053c8775a32 + sha256: dd2b54a823ea994c2a7908fcce40e1e612ca00cb9944f2382624ff2d3aa8db03 + category: main + optional: false +- name: gettext-tools + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + libiconv: '>=1.17,<2.0a0' + libintl: 0.22.5 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/gettext-tools-0.22.5-h5a7288d_3.conda + hash: + md5: 7c631c844abcba0d855c7b6204d42e9d + sha256: 363dcc414ece1d82d5b031afea67901ad03edea6b5f1051bea985e699c090f13 + category: main + optional: false +- name: giflib + version: 5.2.2 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + hash: + md5: 3bf7b9fd5a7136126e0234db4b87c8b6 + sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff + category: main + optional: false +- name: giflib + version: 5.2.2 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/giflib-5.2.2-h64bf75a_0.conda + hash: + md5: 72f424715c78a04fd5b991ee5dca820f + sha256: 85fa240e749a1a88a588b6895c53f253d990697749b3a7b1ed8bb92ebb3d64c8 + category: main + optional: false +- name: glib + version: 2.78.1 + manager: conda + platform: linux-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + glib-tools: 2.78.1 + libgcc-ng: '>=12' + libglib: 2.78.1 + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + python: '*' + url: https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_0.conda + hash: + md5: 43c633c015a361610ee4db2e95f8a517 + sha256: fc052d470898ce222d1087815f3c16a8d32a3ef1afec06c39b892bea2d4b164a + category: main + optional: false +- name: glib + version: 2.78.1 + manager: conda + platform: win-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + glib-tools: 2.78.1 + libglib: 2.78.1 + libzlib: '>=1.2.13,<2.0.0a0' + python: '*' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/glib-2.78.1-h12be248_0.conda + hash: + md5: 55a9176ace9721d0b89cbf99f78e6b04 + sha256: 841ec811330ff4e1f8c30a993ec536778a7332423c9785af69a2b77568b32056 + category: main + optional: false +- name: glib-tools + version: 2.78.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libglib: 2.78.1 + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_0.conda + hash: + md5: 5b4fe75a68cbb95350f47bb9a707b53b + sha256: b1514f0372ff4d7bd2d87001c881c7ee7fc9e28e4e8444ff17dbbea60dd8c9a6 + category: main + optional: false +- name: glib-tools + version: 2.78.1 + manager: conda + platform: win-64 + dependencies: + libglib: 2.78.1 + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.78.1-h12be248_0.conda + hash: + md5: 7d9280579328b01cddbb1c4e91ca2df1 + sha256: c0b909c886088dac3f2224c8bd555ad0ceddd6835a3724f50dd4977ff4cdd93a + category: main + optional: false +- name: graphite2 + version: 1.3.13 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + hash: + md5: f87c7b7c2cb45f323ffbce941c78ab7c + sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add + category: main + optional: false +- name: greenlet + version: 3.1.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.1.1-py310hf71b8c6_1.conda + hash: + md5: 973d74c46d37ed8bbdbe721fb64a4357 + sha256: 5a03a750d23a26a2660799f60a4cce4e951f5a5ee70db97216ae306b82401c61 + category: dev + optional: true +- name: greenlet + version: 3.1.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.1.1-py310h9e98ed7_1.conda + hash: + md5: 7368d01f0332e68d5a2b25638bb8c1f7 + sha256: bcaa2134709970325aa5f7257ed98f519a4f5fe5b8218d0d74b7593a73e86a23 + category: dev + optional: true +- name: gst-plugins-base + version: 1.22.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + alsa-lib: '>=1.2.10,<1.3.0.0a0' + gettext: '>=0.21.1,<1.0a0' + gstreamer: 1.22.7 + libexpat: '>=2.5.0,<3.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.1,<3.0a0' + libogg: '>=1.3.4,<1.4.0a0' + libopus: '>=1.3.1,<2.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libstdcxx-ng: '>=12' + libvorbis: '>=1.3.7,<1.4.0a0' + libxcb: '>=1.15,<1.16.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + xorg-libx11: '>=1.8.7,<2.0a0' + xorg-libxau: '>=1.0.11,<2.0a0' + xorg-libxext: '>=1.3.4,<2.0a0' + xorg-libxrender: '>=0.9.11,<0.10.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda + hash: + md5: 065e2c1d49afa3fdc1a01f1dacd6ab09 + sha256: 190151790cedc719199c783123a9f3ee4e86acd09fee3a6ec33a21cbac20494e + category: main + optional: false +- name: gst-plugins-base + version: 1.22.7 + manager: conda + platform: win-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + gstreamer: 1.22.7 + libglib: '>=2.78.1,<3.0a0' + libogg: '>=1.3.4,<1.4.0a0' + libvorbis: '>=1.3.7,<1.4.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/gst-plugins-base-1.22.7-h001b923_0.conda + hash: + md5: e4b56ad6c21e861456f32bfc79b43c4b + sha256: aa9315d943f1f0c224fbebb72ff802701161d3365415c1ebf3758fac1b5ae214 + category: main + optional: false +- name: gstreamer + version: 1.22.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + gettext: '>=0.21.1,<1.0a0' + glib: '>=2.78.1,<3.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.1,<3.0a0' + libiconv: '>=1.17,<2.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda + hash: + md5: 6c919bafe5e03428a8e2ef319d7ef990 + sha256: d77b2a740acd59c4dd6c9d8fe6e008ee96407b6dcc5cc0b5e27e8c1eec5d22ef + category: main + optional: false +- name: gstreamer + version: 1.22.7 + manager: conda + platform: win-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + glib: '>=2.78.1,<3.0a0' + libglib: '>=2.78.1,<3.0a0' + libiconv: '>=1.17,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/gstreamer-1.22.7-hb4038d2_0.conda + hash: + md5: 9b2f6622276ed34d20eb36e6a4ce2f50 + sha256: 5cb018ed96727ca7a7f8e782f0e2603135541dc011c926e1837f4cf536fc2341 + category: main + optional: false +- name: h11 + version: 0.14.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + hash: + md5: 7ee49e89531c0dcbba9466f6d115d585 + sha256: 622516185a7c740d5c7f27016d0c15b45782c1501e5611deec63fd70344ce7c8 + category: main + optional: false +- name: h11 + version: 0.14.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + hash: + md5: 7ee49e89531c0dcbba9466f6d115d585 + sha256: 622516185a7c740d5c7f27016d0c15b45782c1501e5611deec63fd70344ce7c8 + category: main + optional: false +- name: h2 + version: 4.2.0 + manager: conda + platform: linux-64 + dependencies: + hpack: '>=4.1,<5' + hyperframe: '>=6.1,<7' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda + hash: + md5: b4754fb1bdcb70c8fd54f918301582c6 + sha256: 0aa1cdc67a9fe75ea95b5644b734a756200d6ec9d0dff66530aec3d1c1e9df75 + category: main + optional: false +- name: h2 + version: 4.2.0 + manager: conda + platform: win-64 + dependencies: + hpack: '>=4.1,<5' + hyperframe: '>=6.1,<7' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda + hash: + md5: b4754fb1bdcb70c8fd54f918301582c6 + sha256: 0aa1cdc67a9fe75ea95b5644b734a756200d6ec9d0dff66530aec3d1c1e9df75 + category: main + optional: false +- name: h5py + version: 3.13.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + cached-property: '' + hdf5: '>=1.14.3,<1.14.4.0a0' + libgcc: '>=13' + numpy: '>=1.19,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py310h60e0fe6_100.conda + hash: + md5: 262cb7007454532e0cdf88c34c0c8f41 + sha256: 5907cd4f8a57d899a7319b2668321bda8a91b375b0a5e69a8729160b64600d67 + category: main + optional: false +- name: h5py + version: 3.13.0 + manager: conda + platform: win-64 + dependencies: + cached-property: '' + hdf5: '>=1.14.3,<1.14.4.0a0' + numpy: '>=1.19,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/h5py-3.13.0-nompi_py310h2b0be38_100.conda + hash: + md5: 2ae28abdc4fe8fc89df85659c1cf8103 + sha256: ac37afa6b26272b6b034d91b38e877a905059b526e238391bac500f9249b788b + category: main + optional: false +- name: harfbuzz + version: 8.3.0 + manager: conda + platform: linux-64 + dependencies: + cairo: '>=1.18.0,<2.0a0' + freetype: '>=2.12.1,<3.0a0' + graphite2: '' + icu: '>=73.2,<74.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.1,<3.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda + hash: + md5: 5a6f6c00ef982a9bc83558d9ac8f64a0 + sha256: 4b55aea03b18a4084b750eee531ad978d4a3690f63019132c26c6ad26bbe3aed + category: main + optional: false +- name: hdf4 + version: 4.2.15 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda + hash: + md5: bd77f8da987968ec3927990495dc22e4 + sha256: 0d09b6dc1ce5c4005ae1c6a19dc10767932ef9a5e9c755cfdbb5189ac8fb0684 + category: main + optional: false +- name: hdf4 + version: 4.2.15 + manager: conda + platform: win-64 + dependencies: + libjpeg-turbo: '>=3.0.0,<4.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/hdf4-4.2.15-h5557f11_7.conda + hash: + md5: 84344a916a73727c1326841007b52ca8 + sha256: 52fa5dde69758c19c69ab68a3d7ebfb2c9042e3a55d405c29a59d3b0584fd790 + category: main + optional: false +- name: hdf5 + version: 1.14.3 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libaec: '>=1.1.3,<2.0a0' + libcurl: '>=8.11.1,<9.0a0' + libgcc: '>=13' + libgfortran: '' + libgfortran5: '>=13.3.0' + libstdcxx: '>=13' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda + hash: + md5: e7a7a6e6f70553a31e6e79c65768d089 + sha256: e8669a6d76d415f4fdbe682507ac3a3b39e8f493d2f2bdc520817f80b7cc0753 + category: main + optional: false +- name: hdf5 + version: 1.14.3 + manager: conda + platform: win-64 + dependencies: + libaec: '>=1.1.3,<2.0a0' + libcurl: '>=8.11.1,<9.0a0' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.0,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.3-nompi_hb2c4d47_109.conda + hash: + md5: ebb61f3e8b35cc15e78876649b7246f7 + sha256: d5ada33e119cdd62371c06f60eae6f545de7cea793ab83da2fba428bb1d2f813 + category: main + optional: false +- name: hpack + version: 4.1.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + hash: + md5: 0a802cb9888dd14eeefc611f05c40b6e + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + category: main + optional: false +- name: hpack + version: 4.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + hash: + md5: 0a802cb9888dd14eeefc611f05c40b6e + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + category: main + optional: false +- name: httpcore + version: 1.0.7 + manager: conda + platform: linux-64 + dependencies: + anyio: '>=3.0,<5.0' + certifi: '' + h11: '>=0.13,<0.15' + h2: '>=3,<5' + python: '>=3.8' + sniffio: 1.* + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + hash: + md5: 2ca8e6dbc86525c8b95e3c0ffa26442e + sha256: c84d012a245171f3ed666a8bf9319580c269b7843ffa79f26468842da3abd5df + category: main + optional: false +- name: httpcore + version: 1.0.7 + manager: conda + platform: win-64 + dependencies: + anyio: '>=3.0,<5.0' + certifi: '' + h11: '>=0.13,<0.15' + h2: '>=3,<5' + python: '>=3.8' + sniffio: 1.* + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + hash: + md5: 2ca8e6dbc86525c8b95e3c0ffa26442e + sha256: c84d012a245171f3ed666a8bf9319580c269b7843ffa79f26468842da3abd5df + category: main + optional: false +- name: httpx + version: 0.28.1 + manager: conda + platform: linux-64 + dependencies: + anyio: '' + certifi: '' + httpcore: 1.* + idna: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + hash: + md5: d6989ead454181f4f9bc987d3dc4e285 + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + category: main + optional: false +- name: httpx + version: 0.28.1 + manager: conda + platform: win-64 + dependencies: + anyio: '' + certifi: '' + httpcore: 1.* + idna: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + hash: + md5: d6989ead454181f4f9bc987d3dc4e285 + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + category: main + optional: false +- name: hyperframe + version: 6.1.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + hash: + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + category: main + optional: false +- name: hyperframe + version: 6.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + hash: + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + category: main + optional: false +- name: icu + version: '73.2' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + hash: + md5: cc47e1facc155f91abd89b11e48e72ff + sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8 + category: main + optional: false +- name: icu + version: '73.2' + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/icu-73.2-h63175ca_0.conda + hash: + md5: 0f47d9e3192d9e09ae300da0d28e0f56 + sha256: 423aaa2b69d713520712f55c7c71994b7e6f967824bb39b59ad968e7b209ce8c + category: main + optional: false +- name: idna + version: '3.10' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + hash: + md5: 39a4f67be3286c86d696df570b1201b7 + sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 + category: main + optional: false +- name: idna + version: '3.10' + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + hash: + md5: 39a4f67be3286c86d696df570b1201b7 + sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 + category: main + optional: false +- name: imagecodecs + version: 2024.1.1 + manager: conda + platform: linux-64 + dependencies: + blosc: '>=1.21.5,<2.0a0' + brunsli: '>=0.1,<1.0a0' + bzip2: '>=1.0.8,<2.0a0' + c-blosc2: '>=2.13.2,<2.14.4.0a0' + charls: '>=2.4.2,<2.5.0a0' + giflib: '>=5.2.1,<5.3.0a0' + jxrlib: '>=1.1,<1.2.0a0' + lcms2: '>=2.16,<3.0a0' + lerc: '>=4.0.0,<5.0a0' + libaec: '>=1.1.2,<2.0a0' + libavif16: '>=1.0.1,<2.0a0' + libbrotlicommon: '>=1.1.0,<1.2.0a0' + libbrotlidec: '>=1.1.0,<1.2.0a0' + libbrotlienc: '>=1.1.0,<1.2.0a0' + libdeflate: '>=1.19,<1.20.0a0' + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libjxl: '>=0.10,<0.11.0a0' + libpng: '>=1.6.43,<1.7.0a0' + libstdcxx-ng: '>=12' + libtiff: '>=4.6.0,<4.8.0a0' + libwebp-base: '>=1.3.2,<2.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + libzopfli: '>=1.0.3,<1.1.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + numpy: '>=1.22.4,<2.0a0' + openjpeg: '>=2.5.2,<3.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + snappy: '>=1.1.10,<1.2.0a0' + xz: '>=5.2.6,<6.0a0' + zfp: '>=1.0.1,<2.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2024.1.1-py310h0c5f7e8_2.conda + hash: + md5: 237f004614b9e0c673812890555bf212 + sha256: 5e3de1a61cc99dfa0a4dd90fea4a0a70ac8161d403057545e21237137a3ea212 + category: main + optional: false +- name: imagecodecs + version: 2024.1.1 + manager: conda + platform: win-64 + dependencies: + blosc: '>=1.21.5,<2.0a0' + bzip2: '>=1.0.8,<2.0a0' + c-blosc2: '>=2.13.2,<2.14.4.0a0' + charls: '>=2.4.2,<2.5.0a0' + giflib: '>=5.2.1,<5.3.0a0' + jxrlib: '>=1.1,<1.2.0a0' + lcms2: '>=2.16,<3.0a0' + lerc: '>=4.0.0,<5.0a0' + libaec: '>=1.1.2,<2.0a0' + libavif: '>=1.0.1,<1.0.2.0a0' + libbrotlicommon: '>=1.1.0,<1.2.0a0' + libbrotlidec: '>=1.1.0,<1.2.0a0' + libbrotlienc: '>=1.1.0,<1.2.0a0' + libdeflate: '>=1.19,<1.20.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.43,<1.7.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libwebp-base: '>=1.3.2,<2.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + libzopfli: '>=1.0.3,<1.1.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + numpy: '>=1.22.4,<2.0a0' + openjpeg: '>=2.5.2,<3.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + snappy: '>=1.1.10,<1.2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + xz: '>=5.2.6,<6.0a0' + zfp: '>=1.0.1,<2.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.1.1-py310h32f22c9_2.conda + hash: + md5: 2fda6becf237d6aa629a78658e6a51b6 + sha256: fc410407dd16e7134efde48f06bfc448f22690ca622064c704f8bff38165e459 + category: main + optional: false +- name: imageio + version: 2.37.0 + manager: conda + platform: linux-64 + dependencies: + numpy: '' + pillow: '>=8.3.2' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + hash: + md5: b5577bc2212219566578fd5af9993af6 + sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe + category: main + optional: false +- name: imageio + version: 2.37.0 + manager: conda + platform: win-64 + dependencies: + numpy: '' + pillow: '>=8.3.2' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + hash: + md5: b5577bc2212219566578fd5af9993af6 + sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe + category: main + optional: false +- name: imagesize + version: 1.4.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.4' + url: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 7de5386c8fea29e76b303f37dde4c352 + sha256: c2bfd7043e0c4c12d8b5593de666c1e81d67b83c474a0a79282cc5c4ef845460 + category: dev + optional: true +- name: imagesize + version: 1.4.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.4' + url: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 7de5386c8fea29e76b303f37dde4c352 + sha256: c2bfd7043e0c4c12d8b5593de666c1e81d67b83c474a0a79282cc5c4ef845460 + category: dev + optional: true +- name: importlib-metadata + version: 8.6.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + zipp: '>=0.5' + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + hash: + md5: f4b39bf00c69f56ac01e020ebfac066c + sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + category: main + optional: false +- name: importlib-metadata + version: 8.6.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + zipp: '>=0.5' + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + hash: + md5: f4b39bf00c69f56ac01e020ebfac066c + sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + category: main + optional: false +- name: importlib_metadata + version: 8.6.1 + manager: conda + platform: linux-64 + dependencies: + importlib-metadata: '>=8.6.1,<8.6.2.0a0' + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + hash: + md5: 7f46575a91b1307441abc235d01cab66 + sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + category: main + optional: false +- name: importlib_metadata + version: 8.6.1 + manager: conda + platform: win-64 + dependencies: + importlib-metadata: '>=8.6.1,<8.6.2.0a0' + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + hash: + md5: 7f46575a91b1307441abc235d01cab66 + sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 + category: main + optional: false +- name: importlib_resources + version: 6.5.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + zipp: '>=3.1.0' + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + hash: + md5: c85c76dc67d75619a92f51dfbce06992 + sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + category: main + optional: false +- name: importlib_resources + version: 6.5.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + zipp: '>=3.1.0' + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + hash: + md5: c85c76dc67d75619a92f51dfbce06992 + sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + category: main + optional: false +- name: iniconfig + version: 2.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 6837f3eff7dcea42ecd714ce1ac2b108 + sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca + category: dev + optional: true +- name: iniconfig + version: 2.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 6837f3eff7dcea42ecd714ce1ac2b108 + sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca + category: dev + optional: true +- name: intel-openmp + version: 2023.2.0 + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50497.conda + hash: + md5: a401f3cae152deb75bbed766a90a6312 + sha256: dd9fded25ebe5c66af30ac6e3685146efdc2d7787035f01bfb546b347f138f6f + category: main + optional: false +- name: ipyfilechooser + version: 0.6.0 + manager: conda + platform: linux-64 + dependencies: + ipywidgets: '' + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 77f3e551b6bc450deca63b2f171e0b73 + sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 + category: main + optional: false +- name: ipyfilechooser + version: 0.6.0 + manager: conda + platform: win-64 + dependencies: + ipywidgets: '' + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/ipyfilechooser-0.6.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 77f3e551b6bc450deca63b2f171e0b73 + sha256: eab4aba337b8f41a98bbe123ffa9c6f6408c0a8928c29fdc778c6e293d8d2e94 + category: main + optional: false +- name: ipykernel + version: 6.29.5 + manager: conda + platform: linux-64 + dependencies: + __linux: '' + comm: '>=0.1.1' + debugpy: '>=1.6.5' + ipython: '>=7.23.1' + jupyter_client: '>=6.1.12' + jupyter_core: '>=4.12,!=5.0.*' + matplotlib-inline: '>=0.1' + nest-asyncio: '' + packaging: '' + psutil: '' + python: '>=3.8' + pyzmq: '>=24' + tornado: '>=6.1' + traitlets: '>=5.4.0' + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + hash: + md5: b40131ab6a36ac2c09b7c57d4d3fbf99 + sha256: 33cfd339bb4efac56edf93474b37ddc049e08b1b4930cf036c893cc1f5a1f32a + category: main + optional: false +- name: ipykernel + version: 6.29.5 + manager: conda + platform: win-64 + dependencies: + __win: '' + comm: '>=0.1.1' + debugpy: '>=1.6.5' + ipython: '>=7.23.1' + jupyter_client: '>=6.1.12' + jupyter_core: '>=4.12,!=5.0.*' + matplotlib-inline: '>=0.1' + nest-asyncio: '' + packaging: '' + psutil: '' + python: '>=3.8' + pyzmq: '>=24' + tornado: '>=6.1' + traitlets: '>=5.4.0' + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh4bbf305_0.conda + hash: + md5: 18df5fc4944a679e085e0e8f31775fc8 + sha256: dc569094125127c0078aa536f78733f383dd7e09507277ef8bcd1789786e7086 + category: main + optional: false +- name: ipython + version: 8.32.0 + manager: conda + platform: linux-64 + dependencies: + __unix: '' + decorator: '' + exceptiongroup: '' + jedi: '>=0.16' + matplotlib-inline: '' + pexpect: '>4.3' + pickleshare: '' + prompt-toolkit: '>=3.0.41,<3.1.0' + pygments: '>=2.4.0' + python: '' + stack_data: '' + traitlets: '>=5.13.0' + typing_extensions: '>=4.6' + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.32.0-pyh907856f_0.conda + hash: + md5: 9de86472b8f207fb098c69daaad50e67 + sha256: b1b940cfe85d5f0aaed83ef8c9f07ee80daa68acb05feeb5142d620472b01e0d + category: main + optional: false +- name: ipython + version: 8.32.0 + manager: conda + platform: win-64 + dependencies: + __win: '' + colorama: '' + decorator: '' + exceptiongroup: '' + jedi: '>=0.16' + matplotlib-inline: '' + pickleshare: '' + prompt-toolkit: '>=3.0.41,<3.1.0' + pygments: '>=2.4.0' + python: '>=3.10' + stack_data: '' + traitlets: '>=5.13.0' + typing_extensions: '>=4.6' + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.32.0-pyh9ab4c32_0.conda + hash: + md5: e34c8a3475d6e2743f4f5093a39004fd + sha256: 970b10688d376dd7a9963478e78f80d62708df73b368fed9295ef100a99b6b04 + category: main + optional: false +- name: ipywidgets + version: 8.1.5 + manager: conda + platform: linux-64 + dependencies: + comm: '>=0.1.3' + ipython: '>=6.1.0' + jupyterlab_widgets: '>=3.0.13,<3.1.0' + python: '>=3.9' + traitlets: '>=4.3.1' + widgetsnbextension: '>=4.0.13,<4.1.0' + url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_1.conda + hash: + md5: bb19ad65196475ab6d0bb3532d7f8d96 + sha256: f419657566e3d9bea85b288a0ce3a8e42d76cd82ac1697c6917891df3ae149ab + category: main + optional: false +- name: ipywidgets + version: 8.1.5 + manager: conda + platform: win-64 + dependencies: + comm: '>=0.1.3' + ipython: '>=6.1.0' + jupyterlab_widgets: '>=3.0.13,<3.1.0' + python: '>=3.9' + traitlets: '>=4.3.1' + widgetsnbextension: '>=4.0.13,<4.1.0' + url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_1.conda + hash: + md5: bb19ad65196475ab6d0bb3532d7f8d96 + sha256: f419657566e3d9bea85b288a0ce3a8e42d76cd82ac1697c6917891df3ae149ab + category: main + optional: false +- name: isoduration + version: 20.11.0 + manager: conda + platform: linux-64 + dependencies: + arrow: '>=0.15.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + hash: + md5: 0b0154421989637d424ccf0f104be51a + sha256: 08e838d29c134a7684bca0468401d26840f41c92267c4126d7b43a6b533b0aed + category: main + optional: false +- name: isoduration + version: 20.11.0 + manager: conda + platform: win-64 + dependencies: + arrow: '>=0.15.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + hash: + md5: 0b0154421989637d424ccf0f104be51a + sha256: 08e838d29c134a7684bca0468401d26840f41c92267c4126d7b43a6b533b0aed + category: main + optional: false +- name: isort + version: 6.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9,<4.0' + setuptools: '' + url: https://conda.anaconda.org/conda-forge/noarch/isort-6.0.0-pyhd8ed1ab_0.conda + hash: + md5: 5e4f9eef5749c5ce6457321a3f8bd405 + sha256: 6cd5e7e86ec3d674311cbcdd5943a1c1508ff12b0e28006d919f69391f18dd15 + category: dev + optional: true +- name: isort + version: 6.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9,<4.0' + setuptools: '' + url: https://conda.anaconda.org/conda-forge/noarch/isort-6.0.0-pyhd8ed1ab_0.conda + hash: + md5: 5e4f9eef5749c5ce6457321a3f8bd405 + sha256: 6cd5e7e86ec3d674311cbcdd5943a1c1508ff12b0e28006d919f69391f18dd15 + category: dev + optional: true +- name: itsdangerous + version: 2.2.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda + hash: + md5: 7ac5f795c15f288984e32add616cdc59 + sha256: 1684b7b16eec08efef5302ce298c606b163c18272b69a62b666fbaa61516f170 + category: main + optional: false +- name: itsdangerous + version: 2.2.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda + hash: + md5: 7ac5f795c15f288984e32add616cdc59 + sha256: 1684b7b16eec08efef5302ce298c606b163c18272b69a62b666fbaa61516f170 + category: main + optional: false +- name: jedi + version: 0.19.2 + manager: conda + platform: linux-64 + dependencies: + parso: '>=0.8.3,<0.9.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + hash: + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + category: main + optional: false +- name: jedi + version: 0.19.2 + manager: conda + platform: win-64 + dependencies: + parso: '>=0.8.3,<0.9.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + hash: + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + category: main + optional: false +- name: jinja2 + version: 3.1.5 + manager: conda + platform: linux-64 + dependencies: + markupsafe: '>=2.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + hash: + md5: 2752a6ed44105bfb18c9bef1177d9dcd + sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3 + category: main + optional: false +- name: jinja2 + version: 3.1.5 + manager: conda + platform: win-64 + dependencies: + markupsafe: '>=2.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + hash: + md5: 2752a6ed44105bfb18c9bef1177d9dcd + sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3 + category: main + optional: false +- name: joblib + version: 1.4.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + setuptools: '' + url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + hash: + md5: bf8243ee348f3a10a14ed0cae323e0c1 + sha256: 51cc2dc491668af0c4d9299b0ab750f16ccf413ec5e2391b924108c1fbacae9b + category: main + optional: false +- name: joblib + version: 1.4.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + setuptools: '' + url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + hash: + md5: bf8243ee348f3a10a14ed0cae323e0c1 + sha256: 51cc2dc491668af0c4d9299b0ab750f16ccf413ec5e2391b924108c1fbacae9b + category: main + optional: false +- name: json-c + version: '0.17' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/json-c-0.17-h1220068_1.conda + hash: + md5: f8f0f0c4338bad5c34a4e9e11460481d + sha256: 0caf06ccfbd6f9a7b3a1e09fa83e318c9e84f2d1c1003a9e486f2600f4096720 + category: main + optional: false +- name: json5 + version: 0.10.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.10.0-pyhd8ed1ab_1.conda + hash: + md5: cd170f82d8e5b355dfdea6adab23e4af + sha256: 61bca2dac194c44603446944745566d7b4e55407280f6f6cea8bbe4de26b558f + category: main + optional: false +- name: json5 + version: 0.10.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.10.0-pyhd8ed1ab_1.conda + hash: + md5: cd170f82d8e5b355dfdea6adab23e4af + sha256: 61bca2dac194c44603446944745566d7b4e55407280f6f6cea8bbe4de26b558f + category: main + optional: false +- name: jsonpointer + version: 3.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py310hff52083_1.conda + hash: + md5: ce614a01b0aee1b29cee13d606bcb5d5 + sha256: ac8e92806a5017740b9a1113f0cab8559cd33884867ec7e99b556eb2fa847690 + category: main + optional: false +- name: jsonpointer + version: 3.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/win-64/jsonpointer-3.0.0-py310h5588dad_1.conda + hash: + md5: 6810fe21e6fa93f073584994ea178a12 + sha256: 8fa0874cd000f5592719f084abdeeffdb9cf096cc1ba09d45c265bb149a2ad63 + category: main + optional: false +- name: jsonschema + version: 4.23.0 + manager: conda + platform: linux-64 + dependencies: + attrs: '>=22.2.0' + importlib_resources: '>=1.4.0' + jsonschema-specifications: '>=2023.03.6' + pkgutil-resolve-name: '>=1.3.10' + python: '>=3.9' + referencing: '>=0.28.4' + rpds-py: '>=0.7.1' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + hash: + md5: a3cead9264b331b32fe8f0aabc967522 + sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + category: main + optional: false +- name: jsonschema + version: 4.23.0 + manager: conda + platform: win-64 + dependencies: + attrs: '>=22.2.0' + importlib_resources: '>=1.4.0' + jsonschema-specifications: '>=2023.03.6' + pkgutil-resolve-name: '>=1.3.10' + python: '>=3.9' + referencing: '>=0.28.4' + rpds-py: '>=0.7.1' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda + hash: + md5: a3cead9264b331b32fe8f0aabc967522 + sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 + category: main + optional: false +- name: jsonschema-specifications + version: 2024.10.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + referencing: '>=0.31.0' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda + hash: + md5: 3b519bc21bc80e60b456f1e62962a766 + sha256: 37127133837444cf0e6d1a95ff5a505f8214ed4e89e8e9343284840e674c6891 + category: main + optional: false +- name: jsonschema-specifications + version: 2024.10.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + referencing: '>=0.31.0' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda + hash: + md5: 3b519bc21bc80e60b456f1e62962a766 + sha256: 37127133837444cf0e6d1a95ff5a505f8214ed4e89e8e9343284840e674c6891 + category: main + optional: false +- name: jsonschema-with-format-nongpl + version: 4.23.0 + manager: conda + platform: linux-64 + dependencies: + fqdn: '' + idna: '' + isoduration: '' + jsonpointer: '>1.13' + jsonschema: '>=4.23.0,<4.23.1.0a0' + rfc3339-validator: '' + rfc3986-validator: '>0.1.0' + uri-template: '' + webcolors: '>=24.6.0' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + hash: + md5: a5b1a8065857cc4bd8b7a38d063bb728 + sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + category: main + optional: false +- name: jsonschema-with-format-nongpl + version: 4.23.0 + manager: conda + platform: win-64 + dependencies: + fqdn: '' + idna: '' + isoduration: '' + jsonpointer: '>1.13' + jsonschema: '>=4.23.0,<4.23.1.0a0' + rfc3339-validator: '' + rfc3986-validator: '>0.1.0' + uri-template: '' + webcolors: '>=24.6.0' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_1.conda + hash: + md5: a5b1a8065857cc4bd8b7a38d063bb728 + sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d + category: main + optional: false +- name: jupyter-book + version: 1.0.3 + manager: conda + platform: linux-64 + dependencies: + click: '>=7.1,<9' + importlib-metadata: '>=4.8.3' + jinja2: '' + jsonschema: <5 + linkify-it-py: '>=2,<3' + myst-nb: '>=1,<3' + myst-parser: '>=1,<3' + python: '>=3.9' + pyyaml: '' + sphinx: '>=5,<8' + sphinx-book-theme: '>=1.1.0,<2' + sphinx-comments: '' + sphinx-copybutton: '' + sphinx-design: '>=0.5,<1' + sphinx-external-toc: '>=1.0.1,<2' + sphinx-jupyterbook-latex: '>=1,<2' + sphinx-multitoc-numbering: '>=0.1.3,<1' + sphinx-thebe: '>=0.3.1,<1' + sphinx-togglebutton: '' + sphinxcontrib-bibtex: '>=2.5.0,<3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-book-1.0.3-pyhd8ed1ab_1.conda + hash: + md5: 739a29ac73026e68405153b50d0c60c2 + sha256: f028c32b5d97d24df44b1a41f771a9932e07815c60c02e24acd9bd2eca31097f + category: dev + optional: true +- name: jupyter-book + version: 1.0.3 + manager: conda + platform: win-64 + dependencies: + click: '>=7.1,<9' + importlib-metadata: '>=4.8.3' + jinja2: '' + jsonschema: <5 + linkify-it-py: '>=2,<3' + myst-nb: '>=1,<3' + myst-parser: '>=1,<3' + python: '>=3.9' + pyyaml: '' + sphinx: '>=5,<8' + sphinx-book-theme: '>=1.1.0,<2' + sphinx-comments: '' + sphinx-copybutton: '' + sphinx-design: '>=0.5,<1' + sphinx-external-toc: '>=1.0.1,<2' + sphinx-jupyterbook-latex: '>=1,<2' + sphinx-multitoc-numbering: '>=0.1.3,<1' + sphinx-thebe: '>=0.3.1,<1' + sphinx-togglebutton: '' + sphinxcontrib-bibtex: '>=2.5.0,<3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-book-1.0.3-pyhd8ed1ab_1.conda + hash: + md5: 739a29ac73026e68405153b50d0c60c2 + sha256: f028c32b5d97d24df44b1a41f771a9932e07815c60c02e24acd9bd2eca31097f + category: dev + optional: true +- name: jupyter-cache + version: 1.0.1 + manager: conda + platform: linux-64 + dependencies: + attrs: '' + click: '' + importlib-metadata: '' + nbclient: '>=0.2' + nbformat: '' + python: '>=3.9' + pyyaml: '' + sqlalchemy: '>=1.3.12,<3' + tabulate: '' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda + hash: + md5: b0ee650829b8974202a7abe7f8b81e5a + sha256: 054d397dd45ed08bffb0976702e553dfb0d0b0a477da9cff36e2ea702e928f48 + category: dev + optional: true +- name: jupyter-cache + version: 1.0.1 + manager: conda + platform: win-64 + dependencies: + attrs: '' + click: '' + importlib-metadata: '' + nbclient: '>=0.2' + nbformat: '' + python: '>=3.9' + pyyaml: '' + sqlalchemy: '>=1.3.12,<3' + tabulate: '' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda + hash: + md5: b0ee650829b8974202a7abe7f8b81e5a + sha256: 054d397dd45ed08bffb0976702e553dfb0d0b0a477da9cff36e2ea702e928f48 + category: dev + optional: true +- name: jupyter-lsp + version: 2.2.5 + manager: conda + platform: linux-64 + dependencies: + importlib-metadata: '>=4.8.3' + jupyter_server: '>=1.1.2' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + hash: + md5: 0b4c3908e5a38ea22ebb98ee5888c768 + sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + category: main + optional: false +- name: jupyter-lsp + version: 2.2.5 + manager: conda + platform: win-64 + dependencies: + importlib-metadata: '>=4.8.3' + jupyter_server: '>=1.1.2' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_1.conda + hash: + md5: 0b4c3908e5a38ea22ebb98ee5888c768 + sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196 + category: main + optional: false +- name: jupyter_client + version: 8.6.3 + manager: conda + platform: linux-64 + dependencies: + importlib-metadata: '>=4.8.3' + jupyter_core: '>=4.12,!=5.0.*' + python: '>=3.9' + python-dateutil: '>=2.8.2' + pyzmq: '>=23.0' + tornado: '>=6.2' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + hash: + md5: 4ebae00eae9705b0c3d6d1018a81d047 + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + category: main + optional: false +- name: jupyter_client + version: 8.6.3 + manager: conda + platform: win-64 + dependencies: + importlib-metadata: '>=4.8.3' + jupyter_core: '>=4.12,!=5.0.*' + python: '>=3.9' + python-dateutil: '>=2.8.2' + pyzmq: '>=23.0' + tornado: '>=6.2' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + hash: + md5: 4ebae00eae9705b0c3d6d1018a81d047 + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + category: main + optional: false +- name: jupyter_core + version: 5.7.2 + manager: conda + platform: linux-64 + dependencies: + __unix: '' + platformdirs: '>=2.5' + python: '>=3.8' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + hash: + md5: 0a2980dada0dd7fd0998f0342308b1b1 + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + category: main + optional: false +- name: jupyter_core + version: 5.7.2 + manager: conda + platform: win-64 + dependencies: + __win: '' + cpython: '' + platformdirs: '>=2.5' + python: '>=3.8' + pywin32: '>=300' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda + hash: + md5: 46d87d1c0ea5da0aae36f77fa406e20d + sha256: 7c903b2d62414c3e8da1f78db21f45b98de387aae195f8ca959794113ba4b3fd + category: main + optional: false +- name: jupyter_events + version: 0.12.0 + manager: conda + platform: linux-64 + dependencies: + jsonschema-with-format-nongpl: '>=4.18.0' + packaging: '' + python: '' + python-json-logger: '>=2.0.4' + pyyaml: '>=5.3' + referencing: '' + rfc3339-validator: '' + rfc3986-validator: '>=0.1.1' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyh29332c3_0.conda + hash: + md5: f56000b36f09ab7533877e695e4e8cb0 + sha256: 37e6ac3ccf7afcc730c3b93cb91a13b9ae827fd306f35dd28f958a74a14878b5 + category: main + optional: false +- name: jupyter_events + version: 0.12.0 + manager: conda + platform: win-64 + dependencies: + jsonschema-with-format-nongpl: '>=4.18.0' + packaging: '' + python: '>=3.9' + python-json-logger: '>=2.0.4' + pyyaml: '>=5.3' + referencing: '' + rfc3339-validator: '' + rfc3986-validator: '>=0.1.1' + traitlets: '>=5.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyh29332c3_0.conda + hash: + md5: f56000b36f09ab7533877e695e4e8cb0 + sha256: 37e6ac3ccf7afcc730c3b93cb91a13b9ae827fd306f35dd28f958a74a14878b5 + category: main + optional: false +- name: jupyter_server + version: 2.15.0 + manager: conda + platform: linux-64 + dependencies: + anyio: '>=3.1.0' + argon2-cffi: '>=21.1' + jinja2: '>=3.0.3' + jupyter_client: '>=7.4.4' + jupyter_core: '>=4.12,!=5.0.*' + jupyter_events: '>=0.11.0' + jupyter_server_terminals: '>=0.4.4' + nbconvert-core: '>=6.4.4' + nbformat: '>=5.3.0' + overrides: '>=5.0' + packaging: '>=22.0' + prometheus_client: '>=0.9' + python: '>=3.9' + pyzmq: '>=24' + send2trash: '>=1.8.2' + terminado: '>=0.8.3' + tornado: '>=6.2.0' + traitlets: '>=5.6.0' + websocket-client: '>=1.7' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.15.0-pyhd8ed1ab_0.conda + hash: + md5: 6ba8c206b5c6f52b82435056cf74ee46 + sha256: be5f9774065d94c4a988f53812b83b67618bec33fcaaa005a98067d506613f8a + category: main + optional: false +- name: jupyter_server + version: 2.15.0 + manager: conda + platform: win-64 + dependencies: + anyio: '>=3.1.0' + argon2-cffi: '>=21.1' + jinja2: '>=3.0.3' + jupyter_client: '>=7.4.4' + jupyter_core: '>=4.12,!=5.0.*' + jupyter_events: '>=0.11.0' + jupyter_server_terminals: '>=0.4.4' + nbconvert-core: '>=6.4.4' + nbformat: '>=5.3.0' + overrides: '>=5.0' + packaging: '>=22.0' + prometheus_client: '>=0.9' + python: '>=3.9' + pyzmq: '>=24' + send2trash: '>=1.8.2' + terminado: '>=0.8.3' + tornado: '>=6.2.0' + traitlets: '>=5.6.0' + websocket-client: '>=1.7' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.15.0-pyhd8ed1ab_0.conda + hash: + md5: 6ba8c206b5c6f52b82435056cf74ee46 + sha256: be5f9774065d94c4a988f53812b83b67618bec33fcaaa005a98067d506613f8a + category: main + optional: false +- name: jupyter_server_terminals + version: 0.5.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + terminado: '>=0.8.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_1.conda + hash: + md5: 2d983ff1b82a1ccb6f2e9d8784bdd6bd + sha256: 0890fc79422191bc29edf17d7b42cff44ba254aa225d31eb30819f8772b775b8 + category: main + optional: false +- name: jupyter_server_terminals + version: 0.5.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + terminado: '>=0.8.3' + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_1.conda + hash: + md5: 2d983ff1b82a1ccb6f2e9d8784bdd6bd + sha256: 0890fc79422191bc29edf17d7b42cff44ba254aa225d31eb30819f8772b775b8 + category: main + optional: false +- name: jupyterlab + version: 4.3.5 + manager: conda + platform: linux-64 + dependencies: + async-lru: '>=1.0.0' + httpx: '>=0.25.0' + importlib-metadata: '>=4.8.3' + ipykernel: '>=6.5.0' + jinja2: '>=3.0.3' + jupyter-lsp: '>=2.0.0' + jupyter_core: '' + jupyter_server: '>=2.4.0,<3' + jupyterlab_server: '>=2.27.1,<3' + notebook-shim: '>=0.2' + packaging: '' + python: '>=3.9' + setuptools: '>=40.8.0' + tomli: '>=1.2.2' + tornado: '>=6.2.0' + traitlets: '' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.3.5-pyhd8ed1ab_0.conda + hash: + md5: ec1f95d39ec862a7a87de0662a98ce3e + sha256: 9d033314060993522e1ad999ded9da316a8b928d11b7a58c254597382239a72e + category: main + optional: false +- name: jupyterlab + version: 4.3.5 + manager: conda + platform: win-64 + dependencies: + async-lru: '>=1.0.0' + httpx: '>=0.25.0' + importlib-metadata: '>=4.8.3' + ipykernel: '>=6.5.0' + jinja2: '>=3.0.3' + jupyter-lsp: '>=2.0.0' + jupyter_core: '' + jupyter_server: '>=2.4.0,<3' + jupyterlab_server: '>=2.27.1,<3' + notebook-shim: '>=0.2' + packaging: '' + python: '>=3.9' + setuptools: '>=40.8.0' + tomli: '>=1.2.2' + tornado: '>=6.2.0' + traitlets: '' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.3.5-pyhd8ed1ab_0.conda + hash: + md5: ec1f95d39ec862a7a87de0662a98ce3e + sha256: 9d033314060993522e1ad999ded9da316a8b928d11b7a58c254597382239a72e + category: main + optional: false +- name: jupyterlab_pygments + version: 0.3.0 + manager: conda + platform: linux-64 + dependencies: + pygments: '>=2.4.1,<3' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + hash: + md5: fd312693df06da3578383232528c468d + sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0 + category: main + optional: false +- name: jupyterlab_pygments + version: 0.3.0 + manager: conda + platform: win-64 + dependencies: + pygments: '>=2.4.1,<3' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + hash: + md5: fd312693df06da3578383232528c468d + sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0 + category: main + optional: false +- name: jupyterlab_server + version: 2.27.3 + manager: conda + platform: linux-64 + dependencies: + babel: '>=2.10' + importlib-metadata: '>=4.8.3' + jinja2: '>=3.0.3' + json5: '>=0.9.0' + jsonschema: '>=4.18' + jupyter_server: '>=1.21,<3' + packaging: '>=21.3' + python: '>=3.9' + requests: '>=2.31' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_1.conda + hash: + md5: 9dc4b2b0f41f0de41d27f3293e319357 + sha256: d03d0b7e23fa56d322993bc9786b3a43b88ccc26e58b77c756619a921ab30e86 + category: main + optional: false +- name: jupyterlab_server + version: 2.27.3 + manager: conda + platform: win-64 + dependencies: + babel: '>=2.10' + importlib-metadata: '>=4.8.3' + jinja2: '>=3.0.3' + json5: '>=0.9.0' + jsonschema: '>=4.18' + jupyter_server: '>=1.21,<3' + packaging: '>=21.3' + python: '>=3.9' + requests: '>=2.31' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_1.conda + hash: + md5: 9dc4b2b0f41f0de41d27f3293e319357 + sha256: d03d0b7e23fa56d322993bc9786b3a43b88ccc26e58b77c756619a921ab30e86 + category: main + optional: false +- name: jupyterlab_widgets + version: 3.0.13 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_1.conda + hash: + md5: b26e487434032d7f486277beb0cead3a + sha256: 206489e417408d2ffc2a7b245008b4735a8beb59df6c9109d4f77e7bc5969d5d + category: main + optional: false +- name: jupyterlab_widgets + version: 3.0.13 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_1.conda + hash: + md5: b26e487434032d7f486277beb0cead3a + sha256: 206489e417408d2ffc2a7b245008b4735a8beb59df6c9109d4f77e7bc5969d5d + category: main + optional: false +- name: jupytext + version: 1.16.7 + manager: conda + platform: linux-64 + dependencies: + markdown-it-py: '>=1.0' + mdit-py-plugins: '' + nbformat: '' + packaging: '' + python: '>=3.9' + pyyaml: '' + tomli: '' + url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.7-pyhbbac1ac_0.conda + hash: + md5: f5abe5ee23914325837250927f20e623 + sha256: cfbd169b6d64c983e74c5fdfbaac1128209017ebd0992f163c13dadea71f606e + category: dev + optional: true +- name: jupytext + version: 1.16.7 + manager: conda + platform: win-64 + dependencies: + markdown-it-py: '>=1.0' + mdit-py-plugins: '' + nbformat: '' + packaging: '' + python: '>=3.9' + pyyaml: '' + tomli: '' + url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.7-pyhbbac1ac_0.conda + hash: + md5: f5abe5ee23914325837250927f20e623 + sha256: cfbd169b6d64c983e74c5fdfbaac1128209017ebd0992f163c13dadea71f606e + category: dev + optional: true +- name: jxrlib + version: '1.1' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + hash: + md5: 5aeabe88534ea4169d4c49998f293d6c + sha256: 2057ca87b313bde5b74b93b0e696f8faab69acd4cb0edebb78469f3f388040c0 + category: main + optional: false +- name: jxrlib + version: '1.1' + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-hcfcfb64_3.conda + hash: + md5: a9dff8432c11dfa980346e934c29ca3f + sha256: a9ac265bcf65fce57cfb6512a1b072d5489445d14aa1b60c9bdf73370cf261b2 + category: main + optional: false +- name: kealib + version: 1.5.3 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + hdf5: '>=1.14.3,<1.14.4.0a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-hf8d3e68_2.conda + hash: + md5: ffe68c611ae0ccfda4e7a605195e22b3 + sha256: a45cb038fce2b6fa154cf0c71485a75b59cb1d8d6b0465bdcb23736aca6bf2ac + category: main + optional: false +- name: kealib + version: 1.5.3 + manager: conda + platform: win-64 + dependencies: + hdf5: '>=1.14.3,<1.14.4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/kealib-1.5.3-h6c43f9b_2.conda + hash: + md5: 873b3deabbefe46d00cc81ce7d9547a7 + sha256: 19c981a049651439cfd851bbf785144d0f10db1f605ce19001a8eb27da6def94 + category: main + optional: false +- name: keyutils + version: 1.6.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=10.3.0' + url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + hash: + md5: 30186d27e2c9fa62b45fb1476b7200e3 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + category: main + optional: false +- name: kiwisolver + version: 1.4.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py310h3788b33_0.conda + hash: + md5: 4186d9b4d004b0fe0de6aa62496fb48a + sha256: d97a9894803674e4f8155a5e98a49337d28bdee77dfd87e1614a824d190cd086 + category: main + optional: false +- name: kiwisolver + version: 1.4.7 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.7-py310hc19bc0b_0.conda + hash: + md5: 50d96539497fc7493cbe469fbb6b8b6e + sha256: a87dff54b753a2ee19188ab9491a63d40a08873f17c7797cd5c44467a2ff4f12 + category: main + optional: false +- name: krb5 + version: 1.21.3 + manager: conda + platform: linux-64 + dependencies: + keyutils: '>=1.6.1,<2.0a0' + libedit: '>=3.1.20191231,<4.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + openssl: '>=3.3.1,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + hash: + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + category: main + optional: false +- name: krb5 + version: 1.21.3 + manager: conda + platform: win-64 + dependencies: + openssl: '>=3.3.1,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda + hash: + md5: 31aec030344e962fbd7dbbbbd68e60a9 + sha256: 18e8b3430d7d232dad132f574268f56b3eb1a19431d6d5de8c53c29e6c18fa81 + category: main + optional: false +- name: lame + version: '3.100' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + hash: + md5: a8832b479f93521a9e7b5b743803be51 + sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab + category: main + optional: false +- name: latexcodec + version: 2.0.1 + manager: conda + platform: linux-64 + dependencies: + python: '' + six: '' + url: https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2 + hash: + md5: 8d67904973263afd2985ba56aa2d6bb4 + sha256: 5210d31c8f2402dd1ad1b3edcf7a53292b9da5de20cd14d9c243dbf9278b1c4f + category: dev + optional: true +- name: latexcodec + version: 2.0.1 + manager: conda + platform: win-64 + dependencies: + python: '' + six: '' + url: https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2 + hash: + md5: 8d67904973263afd2985ba56aa2d6bb4 + sha256: 5210d31c8f2402dd1ad1b3edcf7a53292b9da5de20cd14d9c243dbf9278b1c4f + category: dev + optional: true +- name: lazy-loader + version: '0.4' + manager: conda + platform: linux-64 + dependencies: + importlib-metadata: '' + packaging: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + hash: + md5: d10d9393680734a8febc4b362a4c94f2 + sha256: d7ea986507090fff801604867ef8e79c8fda8ec21314ba27c032ab18df9c3411 + category: main + optional: false +- name: lazy-loader + version: '0.4' + manager: conda + platform: win-64 + dependencies: + importlib-metadata: '' + packaging: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda + hash: + md5: d10d9393680734a8febc4b362a4c94f2 + sha256: d7ea986507090fff801604867ef8e79c8fda8ec21314ba27c032ab18df9c3411 + category: main + optional: false +- name: lazy_loader + version: '0.4' + manager: conda + platform: linux-64 + dependencies: + lazy-loader: '0.4' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda + hash: + md5: bb0230917e2473c77d615104dbe8a49d + sha256: e26803188a54cd90df9ce1983af70b287c4918c0fd178a9aabd9f1580f657a2b + category: main + optional: false +- name: lazy_loader + version: '0.4' + manager: conda + platform: win-64 + dependencies: + lazy-loader: '0.4' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda + hash: + md5: bb0230917e2473c77d615104dbe8a49d + sha256: e26803188a54cd90df9ce1983af70b287c4918c0fd178a9aabd9f1580f657a2b + category: main + optional: false +- name: lcms2 + version: '2.16' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + hash: + md5: 51bb7010fc86f70eee639b4bb7a894f5 + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + category: main + optional: false +- name: lcms2 + version: '2.16' + manager: conda + platform: win-64 + dependencies: + libjpeg-turbo: '>=3.0.0,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + hash: + md5: d3592435917b62a8becff3a60db674f6 + sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 + category: main + optional: false +- name: ld_impl_linux-64 + version: '2.43' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + hash: + md5: 048b02e3962f066da18efe3a21b77672 + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + category: main + optional: false +- name: lerc + version: 4.0.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + hash: + md5: 76bbff344f0134279f225174e9064c8f + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + category: main + optional: false +- name: lerc + version: 4.0.0 + manager: conda + platform: win-64 + dependencies: + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30037' + url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + hash: + md5: 1900cb3cab5055833cfddb0ba233b074 + sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 + category: main + optional: false +- name: libabseil + version: '20230802.1' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230802.1-cxx17_h59595ed_0.conda + hash: + md5: 2785ddf4cb0e7e743477991d64353947 + sha256: 8729021a93e67bb93b4e73ef0a132499db516accfea11561b667635bcd0507e7 + category: main + optional: false +- name: libabseil + version: '20230802.1' + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230802.1-cxx17_h63175ca_0.conda + hash: + md5: 02674c18394394ee4f76cdbd1012f526 + sha256: 8a016d49fad3d4216ce5ae4a60869b5384d31b2009e1ed9f445b6551ce7ef9e8 + category: main + optional: false +- name: libaec + version: 1.1.3 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda + hash: + md5: 5e97e271911b8b2001a8b71860c32faa + sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 + category: main + optional: false +- name: libaec + version: 1.1.3 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda + hash: + md5: 8723000f6ffdbdaef16025f0a01b64c5 + sha256: f5c293d3cfc00f71dfdb64bd65ab53625565f8778fc2d5790575bef238976ebf + category: main + optional: false +- name: libasprintf + version: 0.23.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda + hash: + md5: 988f4937281a66ca19d1adb3b5e3f859 + sha256: 13b863584fccbb9089de73a2442e540703ce4873e4719c9d98c98e4a8e12f9d1 + category: main + optional: false +- name: libasprintf + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/win-64/libasprintf-0.22.5-h5728263_3.conda + hash: + md5: 9f661052be1d477dcf61ee3cd77ce5ee + sha256: 8e41136b7e4ec44c1c0bae0ff51cdb0d04e026d0b44eaaf5a9ff8b4e1b6b019b + category: main + optional: false +- name: libasprintf-devel + version: 0.23.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libasprintf: 0.23.1 + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.23.1-h8e693c7_0.conda + hash: + md5: 2827e722a963b779ce878ef9b5474534 + sha256: b05a859fe5a2b43574f3a5d93552061232b92d17017b27ecab1eccca1dbb2fe4 + category: main + optional: false +- name: libasprintf-devel + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + libasprintf: 0.22.5 + url: https://conda.anaconda.org/conda-forge/win-64/libasprintf-devel-0.22.5-h5728263_3.conda + hash: + md5: 524de7ba10ea8a2d85286beac4654119 + sha256: bc04e8255b7f2edea6eb74fe0ee2eba7ce58d002de4f9bc57946f2b89bada062 + category: main + optional: false +- name: libavif + version: 1.0.1 + manager: conda + platform: win-64 + dependencies: + aom: '>=3.7.0,<3.8.0a0' + dav1d: '>=1.2.1,<1.2.2.0a0' + rav1e: '>=0.6.6,<1.0a0' + svt-av1: '>=1.7.0,<1.7.1.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda + hash: + md5: 105425ab3c95efc316bb3277bbc4a75f + sha256: 7a02658e292c40e1d99aa9b587a02cb5807cce7a784bd17f196a6ce74e24ced7 + category: main + optional: false +- name: libavif16 + version: 1.1.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + aom: '>=3.9.1,<3.10.0a0' + dav1d: '>=1.2.1,<1.2.2.0a0' + libgcc: '>=13' + rav1e: '>=0.6.6,<1.0a0' + svt-av1: '>=2.3.0,<2.3.1.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h1909e37_2.conda + hash: + md5: 21e468ed3786ebcb2124b123aa2484b7 + sha256: e06da844b007a64a9ac35d4e3dc4dbc66583f79b57d08166cf58f2f08723a6e8 + category: main + optional: false +- name: libblas + version: 3.9.0 + manager: conda + platform: linux-64 + dependencies: + mkl: '>=2023.2.0,<2024.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_mkl.conda + hash: + md5: 8bf521f6007b0b0eb91515a1165b5d85 + sha256: 9e5f27fca79223a5d38ccdf4c468e798c3684ba01bdb6b4b44e61f2103a298eb + category: main + optional: false +- name: libblas + version: 3.9.0 + manager: conda + platform: win-64 + dependencies: + mkl: 2023.2.0 + url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-20_win64_mkl.conda + hash: + md5: 6cad6cd2fbdeef4d651b8f752a4da960 + sha256: 34becfe991510be7b9ee05b4ae466c5a26a72af275c3071c1ca7e2308d3f7e64 + category: main + optional: false +- name: libbrotlicommon + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + hash: + md5: 41b599ed2b02abcfdd84302bff174b23 + sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 + category: main + optional: false +- name: libbrotlicommon + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda + hash: + md5: f7dc9a8f21d74eab46456df301da2972 + sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c + category: main + optional: false +- name: libbrotlidec + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libbrotlicommon: 1.1.0 + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + hash: + md5: 9566f0bd264fbd463002e759b8a82401 + sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf + category: main + optional: false +- name: libbrotlidec + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + libbrotlicommon: 1.1.0 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda + hash: + md5: 9bae75ce723fa34e98e239d21d752a7e + sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f + category: main + optional: false +- name: libbrotlienc + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libbrotlicommon: 1.1.0 + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + hash: + md5: 06f70867945ea6a84d35836af780f1de + sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 + category: main + optional: false +- name: libbrotlienc + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + libbrotlicommon: 1.1.0 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda + hash: + md5: 85741a24d97954a991e55e34bc55990b + sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1 + category: main + optional: false +- name: libcap + version: '2.71' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + attr: '>=2.5.1,<2.6.0a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.71-h39aace5_0.conda + hash: + md5: dd19e4e3043f6948bd7454b946ee0983 + sha256: 2bbefac94f4ab8ff7c64dc843238b6c8edcc9ff1f2b5a0a48407a904dc7ccfb2 + category: main + optional: false +- name: libcblas + version: 3.9.0 + manager: conda + platform: linux-64 + dependencies: + libblas: 3.9.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_mkl.conda + hash: + md5: 7a2972758a03adc92d856072c71c9170 + sha256: 841b4d44e20e5207f4a74ca98176629ead5ba590384ed6b0fe3c8600248c9fef + category: main + optional: false +- name: libcblas + version: 3.9.0 + manager: conda + platform: win-64 + dependencies: + libblas: 3.9.0 + url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-20_win64_mkl.conda + hash: + md5: e6d36cfcb2f2dff0f659d2aa0813eb2d + sha256: e526023ed8e7f6fde43698cd326dd16c8448f29414bab8a9594b33deb57a5347 + category: main + optional: false +- name: libclang + version: 15.0.7 + manager: conda + platform: linux-64 + dependencies: + libclang13: 15.0.7 + libgcc-ng: '>=12' + libllvm15: '>=15.0.7,<15.1.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h127d8a8_5.conda + hash: + md5: 09b94dd3a7e304df5b83176239347920 + sha256: 606b79c8a4a926334191d79f4a1447aac1d82c43344e3a603cbba31ace859b8f + category: main + optional: false +- name: libclang + version: 15.0.7 + manager: conda + platform: win-64 + dependencies: + libclang13: 15.0.7 + libxml2: '>=2.12.6,<3.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/libclang-15.0.7-default_h3a3e6c3_5.conda + hash: + md5: 26e1a5a4ff7f8e3f5fb89be829818a75 + sha256: 562dea76c17c30ed6d78734a9e40008f45cdab15611439d7d4e8250e0040f3ef + category: main + optional: false +- name: libclang13 + version: 15.0.7 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libllvm15: '>=15.0.7,<15.1.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h5d6823c_5.conda + hash: + md5: 2d694a9ffdcc30e89dea34a8dcdab6ae + sha256: 91ecfcf545a5d4588e9fad5db2b5b04eeef18cae1c03b790829ef8b978f06ccd + category: main + optional: false +- name: libclang13 + version: 15.0.7 + manager: conda + platform: win-64 + dependencies: + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/libclang13-15.0.7-default_hf64faad_5.conda + hash: + md5: 2f96c58f89abccb04bbc8cd57961111f + sha256: b952b85a6124442be3fe8af23d56f123548f7b28067f60615f7233197469a02d + category: main + optional: false +- name: libcrc32c + version: 1.1.2 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.4.0' + libstdcxx-ng: '>=9.4.0' + url: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + hash: + md5: c965a5aa0d5c1c37ffc62dff36e28400 + sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 + category: main + optional: false +- name: libcrc32c + version: 1.1.2 + manager: conda + platform: win-64 + dependencies: + vc: '>=14.1,<15.0a0' + vs2015_runtime: '>=14.16.27012' + url: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 + hash: + md5: cd4cc2d0c610c8cb5419ccc979f2d6ce + sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e + category: main + optional: false +- name: libcups + version: 2.3.3 + manager: conda + platform: linux-64 + dependencies: + krb5: '>=1.21.1,<1.22.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda + hash: + md5: d4529f4dff3057982a7617c7ac58fde3 + sha256: bc67b9b21078c99c6bd8595fe7e1ed6da1f721007726e717f0449de7032798c4 + category: main + optional: false +- name: libcurl + version: 8.12.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + krb5: '>=1.21.3,<1.22.0a0' + libgcc: '>=13' + libnghttp2: '>=1.64.0,<2.0a0' + libssh2: '>=1.11.1,<2.0a0' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.1,<4.0a0' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.12.1-h332b0f4_0.conda + hash: + md5: 45e9dc4e7b25e2841deb392be085500e + sha256: 2ebc3039af29269e4cdb858fca36265e5e400c1125a4bcd84ae73a596e0e76ca + category: main + optional: false +- name: libcurl + version: 8.12.1 + manager: conda + platform: win-64 + dependencies: + krb5: '>=1.21.3,<1.22.0a0' + libssh2: '>=1.11.1,<2.0a0' + libzlib: '>=1.3.1,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.12.1-h88aaa65_0.conda + hash: + md5: 2b1c729d91f3b07502981b6e0c7727cc + sha256: 4c8e62fd32d59e5fbfad0f37e33083928bbb3c8800258650d4e7911e6f6fd1aa + category: main + optional: false +- name: libdeflate + version: '1.19' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda + hash: + md5: 1635570038840ee3f9c71d22aa5b8b6d + sha256: 985ad27aa0ba7aad82afa88a8ede6a1aacb0aaca950d710f15d85360451e72fd + category: main + optional: false +- name: libdeflate + version: '1.19' + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.19-hcfcfb64_0.conda + hash: + md5: 002b1b723b44dbd286b9e3708762433c + sha256: e2886a84eaa0fbeca1d1d810270f234431d190402b4a79acf756ca2d16000354 + category: main + optional: false +- name: libdlf + version: 0.3.0 + manager: conda + platform: linux-64 + dependencies: + numpy: '' + python: '>=3.10' + url: https://conda.anaconda.org/conda-forge/noarch/libdlf-0.3.0-pyhd8ed1ab_1.conda + hash: + md5: 2e9654bb2bcf5986c2def3ba35413326 + sha256: 367c575a6388380d9a0da6ff06571d903ae89366c42d9f16e32de5d359b6971a + category: main + optional: false +- name: libdlf + version: 0.3.0 + manager: conda + platform: win-64 + dependencies: + numpy: '' + python: '>=3.10' + url: https://conda.anaconda.org/conda-forge/noarch/libdlf-0.3.0-pyhd8ed1ab_1.conda + hash: + md5: 2e9654bb2bcf5986c2def3ba35413326 + sha256: 367c575a6388380d9a0da6ff06571d903ae89366c42d9f16e32de5d359b6971a + category: main + optional: false +- name: libedit + version: 3.1.20250104 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + ncurses: '>=6.5,<7.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + hash: + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + category: main + optional: false +- name: libev + version: '4.33' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + hash: + md5: 172bf1cd1ff8629f2b1179945ed45055 + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + category: main + optional: false +- name: libevent + version: 2.1.12 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + openssl: '>=3.1.1,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + hash: + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + category: main + optional: false +- name: libexpat + version: 2.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + hash: + md5: db833e03127376d461e1e13e76f09b6c + sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 + category: main + optional: false +- name: libexpat + version: 2.6.4 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda + hash: + md5: eb383771c680aa792feb529eaf9df82f + sha256: 0c0447bf20d1013d5603499de93a16b6faa92d7ead870d96305c0f065b6a5a12 + category: main + optional: false +- name: libffi + version: 3.4.6 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_0.conda + hash: + md5: e3eb7806380bc8bcecba6d749ad5f026 + sha256: 67a6c95e33ebc763c1adc3455b9a9ecde901850eb2fceb8e646cc05ef3a663da + category: main + optional: false +- name: libffi + version: 3.4.6 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.6-h537db12_0.conda + hash: + md5: 31d5107f75b2f204937728417e2e39e5 + sha256: 77922d8dd2faf88ac6accaeebf06409d1820486fde710cff6b554d12273e46be + category: main + optional: false +- name: libflac + version: 1.4.3 + manager: conda + platform: linux-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + libgcc-ng: '>=12' + libogg: '>=1.3.4,<1.4.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda + hash: + md5: ee48bf17cc83a00f59ca1494d5646869 + sha256: 65908b75fa7003167b8a8f0001e11e58ed5b1ef5e98b96ab2ba66d7c1b822c7d + category: main + optional: false +- name: libgcc + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + _libgcc_mutex: '0.1' + _openmp_mutex: '>=4.5' + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + hash: + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + category: main + optional: false +- name: libgcc + version: 14.2.0 + manager: conda + platform: win-64 + dependencies: + _openmp_mutex: '>=4.5' + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + url: https://conda.anaconda.org/conda-forge/win-64/libgcc-14.2.0-h1383e82_1.conda + hash: + md5: 75fdd34824997a0f9950a703b15d8ac5 + sha256: ef840e797714440bb10b69446d815966fff41fdac79f79c4e19c475d81cd375d + category: main + optional: false +- name: libgcc-ng + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + libgcc: 14.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + hash: + md5: e39480b9ca41323497b05492a63bc35b + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + category: main + optional: false +- name: libgcrypt-lib + version: 1.11.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libgpg-error: '>=1.51,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-lib-1.11.0-hb9d3cd8_2.conda + hash: + md5: e55712ff40a054134d51b89afca57dbc + sha256: ffc3602f9298da248786f46b00d0594d26a18feeb1b07ce88f3d7d61075e39e6 + category: main + optional: false +- name: libgdal + version: 3.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + blosc: '>=1.21.5,<2.0a0' + cfitsio: '>=4.2.0,<4.2.1.0a0' + freexl: '>=2.0.0,<3.0a0' + geos: '>=3.12.0,<3.12.1.0a0' + geotiff: '>=1.7.1,<1.8.0a0' + giflib: '>=5.2.1,<5.3.0a0' + hdf4: '>=4.2.15,<4.2.16.0a0' + hdf5: '>=1.14.2,<1.14.4.0a0' + json-c: '>=0.17,<0.18.0a0' + kealib: '>=1.5.2,<1.6.0a0' + lerc: '>=4.0.0,<5.0a0' + libcurl: '>=8.4.0,<9.0a0' + libdeflate: '>=1.19,<1.20.0a0' + libexpat: '>=2.5.0,<3.0a0' + libgcc-ng: '>=12' + libiconv: '>=1.17,<2.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libkml: '>=1.3.0,<1.4.0a0' + libnetcdf: '>=4.9.2,<4.9.3.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libpq: '>=16.0,<17.0a0' + libspatialite: '>=5.0.1,<5.1.0a0' + libsqlite: '>=3.43.2,<4.0a0' + libstdcxx-ng: '>=12' + libtiff: '>=4.6.0,<4.8.0a0' + libuuid: '>=2.38.1,<3.0a0' + libwebp-base: '>=1.3.2,<2.0a0' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + openjpeg: '>=2.5.0,<3.0a0' + openssl: '>=3.1.3,<4.0a0' + pcre2: '>=10.40,<10.41.0a0' + poppler: '>=23.10.0,<23.11.0a0' + postgresql: '' + proj: '>=9.3.0,<9.3.1.0a0' + tiledb: '>=2.16,<2.17.0a0' + xerces-c: '>=3.2.4,<3.3.0a0' + xz: '>=5.2.6,<6.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.6.4-hb454697_22.conda + hash: + md5: 6ef386473c9e0d731ea00d08c9787299 + sha256: fb708c2d66ebcd7d0dd4a0dccf92d21c1c1c4cb7f1bfeca58195f2699ec5c73b + category: main + optional: false +- name: libgdal + version: 3.6.4 + manager: conda + platform: win-64 + dependencies: + blosc: '>=1.21.5,<2.0a0' + cfitsio: '>=4.2.0,<4.2.1.0a0' + freexl: '>=2.0.0,<3.0a0' + geos: '>=3.12.0,<3.12.1.0a0' + geotiff: '>=1.7.1,<1.8.0a0' + hdf4: '>=4.2.15,<4.2.16.0a0' + hdf5: '>=1.14.2,<1.14.4.0a0' + kealib: '>=1.5.2,<1.6.0a0' + lerc: '>=4.0.0,<5.0a0' + libcurl: '>=8.4.0,<9.0a0' + libdeflate: '>=1.19,<1.20.0a0' + libexpat: '>=2.5.0,<3.0a0' + libiconv: '>=1.17,<2.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libkml: '>=1.3.0,<1.4.0a0' + libnetcdf: '>=4.9.2,<4.9.3.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libpq: '>=16.0,<17.0a0' + libspatialite: '>=5.0.1,<5.1.0a0' + libsqlite: '>=3.43.2,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libwebp-base: '>=1.3.2,<2.0a0' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + openjpeg: '>=2.5.0,<3.0a0' + openssl: '>=3.1.3,<4.0a0' + pcre2: '>=10.40,<10.41.0a0' + poppler: '>=23.10.0,<23.11.0a0' + postgresql: '' + proj: '>=9.3.0,<9.3.1.0a0' + tiledb: '>=2.16,<2.17.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + xerces-c: '>=3.2.4,<3.3.0a0' + xz: '>=5.2.6,<6.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/libgdal-3.6.4-h8c6448d_22.conda + hash: + md5: 5cc58509bd5013f56f046fee4e0d4ee6 + sha256: bbd3a2f6b7037cb69f80b96f2e3eb06ebbe15d452ebb7cc28fb5a41fcbcd2ab2 + category: main + optional: false +- name: libgettextpo + version: 0.23.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda + hash: + md5: a09ce5decdef385bcce78c32809fa794 + sha256: 190097140d9c16637aa516757d8087f17e8c22cc844c87288da64404b81ef43c + category: main + optional: false +- name: libgettextpo + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + libiconv: '>=1.17,<2.0a0' + libintl: 0.22.5 + url: https://conda.anaconda.org/conda-forge/win-64/libgettextpo-0.22.5-h5728263_3.conda + hash: + md5: e46c142e2d2d9ccef31ad3d176b10fab + sha256: 6747bd29a0896b21ee1fe07bd212210475655354a3e8033c25b797e054ddd821 + category: main + optional: false +- name: libgettextpo-devel + version: 0.23.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libgettextpo: 0.23.1 + url: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-devel-0.23.1-h5888daf_0.conda + hash: + md5: 7a5d5c245a6807deab87558e9efd3ef0 + sha256: 90f29ec7a7e2d758cb61459e643dcb54933dcf92194be6c29b0a1591fcbb163e + category: main + optional: false +- name: libgettextpo-devel + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + libgettextpo: 0.22.5 + libiconv: '>=1.17,<2.0a0' + libintl: 0.22.5 + url: https://conda.anaconda.org/conda-forge/win-64/libgettextpo-devel-0.22.5-h5728263_3.conda + hash: + md5: e618841b85fefbb8b76d2caa163baaec + sha256: 5039a89ebb9751408a2f507afb344241afe47a4e1b06c281af2decf5b734f79a + category: main + optional: false +- name: libgfortran + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + libgfortran5: 14.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + hash: + md5: f1fd30127802683586f768875127a987 + sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 + category: main + optional: false +- name: libgfortran-ng + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + libgfortran: 14.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + hash: + md5: 0a7f4cd238267c88e5d69f7826a407eb + sha256: 423f1e2403f0c665748e42d335e421e53fd03c08d457cfb6f360d329d9459851 + category: main + optional: false +- name: libgfortran5 + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + libgcc: '>=14.2.0' + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + hash: + md5: 9822b874ea29af082e5d36098d25427d + sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d + category: main + optional: false +- name: libglib + version: 2.78.1 + manager: conda + platform: linux-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + libffi: '>=3.4,<4.0a0' + libgcc-ng: '>=12' + libiconv: '>=1.17,<2.0a0' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + pcre2: '>=10.40,<10.41.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-hebfc3b9_0.conda + hash: + md5: ddd09e8904fde46b85f41896621803e6 + sha256: 44c5f58593b074886436db7d13fdfcba2fe3731867ea52237f049b8400341a2b + category: main + optional: false +- name: libglib + version: 2.78.1 + manager: conda + platform: win-64 + dependencies: + gettext: '>=0.21.1,<1.0a0' + libffi: '>=3.4,<4.0a0' + libiconv: '>=1.17,<2.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + pcre2: '>=10.40,<10.41.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libglib-2.78.1-he8f3873_0.conda + hash: + md5: 7022abdf53daa6566caebbe1c2d328ae + sha256: 5919e8f57640b142872899943ec122341ba1e19492e46ad9b47866e013224c10 + category: main + optional: false +- name: libgomp + version: 14.2.0 + manager: conda + platform: win-64 + dependencies: + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + url: https://conda.anaconda.org/conda-forge/win-64/libgomp-14.2.0-h1383e82_1.conda + hash: + md5: 9e2d4d1214df6f21cba12f6eff4972f9 + sha256: d8739b834608f35775209b032f0c2be752ef187863c7ec847afcebe2f681be4e + category: main + optional: false +- name: libgoogle-cloud + version: 2.12.0 + manager: conda + platform: linux-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + libcrc32c: '>=1.1.2,<1.2.0a0' + libcurl: '>=8.5.0,<9.0a0' + libgcc-ng: '>=12' + libgrpc: '>=1.60.0,<1.61.0a0' + libprotobuf: '>=4.25.1,<4.25.2.0a0' + libstdcxx-ng: '>=12' + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hef10d8f_5.conda + hash: + md5: 055e2266d27f0e2290cf0a6ad668a225 + sha256: 3c80f8da632c01b5beb50bdc4c7c488501793cd7c138427f61e93f98719e8342 + category: main + optional: false +- name: libgoogle-cloud + version: 2.12.0 + manager: conda + platform: win-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + libcrc32c: '>=1.1.2,<1.2.0a0' + libcurl: '>=8.5.0,<9.0a0' + libgrpc: '>=1.60.0,<1.61.0a0' + libprotobuf: '>=4.25.1,<4.25.2.0a0' + openssl: '>=3.2.0,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hc7cbac0_5.conda + hash: + md5: 1f219361b6f83f8e7ab4d2c67ff06ce4 + sha256: 03f360345841ecb6cdc6a3a3a75a04e29d2f53e5fc180822d9ebef5d131a9007 + category: main + optional: false +- name: libgpg-error + version: '1.51' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.51-hbd13f7d_1.conda + hash: + md5: 168cc19c031482f83b23c4eebbb94e26 + sha256: 9e0c09c1faf2151ade3ccb64e52d3c1f2dde85c00e37c6a3e6a8bced2aba68be + category: main + optional: false +- name: libgrpc + version: 1.60.1 + manager: conda + platform: linux-64 + dependencies: + c-ares: '>=1.26.0,<2.0a0' + libabseil: '>=20230802.1,<20230803.0a0' + libgcc-ng: '>=12' + libprotobuf: '>=4.25.1,<4.25.2.0a0' + libre2-11: '>=2023.6.2' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + openssl: '>=3.2.1,<4.0a0' + re2: '' + url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.60.1-h74775cd_0.conda + hash: + md5: 5b7702c8961d99c949fb4f300a19c747 + sha256: 66d776eda66e1d786160e03b4572c8dc9c8377a7f0abfca9a90643b64f1d150e + category: main + optional: false +- name: libgrpc + version: 1.60.1 + manager: conda + platform: win-64 + dependencies: + c-ares: '>=1.26.0,<2.0a0' + libabseil: '>=20230802.1,<20230803.0a0' + libprotobuf: '>=4.25.1,<4.25.2.0a0' + libre2-11: '>=2023.6.2' + libzlib: '>=1.2.13,<2.0.0a0' + openssl: '>=3.2.1,<4.0a0' + re2: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.60.1-h0bf0bfa_0.conda + hash: + md5: 18b66a3a1d8b0d10767e15b0e24fdaf6 + sha256: 7b3dbadddc653ce72da4726a3d75fcd250e8a1e973879883ceae7ebee7d06f01 + category: main + optional: false +- name: libhwloc + version: 2.11.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + libxml2: '>=2.12.7,<3.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_he43201b_1000.conda + hash: + md5: 36247217c4e1018085bd9db41eb3526a + sha256: 75be8732e6f94ff2faa129f44ec4970275e1d977559b0c2fb75b7baa5347e16b + category: main + optional: false +- name: libhwloc + version: 2.11.2 + manager: conda + platform: win-64 + dependencies: + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + libxml2: '>=2.13.4,<3.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda + hash: + md5: b87a0ac5ab6495d8225db5dc72dd21cd + sha256: 850e255997f538d5fb6ed651321141155a33bb781d43d326fc4ff62114dd2842 + category: main + optional: false +- name: libhwy + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.1.0-h00ab1b0_0.conda + hash: + md5: 88928158ccfe797eac29ef5e03f7d23d + sha256: a9d4fd23f63a729d3f3e6b958c30c588db51697a7e62268068e5bd945ff8a101 + category: main + optional: false +- name: libiconv + version: '1.18' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_0.conda + hash: + md5: 0743bcd51fc4e6e0367e0aaf41e9bebc + sha256: 659a83c0c184a30336ca512d670a7db56bfb5e289caa9ee641e6f78fd2326463 + category: main + optional: false +- name: libiconv + version: '1.17' + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda + hash: + md5: e1eb10b1cca179f2baa3601e4efc8712 + sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b + category: main + optional: false +- name: libintl + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + libiconv: '>=1.17,<2.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + hash: + md5: 2cf0cf76cc15d360dfa2f17fd6cf9772 + sha256: c7e4600f28bcada8ea81456a6530c2329312519efcf0c886030ada38976b0511 + category: main + optional: false +- name: libintl-devel + version: 0.22.5 + manager: conda + platform: win-64 + dependencies: + libiconv: '>=1.17,<2.0a0' + libintl: 0.22.5 + url: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + hash: + md5: 7537784e9e35399234d4007f45cdb744 + sha256: be1f3c48bc750bca7e68955d57180dfd826d6f9fa7eb32994f6cb61b813f9a6a + category: main + optional: false +- name: libjpeg-turbo + version: 3.0.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + hash: + md5: ea25936bb4080d843790b586850f82b8 + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + category: main + optional: false +- name: libjpeg-turbo + version: 3.0.0 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + hash: + md5: 3f1b948619c45b1ca714d60c7389092c + sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff + category: main + optional: false +- name: libjxl + version: 0.10.3 + manager: conda + platform: linux-64 + dependencies: + libbrotlidec: '>=1.1.0,<1.2.0a0' + libbrotlienc: '>=1.1.0,<1.2.0a0' + libgcc-ng: '>=12' + libhwy: '>=1.1.0,<1.2.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.10.3-h66b40c8_0.conda + hash: + md5: a394f85083195ab8aa33911f40d76870 + sha256: 33dd12f6c7e1b630772505ac004c94a06c3a26dedebc73b5f68dc333094967f6 + category: main + optional: false +- name: libkml + version: 1.3.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libexpat: '>=2.6.2,<3.0a0' + libgcc-ng: '>=13' + libstdcxx-ng: '>=13' + libzlib: '>=1.3.1,<2.0a0' + uriparser: '>=0.9.8,<1.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda + hash: + md5: e8c7620cc49de0c6a2349b6dd6e39beb + sha256: 721c3916d41e052ffd8b60e77f2da6ee47ff0d18babfca48ccf93606f1e0656a + category: main + optional: false +- name: libkml + version: 1.3.0 + manager: conda + platform: win-64 + dependencies: + libexpat: '>=2.6.2,<3.0a0' + libzlib: '>=1.3.1,<2.0a0' + ucrt: '>=10.0.20348.0' + uriparser: '>=0.9.8,<1.0a0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libkml-1.3.0-h538826c_1021.conda + hash: + md5: 431ec3b40b041576811641e2d643954e + sha256: 81a6096a2db500f0c3527ae59398eacca0634c3381559713ab28022d711dd3bd + category: main + optional: false +- name: liblapack + version: 3.9.0 + manager: conda + platform: linux-64 + dependencies: + libblas: 3.9.0 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_mkl.conda + hash: + md5: 4db0cd03efcdab535f6f066aca4cddbb + sha256: 21b4324dd65815f6b5a83c15f0b9a201434d0aa55eeecc37efce7ee70bbbf482 + category: main + optional: false +- name: liblapack + version: 3.9.0 + manager: conda + platform: win-64 + dependencies: + libblas: 3.9.0 + url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-20_win64_mkl.conda + hash: + md5: 9510d07424d70fcac553d86b3e4a7c14 + sha256: 7627ef580c26e48c3496b5885fd32be4e4db49fa1077eb21235dc638489565f6 + category: main + optional: false +- name: libllvm15 + version: 15.0.7 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libxml2: '>=2.12.1,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda + hash: + md5: 8a35df3cbc0c8b12cc8af9473ae75eef + sha256: e71584c0f910140630580fdd0a013029a52fd31e435192aea2aa8d29005262d1 + category: main + optional: false +- name: liblzma + version: 5.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.4-hb9d3cd8_0.conda + hash: + md5: 42d5b6a0f30d3c10cd88cb8584fda1cb + sha256: cad52e10319ca4585bc37f0bc7cce99ec7c15dc9168e42ccb96b741b0a27db3f + category: main + optional: false +- name: liblzma + version: 5.6.4 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.6.4-h2466b09_0.conda + hash: + md5: c48f6ad0ef0a555b27b233dfcab46a90 + sha256: 3f552b0bdefdd1459ffc827ea3bf70a6a6920c7879d22b6bfd0d73015b55227b + category: main + optional: false +- name: liblzma-devel + version: 5.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + liblzma: 5.6.4 + url: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.6.4-hb9d3cd8_0.conda + hash: + md5: 5ab1a0df19c8f3ec00d5e63458e0a420 + sha256: 34928b36a3946902196a6786db80c8a4a97f6c9418838d67be90a1388479a682 + category: main + optional: false +- name: liblzma-devel + version: 5.6.4 + manager: conda + platform: win-64 + dependencies: + liblzma: 5.6.4 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/liblzma-devel-5.6.4-h2466b09_0.conda + hash: + md5: 1e5c2564c8615e8ed993ff634e4181a9 + sha256: 9b185dc6889843f6660584be226c45c048e9b18598642e7455b69e277587c872 + category: main + optional: false +- name: libnetcdf + version: 4.9.2 + manager: conda + platform: linux-64 + dependencies: + blosc: '>=1.21.5,<2.0a0' + bzip2: '>=1.0.8,<2.0a0' + hdf4: '>=4.2.15,<4.2.16.0a0' + hdf5: '>=1.14.3,<1.14.4.0a0' + libaec: '>=1.1.3,<2.0a0' + libcurl: '>=8.8.0,<9.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libxml2: '>=2.12.7,<3.0a0' + libzip: '>=1.10.1,<2.0a0' + libzlib: '>=1.2.13,<2.0a0' + openssl: '>=3.3.1,<4.0a0' + zlib: '' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h135f659_114.conda + hash: + md5: a908e463c710bd6b10a9eaa89fdf003c + sha256: 055572a4c8a1c3f9ac60071ee678f5ea49cfd7ac60a636d817988a6f9d6de6ae + category: main + optional: false +- name: libnetcdf + version: 4.9.2 + manager: conda + platform: win-64 + dependencies: + blosc: '>=1.21.5,<2.0a0' + bzip2: '>=1.0.8,<2.0a0' + hdf4: '>=4.2.15,<4.2.16.0a0' + hdf5: '>=1.14.3,<1.14.4.0a0' + libaec: '>=1.1.3,<2.0a0' + libcurl: '>=8.8.0,<9.0a0' + libxml2: '>=2.12.7,<3.0a0' + libzip: '>=1.10.1,<2.0a0' + libzlib: '>=1.2.13,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zlib: '' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/libnetcdf-4.9.2-nompi_h92078aa_114.conda + hash: + md5: 819507db3802d9a179de4d161285c22f + sha256: 111fb98bf02e717c69eb78388a5b03dc7af05bfa840ac51c2b31beb70bf42318 + category: main + optional: false +- name: libnghttp2 + version: 1.64.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + c-ares: '>=1.32.3,<2.0a0' + libev: '>=4.33,<5.0a0' + libgcc: '>=13' + libstdcxx: '>=13' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.3.2,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda + hash: + md5: 19e57602824042dfd0446292ef90488b + sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975 + category: main + optional: false +- name: libnsl + version: 2.0.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + hash: + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + category: main + optional: false +- name: libogg + version: 1.3.5 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-h4ab18f5_0.conda + hash: + md5: 601bfb4b3c6f0b844443bb81a56651e0 + sha256: 5eda3fe92b99b25dd4737226a9485078ab405672d9f621be75edcb68f1e9026d + category: main + optional: false +- name: libogg + version: 1.3.5 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_0.conda + hash: + md5: 44a4d173e62c5ed6d715f18ae7c46b7a + sha256: fcffdf32c620569738b85c98ddd25e1c84c8add80cd732743d90d469b7b532bb + category: main + optional: false +- name: libopus + version: 1.3.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.3.0' + url: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2 + hash: + md5: 15345e56d527b330e1cacbdf58676e8f + sha256: 0e1c2740ebd1c93226dc5387461bbcf8142c518f2092f3ea7551f77755decc8f + category: main + optional: false +- name: libpng + version: 1.6.47 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda + hash: + md5: 55199e2ae2c3651f6f9b2a447b47bdc9 + sha256: 23367d71da58c9a61c8cbd963fcffb92768d4ae5ffbef9a47cdf1f54f98c5c36 + category: main + optional: false +- name: libpng + version: 1.6.47 + manager: conda + platform: win-64 + dependencies: + libzlib: '>=1.3.1,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.47-had7236b_0.conda + hash: + md5: 7d717163d9dab337c65f2bf21a676b8f + sha256: cf8a594b697de103025dcae2c917ec9c100609caf7c917a94c64a683cb1db1ac + category: main + optional: false +- name: libpq + version: '16.4' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + krb5: '>=1.21.3,<1.22.0a0' + libgcc: '>=13' + openssl: '>=3.3.2,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.4-h2d7952a_3.conda + hash: + md5: 50e2dddb3417a419cbc2388d0b1c06f7 + sha256: 51dddb6e5879960a1b9b3c5de0eb970373903977c0fa68a42f86bb7197c695cf + category: main + optional: false +- name: libpq + version: '16.8' + manager: conda + platform: win-64 + dependencies: + krb5: '>=1.21.3,<1.22.0a0' + openssl: '>=3.4.1,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libpq-16.8-hddc24e7_0.conda + hash: + md5: ffe4bdfaee52105bb0315f715011cb7a + sha256: 98666a30792b0c438daaa94d14dcf87abd157e70dd30f7adb49a02d9e9f6fba5 + category: main + optional: false +- name: libprotobuf + version: 4.25.1 + manager: conda + platform: linux-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.1-hf27288f_2.conda + hash: + md5: 47773f41e24c4d53ba8d0b76f2b69a8a + sha256: 108056c2e95345591cf422dab0e91772e3c63b0193e7d7f419ccf7c49411ba48 + category: main + optional: false +- name: libprotobuf + version: 4.25.1 + manager: conda + platform: win-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.1-hb8276f3_2.conda + hash: + md5: 5cfd27b450e65afcc823c83934122455 + sha256: d3d99982c694ddefaaaf67ba76e55ef913ea3ce13b138dffc6f5c486660cbf13 + category: main + optional: false +- name: libre2-11 + version: 2023.09.01 + manager: conda + platform: linux-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.09.01-h7a70373_1.conda + hash: + md5: e61d774293f3ccfb82561a627e846de4 + sha256: 63ebe0a3244b5f1c61337b5b387a2bacd1ca88cd894229a8cd538ef9a4b51d1a + category: main + optional: false +- name: libre2-11 + version: 2023.09.01 + manager: conda + platform: win-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2023.09.01-h8c5ae5e_1.conda + hash: + md5: 32f3e1f111ec25def4603b25cb34495c + sha256: a61abf0b2e3fca56bc6ff7a64aa48f7626445c8e53d32212a2b5dbb77b245e38 + category: main + optional: false +- name: librttopo + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + geos: '>=3.12.0,<3.12.1.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda + hash: + md5: 264f9a3a4ea52c8f4d3e8ae1213a3335 + sha256: a87307e9c8fb446eb7a1698d9ab40e590ba7e55de669b59f5751c48c2b320827 + category: main + optional: false +- name: librttopo + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + geos: '>=3.12.0,<3.12.1.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-h92c5fdb_14.conda + hash: + md5: 9d3f0c286ea2df09b2c0aefbd63769c0 + sha256: e693468c519bea531c4fa3edccb906c1de5ac35f5630a1745230b5f17ab88104 + category: main + optional: false +- name: libsndfile + version: 1.2.2 + manager: conda + platform: linux-64 + dependencies: + lame: '>=3.100,<3.101.0a0' + libflac: '>=1.4.3,<1.5.0a0' + libgcc-ng: '>=12' + libogg: '>=1.3.4,<1.4.0a0' + libopus: '>=1.3.1,<2.0a0' + libstdcxx-ng: '>=12' + libvorbis: '>=1.3.7,<1.4.0a0' + mpg123: '>=1.32.1,<1.33.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda + hash: + md5: ef1910918dd895516a769ed36b5b3a4e + sha256: f709cbede3d4f3aee4e2f8d60bd9e256057f410bd60b8964cb8cf82ec1457573 + category: main + optional: false +- name: libsodium + version: 1.0.20 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + hash: + md5: a587892d3c13b6621a6091be690dbca2 + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + category: main + optional: false +- name: libsodium + version: 1.0.20 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda + hash: + md5: 198bb594f202b205c7d18b936fa4524f + sha256: 7bcb3edccea30f711b6be9601e083ecf4f435b9407d70fc48fbcf9e5d69a0fc6 + category: main + optional: false +- name: libspatialite + version: 5.0.1 + manager: conda + platform: linux-64 + dependencies: + freexl: '>=2.0.0,<3.0a0' + geos: '>=3.12.0,<3.12.1.0a0' + libgcc-ng: '>=12' + librttopo: '>=1.1.0,<1.2.0a0' + libsqlite: '>=3.43.0,<4.0a0' + libstdcxx-ng: '>=12' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + proj: '>=9.3.0,<9.3.1.0a0' + sqlite: '' + zlib: '' + url: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-h090f1da_29.conda + hash: + md5: b615d7ec63e5c8a0215caeeaed8b0135 + sha256: c3378a58043fd2cf95d521bbd70bb44a6abc88c29efef60a37ad66d24202f210 + category: main + optional: false +- name: libspatialite + version: 5.0.1 + manager: conda + platform: win-64 + dependencies: + freexl: '>=2.0.0,<3.0a0' + geos: '>=3.12.0,<3.12.1.0a0' + librttopo: '>=1.1.0,<1.2.0a0' + libsqlite: '>=3.43.0,<4.0a0' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + proj: '>=9.3.0,<9.3.1.0a0' + sqlite: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zlib: '' + url: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.0.1-hbf340bc_29.conda + hash: + md5: 90d9b293e6b1032356cd9c199abbc384 + sha256: 4b083a5289ad3c1009ad24c64ba70698003315e4a828a60a4b91550dcbaf3686 + category: main + optional: false +- name: libsqlite + version: 3.49.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_1.conda + hash: + md5: 73cea06049cc4174578b432320a003b8 + sha256: 7a09eef804ef7cf4d88215c2297eabb72af8ad0bd5b012060111c289f14bbe7d + category: main + optional: false +- name: libsqlite + version: 3.49.1 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.49.1-h67fdade_1.conda + hash: + md5: 88931435901c1f13d4e3a472c24965aa + sha256: 08669790e4de89201079e93e8a8d8c51a3cd57a19dd559bb0d5bc6c9a7970b99 + category: main + optional: false +- name: libssh2 + version: 1.11.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda + hash: + md5: be2de152d8073ef1c01b7728475f2fe7 + sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 + category: main + optional: false +- name: libssh2 + version: 1.11.1 + manager: conda + platform: win-64 + dependencies: + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.0,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-he619c9f_0.conda + hash: + md5: af0cbf037dd614c34399b3b3e568c557 + sha256: 4b3256bd2b4e4b3183005d3bd8826d651eccd1a4740b70625afa2b7e7123d191 + category: main + optional: false +- name: libstdcxx + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + libgcc: 14.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + hash: + md5: 234a5554c53625688d51062645337328 + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + category: main + optional: false +- name: libstdcxx-ng + version: 14.2.0 + manager: conda + platform: linux-64 + dependencies: + libstdcxx: 14.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + hash: + md5: 8371ac6457591af2cf6159439c1fd051 + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + category: main + optional: false +- name: libsystemd0 + version: '256.9' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libcap: '>=2.71,<2.72.0a0' + libgcc: '>=13' + libgcrypt-lib: '>=1.11.0,<2.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + xz: '>=5.2.6,<6.0a0' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-256.9-h2774228_0.conda + hash: + md5: 7b283ff97a87409a884bc11283855c17 + sha256: a93e45c12c2954942a994ff3ffc8b9a144261288032da834ed80a6210708ad49 + category: main + optional: false +- name: libtiff + version: 4.6.0 + manager: conda + platform: linux-64 + dependencies: + lerc: '>=4.0.0,<5.0a0' + libdeflate: '>=1.19,<1.20.0a0' + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libstdcxx-ng: '>=12' + libwebp-base: '>=1.3.2,<2.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + xz: '>=5.2.6,<6.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda + hash: + md5: 55ed21669b2015f77c180feb1dd41930 + sha256: 45158f5fbee7ee3e257e6b9f51b9f1c919ed5518a94a9973fe7fa4764330473e + category: main + optional: false +- name: libtiff + version: 4.6.0 + manager: conda + platform: win-64 + dependencies: + lerc: '>=4.0.0,<5.0a0' + libdeflate: '>=1.19,<1.20.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + xz: '>=5.2.6,<6.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-h6e2ebb7_2.conda + hash: + md5: 08d653b74ee2dec0131ad4259ffbb126 + sha256: f7b50b71840a5d8edd74a8bccf0c173ca2599bd136e366c35722272b4afa0500 + category: main + optional: false +- name: libuuid + version: 2.38.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + hash: + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + category: main + optional: false +- name: libvorbis + version: 1.3.7 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.3.0' + libogg: '>=1.3.4,<1.4.0a0' + libstdcxx-ng: '>=9.3.0' + url: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2 + hash: + md5: 309dec04b70a3cc0f1e84a4013683bc0 + sha256: 53080d72388a57b3c31ad5805c93a7328e46ff22fab7c44ad2a86d712740af33 + category: main + optional: false +- name: libvorbis + version: 1.3.7 + manager: conda + platform: win-64 + dependencies: + libogg: '>=1.3.4,<1.4.0a0' + vc: '>=14.1,<15.0a0' + vs2015_runtime: '>=14.16.27012' + url: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h0e60522_0.tar.bz2 + hash: + md5: e1a22282de0169c93e4ffe6ce6acc212 + sha256: 6cdc018a024908270205d8512d92f92cf0adaaa5401c2b403757189b138bf56a + category: main + optional: false +- name: libwebp + version: 1.4.0 + manager: conda + platform: linux-64 + dependencies: + giflib: '>=5.2.2,<5.3.0a0' + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.43,<1.7.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libwebp-base: '>=1.4.0,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.4.0-h2c329e2_0.conda + hash: + md5: 80030debaa84cfc31755d53742df3ca6 + sha256: bd45805b169e3e0ff166d360c3c4842d77107d28c8f9feba020a8e8b9c80f948 + category: main + optional: false +- name: libwebp + version: 1.5.0 + manager: conda + platform: win-64 + dependencies: + libwebp-base: '>=1.5.0,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-1.5.0-h3b0e114_0.conda + hash: + md5: 86f1ee21c7b65ae8204728729012bee2 + sha256: bde77580be7b9cc984503ec034690bc0dceab4e11bfb08c5984596d603252245 + category: main + optional: false +- name: libwebp-base + version: 1.4.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + hash: + md5: b26e8aa824079e1be0294e7152ca4559 + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + category: main + optional: false +- name: libwebp-base + version: 1.5.0 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.5.0-h3b0e114_0.conda + hash: + md5: 33f7313967072c6e6d8f865f5493c7ae + sha256: 1d75274614e83a5750b8b94f7bad2fc0564c2312ff407e697d99152ed095576f + category: main + optional: false +- name: libwinpthread + version: 12.0.0.r4.gg4f2fc60ca + manager: conda + platform: win-64 + dependencies: + ucrt: '' + url: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + hash: + md5: 08bfa5da6e242025304b206d152479ef + sha256: 373f2973b8a358528b22be5e8d84322c165b4c5577d24d94fd67ad1bb0a0f261 + category: main + optional: false +- name: libxcb + version: '1.15' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + pthread-stubs: '' + xorg-libxau: '' + xorg-libxdmcp: '' + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda + hash: + md5: 33277193f5b92bad9fdd230eb700929c + sha256: a670902f0a3173a466c058d2ac22ca1dd0df0453d3a80e0212815c20a16b0485 + category: main + optional: false +- name: libxcb + version: 1.17.0 + manager: conda + platform: win-64 + dependencies: + libgcc: '>=13' + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + pthread-stubs: '' + ucrt: '>=10.0.20348.0' + xorg-libxau: '>=1.0.11,<2.0a0' + xorg-libxdmcp: '' + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + hash: + md5: a69bbf778a462da324489976c84cfc8c + sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 + category: main + optional: false +- name: libxcrypt + version: 4.4.36 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + hash: + md5: 5aa797f8787fe7a17d1b0821485b5adc + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + category: main + optional: false +- name: libxkbcommon + version: 1.7.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + libxml2: '>=2.12.6,<3.0a0' + xkeyboard-config: '' + xorg-libxau: '>=1.0.11,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.7.0-h662e7e4_0.conda + hash: + md5: b32c0da42b1f24a98577bb3d7fc0b995 + sha256: 3d97d7f964237f42452295d461afdbc51e93f72e2c80be516f56de80e3bb6621 + category: main + optional: false +- name: libxml2 + version: 2.12.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + icu: '>=73.2,<74.0a0' + libgcc-ng: '>=12' + libiconv: '>=1.17,<2.0a0' + libzlib: '>=1.3.1,<2.0a0' + xz: '>=5.2.6,<6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-h4c95cb1_3.conda + hash: + md5: 0ac9aff6010a7751961c8e4b863a40e7 + sha256: 11a346aed187405a7d3710a79b815fd66ff80fec3b9b7f840a24531324742acf + category: main + optional: false +- name: libxml2 + version: 2.13.5 + manager: conda + platform: win-64 + dependencies: + libiconv: '>=1.17,<2.0a0' + libzlib: '>=1.3.1,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda + hash: + md5: 77eaa84f90fc90643c5a0be0aa9bdd1b + sha256: 084dd4dde342f13c43ee418d153ac5b2610f95be029073a15fa9dda22b130d06 + category: main + optional: false +- name: libxslt + version: 1.1.39 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxml2: '>=2.12.1,<3.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda + hash: + md5: e71f31f8cfb0a91439f2086fc8aa0461 + sha256: 684e9b67ef7b9ca0ca993762eeb39705ec58e2e7f958555c758da7ef416db9f3 + category: main + optional: false +- name: libxslt + version: 1.1.39 + manager: conda + platform: win-64 + dependencies: + libxml2: '>=2.12.1,<3.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.39-h3df6e99_0.conda + hash: + md5: 279ee338c9b34871d578cb3c7aa68f70 + sha256: 6e3d99466d2076c35e7ac8dcdfe604da3d593f55b74a5b8e96c2b2ff63c247aa + category: main + optional: false +- name: libzip + version: 1.11.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + bzip2: '>=1.0.8,<2.0a0' + libgcc: '>=13' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.3.2,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda + hash: + md5: a7b27c075c9b7f459f1c022090697cba + sha256: 991e7348b0f650d495fb6d8aa9f8c727bdf52dabf5853c0cc671439b160dce48 + category: main + optional: false +- name: libzip + version: 1.11.2 + manager: conda + platform: win-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.3.2,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libzip-1.11.2-h3135430_0.conda + hash: + md5: 09066edc7810e4bd1b41ad01a6cc4706 + sha256: 8ed49d8aa0ff908e16c82f92154174027c8906429e8b63d71f0b27ecc987b43e + category: main + optional: false +- name: libzlib + version: 1.3.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + hash: + md5: edb0dca6bc32e4f4789199455a1dbeb8 + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + category: main + optional: false +- name: libzlib + version: 1.3.1 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + hash: + md5: 41fbfac52c601159df6c01f875de31b9 + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + category: main + optional: false +- name: libzopfli + version: 1.0.3 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.3.0' + libstdcxx-ng: '>=9.3.0' + url: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 + hash: + md5: c66fe2d123249af7651ebde8984c51c2 + sha256: ff94f30b2e86cbad6296cf3e5804d442d9e881f7ba8080d92170981662528c6e + category: main + optional: false +- name: libzopfli + version: 1.0.3 + manager: conda + platform: win-64 + dependencies: + vc: '>=14.1,<15.0a0' + vs2015_runtime: '>=14.16.27012' + url: https://conda.anaconda.org/conda-forge/win-64/libzopfli-1.0.3-h0e60522_0.tar.bz2 + hash: + md5: b4b0cbc0abc9f26b730231ffdabf3881 + sha256: c6f2ee6f4758f6e286a2ba9b7503cff25b178fcddeda997921d3012961ce9a62 + category: main + optional: false +- name: linkify-it-py + version: 2.0.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + uc-micro-py: '' + url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda + hash: + md5: b02fe519b5dc0dc55e7299810fcdfb8e + sha256: d975a2015803d4fdaaae3f53e21f64996577d7a069eb61c6d2792504f16eb57b + category: dev + optional: true +- name: linkify-it-py + version: 2.0.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + uc-micro-py: '' + url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda + hash: + md5: b02fe519b5dc0dc55e7299810fcdfb8e + sha256: d975a2015803d4fdaaae3f53e21f64996577d7a069eb61c6d2792504f16eb57b + category: dev + optional: true +- name: llvm-openmp + version: 19.1.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.7-h024ca30_0.conda + hash: + md5: 9915f85a72472011550550623cce2d53 + sha256: 5383e32604e03814b6011fa01a5332057934181a7ea0e90abba7890c17cabce6 + category: main + optional: false +- name: llvmlite + version: 0.44.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libllvm15: '>=15.0.7,<15.1.0a0' + libstdcxx: '>=13' + libzlib: '>=1.3.1,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_0.conda + hash: + md5: 437d25a838595f31c48fa4694e309d8b + sha256: c4843606b10b456978d62ed4772b939bffaa87e40bc7ffeb10b1ae47ebcc1590 + category: main + optional: false +- name: llvmlite + version: 0.44.0 + manager: conda + platform: win-64 + dependencies: + libzlib: '>=1.3.1,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + vs2015_runtime: '' + url: https://conda.anaconda.org/conda-forge/win-64/llvmlite-0.44.0-py310h0288bfe_0.conda + hash: + md5: 83aab620bac8211702b0f956b644c9ce + sha256: a2442ca032f082ced2a388ca37b65a66b8e6840bb8b4ff614566890050e8d072 + category: main + optional: false +- name: locket + version: 1.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 91e27ef3d05cc772ce627e51cff111c4 + sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 + category: main + optional: false +- name: locket + version: 1.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + url: https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 91e27ef3d05cc772ce627e51cff111c4 + sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 + category: main + optional: false +- name: lz4-c + version: 1.9.4 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda + hash: + md5: 318b08df404f9c9be5712aaa5a6f0bb0 + sha256: 1b4c105a887f9b2041219d57036f72c4739ab9e9fe5a1486f094e58c76b31f5f + category: main + optional: false +- name: lz4-c + version: 1.9.4 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda + hash: + md5: e34720eb20a33fc3bfb8451dd837ab7a + sha256: a0954b4b1590735ea5f3d0f4579c3883f8ac837387afd5b398b241fda85124ab + category: main + optional: false +- name: markdown-it-py + version: 2.2.0 + manager: conda + platform: linux-64 + dependencies: + mdurl: '>=0.1,<1' + python: '>=3.7' + typing_extensions: '>=3.7.4' + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-2.2.0-pyhd8ed1ab_0.conda + hash: + md5: b2928a6c6d52d7e3562b4a59c3214e3a + sha256: 65ed439862c1851463f03a9bc5109992ce3e3e025e9a2d76d13ca19f576eee9f + category: dev + optional: true +- name: markdown-it-py + version: 2.2.0 + manager: conda + platform: win-64 + dependencies: + mdurl: '>=0.1,<1' + python: '>=3.7' + typing_extensions: '>=3.7.4' + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-2.2.0-pyhd8ed1ab_0.conda + hash: + md5: b2928a6c6d52d7e3562b4a59c3214e3a + sha256: 65ed439862c1851463f03a9bc5109992ce3e3e025e9a2d76d13ca19f576eee9f + category: dev + optional: true +- name: markupsafe + version: 3.0.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda + hash: + md5: 8ce3f0332fd6de0d737e2911d329523f + sha256: 0bed20ec27dcbcaf04f02b2345358e1161fb338f8423a4ada1cf0f4d46918741 + category: main + optional: false +- name: markupsafe + version: 3.0.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda + hash: + md5: 79dfc050ae5a7dd4e63e392c984e2576 + sha256: deb8505b7ef76d363174d133e2ff814ae75b91ac4c3ae5550a7686897392f4d0 + category: main + optional: false +- name: matplotlib + version: 3.9.1 + manager: conda + platform: linux-64 + dependencies: + matplotlib-base: '>=3.9.1,<3.9.2.0a0' + pyqt: '>=5.10' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tornado: '>=5' + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.9.1-py310hff52083_1.conda + hash: + md5: 1afd9986895d26433cd2d3aecc265cb0 + sha256: cb09b80cc66273c9a33164c23415aaa75eb5e3866dbeaa227d4bf195f9b9a3b8 + category: main + optional: false +- name: matplotlib + version: 3.9.1 + manager: conda + platform: win-64 + dependencies: + matplotlib-base: '>=3.9.1,<3.9.2.0a0' + pyqt: '>=5.10' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tornado: '>=5' + url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.9.1-py310h5588dad_1.conda + hash: + md5: ec566a3b70773d1ec35490da180c0889 + sha256: 253ee9d1174c07cf25067620ae1fb9247b235b2f96abd8c69a4e439927ddea9d + category: main + optional: false +- name: matplotlib-base + version: 3.9.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + certifi: '>=2020.06.20' + contourpy: '>=1.0.1' + cycler: '>=0.10' + fonttools: '>=4.22.0' + freetype: '>=2.12.1,<3.0a0' + kiwisolver: '>=1.3.1' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.23' + packaging: '>=20.0' + pillow: '>=8' + pyparsing: '>=2.3.1' + python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.7' + python_abi: 3.10.* + qhull: '>=2020.2,<2020.3.0a0' + tk: '>=8.6.13,<8.7.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.1-py310hf02ac8c_2.conda + hash: + md5: 123acef757eb89e8dd6eb37af3f65821 + sha256: ee29885abf90e9c59459346dd5aa19026f02f66e0e586a95b2c442e7f913c67b + category: main + optional: false +- name: matplotlib-base + version: 3.9.1 + manager: conda + platform: win-64 + dependencies: + certifi: '>=2020.06.20' + contourpy: '>=1.0.1' + cycler: '>=0.10' + fonttools: '>=4.22.0' + freetype: '>=2.12.1,<3.0a0' + kiwisolver: '>=1.3.1' + numpy: '>=1.23' + packaging: '>=20.0' + pillow: '>=8' + pyparsing: '>=2.3.1' + python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.7' + python_abi: 3.10.* + qhull: '>=2020.2,<2020.3.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.9.1-py310h37e0a56_2.conda + hash: + md5: 30bab219cb50f032ae22800a12c522d3 + sha256: 3ac4dfa2f3aa7c6f9e7e317349a5a8899dd22aad2b3725af65a584bda11df3fb + category: main + optional: false +- name: matplotlib-inline + version: 0.1.7 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + traitlets: '' + url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + hash: + md5: af6ab708897df59bd6e7283ceab1b56b + sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6 + category: main + optional: false +- name: matplotlib-inline + version: 0.1.7 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + traitlets: '' + url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + hash: + md5: af6ab708897df59bd6e7283ceab1b56b + sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6 + category: main + optional: false +- name: mccabe + version: 0.7.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + hash: + md5: 827064ddfe0de2917fb29f1da4f8f533 + sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1 + category: dev + optional: true +- name: mccabe + version: 0.7.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + hash: + md5: 827064ddfe0de2917fb29f1da4f8f533 + sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1 + category: dev + optional: true +- name: mdit-py-plugins + version: 0.4.2 + manager: conda + platform: linux-64 + dependencies: + markdown-it-py: '>=1.0.0,<4.0.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + hash: + md5: af2060041d4f3250a7eb6ab3ec0e549b + sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449 + category: dev + optional: true +- name: mdit-py-plugins + version: 0.4.2 + manager: conda + platform: win-64 + dependencies: + markdown-it-py: '>=1.0.0,<4.0.0' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + hash: + md5: af2060041d4f3250a7eb6ab3ec0e549b + sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449 + category: dev + optional: true +- name: mdurl + version: 0.1.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + hash: + md5: 592132998493b3ff25fd7479396e8351 + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + category: dev + optional: true +- name: mdurl + version: 0.1.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + hash: + md5: 592132998493b3ff25fd7479396e8351 + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + category: dev + optional: true +- name: minizip + version: 4.0.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + bzip2: '>=1.0.8,<2.0a0' + libgcc: '>=13' + libiconv: '>=1.17,<2.0a0' + liblzma: '>=5.6.3,<6.0a0' + libstdcxx: '>=13' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.0,<4.0a0' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.7-h05a5f5f_3.conda + hash: + md5: eec77634ccdb2ba6c231290c399b1dae + sha256: 9a9459024e9cdc68c799b057de021b8c652de542e24e9e48f2726578e822659c + category: main + optional: false +- name: minizip + version: 4.0.7 + manager: conda + platform: win-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + liblzma: '>=5.6.3,<6.0a0' + libzlib: '>=1.3.1,<2.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/minizip-4.0.7-h9fa1bad_3.conda + hash: + md5: 632caee448c60ca5f85bf0748ed24401 + sha256: 16f329eac4551fe343f77a0c84cae5f9e68a0fb43a641e6ea2d8553053c3fa2e + category: main + optional: false +- name: mistune + version: 3.1.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.2-pyhd8ed1ab_0.conda + hash: + md5: 0982b0f06168fe3421d09f70596ca1f0 + sha256: 63d5308ac732b2f8130702c83ee40ce31c5451ebcb6e70075b771cc8f7df0156 + category: main + optional: false +- name: mistune + version: 3.1.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.2-pyhd8ed1ab_0.conda + hash: + md5: 0982b0f06168fe3421d09f70596ca1f0 + sha256: 63d5308ac732b2f8130702c83ee40ce31c5451ebcb6e70075b771cc8f7df0156 + category: main + optional: false +- name: mkl + version: 2023.2.0 + manager: conda + platform: linux-64 + dependencies: + _openmp_mutex: '>=4.5' + llvm-openmp: '>=17.0.3' + tbb: 2021.* + url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda + hash: + md5: 81d4a1a57d618adf0152db973d93b2ad + sha256: 046073737bf73153b0c39e343b197cdf0b7867d336962369407465a17ea5979a + category: main + optional: false +- name: mkl + version: 2023.2.0 + manager: conda + platform: win-64 + dependencies: + intel-openmp: 2023.* + tbb: 2021.* + url: https://conda.anaconda.org/conda-forge/win-64/mkl-2023.2.0-h6a75c08_50497.conda + hash: + md5: 064cea9f45531e7b53584acf4bd8b044 + sha256: 46ec9e767279da219398b6e79c8fa95822b2ed3c8e02ab604615b7d1213a5d5a + category: main + optional: false +- name: mpg123 + version: 1.32.9 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + hash: + md5: c7f302fd11eeb0987a6a5e1f3aed6a21 + sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 + category: main + optional: false +- name: msgpack-python + version: 1.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda + hash: + md5: 6b586fb03d84e5bfbb1a8a3d9e2c9b60 + sha256: 73ca5f0c7d0727a57dcc3c402823ce3aa159ca075210be83078fcc485971e259 + category: main + optional: false +- name: msgpack-python + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.1.0-py310hc19bc0b_0.conda + hash: + md5: 2cfcbd596afd76879de4824c2c24f4a2 + sha256: db5c3d5e2d28ba0e4e1633f6d52079f0e397bdb60a6f58a2fa942e88071182d2 + category: main + optional: false +- name: munch + version: 4.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_1.conda + hash: + md5: 7bdab6a71f575df952175f7825aea324 + sha256: af5038331294c7ec53a1f65e3fe65f24b1404be249e06fea74b7f302c9502186 + category: main + optional: false +- name: munch + version: 4.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_1.conda + hash: + md5: 7bdab6a71f575df952175f7825aea324 + sha256: af5038331294c7ec53a1f65e3fe65f24b1404be249e06fea74b7f302c9502186 + category: main + optional: false +- name: munkres + version: 1.1.4 + manager: conda + platform: linux-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + hash: + md5: 2ba8498c1018c1e9c61eb99b973dfe19 + sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 + category: main + optional: false +- name: munkres + version: 1.1.4 + manager: conda + platform: win-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + hash: + md5: 2ba8498c1018c1e9c61eb99b973dfe19 + sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 + category: main + optional: false +- name: mysql-common + version: 8.0.33 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + openssl: '>=3.1.4,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda + hash: + md5: 80bf3b277c120dd294b51d404b931a75 + sha256: c8b2c5c9d0d013a4f6ef96cb4b339bfdc53a74232d8c61ed08178e5b1ec4eb63 + category: main + optional: false +- name: mysql-libs + version: 8.0.33 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + mysql-common: 8.0.33 + openssl: '>=3.1.4,<4.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda + hash: + md5: e87530d1b12dd7f4e0f856dc07358d60 + sha256: 78c905637dac79b197395065c169d452b8ca2a39773b58e45e23114f1cb6dcdb + category: main + optional: false +- name: myst-nb + version: 1.2.0 + manager: conda + platform: linux-64 + dependencies: + importlib-metadata: '' + ipykernel: '' + ipython: '' + jupyter-cache: '>=0.5' + myst-parser: '>=1.0.0' + nbclient: '' + nbformat: '>=5.0' + python: '' + pyyaml: '' + sphinx: '>=5' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.2.0-pyh29332c3_0.conda + hash: + md5: 4f63865e1bb08e05476fa136a2dfe2ac + sha256: de3e58d54126fdb667a55921675693fb8eee23757fd3be6116f6565cae710279 + category: dev + optional: true +- name: myst-nb + version: 1.2.0 + manager: conda + platform: win-64 + dependencies: + importlib-metadata: '' + ipykernel: '' + ipython: '' + jupyter-cache: '>=0.5' + myst-parser: '>=1.0.0' + nbclient: '' + nbformat: '>=5.0' + python: '>=3.9' + pyyaml: '' + sphinx: '>=5' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.2.0-pyh29332c3_0.conda + hash: + md5: 4f63865e1bb08e05476fa136a2dfe2ac + sha256: de3e58d54126fdb667a55921675693fb8eee23757fd3be6116f6565cae710279 + category: dev + optional: true +- name: myst-parser + version: 1.0.0 + manager: conda + platform: linux-64 + dependencies: + docutils: '>=0.15,<0.20' + jinja2: '' + markdown-it-py: '>=1.0.0,<3.0.0' + mdit-py-plugins: '>=0.3.4,<1' + python: '>=3.7' + pyyaml: '' + sphinx: '>=5,<7' + typing-extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/myst-parser-1.0.0-pyhd8ed1ab_0.conda + hash: + md5: e559708feb0aed1ae24c518e569ea3eb + sha256: 87de591aa423932ffec61e06283bf5c3ba5c0a3cc465955984ce58f1de3ded8e + category: dev + optional: true +- name: myst-parser + version: 1.0.0 + manager: conda + platform: win-64 + dependencies: + docutils: '>=0.15,<0.20' + jinja2: '' + markdown-it-py: '>=1.0.0,<3.0.0' + mdit-py-plugins: '>=0.3.4,<1' + python: '>=3.7' + pyyaml: '' + sphinx: '>=5,<7' + typing-extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/myst-parser-1.0.0-pyhd8ed1ab_0.conda + hash: + md5: e559708feb0aed1ae24c518e569ea3eb + sha256: 87de591aa423932ffec61e06283bf5c3ba5c0a3cc465955984ce58f1de3ded8e + category: dev + optional: true +- name: nbclient + version: 0.10.2 + manager: conda + platform: linux-64 + dependencies: + jupyter_client: '>=6.1.12' + jupyter_core: '>=4.12,!=5.0.*' + nbformat: '>=5.1' + python: '>=3.8' + traitlets: '>=5.4' + url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda + hash: + md5: 6bb0d77277061742744176ab555b723c + sha256: a20cff739d66c2f89f413e4ba4c6f6b59c50d5c30b5f0d840c13e8c9c2df9135 + category: main + optional: false +- name: nbclient + version: 0.10.2 + manager: conda + platform: win-64 + dependencies: + jupyter_client: '>=6.1.12' + jupyter_core: '>=4.12,!=5.0.*' + nbformat: '>=5.1' + python: '>=3.8' + traitlets: '>=5.4' + url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda + hash: + md5: 6bb0d77277061742744176ab555b723c + sha256: a20cff739d66c2f89f413e4ba4c6f6b59c50d5c30b5f0d840c13e8c9c2df9135 + category: main + optional: false +- name: nbconvert-core + version: 7.16.6 + manager: conda + platform: linux-64 + dependencies: + beautifulsoup4: '' + bleach-with-css: '!=5.0.0' + defusedxml: '' + importlib-metadata: '>=3.6' + jinja2: '>=3.0' + jupyter_core: '>=4.7' + jupyterlab_pygments: '' + markupsafe: '>=2.0' + mistune: '>=2.0.3,<4' + nbclient: '>=0.5.0' + nbformat: '>=5.7' + packaging: '' + pandocfilters: '>=1.4.1' + pygments: '>=2.4.1' + python: '' + traitlets: '>=5.1' + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyh29332c3_0.conda + hash: + md5: d24beda1d30748afcc87c429454ece1b + sha256: dcccb07c5a1acb7dc8be94330e62d54754c0e9c9cb2bb6865c8e3cfe44cf5a58 + category: main + optional: false +- name: nbconvert-core + version: 7.16.6 + manager: conda + platform: win-64 + dependencies: + beautifulsoup4: '' + bleach-with-css: '!=5.0.0' + defusedxml: '' + importlib-metadata: '>=3.6' + jinja2: '>=3.0' + jupyter_core: '>=4.7' + jupyterlab_pygments: '' + markupsafe: '>=2.0' + mistune: '>=2.0.3,<4' + nbclient: '>=0.5.0' + nbformat: '>=5.7' + packaging: '' + pandocfilters: '>=1.4.1' + pygments: '>=2.4.1' + python: '>=3.9' + traitlets: '>=5.1' + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyh29332c3_0.conda + hash: + md5: d24beda1d30748afcc87c429454ece1b + sha256: dcccb07c5a1acb7dc8be94330e62d54754c0e9c9cb2bb6865c8e3cfe44cf5a58 + category: main + optional: false +- name: nbformat + version: 5.10.4 + manager: conda + platform: linux-64 + dependencies: + jsonschema: '>=2.6' + jupyter_core: '>=4.12,!=5.0.*' + python: '>=3.9' + python-fastjsonschema: '>=2.15' + traitlets: '>=5.1' + url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + hash: + md5: bbe1963f1e47f594070ffe87cdf612ea + sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838 + category: main + optional: false +- name: nbformat + version: 5.10.4 + manager: conda + platform: win-64 + dependencies: + jsonschema: '>=2.6' + jupyter_core: '>=4.12,!=5.0.*' + python: '>=3.9' + python-fastjsonschema: '>=2.15' + traitlets: '>=5.1' + url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + hash: + md5: bbe1963f1e47f594070ffe87cdf612ea + sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838 + category: main + optional: false +- name: ncurses + version: '6.5' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + hash: + md5: 47e340acb35de30501a76c7c799c41d7 + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + category: main + optional: false +- name: nest-asyncio + version: 1.6.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + hash: + md5: 598fd7d4d0de2455fb74f56063969a97 + sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 + category: main + optional: false +- name: nest-asyncio + version: 1.6.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + hash: + md5: 598fd7d4d0de2455fb74f56063969a97 + sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 + category: main + optional: false +- name: networkx + version: 3.4.2 + manager: conda + platform: linux-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + hash: + md5: fd40bf7f7f4bc4b647dc8512053d9873 + sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117 + category: main + optional: false +- name: networkx + version: 3.4.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10' + url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + hash: + md5: fd40bf7f7f4bc4b647dc8512053d9873 + sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117 + category: main + optional: false +- name: notebook + version: 7.3.2 + manager: conda + platform: linux-64 + dependencies: + importlib_resources: '>=5.0' + jupyter_server: '>=2.4.0,<3' + jupyterlab: '>=4.3.4,<4.4' + jupyterlab_server: '>=2.27.1,<3' + notebook-shim: '>=0.2,<0.3' + python: '>=3.9' + tornado: '>=6.2.0' + url: https://conda.anaconda.org/conda-forge/noarch/notebook-7.3.2-pyhd8ed1ab_0.conda + hash: + md5: 48b0461a947a0537427fc836b9bd2d33 + sha256: 07138543549d6672376115a000c5fd26c3711f0b2b5c9464889bccfe711d8e59 + category: main + optional: false +- name: notebook + version: 7.3.2 + manager: conda + platform: win-64 + dependencies: + importlib_resources: '>=5.0' + jupyter_server: '>=2.4.0,<3' + jupyterlab: '>=4.3.4,<4.4' + jupyterlab_server: '>=2.27.1,<3' + notebook-shim: '>=0.2,<0.3' + python: '>=3.9' + tornado: '>=6.2.0' + url: https://conda.anaconda.org/conda-forge/noarch/notebook-7.3.2-pyhd8ed1ab_0.conda + hash: + md5: 48b0461a947a0537427fc836b9bd2d33 + sha256: 07138543549d6672376115a000c5fd26c3711f0b2b5c9464889bccfe711d8e59 + category: main + optional: false +- name: notebook-shim + version: 0.2.4 + manager: conda + platform: linux-64 + dependencies: + jupyter_server: '>=1.8,<3' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + hash: + md5: e7f89ea5f7ea9401642758ff50a2d9c1 + sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056 + category: main + optional: false +- name: notebook-shim + version: 0.2.4 + manager: conda + platform: win-64 + dependencies: + jupyter_server: '>=1.8,<3' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + hash: + md5: e7f89ea5f7ea9401642758ff50a2d9c1 + sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056 + category: main + optional: false +- name: nspr + version: '4.36' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.36-h5888daf_0.conda + hash: + md5: de9cd5bca9e4918527b9b72b6e2e1409 + sha256: a87471d9265a7c02a98c20debac8b13afd80963968ed7b1c1c2ac7b80955ce31 + category: main + optional: false +- name: nss + version: '3.108' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libsqlite: '>=3.48.0,<4.0a0' + libstdcxx: '>=13' + libzlib: '>=1.3.1,<2.0a0' + nspr: '>=4.36,<5.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/nss-3.108-h159eef7_0.conda + hash: + md5: 3c872a5aa802ee5c645e09d4c5d38585 + sha256: 32c1dad692c37978378bbdd6fbca7a1c3bbac576240cf0001fb1e210e1a4e77f + category: main + optional: false +- name: numba + version: 0.61.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + _openmp_mutex: '>=4.5' + libgcc: '>=13' + libstdcxx: '>=13' + llvmlite: '>=0.44.0,<0.45.0a0' + numpy: '>=1.24,<2.2' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.0-py310h699fe88_1.conda + hash: + md5: 73bf45d299c017a67dd8fffab92bcaaa + sha256: 2be5e6ad0ffbc0781ab4241bf9ae759e0af6679d4a9e084ed671cef3cacc899d + category: main + optional: false +- name: numba + version: 0.61.0 + manager: conda + platform: win-64 + dependencies: + llvmlite: '>=0.44.0,<0.45.0a0' + numpy: '>=1.24,<2.2' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/numba-0.61.0-py310h7793332_1.conda + hash: + md5: e7f2c80934601fc827391b8fbed20b5c + sha256: 27f54a8453fd36c35467d3b556e0a203774905f37c906158e4fdae3c7edaeb1e + category: main + optional: false +- name: numcodecs + version: 0.13.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + msgpack-python: '' + numpy: '>=1.7' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.13.1-py310h5eaa309_0.conda + hash: + md5: a3e9933fc59e8bcd2aa20753fb56db42 + sha256: 70cb0fa431ba9e75ef36d94f35324089dfa7da8f967e9c758f60e08aaf29b732 + category: main + optional: false +- name: numcodecs + version: 0.13.1 + manager: conda + platform: win-64 + dependencies: + msgpack-python: '' + numpy: '>=1.7' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/numcodecs-0.13.1-py310hb4db72f_0.conda + hash: + md5: 0d316ad384c5c153a67a416f1a8abf97 + sha256: 4aa5d7fc0ea81120f2fab5ef6ff3e0c8ea3458a2c8a21935b99dff70b73a349c + category: main + optional: false +- name: numpy + version: 1.26.4 + manager: conda + platform: linux-64 + dependencies: + libblas: '>=3.9.0,<4.0a0' + libcblas: '>=3.9.0,<4.0a0' + libgcc-ng: '>=12' + liblapack: '>=3.9.0,<4.0a0' + libstdcxx-ng: '>=12' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda + hash: + md5: 6593de64c935768b6bad3e19b3e978be + sha256: 028fe2ea8e915a0a032b75165f11747770326f3d767e642880540c60a3256425 + category: main + optional: false +- name: numpy + version: 1.26.4 + manager: conda + platform: win-64 + dependencies: + libblas: '>=3.9.0,<4.0a0' + libcblas: '>=3.9.0,<4.0a0' + liblapack: '>=3.9.0,<4.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda + hash: + md5: 93e881c391880df90e74e43a4b67c16d + sha256: 20ca447a8f840c01961f2bdf0847fc7b7785a62968e867d7aa4ca8a66d70f9ad + category: main + optional: false +- name: openjpeg + version: 2.5.2 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libpng: '>=1.6.43,<1.7.0a0' + libstdcxx-ng: '>=12' + libtiff: '>=4.6.0,<4.8.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + hash: + md5: 7f2e286780f072ed750df46dc2631138 + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + category: main + optional: false +- name: openjpeg + version: 2.5.2 + manager: conda + platform: win-64 + dependencies: + libpng: '>=1.6.43,<1.7.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + hash: + md5: 7e7099ad94ac3b599808950cec30ad4e + sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 + category: main + optional: false +- name: openssl + version: 3.4.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + ca-certificates: '' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.1-h7b32b05_0.conda + hash: + md5: 41adf927e746dc75ecf0ef841c454e48 + sha256: cbf62df3c79a5c2d113247ddea5658e9ff3697b6e741c210656e239ecaf1768f + category: main + optional: false +- name: openssl + version: 3.4.1 + manager: conda + platform: win-64 + dependencies: + ca-certificates: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.4.1-ha4e3fda_0.conda + hash: + md5: 0730f8094f7088592594f9bf3ae62b3f + sha256: 56dcc2b4430bfc1724e32661c34b71ae33a23a14149866fc5645361cfd3b3a6a + category: main + optional: false +- name: overrides + version: 7.7.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + typing_utils: '' + url: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + hash: + md5: e51f1e4089cad105b6cac64bd8166587 + sha256: 1840bd90d25d4930d60f57b4f38d4e0ae3f5b8db2819638709c36098c6ba770c + category: main + optional: false +- name: overrides + version: 7.7.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + typing_utils: '' + url: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + hash: + md5: e51f1e4089cad105b6cac64bd8166587 + sha256: 1840bd90d25d4930d60f57b4f38d4e0ae3f5b8db2819638709c36098c6ba770c + category: main + optional: false +- name: packaging + version: '24.2' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + hash: + md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa + sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 + category: main + optional: false +- name: packaging + version: '24.2' + manager: conda + platform: win-64 + dependencies: + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + hash: + md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa + sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 + category: main + optional: false +- name: pandas + version: 2.2.3 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + numpy: '>=1.22.4' + python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.8.1' + python-tzdata: '>=2022a' + python_abi: 3.10.* + pytz: '>=2020.1,<2024.2' + url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda + hash: + md5: e67778e1cac3bca3b3300f6164f7ffb9 + sha256: d772223fd1ca882717ec6db55a13a6be9439c64ca3532231855ce7834599b8a5 + category: main + optional: false +- name: pandas + version: 2.2.3 + manager: conda + platform: win-64 + dependencies: + numpy: '>=1.22.4' + python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.8.1' + python-tzdata: '>=2022a' + python_abi: 3.10.* + pytz: '>=2020.1,<2024.2' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda + hash: + md5: 565b3f19282642a23e5ff9bbfb01569c + sha256: 1fa40b4a351f1eb7a878d1f25f6bec71664699cd4a39c8ed5e2221f53ecca0c4 + category: main + optional: false +- name: pandocfilters + version: 1.5.0 + manager: conda + platform: linux-64 + dependencies: + python: '!=3.0,!=3.1,!=3.2,!=3.3' + url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 457c2c8c08e54905d6954e79cb5b5db9 + sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f + category: main + optional: false +- name: pandocfilters + version: 1.5.0 + manager: conda + platform: win-64 + dependencies: + python: '!=3.0,!=3.1,!=3.2,!=3.3' + url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 457c2c8c08e54905d6954e79cb5b5db9 + sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f + category: main + optional: false +- name: parso + version: 0.8.4 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + hash: + md5: 5c092057b6badd30f75b06244ecd01c9 + sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc + category: main + optional: false +- name: parso + version: 0.8.4 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + hash: + md5: 5c092057b6badd30f75b06244ecd01c9 + sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc + category: main + optional: false +- name: partd + version: 1.4.2 + manager: conda + platform: linux-64 + dependencies: + locket: '' + python: '>=3.9' + toolz: '' + url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + hash: + md5: 0badf9c54e24cecfb0ad2f99d680c163 + sha256: 472fc587c63ec4f6eba0cc0b06008a6371e0a08a5986de3cf4e8024a47b4fe6c + category: main + optional: false +- name: partd + version: 1.4.2 + manager: conda + platform: win-64 + dependencies: + locket: '' + python: '>=3.9' + toolz: '' + url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + hash: + md5: 0badf9c54e24cecfb0ad2f99d680c163 + sha256: 472fc587c63ec4f6eba0cc0b06008a6371e0a08a5986de3cf4e8024a47b4fe6c + category: main + optional: false +- name: pcre2 + version: '10.40' + manager: conda + platform: linux-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libgcc-ng: '>=12' + libzlib: '>=1.2.12,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 + hash: + md5: 69e2c796349cd9b273890bee0febfe1b + sha256: 7a29ec847556eed4faa1646010baae371ced69059a4ade43851367a076d6108a + category: main + optional: false +- name: pcre2 + version: '10.40' + manager: conda + platform: win-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libzlib: '>=1.2.12,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.40-h17e33f8_0.tar.bz2 + hash: + md5: 2519de0d9620dc2bc7e19caf6867136d + sha256: 5833c63548e4fae91da6d77739eab7dc9bf6542e43f105826b23c01bfdd9cb57 + category: main + optional: false +- name: pexpect + version: 4.9.0 + manager: conda + platform: linux-64 + dependencies: + ptyprocess: '>=0.5' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + hash: + md5: d0d408b1f18883a944376da5cf8101ea + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + category: main + optional: false +- name: pickleshare + version: 0.7.5 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + hash: + md5: 11a9d1d09a3615fc07c3faf79bc0b943 + sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b + category: main + optional: false +- name: pickleshare + version: 0.7.5 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + hash: + md5: 11a9d1d09a3615fc07c3faf79bc0b943 + sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b + category: main + optional: false +- name: pillow + version: 10.3.0 + manager: conda + platform: linux-64 + dependencies: + freetype: '>=2.12.1,<3.0a0' + lcms2: '>=2.16,<3.0a0' + libgcc-ng: '>=12' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libwebp-base: '>=1.3.2,<2.0a0' + libxcb: '>=1.15,<1.16.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + openjpeg: '>=2.5.2,<3.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tk: '>=8.6.13,<8.7.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py310hf73ecf8_0.conda + hash: + md5: 1de56cf017dfd02aa84093206a0141a8 + sha256: 89caf2bb9b6d6d0c874590128b36676615750b5ef121fab514bc737dc48534da + category: main + optional: false +- name: pillow + version: 10.3.0 + manager: conda + platform: win-64 + dependencies: + freetype: '>=2.12.1,<3.0a0' + lcms2: '>=2.16,<3.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libwebp-base: '>=1.4.0,<2.0a0' + libxcb: '>=1.16,<2.0.0a0' + libzlib: '>=1.3.1,<2.0a0' + openjpeg: '>=2.5.2,<3.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tk: '>=8.6.13,<8.7.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.3.0-py310h3e38d90_1.conda + hash: + md5: ee35afda8b2154e7396fae5ca7fbea6b + sha256: 50a0d0f8de51c47f8ca0820f0ebfc7730aec4a7a98069347a3395b21b67f7e21 + category: main + optional: false +- name: pip + version: 25.0.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9,<3.13.0a0' + setuptools: '' + wheel: '' + url: https://conda.anaconda.org/conda-forge/noarch/pip-25.0.1-pyh8b19718_0.conda + hash: + md5: 79b5c1440aedc5010f687048d9103628 + sha256: 585940f09d87787f79f73ff5dff8eb2af8a67e5bec5eebf2f553cd26c840ba69 + category: main + optional: false +- name: pip + version: 25.0.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9,<3.13.0a0' + setuptools: '' + wheel: '' + url: https://conda.anaconda.org/conda-forge/noarch/pip-25.0.1-pyh8b19718_0.conda + hash: + md5: 79b5c1440aedc5010f687048d9103628 + sha256: 585940f09d87787f79f73ff5dff8eb2af8a67e5bec5eebf2f553cd26c840ba69 + category: main + optional: false +- name: pixman + version: 0.44.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.44.2-h29eaf8c_0.conda + hash: + md5: 5e2a7acfa2c24188af39e7944e1b3604 + sha256: 747c58db800d5583fee78e76240bf89cbaeedf7ab1ef339c2990602332b9c4be + category: main + optional: false +- name: pixman + version: 0.44.2 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pixman-0.44.2-had0cd8c_0.conda + hash: + md5: c720ac9a3bd825bf8b4dc7523ea49be4 + sha256: 6648bd6e050f37c062ced1bbd4201dee617c3dacda1fc3a0de70335cf736f11b + category: main + optional: false +- name: pkgutil-resolve-name + version: 1.3.10 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda + hash: + md5: 5a5870a74432aa332f7d32180633ad05 + sha256: adb2dde5b4f7da70ae81309cce6188ed3286ff280355cf1931b45d91164d2ad8 + category: main + optional: false +- name: pkgutil-resolve-name + version: 1.3.10 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda + hash: + md5: 5a5870a74432aa332f7d32180633ad05 + sha256: adb2dde5b4f7da70ae81309cce6188ed3286ff280355cf1931b45d91164d2ad8 + category: main + optional: false +- name: platformdirs + version: 4.3.6 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + hash: + md5: 577852c7e53901ddccc7e6a9959ddebe + sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 + category: main + optional: false +- name: platformdirs + version: 4.3.6 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + hash: + md5: 577852c7e53901ddccc7e6a9959ddebe + sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 + category: main + optional: false +- name: plotly + version: 5.19.0 + manager: conda + platform: linux-64 + dependencies: + packaging: '' + python: '>=3.6' + tenacity: '>=6.2.0' + url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda + hash: + md5: 669cd7065794633b9e64e6a9612ec700 + sha256: fa9ae81e1f304f1480378ea25d559748e061c5b8d55b3ade433c3bc483dbae9e + category: main + optional: false +- name: plotly + version: 5.19.0 + manager: conda + platform: win-64 + dependencies: + packaging: '' + python: '>=3.6' + tenacity: '>=6.2.0' + url: https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda + hash: + md5: 669cd7065794633b9e64e6a9612ec700 + sha256: fa9ae81e1f304f1480378ea25d559748e061c5b8d55b3ade433c3bc483dbae9e + category: main + optional: false +- name: pluggy + version: 1.5.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + hash: + md5: e9dcbce5f45f9ee500e728ae58b605b6 + sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + category: dev + optional: true +- name: pluggy + version: 1.5.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + hash: + md5: e9dcbce5f45f9ee500e728ae58b605b6 + sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + category: dev + optional: true +- name: ply + version: '3.11' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda + hash: + md5: fd5062942bfa1b0bd5e0d2a4397b099e + sha256: bae453e5cecf19cab23c2e8929c6e30f4866d996a8058be16c797ed4b935461f + category: main + optional: false +- name: ply + version: '3.11' + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda + hash: + md5: fd5062942bfa1b0bd5e0d2a4397b099e + sha256: bae453e5cecf19cab23c2e8929c6e30f4866d996a8058be16c797ed4b935461f + category: main + optional: false +- name: poppler + version: 23.10.0 + manager: conda + platform: linux-64 + dependencies: + cairo: '>=1.18.0,<2.0a0' + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + lcms2: '>=2.15,<3.0a0' + libcurl: '>=8.4.0,<9.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.0,<3.0a0' + libiconv: '>=1.17,<2.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libstdcxx-ng: '>=12' + libtiff: '>=4.6.0,<4.8.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + nspr: '>=4.35,<5.0a0' + nss: '>=3.94,<4.0a0' + openjpeg: '>=2.5.0,<3.0a0' + poppler-data: '' + url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.10.0-h590f24d_0.conda + hash: + md5: 06b4a80e2cc3974e55f83e2115e2e90a + sha256: e1d9245454e0b63077f12b6c331f1d2dc7bd3409369e7fd1f38a29e47b76b64a + category: main + optional: false +- name: poppler + version: 23.10.0 + manager: conda + platform: win-64 + dependencies: + cairo: '>=1.18.0,<2.0a0' + freetype: '>=2.12.1,<3.0a0' + lcms2: '>=2.15,<3.0a0' + libcurl: '>=8.4.0,<9.0a0' + libglib: '>=2.78.0,<3.0a0' + libiconv: '>=1.17,<2.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + openjpeg: '>=2.5.0,<3.0a0' + poppler-data: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/poppler-23.10.0-hc2f3c52_0.conda + hash: + md5: 3164446cb6dd3fa81b09307cde29778b + sha256: e8ea2bc81cfc913fc2ed641353d7262b0344fa0bff1e1b5a6cca5144c1573ae5 + category: main + optional: false +- name: poppler-data + version: 0.4.12 + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda + hash: + md5: d8d7293c5b37f39b2ac32940621c6592 + sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf + category: main + optional: false +- name: poppler-data + version: 0.4.12 + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda + hash: + md5: d8d7293c5b37f39b2ac32940621c6592 + sha256: 2f227e17b3c0346112815faa605502b66c1c4511a856127f2899abf15a98a2cf + category: main + optional: false +- name: postgresql + version: '16.4' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + krb5: '>=1.21.3,<1.22.0a0' + libgcc: '>=13' + libpq: '16.4' + libxml2: '>=2.12.7,<3.0a0' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.3.2,<4.0a0' + readline: '>=8.2,<9.0a0' + tzcode: '' + tzdata: '' + url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.4-hb2eb5c0_3.conda + hash: + md5: 3ba28956641b0c59640bf2b124d2d731 + sha256: aad93b8cb17380baadd7530962afdb647976502efffa76ff1da5d685855980d9 + category: main + optional: false +- name: postgresql + version: '16.8' + manager: conda + platform: win-64 + dependencies: + krb5: '>=1.21.3,<1.22.0a0' + libpq: '16.8' + libxml2: '>=2.13.5,<3.0a0' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.1,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/postgresql-16.8-h38e16cc_0.conda + hash: + md5: a1162ca75c1247200991557771eb39bd + sha256: eeb197a32c4be7e06bfea769bf625a04c790a0b8e8ce0ac69acb33d40908dac1 + category: main + optional: false +- name: proj + version: 9.3.0 + manager: conda + platform: linux-64 + dependencies: + libcurl: '>=8.4.0,<9.0a0' + libgcc-ng: '>=12' + libsqlite: '>=3.43.2,<4.0a0' + libstdcxx-ng: '>=12' + libtiff: '>=4.6.0,<4.8.0a0' + sqlite: '' + url: https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda + hash: + md5: b5e57a0c643da391bef850922963eece + sha256: 252f6c31101719e3d524679e69ae81e6323b93b143e1360169bf50e89386bf24 + category: main + optional: false +- name: proj + version: 9.3.0 + manager: conda + platform: win-64 + dependencies: + libcurl: '>=8.4.0,<9.0a0' + libsqlite: '>=3.43.2,<4.0a0' + libtiff: '>=4.6.0,<4.8.0a0' + sqlite: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/proj-9.3.0-he13c7e8_2.conda + hash: + md5: 4e6d2a06874a1a6cd66e842d29bcd373 + sha256: 67a5d032a0343dc8182ef50221d9ee47edb50d34cd94813e65111901cbbbc6d3 + category: main + optional: false +- name: prometheus_client + version: 0.21.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + hash: + md5: 3e01e386307acc60b2f89af0b2e161aa + sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + category: main + optional: false +- name: prometheus_client + version: 0.21.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + hash: + md5: 3e01e386307acc60b2f89af0b2e161aa + sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + category: main + optional: false +- name: prompt-toolkit + version: 3.0.50 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + wcwidth: '' + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.50-pyha770c72_0.conda + hash: + md5: 7d823138f550b14ecae927a5ff3286de + sha256: 0749c49a349bf55b8539ce5addce559b77592165da622944a51c630e94d97889 + category: main + optional: false +- name: prompt-toolkit + version: 3.0.50 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + wcwidth: '' + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.50-pyha770c72_0.conda + hash: + md5: 7d823138f550b14ecae927a5ff3286de + sha256: 0749c49a349bf55b8539ce5addce559b77592165da622944a51c630e94d97889 + category: main + optional: false +- name: properties + version: 0.6.1 + manager: conda + platform: linux-64 + dependencies: + numpy: '>=1.7' + python: '' + six: '' + vectormath: '>=0.1.4' + url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 + hash: + md5: 62052fa8409d12536ff149e25b0e9905 + sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 + category: main + optional: false +- name: properties + version: 0.6.1 + manager: conda + platform: win-64 + dependencies: + numpy: '>=1.7' + python: '' + six: '' + vectormath: '>=0.1.4' + url: https://conda.anaconda.org/conda-forge/noarch/properties-0.6.1-py_0.tar.bz2 + hash: + md5: 62052fa8409d12536ff149e25b0e9905 + sha256: 693596b821b28f8d9710e80a143816e55fc401b8cd2f0b0d777f5155bd3358f2 + category: main + optional: false +- name: psutil + version: 6.1.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.1-py310ha75aee5_0.conda + hash: + md5: 00838ea1d4e87b1e6e2552bba98cc899 + sha256: a643a57e5338fb3a154c5d57fdc72d80170cf7868f20acbbeedde014195f0d92 + category: main + optional: false +- name: psutil + version: 6.1.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/psutil-6.1.1-py310ha8f682b_0.conda + hash: + md5: e7da623f94edbf9c66f816bee03432a2 + sha256: 88ed52584b3d838ec10c10ad445823bb9b52a0002071e79c9bb63433ff934026 + category: main + optional: false +- name: pthread-stubs + version: '0.4' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + hash: + md5: b3c17d95b5a10c6e64a21fa17573e70e + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + category: main + optional: false +- name: pthread-stubs + version: '0.4' + manager: conda + platform: win-64 + dependencies: + libgcc: '>=13' + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + ucrt: '>=10.0.20348.0' + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + hash: + md5: 3c8f2573569bb816483e5cf57efbbe29 + sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b + category: main + optional: false +- name: ptyprocess + version: 0.7.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + hash: + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + category: main + optional: false +- name: pulseaudio-client + version: '16.1' + manager: conda + platform: linux-64 + dependencies: + dbus: '>=1.13.6,<2.0a0' + libgcc-ng: '>=12' + libglib: '>=2.76.4,<3.0a0' + libsndfile: '>=1.2.2,<1.3.0a0' + libsystemd0: '>=254' + url: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda + hash: + md5: ac902ff3c1c6d750dd0dfc93a974ab74 + sha256: 9981c70893d95c8cac02e7edd1a9af87f2c8745b772d529f08b7f9dafbe98606 + category: main + optional: false +- name: pure_eval + version: 0.2.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + hash: + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + category: main + optional: false +- name: pure_eval + version: 0.2.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + hash: + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + category: main + optional: false +- name: pybtex + version: 0.24.0 + manager: conda + platform: linux-64 + dependencies: + latexcodec: '>=1.0.4' + python: '>=3.9' + pyyaml: '>=3.01' + setuptools: '' + six: '' + url: https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_3.conda + hash: + md5: 556a52a96313364aa79990ed1337b9a5 + sha256: c87615fcc7327c5dcc247f309731c98f7b9867a48e6265e9584af6dc8cd82345 + category: dev + optional: true +- name: pybtex + version: 0.24.0 + manager: conda + platform: win-64 + dependencies: + latexcodec: '>=1.0.4' + python: '>=3.9' + pyyaml: '>=3.01' + setuptools: '' + six: '' + url: https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_3.conda + hash: + md5: 556a52a96313364aa79990ed1337b9a5 + sha256: c87615fcc7327c5dcc247f309731c98f7b9867a48e6265e9584af6dc8cd82345 + category: dev + optional: true +- name: pybtex-docutils + version: 1.0.3 + manager: conda + platform: linux-64 + dependencies: + docutils: '>=0.14' + pybtex: '>=0.16' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + setuptools: '' + url: https://conda.anaconda.org/conda-forge/linux-64/pybtex-docutils-1.0.3-py310hff52083_2.conda + hash: + md5: e9a2e0883b856ff34cea07ff02f702d3 + sha256: c19926680a369df0a45f61bb1762e3e722afc9e28b7f50a4dc053435a322dbdc + category: dev + optional: true +- name: pybtex-docutils + version: 1.0.3 + manager: conda + platform: win-64 + dependencies: + docutils: '>=0.14' + pybtex: '>=0.16' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + setuptools: '' + url: https://conda.anaconda.org/conda-forge/win-64/pybtex-docutils-1.0.3-py310h5588dad_2.conda + hash: + md5: 0caf4a3d5cf845e8d693e7f9bc8a7182 + sha256: 1a6a996ff1bfb607f88d71dbbee0df3cfe71ca135f7d42583f0e548b5e55d9d2 + category: dev + optional: true +- name: pycparser + version: '2.22' + manager: conda + platform: linux-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + hash: + md5: 12c566707c80111f9799308d9e265aef + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + category: main + optional: false +- name: pycparser + version: '2.22' + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + hash: + md5: 12c566707c80111f9799308d9e265aef + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + category: main + optional: false +- name: pydantic + version: 2.10.6 + manager: conda + platform: linux-64 + dependencies: + annotated-types: '>=0.6.0' + pydantic-core: 2.27.2 + python: '>=3.9' + typing-extensions: '>=4.6.1' + typing_extensions: '>=4.12.2' + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.6-pyh3cfb1c2_0.conda + hash: + md5: c69f87041cf24dfc8cb6bf64ca7133c7 + sha256: 9a78801a28959edeb945e8270a4e666577b52fac0cf4e35f88cf122f73d83e75 + category: main + optional: false +- name: pydantic + version: 2.10.6 + manager: conda + platform: win-64 + dependencies: + annotated-types: '>=0.6.0' + pydantic-core: 2.27.2 + python: '>=3.9' + typing-extensions: '>=4.6.1' + typing_extensions: '>=4.12.2' + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.6-pyh3cfb1c2_0.conda + hash: + md5: c69f87041cf24dfc8cb6bf64ca7133c7 + sha256: 9a78801a28959edeb945e8270a4e666577b52fac0cf4e35f88cf122f73d83e75 + category: main + optional: false +- name: pydantic-core + version: 2.27.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + typing-extensions: '>=4.6.0,!=4.7.0' + url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.27.2-py310h505e2c1_0.conda + hash: + md5: 3f804346d970a0343c46afc21cf5f16e + sha256: 6c58cdbb007f2dc8b0a8d96eacaba45bedf6ddfe9ed4558c40f899cb3438f3cb + category: main + optional: false +- name: pydantic-core + version: 2.27.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + typing-extensions: '>=4.6.0,!=4.7.0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pydantic-core-2.27.2-py310hc226416_0.conda + hash: + md5: 3df8c74e13bd1b7ec1292b5c6b744509 + sha256: 9c5e8eb73caa4c8f1945ac22af392495221f1809055114c4cc23609a8622a1eb + category: main + optional: false +- name: pydata-sphinx-theme + version: 0.15.4 + manager: conda + platform: linux-64 + dependencies: + accessible-pygments: '' + babel: '' + beautifulsoup4: '' + docutils: '!=0.17.0' + packaging: '' + pygments: '>=2.7' + python: '>=3.9' + sphinx: '>=5.0' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + hash: + md5: c7c50dd5192caa58a05e6a4248a27acb + sha256: 5ec877142ded763061e114e787a4e201c2fb3f0b1db2f04ace610a1187bb34ae + category: dev + optional: true +- name: pydata-sphinx-theme + version: 0.15.4 + manager: conda + platform: win-64 + dependencies: + accessible-pygments: '' + babel: '' + beautifulsoup4: '' + docutils: '!=0.17.0' + packaging: '' + pygments: '>=2.7' + python: '>=3.9' + sphinx: '>=5.0' + typing_extensions: '' + url: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + hash: + md5: c7c50dd5192caa58a05e6a4248a27acb + sha256: 5ec877142ded763061e114e787a4e201c2fb3f0b1db2f04ace610a1187bb34ae + category: dev + optional: true +- name: pydiso + version: 0.1.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + mkl: '>=2023.2.0,<2024.0a0' + numpy: '>=1.19,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '>=0.13' + url: https://conda.anaconda.org/conda-forge/linux-64/pydiso-0.1.2-py310h7b68af5_0.conda + hash: + md5: d70757c06c05a699982906150738d0fa + sha256: 620757472baf508531f142611d409ebd0d21cb3cacf8fa2488a33dc8fe1292b7 + category: main + optional: false +- name: pydiso + version: 0.1.2 + manager: conda + platform: win-64 + dependencies: + mkl: '>=2023.2.0,<2024.0a0' + numpy: '>=1.19,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '>=0.13' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pydiso-0.1.2-py310h5da8fee_0.conda + hash: + md5: aeb651d2c58b022f815fd488c9ae0e2d + sha256: 4398403f1dfde0db3a4c42d88f6f61f1ba7070766aa0eec4231af761fd68f91f + category: main + optional: false +- name: pygments + version: 2.19.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + hash: + md5: 232fb4577b6687b2d503ef8e254270c9 + sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b + category: main + optional: false +- name: pygments + version: 2.19.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + hash: + md5: 232fb4577b6687b2d503ef8e254270c9 + sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b + category: main + optional: false +- name: pylint + version: 3.3.4 + manager: conda + platform: linux-64 + dependencies: + astroid: '>=3.3.8,<3.4.0-dev0' + colorama: '>=0.4.5' + dill: '>=0.3.7' + isort: '>=4.2.5,<7,!=5.13.0' + mccabe: '>=0.6,<0.8' + platformdirs: '>=2.2.0' + python: '' + tomli: '>=1.1.0' + tomlkit: '>=0.10.1' + typing_extensions: '>=3.10.0' + url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.3.4-pyh29332c3_0.conda + hash: + md5: 3a865c9f5461a1f7b52ed535b03e9285 + sha256: 05016f7826e099b30d6dc7a028169cbc39aa1594da99991311f51516de419310 + category: dev + optional: true +- name: pylint + version: 3.3.4 + manager: conda + platform: win-64 + dependencies: + astroid: '>=3.3.8,<3.4.0-dev0' + colorama: '>=0.4.5' + dill: '>=0.3.7' + isort: '>=4.2.5,<7,!=5.13.0' + mccabe: '>=0.6,<0.8' + platformdirs: '>=2.2.0' + python: '>=3.9' + tomli: '>=1.1.0' + tomlkit: '>=0.10.1' + typing_extensions: '>=3.10.0' + url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.3.4-pyh29332c3_0.conda + hash: + md5: 3a865c9f5461a1f7b52ed535b03e9285 + sha256: 05016f7826e099b30d6dc7a028169cbc39aa1594da99991311f51516de419310 + category: dev + optional: true +- name: pyparsing + version: 3.2.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.1-pyhd8ed1ab_0.conda + hash: + md5: 285e237b8f351e85e7574a2c7bfa6d46 + sha256: f513fed4001fd228d3bf386269237b4ca6bff732c99ffc11fcbad8529b35407c + category: main + optional: false +- name: pyparsing + version: 3.2.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.1-pyhd8ed1ab_0.conda + hash: + md5: 285e237b8f351e85e7574a2c7bfa6d46 + sha256: f513fed4001fd228d3bf386269237b4ca6bff732c99ffc11fcbad8529b35407c + category: main + optional: false +- name: pyqt + version: 5.15.9 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + pyqt5-sip: 12.12.2 + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + qt-main: '>=5.15.8,<5.16.0a0' + sip: '>=6.7.11,<6.8.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda + hash: + md5: f4fe7a6e3d7c78c9de048ea9dda21690 + sha256: 92fe1c9eda6be7879ba798066016c1065047cc13d730105f5109835cbfeae8f1 + category: main + optional: false +- name: pyqt + version: 5.15.9 + manager: conda + platform: win-64 + dependencies: + pyqt5-sip: 12.12.2 + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + qt-main: '>=5.15.8,<5.16.0a0' + sip: '>=6.7.11,<6.8.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pyqt-5.15.9-py310h1fd54f2_5.conda + hash: + md5: 5df867d89a0482ea3591fe61f1558781 + sha256: 3aa9660d4b0c2db725bbad77840ac17180c5093617c34aa9467276dbac2d19e4 + category: main + optional: false +- name: pyqt5-sip + version: 12.12.2 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + packaging: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + sip: '' + toml: '' + url: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda + hash: + md5: ef5333594a958b25912002886b82b253 + sha256: a6aec078683ed3cf1650b7c47e3f0fe185015d54ea37fe76b9f31f05e1fd087d + category: main + optional: false +- name: pyqt5-sip + version: 12.12.2 + manager: conda + platform: win-64 + dependencies: + packaging: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + sip: '' + toml: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pyqt5-sip-12.12.2-py310h00ffb61_5.conda + hash: + md5: bf433b3dde7783aed71126051d1a5878 + sha256: 59cc61adf7563005c8d5d305539f3fbddf6fed0298d747cc0a93fba667191411 + category: main + optional: false +- name: pyqtwebengine + version: 5.15.9 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + pyqt: '>=5.15.9,<5.16.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + qt-main: '>=5.15.8,<5.16.0a0' + qt-webengine: '>=5.15.8,<5.16.0a0' + sip: '>=6.7.11,<6.8.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pyqtwebengine-5.15.9-py310h704022c_5.conda + hash: + md5: 2287e7e91731eab616237397a4fb9079 + sha256: d9f91ad43eb7ec427ad8f6e1137c6fdbc375aa1849986d420594598590219d06 + category: main + optional: false +- name: pyqtwebengine + version: 5.15.9 + manager: conda + platform: win-64 + dependencies: + pyqt: '>=5.15.9,<5.16.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + qt-main: '>=5.15.8,<5.16.0a0' + qt-webengine: '>=5.15.8,<5.16.0a0' + sip: '>=6.7.11,<6.8.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pyqtwebengine-5.15.9-py310he49db7d_5.conda + hash: + md5: 7a77a2e247d8b386c56976b9bb205823 + sha256: a1a8f9727c48bc65b0984ff312d4b74293ed1051c7b1db4ef88060fd1d2f14a2 + category: main + optional: false +- name: pyside2 + version: 5.15.8 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libclang13: '>=15.0.7' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libxml2: '>=2.12.3,<3.0.0a0' + libxslt: '>=1.1.39,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + qt-main: '>=5.15.8,<5.16.0a0' + xcb-util: '>=0.4.0,<0.5.0a0' + xcb-util-image: '>=0.4.0,<0.5.0a0' + xcb-util-keysyms: '>=0.4.0,<0.5.0a0' + xcb-util-renderutil: '>=0.3.9,<0.4.0a0' + xcb-util-wm: '>=0.4.1,<0.5.0a0' + xorg-libice: '>=1.1.1,<2.0a0' + xorg-libsm: '>=1.2.4,<2.0a0' + xorg-libx11: '>=1.8.7,<2.0a0' + xorg-libxext: '>=1.3.4,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pyside2-5.15.8-py310hffc9498_4.conda + hash: + md5: 538e1179f1c7208d06753a68c3626e99 + sha256: dd8da54d008438d4c4221776023717cc1a5dcff2536fdd1a9982080fcfb17c7b + category: main + optional: false +- name: pyside2 + version: 5.15.8 + manager: conda + platform: win-64 + dependencies: + libclang13: '>=15.0.7' + libxml2: '>=2.12.3,<3.0.0a0' + libxslt: '>=1.1.39,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + qt-main: '>=5.15.8,<5.16.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pyside2-5.15.8-py310h1e56762_4.conda + hash: + md5: d69462f5c54f28b94d74bcec969cedc0 + sha256: 526374fbd004621400a9509eaf3243a056e77232c0915e10dbfa39bdc2588691 + category: main + optional: false +- name: pysocks + version: 1.7.1 + manager: conda + platform: linux-64 + dependencies: + __unix: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + hash: + md5: 461219d1a5bd61342293efa2c0c90eac + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + category: main + optional: false +- name: pysocks + version: 1.7.1 + manager: conda + platform: win-64 + dependencies: + __win: '' + python: '>=3.9' + win_inet_pton: '' + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + hash: + md5: e2fd202833c4a981ce8a65974fe4abd1 + sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca + category: main + optional: false +- name: pytest + version: 8.3.4 + manager: conda + platform: linux-64 + dependencies: + colorama: '' + exceptiongroup: '>=1.0.0rc8' + iniconfig: '' + packaging: '' + pluggy: <2,>=1.5 + python: '>=3.9' + tomli: '>=1' + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda + hash: + md5: 799ed216dc6af62520f32aa39bc1c2bb + sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3 + category: dev + optional: true +- name: pytest + version: 8.3.4 + manager: conda + platform: win-64 + dependencies: + colorama: '' + exceptiongroup: '>=1.0.0rc8' + iniconfig: '' + packaging: '' + pluggy: <2,>=1.5 + python: '>=3.9' + tomli: '>=1' + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda + hash: + md5: 799ed216dc6af62520f32aa39bc1c2bb + sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3 + category: dev + optional: true +- name: pytest-cov + version: 6.0.0 + manager: conda + platform: linux-64 + dependencies: + coverage: '>=7.5' + pytest: '>=4.6' + python: '>=3.9' + toml: '' + url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda + hash: + md5: 79963c319d1be62c8fd3e34555816e01 + sha256: 09acac1974e10a639415be4be326dd21fa6d66ca51a01fb71532263fba6dccf6 + category: dev + optional: true +- name: pytest-cov + version: 6.0.0 + manager: conda + platform: win-64 + dependencies: + coverage: '>=7.5' + pytest: '>=4.6' + python: '>=3.9' + toml: '' + url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda + hash: + md5: 79963c319d1be62c8fd3e34555816e01 + sha256: 09acac1974e10a639415be4be326dd21fa6d66ca51a01fb71532263fba6dccf6 + category: dev + optional: true +- name: python + version: 3.10.16 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + bzip2: '>=1.0.8,<2.0a0' + ld_impl_linux-64: '>=2.36.1' + libffi: '>=3.4,<4.0a0' + libgcc: '>=13' + liblzma: '>=5.6.3,<6.0a0' + libnsl: '>=2.0.1,<2.1.0a0' + libsqlite: '>=3.47.0,<4.0a0' + libuuid: '>=2.38.1,<3.0a0' + libxcrypt: '>=4.4.36' + libzlib: '>=1.3.1,<2.0a0' + ncurses: '>=6.5,<7.0a0' + openssl: '>=3.4.0,<4.0a0' + pip: '' + readline: '>=8.2,<9.0a0' + tk: '>=8.6.13,<8.7.0a0' + tzdata: '' + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.16-he725a3c_1_cpython.conda + hash: + md5: b887811a901b3aa622a92caf03bc8917 + sha256: 3f90a2d5062a73cd2dd8a0027718aee1db93f7975b9cfe529e2c9aeec2db262e + category: main + optional: false +- name: python + version: 3.10.16 + manager: conda + platform: win-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libffi: '>=3.4,<4.0a0' + liblzma: '>=5.6.3,<6.0a0' + libsqlite: '>=3.47.0,<4.0a0' + libzlib: '>=1.3.1,<2.0a0' + openssl: '>=3.4.0,<4.0a0' + pip: '' + tk: '>=8.6.13,<8.7.0a0' + tzdata: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/python-3.10.16-h37870fc_1_cpython.conda + hash: + md5: 5c292a7bd9c32a256ba7939b3e6dee03 + sha256: 3392db6a7a90864d3fd1ce281859a49e27ee68121b63eece2ae6f1dbb2a8aaf1 + category: main + optional: false +- name: python-dateutil + version: 2.9.0.post0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + six: '>=1.5' + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + hash: + md5: 5ba79d7c71f03c678c8ead841f347d6e + sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 + category: main + optional: false +- name: python-dateutil + version: 2.9.0.post0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + six: '>=1.5' + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + hash: + md5: 5ba79d7c71f03c678c8ead841f347d6e + sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 + category: main + optional: false +- name: python-fastjsonschema + version: 2.21.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda + hash: + md5: 38e34d2d1d9dca4fb2b9a0a04f604e2c + sha256: 1b09a28093071c1874862422696429d0d35bd0b8420698003ac004746c5e82a2 + category: main + optional: false +- name: python-fastjsonschema + version: 2.21.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda + hash: + md5: 38e34d2d1d9dca4fb2b9a0a04f604e2c + sha256: 1b09a28093071c1874862422696429d0d35bd0b8420698003ac004746c5e82a2 + category: main + optional: false +- name: python-json-logger + version: 2.0.7 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + hash: + md5: a61bf9ec79426938ff785eb69dbb1960 + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + category: main + optional: false +- name: python-json-logger + version: 2.0.7 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + hash: + md5: a61bf9ec79426938ff785eb69dbb1960 + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + category: main + optional: false +- name: python-tzdata + version: '2023.4' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.4-pyhd8ed1ab_0.conda + hash: + md5: c79cacf8a06a51552fc651652f170208 + sha256: d2381037bf362c78654a8ece0e0f54715e09113448ddd7ed837f688536cbf176 + category: main + optional: false +- name: python-tzdata + version: '2023.4' + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.4-pyhd8ed1ab_0.conda + hash: + md5: c79cacf8a06a51552fc651652f170208 + sha256: d2381037bf362c78654a8ece0e0f54715e09113448ddd7ed837f688536cbf176 + category: main + optional: false +- name: python_abi + version: '3.10' + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-5_cp310.conda + hash: + md5: 2921c34715e74b3587b4cff4d36844f9 + sha256: 074d2f0b31f0333b7e553042b17ea54714b74263f8adda9a68a4bd8c7e219971 + category: main + optional: false +- name: python_abi + version: '3.10' + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-5_cp310.conda + hash: + md5: 3c510f4c4383f5fbdb12fdd971b30d49 + sha256: 0671bea4d5c5b8618ee7e2b1117d5a90901348ac459db57b654007f1644fa087 + category: main + optional: false +- name: pytz + version: '2024.1' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + hash: + md5: 3eeeeb9e4827ace8c0c1419c85d590ad + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + category: main + optional: false +- name: pytz + version: '2024.1' + manager: conda + platform: win-64 + dependencies: + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + hash: + md5: 3eeeeb9e4827ace8c0c1419c85d590ad + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + category: main + optional: false +- name: pywavelets + version: 1.8.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + numpy: '>=1.23,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.8.0-py310hf462985_0.conda + hash: + md5: 4c441eff2be2e65bd67765c5642051c5 + sha256: f23e0b5432c6d338876eca664deeb360949062ce026ddb65bcb1f31643452354 + category: main + optional: false +- name: pywavelets + version: 1.8.0 + manager: conda + platform: win-64 + dependencies: + numpy: '>=1.23,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pywavelets-1.8.0-py310hb0944cc_0.conda + hash: + md5: 4227aeb3ae288fb6fc8876dacc016994 + sha256: dd178ca689eb8bf794abbff8f19868afac29b61f9cd0597b0bf7ed190eac817c + category: main + optional: false +- name: pywin32 + version: '307' + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py310h9e98ed7_3.conda + hash: + md5: 1fd1de4af8c39bb0efa5c9d5b092aa42 + sha256: 712a131fadba8236830fc33d04154865a611e489f595b96370ade21cc2c1a5a2 + category: main + optional: false +- name: pywinpty + version: 2.0.15 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + winpty: '' + url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py310h9e98ed7_0.conda + hash: + md5: f49c829097b0b3074801911047e4fd70 + sha256: ca5952309c4faa76c617488da87ac8b77dbeb86b4dae7b767211b2ededf98575 + category: main + optional: false +- name: pyyaml + version: 6.0.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + yaml: '>=0.2.5,<0.3.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda + hash: + md5: fd343408e64cf1e273ab7c710da374db + sha256: 5fba7f5babcac872c72f6509c25331bcfac4f8f5031f0102530a41b41336fce6 + category: main + optional: false +- name: pyyaml + version: 6.0.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + yaml: '>=0.2.5,<0.3.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py310h38315fa_2.conda + hash: + md5: 9986c3731bb820db0830dd0825c26cf9 + sha256: 49dd492bdf2c479118ca9d61a59ce259594853d367a1a0548926f41a6e734724 + category: main + optional: false +- name: pyzmq + version: 26.2.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libsodium: '>=1.0.20,<1.0.21.0a0' + libstdcxx: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + zeromq: '>=4.3.5,<4.4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.1-py310h71f11fc_0.conda + hash: + md5: 7793fb5339be966e5f28971fd6025a9e + sha256: fb5446c23c920970502e4288ee5a8c2b6a52c8c6761673716d7243f7feedf065 + category: main + optional: false +- name: pyzmq + version: 26.2.1 + manager: conda + platform: win-64 + dependencies: + libsodium: '>=1.0.20,<1.0.21.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zeromq: '>=4.3.5,<4.3.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/pyzmq-26.2.1-py310h656833d_0.conda + hash: + md5: a32255b1e5bf69adf98b943fba791bc0 + sha256: 992e8813a540770e096d0bcfdd6152f7e57a8a2632957cdd3ec2f4609afd1e21 + category: main + optional: false +- name: qhull + version: '2020.2' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + hash: + md5: 353823361b1d27eb3960efb076dfcaf6 + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + category: main + optional: false +- name: qhull + version: '2020.2' + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + hash: + md5: 854fbdff64b572b5c0b470f334d34c11 + sha256: 887d53486a37bd870da62b8fa2ebe3993f912ad04bd755e7ed7c47ced97cbaa8 + category: main + optional: false +- name: qt-main + version: 5.15.8 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + alsa-lib: '>=1.2.10,<1.3.0.0a0' + dbus: '>=1.13.6,<2.0a0' + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + gst-plugins-base: '>=1.22.6,<1.23.0a0' + gstreamer: '>=1.22.6,<1.23.0a0' + harfbuzz: '>=8.2.1,<9.0a0' + icu: '>=73.2,<74.0a0' + krb5: '>=1.21.2,<1.22.0a0' + libclang: '>=15.0.7,<16.0a0' + libclang13: '>=15.0.7' + libcups: '>=2.3.3,<2.4.0a0' + libevent: '>=2.1.12,<2.1.13.0a0' + libexpat: '>=2.5.0,<3.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.0,<3.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libpq: '>=16.0,<17.0a0' + libsqlite: '>=3.43.2,<4.0a0' + libstdcxx-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + libxkbcommon: '>=1.6.0,<2.0a0' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + mysql-libs: '>=8.0.33,<8.1.0a0' + nspr: '>=4.35,<5.0a0' + nss: '>=3.94,<4.0a0' + openssl: '>=3.1.3,<4.0a0' + pulseaudio-client: '>=16.1,<16.2.0a0' + xcb-util: '>=0.4.0,<0.5.0a0' + xcb-util-image: '>=0.4.0,<0.5.0a0' + xcb-util-keysyms: '>=0.4.0,<0.5.0a0' + xcb-util-renderutil: '>=0.3.9,<0.4.0a0' + xcb-util-wm: '>=0.4.1,<0.5.0a0' + xorg-libice: '>=1.1.1,<2.0a0' + xorg-libsm: '>=1.2.4,<2.0a0' + xorg-libx11: '>=1.8.6,<2.0a0' + xorg-libxext: '>=1.3.4,<2.0a0' + xorg-xf86vidmodeproto: '' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda + hash: + md5: 4f01e33dbb406085a16a2813ab067e95 + sha256: 4c3d2b37b00a0a84b9674e88b636e10817ae2c23f5af27bbe77cf4f46f3a4225 + category: main + optional: false +- name: qt-main + version: 5.15.8 + manager: conda + platform: win-64 + dependencies: + gst-plugins-base: '>=1.22.6,<1.23.0a0' + gstreamer: '>=1.22.6,<1.23.0a0' + icu: '>=73.2,<74.0a0' + krb5: '>=1.21.2,<1.22.0a0' + libclang: '>=15.0.7,<16.0a0' + libclang13: '>=15.0.7' + libglib: '>=2.78.0,<3.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libsqlite: '>=3.43.2,<4.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + openssl: '>=3.1.3,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/qt-main-5.15.8-h9e85ed6_17.conda + hash: + md5: 568b134e26f3e2a44ff24028c27b8c0e + sha256: ca624ec9c0d07d2c61b7007661b10111c2f3bb38bcc6175a459f4a5180a5748d + category: main + optional: false +- name: qt-webengine + version: 5.15.8 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + alsa-lib: '>=1.2.10,<1.3.0.0a0' + dbus: '>=1.13.6,<2.0a0' + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + harfbuzz: '>=8.2.1,<9.0a0' + libcups: '>=2.3.3,<2.4.0a0' + libevent: '>=2.1.12,<2.1.13.0a0' + libexpat: '>=2.5.0,<3.0a0' + libgcc-ng: '>=12' + libglib: '>=2.78.0,<3.0a0' + libiconv: '>=1.17,<2.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libopus: '>=1.3.1,<2.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libsqlite: '>=3.44.0,<4.0a0' + libstdcxx-ng: '>=12' + libwebp: '' + libwebp-base: '>=1.3.2,<2.0a0' + libxcb: '>=1.15,<1.16.0a0' + libxkbcommon: '>=1.6.0,<2.0a0' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + nspr: '>=4.35,<5.0a0' + nss: '>=3.94,<4.0a0' + pulseaudio-client: '>=16.1,<16.2.0a0' + qt-main: '>=5.15.8,<5.16.0a0' + xorg-libx11: '>=1.8.7,<2.0a0' + xorg-libxcomposite: '' + xorg-libxdamage: '' + xorg-libxext: '>=1.3.4,<2.0a0' + xorg-libxfixes: '' + xorg-libxrandr: '' + xorg-libxrender: '>=0.9.11,<0.10.0a0' + xorg-libxtst: '' + url: https://conda.anaconda.org/conda-forge/linux-64/qt-webengine-5.15.8-h75ea521_4.conda + hash: + md5: b4dceacc13fa80ceeb1e721a4e8b5445 + sha256: 9d702f311bf3b8e81e1e8c46263ee4900afdf25ad61c08e8f0cc58d5099d0acb + category: main + optional: false +- name: qt-webengine + version: 5.15.8 + manager: conda + platform: win-64 + dependencies: + libiconv: '>=1.17,<2.0a0' + libjpeg-turbo: '>=3.0.0,<4.0a0' + libpng: '>=1.6.39,<1.7.0a0' + libsqlite: '>=3.44.0,<4.0a0' + libwebp: '' + libwebp-base: '>=1.3.2,<2.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + qt-main: '>=5.15.8,<5.16.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/qt-webengine-5.15.8-h4bf5c4e_4.tar.bz2 + hash: + md5: e080e2c05baf3821dc1272537d3df48a + sha256: f8eba85995ba7557227a0f87cd3dbfc72ab763cb48c4a6b0e79715804b89fb93 + category: main + optional: false +- name: rav1e + version: 0.6.6 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda + hash: + md5: 77d9955b4abddb811cb8ab1aa7d743e4 + sha256: 91b3c1ced90d04ee2eded1f72cf3cbc19ff05a25e41876ef0758266a5bab009f + category: main + optional: false +- name: rav1e + version: 0.6.6 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/rav1e-0.6.6-h975169c_2.conda + hash: + md5: bd32cc2ed62374932f9d57a2e3eb2863 + sha256: 3193451440e5ac737b7d5d2a79f9e012d426c0c53e41e60df4992150bfc39565 + category: main + optional: false +- name: re2 + version: 2023.09.01 + manager: conda + platform: linux-64 + dependencies: + libre2-11: 2023.09.01 + url: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_1.conda + hash: + md5: 30c0f66cbc5927a12662acf94067e780 + sha256: b8f9e366f02c559587327f0cd7fa45c5c399b4025f2c9e1aa292bb7cbe1482c0 + category: main + optional: false +- name: re2 + version: 2023.09.01 + manager: conda + platform: win-64 + dependencies: + libre2-11: 2023.09.01 + url: https://conda.anaconda.org/conda-forge/win-64/re2-2023.09.01-hd3b24a8_1.conda + hash: + md5: 4719b3240cb299de27527f5a1cc0af23 + sha256: 5e7b1aa9ede7778c6b1a52c907b294a1908ac1adfb3ea3c8bb07f5d23f6ebf55 + category: main + optional: false +- name: readline + version: '8.2' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + ncurses: '>=6.3,<7.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + hash: + md5: 47d31b792659ce70f470b5c82fdfb7a4 + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + category: main + optional: false +- name: readthedocs-sphinx-ext + version: 2.2.5 + manager: conda + platform: linux-64 + dependencies: + jinja2: '>=2.9' + packaging: '' + python: '>=3.9' + requests: '' + url: https://conda.anaconda.org/conda-forge/noarch/readthedocs-sphinx-ext-2.2.5-pyhd8ed1ab_1.conda + hash: + md5: 42840a95562a02bef45e7b7fb24dcba4 + sha256: e391356581919077b1639ebd13f4cbb0773acfd5710cfe4188921e8a0387dc6b + category: dev + optional: true +- name: readthedocs-sphinx-ext + version: 2.2.5 + manager: conda + platform: win-64 + dependencies: + jinja2: '>=2.9' + packaging: '' + python: '>=3.9' + requests: '' + url: https://conda.anaconda.org/conda-forge/noarch/readthedocs-sphinx-ext-2.2.5-pyhd8ed1ab_1.conda + hash: + md5: 42840a95562a02bef45e7b7fb24dcba4 + sha256: e391356581919077b1639ebd13f4cbb0773acfd5710cfe4188921e8a0387dc6b + category: dev + optional: true +- name: referencing + version: 0.36.2 + manager: conda + platform: linux-64 + dependencies: + attrs: '>=22.2.0' + python: '' + rpds-py: '>=0.7.0' + typing_extensions: '>=4.4.0' + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.2-pyh29332c3_0.conda + hash: + md5: 9140f1c09dd5489549c6a33931b943c7 + sha256: e20909f474a6cece176dfc0dc1addac265deb5fa92ea90e975fbca48085b20c3 + category: main + optional: false +- name: referencing + version: 0.36.2 + manager: conda + platform: win-64 + dependencies: + attrs: '>=22.2.0' + python: '>=3.9' + rpds-py: '>=0.7.0' + typing_extensions: '>=4.4.0' + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.2-pyh29332c3_0.conda + hash: + md5: 9140f1c09dd5489549c6a33931b943c7 + sha256: e20909f474a6cece176dfc0dc1addac265deb5fa92ea90e975fbca48085b20c3 + category: main + optional: false +- name: requests + version: 2.32.3 + manager: conda + platform: linux-64 + dependencies: + certifi: '>=2017.4.17' + charset-normalizer: '>=2,<4' + idna: '>=2.5,<4' + python: '>=3.9' + urllib3: '>=1.21.1,<3' + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + hash: + md5: a9b9368f3701a417eac9edbcae7cb737 + sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + category: main + optional: false +- name: requests + version: 2.32.3 + manager: conda + platform: win-64 + dependencies: + certifi: '>=2017.4.17' + charset-normalizer: '>=2,<4' + idna: '>=2.5,<4' + python: '>=3.9' + urllib3: '>=1.21.1,<3' + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + hash: + md5: a9b9368f3701a417eac9edbcae7cb737 + sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + category: main + optional: false +- name: retrying + version: 1.3.4 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + six: '>=1.7.0' + url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.4-pyhd8ed1ab_0.conda + hash: + md5: d9c8cef727d60fa29fd485ce79dd745a + sha256: ff6c87f47b06725e34a6c7916e13a922090d586df6fd245b6cfd928ac0840dd1 + category: main + optional: false +- name: retrying + version: 1.3.4 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + six: '>=1.7.0' + url: https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.4-pyhd8ed1ab_0.conda + hash: + md5: d9c8cef727d60fa29fd485ce79dd745a + sha256: ff6c87f47b06725e34a6c7916e13a922090d586df6fd245b6cfd928ac0840dd1 + category: main + optional: false +- name: rfc3339-validator + version: 0.1.4 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + six: '' + url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + hash: + md5: 36de09a8d3e5d5e6f4ee63af49e59706 + sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5 + category: main + optional: false +- name: rfc3339-validator + version: 0.1.4 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + six: '' + url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + hash: + md5: 36de09a8d3e5d5e6f4ee63af49e59706 + sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5 + category: main + optional: false +- name: rfc3986-validator + version: 0.1.1 + manager: conda + platform: linux-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + hash: + md5: 912a71cc01012ee38e6b90ddd561e36f + sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37 + category: main + optional: false +- name: rfc3986-validator + version: 0.1.1 + manager: conda + platform: win-64 + dependencies: + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + hash: + md5: 912a71cc01012ee38e6b90ddd561e36f + sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37 + category: main + optional: false +- name: rpds-py + version: 0.22.3 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.22.3-py310h505e2c1_0.conda + hash: + md5: 3c12053527c50b3f825dd6dd0861832d + sha256: e13019600e75707126118cf3f02187e7dd96f475a82e8fa06e59091f76159274 + category: main + optional: false +- name: rpds-py + version: 0.22.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.22.3-py310hc226416_0.conda + hash: + md5: 9830bfdf323849d4575a0036f184a3ad + sha256: 30ceeaf10fa48ac63ca5ef72e7ed611241c852f7f980fff1ac37571fde635b31 + category: main + optional: false +- name: scikit-image + version: 0.20.0 + manager: conda + platform: linux-64 + dependencies: + cloudpickle: '>=0.2.1' + cytoolz: '>=0.7.3' + dask-core: '>=1.0.0,!=2.17.0' + imageio: '>=2.4.1' + lazy_loader: '>=0.1' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + networkx: '>=2.8' + numpy: '>=1.21.6,<2.0a0' + packaging: '>=20.0' + pillow: '>=9.0.1' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + pywavelets: '>=1.1.1' + scipy: '>=1.8' + tifffile: '>=2019.7.26' + toolz: '>=0.7.3' + url: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.20.0-py310h9b08913_1.conda + hash: + md5: 014e04c3f172ee9cf6815dd3af9ab648 + sha256: 523dbd074d6260070fe27be33218efea2027a4196f651bbda6f68355900d9f40 + category: main + optional: false +- name: scikit-image + version: 0.20.0 + manager: conda + platform: win-64 + dependencies: + cloudpickle: '>=0.2.1' + cytoolz: '>=0.7.3' + dask-core: '>=1.0.0,!=2.17.0' + imageio: '>=2.4.1' + lazy_loader: '>=0.1' + networkx: '>=2.8' + numpy: '>=1.21.6,<2.0a0' + packaging: '>=20.0' + pillow: '>=9.0.1' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + pywavelets: '>=1.1.1' + scipy: '>=1.8' + tifffile: '>=2019.7.26' + toolz: '>=0.7.3' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/scikit-image-0.20.0-py310h1c4a608_1.conda + hash: + md5: b4a29e17265007759c9c0503ec2f8ff2 + sha256: a89afb8d68243e14dcbc533facc0ed39fa8b9f8909596a30955beac0a9a533e9 + category: main + optional: false +- name: scikit-learn + version: 1.4.2 + manager: conda + platform: linux-64 + dependencies: + _openmp_mutex: '>=4.5' + joblib: '>=1.2.0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.19,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '' + threadpoolctl: '>=2.0.0' + url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.2-py310h981052a_1.conda + hash: + md5: 672f0238a945f1c98fe97b147c8a040a + sha256: b3718226723c94f5a93f417acb29ad82b0520acf945a06ae90e0b7ed076191a7 + category: main + optional: false +- name: scikit-learn + version: 1.4.2 + manager: conda + platform: win-64 + dependencies: + joblib: '>=1.2.0' + numpy: '>=1.19,<3' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + scipy: '' + threadpoolctl: '>=2.0.0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.4.2-py310hf2a6c47_1.conda + hash: + md5: 9142e7e901c0f6e76541b523d480043e + sha256: 24e9f3db0a2f477cbe20d1c98b48edd0d768af21dd7e6c3553e286f01deabfe5 + category: main + optional: false +- name: scipy + version: 1.14.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libblas: '>=3.9.0,<4.0a0' + libcblas: '>=3.9.0,<4.0a0' + libgcc: '>=13' + libgfortran: '' + libgfortran5: '>=13.3.0' + liblapack: '>=3.9.0,<4.0a0' + libstdcxx: '>=13' + numpy: '>=1.23.5' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_2.conda + hash: + md5: b5d548b2a7cf8d0c74fc6c4bf42d1ca5 + sha256: a15008a51fd6b6dcaeb5563869ff0a8a015f1e0a8634a9d89d2c189eefbd7182 + category: main + optional: false +- name: scipy + version: 1.14.1 + manager: conda + platform: win-64 + dependencies: + libblas: '>=3.9.0,<4.0a0' + libcblas: '>=3.9.0,<4.0a0' + liblapack: '>=3.9.0,<4.0a0' + numpy: '>=1.23.5' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_2.conda + hash: + md5: 72a2a7c264a8b48d113111756c2bbbb4 + sha256: 761829fa9c91fdffff0ba5a1f56f7d4cc00bec71ca7fa06859dc7f5a98117273 + category: main + optional: false +- name: semver + version: 3.0.4 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.4-pyhd8ed1ab_0.conda + hash: + md5: 982aa48accc06494cbd2b51af69e17c7 + sha256: 7d3f5531269e15cb533b60009aa2a950f9844acf31f38c1b55c8000dbb316676 + category: dev + optional: true +- name: semver + version: 3.0.4 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/semver-3.0.4-pyhd8ed1ab_0.conda + hash: + md5: 982aa48accc06494cbd2b51af69e17c7 + sha256: 7d3f5531269e15cb533b60009aa2a950f9844acf31f38c1b55c8000dbb316676 + category: dev + optional: true +- name: send2trash + version: 1.8.3 + manager: conda + platform: linux-64 + dependencies: + __linux: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_1.conda + hash: + md5: 938c8de6b9de091997145b3bf25cdbf9 + sha256: 00926652bbb8924e265caefdb1db100f86a479e8f1066efe395d5552dde54d02 + category: main + optional: false +- name: send2trash + version: 1.8.3 + manager: conda + platform: win-64 + dependencies: + __win: '' + python: '>=3.9' + pywin32: '' + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_1.conda + hash: + md5: e6a4e906051565caf5fdae5b0415b654 + sha256: ba8b93df52e0d625177907852340d735026c81118ac197f61f1f5baea19071ad + category: main + optional: false +- name: setuptools + version: 75.8.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda + hash: + md5: 8f28e299c11afdd79e0ec1e279dcdc52 + sha256: e0778e4f276e9a81b51c56f51ec22a27b4d8fc955abc0be77ad09ca9bea06bb9 + category: main + optional: false +- name: setuptools + version: 75.8.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda + hash: + md5: 8f28e299c11afdd79e0ec1e279dcdc52 + sha256: e0778e4f276e9a81b51c56f51ec22a27b4d8fc955abc0be77ad09ca9bea06bb9 + category: main + optional: false +- name: shapely + version: 2.0.2 + manager: conda + platform: linux-64 + dependencies: + geos: '>=3.12.0,<3.12.1.0a0' + libgcc-ng: '>=12' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py310h7dcad9a_0.conda + hash: + md5: 0d7c35fe5cc1f436e368ddd500deb979 + sha256: dc45ce90e8ebbd7074c05e4003614422ea14de83527582bb2728292a69173615 + category: main + optional: false +- name: shapely + version: 2.0.2 + manager: conda + platform: win-64 + dependencies: + geos: '>=3.12.0,<3.12.1.0a0' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/shapely-2.0.2-py310h839b4a8_0.conda + hash: + md5: fccafb1aec64a793deb7de374ab3f760 + sha256: 9eeedc0fc8f45c1ff4b196c8e9efdd408578346d246905ba371e1710176167d4 + category: main + optional: false +- name: sip + version: 6.7.12 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + packaging: '' + ply: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tomli: '' + url: https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda + hash: + md5: 68d5bfccaba2d89a7812098dd3966d9b + sha256: 4c350a7ed9f5fd98196a50bc74ce1dc3bb05b0c90d17ea120439755fe2075796 + category: main + optional: false +- name: sip + version: 6.7.12 + manager: conda + platform: win-64 + dependencies: + packaging: '' + ply: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + tomli: '' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/sip-6.7.12-py310h00ffb61_0.conda + hash: + md5: 882ddccbb0d5c47da05eb35ec4813c16 + sha256: 159f95e125ff48fa84cfbff8ef7ccfe14b6960df108b6c1d3472d0248bb07781 + category: main + optional: false +- name: six + version: 1.17.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + hash: + md5: a451d576819089b0d672f18768be0f65 + sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db + category: main + optional: false +- name: six + version: 1.17.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + hash: + md5: a451d576819089b0d672f18768be0f65 + sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db + category: main + optional: false +- name: snappy + version: 1.1.10 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-hdb0a2a9_1.conda + hash: + md5: 78b8b85bdf1f42b8a2b3cb577d8742d1 + sha256: 082eadbc355016e948f1acc2f16e721ae362ecdaa204cbd60136ada19bd43f3a + category: main + optional: false +- name: snappy + version: 1.1.10 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_1.conda + hash: + md5: c6837784f15b2dd7a1927c4e8b8dcecd + sha256: a96f79a6ed5714ff3d2daebccdb9296a9c08394ed934ff78cec1a31dd15e29ec + category: main + optional: false +- name: sniffio + version: 1.3.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + hash: + md5: bf7a226e58dfb8346c70df36065d86c9 + sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012 + category: main + optional: false +- name: sniffio + version: 1.3.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + hash: + md5: bf7a226e58dfb8346c70df36065d86c9 + sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012 + category: main + optional: false +- name: snowballstemmer + version: 2.2.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=2' + url: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4d22a9315e78c6827f806065957d566e + sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + category: dev + optional: true +- name: snowballstemmer + version: 2.2.0 + manager: conda + platform: win-64 + dependencies: + python: '>=2' + url: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4d22a9315e78c6827f806065957d566e + sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + category: dev + optional: true +- name: sortedcontainers + version: 2.4.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + hash: + md5: 0401a17ae845fa72c7210e206ec5647d + sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7 + category: main + optional: false +- name: sortedcontainers + version: 2.4.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + hash: + md5: 0401a17ae845fa72c7210e206ec5647d + sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7 + category: main + optional: false +- name: soupsieve + version: '2.5' + manager: conda + platform: linux-64 + dependencies: + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + hash: + md5: 3f144b2c34f8cb5a9abd9ed23a39c561 + sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c + category: main + optional: false +- name: soupsieve + version: '2.5' + manager: conda + platform: win-64 + dependencies: + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + hash: + md5: 3f144b2c34f8cb5a9abd9ed23a39c561 + sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c + category: main + optional: false +- name: sphinx + version: 5.3.0 + manager: conda + platform: linux-64 + dependencies: + alabaster: '>=0.7,<0.8' + babel: '>=2.9' + colorama: '>=0.4.5' + docutils: '>=0.14,<0.20' + imagesize: '>=1.3' + importlib-metadata: '>=4.8' + jinja2: '>=3.0' + packaging: '>=21.0' + pygments: '>=2.12' + python: '>=3.7' + requests: '>=2.5.0' + snowballstemmer: '>=2.0' + sphinxcontrib-applehelp: '' + sphinxcontrib-devhelp: '' + sphinxcontrib-htmlhelp: '>=2.0.0' + sphinxcontrib-jsmath: '' + sphinxcontrib-qthelp: '' + sphinxcontrib-serializinghtml: '>=1.1.5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: f9e1fcfe235d655900bfeb6aee426472 + sha256: f11fd5fb4ae2c65f41ae86e7408e3ab44844898d928264aa9e89929fffc685c8 + category: dev + optional: true +- name: sphinx + version: 5.3.0 + manager: conda + platform: win-64 + dependencies: + alabaster: '>=0.7,<0.8' + babel: '>=2.9' + colorama: '>=0.4.5' + docutils: '>=0.14,<0.20' + imagesize: '>=1.3' + importlib-metadata: '>=4.8' + jinja2: '>=3.0' + packaging: '>=21.0' + pygments: '>=2.12' + python: '>=3.7' + requests: '>=2.5.0' + snowballstemmer: '>=2.0' + sphinxcontrib-applehelp: '' + sphinxcontrib-devhelp: '' + sphinxcontrib-htmlhelp: '>=2.0.0' + sphinxcontrib-jsmath: '' + sphinxcontrib-qthelp: '' + sphinxcontrib-serializinghtml: '>=1.1.5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: f9e1fcfe235d655900bfeb6aee426472 + sha256: f11fd5fb4ae2c65f41ae86e7408e3ab44844898d928264aa9e89929fffc685c8 + category: dev + optional: true +- name: sphinx-book-theme + version: 1.1.3 + manager: conda + platform: linux-64 + dependencies: + pydata-sphinx-theme: '>=0.15.2' + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.3-pyhd8ed1ab_1.conda + hash: + md5: 501e2d6d8aa1b8d82d2707ce8c90b287 + sha256: cf1d3ae6d28042954ac750f6948678fefa619681c3994d2637d747d96a1139ea + category: dev + optional: true +- name: sphinx-book-theme + version: 1.1.3 + manager: conda + platform: win-64 + dependencies: + pydata-sphinx-theme: '>=0.15.2' + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.3-pyhd8ed1ab_1.conda + hash: + md5: 501e2d6d8aa1b8d82d2707ce8c90b287 + sha256: cf1d3ae6d28042954ac750f6948678fefa619681c3994d2637d747d96a1139ea + category: dev + optional: true +- name: sphinx-comments + version: 0.0.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=1.8' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-comments-0.0.3-pyhd8ed1ab_1.conda + hash: + md5: 30e02fa8e40287da066e348c95ff5609 + sha256: 00129f91b905441a9e27c46ef32c22617743eb4a4f7207e1dd84bc19505d4381 + category: dev + optional: true +- name: sphinx-comments + version: 0.0.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=1.8' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-comments-0.0.3-pyhd8ed1ab_1.conda + hash: + md5: 30e02fa8e40287da066e348c95ff5609 + sha256: 00129f91b905441a9e27c46ef32c22617743eb4a4f7207e1dd84bc19505d4381 + category: dev + optional: true +- name: sphinx-copybutton + version: 0.5.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=1.8' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + hash: + md5: bf22cb9c439572760316ce0748af3713 + sha256: 8cd892e49cb4d00501bc4439fb0c73ca44905f01a65b2b7fa05ba0e8f3924f19 + category: dev + optional: true +- name: sphinx-copybutton + version: 0.5.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=1.8' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + hash: + md5: bf22cb9c439572760316ce0748af3713 + sha256: 8cd892e49cb4d00501bc4439fb0c73ca44905f01a65b2b7fa05ba0e8f3924f19 + category: dev + optional: true +- name: sphinx-design + version: 0.6.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=5,<8' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_0.conda + hash: + md5: 51b2433e4a223b14defee96d3caf9bab + sha256: 99a44df1d09a27e40002ebaf76792dac75c9cb1386af313b272a4251c8047640 + category: dev + optional: true +- name: sphinx-design + version: 0.6.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=5,<8' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_0.conda + hash: + md5: 51b2433e4a223b14defee96d3caf9bab + sha256: 99a44df1d09a27e40002ebaf76792dac75c9cb1386af313b272a4251c8047640 + category: dev + optional: true +- name: sphinx-external-toc + version: 1.0.1 + manager: conda + platform: linux-64 + dependencies: + click: '>=7.1' + python: '>=3.9' + pyyaml: '' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-external-toc-1.0.1-pyhd8ed1ab_1.conda + hash: + md5: d248f9db0f1c2e7c480b058925afa9c5 + sha256: 47dda7135f9fb1777b7066c3b9260fdd796d6ec2aeb8804161f39c65b3461401 + category: dev + optional: true +- name: sphinx-external-toc + version: 1.0.1 + manager: conda + platform: win-64 + dependencies: + click: '>=7.1' + python: '>=3.9' + pyyaml: '' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-external-toc-1.0.1-pyhd8ed1ab_1.conda + hash: + md5: d248f9db0f1c2e7c480b058925afa9c5 + sha256: 47dda7135f9fb1777b7066c3b9260fdd796d6ec2aeb8804161f39c65b3461401 + category: dev + optional: true +- name: sphinx-jupyterbook-latex + version: 1.0.0 + manager: conda + platform: linux-64 + dependencies: + packaging: '' + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-jupyterbook-latex-1.0.0-pyhd8ed1ab_1.conda + hash: + md5: 9261bc5d987013f5d8dc58061c34f1a3 + sha256: b64c031795918f26ddeb5148ede2d3a4944cd9f5461cf72bde3f28acdc71d2f3 + category: dev + optional: true +- name: sphinx-jupyterbook-latex + version: 1.0.0 + manager: conda + platform: win-64 + dependencies: + packaging: '' + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-jupyterbook-latex-1.0.0-pyhd8ed1ab_1.conda + hash: + md5: 9261bc5d987013f5d8dc58061c34f1a3 + sha256: b64c031795918f26ddeb5148ede2d3a4944cd9f5461cf72bde3f28acdc71d2f3 + category: dev + optional: true +- name: sphinx-multitoc-numbering + version: 0.1.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=3' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-multitoc-numbering-0.1.3-pyhd8ed1ab_1.conda + hash: + md5: cc5fc0988f0fedab436361b9b5906a58 + sha256: 9fa48b33334c3a9971c96dd3d921950e8350cfa88a8e8ebaec6d8261071ea2ac + category: dev + optional: true +- name: sphinx-multitoc-numbering + version: 0.1.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=3' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-multitoc-numbering-0.1.3-pyhd8ed1ab_1.conda + hash: + md5: cc5fc0988f0fedab436361b9b5906a58 + sha256: 9fa48b33334c3a9971c96dd3d921950e8350cfa88a8e8ebaec6d8261071ea2ac + category: dev + optional: true +- name: sphinx-thebe + version: 0.3.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=4' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-thebe-0.3.1-pyhd8ed1ab_1.conda + hash: + md5: f6627ce09745a0f822cc6e7de8cf4f99 + sha256: 9d0cd52edcb2274bf7c8e9327317d9bb48e1d092afeaed093e0242876ad3c008 + category: dev + optional: true +- name: sphinx-thebe + version: 0.3.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=4' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-thebe-0.3.1-pyhd8ed1ab_1.conda + hash: + md5: f6627ce09745a0f822cc6e7de8cf4f99 + sha256: 9d0cd52edcb2274bf7c8e9327317d9bb48e1d092afeaed093e0242876ad3c008 + category: dev + optional: true +- name: sphinx-togglebutton + version: 0.3.2 + manager: conda + platform: linux-64 + dependencies: + docutils: '' + python: '>=3.6' + sphinx: '' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-togglebutton-0.3.2-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 382738101934261ea7931d1460e64868 + sha256: 0dcee238aae6337fae5eaf1f9a29b0c51ed9834ae501fccb2cde0fed8dae1a88 + category: dev + optional: true +- name: sphinx-togglebutton + version: 0.3.2 + manager: conda + platform: win-64 + dependencies: + docutils: '' + python: '>=3.6' + sphinx: '' + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-togglebutton-0.3.2-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 382738101934261ea7931d1460e64868 + sha256: 0dcee238aae6337fae5eaf1f9a29b0c51ed9834ae501fccb2cde0fed8dae1a88 + category: dev + optional: true +- name: sphinxcontrib-applehelp + version: 2.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 16e3f039c0aa6446513e94ab18a8784b + sha256: d7433a344a9ad32a680b881c81b0034bc61618d12c39dd6e3309abeffa9577ba + category: dev + optional: true +- name: sphinxcontrib-applehelp + version: 2.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 16e3f039c0aa6446513e94ab18a8784b + sha256: d7433a344a9ad32a680b881c81b0034bc61618d12c39dd6e3309abeffa9577ba + category: dev + optional: true +- name: sphinxcontrib-bibtex + version: 2.5.0 + manager: conda + platform: linux-64 + dependencies: + dataclasses: '' + docutils: '>=0.8' + importlib_metadata: '>=3.6' + pybtex: '>=0.24' + pybtex-docutils: '>=1' + python: '>=3.6' + sphinx: '>=2.1' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-bibtex-2.5.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: b2e5c9aece936ebf9f26abdf71ddd74b + sha256: d5b02d285909b4501a469857b1a88a91a849d5f28bbe64b9e6c3e86d2388d345 + category: dev + optional: true +- name: sphinxcontrib-bibtex + version: 2.5.0 + manager: conda + platform: win-64 + dependencies: + dataclasses: '' + docutils: '>=0.8' + importlib_metadata: '>=3.6' + pybtex: '>=0.24' + pybtex-docutils: '>=1' + python: '>=3.6' + sphinx: '>=2.1' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-bibtex-2.5.0-pyhd8ed1ab_0.tar.bz2 + hash: + md5: b2e5c9aece936ebf9f26abdf71ddd74b + sha256: d5b02d285909b4501a469857b1a88a91a849d5f28bbe64b9e6c3e86d2388d345 + category: dev + optional: true +- name: sphinxcontrib-devhelp + version: 2.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 910f28a05c178feba832f842155cbfff + sha256: 55d5076005d20b84b20bee7844e686b7e60eb9f683af04492e598a622b12d53d + category: dev + optional: true +- name: sphinxcontrib-devhelp + version: 2.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 910f28a05c178feba832f842155cbfff + sha256: 55d5076005d20b84b20bee7844e686b7e60eb9f683af04492e598a622b12d53d + category: dev + optional: true +- name: sphinxcontrib-htmlhelp + version: 2.1.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + hash: + md5: e9fb3fe8a5b758b4aff187d434f94f03 + sha256: c1492c0262ccf16694bdcd3bb62aa4627878ea8782d5cd3876614ffeb62b3996 + category: dev + optional: true +- name: sphinxcontrib-htmlhelp + version: 2.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + hash: + md5: e9fb3fe8a5b758b4aff187d434f94f03 + sha256: c1492c0262ccf16694bdcd3bb62aa4627878ea8782d5cd3876614ffeb62b3996 + category: dev + optional: true +- name: sphinxcontrib-jsmath + version: 1.0.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + hash: + md5: fa839b5ff59e192f411ccc7dae6588bb + sha256: 578bef5ec630e5b2b8810d898bbbf79b9ae66d49b7938bcc3efc364e679f2a62 + category: dev + optional: true +- name: sphinxcontrib-jsmath + version: 1.0.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + hash: + md5: fa839b5ff59e192f411ccc7dae6588bb + sha256: 578bef5ec630e5b2b8810d898bbbf79b9ae66d49b7938bcc3efc364e679f2a62 + category: dev + optional: true +- name: sphinxcontrib-qthelp + version: 2.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 00534ebcc0375929b45c3039b5ba7636 + sha256: c664fefae4acdb5fae973bdde25836faf451f41d04342b64a358f9a7753c92ca + category: dev + optional: true +- name: sphinxcontrib-qthelp + version: 2.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + hash: + md5: 00534ebcc0375929b45c3039b5ba7636 + sha256: c664fefae4acdb5fae973bdde25836faf451f41d04342b64a358f9a7753c92ca + category: dev + optional: true +- name: sphinxcontrib-serializinghtml + version: 1.1.10 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + hash: + md5: 3bc61f7161d28137797e038263c04c54 + sha256: 64d89ecc0264347486971a94487cb8d7c65bfc0176750cf7502b8a272f4ab557 + category: dev + optional: true +- name: sphinxcontrib-serializinghtml + version: 1.1.10 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + sphinx: '>=5' + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + hash: + md5: 3bc61f7161d28137797e038263c04c54 + sha256: 64d89ecc0264347486971a94487cb8d7c65bfc0176750cf7502b8a272f4ab557 + category: dev + optional: true +- name: sqlalchemy + version: 2.0.38 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + greenlet: '!=0.4.17' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + typing-extensions: '>=4.6.0' + url: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.38-py310ha75aee5_0.conda + hash: + md5: 11bb9ab95d526337cb9672fe69209b29 + sha256: dda13ac7d41dadc8b5e55dc94772a24543190baebffd5fc228515d55ea1cb48b + category: dev + optional: true +- name: sqlalchemy + version: 2.0.38 + manager: conda + platform: win-64 + dependencies: + greenlet: '!=0.4.17' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + typing-extensions: '>=4.6.0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.38-py310ha8f682b_0.conda + hash: + md5: 86e42a739127af88d432ab49ae4778c3 + sha256: 84d82e16819e450f3b875461b8430f4433a9f6ab2143e43a018da382913acaf2 + category: dev + optional: true +- name: sqlite + version: 3.49.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libsqlite: 3.49.1 + libzlib: '>=1.3.1,<2.0a0' + ncurses: '>=6.5,<7.0a0' + readline: '>=8.2,<9.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_1.conda + hash: + md5: 069213b4f57ec55bbcfaebe415c758f7 + sha256: e4535c13b082b6126330b4b8f323d308e24f454e4f218a2a6c6135fb10050b1c + category: main + optional: false +- name: sqlite + version: 3.49.1 + manager: conda + platform: win-64 + dependencies: + libsqlite: 3.49.1 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.49.1-h2466b09_1.conda + hash: + md5: 163973102aaae5b6fff2103a94debce9 + sha256: 74f72577619656cac82e65caf321f97b7554775839de0113cbd8fce74e5d0f6f + category: main + optional: false +- name: stack_data + version: 0.6.3 + manager: conda + platform: linux-64 + dependencies: + asttokens: '' + executing: '' + pure_eval: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + hash: + md5: b1b505328da7a6b246787df4b5a49fbc + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + category: main + optional: false +- name: stack_data + version: 0.6.3 + manager: conda + platform: win-64 + dependencies: + asttokens: '' + executing: '' + pure_eval: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + hash: + md5: b1b505328da7a6b246787df4b5a49fbc + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + category: main + optional: false +- name: svt-av1 + version: 2.3.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-2.3.0-h5888daf_0.conda + hash: + md5: 355898d24394b2af353eb96358db9fdd + sha256: df30a9be29f1a8b5a2e314dd5b16ccfbcbd1cc6a4f659340e8bc2bd4de37bc6f + category: main + optional: false +- name: svt-av1 + version: 1.7.0 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/svt-av1-1.7.0-h63175ca_0.conda + hash: + md5: fe5d2314e6fc3be8f8e3e2e73c14ab02 + sha256: 3d52d959e9b4e4654c36d03765fb4e8dbebfc1d17f271a46033bf301737a25cc + category: main + optional: false +- name: tabulate + version: 0.9.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda + hash: + md5: 959484a66b4b76befcddc4fa97c95567 + sha256: 090023bddd40d83468ef86573976af8c514f64119b2bd814ee63a838a542720a + category: dev + optional: true +- name: tabulate + version: 0.9.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda + hash: + md5: 959484a66b4b76befcddc4fa97c95567 + sha256: 090023bddd40d83468ef86573976af8c514f64119b2bd814ee63a838a542720a + category: dev + optional: true +- name: tbb + version: 2021.13.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libhwloc: '>=2.11.2,<2.11.3.0a0' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda + hash: + md5: ba7726b8df7b9d34ea80e82b097a4893 + sha256: 65463732129899770d54b1fbf30e1bb82fdebda9d7553caf08d23db4590cd691 + category: main + optional: false +- name: tbb + version: 2021.13.0 + manager: conda + platform: win-64 + dependencies: + libhwloc: '>=2.11.2,<2.11.3.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda + hash: + md5: 9190dd0a23d925f7602f9628b3aed511 + sha256: 03cc5442046485b03dd1120d0f49d35a7e522930a2ab82f275e938e17b07b302 + category: main + optional: false +- name: tblib + version: 3.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda + hash: + md5: 60ce69f73f3e75b21f1c27b1b471320c + sha256: 6869cd2e043426d30c84d0ff6619f176b39728f9c75dc95dca89db994548bb8a + category: main + optional: false +- name: tblib + version: 3.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda + hash: + md5: 60ce69f73f3e75b21f1c27b1b471320c + sha256: 6869cd2e043426d30c84d0ff6619f176b39728f9c75dc95dca89db994548bb8a + category: main + optional: false +- name: tenacity + version: 9.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.0.0-pyhd8ed1ab_1.conda + hash: + md5: a09f66fe95a54a92172e56a4a97ba271 + sha256: dcf2155fb959773fb102066bfab8e7d79aff67054d142716979274a43fc85735 + category: main + optional: false +- name: tenacity + version: 9.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tenacity-9.0.0-pyhd8ed1ab_1.conda + hash: + md5: a09f66fe95a54a92172e56a4a97ba271 + sha256: dcf2155fb959773fb102066bfab8e7d79aff67054d142716979274a43fc85735 + category: main + optional: false +- name: terminado + version: 0.18.1 + manager: conda + platform: linux-64 + dependencies: + __linux: '' + ptyprocess: '' + python: '>=3.8' + tornado: '>=6.1.0' + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + hash: + md5: efba281bbdae5f6b0a1d53c6d4a97c93 + sha256: b300557c0382478cf661ddb520263508e4b3b5871b471410450ef2846e8c352c + category: main + optional: false +- name: terminado + version: 0.18.1 + manager: conda + platform: win-64 + dependencies: + __win: '' + python: '>=3.8' + pywinpty: '>=1.1.0' + tornado: '>=6.1.0' + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda + hash: + md5: 4abd500577430a942a995fd0d09b76a2 + sha256: 8cb078291fd7882904e3de594d299c8de16dd3af7405787fce6919a385cfc238 + category: main + optional: false +- name: threadpoolctl + version: 3.5.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda + hash: + md5: df68d78237980a159bd7149f33c0e8fd + sha256: 45e402941f6bed094022c5726a2ca494e6224b85180d2367fb6ddd9aea68079d + category: main + optional: false +- name: threadpoolctl + version: 3.5.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda + hash: + md5: df68d78237980a159bd7149f33c0e8fd + sha256: 45e402941f6bed094022c5726a2ca494e6224b85180d2367fb6ddd9aea68079d + category: main + optional: false +- name: tifffile + version: 2024.12.12 + manager: conda + platform: linux-64 + dependencies: + imagecodecs: '>=2023.8.12' + numpy: '>=1.19.2' + python: '>=3.10' + url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.12.12-pyhd8ed1ab_0.conda + hash: + md5: 59d646aa704b6024cb965be43493ed45 + sha256: 2108062a852cb273d685e9512845001b79c08c541b197bc874ade70b3e2c630c + category: main + optional: false +- name: tifffile + version: 2024.12.12 + manager: conda + platform: win-64 + dependencies: + imagecodecs: '>=2023.8.12' + numpy: '>=1.19.2' + python: '>=3.10' + url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.12.12-pyhd8ed1ab_0.conda + hash: + md5: 59d646aa704b6024cb965be43493ed45 + sha256: 2108062a852cb273d685e9512845001b79c08c541b197bc874ade70b3e2c630c + category: main + optional: false +- name: tiledb + version: 2.16.3 + manager: conda + platform: linux-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libabseil: '>=20230802.0,<20230803.0a0' + libgcc-ng: '>=12' + libgoogle-cloud: '>=2.12.0,<2.13.0a0' + libstdcxx-ng: '>=12' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + openssl: '>=3.1.2,<4.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda + hash: + md5: 7de728789b0aba16018f726dc5ddbec2 + sha256: f021df4b9cfd1a54aac87a6c0bac604edc8ffb36d5b2c4aa20bf2d759ae04a11 + category: main + optional: false +- name: tiledb + version: 2.16.3 + manager: conda + platform: win-64 + dependencies: + bzip2: '>=1.0.8,<2.0a0' + libabseil: '>=20230802.0,<20230803.0a0' + libcrc32c: '>=1.1.2,<1.2.0a0' + libcurl: '>=8.2.1,<9.0a0' + libgoogle-cloud: '>=2.12.0,<2.13.0a0' + libxml2: '>=2.11.5,<3.0.0a0' + libzlib: '>=1.2.13,<2.0.0a0' + lz4-c: '>=1.9.3,<1.10.0a0' + openssl: '>=3.1.2,<4.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/tiledb-2.16.3-hbf04793_3.conda + hash: + md5: 3afaf8882d4568eb9c91870102af1b37 + sha256: 4de5494be2ee102d15077bebc63d17422c40dc8d634097136a9a202a3930e502 + category: main + optional: false +- name: tinycss2 + version: 1.4.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.5' + webencodings: '>=0.4' + url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + hash: + md5: f1acf5fdefa8300de697982bcb1761c9 + sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2 + category: main + optional: false +- name: tinycss2 + version: 1.4.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.5' + webencodings: '>=0.4' + url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + hash: + md5: f1acf5fdefa8300de697982bcb1761c9 + sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2 + category: main + optional: false +- name: tk + version: 8.6.13 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libzlib: '>=1.2.13,<2.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + hash: + md5: d453b98d9c83e71da0741bb0ff4d76bc + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + category: main + optional: false +- name: tk + version: 8.6.13 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + hash: + md5: fc048363eb8f03cd1737600a5d08aafe + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + category: main + optional: false +- name: toml + version: 0.10.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + hash: + md5: b0dd904de08b7db706167240bf37b164 + sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938 + category: main + optional: false +- name: toml + version: 0.10.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + hash: + md5: b0dd904de08b7db706167240bf37b164 + sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938 + category: main + optional: false +- name: tomli + version: 2.2.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + hash: + md5: ac944244f1fed2eb49bae07193ae8215 + sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e + category: main + optional: false +- name: tomli + version: 2.2.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + hash: + md5: ac944244f1fed2eb49bae07193ae8215 + sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e + category: main + optional: false +- name: tomlkit + version: 0.13.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + hash: + md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 + sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + category: dev + optional: true +- name: tomlkit + version: 0.13.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + hash: + md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 + sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 + category: dev + optional: true +- name: toolz + version: 1.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + hash: + md5: 40d0ed782a8aaa16ef248e68c06c168d + sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87 + category: main + optional: false +- name: toolz + version: 1.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + hash: + md5: 40d0ed782a8aaa16ef248e68c06c168d + sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87 + category: main + optional: false +- name: tornado + version: 6.4.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda + hash: + md5: 166d59aab40b9c607b4cc21c03924e9d + sha256: 9c2b86d4e58c8b0e7d13a7f4c440f34e2201bae9cfc1d7e1d30a5bc7ffb1d4c8 + category: main + optional: false +- name: tornado + version: 6.4.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.2-py310ha8f682b_0.conda + hash: + md5: e6819d3a0cae0f1b1838875f858421d1 + sha256: 2e5671d0db03961692b3390778ce6aba40702bd57584fa60badf4baa7614679b + category: main + optional: false +- name: tqdm + version: 4.67.1 + manager: conda + platform: linux-64 + dependencies: + colorama: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + hash: + md5: 9efbfdc37242619130ea42b1cc4ed861 + sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 + category: main + optional: false +- name: tqdm + version: 4.67.1 + manager: conda + platform: win-64 + dependencies: + colorama: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + hash: + md5: 9efbfdc37242619130ea42b1cc4ed861 + sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 + category: main + optional: false +- name: traitlets + version: 5.14.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + hash: + md5: 019a7385be9af33791c989871317e1ed + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + category: main + optional: false +- name: traitlets + version: 5.14.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + hash: + md5: 019a7385be9af33791c989871317e1ed + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + category: main + optional: false +- name: types-python-dateutil + version: 2.9.0.20241206 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + hash: + md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 + sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + category: main + optional: false +- name: types-python-dateutil + version: 2.9.0.20241206 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241206-pyhd8ed1ab_0.conda + hash: + md5: 1dbc4a115e2ad9fb7f9d5b68397f66f9 + sha256: 8b98cd9464837174ab58aaa912fc95d5831879864676650a383994033533b8d1 + category: main + optional: false +- name: typing-extensions + version: 4.12.2 + manager: conda + platform: linux-64 + dependencies: + typing_extensions: 4.12.2 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + hash: + md5: b6a408c64b78ec7b779a3e5c7a902433 + sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32 + category: main + optional: false +- name: typing-extensions + version: 4.12.2 + manager: conda + platform: win-64 + dependencies: + typing_extensions: 4.12.2 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + hash: + md5: b6a408c64b78ec7b779a3e5c7a902433 + sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32 + category: main + optional: false +- name: typing_extensions + version: 4.12.2 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + hash: + md5: d17f13df8b65464ca316cbc000a3cb64 + sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568 + category: main + optional: false +- name: typing_extensions + version: 4.12.2 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + hash: + md5: d17f13df8b65464ca316cbc000a3cb64 + sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568 + category: main + optional: false +- name: typing_utils + version: 0.1.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda + hash: + md5: f6d7aa696c67756a650e91e15e88223c + sha256: 3088d5d873411a56bf988eee774559335749aed6f6c28e07bf933256afb9eb6c + category: main + optional: false +- name: typing_utils + version: 0.1.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda + hash: + md5: f6d7aa696c67756a650e91e15e88223c + sha256: 3088d5d873411a56bf988eee774559335749aed6f6c28e07bf933256afb9eb6c + category: main + optional: false +- name: tzcode + version: 2025a + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/tzcode-2025a-hb9d3cd8_0.conda + hash: + md5: e18bdeebf29176790089b654cfedaaec + sha256: f88b90571f91c10adf3930252e8b281acab134dd8e03e94642df6565d0f58437 + category: main + optional: false +- name: tzdata + version: 2025a + manager: conda + platform: linux-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + hash: + md5: dbcace4706afdfb7eb891f7b37d07c04 + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + category: main + optional: false +- name: tzdata + version: 2025a + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + hash: + md5: dbcace4706afdfb7eb891f7b37d07c04 + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + category: main + optional: false +- name: uc-micro-py + version: 1.0.3 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda + hash: + md5: 9c96c9876ba45368a03056ddd0f20431 + sha256: a2f837780af450d633efc052219c31378bcad31356766663fb88a99e8e4c817b + category: dev + optional: true +- name: uc-micro-py + version: 1.0.3 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda + hash: + md5: 9c96c9876ba45368a03056ddd0f20431 + sha256: a2f837780af450d633efc052219c31378bcad31356766663fb88a99e8e4c817b + category: dev + optional: true +- name: ucrt + version: 10.0.22621.0 + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + hash: + md5: 6797b005cd0f439c4c5c9ac565783700 + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + category: main + optional: false +- name: unicodedata2 + version: 16.0.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py310ha75aee5_0.conda + hash: + md5: 1d7a4b9202cdd10d56ecdd7f6c347190 + sha256: 0468c864c60190fdb94b4705bca618e77589d5cb9fa096de47caccd1f22b0b54 + category: main + optional: false +- name: unicodedata2 + version: 16.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-16.0.0-py310ha8f682b_0.conda + hash: + md5: b28aead44c6e19a1fbba7752aa242b34 + sha256: b59837c68d8edcca3c86c205a8c5dec63356029e48d55ed88c5483105d73ac0c + category: main + optional: false +- name: uri-template + version: 1.3.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + hash: + md5: e7cb0f5745e4c5035a460248334af7eb + sha256: e0eb6c8daf892b3056f08416a96d68b0a358b7c46b99c8a50481b22631a4dfc0 + category: main + optional: false +- name: uri-template + version: 1.3.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + hash: + md5: e7cb0f5745e4c5035a460248334af7eb + sha256: e0eb6c8daf892b3056f08416a96d68b0a358b7c46b99c8a50481b22631a4dfc0 + category: main + optional: false +- name: uriparser + version: 0.9.8 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda + hash: + md5: d71d3a66528853c0a1ac2c02d79a0284 + sha256: 2aad2aeff7c69a2d7eecd7b662eef756b27d6a6b96f3e2c2a7071340ce14543e + category: main + optional: false +- name: uriparser + version: 0.9.8 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/uriparser-0.9.8-h5a68840_0.conda + hash: + md5: 28b4cf9065681f43cc567410edf8243d + sha256: ed0eed8ed0343d29cdbfaeb1bfd141f090af696547d69f91c18f46350299f00d + category: main + optional: false +- name: urllib3 + version: 2.3.0 + manager: conda + platform: linux-64 + dependencies: + brotli-python: '>=1.0.9' + h2: '>=4,<5' + pysocks: '>=1.5.6,<2.0,!=1.5.7' + python: '>=3.9' + zstandard: '>=0.18.0' + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + hash: + md5: 32674f8dbfb7b26410ed580dd3c10a29 + sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e + category: main + optional: false +- name: urllib3 + version: 2.3.0 + manager: conda + platform: win-64 + dependencies: + brotli-python: '>=1.0.9' + h2: '>=4,<5' + pysocks: '>=1.5.6,<2.0,!=1.5.7' + python: '>=3.9' + zstandard: '>=0.18.0' + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + hash: + md5: 32674f8dbfb7b26410ed580dd3c10a29 + sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e + category: main + optional: false +- name: vc + version: '14.3' + manager: conda + platform: win-64 + dependencies: + vc14_runtime: '>=14.40.33810' + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h5fd82a7_24.conda + hash: + md5: 00cf3a61562bd53bd5ea99e6888793d0 + sha256: 7ce178cf139ccea5079f9c353b3d8415d1d49b0a2f774662c355d3f89163d7b4 + category: main + optional: false +- name: vc14_runtime + version: 14.42.34433 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.42.34433-h6356254_24.conda + hash: + md5: 2441e010ee255e6a38bf16705a756e94 + sha256: abda97b8728cf6e3c37df8f1178adde7219bed38b96e392cb3be66336386d32e + category: main + optional: false +- name: vectormath + version: 0.2.2 + manager: conda + platform: linux-64 + dependencies: + numpy: '>=1.7' + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 + hash: + md5: 7a6395b244b183e9e55e606e3d68e83b + sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 + category: main + optional: false +- name: vectormath + version: 0.2.2 + manager: conda + platform: win-64 + dependencies: + numpy: '>=1.7' + python: '' + url: https://conda.anaconda.org/conda-forge/noarch/vectormath-0.2.2-py_0.tar.bz2 + hash: + md5: 7a6395b244b183e9e55e606e3d68e83b + sha256: 891620c6e65716efa84832458ff972037faf31a2009421ad120807dedd360402 + category: main + optional: false +- name: vs2015_runtime + version: 14.42.34433 + manager: conda + platform: win-64 + dependencies: + vc14_runtime: '>=14.42.34433' + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.42.34433-hfef2bbc_24.conda + hash: + md5: 117fcc5b86c48f3b322b0722258c7259 + sha256: 09102e0bd283af65772c052d85028410b0c31989b3cd96c260485d28e270836e + category: main + optional: false +- name: wcwidth + version: 0.2.13 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + hash: + md5: b68980f2495d096e71c7fd9d7ccf63e6 + sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5 + category: main + optional: false +- name: wcwidth + version: 0.2.13 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + hash: + md5: b68980f2495d096e71c7fd9d7ccf63e6 + sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5 + category: main + optional: false +- name: webcolors + version: 24.11.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.11.1-pyhd8ed1ab_0.conda + hash: + md5: b49f7b291e15494aafb0a7d74806f337 + sha256: 08315dc2e61766a39219b2d82685fc25a56b2817acf84d5b390176080eaacf99 + category: main + optional: false +- name: webcolors + version: 24.11.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.11.1-pyhd8ed1ab_0.conda + hash: + md5: b49f7b291e15494aafb0a7d74806f337 + sha256: 08315dc2e61766a39219b2d82685fc25a56b2817acf84d5b390176080eaacf99 + category: main + optional: false +- name: webencodings + version: 0.5.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + hash: + md5: 2841eb5bfc75ce15e9a0054b98dcd64d + sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6 + category: main + optional: false +- name: webencodings + version: 0.5.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + hash: + md5: 2841eb5bfc75ce15e9a0054b98dcd64d + sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6 + category: main + optional: false +- name: websocket-client + version: 1.8.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda + hash: + md5: 84f8f77f0a9c6ef401ee96611745da8f + sha256: 1dd84764424ffc82030c19ad70607e6f9e3b9cb8e633970766d697185652053e + category: main + optional: false +- name: websocket-client + version: 1.8.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda + hash: + md5: 84f8f77f0a9c6ef401ee96611745da8f + sha256: 1dd84764424ffc82030c19ad70607e6f9e3b9cb8e633970766d697185652053e + category: main + optional: false +- name: werkzeug + version: 3.1.3 + manager: conda + platform: linux-64 + dependencies: + markupsafe: '>=2.1.1' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.3-pyhd8ed1ab_1.conda + hash: + md5: 0a9b57c159d56b508613cc39022c1b9e + sha256: cd9a603beae0b237be7d9dfae8ae0b36ad62666ac4bb073969bce7da6f55157c + category: main + optional: false +- name: werkzeug + version: 3.1.3 + manager: conda + platform: win-64 + dependencies: + markupsafe: '>=2.1.1' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.3-pyhd8ed1ab_1.conda + hash: + md5: 0a9b57c159d56b508613cc39022c1b9e + sha256: cd9a603beae0b237be7d9dfae8ae0b36ad62666ac4bb073969bce7da6f55157c + category: main + optional: false +- name: wheel + version: 0.45.1 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + hash: + md5: 75cb7132eb58d97896e173ef12ac9986 + sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce + category: main + optional: false +- name: wheel + version: 0.45.1 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + hash: + md5: 75cb7132eb58d97896e173ef12ac9986 + sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce + category: main + optional: false +- name: widgetsnbextension + version: 4.0.13 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_1.conda + hash: + md5: 237db148cc37a466e4222d589029b53e + sha256: a750202ae2a31d8e5ee5a5c127fcc7fa783cd0fbedbc0bf1ab549a109881fa9f + category: main + optional: false +- name: widgetsnbextension + version: 4.0.13 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_1.conda + hash: + md5: 237db148cc37a466e4222d589029b53e + sha256: a750202ae2a31d8e5ee5a5c127fcc7fa783cd0fbedbc0bf1ab549a109881fa9f + category: main + optional: false +- name: win_inet_pton + version: 1.1.0 + manager: conda + platform: win-64 + dependencies: + __win: '' + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + hash: + md5: 46e441ba871f524e2b067929da3051c2 + sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f + category: main + optional: false +- name: winpty + version: 0.4.3 + manager: conda + platform: win-64 + dependencies: {} + url: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + hash: + md5: 1cee351bf20b830d991dbe0bc8cd7dfe + sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 + category: main + optional: false +- name: xcb-util + version: 0.4.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda + hash: + md5: 9bfac7ccd94d54fd21a0501296d60424 + sha256: 0c91d87f0efdaadd4e56a5f024f8aab20ec30f90aa2ce9e4ebea05fbc20f71ad + category: main + optional: false +- name: xcb-util-image + version: 0.4.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + xcb-util: '>=0.4.0,<0.5.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda + hash: + md5: 9d7bcddf49cbf727730af10e71022c73 + sha256: 92ffd68d2801dbc27afe223e04ae7e78ef605fc8575f107113c93c7bafbd15b0 + category: main + optional: false +- name: xcb-util-keysyms + version: 0.4.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda + hash: + md5: 632413adcd8bc16b515cab87a2932913 + sha256: 8451d92f25d6054a941b962179180728c48c62aab5bf20ac10fef713d5da6a9a + category: main + optional: false +- name: xcb-util-renderutil + version: 0.3.9 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda + hash: + md5: e995b155d938b6779da6ace6c6b13816 + sha256: 6987588e6fff5892056021c2ea52f7a0deefb2c7348e70d24750e2d60dabf009 + category: main + optional: false +- name: xcb-util-wm + version: 0.4.1 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda + hash: + md5: 90108a432fb5c6150ccfee3f03388656 + sha256: 08ba7147c7579249b6efd33397dc1a8c2404278053165aaecd39280fee705724 + category: main + optional: false +- name: xerces-c + version: 3.2.5 + manager: conda + platform: linux-64 + dependencies: + icu: '>=73.2,<74.0a0' + libcurl: '>=8.5.0,<9.0a0' + libgcc-ng: '>=12' + libnsl: '>=2.0.1,<2.1.0a0' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda + hash: + md5: 63b80ca78d29380fe69e69412dcbe4ac + sha256: 75d06ca406f03f653d7a3183f2a1ccfdb3a3c6c830493933ec4c3c98e06a32bb + category: main + optional: false +- name: xerces-c + version: 3.2.5 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.2.5-he0c23c2_2.conda + hash: + md5: 82b6eac3c198271e98b48d52d79726d8 + sha256: 759ae22a0a221dc1c0ba39684b0dcf696aab4132478e17e56a0366ded519e54e + category: main + optional: false +- name: xkeyboard-config + version: '2.42' + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + xorg-libx11: '>=1.8.9,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.42-h4ab18f5_0.conda + hash: + md5: b193af204da1bfb8c13882d131a14bd2 + sha256: 240caab7d9d85154ef373ecbac3ff9fb424add2029dbb124e949c6cbab2996dd + category: main + optional: false +- name: xorg-compositeproto + version: 0.4.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-compositeproto-0.4.2-hb9d3cd8_1002.conda + hash: + md5: 317d35860cab6c16d91a81f67303023d + sha256: b800b09a090e4acef0b8653bcb1a4811e8f44559d4eff050886770fdfa77857b + category: main + optional: false +- name: xorg-damageproto + version: 1.2.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-damageproto-1.2.1-hb9d3cd8_1003.conda + hash: + md5: 5135d24c55235da88c2fe48a8662927a + sha256: 424a9202255359a75770eaca534e4e8b07464242f0146871915e1bb76fb3ffae + category: main + optional: false +- name: xorg-fixesproto + version: '5.0' + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + xorg-xextproto: '>=7.3.0,<8.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-hb9d3cd8_1003.conda + hash: + md5: 19fe37721037acc0a1ed76b8cf937359 + sha256: 07268980b659a84a4bac64b475329348e9cf5fa4aee255fa94aa0407ae5b804c + category: main + optional: false +- name: xorg-inputproto + version: 2.3.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-hb9d3cd8_1003.conda + hash: + md5: 32623b33f2047dbc9ae2f2e8fd3880e9 + sha256: 77eea289f9d3fa753a290f988533c842694b826fe1900abd6d7b142c528512ba + category: main + optional: false +- name: xorg-kbproto + version: 1.0.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-hb9d3cd8_1003.conda + hash: + md5: e87bfacb110d85e1eb6099c9ed8e7236 + sha256: 849555ddf7fee334a5a6be9f159d2931c9d076ffb310a9e75b9124f789049d3e + category: main + optional: false +- name: xorg-libice + version: 1.1.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + hash: + md5: fb901ff28063514abb6046c9ec2c4a45 + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + category: main + optional: false +- name: xorg-libsm + version: 1.2.5 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libuuid: '>=2.38.1,<3.0a0' + xorg-libice: '>=1.1.2,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.5-he73a12e_0.conda + hash: + md5: 4c3e9fab69804ec6077697922d70c6e2 + sha256: 760f43df6c2ce8cbbbcb8f2f3b7fc0f306716c011e28d1d340f3dfa8ccf29185 + category: main + optional: false +- name: xorg-libx11 + version: 1.8.9 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libxcb: '>=1.15,<1.16.0a0' + xorg-kbproto: '' + xorg-xextproto: '>=7.3.0,<8.0a0' + xorg-xproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-h8ee46fc_0.conda + hash: + md5: 077b6e8ad6a3ddb741fce2496dd01bec + sha256: 3e53ba247f1ad68353f18aceba5bf8ce87e3dea930de85d36946844a7658c9fb + category: main + optional: false +- name: xorg-libxau + version: 1.0.12 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + hash: + md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 + sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 + category: main + optional: false +- name: xorg-libxau + version: 1.0.12 + manager: conda + platform: win-64 + dependencies: + libgcc: '>=13' + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + ucrt: '>=10.0.20348.0' + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-h0e40799_0.conda + hash: + md5: 2ffbfae4548098297c033228256eb96e + sha256: 047836241b2712aab1e29474a6f728647bff3ab57de2806b0bb0a6cf9a2d2634 + category: main + optional: false +- name: xorg-libxcomposite + version: 0.4.6 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + xorg-compositeproto: '' + xorg-libx11: '>=1.7.2,<2.0a0' + xorg-libxfixes: '' + xorg-xproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-h0b41bf4_1.conda + hash: + md5: ada6777364a0ea2407a1894e54779cc4 + sha256: 7c5806a8de1ce0d4e0c7aae8d29565f11fba6c6da4a787c3e09f1fcc428725a4 + category: main + optional: false +- name: xorg-libxdamage + version: 1.1.5 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.4.0' + xorg-damageproto: '' + xorg-libx11: '>=1.7.2,<2.0a0' + xorg-libxext: 1.3.* + xorg-libxfixes: '' + xorg-util-macros: '' + xorg-xproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.5-h7f98852_1.tar.bz2 + hash: + md5: bebd3814ec2355fab6a474b07ed73093 + sha256: 4cab878855e48669b64dd7522a518433ac83bb56fa79743d12db316326e2e39e + category: main + optional: false +- name: xorg-libxdmcp + version: 1.1.5 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + hash: + md5: 8035c64cb77ed555e3f150b7b3972480 + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + category: main + optional: false +- name: xorg-libxdmcp + version: 1.1.5 + manager: conda + platform: win-64 + dependencies: + libgcc: '>=13' + libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' + ucrt: '>=10.0.20348.0' + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-h0e40799_0.conda + hash: + md5: 8393c0f7e7870b4eb45553326f81f0ff + sha256: 9075f98dcaa8e9957e4a3d9d30db05c7578a536950a31c200854c5c34e1edb2c + category: main + optional: false +- name: xorg-libxext + version: 1.3.4 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + xorg-libx11: '>=1.7.2,<2.0a0' + xorg-xextproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda + hash: + md5: 82b6df12252e6f32402b96dacc656fec + sha256: 73e5cfbdff41ef8a844441f884412aa5a585a0f0632ec901da035a03e1fe1249 + category: main + optional: false +- name: xorg-libxfixes + version: 5.0.3 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.3.0' + xorg-fixesproto: '' + xorg-libx11: '>=1.7.0,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h7f98852_1004.tar.bz2 + hash: + md5: e9a21aa4d5e3e5f1aed71e8cefd46b6a + sha256: 1e426a1abb774ef1dcf741945ed5c42ad12ea2dc7aeed7682d293879c3e1e4c3 + category: main + optional: false +- name: xorg-libxi + version: 1.7.10 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc-ng: '>=12' + xorg-inputproto: '' + xorg-libx11: '>=1.8.9,<2.0a0' + xorg-libxext: '>=1.3.4,<2.0a0' + xorg-libxfixes: 5.0.* + xorg-xextproto: '>=7.3.0,<8.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h4bc722e_1.conda + hash: + md5: 749baebe7e2ff3360630e069175e528b + sha256: e1416eb435e3d903bc658e3c637f0e87efd2dca290fe70daf29738b3a3d1f8ff + category: main + optional: false +- name: xorg-libxrandr + version: 1.5.2 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.3.0' + xorg-libx11: '>=1.7.1,<2.0a0' + xorg-libxext: '' + xorg-libxrender: '' + xorg-randrproto: '' + xorg-renderproto: '' + xorg-xextproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.2-h7f98852_1.tar.bz2 + hash: + md5: 5b0f7da25a4556c9619c3e4b4a98ab07 + sha256: ffd075a463896ed86d9519e26dc36f754b695b9c1e1b6115d34fe138b36d8200 + category: main + optional: false +- name: xorg-libxrender + version: 0.9.11 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + xorg-libx11: '>=1.8.6,<2.0a0' + xorg-renderproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda + hash: + md5: ed67c36f215b310412b2af935bf3e530 + sha256: 26da4d1911473c965c32ce2b4ff7572349719eaacb88a066db8d968a4132c3f7 + category: main + optional: false +- name: xorg-libxtst + version: 1.2.5 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc-ng: '>=12' + xorg-inputproto: '' + xorg-libx11: '>=1.8.9,<2.0a0' + xorg-libxext: '>=1.3.4,<2.0a0' + xorg-libxi: '>=1.7.10,<2.0a0' + xorg-recordproto: '' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h4bc722e_0.conda + hash: + md5: 185159d666308204eca00295599b0a5c + sha256: 0139b52c3cbce57bfd1d120c41637bc239430faff4aa0445f58de0adf4c4b976 + category: main + optional: false +- name: xorg-randrproto + version: 1.5.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-randrproto-1.5.0-hb9d3cd8_1002.conda + hash: + md5: b9485267c7eb6b8601b378e06a9e44d3 + sha256: d742ac2970c05abb597dacccd411af0d5b7a280b0b3390c4f681022edf4541a2 + category: main + optional: false +- name: xorg-recordproto + version: 1.14.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-hb9d3cd8_1003.conda + hash: + md5: 1d600d113f3e22a7eddd7e7d574be3fa + sha256: fa721a0a041453612f9dc03059905cf7426669ab8795e1b46d1b0f61c332b1ea + category: main + optional: false +- name: xorg-renderproto + version: 0.11.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-hb9d3cd8_1003.conda + hash: + md5: bf90782559bce8447609933a7d45995a + sha256: 54dd934b0e1c942e54759eb13672fd59b7e523fabea6e69a32d5bf483e45b329 + category: main + optional: false +- name: xorg-util-macros + version: 1.20.2 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-util-macros-1.20.2-hb9d3cd8_0.conda + hash: + md5: 7958d1f0a3e1dd6419891e1e8e64614c + sha256: c45a8af346e129f335f27634da8c89b70e6c380026366901ae9e5e479019ce82 + category: main + optional: false +- name: xorg-xextproto + version: 7.3.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-hb9d3cd8_1004.conda + hash: + md5: bc4cd53a083b6720d61a1519a1900878 + sha256: f302a3f6284ee9ad3b39e45251d7ed15167896564dc33e006077a896fd3458a6 + category: main + optional: false +- name: xorg-xf86vidmodeproto + version: 2.3.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-hb9d3cd8_1005.conda + hash: + md5: 1c08f67e3406550eef135e17263f8154 + sha256: d3189527c5b8e1fea2a2e391012d3e8f794e03bdabe9f4457a0ac4cb8fc7214c + category: main + optional: false +- name: xorg-xproto + version: 7.0.31 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-hb9d3cd8_1008.conda + hash: + md5: a63f5b66876bb1ec734ab4bdc4d11e86 + sha256: ea02425c898d6694167952794e9a865e02e14e9c844efb067374f90b9ce8ce33 + category: main + optional: false +- name: xz + version: 5.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + liblzma: 5.6.4 + liblzma-devel: 5.6.4 + xz-gpl-tools: 5.6.4 + xz-tools: 5.6.4 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.6.4-hbcc6ac9_0.conda + hash: + md5: bb511c87804cf7220246a3a6efc45c22 + sha256: 91fc251034fa5199919680aa50299296d89da54b2d066fb6e6a60461c17c0c4a + category: main + optional: false +- name: xz + version: 5.6.4 + manager: conda + platform: win-64 + dependencies: + liblzma: 5.6.4 + liblzma-devel: 5.6.4 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + xz-tools: 5.6.4 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.6.4-h208afaa_0.conda + hash: + md5: 97e1f122231e057a3da5cd32affcc9c2 + sha256: 26d5a1569c391566d42e7094aa5a3695487cf6c5cf33f45a7bb750bbcaca79fc + category: main + optional: false +- name: xz-gpl-tools + version: 5.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + liblzma: 5.6.4 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.6.4-hbcc6ac9_0.conda + hash: + md5: 246840b451f7a66bd68869e56b066dd5 + sha256: 300fc4e5993a36c979e61b1a38d00f0c23c0c56d5989be537cbc7bd8658254ed + category: main + optional: false +- name: xz-tools + version: 5.6.4 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + liblzma: 5.6.4 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.6.4-hb9d3cd8_0.conda + hash: + md5: a098f9f949af52610fdceb8e35b57513 + sha256: 57506a312d8cfbee98217fb382822bd49794ea6318dd4e0413a0d588dc6f4f69 + category: main + optional: false +- name: xz-tools + version: 5.6.4 + manager: conda + platform: win-64 + dependencies: + liblzma: 5.6.4 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/xz-tools-5.6.4-h2466b09_0.conda + hash: + md5: 213c6ca29a37cf0d84281d063368428d + sha256: 100d88365523051c5542a2657598cb25a85feb387bba8fa7e4ccb99fa57ad3f6 + category: main + optional: false +- name: yaml + version: 0.2.5 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=9.4.0' + url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + hash: + md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae + sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 + category: main + optional: false +- name: yaml + version: 0.2.5 + manager: conda + platform: win-64 + dependencies: + vc: '>=14.1,<15.0a0' + vs2015_runtime: '>=14.16.27012' + url: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 + hash: + md5: adbfb9f45d1004a26763652246a33764 + sha256: 4e2246383003acbad9682c7c63178e2e715ad0eb84f03a8df1fbfba455dfedc5 + category: main + optional: false +- name: zarr + version: 2.14.2 + manager: conda + platform: linux-64 + dependencies: + asciitree: '' + fasteners: '' + numcodecs: '>=0.10.0' + numpy: '>=1.7' + python: '>=3.5' + url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda + hash: + md5: 0c5776fe65a12a421d7ddf90411a6c3f + sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f + category: main + optional: false +- name: zarr + version: 2.14.2 + manager: conda + platform: win-64 + dependencies: + asciitree: '' + fasteners: '' + numcodecs: '>=0.10.0' + numpy: '>=1.7' + python: '>=3.5' + url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.14.2-pyhd8ed1ab_0.conda + hash: + md5: 0c5776fe65a12a421d7ddf90411a6c3f + sha256: 0f029f7efea00b8258782b5e68989fc140c227e6d9edd231d46fdd954b39d23f + category: main + optional: false +- name: zeromq + version: 4.3.5 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + krb5: '>=1.21.3,<1.22.0a0' + libgcc: '>=13' + libsodium: '>=1.0.20,<1.0.21.0a0' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda + hash: + md5: 3947a35e916fcc6b9825449affbf4214 + sha256: a4dc72c96848f764bb5a5176aa93dd1e9b9e52804137b99daeebba277b31ea10 + category: main + optional: false +- name: zeromq + version: 4.3.5 + manager: conda + platform: win-64 + dependencies: + krb5: '>=1.21.3,<1.22.0a0' + libsodium: '>=1.0.20,<1.0.21.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_7.conda + hash: + md5: e03f2c245a5ee6055752465519363b1c + sha256: 15cc8e2162d0a33ffeb3f7b7c7883fd830c54a4b1be6a4b8c7ee1f4fef0088fb + category: main + optional: false +- name: zfp + version: 1.0.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + _openmp_mutex: '>=4.5' + libgcc: '>=13' + libstdcxx: '>=13' + url: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda + hash: + md5: e0409515c467b87176b070bff5d9442e + sha256: 0dfafc75c72f308c0200836f2b973766cdcb8741b1ab61e0b462a34dd6b6ad20 + category: main + optional: false +- name: zfp + version: 1.0.1 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/zfp-1.0.1-he0c23c2_2.conda + hash: + md5: 66b2e227c0d5c78df52e62390b71032d + sha256: 8fa0491c8ce89b3a37dd3f84b7a670e260e8f8eae3c70a861f80e85e35456b09 + category: main + optional: false +- name: zict + version: 3.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + hash: + md5: e52c2ef711ccf31bb7f70ca87d144b9e + sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d + category: main + optional: false +- name: zict + version: 3.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda + hash: + md5: e52c2ef711ccf31bb7f70ca87d144b9e + sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d + category: main + optional: false +- name: zipp + version: 3.21.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + hash: + md5: 0c3cc595284c5e8f0f9900a9b228a332 + sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + category: main + optional: false +- name: zipp + version: 3.21.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + hash: + md5: 0c3cc595284c5e8f0f9900a9b228a332 + sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + category: main + optional: false +- name: zlib + version: 1.3.1 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libzlib: 1.3.1 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + hash: + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + category: main + optional: false +- name: zlib + version: 1.3.1 + manager: conda + platform: win-64 + dependencies: + libzlib: 1.3.1 + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.1-h2466b09_2.conda + hash: + md5: be60c4e8efa55fddc17b4131aa47acbd + sha256: 8c688797ba23b9ab50cef404eca4d004a948941b6ee533ead0ff3bf52012528c + category: main + optional: false +- name: zlib-ng + version: 2.0.7 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda + hash: + md5: 49e8329110001f04923fe7e864990b0c + sha256: 6b3a22b7cc219e8d83f16c1ceba67aa51e0b7e3bcc4a647b97a0a510559b0477 + category: main + optional: false +- name: zlib-ng + version: 2.0.7 + manager: conda + platform: win-64 + dependencies: + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vs2015_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda + hash: + md5: c72bb979d406650d3a78743ff888c451 + sha256: 61a4e4c209f04d3f426213a187686262ebc2dccac9a97a0743c2ebbf6e3e3dd8 + category: main + optional: false +- name: zstandard + version: 0.19.0 + manager: conda + platform: linux-64 + dependencies: + cffi: '>=1.8' + libgcc-ng: '>=12' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.19.0-py310h5764c6d_0.tar.bz2 + hash: + md5: 74ea667169b1296fb31bb86f13abfa49 + sha256: 958e22d2b24204e08ca0d64db55d63520583db99852cecc82d22c1a3832b23a2 + category: main + optional: false +- name: zstandard + version: 0.23.0 + manager: conda + platform: win-64 + dependencies: + cffi: '>=1.11' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + zstd: '>=1.5.6,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda + hash: + md5: 2a879227ccc1a10a2caddf12607ffaeb + sha256: 4e8aff4d0d42024e9f70783e51666186a681384d59fdd03fafda4b28f1fd540e + category: main + optional: false +- name: zstd + version: 1.5.7 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + libgcc: '>=13' + libstdcxx: '>=13' + libzlib: '>=1.3.1,<2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_0.conda + hash: + md5: 3fe5420e4da42d8110c28f21de6cc127 + sha256: b8f7b4c7264e84fcedce3929239f5c55e86ae90948c9fdee666f93a70ca58e66 + category: main + optional: false +- name: zstd + version: 1.5.6 + manager: conda + platform: win-64 + dependencies: + libzlib: '>=1.2.13,<2.0.0a0' + ucrt: '>=10.0.20348.0' + vc: '>=14.2,<15' + vc14_runtime: '>=14.29.30139' + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + hash: + md5: 9a17230f95733c04dc40a2b1e5491d74 + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + category: main + optional: false +- name: curve-apps + version: 0.2.0 + manager: pip + platform: linux-64 + dependencies: + geoapps-utils: '>=0.4.0rc1,<0.5.0a.dev' + geoh5py: '>=0.10.0rc1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + pydantic: '>=2.5.2,<3.0.0' + scikit-image: ==0.24.* + scipy: '>=1.14.0,<1.15.0' + tqdm: '>=4.66.1,<4.67.0' + url: https://files.pythonhosted.org/packages/b4/78/a4d11161f66b732d0115b2bf5d5b6b84f6400a8a7b6dccd75c869328b58a/curve_apps-0.2.0-py3-none-any.whl + hash: + sha256: 3142d0f6b212339c022ca6e9f482b4a30b3c48c85efd4f3843375cd8bdfac9c2 + category: main + optional: false +- name: curve-apps + version: 0.2.0 + manager: pip + platform: win-64 + dependencies: + geoapps-utils: '>=0.4.0rc1,<0.5.0a.dev' + geoh5py: '>=0.10.0rc1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + pydantic: '>=2.5.2,<3.0.0' + scikit-image: ==0.24.* + scipy: '>=1.14.0,<1.15.0' + tqdm: '>=4.66.1,<4.67.0' + url: https://files.pythonhosted.org/packages/b4/78/a4d11161f66b732d0115b2bf5d5b6b84f6400a8a7b6dccd75c869328b58a/curve_apps-0.2.0-py3-none-any.whl + hash: + sha256: 3142d0f6b212339c022ca6e9f482b4a30b3c48c85efd4f3843375cd8bdfac9c2 + category: main + optional: false +- name: geoapps-utils + version: 0.4.0 + manager: pip + platform: linux-64 + dependencies: + geoh5py: '>=0.10.0rc1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + pydantic: '>=2.5.2,<3.0.0' + scipy: '>=1.14.0,<1.15.0' + url: https://files.pythonhosted.org/packages/10/dd/684a4884b871aebabd4543896bd4fd18c31f922eb044f5f5633e55224f09/geoapps_utils-0.4.0-py3-none-any.whl + hash: + sha256: 22baa6f49c09e02ab65efd07fbab1421982f17aefc98749febf858da2b47d6ef + category: main + optional: false +- name: geoapps-utils + version: 0.4.0 + manager: pip + platform: win-64 + dependencies: + geoh5py: '>=0.10.0rc1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + pydantic: '>=2.5.2,<3.0.0' + scipy: '>=1.14.0,<1.15.0' + url: https://files.pythonhosted.org/packages/10/dd/684a4884b871aebabd4543896bd4fd18c31f922eb044f5f5633e55224f09/geoapps_utils-0.4.0-py3-none-any.whl + hash: + sha256: 22baa6f49c09e02ab65efd07fbab1421982f17aefc98749febf858da2b47d6ef + category: main + optional: false +- name: geoh5py + version: 0.10.1 + manager: pip + platform: linux-64 + dependencies: + h5py: '>=3.2.1,<4.0.0' + numpy: '>=1.26.0,<1.27.0' + pillow: '>=10.3.0,<10.4.0' + pydantic: '>=2.5.2,<3.0.0' + url: https://files.pythonhosted.org/packages/e5/21/e2e42eab761b538f1a391396d845ad0c5f900e20d7a72aacc7da181d6ee8/geoh5py-0.10.1-py3-none-any.whl + hash: + sha256: 6ad70a64f5d5ae25c84c1d75f8142a0b34204027041a3edaf1b036fa9e571cf2 + category: main + optional: false +- name: geoh5py + version: 0.10.1 + manager: pip + platform: win-64 + dependencies: + h5py: '>=3.2.1,<4.0.0' + numpy: '>=1.26.0,<1.27.0' + pillow: '>=10.3.0,<10.4.0' + pydantic: '>=2.5.2,<3.0.0' + url: https://files.pythonhosted.org/packages/e5/21/e2e42eab761b538f1a391396d845ad0c5f900e20d7a72aacc7da181d6ee8/geoh5py-0.10.1-py3-none-any.whl + hash: + sha256: 6ad70a64f5d5ae25c84c1d75f8142a0b34204027041a3edaf1b036fa9e571cf2 + category: main + optional: false +- name: mira-simpeg + version: 0.21.2.1 + manager: pip + platform: linux-64 + dependencies: + dask: '*' + discretize: '>=0.10.0' + distributed: '*' + empymod: '>=2.0.0' + fsspec: '>=0.3.3' + geoana: '>=0.5.0' + geoh5py: '>=0.10.0-alpha.1,<0.11' + matplotlib: '*' + numpy: '>=1.20' + pandas: '*' + pymatsolver: '>=0.2,<0.3.0' + scikit-learn: '>=1.2' + scipy: '>=1.8.0' + zarr: '*' + url: https://files.pythonhosted.org/packages/db/d5/72a4d0f789a01686bd6f014d21ed25f42163bcef17dc7a2ae702da5815ab/mira_simpeg-0.21.2.1-py3-none-any.whl + hash: + sha256: 82451148ed720078308f5c3273fd78ce83167a214a0164c9956af2865315ab37 + category: main + optional: false +- name: mira-simpeg + version: 0.21.2.1 + manager: pip + platform: win-64 + dependencies: + dask: '*' + discretize: '>=0.10.0' + distributed: '*' + empymod: '>=2.0.0' + fsspec: '>=0.3.3' + geoana: '>=0.5.0' + geoh5py: '>=0.10.0-alpha.1,<0.11' + matplotlib: '*' + numpy: '>=1.20' + pandas: '*' + pymatsolver: '>=0.2,<0.3.0' + scikit-learn: '>=1.2' + scipy: '>=1.8.0' + zarr: '*' + url: https://files.pythonhosted.org/packages/db/d5/72a4d0f789a01686bd6f014d21ed25f42163bcef17dc7a2ae702da5815ab/mira_simpeg-0.21.2.1-py3-none-any.whl + hash: + sha256: 82451148ed720078308f5c3273fd78ce83167a214a0164c9956af2865315ab37 + category: main + optional: false +- name: octree-creation-app + version: 0.2.0 + manager: pip + platform: linux-64 + dependencies: + discretize: ==0.10.* + geoapps-utils: '>=0.4.0rc1,<0.5.0a.dev' + geoh5py: '>=0.10.0rc1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + scipy: '>=1.14.0,<1.15.0' + url: https://files.pythonhosted.org/packages/03/87/4c4ac173a59d149878298daf1bd2a51d50017e111c1daaf66b03447099e1/octree_creation_app-0.2.0-py3-none-any.whl + hash: + sha256: 6e1ccce3cbbbb1eb7923c6c92dbc000feca2ffc6b163025f0f33e8245fcabbac + category: main + optional: false +- name: octree-creation-app + version: 0.2.0 + manager: pip + platform: win-64 + dependencies: + discretize: ==0.10.* + geoapps-utils: '>=0.4.0rc1,<0.5.0a.dev' + geoh5py: '>=0.10.0rc1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + scipy: '>=1.14.0,<1.15.0' + url: https://files.pythonhosted.org/packages/03/87/4c4ac173a59d149878298daf1bd2a51d50017e111c1daaf66b03447099e1/octree_creation_app-0.2.0-py3-none-any.whl + hash: + sha256: 6e1ccce3cbbbb1eb7923c6c92dbc000feca2ffc6b163025f0f33e8245fcabbac + category: main + optional: false +- name: param-sweeps + version: 0.2.0 + manager: pip + platform: linux-64 + dependencies: + geoh5py: '>=0.10.0b1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + url: https://files.pythonhosted.org/packages/f9/6d/09cb4f3588f5ff07e2964d5b682170d686a349b49ec39d764db81f1e8bb7/param_sweeps-0.2.0-py3-none-any.whl + hash: + sha256: f168eabf4f665ec84abd22ae6f02d631692103f86a7769847533b47a1e42b074 + category: main + optional: false +- name: param-sweeps + version: 0.2.0 + manager: pip + platform: win-64 + dependencies: + geoh5py: '>=0.10.0b1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + url: https://files.pythonhosted.org/packages/f9/6d/09cb4f3588f5ff07e2964d5b682170d686a349b49ec39d764db81f1e8bb7/param_sweeps-0.2.0-py3-none-any.whl + hash: + sha256: f168eabf4f665ec84abd22ae6f02d631692103f86a7769847533b47a1e42b074 + category: main + optional: false +- name: peak-finder-app + version: 0.2.0 + manager: pip + platform: linux-64 + dependencies: + curve-apps: '>=0.2.0-rc.1,<0.3.0a.dev' + dask: ==2024.6.* + distributed: ==2024.6.* + geoapps-utils: '>=0.4.0-rc.1,<0.5.0a.dev' + geoh5py: '>=0.10.0-rc.1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + plotly: '>=5.19.0,<5.20.0' + scipy: '>=1.14.0,<1.15.0' + tqdm: '>=4.66.1,<5.0.0' + url: https://files.pythonhosted.org/packages/8c/33/b2ba85cce17b6c565b9bc6f57c79fcbaa751eb73182284c6faf793dca2e5/peak_finder_app-0.2.0-py3-none-any.whl + hash: + sha256: ffdf641c8bdb5858b2c4f28f2ff6267e277fd14ad95e70862377020d7823d4c8 + category: main + optional: false +- name: peak-finder-app + version: 0.2.0 + manager: pip + platform: win-64 + dependencies: + curve-apps: '>=0.2.0-rc.1,<0.3.0a.dev' + dask: ==2024.6.* + distributed: ==2024.6.* + geoapps-utils: '>=0.4.0-rc.1,<0.5.0a.dev' + geoh5py: '>=0.10.0-rc.1,<0.11.0a.dev' + numpy: '>=1.26.0,<1.27.0' + plotly: '>=5.19.0,<5.20.0' + scipy: '>=1.14.0,<1.15.0' + tqdm: '>=4.66.1,<5.0.0' + url: https://files.pythonhosted.org/packages/8c/33/b2ba85cce17b6c565b9bc6f57c79fcbaa751eb73182284c6faf793dca2e5/peak_finder_app-0.2.0-py3-none-any.whl + hash: + sha256: ffdf641c8bdb5858b2c4f28f2ff6267e277fd14ad95e70862377020d7823d4c8 + category: main + optional: false +- name: pymatsolver + version: 0.2.0 + manager: pip + platform: linux-64 + dependencies: + numpy: '>=1.7' + scipy: '>=0.13' + url: https://files.pythonhosted.org/packages/c8/2f/31206d73ec4ce85746532bd96a6a369ecab4d5f8efcebc301ebc3364ebfb/pymatsolver-0.2.0.tar.gz + hash: + sha256: df9e0444f3c7fadf57b226d7d90b7be1dea9e24718575b458ba50429736d6c45 + category: main + optional: false +- name: pymatsolver + version: 0.2.0 + manager: pip + platform: win-64 + dependencies: + numpy: '>=1.7' + scipy: '>=0.13' + url: https://files.pythonhosted.org/packages/c8/2f/31206d73ec4ce85746532bd96a6a369ecab4d5f8efcebc301ebc3364ebfb/pymatsolver-0.2.0.tar.gz + hash: + sha256: df9e0444f3c7fadf57b226d7d90b7be1dea9e24718575b458ba50429736d6c45 + category: main + optional: false +- name: simpeg-archive + version: 0.11.0.1 + manager: pip + platform: linux-64 + dependencies: + discretize: '*' + numpy: '>=1.7' + properties: '>=0.3.1b2' + pymatsolver: '>=0.1.1' + scipy: '>=0.13' + url: https://files.pythonhosted.org/packages/91/b5/2e8e908c4d1a78d90175a70b4a1c291ef03bd178dd19107a5dd50b203271/simpeg_archive-0.11.0.1-py2.py3-none-any.whl + hash: + sha256: 17cc5ee70b65eeece1ab1f09b54d79c5bfa90a4c4863cc6c517bf97fbaa5a3f6 + category: main + optional: false +- name: simpeg-archive + version: 0.11.0.1 + manager: pip + platform: win-64 + dependencies: + discretize: '*' + numpy: '>=1.7' + properties: '>=0.3.1b2' + pymatsolver: '>=0.1.1' + scipy: '>=0.13' + url: https://files.pythonhosted.org/packages/91/b5/2e8e908c4d1a78d90175a70b4a1c291ef03bd178dd19107a5dd50b203271/simpeg_archive-0.11.0.1-py2.py3-none-any.whl + hash: + sha256: 17cc5ee70b65eeece1ab1f09b54d79c5bfa90a4c4863cc6c517bf97fbaa5a3f6 + category: main + optional: false +- name: simpeg-drivers + version: 0.2.0 + manager: pip + platform: linux-64 + dependencies: + dask: ==2024.6.* + discretize: ==0.10.* + distributed: ==2024.6.* + geoapps-utils: '>=0.4.0rc1,<0.5.0a.dev' + geoh5py: '>=0.10.1rc1,<0.11.0a.dev' + mira-simpeg: '>=0.21.2.1rc1,<0.21.2.2a.dev' + numpy: '>=1.26.0,<1.27.0' + octree-creation-app: '>=0.2.0rc1,<0.3.0a.dev' + param-sweeps: '>=0.2.0rc1,<0.3.0a.dev' + pydiso: ==0.1.* + pymatsolver: ==0.2.* + scipy: '>=1.14.0,<1.15.0' + url: https://files.pythonhosted.org/packages/b3/e4/d06da4fd8eb7ac78e4932c8527b93f6997587174339fd220b542f21d7c45/simpeg_drivers-0.2.0-py3-none-any.whl + hash: + sha256: 9976315d49833ca201504c1e1c7ad29194a3f9cf478ebf803e8b9f61c3acf789 + category: main + optional: false +- name: simpeg-drivers + version: 0.2.0 + manager: pip + platform: win-64 + dependencies: + dask: ==2024.6.* + discretize: ==0.10.* + distributed: ==2024.6.* + geoapps-utils: '>=0.4.0rc1,<0.5.0a.dev' + geoh5py: '>=0.10.1rc1,<0.11.0a.dev' + mira-simpeg: '>=0.21.2.1rc1,<0.21.2.2a.dev' + numpy: '>=1.26.0,<1.27.0' + octree-creation-app: '>=0.2.0rc1,<0.3.0a.dev' + param-sweeps: '>=0.2.0rc1,<0.3.0a.dev' + pydiso: ==0.1.* + pymatsolver: ==0.2.* + scipy: '>=1.14.0,<1.15.0' + url: https://files.pythonhosted.org/packages/b3/e4/d06da4fd8eb7ac78e4932c8527b93f6997587174339fd220b542f21d7c45/simpeg_drivers-0.2.0-py3-none-any.whl + hash: + sha256: 9976315d49833ca201504c1e1c7ad29194a3f9cf478ebf803e8b9f61c3acf789 + category: main + optional: false diff --git a/pylintrc b/pylintrc index cd59397d8..4b66646d8 100644 --- a/pylintrc +++ b/pylintrc @@ -22,7 +22,10 @@ analyse-fallback-blocks=no # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. extension-pkg-allow-list=numpy, - scipy + scipy, + PySide2.QtWidgets, + PySide2.QtWebEngineWidgets, + PySide2.QtCore # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may diff --git a/pyproject.toml b/pyproject.toml index c8a49249d..173596dea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,17 @@ [tool.poetry] name = "geoapps" -version = "0.11.1-post.2" +version = "0.12.0" license = "MIT" description = "Open-sourced Applications in Geoscience" -authors = ["Mira Geoscience "] +authors = ["Mira Geoscience "] +maintainers = [ + "Benjamin Kary ", + "Dominique Fournier ", +] repository = "https://github.com/MiraGeoscience/geoapps" -documentation = "https://geoapps.readthedocs.io/en/latest/" -homepage = "https://mirageoscience.com" -readme = "README.rst" +documentation = "https://mirageoscience-geoapps.readthedocs-hosted.com/" +homepage = "https://www.mirageoscience.com/mining-industry-software/python-integration/" +readme = "package.rst" packages = [ { include = "geoapps" }, @@ -18,6 +22,15 @@ exclude = [ "geoapps-assets/uijson/**", ] +include = [ + { path = "COPYING" }, + { path = "COPYING.LESSER" }, + { path = "LICENSE" }, + { path = "README.rst" }, + { path = "THIRD_PARTY_SOFTWARE.rst" }, + { path = "docs/**/THIRD_PARTY_SOFTWARE.rst" }, +] + keywords = ["geology", "geophysics", "earth sciences"] classifiers = [ "Development Status :: 4 - Beta", @@ -37,130 +50,161 @@ classifiers = [ start_notebook = { callable = "geoapps.scripts.start_notebook:main", extras = ["apps"] } [tool.poetry.dependencies] -python = "^3.9, < 3.11" - -## dependencies for a minimal environment -numpy = "~1.23.5" # also geoh5py, simpeg and geoana -scipy = "~1.10.1" -semver = "~3.0.0" -c-blosc2 = "~2.13.2" - -geoh5py = {version = "~0.8.0", source = "pypi", allow-prereleases = true} -#geoh5py = {url = "https://github.com/MiraGeoscience/geoh5py/archive/refs/tags/v0.8.0-rc.2.zip#sha256="} -mira-omf = {version = "~3.1.0", source = "pypi", allow-prereleases = true} -#mira-omf = {url = "https://github.com/MiraGeoscience/omf/archive/refs/heads/develop.zip#sha256="} -las-geoh5 = { version = "~0.1.0", source = "pypi", allow-prereleases = true} -#las-geoh5 = {url = "https://github.com/MiraGeoscience/las-geoh5/archive/refs/heads/GEOPY-1130.zip#sha256="} -param-sweeps = {version = "~0.1.6", source = "pypi", allow-prereleases = true} -#param-sweeps = {url = "https://github.com/MiraGeoscience/param-sweeps/archive/refs/heads/develop.zip#sha256="} - -## dependencies for core algorithms -dask = {version = "2022.10.*", extras = ["distributed"], optional = true} -discretize = {version = "~0.10.0", optional = true } # also in simpeg -distributed = {version = "2022.10.*", optional = true} # because conda-lock doesn't take dask extras into account -fiona = {version = "~1.9.2", optional = true} -fsspec = {version = "2022.*", optional = true } # also in simpeg -gdal = {version = "~3.6.3", optional = true} -matplotlib = {version = "~3.7.1", optional = true } # also in simpeg and geoana -pandas = {version = "~1.5.3", optional = true } # also in simpeg -scikit-learn = {version = "~1.2.2", optional = true } # also in simpeg -tqdm = {version = "^4.64.0", optional = true } # also in las-geoh5 - -#simpeg-archive = {url = "https://github.com/MiraGeoscience/simpeg/archive/refs/heads/feature/simpeg_archive.zip#sha256="} -simpeg-archive = {version = "~0.11.0.dev6", source = "pypi", optional = true} -#mira-simpeg = {url = "https://github.com/MiraGeoscience/simpeg/archive/refs/heads/release/v0.19.0.dev5+geoapps.0.11.0.zip#sha256=", optional = true} -mira-simpeg = {version = "~0.19.0.dev7", source = "pypi", optional = true} +python = "^3.10, < 3.11" + +dask = {version = "2024.6.*", extras = ["distributed"]} # also in simpeg[dask] +discretize = "0.10.*" # also in simpeg, octree-creation-app +distributed = "2024.6.*" # because conda-lock doesn't take dask extras into account +fiona = "~1.9.2" +fsspec = "2022.*" # also in simpeg +gdal = "~3.6.3" +pandas = "~2.2.1" # also in simpeg +scikit-image = "~0.20.0" +scikit-learn = "~1.4.0" # also in simpeg +tqdm = "^4.66.1" # also in las-geoh5 +numpy = "~1.26.0" # also in geoh5py, simpeg +notebook = "~7.3.2" +plotly = "~5.19.0" +pydiso = "0.1.*" # not imported, but required at runtime for simpeg +scipy = "~1.14.0" + +## dependencies for UI +#--------------------- +dash = "~2.12" # also in geoapps-utils[dash] +dash-daq = "~0.5.0" +flask = "~3.0.3" # also in geoapps-utils[dash] +ipyfilechooser = "~0.6.0" +pyqtwebengine = "~5.15.2" # also in geoapps-utils[dash] +pyside2 = "~5.15.2" # also in geoapps-utils[dash] + +## pip dependencies from Git repositories +#---------------------------------------- +geoh5py = {version = ">=0.10.0rc1, <0.11.0a.dev", source = "pypi", allow-prereleases = true} +#geoh5py = {git = "https://github.com/MiraGeoscience/geoh5py.git", rev = "release/0.10.0"} + +octree-creation-app = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true} +#octree-creation-app = {git = "https://github.com/MiraGeoscience/octree-creation-app.git", rev = "release/0.2.0"} + +geoapps-utils = {version = ">=0.4.0rc1, <0.5.0a.dev", source = "pypi", allow-prereleases = true} +#geoapps-utils = {git = "https://github.com/MiraGeoscience/geoapps-utils.git", rev = "release/0.4.0"} + +mira-simpeg = {version = ">=0.21.2.1rc1, <0.21.2.2a.dev", source="pypi", allow-prereleases = true, extras = ["dask"]} +#mira-simpeg = {git = "https://github.com/MiraGeoscience/simpeg.git", rev = "release/0.21.2.1", extras = ["dask"]} + +param-sweeps = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true} +#param-sweeps = {git = "https://github.com/MiraGeoscience/param-sweeps.git", rev = "release/0.2.0"} + +peak-finder-app = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true} + +simpeg-drivers = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true} +#simpeg-drivers = {url = "https://github.com/MiraGeoscience/simpeg-drivers/archive/refs/heads/release/0.1.1.zip"} +#simpeg-drivers = {url = "http://localhost:8888/simpeg-drivers.tar.gz"} + +simpeg-archive = {version = "~0.11.0", source = "pypi", allow-prereleases = true} +#simpeg-archive = {url = "https://github.com/MiraGeoscience/simpeg/archive/refs/heads/feature/simpeg_archive.tar.gz"} + ## indirect dependencies, forcing them here for installation through Conda not pip -empymod = {version = "~2.2.1", optional = true} # from simpeg and geoana -geoana = {version = "~0.4.0", optional = true} # from simpeg +#--------------------------------------------------------------------------------- +Pillow = "~10.3.0" # from geoh5py +empymod = "~2.2.1" # from simpeg and geoana +geoana = ">=0.5.0, <0.6.0" # from simpeg h5py = "^3.2.1" # from geoh5py -mkl = {version = "2022.*", optional = true } # from simpeg -Pillow = "^10.0.1" # from geoh5py -properties = "~0.6.0" # from omf -pydiso = {version = "~0.0.3", optional = true} # from simpeg -pymatsolver = {version = "~0.2.0", optional = true} # from simpeg -pypng = "^0.20220715" # from omf -scikit-image = {version = "~0.19.2", optional = true} -six = "^1.16" # from omf -vectormath = "~0.2.0" # from omf -zarr = {version = "~2.14.2", optional = true} # from simpeg using Dask +mkl = "2023.2, <2024.1" # from simpeg +properties = "~0.6.0" # from simpeg-archive +pydantic = "^2.5.2" # from geoapps-utils, octrree-creation-app +pymatsolver = {version = "0.2.*", source = "pypi"} +zarr = "~2.14.2" # from simpeg[dask], simpeg-drivers -## dependencies for UI -ipyfilechooser = {version = "~0.6.0", optional = true} -ipywidgets = {version = "^7.6.5", optional = true} -plotly = {version = "~5.13.1", optional = true} -pyqtwebengine = {version = "~5.15", optional = true} -pyside2 = {version = "~5.15", optional = true} -dash-daq = {version = "~0.5.0", optional = true} +# force some versions to resolve incompatible resolution between PyPI and Conda +#------------------------------------------------------------------------------- +tzdata = "2023.4" # through pandas from SimPEG (constraint copied from simpeg-drivers) +tbb = { version = "2021.12.*", source = "pypi" } # through mkl from SimPEG ## about pip dependencies # to be specified to work with conda-lock # - from PyPI: my_package = { version = "1.2.3", source = "pypi" } -# - from URL: -# - for a tags: my_package = { url = "https://github.com/ORGANISATION/REPO/archive/refs/tags/VERSION_TAG.zip#sha256=" } -# - for a branch: my_package = { url = "https://github.com/ORGANISATION/REPO/archive/refs/heads/BRANCH.zip#sha256=" } -# Note - conda-lock does not support the syntax: my_package = { git = ... } -# while poetry2conda supports only { git = "...", tag = "..." }, and not { url = ... } +# - from URL: !!! no actual lock, as tag or branch can move and installation will fetch current !!! +# - for a tag: my_package = { url = "https://github.com/ORGANISATION/REPO/archive/refs/tags/TAG.tar.gz" } +# - for a branch: my_package = { url = "https://github.com/ORGANISATION/REPO/archive/refs/heads/BRANCH.tar.gz" } +# - to actually lock on a revision: my_package = { git = "https://github.com/ORGANISATION/REPO.git", rev = "GIT_REV" } +# (where rev value is a tag, a branch name or a commit hash). Can also use ``branch`` or ``tag`` instead of ``rev`` +[tool.conda-lock.dependencies] +libblas = "*=*mkl" # because simpeg already brings in the MKL +ipywidgets = ">=8.1.0" +widgetsnbextension = ">=4.0" +jupyterlab = ">=4.3.0" +jupyter_server = ">=2.15.0" +jupyter_client = ">=8.6.0" +matplotlib = ">=3.0.0" # also in simpeg and geoana [tool.poetry.group.dev.dependencies] +Pygments = "*" +jupyter-book = "^1.0" +jupytext = "^1.14" pylint = "*" pytest = "*" pytest-cov = "*" -toml = "*" # for tests only - -[tool.poetry.extras] -core = [ - "dask", - "discretize", - "distributed", - "empymod", - "fiona", - "fsspec", - "gdal", - "geoana", - "matplotlib", - "mira-simpeg", - "mkl", - "pandas", - "pydiso", - "pymatsolver", - "scikit-image", - "scikit-learn", - "simpeg-archive", - "tqdm", - "zarr", -] - -# extras for apps user interface -apps = [ - # should include "core", but need non-overlapping extra lists for conda-lock - "dash-daq", - "ipyfilechooser", - "ipywidgets", - "plotly", - "pyqtwebengine", - "pyside2", -] +readthedocs-sphinx-ext = "*" +semver = "*" +sphinx = "^5.0" +tomli = "*" [tool.conda-lock] -platforms = ['win-64', 'osx-64', 'linux-64'] +platforms = ['win-64', 'linux-64'] channels = ['conda-forge'] -[tool.conda-lock.dependencies] -libblas = "*=*mkl" +[tool.ruff] +target-version = "py310" + +[tool.ruff.lint] +ignore = [ + "B028", # no-explicit-stacklevel for warnings.warn() + "E501", # line-too-long - code is reformatted (do not care about comments and docstring) + "F401", # unsused-import - covered by pycln + "A005", # TO DO (stdlib-module-shadowing: Module shadows a Python standard-library module) + "RUF005", # TO DO + "B007", # TO DO + "B011", # TO DO + "B904", # TO DO + "C408", # TO DO + "C414", # TO DO + "C416", # TO DO + "C419", # TO DO + "C901", # TO DO + "RUF005", # collection-literal-concatenation - wrong suggestion with numpy arrays + "RUF012", # TO DO + "RUF013", # TO DO + "RUF015", # TO DO + "UP038", # TO DO + "TID252", # TO DO +] +select = [ + "A", # flake8-builtins + "B", # flake8-bugbear + "B006", # Do not use mutable data structures for argument defaults + "B9", # flake8-bugbear opiniated warnings + "BLE", # flake8-blind-except + "C4", # flake8-comprehensions + "C9", # mccabe + "E", # pycodestyle errors + "F", # pyflakes + "I", # isort + "RUF", # ruff rules + "TID", # flake8-tidy-imports + "UP", # pyupgrade + "W", # pycodestyle warnings +] + +[tool.ruff.lint.mccabe] +max-complexity = 18 -[tool.isort] -# settings for compatibility between ``isort`` and ``black`` formatting -multi_line_output = 3 -include_trailing_comma = true -force_grid_wrap = 0 -use_parentheses = true -line_length = 88 +[tool.ruff.lint.isort] +lines-after-imports = 2 -[tool.black] -# defaults are just fine +[tool.ruff.format] +# default formatting is just fine [tool.mypy] warn_unused_configs = true @@ -171,10 +215,11 @@ show_column_numbers = true check_untyped_defs = true plugins = [ - # 'numpy.typing.mypy_plugin' + 'numpy.typing.mypy_plugin' ] [tool.pytest.ini_options] +#addopts = [tool.coverage.run] branch = true @@ -189,6 +234,7 @@ exclude_lines = [ "pragma: no cover" ] +fail_under = 35 [tool.coverage.html] skip_empty = true diff --git a/readthedocs.yml b/readthedocs.yml index b9aada1db..fa0908b74 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -1,19 +1,21 @@ version: 2 build: - os: "ubuntu-20.04" + os: "ubuntu-22.04" tools: - python: "mambaforge-4.10" + python: "mambaforge-22.9" jobs: + pre_build: + - "pip install . --no-deps" post_checkout: # Download and uncompress the binary # https://git-lfs.github.com/ - - wget https://github.com/git-lfs/git-lfs/releases/download/v3.1.4/git-lfs-linux-amd64-v3.1.4.tar.gz - - tar xvfz git-lfs-linux-amd64-v3.1.4.tar.gz + - wget https://github.com/git-lfs/git-lfs/releases/download/v3.4.1/git-lfs-linux-amd64-v3.4.1.tar.gz + - tar xvfz git-lfs-linux-amd64-v3.4.1.tar.gz --strip-components=1 --no-anchored git-lfs # Modify LFS config paths to point where git-lfs binary was downloaded - - git config filter.lfs.process "`pwd`/git-lfs filter-process" - - git config filter.lfs.smudge "`pwd`/git-lfs smudge -- %f" - - git config filter.lfs.clean "`pwd`/git-lfs clean -- %f" + - git config filter.lfs.process "$(pwd)/git-lfs filter-process" + - git config filter.lfs.smudge "$(pwd)/git-lfs smudge -- %f" + - git config filter.lfs.clean "$(pwd)/git-lfs clean -- %f" # Make LFS available in current repository - ./git-lfs install # Download content from remote diff --git a/tests/__init__.py b/tests/__init__.py index 5d3acca29..8b44dfa97 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,14 +1,15 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from pathlib import Path +from geoapps import assets_path -PROJECT = Path(__file__).parent.parent / "geoapps-assets" / "FlinFlon.geoh5" -PROJECT_DCIP = Path(__file__).parent.parent / "geoapps-assets" / "FlinFlon_dcip.geoh5" -PROJECT_TEM = ( - Path(__file__).parent.parent / "geoapps-assets" / "FlinFlon_airborne_tem.geoh5" -) + +PROJECT = assets_path() / "FlinFlon.geoh5" +PROJECT_DCIP = assets_path() / "FlinFlon_dcip.geoh5" +PROJECT_TEM = assets_path() / "FlinFlon_airborne_tem.geoh5" diff --git a/tests/assets_path_test.py b/tests/assets_path_test.py index 2a031c28b..a13ba3e2c 100644 --- a/tests/assets_path_test.py +++ b/tests/assets_path_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/tests/conftest.py b/tests/conftest.py index 36c3a7aeb..4ea468d31 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/tests/constants_test.py b/tests/constants_test.py deleted file mode 100644 index c385aae50..000000000 --- a/tests/constants_test.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from geoapps.inversion.electricals.direct_current.three_dimensions import ( - constants as direct_current_constants, -) -from geoapps.inversion.electricals.induced_polarization.three_dimensions import ( - constants as induced_polarization_constants, -) -from geoapps.inversion.potential_fields.gravity import constants as gravity_constants -from geoapps.inversion.potential_fields.magnetic_scalar import ( - constants as magnetic_scalar_constants, -) -from geoapps.inversion.potential_fields.magnetic_vector import ( - constants as magnetic_vector_constants, -) - -constants = [ - gravity_constants, - magnetic_scalar_constants, - magnetic_vector_constants, - direct_current_constants, - induced_polarization_constants, -] - - -def test_deprecated_uijson_fields(): - deprecated_fields = ["default"] - for constant in constants: - d_u_j = constant.default_ui_json - for value in d_u_j.values(): - if isinstance(value, dict): - for field in deprecated_fields: - assert field not in value.keys() diff --git a/tests/data_test.py b/tests/data_test.py deleted file mode 100644 index 2c8b4be62..000000000 --- a/tests/data_test.py +++ /dev/null @@ -1,281 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -import SimPEG -from discretize.utils import mesh_builder_xyz -from geoh5py.objects import Points -from geoh5py.workspace import Workspace - -from geoapps.driver_base.utils import treemesh_2_octree -from geoapps.inversion.components import InversionData -from geoapps.inversion.potential_fields.magnetic_vector.driver import ( - MagneticVectorDriver, - MagneticVectorParams, -) -from geoapps.octree_creation.driver import OctreeDriver -from geoapps.utils.testing import Geoh5Tester - -from . import PROJECT - -geoh5 = Workspace(PROJECT) - - -def setup_params(tmp): - geotest = Geoh5Tester(geoh5, tmp, "test.geoh5", params_class=MagneticVectorParams) - geotest.set_param("mesh", "{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}") - geotest.set_param("data_object", "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}") - geotest.set_param("topography_object", "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}") - geotest.set_param("tmi_channel", "{44822654-b6ae-45b0-8886-2d845f80f422}") - geotest.set_param("gyz_channel", "{3d19bd53-8bb8-4634-aeae-4e3a90e9d19e}") - geotest.set_param("topography", "{a603a762-f6cb-4b21-afda-3160e725bf7d}") - return geotest.make() - - -def test_survey_data(tmp_path: Path): - X, Y, Z = np.meshgrid(np.linspace(0, 100, 3), np.linspace(0, 100, 3), 0) - verts = np.column_stack([X.ravel(), Y.ravel(), Z.ravel()]) - with Workspace(tmp_path / "test_workspace.geoh5") as workspace: - test_data_object = Points.create( - workspace, vertices=verts, name="test_data_object" - ) - bxx_data, byy_data, bzz_data = test_data_object.add_data( - { - "bxx": { - "association": "VERTEX", - "values": np.arange(len(verts)).astype(float), - }, - "byy": { - "association": "VERTEX", - "values": len(verts) + np.arange(len(verts)).astype(float), - }, - "bzz": { - "association": "VERTEX", - "values": 2 * len(verts) + np.arange(len(verts)).astype(float), - }, - } - ) - test_topo_object = Points.create( - workspace, vertices=verts, name="test_topo_object" - ) - _ = test_topo_object.add_data( - {"elev": {"association": "VERTEX", "values": 100 * np.ones(len(verts))}} - ) - topo = workspace.get_entity("elev")[0] - mesh = mesh_builder_xyz( - verts, - [20, 20, 20], - depth_core=50, - mesh_type="TREE", - ) - mesh = OctreeDriver.refine_tree_from_surface( - mesh, - test_topo_object, - levels=[2], - diagonal_balance=False, - finalize=True, - ) - - mesh = treemesh_2_octree(workspace, mesh) - params = MagneticVectorParams( - forward_only=False, - geoh5=workspace, - data_object=test_data_object.uid, - topography_object=test_topo_object.uid, - topography=topo, - bxx_channel=bxx_data.uid, - bxx_uncertainty=0.1, - byy_channel=byy_data.uid, - byy_uncertainty=0.2, - bzz_channel=bzz_data.uid, - bzz_uncertainty=0.3, - mesh=mesh.uid, - starting_model=0.0, - tile_spatial=2, - z_from_topo=True, - receivers_offset_z=50.0, - resolution=0.0, - ) - - driver = MagneticVectorDriver(params) - - local_survey_a = driver.inverse_problem.dmisfit.objfcts[0].simulation.survey - local_survey_b = driver.inverse_problem.dmisfit.objfcts[1].simulation.survey - - # test locations - - np.testing.assert_array_equal( - verts[driver.sorting[0], :2], local_survey_a.receiver_locations[:, :2] - ) - np.testing.assert_array_equal( - verts[driver.sorting[1], :2], local_survey_b.receiver_locations[:, :2] - ) - assert all( - local_survey_a.receiver_locations[:, 2] == 150.0 - ) # 150 = 100 (z_from_topo) + 50 (receivers_offset_z) - assert all(local_survey_b.receiver_locations[:, 2] == 150.0) - - # test observed data - sorting = np.hstack(driver.sorting) - expected_dobs = np.column_stack( - [bxx_data.values, byy_data.values, bzz_data.values] - )[sorting].ravel() - survey_dobs = [local_survey_a.dobs, local_survey_b.dobs] - np.testing.assert_array_equal(expected_dobs, np.hstack(survey_dobs)) - - # test savegeoh5iteration data - driver.directives.directive_list[1].save_components(99, survey_dobs) - - with workspace.open(): - bxx_test = workspace.get_entity("Iteration_99_bxx")[0].values - byy_test = workspace.get_entity("Iteration_99_byy")[0].values - bzz_test = workspace.get_entity("Iteration_99_bzz")[0].values - - np.testing.assert_array_equal(bxx_test, bxx_data.values) - np.testing.assert_array_equal(byy_test, byy_data.values) - np.testing.assert_array_equal(bzz_test, bzz_data.values) - - driver.directives.directive_list[2].save_components(99, survey_dobs) - - with workspace.open(): - assert np.all( - workspace.get_entity("Iteration_99_bxx_Residual")[0].values == 0 - ), "Residual data should be zero." - assert np.all( - workspace.get_entity("Iteration_99_byy_Residual")[0].values == 0 - ), "Residual data should be zero." - assert np.all( - workspace.get_entity("Iteration_99_bzz_Residual")[0].values == 0 - ), "Residual data should be zero." - - -def test_save_data(tmp_path: Path): - ws, params = setup_params(tmp_path) - locs = params.data_object.centroids - params.update( - { - "window_center_x": np.mean(locs[:, 0]), - "window_center_y": np.mean(locs[:, 1]), - "window_width": 100.0, - "window_height": 100.0, - } - ) - data = InversionData(ws, params) - - assert len(data.entity.vertices) > 0 - - -def test_has_tensor(): - assert InversionData.check_tensor(["Gxx"]) - assert InversionData.check_tensor(["Gxy"]) - assert InversionData.check_tensor(["Gxz"]) - assert InversionData.check_tensor(["Gyy"]) - assert InversionData.check_tensor(["Gyx"]) - assert InversionData.check_tensor(["Gyz"]) - assert InversionData.check_tensor(["Gzz"]) - assert InversionData.check_tensor(["Gzx"]) - assert InversionData.check_tensor(["Gzy"]) - assert InversionData.check_tensor(["Gxx", "Gyy", "tmi"]) - assert not InversionData.check_tensor(["tmi"]) - - -def test_get_uncertainty_component(tmp_path: Path): - ws, params = setup_params(tmp_path) - locs = params.data_object.centroids - params.update( - { - "window_center_x": np.mean(locs[:, 0]), - "window_center_y": np.mean(locs[:, 1]), - "window_width": 100.0, - "window_height": 100.0, - } - ) - params.tmi_uncertainty = 1.0 - data = InversionData(ws, params) - unc = data.get_data()[2]["tmi"] - assert len(np.unique(unc)) == 1 - assert np.unique(unc)[0] == 1 - assert len(unc) == data.entity.n_vertices - - -def test_displace(tmp_path: Path): - ws, params = setup_params(tmp_path) - locs = params.data_object.centroids - params.update( - { - "window_center_x": np.mean(locs[:, 0]), - "window_center_y": np.mean(locs[:, 1]), - "window_width": 100.0, - "window_height": 100.0, - } - ) - data = InversionData(ws, params) - test_locs = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]) - test_offset = np.array([[1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 0.0, 0.0]]) - expected_locs = np.array([[2.0, 2.0, 3.0], [5.0, 5.0, 6.0], [8.0, 8.0, 9.0]]) - displaced_locs = data.displace(test_locs, test_offset) - assert np.all(displaced_locs == expected_locs) - - test_offset = np.array([[0.0, 1.0, 0.0], [0.0, 1.0, 0.0], [0.0, 1.0, 0.0]]) - expected_locs = np.array([[1.0, 3.0, 3.0], [4.0, 6.0, 6.0], [7.0, 9.0, 9.0]]) - displaced_locs = data.displace(test_locs, test_offset) - assert np.all(displaced_locs == expected_locs) - - test_offset = np.array([[0.0, 0.0, 1.0], [0.0, 0.0, 1.0], [0.0, 0.0, 1.0]]) - expected_locs = np.array([[1.0, 2.0, 4.0], [4.0, 5.0, 7.0], [7.0, 8.0, 10.0]]) - displaced_locs = data.displace(test_locs, test_offset) - assert np.all(displaced_locs == expected_locs) - - -def test_drape(tmp_path: Path): - ws, params = setup_params(tmp_path) - locs = params.data_object.centroids - params.update( - { - "window_center_x": np.mean(locs[:, 0]), - "window_center_y": np.mean(locs[:, 1]), - "window_width": 100.0, - "window_height": 100.0, - } - ) - data = InversionData(ws, params) - test_locs = np.array([[1.0, 2.0, 1.0], [2.0, 1.0, 1.0], [8.0, 9.0, 1.0]]) - radar_ch = np.array([1.0, 2.0, 3.0]) - expected_locs = np.array([[1.0, 2.0, 2.0], [2.0, 1.0, 3.0], [8.0, 9.0, 4.0]]) - draped_locs = data.drape(test_locs, radar_ch) - - assert np.all(draped_locs == expected_locs) - - -def test_normalize(tmp_path: Path): - ws, params = setup_params(tmp_path) - data = InversionData(ws, params) - len_data = len(data.observed["tmi"]) - data.observed = { - "tmi": np.arange(len_data, dtype=float), - "gz": np.arange(len_data, dtype=float), - } - data.components = list(data.observed.keys()) - data.normalizations = data.get_normalizations() - test_data = data.normalize(data.observed) - assert np.all( - np.hstack(list(data.normalizations[None].values())).tolist() - == np.repeat([1, -1], len_data) - ) - assert all(test_data["gz"] == (-1 * data.observed["gz"])) - - -def test_get_survey(tmp_path: Path): - ws, params = setup_params(tmp_path) - data = InversionData(ws, params) - survey = data.create_survey() - assert isinstance(survey[0], SimPEG.potential_fields.magnetics.Survey) diff --git a/tests/data_transfer_test.py b/tests/data_transfer_test.py index f3697c0bf..0f2fb8cdb 100644 --- a/tests/data_transfer_test.py +++ b/tests/data_transfer_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/tests/em1d_run_test.py b/tests/em1d_run_test.py index 360e61fab..ace670750 100644 --- a/tests/em1d_run_test.py +++ b/tests/em1d_run_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/tests/formatters_test.py b/tests/formatters_test.py index 9f80eafac..82d64d758 100644 --- a/tests/formatters_test.py +++ b/tests/formatters_test.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from geoapps.utils.formatters import string_name @@ -12,6 +13,6 @@ def test_string_name(): chars = "!@#$%^&*().," value = "H!e(l@l#o.W$o%r^l&d*" - assert ( - string_name(value, characters=chars) == "H_e_l_l_o_W_o_r_l_d_" - ), "string_name validator failed" + assert string_name(value, characters=chars) == "H_e_l_l_o_W_o_r_l_d_", ( + "string_name validator failed" + ) diff --git a/tests/iso_surfaces_test.py b/tests/iso_surfaces_test.py index c3bf78cf3..f73a49c34 100644 --- a/tests/iso_surfaces_test.py +++ b/tests/iso_surfaces_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -21,7 +23,7 @@ def test_centroids(tmp_path: Path): Test iso_surface with a block model. Data values are the distance from a point. """ ws = Workspace(tmp_path / "iso_test.geoh5") - + np.random.seed(0) n = 70 length = 10 @@ -102,7 +104,7 @@ def test_vertices(tmp_path: Path): Test iso_surface with a points object. Data values are the distance from a point. """ ws = Workspace(tmp_path / "iso_test.geoh5") - + np.random.seed(0) length = 10 origin = np.random.uniform(-100, 100, 3) verts = np.random.randn(5000, 3) * length + origin @@ -126,10 +128,6 @@ def test_vertices(tmp_path: Path): max_distance=np.inf, ) - # Compare surface center with sphere center - surf_center = np.mean(func_surface[0][0], axis=0) - center_error = np.abs((sphere_center - surf_center) / (sphere_center)) - # For user validation only Surface.create( ws, name="surface", vertices=func_surface[0][0], cells=func_surface[0][1] @@ -143,6 +141,10 @@ def test_vertices(tmp_path: Path): ) ws.close() + # Compare surface center with sphere center + surf_center = np.mean(func_surface[0][0], axis=0) + center_error = np.abs((sphere_center - surf_center) / (sphere_center)) + assert np.all(center_error < 0.25) # Radius of sphere @@ -150,4 +152,4 @@ def test_vertices(tmp_path: Path): surf_radius = np.mean(surf_distance, axis=0) radius_error = np.abs((surf_radius - sphere_radius) / sphere_radius) - assert radius_error < 0.05 + assert radius_error < 0.06 diff --git a/tests/locations_test.py b/tests/locations_test.py deleted file mode 100644 index 9adc6c623..000000000 --- a/tests/locations_test.py +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -import pytest -from geoh5py.objects import Grid2D, Points -from geoh5py.workspace import Workspace - -from geoapps.inversion.components.locations import InversionLocations -from geoapps.inversion.potential_fields import MagneticVectorParams -from geoapps.utils.testing import Geoh5Tester - -from . import PROJECT - -geoh5 = Workspace(PROJECT) - - -def setup_params(tmp): - geotest = Geoh5Tester(geoh5, tmp, "test.geoh5", MagneticVectorParams) - geotest.set_param("mesh", "{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}") - geotest.set_param("topography_object", "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}") - return geotest.make() - - -def test_mask(tmp_path: Path): - ws, params = setup_params(tmp_path) - locations = InversionLocations(ws, params) - loc_mask = [0, 1, 1, 0] - locations.mask = loc_mask - assert isinstance(locations.mask, np.ndarray) - assert locations.mask.dtype == bool - loc_mask = [0, 1, 2, 3] - with pytest.raises(ValueError) as excinfo: - locations.mask = loc_mask - assert "Badly formed" in str(excinfo.value) - - -def test_get_locations(tmp_path: Path): - ws, params = setup_params(tmp_path) - locs = np.ones((10, 3), dtype=float) - points_object = Points.create(ws, name="test-data", vertices=locs) - locations = InversionLocations(ws, params) - dlocs = locations.get_locations(points_object.uid) - np.testing.assert_allclose(locs, dlocs) - - xg, yg = np.meshgrid(np.arange(5) + 0.5, np.arange(5) + 0.5) - locs = np.c_[xg.ravel(), yg.ravel(), np.zeros(25)] - grid_object = Grid2D.create( - ws, - origin=[0, 0, 0], - u_cell_size=1.0, - v_cell_size=1.0, - u_count=5, - v_count=5, - rotation=0.0, - dip=0.0, - ) - dlocs = locations.get_locations(grid_object.uid) - np.testing.assert_allclose(dlocs, locs) - - -def test_filter(tmp_path: Path): - ws, params = setup_params(tmp_path) - locations = InversionLocations(ws, params) - test_data = np.array([0, 1, 2, 3, 4, 5]) - locations.mask = np.array([0, 0, 1, 1, 1, 0]) - filtered_data = locations.filter(test_data) - assert np.all(filtered_data == [2, 3, 4]) - - test_data = {"key": test_data} - filtered_data = locations.filter(test_data) - assert np.all(filtered_data["key"] == [2, 3, 4]) - - -def test_z_from_topo(tmp_path: Path): - ws, params = setup_params(tmp_path) - locations = InversionLocations(ws, params) - locs = locations.set_z_from_topo(np.array([[315674, 6070832, 0]])) - assert locs[0, 2] == 326 - - params.topography = 320.0 - locations = InversionLocations(ws, params) - locs = locations.set_z_from_topo(np.array([[315674, 6070832, 0]])) - assert locs[0, 2] == 320.0 diff --git a/tests/meshes_test.py b/tests/meshes_test.py deleted file mode 100644 index dc8f9cfcd..000000000 --- a/tests/meshes_test.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from pathlib import Path - -from discretize import TreeMesh -from geoh5py.workspace import Workspace - -from geoapps.inversion.components import ( - InversionData, - InversionMesh, - InversionTopography, -) -from geoapps.inversion.potential_fields import MagneticVectorParams -from geoapps.utils.testing import Geoh5Tester - -from . import PROJECT - -geoh5 = Workspace(PROJECT) - - -def setup_params(tmp): - geotest = Geoh5Tester(geoh5, tmp, "test.geoh5", MagneticVectorParams) - geotest.set_param("mesh", "{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}") - geotest.set_param("data_object", "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}") - geotest.set_param("topography_object", "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}") - geotest.set_param("tmi_channel", "{44822654-b6ae-45b0-8886-2d845f80f422}") - geotest.set_param("topography", "{a603a762-f6cb-4b21-afda-3160e725bf7d}") - return geotest.make() - - -def test_initialize(tmp_path: Path): - ws, params = setup_params(tmp_path) - inversion_data = InversionData(ws, params) - inversion_topography = InversionTopography(ws, params) - inversion_mesh = InversionMesh(ws, params, inversion_data, inversion_topography) - assert isinstance(inversion_mesh.mesh, TreeMesh) diff --git a/tests/models_test.py b/tests/models_test.py deleted file mode 100644 index 24b48925b..000000000 --- a/tests/models_test.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.objects import Points -from geoh5py.workspace import Workspace - -from geoapps.inversion.components import ( - InversionMesh, - InversionModel, - InversionModelCollection, -) -from geoapps.inversion.potential_fields import MagneticVectorParams -from geoapps.inversion.potential_fields.magnetic_vector.driver import ( - MagneticVectorDriver, -) -from geoapps.shared_utils.utils import rotate_xyz -from geoapps.utils.testing import Geoh5Tester - -from . import PROJECT - -geoh5 = Workspace(PROJECT) - - -def setup_params(path): - geotest = Geoh5Tester(geoh5, path, "test.geoh5", MagneticVectorParams) - geotest.set_param("data_object", "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}") - geotest.set_param("tmi_channel", "{44822654-b6ae-45b0-8886-2d845f80f422}") - geotest.set_param("mesh", "{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}") - geotest.set_param("topography_object", "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}") - geotest.set_param("topography", "{a603a762-f6cb-4b21-afda-3160e725bf7d}") - geotest.set_param("starting_model", 1e-04) - geotest.set_param("inducing_field_inclination", 79.0) - geotest.set_param("inducing_field_declination", 11.0) - geotest.set_param("reference_model", 0.0) - geotest.set_param("reference_inclination", 79.0) - geotest.set_param("reference_declination", 11.0) - - return geotest.make() - - -def test_zero_reference_model(tmp_path: Path): - ws, params = setup_params(tmp_path) - driver = MagneticVectorDriver(params) - _ = InversionModel(driver, "reference") - incl = np.unique(ws.get_entity("reference_inclination")[0].values) - decl = np.unique(ws.get_entity("reference_declination")[0].values) - assert len(incl) == 1 - assert len(decl) == 1 - assert np.isclose(incl[0], 79.0) - assert np.isclose(decl[0], 11.0) - - -def test_collection(tmp_path: Path): - _, params = setup_params(tmp_path) - driver = MagneticVectorDriver(params) - models = InversionModelCollection(driver) - models.remove_air(driver.models.active_cells) - starting = InversionModel(driver, "starting") - starting.remove_air(driver.models.active_cells) - np.testing.assert_allclose(models.starting, starting.model, atol=1e-7) - - -def test_initialize(tmp_path: Path): - _, params = setup_params(tmp_path) - driver = MagneticVectorDriver(params) - starting_model = InversionModel(driver, "starting") - assert len(starting_model.model) == 3 * driver.inversion_mesh.n_cells - assert len(np.unique(starting_model.model)) == 3 - - -def test_model_from_object(tmp_path: Path): - # Test behaviour when loading model from Points object with non-matching mesh - ws, params = setup_params(tmp_path) - driver = MagneticVectorDriver(params) - - inversion_mesh = InversionMesh( - ws, params, driver.inversion_data, driver.inversion_topography - ) - cc = inversion_mesh.mesh.cell_centers - m0 = np.array([2.0, 3.0, 1.0]) - vals = (m0[0] * cc[:, 0]) + (m0[1] * cc[:, 1]) + (m0[2] * cc[:, 2]) - - point_object = Points.create(ws, name="test_point", vertices=cc) - point_object.add_data({"test_data": {"values": vals}}) - data_object = ws.get_entity("test_data")[0] - params.lower_bound = data_object.uid - lower_bound = InversionModel(driver, "lower_bound") - nc = int(len(lower_bound.model) / 3) - A = driver.inversion_mesh.mesh.cell_centers - b = lower_bound.model[:nc] - from scipy.linalg import lstsq - - m = lstsq(A, b)[0] - np.testing.assert_array_almost_equal(m, m0, decimal=1) - - -def test_permute_2_octree(tmp_path: Path): - ws, params = setup_params(tmp_path) - driver = MagneticVectorDriver(params) - params.lower_bound = 0.0 - inversion_mesh = InversionMesh( - ws, params, driver.inversion_data, driver.inversion_topography - ) - lower_bound = InversionModel(driver, "lower_bound") - cc = inversion_mesh.mesh.cell_centers - center = np.mean(cc, axis=0) - dx = inversion_mesh.mesh.h[0].min() - dy = inversion_mesh.mesh.h[1].min() - dz = inversion_mesh.mesh.h[2].min() - xmin = center[0] - (5 * dx) - xmax = center[0] + (5 * dx) - ymin = center[1] - (5 * dy) - ymax = center[1] + (5 * dy) - zmin = center[2] - (5 * dz) - zmax = center[2] + (5 * dz) - xind = (cc[:, 0] > xmin) & (cc[:, 0] < xmax) - yind = (cc[:, 1] > ymin) & (cc[:, 1] < ymax) - zind = (cc[:, 2] > zmin) & (cc[:, 2] < zmax) - ind = xind & yind & zind - lower_bound.model[np.tile(ind, 3)] = 1 - lb_perm = lower_bound.permute_2_octree() - - locs_perm = params.mesh.centroids[lb_perm[: params.mesh.n_cells] == 1, :] - origin = [float(params.mesh.origin[k]) for k in ["x", "y", "z"]] - locs_perm_rot = rotate_xyz(locs_perm, origin, -params.mesh.rotation) - assert xmin <= locs_perm_rot[:, 0].min() - assert xmax >= locs_perm_rot[:, 0].max() - assert ymin <= locs_perm_rot[:, 1].min() - assert ymax >= locs_perm_rot[:, 1].max() - assert zmin <= locs_perm_rot[:, 2].min() - assert zmax >= locs_perm_rot[:, 2].max() - - -def test_permute_2_treemesh(tmp_path: Path): - ws, params = setup_params(tmp_path) - driver = MagneticVectorDriver(params) - cc = params.mesh.centroids - center = np.mean(cc, axis=0) - dx = params.mesh.u_cell_size.min() - dy = params.mesh.v_cell_size.min() - dz = np.abs(params.mesh.w_cell_size.min()) - xmin = center[0] - (5 * dx) - xmax = center[0] + (5 * dx) - ymin = center[1] - (5 * dy) - ymax = center[1] + (5 * dy) - zmin = center[2] - (5 * dz) - zmax = center[2] + (5 * dz) - xind = (cc[:, 0] > xmin) & (cc[:, 0] < xmax) - yind = (cc[:, 1] > ymin) & (cc[:, 1] < ymax) - zind = (cc[:, 2] > zmin) & (cc[:, 2] < zmax) - ind = xind & yind & zind - model = np.zeros(params.mesh.n_cells, dtype=float) - model[ind] = 1 - params.mesh.add_data({"test_model": {"values": model}}) - params.upper_bound = ws.get_entity("test_model")[0].uid - upper_bound = InversionModel(driver, "upper_bound") - locs = driver.inversion_mesh.mesh.cell_centers - locs = locs[upper_bound.model[: driver.inversion_mesh.mesh.nC] == 1, :] - assert xmin <= locs[:, 0].min() - assert xmax >= locs[:, 0].max() - assert ymin <= locs[:, 1].min() - assert ymax >= locs[:, 1].max() - assert zmin <= locs[:, 2].min() - assert zmax >= locs[:, 2].max() diff --git a/tests/params_test.py b/tests/params_test.py deleted file mode 100644 index 80a93ca84..000000000 --- a/tests/params_test.py +++ /dev/null @@ -1,1919 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import json -from pathlib import Path -from uuid import UUID, uuid4 - -import pytest -from geoh5py.shared.exceptions import ( - AssociationValidationError, - OptionalValidationError, - RequiredValidationError, - ShapeValidationError, - TypeValidationError, - UUIDValidationError, - ValueValidationError, -) -from geoh5py.ui_json import InputFile -from geoh5py.ui_json.utils import requires_value -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.direct_current.three_dimensions import ( - DirectCurrent3DParams, -) -from geoapps.inversion.electricals.direct_current.three_dimensions.constants import ( - app_initializer as dc_initializer, -) -from geoapps.inversion.electricals.induced_polarization.three_dimensions import ( - InducedPolarization3DParams, -) -from geoapps.inversion.electricals.induced_polarization.three_dimensions.constants import ( - app_initializer as ip_initializer, -) -from geoapps.inversion.potential_fields import ( - GravityParams, - MagneticScalarParams, - MagneticVectorParams, -) -from geoapps.inversion.potential_fields.gravity.constants import ( - app_initializer as grav_init, -) -from geoapps.inversion.potential_fields.magnetic_scalar.constants import ( - app_initializer as mag_initializer, -) -from geoapps.inversion.potential_fields.magnetic_vector.constants import ( - app_initializer as mvi_init, -) -from geoapps.octree_creation.constants import app_initializer as octree_initializer -from geoapps.octree_creation.params import OctreeParams -from geoapps.peak_finder.constants import app_initializer as peak_initializer -from geoapps.peak_finder.params import PeakFinderParams - -from . import PROJECT, PROJECT_DCIP - -# Setup -geoh5 = Workspace(PROJECT) - - -def tmp_input_file(filepath, idict): - with open(filepath, "w", encoding="utf-8") as f: - json.dump(idict, f) - - -mvi_init["geoh5"] = str(PROJECT) -mvi_params = MagneticVectorParams(**mvi_init) -mvi_params.input_file.geoh5.open() - - -def catch_invalid_generator(param, invalid_value, validation_type): - if validation_type == "value": - err = ValueValidationError - elif validation_type == "type": - err = TypeValidationError - elif validation_type == "shape": - err = ShapeValidationError - elif validation_type == "required": - err = RequiredValidationError - elif validation_type == "uuid": - err = UUIDValidationError - elif validation_type == "association": - err = AssociationValidationError - - with pytest.raises(err): - setattr(mvi_params, param, invalid_value) - - -def param_test_generator(param, value): - setattr(mvi_params, param, value) - pval = mvi_params.input_file.data[param] - if hasattr(pval, "uid"): - pval = pval.uid - - assert pval == value - - -def test_write_input_file_validation(tmp_path: Path): - grav_init["geoh5"] = str(PROJECT) - params = GravityParams(validate=False, **grav_init) - params.topography_object = None - params.validate = True - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - - assert "topography_object" in str(excinfo.value) - - -def test_params_initialize(): - for params in [ - MagneticScalarParams(), - MagneticVectorParams(), - GravityParams(), - DirectCurrent3DParams(), - InducedPolarization3DParams(), - OctreeParams(), - PeakFinderParams(), - ]: - check = [] - for k, v in params.defaults.items(): - if " " in k or k in [ - "starting_model", - "conductivity_model", - "min_value", - ]: - continue - check.append(getattr(params, k) == v) - assert all(check) - - params = MagneticVectorParams(starting_model=1.0) - assert params.starting_model == 1.0 - params = GravityParams(starting_model=1.0) - assert params.starting_model == 1.0 - params = OctreeParams(vertical_padding=500.0) - assert params.vertical_padding == 500.0 - params = PeakFinderParams(center=1000.0) - assert params.center == 1000.0 - - -def test_input_file_construction(tmp_path: Path): - params_classes = [ - GravityParams, - MagneticScalarParams, - MagneticVectorParams, - DirectCurrent3DParams, - InducedPolarization3DParams, - OctreeParams, - PeakFinderParams, - ] - - for params_class in params_classes: - filename = "test.ui.json" - for forward_only in [True, False]: - params = params_class(forward_only=forward_only) - params.write_input_file(name=filename, path=tmp_path, validate=False) - ifile = InputFile.read_ui_json(tmp_path / filename, validate=False) - params = params_class(input_file=ifile) - - check = [] - for k, v in params.defaults.items(): - # TODO Need to better handle defaults None to value - if (" " in k) or k in [ - "starting_model", - "reference_model", - "conductivity_model", - "min_value", - ]: - continue - check.append(getattr(params, k) == v) - - assert all(check) - - -def test_default_input_file(tmp_path: Path): - for params_class in [ - MagneticScalarParams, - MagneticVectorParams, - GravityParams, - DirectCurrent3DParams, - InducedPolarization3DParams, - ]: - filename = "test.ui.json" - params = params_class() - params.write_input_file(name=filename, path=tmp_path, validate=False) - ifile = InputFile.read_ui_json(tmp_path / filename, validate=False) - - # check that reads back into input file with defaults - check = [] - for k, v in ifile.data.items(): - if " " in k or requires_value(ifile.ui_json, k): - continue - check.append(v == params.defaults[k]) - assert all(check) - - # check that params constructed from_path is defaulted - params2 = params_class() - check = [] - for k, v in params2.to_dict(ui_json_format=False).items(): - if " " in k or requires_value(ifile.ui_json, k): - continue - check.append(v == ifile.data[k]) - assert all(check) - - -def test_update(): - new_params = { - "starting_model": 99.0, - } - params = MagneticVectorParams() - params.update(new_params) - assert params.starting_model == 99.0 - - -def test_chunk_validation_mvi(tmp_path: Path): - test_dict = dict(mvi_init, **{"geoh5": geoh5}) - test_dict.pop("data_object") - params = MagneticVectorParams(**test_dict) # pylint: disable=repeated-keyword - with pytest.raises(RequiredValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["Missing required parameter", "data_object"]: - assert a in str(excinfo.value) - - -def test_chunk_validation_mag(tmp_path: Path): - test_dict = dict(mag_initializer, **{"geoh5": geoh5}) - test_dict["inducing_field_strength"] = None - params = MagneticScalarParams(**test_dict) # pylint: disable=repeated-keyword - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["Cannot set a None", "inducing_field_strength"]: - assert a in str(excinfo.value) - - -def test_chunk_validation_grav(tmp_path: Path): - test_dict = dict(grav_init, **{"geoh5": geoh5}) - params = GravityParams(**test_dict) # pylint: disable=repeated-keyword - params.topography_object = None - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["Cannot set a None", "topography_object"]: - assert a in str(excinfo.value) - - -def test_chunk_validation_dc(tmp_path: Path): - with Workspace(PROJECT_DCIP) as dc_geoh5: - test_dict = dc_initializer.copy() - test_dict.update({"geoh5": dc_geoh5}) - test_dict.pop("topography_object") - params = DirectCurrent3DParams(**test_dict) # pylint: disable=repeated-keyword - - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["Cannot set a None value", "topography_object"]: - assert a in str(excinfo.value) - - -def test_chunk_validation_ip(tmp_path: Path): - with Workspace(PROJECT_DCIP) as dc_geoh5: - test_dict = ip_initializer.copy() - test_dict.update({"geoh5": dc_geoh5}) - test_dict.pop("topography_object") - params = InducedPolarization3DParams( - **test_dict - ) # pylint: disable=repeated-keyword - - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["Cannot set a None", "topography_object"]: - assert a in str(excinfo.value) - - -def test_chunk_validation_octree(tmp_path: Path): - test_dict = dict(octree_initializer, **{"geoh5": geoh5}) - test_dict.pop("objects") - params = OctreeParams(**test_dict) # pylint: disable=repeated-keyword - - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["objects"]: - assert a in str(excinfo.value) - - -def test_chunk_validation_peakfinder(tmp_path: Path): - test_dict = dict(peak_initializer, **{"geoh5": geoh5}) - test_dict.pop("data") - params = PeakFinderParams(**test_dict) # pylint: disable=repeated-keyword - - with pytest.raises(OptionalValidationError) as excinfo: - params.write_input_file(name="test.ui.json", path=tmp_path) - for a in ["data"]: - assert a in str(excinfo.value) - - -def test_active_set(): - test_dict = dict(mvi_init, **{"geoh5": geoh5}) - params = MagneticVectorParams(**test_dict) # pylint: disable=repeated-keyword - assert "inversion_type" in params.active_set() - assert "mesh" in params.active_set() - - -def test_validate_inversion_type(): - param = "inversion_type" - newval = "magnetic vector" - param_test_generator(param, newval) - catch_invalid_generator(param, "em", "value") - - -def test_validate_inducing_field_strength(): - param = "inducing_field_strength" - newval = 60000.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_inducing_field_inclination(): - param = "inducing_field_inclination" - newval = 44.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_inducing_field_declination(): - param = "inducing_field_declination" - newval = 9.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_topography_object(): - param = "topography_object" - newval = UUID("{79b719bc-d996-4f52-9af0-10aa9c7bb941}") - param_test_generator(param, newval) - catch_invalid_generator(param, True, "type") - catch_invalid_generator(param, "lsdkfj", "uuid") - catch_invalid_generator(param, "", "uuid") - - -def test_validate_topography(): - param = "topography" - mvi_params.topography_object = UUID("{ab3c2083-6ea8-4d31-9230-7aad3ec09525}") - newval = UUID("{a603a762-f6cb-4b21-afda-3160e725bf7d}") - param_test_generator(param, newval) - newval = UUID("{79b719bc-d996-4f52-9af0-10aa9c7bb941}") - catch_invalid_generator(param, newval, "association") - newval = "abc" - catch_invalid_generator(param, newval, "uuid") - - -def test_validate_data_object(): - param = "data_object" - newval = UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}") - param_test_generator(param, newval) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, 2, "type") - - -def test_validate_tmi_channel(): - param = "tmi_channel" - newval = UUID("{44822654-b6ae-45b0-8886-2d845f80f422}") - param_test_generator(param, newval) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, 4, "type") - - -def test_validate_tmi_uncertainty(): - param = "tmi_uncertainty" - param_test_generator(param, 1.0) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, {}, "type") - - -def test_validate_starting_model(): - param = "starting_model" - param_test_generator(param, 1.0) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, {}, "type") - - -def test_validate_starting_inclination(): - param = "starting_inclination" - param_test_generator(param, 1.0) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, {}, "type") - - -def test_validate_starting_declination(): - param = "starting_declination" - param_test_generator(param, 1.0) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, {}, "type") - - -def test_validate_tile_spatial(): - param = "tile_spatial" - newval = 9 - invalidval = {} - param_test_generator(param, newval) - catch_invalid_generator(param, invalidval, "type") - - -def test_validate_receivers_radar_drape(): - param = "receivers_radar_drape" - newval = UUID("{44822654-b6ae-45b0-8886-2d845f80f422}") - param_test_generator(param, newval) - newval = uuid4() - catch_invalid_generator(param, newval, "association") - catch_invalid_generator(param, {}, "type") - - -def test_validate_receivers_offset_z(): - param = "receivers_offset_z" - newval = 99.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_max_chunk_size(): - param = "max_chunk_size" - newval = 256 - param_test_generator(param, newval) - catch_invalid_generator(param, "asdf", "type") - - -def test_validate_chunk_by_rows(): - param = "chunk_by_rows" - newval = True - param_test_generator(param, newval) - catch_invalid_generator(param, "sdf", "type") - - -def test_validate_output_tile_files(): - param = "output_tile_files" - newval = True - param_test_generator(param, newval) - catch_invalid_generator(param, "sdf", "type") - - -def test_validate_mesh(): - param = "mesh" - newval = UUID("{c02e0470-0c3e-4119-8ac1-0aacba5334af}") - param_test_generator(param, newval) - catch_invalid_generator(param, {}, "type") - - -def test_validate_inversion_style(): - param = "inversion_style" - newval = "voxel" - param_test_generator(param, newval) - catch_invalid_generator(param, 123, "type") - - -def test_validate_chi_factor(): - param = "chi_factor" - newval = 0.5 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_sens_wts_threshold(): - param = "sens_wts_threshold" - newval = 0.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_every_iteration_bool(): - param = "every_iteration_bool" - newval = True - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_f_min_change(): - param = "f_min_change" - newval = 1e-3 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_beta_tol(): - param = "beta_tol" - newval = 0.2 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_prctile(): - param = "prctile" - newval = 90 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_coolingRate(): - param = "coolingRate" - newval = 3 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_coolingFactor(): - param = "coolingFactor" - newval = 4.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_coolEps_q(): - param = "coolEps_q" - newval = False - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_coolEpsFact(): - param = "coolEpsFact" - newval = 1.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_beta_search(): - param = "beta_search" - newval = True - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_starting_chi_factor(): - param = "starting_chi_factor" - newval = 2.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_max_global_iterations(): - param = "max_global_iterations" - newval = 2 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_max_irls_iterations(): - param = "max_irls_iterations" - newval = 1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_max_cg_iterations(): - param = "max_cg_iterations" - newval = 2 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_initial_beta(): - param = "initial_beta" - newval = 2.0 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_initial_beta_ratio(): - param = "initial_beta_ratio" - newval = 0.5 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_tol_cg(): - param = "tol_cg" - newval = 0.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_alpha_s(): - param = "alpha_s" - newval = 0.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_length_scale_x(): - param = "length_scale_x" - newval = 0.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_length_scale_y(): - param = "length_scale_y" - newval = 0.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_length_scale_z(): - param = "length_scale_z" - newval = 0.1 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_s_norm(): - param = "s_norm" - newval = 0.5 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_x_norm(): - param = "x_norm" - newval = 0.5 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_y_norm(): - param = "y_norm" - newval = 0.5 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_z_norm(): - param = "z_norm" - newval = 0.5 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_reference_model(): - param = "reference_model" - newval = 99.0 - param_test_generator(param, newval) - catch_invalid_generator(param, {}, "type") - - -def test_validate_reference_inclination(): - param = "reference_inclination" - newval = 99.0 - param_test_generator(param, newval) - catch_invalid_generator(param, {}, "type") - - -def test_validate_reference_declination(): - param = "reference_declination" - newval = 99.0 - param_test_generator(param, newval) - catch_invalid_generator(param, {}, "type") - - -def test_validate_gradient_type(): - param = "gradient_type" - newval = "components" - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "value") - - -def test_validate_lower_bound(): - param = "lower_bound" - newval = -1000 - param_test_generator(param, newval) - catch_invalid_generator(param, {}, "type") - - -def test_validate_upper_bound(): - param = "upper_bound" - newval = 1000 - param_test_generator(param, newval) - catch_invalid_generator(param, {}, "type") - - -def test_validate_parallelized(): - param = "parallelized" - newval = False - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -def test_validate_n_cpu(): - param = "n_cpu" - newval = 12 - param_test_generator(param, newval) - catch_invalid_generator(param, "test", "type") - - -grav_params_fwr = GravityParams( - **{ - "geoh5": str(PROJECT), - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), - }, - forward_only=True, -) -grav_params_fwr.input_file.geoh5.open() -grav_params = GravityParams( - **{ - "geoh5": str(PROJECT), - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), - }, -) -grav_params.input_file.geoh5.open() - - -def test_validate_geoh5(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params.geoh5 = 4 - - assert all( - [k in str(excinfo.value) for k in ["geoh5", "Type", "int", "str", "Workspace"]] - ) - - -def test_validate_out_group(): - param = "out_group" - newval = "test_" - with pytest.raises(UUIDValidationError, match="not a valid uuid string"): - param_test_generator(param, newval) - - -def test_validate_distributed_workers(): - param = "distributed_workers" - newval = "one, two" - param_test_generator(param, newval) - catch_invalid_generator(param, 123, "type") - - -def test_gravity_inversion_type(): - with pytest.raises(ValueValidationError) as excinfo: - grav_params.inversion_type = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["inversion_type", "alskdj", "gravity"]] - ) - - -def test_gz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gz_channel(): - with pytest.raises(AssociationValidationError): - grav_params.gz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gz_uncertainty(): - with pytest.raises(AssociationValidationError): - grav_params.gz_uncertainty = uuid4() - - grav_params.gz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_guv_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.guv_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["guv_channel_bool", "Type", "str", "bool"]] - ) - - -def test_guv_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.guv_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.guv_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["guv_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_guv_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.guv_uncertainty = uuid4() - - grav_params.guv_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.guv_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "guv_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gxy_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gxy_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gxy_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gxy_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gxy_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gxy_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gxy_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gxy_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gxy_uncertainty = uuid4() - - grav_params.gxy_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gxy_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gxy_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gxx_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gxx_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gxx_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gxx_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gxx_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gxx_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gxx_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gxx_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gxx_uncertainty = uuid4() - - grav_params.gxx_uncertainty = 4 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gxx_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gxx_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gyy_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gyy_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gyy_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gyy_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gyy_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gyy_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gyy_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gyy_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gyy_uncertainty = uuid4() - - grav_params.gyy_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gyy_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gyy_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gzz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gzz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gzz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gzz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gzz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gzz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gzz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gzz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gzz_uncertainty = uuid4() - - grav_params.gzz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gzz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gzz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gxz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gxz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gxz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gxz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gxz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gxz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gxz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gxz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gxz_uncertainty = uuid4() - - grav_params.gxz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gxz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gxz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gyz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gyz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gyz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gyz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gyz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gyz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gyz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gyz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gyz_uncertainty = uuid4() - - grav_params.gyz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gyz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gyz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gx_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gx_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gx_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gx_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gx_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gx_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gx_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gx_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gx_uncertainty = uuid4() - - grav_params.gx_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gx_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gx_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_gy_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - grav_params_fwr.gy_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["gy_channel_bool", "Type", "str", "bool"]] - ) - - -def test_gy_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gy_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gy_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["gy_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_gy_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - grav_params.gy_uncertainty = uuid4() - - grav_params.gy_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - grav_params.gy_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "gy_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -mag_params_fwr = MagneticScalarParams( - **{ - "geoh5": str(PROJECT), - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), - }, - forward_only=True, -) -mag_params = MagneticScalarParams( - **{ - "geoh5": str(PROJECT), - "data_object": UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"), - } -) -mag_params.geoh5.open() - - -def test_magnetic_scalar_inversion_type(): - with pytest.raises(ValueValidationError) as excinfo: - mag_params.inversion_type = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["inversion_type", "alskdj", "magnetic scalar"] - ] - ) - - -def test_inducing_field_strength(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params.inducing_field_strength = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["inducing_field_strength", "Type", "str", "float"] - ] - ) - - -def test_inducing_field_inclination(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params.inducing_field_inclination = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["inducing_field_inclination", "Type", "str", "float"] - ] - ) - - -def test_inducing_field_declination(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params.inducing_field_declination = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["inducing_field_declination", "Type", "str", "float"] - ] - ) - - -def test_tmi_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.tmi_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["tmi_channel_bool", "Type", "str", "bool"]] - ) - - -def test_tmi_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.tmi_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.tmi_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["tmi_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_tmi_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.tmi_uncertainty = uuid4() - - mag_params.tmi_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.tmi_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "tmi_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_bxx_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.bxx_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["bxx_channel_bool", "Type", "str", "bool"]] - ) - - -def test_bxx_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bxx_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bxx_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["bxx_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_bxx_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bxx_uncertainty = uuid4() - - mag_params.bxx_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bxx_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "bxx_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_bxy_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.bxy_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["bxy_channel_bool", "Type", "str", "bool"]] - ) - - -def test_bxy_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bxy_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bxy_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["bxy_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_bxy_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bxy_uncertainty = uuid4() - - mag_params.bxy_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bxy_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "bxy_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_bxz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.bxz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["bxz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_bxz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bxz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bxz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["bxz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_bxz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bxz_uncertainty = uuid4() - - mag_params.bxz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bxz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "bxz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_byy_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.byy_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["byy_channel_bool", "Type", "str", "bool"]] - ) - - -def test_byy_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.byy_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.byy_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["byy_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_byy_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.byy_uncertainty = uuid4() - - mag_params.byy_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.byy_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "byy_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_byz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.byz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["byz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_byz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.byz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.byz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["byz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_byz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.byz_uncertainty = uuid4() - - mag_params.byz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.byz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "byz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_bzz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.bzz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["bzz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_bzz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bzz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bzz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["bzz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_bzz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bzz_uncertainty = uuid4() - - mag_params.bzz_uncertainty = 4.0 - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bzz_uncertainty = geoh5 - assert all( - [ - s in str(excinfo.value) - for s in [ - "bzz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_bx_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.bx_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["bx_channel_bool", "Type", "str", "bool"]] - ) - - -def test_bx_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bx_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bx_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["bx_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_bx_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bx_uncertainty = uuid4() - mag_params.bx_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bx_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "bx_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_by_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.by_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["by_channel_bool", "Type", "str", "bool"]] - ) - - -def test_by_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.by_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.by_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["by_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_by_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.by_uncertainty = uuid4() - - mag_params.by_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.by_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "by_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_bz_channel_bool(): - with pytest.raises(TypeValidationError) as excinfo: - mag_params_fwr.bz_channel_bool = "alskdj" - - assert all( - [s in str(excinfo.value) for s in ["bz_channel_bool", "Type", "str", "bool"]] - ) - - -def test_bz_channel(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bz_channel = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bz_channel = 4 - - assert all( - [s in str(excinfo.value) for s in ["bz_channel", "Type", "int", "str", "UUID"]] - ) - - -def test_bz_uncertainty(): - with pytest.raises(AssociationValidationError) as excinfo: - mag_params.bz_uncertainty = uuid4() - - mag_params.bz_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - mag_params.bz_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "bz_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_direct_current_inversion_type(): - params = DirectCurrent3DParams() - params.inversion_type = "direct current 3d" - with pytest.raises(ValueValidationError) as excinfo: - params.inversion_type = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["inversion_type", "alskdj", "direct current"] - ] - ) - - -def test_direct_current_data_object(): - params = DirectCurrent3DParams() - params.data_object = uuid4() - - with pytest.raises(TypeValidationError) as excinfo: - params.data_object = 4 - - assert all( - [ - s in str(excinfo.value) - for s in ["data_object", "Type", "int", "UUID", "PotentialElectrode"] - ] - ) - - -def test_potential_channel_bool(): - params = DirectCurrent3DParams() - with pytest.raises(TypeValidationError) as excinfo: - params.potential_channel_bool = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["potential_channel_bool", "Type", "str", "bool"] - ] - ) - - -def test_potential_channel(): - params = DirectCurrent3DParams() - params.potential_channel = uuid4() - params.potential_channel = uuid4() - with pytest.raises(TypeValidationError) as excinfo: - params.potential_channel = 4 - - assert all( - [ - s in str(excinfo.value) - for s in ["potential_channel", "Type", "int", "str", "UUID"] - ] - ) - - -def test_potential_uncertainty(): - params = DirectCurrent3DParams() - params.potential_uncertainty = uuid4() - params.potential_uncertainty = uuid4() - params.potential_uncertainty = 4 - params.potential_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - params.potential_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "potential_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_induced_polarization_inversion_type(): - params = InducedPolarization3DParams() - params.inversion_type = "induced polarization 3d" - with pytest.raises(ValueValidationError) as excinfo: - params.inversion_type = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["inversion_type", "alskdj", "induced polarization"] - ] - ) - - -def test_chargeability_channel_bool(): - params = InducedPolarization3DParams() - params.chargeability_channel_bool = True - with pytest.raises(TypeValidationError) as excinfo: - params.chargeability_channel_bool = "alskdj" - - assert all( - [ - s in str(excinfo.value) - for s in ["chargeability_channel_bool", "Type", "str", "bool"] - ] - ) - - -def test_chargeability_channel(): - params = InducedPolarization3DParams() - params.chargeability_channel = uuid4() - params.chargeability_channel = uuid4() - with pytest.raises(TypeValidationError) as excinfo: - params.chargeability_channel = 4 - - assert all( - [ - s in str(excinfo.value) - for s in ["chargeability_channel", "Type", "int", "str", "UUID"] - ] - ) - - -def test_chargeability_uncertainty(): - params = InducedPolarization3DParams() - params.chargeability_uncertainty = uuid4() - params.chargeability_uncertainty = uuid4() - params.chargeability_uncertainty = 4 - params.chargeability_uncertainty = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - params.chargeability_uncertainty = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "chargeability_uncertainty", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def conductivity_model_object(): - params = InducedPolarization3DParams() - params.conductivity_model_object = uuid4() - params.conductivity_model_object = uuid4() - with pytest.raises(TypeValidationError) as excinfo: - params.conductivity_model_object = 4 - - assert all( - [ - s in str(excinfo.value) - for s in ["conductivity_model_object", "Type", "int", "str", "UUID"] - ] - ) - - -def test_conductivity_model(): - params = InducedPolarization3DParams() - params.conductivity_model = uuid4() - params.conductivity_model = uuid4() - params.conductivity_model = 4 - params.conductivity_model = 4.0 - with pytest.raises(TypeValidationError) as excinfo: - params.conductivity_model = geoh5 - - assert all( - [ - s in str(excinfo.value) - for s in [ - "conductivity_model", - "Type", - "Workspace", - "str", - "int", - "float", - "UUID", - ] - ] - ) - - -def test_isValue(tmp_path: Path): - file_name = "test.ui.json" - mesh = geoh5.get_entity("O2O_Interp_25m")[0] - mag_params.starting_model = 0.0 - mag_params.write_input_file(name=file_name, path=tmp_path, validate=False) - - with open(tmp_path / file_name, encoding="utf-8") as f: - ui = json.load(f) - - assert ui["starting_model"]["isValue"] is True, "isValue should be True" - - mag_params.starting_model = mesh.get_data("VTEM_model")[0].uid - - mag_params.write_input_file(name=file_name, path=tmp_path, validate=False) - with open(tmp_path / file_name, encoding="utf-8") as f: - ui = json.load(f) - - assert ui["starting_model"]["isValue"] is False, "isValue should be False" diff --git a/tests/preprocessing_test.py b/tests/preprocessing_test.py index 52de5564f..97b181b93 100644 --- a/tests/preprocessing_test.py +++ b/tests/preprocessing_test.py @@ -1,9 +1,12 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + import copy import numpy as np diff --git a/tests/pyproject_test.py b/tests/pyproject_test.py index 883c366b2..5749e793f 100644 --- a/tests/pyproject_test.py +++ b/tests/pyproject_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/tests/run_tests/__init__.py b/tests/run_tests/__init__.py deleted file mode 100644 index fd76a123c..000000000 --- a/tests/run_tests/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). diff --git a/tests/run_tests/apps_inversion_test.py b/tests/run_tests/apps_inversion_test.py index 70528a7b0..2e0e378e5 100644 --- a/tests/run_tests/apps_inversion_test.py +++ b/tests/run_tests/apps_inversion_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=W0212 @@ -20,22 +22,26 @@ from geoh5py.ui_json.input_file import InputFile from geoh5py.workspace import Workspace from ipywidgets import Widget - -from geoapps.inversion.electricals.application import InversionApp as DCInversionApp -from geoapps.inversion.electricals.direct_current.three_dimensions import ( +from simpeg_drivers.electricals.direct_current.three_dimensions import ( DirectCurrent3DParams, ) -from geoapps.inversion.electricals.induced_polarization.three_dimensions import ( +from simpeg_drivers.electricals.induced_polarization.three_dimensions import ( InducedPolarization3DParams, ) + +from geoapps.inversion.electricals.application import InversionApp as DCInversionApp from geoapps.inversion.electromagnetics.application import ( InversionApp as EMInversionApp, ) from geoapps.inversion.potential_fields.magnetic_vector.application import ( MagneticVectorApp, ) +from tests import ( # pylint: disable=no-name-in-module + PROJECT, + PROJECT_DCIP, + PROJECT_TEM, +) -from .. import PROJECT, PROJECT_DCIP, PROJECT_TEM # import pytest # pytest.skip("eliminating conflicting test.", allow_module_level=True) @@ -47,12 +53,12 @@ def test_mag_inversion(tmp_path: Path): with Workspace(PROJECT) as ws: with Workspace(temp_workspace) as new_geoh5: - data_object = ws.get_entity(UUID("{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}"))[ + data_object = ws.get_entity(UUID("{7aaf00be-adbf-4540-8333-8ac2c2a3c31a}"))[ 0 ] data_object.copy(parent=new_geoh5, copy_children=True) - mesh = ws.get_entity(UUID("{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}"))[0] + mesh = ws.get_entity(UUID("{f6b08e3b-9a85-45ab-a487-4700e3ca1917}"))[0] mesh.copy(parent=new_geoh5, copy_children=True) topography_object = ws.get_entity( @@ -72,7 +78,7 @@ def test_mag_inversion(tmp_path: Path): full_components = { "tmi": { "channel_bool": True, - "channel": "{44822654-b6ae-45b0-8886-2d845f80f422}", + "channel": "{a342e416-946a-4162-9604-6807ccb06073}", "uncertainty_type": "Floor", "uncertainty_floor": 1.0, "uncertainty_channel": None, @@ -181,7 +187,7 @@ def test_dc_inversion(tmp_path: Path): # dc object currents = ws.get_entity(UUID("{c2403ce5-ccfd-4d2f-9ffd-3867154cb871}"))[0] currents.copy(parent=new_geoh5) - ws.get_entity(UUID("{da109284-aa8c-4824-a647-29951109b058}"))[0].copy( + ws.get_entity(UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"))[0].copy( parent=new_geoh5 ) changes = { @@ -203,7 +209,7 @@ def test_dc_inversion(tmp_path: Path): app.write_trigger(None) app.write_trigger(None) # Check that this can run more than once - ifile = InputFile.read_ui_json(getattr(app, "_run_params").input_file.path_name) + ifile = InputFile.read_ui_json(app._run_params.input_file.path_name) params_reload = DirectCurrent3DParams(ifile) @@ -218,9 +224,9 @@ def test_dc_inversion(tmp_path: Path): for param, value in side_effects.items(): p_value = getattr(params_reload, param) p_value = p_value.uid if isinstance(p_value, Entity) else p_value - assert ( - p_value == value - ), f"Side effect parameter {param} not saved and loaded correctly." + assert p_value == value, ( + f"Side effect parameter {param} not saved and loaded correctly." + ) # Test the groups groups = [ @@ -234,15 +240,15 @@ def test_dc_inversion(tmp_path: Path): for group in groups: if "Constant" in getattr(app, "_" + group + "_group").options.options: setattr(app, group, 1.0) - assert ( - getattr(app, "_" + group + "_group").options.value == "Constant" - ), f"Property group {group} did not reset to 'Constant'" + assert getattr(app, "_" + group + "_group").options.value == "Constant", ( + f"Property group {group} did not reset to 'Constant'" + ) if "None" in getattr(app, "_" + group + "_group").options.options: setattr(app, group, None) - assert ( - getattr(app, "_" + group + "_group").options.value == "None" - ), f"Property group {group} did not reset to 'None'" + assert getattr(app, "_" + group + "_group").options.value == "None", ( + f"Property group {group} did not reset to 'None'" + ) def test_ip_inversion(tmp_path: Path): @@ -253,7 +259,7 @@ def test_ip_inversion(tmp_path: Path): 0 ].copy(parent=new_geoh5) # Conductivity mesh + model - ws.get_entity(UUID("{da109284-aa8c-4824-a647-29951109b058}"))[0].copy( + ws.get_entity(UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"))[0].copy( parent=new_geoh5 ) @@ -265,10 +271,10 @@ def test_ip_inversion(tmp_path: Path): "topography_object": new_topo.uid, "z_from_topo": False, "forward_only": False, - "mesh": UUID("{da109284-aa8c-4824-a647-29951109b058}"), + "mesh": UUID("{eab26a47-6050-4e72-bb95-bd4457b65f47}"), "inversion_type": "induced polarization 3d", "chargeability_channel": UUID("502e7256-aafa-4016-969f-5cc3a4f27315"), - "conductivity_model": UUID("d8846bc7-4c2f-4ced-bbf6-e0ebafd76826"), + "conductivity_model": UUID("a096af7c-12b1-4fd2-a95c-22611ea924c6"), } side_effects = {"starting_model": 1e-4} app = DCInversionApp(geoh5=str(PROJECT_DCIP), plot_result=False) @@ -283,7 +289,7 @@ def test_ip_inversion(tmp_path: Path): setattr(app, param, value) app.write_trigger(None) - ifile = InputFile.read_ui_json(getattr(app, "_run_params").input_file.path_name) + ifile = InputFile.read_ui_json(app._run_params.input_file.path_name) params_reload = InducedPolarization3DParams(ifile) for param, value in changes.items(): @@ -292,16 +298,16 @@ def test_ip_inversion(tmp_path: Path): if param == "chargeability_channel": assert p_value != value and is_uuid(p_value) else: - assert ( - p_value == value - ), f"Parameter {param} not saved and loaded correctly." + assert p_value == value, ( + f"Parameter {param} not saved and loaded correctly." + ) for param, value in side_effects.items(): p_value = getattr(params_reload, param) p_value = p_value.uid if isinstance(p_value, Entity) else p_value - assert ( - p_value == value - ), f"Side effect parameter {param} not saved and loaded correctly." + assert p_value == value, ( + f"Side effect parameter {param} not saved and loaded correctly." + ) groups = [ "topography", @@ -315,15 +321,15 @@ def test_ip_inversion(tmp_path: Path): for group in groups: if "Constant" in getattr(app, "_" + group + "_group").options.options: setattr(app, group, 1.0) - assert ( - getattr(app, "_" + group + "_group").options.value == "Constant" - ), f"Property group {group} did not reset to 'Constant'" + assert getattr(app, "_" + group + "_group").options.value == "Constant", ( + f"Property group {group} did not reset to 'Constant'" + ) if "None" in getattr(app, "_" + group + "_group").options.options: setattr(app, group, None) - assert ( - getattr(app, "_" + group + "_group").options.value == "None" - ), f"Property group {group} did not reset to 'None'" + assert getattr(app, "_" + group + "_group").options.value == "None", ( + f"Property group {group} did not reset to 'None'" + ) def test_em1d_inversion(tmp_path: Path): @@ -339,6 +345,15 @@ def test_em1d_inversion(tmp_path: Path): "dbdt_z_uncert" ).uid + line_id = new_obj.add_data( + { + "Line": { + "values": new_obj.parts + 1, + "type": "referenced", + "value_map": {ii + 1: f"Line{ii + 1}" for ii in range(5)}, + } + } + ) changes = { "objects": new_obj.uid, "data": data_group_uid, @@ -354,6 +369,12 @@ def test_em1d_inversion(tmp_path: Path): else: setattr(app, param, value) + for param, value in { + "data": line_id.uid, + "lines": [2, 3], + }.items(): + getattr(app.lines, param).value = value + for key, value in side_effects.items(): assert getattr(app, key).value == value, f"Failed to change {key} with {value}." diff --git a/tests/run_tests/apps_run_test.py b/tests/run_tests/apps_run_test.py index 88349e865..31c188b47 100644 --- a/tests/run_tests/apps_run_test.py +++ b/tests/run_tests/apps_run_test.py @@ -1,15 +1,18 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' # pylint: disable=protected-access from __future__ import annotations import base64 +import pathlib import uuid from pathlib import Path @@ -31,10 +34,11 @@ from geoapps.export.application import Export from geoapps.interpolation.application import DataInterpolation from geoapps.iso_surfaces.application import IsoSurface +from geoapps.peak_finder.application import PeakFinder from geoapps.triangulated_surfaces.application import Surface2D from geoapps.utils.testing import get_output_workspace +from tests import PROJECT, PROJECT_TEM -from .. import PROJECT # import pytest # pytest.skip("eliminating conflicting test.", allow_module_level=True) @@ -418,13 +422,14 @@ def test_data_interpolation(tmp_path: Path): def test_edge_detection(tmp_path: Path): - temp_workspace = tmp_path / "contour.geoh5" + temp_workspace = tmp_path / "edge_detection.geoh5" with Workspace(temp_workspace) as workspace: for uid in [ "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}", ]: new_copy = GEOH5.get_entity(uuid.UUID(uid))[0].copy(parent=workspace) - new_data = new_copy.add_data( + grid = new_copy.copy(copy_children=False) + new_data = grid.add_data( { "copy_data": { "values": new_copy.children[0].values, @@ -436,11 +441,13 @@ def test_edge_detection(tmp_path: Path): app = EdgeDetectionApp(plot_result=False) app._file_browser.reset( path=tmp_path, - filename="contour.geoh5", + filename="edge_detection.geoh5", ) app._file_browser._apply_selection() app.file_browser_change(None) + app.objects.value = grid.uid app.data.value = new_data.uid + app.compute_trigger(None) app.trigger_click(None) with Workspace(get_output_workspace(tmp_path)) as workspace: @@ -458,7 +465,21 @@ def test_edge_detection(tmp_path: Path): def test_export(): app = Export(geoh5=PROJECT) + + # Test exporting mesh + model_uid = uuid.UUID("eddc5be1-4753-4a41-99a0-c8f11a252e32") + app.objects.value = uuid.UUID("7450be38-1327-4336-a9e4-5cff587b6715") + app.data.value = [model_uid] + app.file_type.value = "UBC format" app.trigger.click() + + assert pathlib.Path( + app.export_directory.value + app.export_as.value + ".msh" + ).exists() + assert pathlib.Path( + app.export_directory.value + app.data.uid_name_map[model_uid] + ".mod" + ).exists() + # TODO write all the files types and check that appropriate files are written @@ -483,3 +504,9 @@ def test_iso_surface(tmp_path: Path): with pytest.warns(UserWarning, match="The following levels were"): app.trigger_click(None) + + +def test_peak_finder(): + app = PeakFinder(geoh5=PROJECT_TEM) + assert app.objects.value == uuid.UUID("{34698019-cde6-4b43-8d53-a040b25c989a}") + assert app.data.value == uuid.UUID("{22a9cf91-5cff-42b5-8bbb-2f1c6a559204}") diff --git a/tests/run_tests/driver_airborne_tem_test.py b/tests/run_tests/driver_airborne_tem_test.py deleted file mode 100644 index defcf41f9..000000000 --- a/tests/run_tests/driver_airborne_tem_test.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.electromagnetics.time_domain import ( - TimeDomainElectromagneticsParams, -) -from geoapps.inversion.electromagnetics.time_domain.driver import ( - TimeDomainElectromagneticsDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = { - "data_norm": 2.81018e-10, - "phi_d": 15400, - "phi_m": 718.9, -} - -np.random.seed(0) - - -def test_airborne_tem_fwr_run( - tmp_path: Path, - n_grid_points=3, - refinement=(2,), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.001, - anomaly=1.0, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - inversion_type="airborne_tem", - drape_height=10.0, - padding_distance=400.0, - flatten=False, - ) - params = TimeDomainElectromagneticsParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - x_channel_bool=True, - y_channel_bool=True, - z_channel_bool=True, - ) - params.workpath = tmp_path - fwr_driver = TimeDomainElectromagneticsDriver(params) - fwr_driver.run() - - -def test_airborne_tem_run(tmp_path: Path, max_iterations=1, pytest=True): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = ( - tmp_path.parent / "test_airborne_tem_fwr_run0" / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - survey = geoh5.get_entity("Airborne_rx")[0] - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - data = {} - uncertainties = {} - components = { - "z": "dBzdt", - } - - for comp, cname in components.items(): - data[cname] = [] - uncertainties[f"{cname} uncertainties"] = [] - for ii, _ in enumerate(survey.channels): - data_entity = geoh5.get_entity(f"Iteration_0_{comp}_[{ii}]")[0].copy( - parent=survey - ) - data[cname].append(data_entity) - - uncert = survey.add_data( - { - f"uncertainty_{comp}_[{ii}]": { - "values": np.ones_like(data_entity.values) - * (np.median(np.abs(data_entity.values))) - } - } - ) - uncertainties[f"{cname} uncertainties"].append(uncert) - - survey.add_components_data(data) - survey.add_components_data(uncertainties) - - data_kwargs = {} - for comp in components: - data_kwargs[f"{comp}_channel"] = survey.find_or_create_property_group( - name=f"Iteration_0_{comp}" - ) - data_kwargs[f"{comp}_uncertainty"] = survey.find_or_create_property_group( - name=f"dB{comp}dt uncertainties" - ) - - orig_dBzdt = geoh5.get_entity("Iteration_0_z_[0]")[0].values - - # Run the inverse - np.random.seed(0) - params = TimeDomainElectromagneticsParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - resolution=0.0, - data_object=survey.uid, - starting_model=1e-3, - reference_model=1e-3, - chi_factor=1.0, - s_norm=2.0, - x_norm=2.0, - y_norm=2.0, - z_norm=2.0, - alpha_s=1e-4, - gradient_type="total", - z_from_topo=False, - lower_bound=2e-6, - upper_bound=1e2, - max_global_iterations=max_iterations, - initial_beta_ratio=1e2, - coolingRate=4, - max_cg_iterations=200, - prctile=5, - store_sensitivities="ram", - **data_kwargs, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = TimeDomainElectromagneticsDriver.start(str(tmp_path / "Inv_run.ui.json")) - - with geoh5.open() as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_dBzdt - if pytest: - check_target(output, target_run, tolerance=0.5) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_airborne_tem_fwr_run(Path("./"), n_grid_points=5, refinement=(0, 0, 4)) - test_airborne_tem_run( - Path("./"), - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_dc_2d_test.py b/tests/run_tests/driver_dc_2d_test.py deleted file mode 100644 index 7097dc14d..000000000 --- a/tests/run_tests/driver_dc_2d_test.py +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.direct_current.two_dimensions.driver import ( - DirectCurrent2DDriver, -) -from geoapps.inversion.electricals.direct_current.two_dimensions.params import ( - DirectCurrent2DParams, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = { - "data_norm": 0.59563, - "phi_d": 1400, - "phi_m": 8.004, -} - -np.random.seed(0) - - -def test_dc_2d_fwr_run( - tmp_path: Path, - n_electrodes=10, - n_lines=3, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.01, - anomaly=10, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - inversion_type="dcip_2d", - drape_height=0.0, - flatten=False, - ) - params = DirectCurrent2DParams( - forward_only=True, - geoh5=geoh5, - u_cell_size=5.0, - v_cell_size=5.0, - depth_core=100.0, - horizontal_padding=100.0, - vertical_padding=100.0, - expansion_factor=1.1, - topography_object=topography.uid, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - line_object=geoh5.get_entity("line_ids")[0].uid, - line_id=101, - ) - params.workpath = tmp_path - fwr_driver = DirectCurrent2DDriver(params) - fwr_driver.run() - - -def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_dc_2d_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - potential = geoh5.get_entity("Iteration_0_dc")[0] - topography = geoh5.get_entity("topography")[0] - - # Run the inverse - np.random.seed(0) - params = DirectCurrent2DParams( - geoh5=geoh5, - u_cell_size=5.0, - v_cell_size=5.0, - depth_core=100.0, - horizontal_padding=100.0, - vertical_padding=100.0, - expansion_factor=1.1, - topography_object=topography.uid, - data_object=potential.parent.uid, - potential_channel=potential.uid, - potential_uncertainty=1e-3, - line_object=geoh5.get_entity("line_ids")[0].uid, - line_id=101, - starting_model=1e-2, - reference_model=1e-2, - s_norm=0.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - gradient_type="components", - potential_channel_bool=True, - z_from_topo=True, - max_global_iterations=max_iterations, - initial_beta=None, - initial_beta_ratio=1e0, - prctile=100, - upper_bound=10, - coolingRate=1, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = DirectCurrent2DDriver.start(str(tmp_path / "Inv_run.ui.json")) - - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - if geoh5.open(): - output["data"] = potential.values[np.isfinite(potential.values)] - if pytest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_dc_2d_fwr_run( - Path("./"), - n_electrodes=20, - n_lines=3, - refinement=(4, 8), - ) - test_dc_2d_run( - Path("./"), - max_iterations=20, - pytest=False, - ) diff --git a/tests/run_tests/driver_dc_p3d_test.py b/tests/run_tests/driver_dc_p3d_test.py deleted file mode 100644 index 48be340eb..000000000 --- a/tests/run_tests/driver_dc_p3d_test.py +++ /dev/null @@ -1,159 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import json -from pathlib import Path - -import numpy as np -from geoh5py.groups import SimPEGGroup -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.direct_current.pseudo_three_dimensions.driver import ( - DirectCurrentPseudo3DDriver, -) -from geoapps.inversion.electricals.direct_current.pseudo_three_dimensions.params import ( - DirectCurrentPseudo3DParams, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 1.099, "phi_d": 4150, "phi_m": 0.7511} - -np.random.seed(0) - - -def test_dc_p3d_fwr_run( - tmp_path: Path, - n_electrodes=10, - n_lines=3, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.01, - anomaly=10, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - inversion_type="dcip", - drape_height=0.0, - flatten=False, - ) - params = DirectCurrentPseudo3DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - u_cell_size=5.0, - v_cell_size=5.0, - depth_core=100.0, - expansion_factor=1.1, - padding_distance=100.0, - topography_object=topography.uid, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - line_object=geoh5.get_entity("line_ids")[0].uid, - cleanup=True, - ) - params.workpath = tmp_path - fwr_driver = DirectCurrentPseudo3DDriver(params) - fwr_driver.run() - - -def test_dc_p3d_run( - tmp_path: Path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_dc_p3d_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - potential = geoh5.get_entity("Iteration_0_dc")[0] - out_group = geoh5.get_entity("Line 1")[0].parent - mesh = out_group.get_entity("mesh")[0] # Finds the octree mesh - topography = geoh5.get_entity("topography")[0] - - # Run the inverse - np.random.seed(0) - params = DirectCurrentPseudo3DParams( - geoh5=geoh5, - mesh=mesh.uid, - u_cell_size=5.0, - v_cell_size=5.0, - depth_core=100.0, - expansion_factor=1.1, - padding_distance=100.0, - topography_object=topography.uid, - data_object=potential.parent.uid, - potential_channel=potential.uid, - potential_uncertainty=1e-3, - line_object=geoh5.get_entity("line_ids")[0].uid, - starting_model=1e-2, - reference_model=1e-2, - s_norm=0.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - gradient_type="components", - potential_channel_bool=True, - z_from_topo=False, - max_global_iterations=max_iterations, - initial_beta=None, - initial_beta_ratio=10.0, - prctile=100, - upper_bound=10, - coolingRate=1, - cleanup=False, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = DirectCurrentPseudo3DDriver.start(str(tmp_path / "Inv_run.ui.json")) - - basepath = workpath.parent - with open(basepath / "lookup.json", encoding="utf8") as f: - lookup = json.load(f) - middle_line_id = [k for k, v in lookup.items() if v["line_id"] == 101][0] - - with Workspace(basepath / f"{middle_line_id}.ui.geoh5", mode="r") as workspace: - middle_inversion_group = [ - k for k in workspace.groups if isinstance(k, SimPEGGroup) - ][0] - filedata = middle_inversion_group.get_entity("SimPEG.out")[0] - - with driver.pseudo3d_params.out_group.workspace.open(mode="r+"): - filedata.copy(parent=driver.pseudo3d_params.out_group) - - output = get_inversion_output( - driver.pseudo3d_params.geoh5.h5file, driver.pseudo3d_params.out_group.uid - ) - if geoh5.open(): - output["data"] = potential.values - if pytest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_dc_p3d_fwr_run( - Path("./"), - n_electrodes=20, - n_lines=3, - refinement=(4, 8), - ) - test_dc_p3d_run( - Path("./"), - max_iterations=20, - pytest=False, - ) diff --git a/tests/run_tests/driver_dc_test.py b/tests/run_tests/driver_dc_test.py deleted file mode 100644 index bc3cd047d..000000000 --- a/tests/run_tests/driver_dc_test.py +++ /dev/null @@ -1,183 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.direct_current.three_dimensions import ( - DirectCurrent3DParams, -) -from geoapps.inversion.electricals.direct_current.three_dimensions.driver import ( - DirectCurrent3DDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 0.15258, "phi_d": 31.85, "phi_m": 122.7} - -np.random.seed(0) - - -def test_dc_3d_fwr_run( - tmp_path: Path, - n_electrodes=4, - n_lines=3, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.01, - anomaly=10, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - drape_height=0.0, - inversion_type="dcip", - flatten=False, - ) - - # Randomly flip order of receivers - old = np.random.randint(0, survey.cells.shape[0], n_electrodes) - indices = np.ones(survey.cells.shape[0], dtype=bool) - indices[old] = False - - tx_id = np.r_[survey.ab_cell_id.values[indices], survey.ab_cell_id.values[~indices]] - cells = np.vstack([survey.cells[indices, :], survey.cells[~indices, :]]) - - survey.ab_cell_id = tx_id - survey.cells = cells - - geoh5.close() - - params = DirectCurrent3DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - resolution=None, - ) - params.workpath = tmp_path - fwr_driver = DirectCurrent3DDriver(params) - fwr_driver.run() - - -def test_dc_3d_run( - tmp_path: Path, - max_iterations=1, - pytest=True, - n_lines=3, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_dc_3d_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - potential = geoh5.get_entity("Iteration_0_dc")[0] - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - # Run the inverse - np.random.seed(0) - params = DirectCurrent3DParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - data_object=potential.parent.uid, - starting_model=1e-2, - reference_model=1e-2, - s_norm=0.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - gradient_type="components", - potential_channel_bool=True, - z_from_topo=False, - potential_channel=potential.uid, - potential_uncertainty=1e-3, - max_global_iterations=max_iterations, - initial_beta=None, - initial_beta_ratio=10.0, - prctile=100, - upper_bound=10, - tile_spatial=n_lines, - store_sensitivities="ram", - coolingRate=1, - chi_factor=0.5, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = DirectCurrent3DDriver.start(str(tmp_path / "Inv_run.ui.json")) - - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - if geoh5.open(): - output["data"] = potential.values - if pytest: - check_target(output, target_run) - - -def test_dc_single_line_fwr_run( - tmp_path: Path, - n_electrodes=4, - n_lines=1, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.01, - anomaly=10, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - drape_height=0.0, - inversion_type="dcip", - flatten=False, - ) - params = DirectCurrent3DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - resolution=None, - ) - params.workpath = tmp_path - fwr_driver = DirectCurrent3DDriver(params) - assert np.all(fwr_driver.window.window["size"] > 0) - - -if __name__ == "__main__": - # Full run - - test_dc_3d_fwr_run( - Path("./"), - n_electrodes=20, - n_lines=5, - refinement=(4, 8), - ) - - test_dc_3d_run( - Path("./"), - n_lines=5, - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_fem_test.py b/tests/run_tests/driver_fem_test.py deleted file mode 100644 index e8ddc6153..000000000 --- a/tests/run_tests/driver_fem_test.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# pylint: disable=too-many-locals - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py import Workspace - -from geoapps.inversion.electromagnetics.frequency_domain.driver import ( - FrequencyDomainElectromagneticsDriver, -) -from geoapps.inversion.electromagnetics.frequency_domain.params import ( - FrequencyDomainElectromagneticsParams, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 47.522882323952054, "phi_d": 364.3, "phi_m": 443.3} -np.random.seed(0) - - -def test_fem_fwr_run( - tmp_path: Path, - n_grid_points=3, - refinement=(2,), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=1e-3, - anomaly=1.0, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - drape_height=15.0, - padding_distance=400, - inversion_type="fem", - flatten=True, - ) - params = FrequencyDomainElectromagneticsParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - z_real_channel_bool=True, - z_imag_channel_bool=True, - ) - params.workpath = tmp_path - fwr_driver = FrequencyDomainElectromagneticsDriver(params) - fwr_driver.run() - geoh5.close() - - -def test_fem_run(tmp_path: Path, max_iterations=1, pytest=True): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_fem_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - survey = geoh5.get_entity("Airborne_rx")[0].copy(copy_children=False) - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - data = {} - uncertainties = {} - components = { - "z_real": "z_real", - "z_imag": "z_imag", - } - - for comp, cname in components.items(): - data[cname] = [] - uncertainties[f"{cname} uncertainties"] = [] - for ind, freq in enumerate(survey.channels): - data_entity = geoh5.get_entity(f"Iteration_0_{comp}_[{ind}]")[0].copy( - parent=survey - ) - data[cname].append(data_entity) - abs_val = np.abs(data_entity.values) - uncert = survey.add_data( - { - f"uncertainty_{comp}_[{ind}]": { - "values": np.ones_like(abs_val) - * freq - / 200.0 # * 2**(np.abs(ind-1)) - } - } - ) - uncertainties[f"{cname} uncertainties"].append( - uncert.copy(parent=survey) - ) - - data_groups = survey.add_components_data(data) - uncert_groups = survey.add_components_data(uncertainties) - - data_kwargs = {} - for comp, data_group, uncert_group in zip( - components, data_groups, uncert_groups - ): - data_kwargs[f"{comp}_channel"] = data_group.uid - data_kwargs[f"{comp}_uncertainty"] = uncert_group.uid - - orig_z_real_1 = geoh5.get_entity("Iteration_0_z_real_[0]")[0].values - - # Run the inverse - np.random.seed(0) - params = FrequencyDomainElectromagneticsParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - resolution=0.0, - data_object=survey.uid, - starting_model=1e-3, - reference_model=1e-3, - alpha_s=0.0, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, - gradient_type="components", - z_from_topo=False, - upper_bound=0.75, - max_global_iterations=max_iterations, - initial_beta_ratio=1e1, - prctile=100, - coolingRate=3, - chi_factor=0.25, - store_sensitivities="ram", - sens_wts_threshold=1.0, - **data_kwargs, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - driver = FrequencyDomainElectromagneticsDriver(params) - driver.run() - - with geoh5.open() as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_z_real_1 - - assert ( - run_ws.get_entity("Iteration_1_z_imag_[1]")[0].entity_type.uid - == run_ws.get_entity("Observed_z_imag_[1]")[0].entity_type.uid - ) - - if pytest: - check_target(output, target_run, tolerance=0.5) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_fem_fwr_run(Path("./"), n_grid_points=5, refinement=(4, 4, 4)) - test_fem_run( - Path("./"), - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_grav_test.py b/tests/run_tests/driver_grav_test.py deleted file mode 100644 index cee007793..000000000 --- a/tests/run_tests/driver_grav_test.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.potential_fields import GravityParams -from geoapps.inversion.potential_fields.gravity.driver import GravityDriver -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 0.0028055269276044915, "phi_d": 4.475e-05, "phi_m": 0.00144} - - -def test_gravity_fwr_run( - tmp_path: Path, - n_grid_points=2, - refinement=(2,), -): - np.random.seed(0) - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.75, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - flatten=False, - ) - params = GravityParams( - forward_only=True, - geoh5=Path(geoh5.h5file), - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - ) - fwr_driver = GravityDriver(params) - fwr_driver.run() - - -def test_gravity_run( - tmp_path: Path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_gravity_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - gz = geoh5.get_entity("Iteration_0_gz")[0] - orig_gz = gz.values.copy() - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - # Turn some values to nan - values = gz.values.copy() - values[0] = np.nan - gz.values = values - - # Run the inverse - np.random.seed(0) - params = GravityParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - resolution=0.0, - data_object=gz.parent.uid, - starting_model=1e-4, - reference_model=0.0, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, - gradient_type="components", - gz_channel_bool=True, - z_from_topo=False, - gz_channel=gz.uid, - gz_uncertainty=2e-3, - lower_bound=0.0, - max_global_iterations=max_iterations, - initial_beta_ratio=1e-2, - prctile=100, - store_sensitivities="ram", - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = GravityDriver.start(str(tmp_path / "Inv_run.ui.json")) - - assert driver.params.data_object.uid != gz.parent.uid - assert driver.models.upper_bound is np.inf - - with Workspace(driver.params.geoh5.h5file) as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - - residual = run_ws.get_entity("Iteration_1_gz_Residual")[0] - assert np.isnan(residual.values).sum() == 1, "Number of nan residuals differ." - - predicted = [ - pred - for pred in run_ws.get_entity("Iteration_0_gz") - if pred.parent.parent.name == "Gravity Inversion" - ][0] - assert not any( - np.isnan(predicted.values) - ), "Predicted data should not have nans." - output["data"] = orig_gz - - assert len(run_ws.get_entity("SimPEG.log")) == 2 - - if pytest: - check_target(output, target_run) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_gravity_fwr_run( - Path("./"), - n_grid_points=20, - refinement=(4, 8), - ) - - test_gravity_run( - Path("./"), - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_ground_tem_test.py b/tests/run_tests/driver_ground_tem_test.py deleted file mode 100644 index 740bcfd7a..000000000 --- a/tests/run_tests/driver_ground_tem_test.py +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.electromagnetics.time_domain import ( - TimeDomainElectromagneticsParams, -) -from geoapps.inversion.electromagnetics.time_domain.driver import ( - TimeDomainElectromagneticsDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = { - "data_norm": 5.95181e-7, - "phi_d": 53.94, - "phi_m": 241.1, -} - -np.random.seed(0) - - -def test_ground_tem_fwr_run( - tmp_path: Path, - n_grid_points=4, - refinement=(2,), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.001, - anomaly=1.0, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - inversion_type="ground_tem", - drape_height=5.0, - padding_distance=1000.0, - flatten=True, - ) - params = TimeDomainElectromagneticsParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - x_channel_bool=True, - y_channel_bool=True, - z_channel_bool=True, - ) - params.workpath = tmp_path - fwr_driver = TimeDomainElectromagneticsDriver(params) - fwr_driver.run() - - -def test_ground_tem_run(tmp_path: Path, max_iterations=1, pytest=True): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = ( - tmp_path.parent / "test_ground_tem_fwr_run0" / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - simpeg_group = geoh5.get_entity("Tdem Forward")[0] - survey = simpeg_group.get_entity("Ground TEM Rx")[0] - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - data = {} - uncertainties = {} - components = { - "z": "dBzdt", - } - - for comp, cname in components.items(): - data[cname] = [] - uncertainties[f"{cname} uncertainties"] = [] - for ii, _ in enumerate(survey.channels): - data_entity = geoh5.get_entity(f"Iteration_0_{comp}_[{ii}]")[0].copy( - parent=survey - ) - data[cname].append(data_entity) - - uncert = survey.add_data( - { - f"uncertainty_{comp}_[{ii}]": { - "values": np.ones_like(data_entity.values) - * np.median(np.abs(data_entity.values)) - / 2.0 - } - } - ) - uncertainties[f"{cname} uncertainties"].append(uncert) - - survey.add_components_data(data) - survey.add_components_data(uncertainties) - - data_kwargs = {} - for comp in components: - data_kwargs[f"{comp}_channel"] = survey.find_or_create_property_group( - name=f"Iteration_0_{comp}" - ) - data_kwargs[f"{comp}_uncertainty"] = survey.find_or_create_property_group( - name=f"dB{comp}dt uncertainties" - ) - - orig_dBzdt = geoh5.get_entity("Iteration_0_z_[0]")[0].values - - # Run the inverse - np.random.seed(0) - params = TimeDomainElectromagneticsParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - resolution=0.0, - data_object=survey.uid, - starting_model=1e-3, - reference_model=1e-3, - chi_factor=0.1, - s_norm=2.0, - x_norm=2.0, - y_norm=2.0, - z_norm=2.0, - alpha_s=0e-1, - gradient_type="total", - z_from_topo=False, - lower_bound=2e-6, - upper_bound=1e2, - max_global_iterations=max_iterations, - initial_beta_ratio=1e1, - coolingRate=2, - max_cg_iterations=200, - prctile=100, - # sens_wts_threshold=1., - store_sensitivities="ram", - **data_kwargs, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = TimeDomainElectromagneticsDriver.start(str(tmp_path / "Inv_run.ui.json")) - - with geoh5.open() as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_dBzdt - if pytest: - check_target(output, target_run, tolerance=0.5) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_ground_tem_fwr_run(Path("./"), n_grid_points=5, refinement=(2, 2, 2)) - test_ground_tem_run( - Path("./"), - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_ip_2d_test.py b/tests/run_tests/driver_ip_2d_test.py deleted file mode 100644 index 550525d6a..000000000 --- a/tests/run_tests/driver_ip_2d_test.py +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.induced_polarization.two_dimensions import ( - InducedPolarization2DParams, -) -from geoapps.inversion.electricals.induced_polarization.two_dimensions.driver import ( - InducedPolarization2DDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = { - "data_norm": 0.09141, - "phi_d": 9934, - "phi_m": 0.08341, -} - -np.random.seed(0) - - -def test_ip_2d_fwr_run( - tmp_path: Path, - n_electrodes=10, - n_lines=3, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=1e-6, - anomaly=1e-1, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - inversion_type="dcip_2d", - flatten=False, - drape_height=0.0, - ) - params = InducedPolarization2DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - z_from_topo=True, - data_object=survey.uid, - starting_model=model.uid, - conductivity_model=1e-2, - line_object=geoh5.get_entity("line_ids")[0].uid, - line_id=101, - ) - params.workpath = tmp_path - fwr_driver = InducedPolarization2DDriver(params) - fwr_driver.run() - - -def test_ip_2d_run( - tmp_path: Path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_ip_2d_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - chargeability = geoh5.get_entity("Iteration_0_ip")[0] - mesh = geoh5.get_entity("Models")[0] - topography = geoh5.get_entity("topography")[0] - # Run the inverse - np.random.seed(0) - params = InducedPolarization2DParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - data_object=chargeability.parent.uid, - chargeability_channel=chargeability.uid, - chargeability_uncertainty=2e-4, - line_object=geoh5.get_entity("line_ids")[0].uid, - line_id=101, - starting_model=1e-6, - reference_model=1e-6, - conductivity_model=1e-2, - s_norm=0.0, - x_norm=0.0, - z_norm=0.0, - gradient_type="components", - chargeability_channel_bool=True, - z_from_topo=True, - max_global_iterations=max_iterations, - initial_beta=None, - initial_beta_ratio=1e0, - prctile=100, - upper_bound=0.1, - store_sensitivities="ram", - coolingRate=1, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = InducedPolarization2DDriver.start(str(tmp_path / "Inv_run.ui.json")) - - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - if geoh5.open(): - output["data"] = chargeability.values[np.isfinite(chargeability.values)] - if pytest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_ip_2d_fwr_run( - Path("./"), - n_electrodes=20, - n_lines=3, - refinement=(4, 8), - ) - test_ip_2d_run( - Path("./"), - max_iterations=20, - pytest=False, - ) diff --git a/tests/run_tests/driver_ip_p3d_test.py b/tests/run_tests/driver_ip_p3d_test.py deleted file mode 100644 index 67b24f0fd..000000000 --- a/tests/run_tests/driver_ip_p3d_test.py +++ /dev/null @@ -1,166 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -import json -from pathlib import Path - -import numpy as np -from geoh5py.groups import SimPEGGroup -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.induced_polarization.pseudo_three_dimensions.driver import ( - InducedPolarizationPseudo3DDriver, -) -from geoapps.inversion.electricals.induced_polarization.pseudo_three_dimensions.params import ( - InducedPolarizationPseudo3DParams, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = { - "data_norm": 0.08768, - "phi_d": 8239, - "phi_m": 0.1178, -} - -np.random.seed(0) - - -def test_ip_p3d_fwr_run( - tmp_path: Path, - n_electrodes=10, - n_lines=3, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=1e-6, - anomaly=1e-1, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - inversion_type="dcip", - drape_height=0.0, - flatten=False, - ) - - params = InducedPolarizationPseudo3DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - u_cell_size=5.0, - v_cell_size=5.0, - depth_core=100.0, - expansion_factor=1.1, - padding_distance=100.0, - topography_object=topography.uid, - z_from_topo=True, - data_object=survey.uid, - conductivity_model=1e-2, - starting_model=model.uid, - line_object=geoh5.get_entity("line_ids")[0].uid, - cleanup=True, - ) - params.workpath = tmp_path - fwr_driver = InducedPolarizationPseudo3DDriver(params) - fwr_driver.run() - - -def test_ip_p3d_run( - tmp_path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_ip_p3d_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - chargeability = geoh5.get_entity("Iteration_0_ip")[0] - out_group = geoh5.get_entity("Line 1")[0].parent - mesh = out_group.get_entity("mesh")[0] # Finds the octree mesh - topography = geoh5.get_entity("topography")[0] - - # Run the inverse - np.random.seed(0) - params = InducedPolarizationPseudo3DParams( - geoh5=geoh5, - mesh=mesh.uid, - u_cell_size=5.0, - v_cell_size=5.0, - depth_core=100.0, - expansion_factor=1.1, - padding_distance=100.0, - topography_object=topography.uid, - data_object=chargeability.parent.uid, - chargeability_channel=chargeability.uid, - chargeability_uncertainty=2e-4, - line_object=geoh5.get_entity("line_ids")[0].uid, - conductivity_model=1e-2, - starting_model=1e-6, - reference_model=1e-6, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, - gradient_type="components", - chargeability_channel_bool=True, - z_from_topo=True, - max_global_iterations=max_iterations, - initial_beta=None, - initial_beta_ratio=1e0, - prctile=100, - upper_bound=0.1, - coolingRate=1, - cleanup=False, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = InducedPolarizationPseudo3DDriver.start(str(tmp_path / "Inv_run.ui.json")) - - basepath = workpath.parent - with open(basepath / "lookup.json", encoding="utf8") as f: - lookup = json.load(f) - middle_line_id = [k for k, v in lookup.items() if v["line_id"] == 101][0] - - with Workspace(basepath / f"{middle_line_id}.ui.geoh5", mode="r") as workspace: - middle_inversion_group = [ - k for k in workspace.groups if isinstance(k, SimPEGGroup) - ][0] - filedata = middle_inversion_group.get_entity("SimPEG.out")[0] - - with driver.pseudo3d_params.out_group.workspace.open(mode="r+"): - filedata.copy(parent=driver.pseudo3d_params.out_group) - - output = get_inversion_output( - driver.pseudo3d_params.geoh5.h5file, driver.pseudo3d_params.out_group.uid - ) - if geoh5.open(): - output["data"] = chargeability.values - if pytest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_ip_p3d_fwr_run( - Path("./"), - n_electrodes=20, - n_lines=3, - refinement=(4, 8), - ) - test_ip_p3d_run( - Path("./"), - max_iterations=20, - pytest=False, - ) diff --git a/tests/run_tests/driver_ip_test.py b/tests/run_tests/driver_ip_test.py deleted file mode 100644 index 811366220..000000000 --- a/tests/run_tests/driver_ip_test.py +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.induced_polarization.three_dimensions import ( - InducedPolarization3DParams, -) -from geoapps.inversion.electricals.induced_polarization.three_dimensions.driver import ( - InducedPolarization3DDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 0.008494, "phi_d": 1.734, "phi_m": 0.3202} - -np.random.seed(0) - - -def test_ip_3d_fwr_run( - tmp_path: Path, - n_electrodes=4, - n_lines=3, - refinement=(4, 6), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=1e-6, - anomaly=1e-1, - n_electrodes=n_electrodes, - n_lines=n_lines, - refinement=refinement, - drape_height=0.0, - inversion_type="dcip", - flatten=False, - ) - params = InducedPolarization3DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - z_from_topo=True, - data_object=survey.uid, - starting_model=model.uid, - conductivity_model=1e-2, - ) - params.workpath = tmp_path - fwr_driver = InducedPolarization3DDriver(params) - fwr_driver.run() - - -def test_ip_3d_run( - tmp_path: Path, - max_iterations=1, - pytest=True, - n_lines=3, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_ip_3d_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - potential = geoh5.get_entity("Iteration_0_ip")[0] - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - # Run the inverse - np.random.seed(0) - params = InducedPolarization3DParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - data_object=potential.parent.uid, - conductivity_model=1e-2, - reference_model=1e-6, - starting_model=1e-6, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, - gradient_type="components", - chargeability_channel_bool=True, - z_from_topo=False, - chargeability_channel=potential.uid, - chargeability_uncertainty=2e-4, - max_global_iterations=max_iterations, - initial_beta=None, - initial_beta_ratio=1e0, - prctile=100, - upper_bound=0.1, - tile_spatial=n_lines, - store_sensitivities="ram", - coolingRate=1, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - driver = InducedPolarization3DDriver.start(str(tmp_path / "Inv_run.ui.json")) - - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - if geoh5.open(): - output["data"] = potential.values - if pytest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_ip_3d_fwr_run( - Path("./"), - n_electrodes=20, - n_lines=5, - refinement=(4, 8), - ) - test_ip_3d_run( - Path("./"), - n_lines=5, - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py deleted file mode 100644 index c6ef65c0e..000000000 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ /dev/null @@ -1,250 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -from pathlib import Path - -import numpy as np -from geoh5py.data import FloatData -from geoh5py.groups import SimPEGGroup -from geoh5py.workspace import Workspace - -from geoapps.inversion.electricals.direct_current.three_dimensions import ( - DirectCurrent3DParams, -) -from geoapps.inversion.electricals.direct_current.three_dimensions.driver import ( - DirectCurrent3DDriver, -) -from geoapps.inversion.joint.joint_cross_gradient import JointCrossGradientParams -from geoapps.inversion.joint.joint_cross_gradient.driver import JointCrossGradientDriver -from geoapps.inversion.potential_fields import GravityParams, MagneticVectorParams -from geoapps.inversion.potential_fields.gravity.driver import GravityDriver -from geoapps.inversion.potential_fields.magnetic_vector.driver import ( - MagneticVectorDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 51.20763877051509, "phi_d": 1028, "phi_m": 0.10} - - -def test_joint_cross_gradient_fwr_run( - tmp_path, - n_grid_points=4, - refinement=(2,), -): - np.random.seed(0) - # Create local problem A - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.75, - refinement=refinement, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - ) - params = GravityParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - ) - fwr_driver_a = GravityDriver(params) - - _, _, model, survey, _ = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.05, - refinement=refinement, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - flatten=False, - ) - inducing_field = (50000.0, 90.0, 0.0) - params = MagneticVectorParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - inducing_field_strength=inducing_field[0], - inducing_field_inclination=inducing_field[1], - inducing_field_declination=inducing_field[2], - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - ) - params.workpath = tmp_path - fwr_driver_b = MagneticVectorDriver(params) - - _, _, model, survey, _ = setup_inversion_workspace( - tmp_path, - background=0.01, - anomaly=10, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - drape_height=0.0, - inversion_type="dcip", - flatten=False, - ) - params = DirectCurrent3DParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - data_object=survey.uid, - starting_model=model.uid, - ) - fwr_driver_c = DirectCurrent3DDriver(params) - fwr_driver_c.inversion_data.entity.name = "survey" - - # Force co-location of meshes - for driver in [fwr_driver_b, fwr_driver_c]: - driver.inversion_mesh.entity.origin = fwr_driver_a.inversion_mesh.entity.origin - driver.workspace.update_attribute(driver.inversion_mesh.entity, "attributes") - driver.inversion_mesh._mesh = None # pylint: disable=protected-access - - fwr_driver_a.run() - fwr_driver_b.run() - fwr_driver_c.run() - - -def test_joint_cross_gradient_inv_run( - tmp_path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = ( - tmp_path.parent - / "test_joint_cross_gradient_fwr_0" - / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - topography = geoh5.get_entity("topography")[0] - drivers = [] - orig_data = [] - - for group_name in [ - "Gravity Forward", - "Magnetic vector Forward", - "Direct current 3d Forward", - ]: - group = geoh5.get_entity(group_name)[0] - - if not isinstance(group, SimPEGGroup): - continue - - mesh = group.get_entity("mesh")[0] - survey = group.get_entity("survey")[0] - - for child in survey.children: - if isinstance(child, FloatData): - data = child - - orig_data.append(data.values) - - if group.options["inversion_type"] == "gravity": - params = GravityParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - data_object=survey.uid, - gz_channel=data.uid, - gz_uncertainty=1e-3, - starting_model=0.0, - ) - drivers.append(GravityDriver(params)) - elif group.options["inversion_type"] == "direct current 3d": - params = DirectCurrent3DParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - data_object=survey.uid, - potential_channel=data.uid, - potential_uncertainty=1e-3, - tile_spatial=1, - starting_model=1e-2, - reference_model=1e-2, - ) - drivers.append(DirectCurrent3DDriver(params)) - else: - params = MagneticVectorParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - inducing_field_strength=group.options["inducing_field_strength"][ - "value" - ], - inducing_field_inclination=group.options[ - "inducing_field_inclination" - ]["value"], - inducing_field_declination=group.options[ - "inducing_field_declination" - ]["value"], - data_object=survey.uid, - starting_model=1e-4, - reference_model=0.0, - tile_spatial=2, - tmi_channel=data.uid, - tmi_uncertainty=2.0, - ) - drivers.append(MagneticVectorDriver(params)) - - # Run the inverse - np.random.seed(0) - joint_params = JointCrossGradientParams( - geoh5=geoh5, - topography_object=topography.uid, - group_a=drivers[0].params.out_group, - group_b=drivers[1].params.out_group, - group_c=drivers[2].params.out_group, - max_global_iterations=max_iterations, - initial_beta_ratio=1e0, - cross_gradient_weight_a_b=1e3, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, - gradient_type="components", - prctile=100, - store_sensitivities="ram", - ) - - driver = JointCrossGradientDriver(joint_params) - driver.run() - - with Workspace(driver.params.geoh5.h5file): - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - - output["data"] = np.hstack(orig_data) - if pytest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_joint_cross_gradient_fwr_run( - Path("./"), - n_grid_points=20, - refinement=(4, 8), - ) - test_joint_cross_gradient_inv_run( - Path("./"), - max_iterations=20, - pytest=False, - ) diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py deleted file mode 100644 index 2af1562c4..000000000 --- a/tests/run_tests/driver_joint_surveys_test.py +++ /dev/null @@ -1,175 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -from pathlib import Path - -import numpy as np -from geoh5py.objects import Octree -from geoh5py.workspace import Workspace - -from geoapps.inversion.joint.joint_surveys import JointSurveysParams -from geoapps.inversion.joint.joint_surveys.driver import JointSurveyDriver -from geoapps.inversion.potential_fields import GravityParams -from geoapps.inversion.potential_fields.gravity.driver import GravityDriver -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 0.2997791602206556, "phi_d": 705.5, "phi_m": 36.17} - - -def test_joint_surveys_fwr_run( - tmp_path, - n_grid_points=6, - refinement=(2,), -): - np.random.seed(0) - # Create local problem A - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.75, - refinement=refinement, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - ) - params = GravityParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - ) - fwr_driver_a = GravityDriver(params) - fwr_driver_a.out_group.name = "Gravity Forward [0]" - - # Create local problem B - _, _, model, survey, _ = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.75, - refinement=[0, 2], - n_electrodes=int(n_grid_points / 2), - n_lines=int(n_grid_points / 2), - flatten=False, - geoh5=geoh5, - drape_height=10.0, - ) - params = GravityParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - ) - fwr_driver_b = GravityDriver(params) - fwr_driver_b.out_group.name = "Gravity Forward [1]" - - # Force co-location of meshes - fwr_driver_b.inversion_mesh.entity.origin = ( - fwr_driver_a.inversion_mesh.entity.origin - ) - fwr_driver_b.workspace.update_attribute( - fwr_driver_b.inversion_mesh.entity, "attributes" - ) - fwr_driver_b.inversion_mesh._mesh = None # pylint: disable=protected-access - fwr_driver_a.run() - fwr_driver_b.run() - geoh5.close() - - -def test_joint_surveys_inv_run( - tmp_path, - max_iterations=1, - unittest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if unittest: - workpath = ( - tmp_path.parent / "test_joint_surveys_fwr_run0" / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - topography = geoh5.get_entity("topography")[0] - drivers = [] - orig_data = [] - for ind in range(2): - group = geoh5.get_entity(f"Gravity Forward [{ind}]")[0] - survey = geoh5.get_entity(group.options["data_object"]["value"])[0] - for child in group.children: - if isinstance(child, Octree): - mesh = child - else: - survey = child - - gz = survey.get_data("Iteration_0_gz")[0] - orig_data.append(gz.values) - params = GravityParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - data_object=survey.uid, - gz_channel=gz.uid, - gz_uncertainty=np.var(gz.values) * 2.0, - starting_model=0.0, - ) - drivers.append(GravityDriver(params)) - - # Run the inverse - np.random.seed(0) - joint_params = JointSurveysParams( - geoh5=geoh5, - topography_object=topography.uid, - mesh=drivers[0].params.mesh, - group_a=drivers[0].params.out_group, - group_b=drivers[1].params.out_group, - starting_model=1e-4, - reference_model=0.0, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, - gradient_type="components", - lower_bound=0.0, - max_global_iterations=max_iterations, - initial_beta_ratio=1e-2, - prctile=100, - store_sensitivities="ram", - ) - - driver = JointSurveyDriver(joint_params) - driver.run() - - with Workspace(driver.params.geoh5.h5file): - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = np.hstack(orig_data) - - if unittest: - check_target(output, target_run) - - -if __name__ == "__main__": - # Full run - test_joint_surveys_fwr_run( - Path("./"), - n_grid_points=20, - refinement=(4, 8), - ) - test_joint_surveys_inv_run( - Path("./"), - max_iterations=20, - unittest=False, - ) diff --git a/tests/run_tests/driver_mag_test.py b/tests/run_tests/driver_mag_test.py deleted file mode 100644 index 5ad28ee20..000000000 --- a/tests/run_tests/driver_mag_test.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.potential_fields import MagneticScalarParams -from geoapps.inversion.potential_fields.magnetic_scalar.driver import ( - MagneticScalarDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 8.71227951689941, "phi_d": 18.42, "phi_m": 2.981e-06} - - -def test_susceptibility_fwr_run( - tmp_path: Path, - n_grid_points=2, - refinement=(2,), -): - np.random.seed(0) - inducing_field = (49999.8, 90.0, 0.0) - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.05, - refinement=refinement, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - flatten=False, - ) - params = MagneticScalarParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - inducing_field_strength=inducing_field[0], - inducing_field_inclination=inducing_field[1], - inducing_field_declination=inducing_field[2], - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - ) - params.workpath = tmp_path - fwr_driver = MagneticScalarDriver(params) - fwr_driver.run() - - assert fwr_driver.inversion_data.survey.source_field.amplitude == inducing_field[0] - - assert params.out_group.options, "Error adding metadata on creation." - - -def test_susceptibility_run( - tmp_path: Path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = ( - tmp_path.parent / "test_susceptibility_fwr_run0" / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - tmi = geoh5.get_entity("Iteration_0_tmi")[0] - orig_tmi = tmi.values.copy() - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - inducing_field = (50000.0, 90.0, 0.0) - - # Run the inverse - np.random.seed(0) - params = MagneticScalarParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - inducing_field_strength=inducing_field[0], - inducing_field_inclination=inducing_field[1], - inducing_field_declination=inducing_field[2], - resolution=0.0, - data_object=tmi.parent.uid, - starting_model=1e-4, - reference_model=0.0, - s_norm=0.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - gradient_type="components", - lower_bound=0.0, - tmi_channel_bool=True, - z_from_topo=False, - tmi_channel=tmi.uid, - tmi_uncertainty=1.0, - max_global_iterations=max_iterations, - store_sensitivities="ram", - ) - params.write_input_file(path=tmp_path, name="Inv_run") - - driver = MagneticScalarDriver.start(str(tmp_path / "Inv_run.ui.json")) - - with Workspace(driver.params.geoh5.h5file) as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_tmi - assert ( - run_ws.get_entity("Iteration_1_tmi")[0].entity_type.uid - == run_ws.get_entity("Observed_tmi")[0].entity_type.uid - ) - - if pytest: - check_target(output, target_run) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_susceptibility_fwr_run(Path("./"), n_grid_points=20, refinement=(4, 8)) - test_susceptibility_run(Path("./"), max_iterations=30, pytest=False) diff --git a/tests/run_tests/driver_mt_test.py b/tests/run_tests/driver_mt_test.py deleted file mode 100644 index da9bad54d..000000000 --- a/tests/run_tests/driver_mt_test.py +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). -# pylint: disable=too-many-locals - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.natural_sources.magnetotellurics.driver import ( - MagnetotelluricsDriver, -) -from geoapps.inversion.natural_sources.magnetotellurics.params import ( - MagnetotelluricsParams, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 0.003936832660650801, "phi_d": 1.099, "phi_m": 2.774} -np.random.seed(0) - - -def test_magnetotellurics_fwr_run( - tmp_path: Path, - n_grid_points=2, - refinement=(2,), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=0.01, - anomaly=1.0, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - drape_height=0.0, - inversion_type="magnetotellurics", - flatten=False, - ) - params = MagnetotelluricsParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - conductivity_model=1e-2, - zxx_real_channel_bool=True, - zxx_imag_channel_bool=True, - zxy_real_channel_bool=True, - zxy_imag_channel_bool=True, - zyx_real_channel_bool=True, - zyx_imag_channel_bool=True, - zyy_real_channel_bool=True, - zyy_imag_channel_bool=True, - ) - params.workpath = tmp_path - fwr_driver = MagnetotelluricsDriver(params) - fwr_driver.run() - - -def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = ( - tmp_path.parent - / "test_magnetotellurics_fwr_run0" - / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - survey = geoh5.get_entity("survey")[0].copy(copy_children=False) - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - data = {} - uncertainties = {} - components = { - "zxx_real": "Zxx (real)", - "zxx_imag": "Zxx (imag)", - "zxy_real": "Zxy (real)", - "zxy_imag": "Zxy (imag)", - "zyx_real": "Zyx (real)", - "zyx_imag": "Zyx (imag)", - "zyy_real": "Zyy (real)", - "zyy_imag": "Zyy (imag)", - } - - for comp, cname in components.items(): - data[cname] = [] - # uncertainties[f"{cname} uncertainties"] = {} - uncertainties[f"{cname} uncertainties"] = [] - for ind in range(len(survey.channels)): - data_entity = geoh5.get_entity(f"Iteration_0_{comp}_[{ind}]")[0].copy( - parent=survey - ) - data[cname].append(data_entity) - - uncert = survey.add_data( - { - f"uncertainty_{comp}_[{ind}]": { - "values": np.ones_like(data_entity.values) - * np.percentile(np.abs(data_entity.values), 10) - } - } - ) - uncertainties[f"{cname} uncertainties"].append( - uncert.copy(parent=survey) - ) - - data_groups = survey.add_components_data(data) - uncert_groups = survey.add_components_data(uncertainties) - - data_kwargs = {} - for comp, data_group, uncert_group in zip( - components, data_groups, uncert_groups - ): - data_kwargs[f"{comp}_channel"] = data_group.uid - data_kwargs[f"{comp}_uncertainty"] = uncert_group.uid - - orig_zyy_real_1 = geoh5.get_entity("Iteration_0_zyy_real_[0]")[0].values - - # Run the inverse - np.random.seed(0) - params = MagnetotelluricsParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - resolution=0.0, - data_object=survey.uid, - starting_model=0.01, - reference_model=0.01, - alpha_s=1.0, - s_norm=1.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - gradient_type="components", - z_from_topo=False, - upper_bound=0.75, - conductivity_model=1e-2, - max_global_iterations=max_iterations, - initial_beta_ratio=1e2, - prctile=100, - store_sensitivities="ram", - **data_kwargs, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - driver = MagnetotelluricsDriver.start(str(tmp_path / "Inv_run.ui.json")) - - with geoh5.open() as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_zyy_real_1 - if pytest: - check_target(output, target_run, tolerance=0.5) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - # test that one channel works - data_kwargs = {k: v for k, v in data_kwargs.items() if "zxx_real" in k} - geoh5.open() - params = MagnetotelluricsParams( - geoh5=geoh5, - mesh=geoh5.get_entity("mesh")[0].uid, - topography_object=topography.uid, - data_object=survey.uid, - starting_model=0.01, - conductivity_model=1e-2, - max_global_iterations=0, - # store_sensitivities="ram", - **data_kwargs, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - MagnetotelluricsDriver.start(str(tmp_path / "Inv_run.ui.json")) - - -if __name__ == "__main__": - # Full run - test_magnetotellurics_fwr_run(Path("./"), n_grid_points=8, refinement=(4, 8)) - test_magnetotellurics_run( - Path("./"), - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/driver_mvi_test.py b/tests/run_tests/driver_mvi_test.py deleted file mode 100644 index 140ce456e..000000000 --- a/tests/run_tests/driver_mvi_test.py +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.objects import Curve -from geoh5py.workspace import Workspace - -from geoapps.inversion.potential_fields import MagneticVectorParams -from geoapps.inversion.potential_fields.magnetic_vector.driver import ( - MagneticVectorDriver, -) -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_mvi_run = {"data_norm": 6.3559205278626525, "phi_d": 0.00448, "phi_m": 2.411e-06} - - -def test_magnetic_vector_fwr_run( - tmp_path: Path, - n_grid_points=2, - refinement=(2,), -): - np.random.seed(0) - inducing_field = (50000.0, 90.0, 0.0) - # Run the forward - geoh5, _, model, points, topography = setup_inversion_workspace( - tmp_path, - background=0.0, - anomaly=0.05, - refinement=refinement, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - ) - - # Unitest dealing with Curve - survey = Curve.create(geoh5, name=points.name, vertices=points.vertices) - geoh5.remove_entity(points) - - params = MagneticVectorParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - inducing_field_strength=inducing_field[0], - inducing_field_inclination=inducing_field[1], - inducing_field_declination=inducing_field[2], - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model_object=model.parent.uid, - starting_model=model.uid, - starting_inclination=45, - starting_declination=270, - ) - fwr_driver = MagneticVectorDriver(params) - - fwr_driver.run() - - -def test_magnetic_vector_run( - tmp_path: Path, - max_iterations=1, - pytest=True, -): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = ( - tmp_path.parent - / "test_magnetic_vector_fwr_run0" - / "inversion_test.ui.geoh5" - ) - - with Workspace(workpath) as geoh5: - tmi = geoh5.get_entity("Iteration_0_tmi")[0] - orig_tmi = tmi.values.copy() - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - inducing_field = (50000.0, 90.0, 0.0) - - # Run the inverse - params = MagneticVectorParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - inducing_field_strength=inducing_field[0], - inducing_field_inclination=inducing_field[1], - inducing_field_declination=inducing_field[2], - resolution=0.0, - data_object=tmi.parent.uid, - starting_model=1e-4, - reference_model=0.0, - s_norm=0.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - gradient_type="components", - tmi_channel_bool=True, - z_from_topo=False, - tmi_channel=tmi.uid, - tmi_uncertainty=4.0, - max_global_iterations=max_iterations, - initial_beta_ratio=1e1, - store_sensitivities="ram", - prctile=100, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - driver = MagneticVectorDriver.start(str(tmp_path / "Inv_run.ui.json")) - - with Workspace(driver.params.geoh5.h5file) as run_ws: - # Re-open the workspace and get iterations - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_tmi - if pytest: - check_target(output, target_mvi_run) - nan_ind = np.isnan( - run_ws.get_entity("Iteration_0_amplitude_model")[0].values - ) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_magnetic_vector_fwr_run(Path("./"), n_grid_points=20, refinement=(4, 8)) - test_magnetic_vector_run(Path("./"), max_iterations=30, pytest=False) diff --git a/tests/run_tests/driver_tipper_test.py b/tests/run_tests/driver_tipper_test.py deleted file mode 100644 index a65943d18..000000000 --- a/tests/run_tests/driver_tipper_test.py +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.natural_sources import TipperParams -from geoapps.inversion.natural_sources.tipper.driver import TipperDriver -from geoapps.shared_utils.utils import get_inversion_output -from geoapps.utils.testing import check_target, setup_inversion_workspace - -# To test the full run and validate the inversion. -# Move this file out of the test directory and run. - -target_run = {"data_norm": 0.0020959218368283884, "phi_d": 0.123, "phi_m": 3632} - -np.random.seed(0) - - -def test_tipper_fwr_run( - tmp_path: Path, - n_grid_points=2, - refinement=(2,), -): - # Run the forward - geoh5, _, model, survey, topography = setup_inversion_workspace( - tmp_path, - background=1e-3, - anomaly=1.0, - n_electrodes=n_grid_points, - n_lines=n_grid_points, - refinement=refinement, - inversion_type="tipper", - drape_height=15.0, - flatten=False, - ) - params = TipperParams( - forward_only=True, - geoh5=geoh5, - mesh=model.parent.uid, - topography_object=topography.uid, - resolution=0.0, - z_from_topo=False, - data_object=survey.uid, - starting_model=model.uid, - conductivity_model=1e-3, - txz_real_channel_bool=True, - txz_imag_channel_bool=True, - tyz_real_channel_bool=True, - tyz_imag_channel_bool=True, - ) - params.workpath = tmp_path - fwr_driver = TipperDriver(params) - fwr_driver.run() - - -def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True): - workpath = tmp_path / "inversion_test.ui.geoh5" - if pytest: - workpath = tmp_path.parent / "test_tipper_fwr_run0" / "inversion_test.ui.geoh5" - - with Workspace(workpath) as geoh5: - survey = geoh5.get_entity("survey")[0] - mesh = geoh5.get_entity("mesh")[0] - topography = geoh5.get_entity("topography")[0] - - data = {} - uncertainties = {} - components = { - "txz_real": "Txz (real)", - "txz_imag": "Txz (imag)", - "tyz_real": "Tyz (real)", - "tyz_imag": "Tyz (imag)", - } - - for comp, cname in components.items(): - data[cname] = [] - uncertainties[f"{cname} uncertainties"] = [] - for ind in range(len(survey.channels)): - data_entity = geoh5.get_entity(f"Iteration_0_{comp}_[{ind}]")[0].copy( - parent=survey - ) - data[cname].append(data_entity) - - uncert = survey.add_data( - { - f"uncertainty_{comp}_[{ind}]": { - "values": np.ones_like(data_entity.values) - * np.percentile(np.abs(data_entity.values), 5) - } - } - ) - uncertainties[f"{cname} uncertainties"].append(uncert) - - data_groups = survey.add_components_data(data) - uncert_groups = survey.add_components_data(uncertainties) - - data_kwargs = {} - for comp, data_group, uncert_group in zip( - components, data_groups, uncert_groups - ): - data_kwargs[f"{comp}_channel"] = data_group.uid - data_kwargs[f"{comp}_uncertainty"] = uncert_group.uid - - orig_tyz_real_1 = geoh5.get_entity("Iteration_0_tyz_real_[0]")[0].values - - # Run the inverse - np.random.seed(0) - params = TipperParams( - geoh5=geoh5, - mesh=mesh.uid, - topography_object=topography.uid, - resolution=0.0, - data_object=survey.uid, - starting_model=0.001, - reference_model=0.001, - conductivity_model=1e-3, - s_norm=1.0, - x_norm=1.0, - y_norm=1.0, - z_norm=1.0, - alpha_s=1.0, - gradient_type="components", - z_from_topo=False, - upper_bound=0.75, - max_global_iterations=max_iterations, - initial_beta_ratio=1e2, - coolingRate=2, - prctile=100, - chi_factor=0.1, - store_sensitivities="ram", - **data_kwargs, - ) - params.write_input_file(path=tmp_path, name="Inv_run") - driver = TipperDriver.start(str(tmp_path / "Inv_run.ui.json")) - - with geoh5.open() as run_ws: - output = get_inversion_output( - driver.params.geoh5.h5file, driver.params.out_group.uid - ) - output["data"] = orig_tyz_real_1 - if pytest: - check_target(output, target_run, tolerance=0.5) - nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) - inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 - assert np.all(nan_ind == inactive_ind) - - -if __name__ == "__main__": - # Full run - test_tipper_fwr_run(Path("./"), n_grid_points=8, refinement=(4, 4)) - test_tipper_run( - Path("./"), - max_iterations=15, - pytest=False, - ) diff --git a/tests/run_tests/octree_creation_test.py b/tests/run_tests/octree_creation_test.py deleted file mode 100644 index 60885478f..000000000 --- a/tests/run_tests/octree_creation_test.py +++ /dev/null @@ -1,400 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -import pytest -from discretize.utils import mesh_builder_xyz -from geoh5py.objects import Curve, Points, Surface -from geoh5py.shared.utils import compare_entities -from geoh5py.ui_json.utils import str2list -from geoh5py.workspace import Workspace -from scipy.spatial import Delaunay - -from geoapps.driver_base.utils import treemesh_2_octree -from geoapps.octree_creation import OctreeParams -from geoapps.octree_creation.application import OctreeDriver, OctreeMesh -from geoapps.shared_utils.utils import octree_2_treemesh -from geoapps.utils.testing import get_output_workspace - -# pylint: disable=redefined-outer-name - - -@pytest.fixture -def setup_test_octree(): - """ - Create a circle of points and treemesh from extent. - """ - refinement = "4, 4" - minimum_level = 4 - cell_sizes = [5.0, 5.0, 5.0] - n_data = 16 - degree = np.linspace(0, 2 * np.pi, n_data) - locations = np.c_[ - np.cos(degree) * 200.0, np.sin(degree) * 200.0, np.sin(degree * 2.0) * 40.0 - ] - # Add point at origin - locations = np.r_[locations, np.zeros((1, 3))] - depth_core = 400.0 - horizontal_padding = 500.0 - vertical_padding = 200.0 - paddings = [ - [horizontal_padding, horizontal_padding], - [horizontal_padding, horizontal_padding], - [vertical_padding, vertical_padding], - ] - # Create a tree mesh from discretize - treemesh = mesh_builder_xyz( - locations, - cell_sizes, - padding_distance=paddings, - mesh_type="tree", - depth_core=depth_core, - ) - - return ( - cell_sizes, - depth_core, - horizontal_padding, - locations, - minimum_level, - refinement, - treemesh, - vertical_padding, - ) - - -def test_create_octree_radial(tmp_path: Path, setup_test_octree): - ( - cell_sizes, - depth_core, - horizontal_padding, - locations, - minimum_level, - refinement, - treemesh, - vertical_padding, - ) = setup_test_octree - - with Workspace.create(tmp_path / "testOctree.geoh5") as workspace: - points = Points.create(workspace, vertices=locations) - treemesh.refine(treemesh.max_level - minimum_level + 1, finalize=False) - treemesh = OctreeDriver.refine_tree_from_points( - treemesh, - points, - str2list(refinement), - diagonal_balance=False, - finalize=True, - ) - octree = treemesh_2_octree(workspace, treemesh, name="Octree_Mesh") - - # Hard-wire the expected result - assert octree.n_cells == 164742 - - assert OctreeDriver.cell_size_from_level(treemesh, 1) == 10.0 - - # Repeat the creation using the app - refinements = { - "Refinement A object": points.uid, - "Refinement A levels": refinement, - "Refinement A type": "radial", - "Refinement B object": None, - "minimum_level": minimum_level, - } - app = OctreeMesh( - geoh5=workspace, - objects=str(points.uid), - u_cell_size=cell_sizes[0], - v_cell_size=cell_sizes[1], - w_cell_size=cell_sizes[2], - horizontal_padding=horizontal_padding, - vertical_padding=vertical_padding, - diagonal_balance=False, - depth_core=depth_core, - **refinements, - ) - app.trigger_click(None) - - # Re-load the new mesh and compare - with Workspace(get_output_workspace(tmp_path)) as workspace: - rec_octree = workspace.get_entity("Octree_Mesh")[0] - compare_entities(octree, rec_octree, ignore=["_uid"]) - - -def test_create_octree_curve(tmp_path: Path, setup_test_octree): - ( - cell_sizes, - depth_core, - horizontal_padding, - locations, - minimum_level, - refinement, - treemesh, - vertical_padding, - ) = setup_test_octree - - with Workspace.create(tmp_path / "testOctree.geoh5") as workspace: - curve = Curve.create(workspace, vertices=locations) - curve.remove_cells([-1]) - treemesh.refine( - treemesh.max_level - minimum_level + 1, - diagonal_balance=False, - finalize=False, - ) - treemesh = OctreeDriver.refine_tree_from_curve( - treemesh, - curve, - str2list(refinement), - diagonal_balance=False, - finalize=True, - ) - octree = treemesh_2_octree(workspace, treemesh, name="Octree_Mesh") - - assert octree.n_cells == 176915 - - # Repeat the creation using the app - refinements = { - "Refinement A object": curve.uid, - "Refinement A levels": refinement, - "Refinement A type": "radial", - "Refinement B object": None, - "minimum_level": minimum_level, - } - app = OctreeMesh( - geoh5=workspace, - objects=str(curve.uid), - u_cell_size=cell_sizes[0], - v_cell_size=cell_sizes[1], - w_cell_size=cell_sizes[2], - horizontal_padding=horizontal_padding, - vertical_padding=vertical_padding, - depth_core=depth_core, - diagonal_balance=False, - **refinements, - ) - app.trigger_click(None) - - # Re-load the new mesh and compare - with Workspace(get_output_workspace(tmp_path)) as workspace: - rec_octree = workspace.get_entity("Octree_Mesh")[0] - compare_entities(octree, rec_octree, ignore=["_uid"]) - - -def test_create_octree_surface(tmp_path: Path, setup_test_octree): - ( - cell_sizes, - depth_core, - horizontal_padding, - locations, - minimum_level, - refinement, - treemesh, - vertical_padding, - ) = setup_test_octree - - with Workspace.create(tmp_path / "testOctree.geoh5") as workspace: - points = Points.create(workspace, vertices=locations) - treemesh.refine( - treemesh.max_level - minimum_level + 1, - diagonal_balance=False, - finalize=False, - ) - treemesh = OctreeDriver.refine_tree_from_surface( - treemesh, - points, - str2list(refinement), - diagonal_balance=False, - finalize=True, - ) - octree = treemesh_2_octree(workspace, treemesh, name="Octree_Mesh") - - assert octree.n_cells in [ - 168627, - 168396, - ] # Different results on Linux and Windows - - # Repeat the creation using the app - refinements = { - "Refinement A object": points.uid, - "Refinement A levels": refinement, - "Refinement A type": "surface", - "Refinement B object": None, - "minimum_level": minimum_level, - } - app = OctreeMesh( - geoh5=workspace, - objects=str(points.uid), - u_cell_size=cell_sizes[0], - v_cell_size=cell_sizes[1], - w_cell_size=cell_sizes[2], - horizontal_padding=horizontal_padding, - vertical_padding=vertical_padding, - depth_core=depth_core, - diagonal_balance=False, - **refinements, - ) - app.trigger_click(None) - - # Re-load the new mesh and compare - with Workspace(get_output_workspace(tmp_path)) as workspace: - rec_octree = workspace.get_entity("Octree_Mesh")[0] - compare_entities(octree, rec_octree, ignore=["_uid"]) - - -def test_create_octree_driver(tmp_path: Path): - uijson_path = tmp_path.parent / "test_create_octree_curve0" / "Temp" - json_file = next(uijson_path.glob("*.ui.json")) - driver = OctreeDriver.start(str(json_file)) - - with driver.params.geoh5.open(mode="r"): - results = driver.params.geoh5.get_entity("Octree_Mesh") - compare_entities(results[0], results[1], ignore=["_uid"]) - - -def test_create_octree_triangulation(tmp_path: Path, setup_test_octree): - ( - cell_sizes, - depth_core, - horizontal_padding, - locations, - minimum_level, - refinement, - treemesh, - vertical_padding, - ) = setup_test_octree - - # Generate a sphere of points - phi, theta = np.meshgrid( - np.linspace(-np.pi / 2.0, np.pi / 2.0, 32), np.linspace(-np.pi, np.pi, 32) - ) - surf = Delaunay(np.c_[phi.flatten(), theta.flatten()]) - x = np.cos(phi) * np.cos(theta) * 200.0 - y = np.cos(phi) * np.sin(theta) * 200.0 - z = np.sin(phi) * 200.0 - # refinement = "1, 2" - with Workspace.create(tmp_path / "testOctree.geoh5") as workspace: - curve = Curve.create(workspace, vertices=locations) - sphere = Surface.create( - workspace, - vertices=np.c_[x.flatten(), y.flatten(), z.flatten()], - cells=surf.simplices, - ) - treemesh.refine( - treemesh.max_level - minimum_level + 1, - diagonal_balance=False, - finalize=False, - ) - treemesh = OctreeDriver.refine_tree_from_triangulation( - treemesh, - sphere, - str2list(refinement), - diagonal_balance=False, - finalize=True, - ) - octree = treemesh_2_octree(workspace, treemesh, name="Octree_Mesh") - - assert octree.n_cells == 293892 - - # Repeat the creation using the app - refinements = { - "Refinement A object": sphere.uid, - "Refinement A levels": refinement, - "Refinement A type": "surface", - "Refinement B object": None, - "minimum_level": minimum_level, - } - app = OctreeMesh( - geoh5=workspace, - objects=str(curve.uid), - u_cell_size=cell_sizes[0], - v_cell_size=cell_sizes[1], - w_cell_size=cell_sizes[2], - horizontal_padding=horizontal_padding, - vertical_padding=vertical_padding, - depth_core=depth_core, - **refinements, - ) - app.trigger_click(None) - - # Re-load the new mesh and compare - with Workspace(get_output_workspace(tmp_path)) as workspace: - rec_octree = workspace.get_entity("Octree_Mesh")[0] - compare_entities(octree, rec_octree, ignore=["_uid"]) - - -@pytest.mark.parametrize( - "diagonal_balance, exp_values, exp_counts", - [(True, [0, 1], [22, 10]), (False, [0, 1, 2], [22, 8, 2])], -) -def test_octree_diagonal_balance( - tmp_path: Path, diagonal_balance, exp_values, exp_counts -): - workspace = Workspace.create(tmp_path / "testDiagonalBalance.geoh5") - with workspace.open(mode="r+"): - point = [0, 0, 0] - points = Points.create(workspace, vertices=np.array([[150, 0, 150], point])) - - # Repeat the creation using the app - params_dict = { - "geoh5": workspace, - "objects": str(points.uid), - "u_cell_size": 10.0, - "v_cell_size": 10.0, - "w_cell_size": 10.0, - "horizontal_padding": 500.0, - "vertical_padding": 200.0, - "depth_core": 400.0, - "Refinement A object": points.uid, - "Refinement A levels": "1", - "Refinement A type": "radial", - "Refinement A distance": 200, - } - - params = OctreeParams( - **params_dict, diagonal_balance=diagonal_balance, ga_group_name="mesh" - ) - filename = "diag_balance.ui.json" - - params.write_input_file(name=filename, path=tmp_path, validate=False) - - OctreeDriver.start(tmp_path / filename) - - with workspace.open(mode="r"): - results = [] - treemesh = octree_2_treemesh(workspace.get_entity("mesh")[0]) - - ind = treemesh._get_containing_cell_indexes( # pylint: disable=protected-access - point - ) - starting_cell = treemesh[ind] - - level = starting_cell._level # pylint: disable=protected-access - for first_neighbor in starting_cell.neighbors: - neighbors = [] - for neighbor in treemesh[first_neighbor].neighbors: - if isinstance(neighbor, list): - neighbors += neighbor - else: - neighbors.append(neighbor) - - for second_neighbor in neighbors: - compare_cell = treemesh[second_neighbor] - if set(starting_cell.nodes) & set(compare_cell.nodes): - results.append( - np.abs( - level - - compare_cell._level # pylint: disable=protected-access - ) - ) - - values, counts = np.unique(results, return_counts=True) - - assert (values == np.array(exp_values)).all() - assert (counts == np.array(exp_counts)).all() diff --git a/tests/run_tests/peak_finder_test.py b/tests/run_tests/peak_finder_test.py deleted file mode 100644 index 09ea2a406..000000000 --- a/tests/run_tests/peak_finder_test.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.objects import Curve -from geoh5py.shared.utils import compare_entities -from geoh5py.workspace import Workspace -from ipywidgets import Widget - -from geoapps.peak_finder.application import PeakFinder, PeakFinderDriver - -from .. import PROJECT - -# pytest.skip("eliminating conflicting test.", allow_module_level=True) - - -def test_peak_finder_app(tmp_path: Path): - app = PeakFinder(geoh5=str(PROJECT), plot_result=False) - - h5file_path = tmp_path / r"testPeakFinder.geoh5" - - # Create temp workspace - ws = Workspace.create(h5file_path) - - x = np.arange(-2 * np.pi + np.pi / 4, 2 * np.pi, np.pi / 32) - - curve = Curve.create(ws, vertices=np.c_[x, np.zeros((x.shape[0], 2))]) - - for ii in range(5): - c = curve.add_data( - {f"d{ii}": {"values": np.sin(x + np.pi / 8.0 * ii) - 0.1 * ii}} - ) - curve.add_data_to_group(c, property_group="obs") - - line = curve.add_data( - { - "line_id": { - "values": np.ones_like(x), - "value_map": {1: "1", 2: "2", 3: "3"}, - "type": "referenced", - } - } - ) - curve.add_data_to_group(line, property_group="Line") - changes = { - "objects": curve.uid, - "data": curve.find_or_create_property_group(name="obs").uid, - "line_field": line.uid, - "line_id": 1, - "width": 10.0, - "center": 1.0, - "min_amplitude": 1e-2, - "min_width": 1e-2, - "max_migration": 1.0, - "group_auto": True, - } - app.geoh5 = ws - - for param, value in changes.items(): - if isinstance(getattr(app, param), Widget): - getattr(app, param).value = value - else: - setattr(app, param, value) - - app.trigger_click(None) - - anomalies = app.lines.anomalies - assert len(anomalies) == 3, f"Expected 3 groups. Found {len(anomalies)}" - assert all( - [aa["azimuth"] == 270 for aa in anomalies] - ), "Anomalies with wrong azimuth found" - assert [aa["channel_group"]["label"][0] for aa in anomalies] == [ - 4, - 5, - 3, - ], "Grouping different than expected" - - -def test_peak_finder_driver(tmp_path: Path): - uijson_path = tmp_path.parent / "test_peak_finder_app0" / "Temp" - json_file = next(uijson_path.glob("*.ui.json")) - driver = PeakFinderDriver.start(str(uijson_path / json_file)) - - with driver.params.geoh5.open(mode="r"): - results = driver.params.geoh5.get_entity("PointMarkers") - compare_entities(results[0], results[1], ignore=["_uid"]) diff --git a/tests/topography_test.py b/tests/topography_test.py deleted file mode 100644 index 722bb54f2..000000000 --- a/tests/topography_test.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - - -from __future__ import annotations - -from pathlib import Path - -import numpy as np -from geoh5py.workspace import Workspace - -from geoapps.inversion.components import InversionTopography -from geoapps.inversion.potential_fields import MagneticVectorParams -from geoapps.utils.testing import Geoh5Tester - -from . import PROJECT - -geoh5 = Workspace(PROJECT) - - -def setup_params(tmp): - geotest = Geoh5Tester(geoh5, tmp, "test.geoh5", MagneticVectorParams) - geotest.set_param("mesh", "{a8f3b369-10bd-4ca8-8bd6-2d2595bddbdf}") - geotest.set_param("data_object", "{538a7eb1-2218-4bec-98cc-0a759aa0ef4f}") - geotest.set_param("tmi_channel", "{44822654-b6ae-45b0-8886-2d845f80f422}") - geotest.set_param("topography_object", "{ab3c2083-6ea8-4d31-9230-7aad3ec09525}") - geotest.set_param("topography", "{a603a762-f6cb-4b21-afda-3160e725bf7d}") - return geotest.make() - - -def test_get_locations(tmp_path: Path): - ws, params = setup_params(tmp_path) - topo = InversionTopography(ws, params) - locs = topo.get_locations(params.topography_object) - np.testing.assert_allclose( - locs[:, 2], - params.topography.values, - ) - - params.topography = 199.0 - locs = topo.get_locations(params.topography_object) - np.testing.assert_allclose(locs[:, 2], np.ones_like(locs[:, 2]) * 199.0) diff --git a/tests/utils_test.py b/tests/utils_test.py index 24988391b..0b59b3d9c 100644 --- a/tests/utils_test.py +++ b/tests/utils_test.py @@ -1,9 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations @@ -19,17 +21,16 @@ from discretize.utils import mesh_builder_xyz from geoh5py.objects import Curve, Grid2D, Points from geoh5py.workspace import Workspace +from octree_creation_app.driver import OctreeDriver +from simpeg_drivers.utils.utils import calculate_2D_trend from geoapps.driver_base.utils import active_from_xyz, running_mean, treemesh_2_octree -from geoapps.inversion.utils import calculate_2D_trend -from geoapps.octree_creation.driver import OctreeDriver from geoapps.shared_utils.utils import ( densify_curve, downsample_grid, downsample_xy, drape_2_tensor, filter_xy, - get_locations, get_neighbouring_cells, octree_2_treemesh, rotate_xyz, @@ -58,6 +59,7 @@ from . import PROJECT + geoh5 = Workspace(PROJECT) @@ -353,7 +355,7 @@ def test_rectangular_block(): assert [0.0, pos, 5.0] in vertices with pytest.raises(ValueError) as error: - setattr(block, "center", -180.0) + block.center = -180.0 assert "Input value for 'center' must be a list of floats len(3)." in str(error) @@ -364,7 +366,7 @@ def test_rectangular_block(): assert f"Input value for '{attr}' must be a float >0." in str(error) with pytest.raises(ValueError) as error: - setattr(block, "dip", -180.0) + block.dip = -180.0 assert ( "Input value for 'dip' must be a float on the interval [-90, 90] degrees." @@ -372,7 +374,7 @@ def test_rectangular_block(): ) with pytest.raises(ValueError) as error: - setattr(block, "azimuth", -450.0) + block.azimuth = -450.0 assert ( "Input value for 'azimuth' must be a float on the interval [-360, 360] degrees." @@ -380,7 +382,7 @@ def test_rectangular_block(): ) with pytest.raises(ValueError) as error: - setattr(block, "reference", "abc") + block.reference = "abc" assert ( "Input value for 'reference' point should be a str from ['center', 'top']." @@ -434,7 +436,7 @@ def test_sorted_alphanumeric_list(): ] sorted_list = sorted_alphanumeric_list(random.sample(test, len(test))) - assert all(elem == tester for elem, tester in zip(sorted_list, test)) + assert all(elem == tester for elem, tester in zip(sorted_list, test, strict=False)) def test_no_warn_module_not_found(recwarn): @@ -551,15 +553,15 @@ def test_rotation_xyz(): vec = np.c_[1, 0, 0] rot_vec = rotate_xyz(vec, [0, 0], 45) - assert ( - np.linalg.norm(np.cross(rot_vec, [0.7071, 0.7071, 0])) < 1e-8 - ), "Error on positive rotation about origin." + assert np.linalg.norm(np.cross(rot_vec, [0.7071, 0.7071, 0])) < 1e-8, ( + "Error on positive rotation about origin." + ) rot_vec = rotate_xyz(vec, [1, 1], -90) - assert ( - np.linalg.norm(np.cross(rot_vec, [0, 1, 0])) < 1e-8 - ), "Error on negative rotation about point." + assert np.linalg.norm(np.cross(rot_vec, [0, 1, 0])) < 1e-8, ( + "Error on negative rotation about point." + ) def test_running_mean(): @@ -570,12 +572,12 @@ def test_running_mean(): mean_test = (vec[1:] + vec[:-1]) / 2 - assert ( - np.linalg.norm(mean_back[:-1] - mean_test) < 1e-12 - ), "Backward averaging does not match expected values." - assert ( - np.linalg.norm(mean_forw[1:] - mean_test) < 1e-12 - ), "Forward averaging does not match expected values." + assert np.linalg.norm(mean_back[:-1] - mean_test) < 1e-12, ( + "Backward averaging does not match expected values." + ) + assert np.linalg.norm(mean_forw[1:] - mean_test) < 1e-12, ( + "Forward averaging does not match expected values." + ) assert ( np.linalg.norm((mean_test[1:] + mean_test[:-1]) / 2 - mean_cent[1:-1]) < 1e-12 ), "Centered averaging does not match expected values." @@ -662,9 +664,7 @@ def test_treemesh_2_octree(tmp_path: Path): mesh.insert_cells([10, 10, 10], mesh.max_level, finalize=True) omesh = treemesh_2_octree(workspace, mesh, name="test_mesh") assert omesh.n_cells == mesh.n_cells - assert np.all( - (omesh.centroids - mesh.cell_centers[getattr(mesh, "_ubc_order")]) < 1e-14 - ) + assert np.all((omesh.centroids - mesh.cell_centers[mesh._ubc_order]) < 1e-14) # pylint: disable=protected-access expected_refined_cells = [ (0, 0, 6), (0, 0, 7), @@ -803,8 +803,9 @@ def test_filter_xy(): } # Test the windowing functionality w_mask = filter_xy(x_grid, y_grid, window=window) - x_grid_test, y_grid_test = x_grid[w_mask].reshape(5, 9), y_grid[w_mask].reshape( - 5, 9 + x_grid_test, y_grid_test = ( + x_grid[w_mask].reshape(5, 9), + y_grid[w_mask].reshape(5, 9), ) np.testing.assert_allclose( x_grid_test, np.meshgrid(np.arange(1, 10), np.arange(3, 8))[0] @@ -815,8 +816,9 @@ def test_filter_xy(): # Test the downsampling functionality ds_mask = filter_xy(x_grid, y_grid, distance=2) - x_grid_test, y_grid_test = x_grid[ds_mask].reshape(6, 6), y_grid[ds_mask].reshape( - 6, 6 + x_grid_test, y_grid_test = ( + x_grid[ds_mask].reshape(6, 6), + y_grid[ds_mask].reshape(6, 6), ) np.testing.assert_allclose(np.diff(x_grid_test, axis=1), np.full((6, 5), 2)) np.testing.assert_allclose(np.diff(y_grid_test, axis=0), np.full((5, 6), 2)) @@ -824,9 +826,10 @@ def test_filter_xy(): # Test the combo functionality comb_mask = filter_xy(x_grid, y_grid, distance=2, window=window) assert np.all(comb_mask == (w_mask & ds_mask)) - x_grid_test, y_grid_test = x_grid[comb_mask].reshape(2, 4), y_grid[ - comb_mask - ].reshape(2, 4) + x_grid_test, y_grid_test = ( + x_grid[comb_mask].reshape(2, 4), + y_grid[comb_mask].reshape(2, 4), + ) assert np.all((x_grid_test >= 1) & (x_grid_test <= 9)) assert np.all((y_grid_test >= 3) & (y_grid_test <= 7)) np.testing.assert_allclose(np.diff(x_grid_test, axis=1), np.full((2, 3), 2)) @@ -836,8 +839,9 @@ def test_filter_xy(): combo_mask = filter_xy(x_grid_rot, y_grid_rot, distance=2, window=window, angle=-30) xg_test, yg_test = x_grid_rot[comb_mask], y_grid_rot[comb_mask] xy_rot = rotate_xyz(np.c_[xg_test, yg_test], [5, 5], -30) - x_grid_rot_test, y_grid_rot_test = xy_rot[:, 0].reshape(2, 4), xy_rot[:, 1].reshape( - 2, 4 + x_grid_rot_test, y_grid_rot_test = ( + xy_rot[:, 0].reshape(2, 4), + xy_rot[:, 1].reshape(2, 4), ) assert np.all((x_grid_rot_test >= 1) & (x_grid_rot_test <= 9)) assert np.all((y_grid_rot_test >= 3) & (y_grid_rot_test <= 7)) @@ -878,27 +882,6 @@ def test_detrend_xy(): assert "> 0. Value of -2" in str(excinfo.value) -def test_get_locations(tmp_path: Path): - with Workspace.create(tmp_path / "test.geoh5") as workspace: - n_x, n_y = 10, 15 - grid = Grid2D.create( - workspace, - origin=[0, 0, 0], - u_cell_size=20.0, - v_cell_size=30.0, - u_count=n_x, - v_count=n_y, - name="test_grid", - allow_move=False, - ) - base_locs = get_locations(workspace, grid) - - test_data = grid.add_data({"test_data": {"values": np.ones(10 * 15)}}) - data_locs = get_locations(workspace, test_data) - - np.testing.assert_array_equal(base_locs, data_locs) - - def test_densify_curve(tmp_path: Path): with Workspace.create(tmp_path / "test.geoh5") as workspace: curve = Curve.create( @@ -934,7 +917,7 @@ def test_get_neighbouring_cells(): neighbours = get_neighbouring_cells(mesh, [ind]) assert len(neighbours) == 3, "Incorrect number of neighbours axes returned." - assert all( - len(axis) == 2 for axis in neighbours - ), "Incorrect number of neighbours returned." + assert all(len(axis) == 2 for axis in neighbours), ( + "Incorrect number of neighbours returned." + ) assert np.allclose(np.r_[neighbours].flatten(), np.r_[76, 78, 75, 79, 73, 81]) diff --git a/tests/version_test.py b/tests/version_test.py index 356fa95d8..a58cebb42 100644 --- a/tests/version_test.py +++ b/tests/version_test.py @@ -1,10 +1,11 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). - +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations diff --git a/tests/write_default_uijson_test.py b/tests/write_default_uijson_test.py index 9b02595cb..0c18d6dd6 100644 --- a/tests/write_default_uijson_test.py +++ b/tests/write_default_uijson_test.py @@ -1,17 +1,19 @@ -# Copyright (c) 2024 Mira Geoscience Ltd. -# -# This file is part of geoapps. -# -# geoapps is distributed under the terms and conditions of the MIT License -# (see LICENSE file at the root of this source code package). +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2024-2025 Mira Geoscience Ltd. ' +# ' +# This file is part of geoapps. ' +# ' +# geoapps is distributed under the terms and conditions of the MIT License ' +# (see LICENSE file at the root of this source code package). ' +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' from __future__ import annotations from pathlib import Path from geoh5py.ui_json import InputFile +from simpeg_drivers.potential_fields import GravityParams -from geoapps.inversion.potential_fields import GravityParams from geoapps.utils.write_default_uijson import write_default_uijson